]> git.giacomolli.uk - onechat/blobdiff - whatsapp_fake_helper_test.go
Receive images in WhatsApp batches
[onechat] / whatsapp_fake_helper_test.go
index d8bb9bb310a4d15ce31fa45e07026408f6ff0d6a..e936f45c4af856545e13849b0adcf6d78ad57b97 100644 (file)
@@ -83,6 +83,10 @@ type WhatsAppFake struct {
        logoutErr     error
        groups        []*types.GroupInfo
        sendErr       error
+       downloadData  []byte
+       downloadErr   error
+       downloadWait  time.Duration
+       downloads     []whatsmeow.DownloadableMessage
        phones        []string
        logouts       int
        sent          []WhatsAppFakeSend
@@ -168,6 +172,36 @@ func (f *WhatsAppFake) GetJoinedGroups(_ context.Context) ([]*types.GroupInfo, e
        return f.groups, nil
 }
 
+// Download waits for downloadWait, records the request, and returns the made-up
+// image or downloadErr. A canceled context ends the wait.
+func (f *WhatsAppFake) Download(ctx context.Context, message whatsmeow.DownloadableMessage) ([]byte, error) {
+       if f.downloadWait > 0 {
+               timer := time.NewTimer(f.downloadWait)
+               defer timer.Stop()
+
+               select {
+               case <-ctx.Done():
+                       return nil, ctx.Err()
+               case <-timer.C:
+               }
+       }
+
+       f.mutex.Lock()
+       defer f.mutex.Unlock()
+
+       f.downloads = append(f.downloads, message)
+
+       return slices.Clone(f.downloadData), f.downloadErr
+}
+
+// Downloads returns the media requested from the fake.
+func (f *WhatsAppFake) Downloads() []whatsmeow.DownloadableMessage {
+       f.mutex.Lock()
+       defer f.mutex.Unlock()
+
+       return slices.Clone(f.downloads)
+}
+
 // GenerateMessageID returns a new message ID.
 func (f *WhatsAppFake) GenerateMessageID() types.MessageID {
        f.mutex.Lock()