]> git.giacomolli.uk - onechat/blobdiff - whatsapp_import_test.go
Exempt tracker metadata from commit signing
[onechat] / whatsapp_import_test.go
index 4bd0a1f3354db5b41b2bab288f9af598cd4343bd..eed22fd0a705c6e3d85954b5024e96cc68b80732 100644 (file)
@@ -486,6 +486,7 @@ func TestWhatsAppImportChildPlanReadsRootCutoffButNotRootImportedDays(t *testing
                        Date: "2025-01-03T10:20:00Z",
                },
        })
                        Date: "2025-01-03T10:20:00Z",
                },
        })
+
        rebuildTestLog(t, childDir, []DatedMessage{
                {
                        Kind: "work",
        rebuildTestLog(t, childDir, []DatedMessage{
                {
                        Kind: "work",
@@ -529,6 +530,7 @@ func TestWhatsAppImportChildRebuildUsesOwnPromptAndCache(t *testing.T) {
                Text: "Keep the root history.",
                Date: "2025-02-01T00:00:00Z",
        }})
                Text: "Keep the root history.",
                Date: "2025-02-01T00:00:00Z",
        }})
+
        rebuildTestLog(t, childDir, []DatedMessage{{
                Kind: "user",
                Text: "Keep the child history.",
        rebuildTestLog(t, childDir, []DatedMessage{{
                Kind: "user",
                Text: "Keep the child history.",
@@ -702,6 +704,49 @@ func TestWhatsAppImportRefusesPendingDeliveriesAndKeepsRestartSafe(t *testing.T)
        }
 }
 
        }
 }
 
+func TestWhatsAppImportBlocksPendingNotificationsButNotCompletedReceipts(t *testing.T) {
+       testCases := []struct {
+               name  string
+               index int
+       }{
+               {
+                       name: "blocks only pending root notifications",
+               },
+               {
+                       name:  "blocks only pending child notifications",
+                       index: 1,
+               },
+       }
+
+       for _, tc := range testCases {
+               t.Run(tc.name, func(t *testing.T) {
+                       server := newModelFake(t)
+                       server.reply = func(w http.ResponseWriter, _ ModelFakeCall) {
+                               modelWriteEvents(w, modelCompletedEvent([]any{modelMessageItem("")}, 100, 0, 5))
+                       }
+
+                       test := newDaemonMessageTest(t, t.TempDir(), server)
+                       _, err := test.messages.Notify(&NotifyInput{
+                               AgentID: test.agents[tc.index].agent.config.ID,
+                               Source:  "check",
+                               ID:      "1",
+                               Text:    "A result.",
+                       })
+                       require.NoError(t, err)
+
+                       target := test.agents[tc.index].agent
+                       directory := test.agents[0].agent.dir
+                       require.ErrorContains(t, whatsappImportIdle(directory, target), "pending deliveries")
+                       require.NoError(t, whatsappImportIdle(directory, test.agents[tc.index^1].agent))
+                       require.NoError(t, test.messages.Notifications(test.loops[tc.index]))
+                       require.NoError(t, test.loops[tc.index].turn(t.Context()))
+                       require.Len(t, test.Queue(t).Notifications, 1)
+                       require.Empty(t, test.Queue(t).Pending)
+                       require.NoError(t, whatsappImportIdle(directory, target))
+               })
+       }
+}
+
 func TestWhatsAppImportPendingDeliveriesBlockOnlyTheirTarget(t *testing.T) {
        dir := t.TempDir()
        t.Setenv("ONECHAT_DIR", dir)
 func TestWhatsAppImportPendingDeliveriesBlockOnlyTheirTarget(t *testing.T) {
        dir := t.TempDir()
        t.Setenv("ONECHAT_DIR", dir)