X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/6915dbdfeb246551bf1132823d820beb321fd58c..3b2bf881d484ba1a33ff77a342564b8195a75c80:/whatsapp_image_test.go diff --git a/whatsapp_image_test.go b/whatsapp_image_test.go index f00bc3a..919d656 100644 --- a/whatsapp_image_test.go +++ b/whatsapp_image_test.go @@ -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)