]> git.giacomolli.uk - onechat/blobdiff - backup_test.go
Require consent and review for autosquash
[onechat] / backup_test.go
index 2fb218a584770b9e6fe3ac59e9dab340c1713265..81fefd9affeaa5494254809b4f604ff66047def1 100644 (file)
@@ -111,6 +111,57 @@ func TestRunningDaemonBackupRestoresTheChatAndLinks(t *testing.T) {
        require.Equal(t, childText, restoredText)
 }
 
        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")
 func TestBackupRestoresEachChildWithItsOwnState(t *testing.T) {
        dir := t.TempDir()
        daemonChildConfig(t, dir, "Garden")