X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/c781f79f3c8cb9a7577ee1574d196988da2719b3..03ef9525ba0e62037b55606b851ee746967a003f:/backup_test.go?ds=inline diff --git a/backup_test.go b/backup_test.go index 2fb218a..81fefd9 100644 --- a/backup_test.go +++ b/backup_test.go @@ -111,6 +111,57 @@ func TestRunningDaemonBackupRestoresTheChatAndLinks(t *testing.T) { require.Equal(t, childText, restoredText) } +func TestBackupKeepsPendingNotificationsAndCompletedRetryReceipts(t *testing.T) { + directory := t.TempDir() + server := newModelFake(t) + test := newDaemonMessageTest(t, directory, server) + _, err := test.messages.Notify(&NotifyInput{ + Source: "check", + ID: "completed", + Text: "A completed result.", + }) + require.NoError(t, err) + require.NoError(t, test.messages.Notifications(test.loops[0])) + require.NoError(t, test.loops[0].turn(t.Context())) + + _, err = test.messages.Notify(&NotifyInput{ + Source: "check", + ID: "pending", + AgentID: test.agents[1].agent.config.ID, + Text: "A pending result.", + }) + require.NoError(t, err) + + clock := newTestClock() + whatsapp, _, _ := whatsappStartTest(t, directory, clock) + archive := filepath.Join(t.TempDir(), "events.tar.gz") + _, err = backupData(t.Context(), directory, archive, whatsapp, test.messages.SnapshotAgents) + require.NoError(t, err) + + restored := t.TempDir() + require.NoError(t, backupRestore(t.Context(), archive, restored)) + + before, err := os.ReadFile(test.messages.path) + require.NoError(t, err) + + after, err := os.ReadFile(filepath.Join(restored, daemonAgentDirName, "messages.json")) + require.NoError(t, err) + require.Equal(t, before, after) + + recovered := newDaemonMessageTest(t, restored, server) + require.Len(t, recovered.Queue(t).Pending, 1) + require.Equal(t, test.agents[1].agent.config.ID, recovered.Queue(t).Pending[0].TargetID) + require.Len(t, recovered.Queue(t).Notifications, 2) + + duplicate, err := recovered.messages.Notify(&NotifyInput{ + Source: "check", + ID: "completed", + Text: "A completed result.", + }) + require.NoError(t, err) + require.Equal(t, "duplicate", duplicate.Status) +} + func TestBackupRestoresEachChildWithItsOwnState(t *testing.T) { dir := t.TempDir() daemonChildConfig(t, dir, "Garden")