]> git.giacomolli.uk - onechat/blobdiff - whatsapp_image_test.go
Pass caller contexts through WhatsApp callbacks
[onechat] / whatsapp_image_test.go
index f00bc3a5d74fd9413a9d243d6153902552351d81..919d6560c4470a1e3af407c987db4f904935141a 100644 (file)
@@ -15,6 +15,7 @@ import (
        "path/filepath"
        "strings"
        "testing"
+       "testing/synctest"
        "time"
 
        "github.com/stretchr/testify/require"
@@ -103,6 +104,36 @@ func TestWhatsAppImageDownloadCanOutlastNameLookup(t *testing.T) {
        require.Equal(t, data, saved)
 }
 
+func TestWhatsAppRunCancellationEndsAnImageDownload(t *testing.T) {
+       synctest.Test(t, func(t *testing.T) {
+               test := whatsappRetryTest(t)
+               test.fake.downloadWait = time.Hour
+               test.start(t)
+               synctest.Wait()
+
+               acknowledged := make(chan bool, 1)
+               go func() {
+                       acknowledged <- test.fake.Emit(whatsappImageTestEvent(whatsappTestAna, "Keep this caption."))
+               }()
+
+               synctest.Wait()
+
+               select {
+               case <-acknowledged:
+                       t.Fatal("download ended before daemon cancellation")
+               default:
+               }
+
+               test.cancel()
+               require.True(t, <-acknowledged)
+               require.NoError(t, <-test.done)
+               require.Empty(t, test.fake.Downloads())
+               require.Contains(t, test.logs.String(), "context canceled")
+               require.NoError(t, test.whatsapp.state.CloseAll())
+               require.Equal(t, "(image not downloaded)\nKeep this caption.", test.whatsapp.state.Closed()[0].Messages[0].Text)
+       })
+}
+
 func TestWhatsAppImageFailureKeepsTheBatchMoving(t *testing.T) {
        dir := t.TempDir()
        whatsappTestSession(t, dir, true)