+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)
+}
+