gte/internal/process/inbox_test.go

171 lines
4.3 KiB
Go
Raw Normal View History

2021-05-13 08:15:14 +02:00
package process_test
import (
"testing"
2021-09-19 11:59:26 +02:00
"ewintr.nl/go-kit/test"
"ewintr.nl/gte/internal/process"
"ewintr.nl/gte/internal/storage"
"ewintr.nl/gte/internal/task"
"ewintr.nl/gte/pkg/mstore"
2021-05-13 08:15:14 +02:00
)
func TestInboxProcess(t *testing.T) {
for _, tc := range []struct {
2021-05-15 11:46:03 +02:00
name string
messages map[string][]*mstore.Message
expCount int
expMsgs map[string][]*mstore.Message
2021-05-13 08:15:14 +02:00
}{
{
name: "empty",
messages: map[string][]*mstore.Message{
task.FOLDER_INBOX: {},
},
expMsgs: map[string][]*mstore.Message{
task.FOLDER_INBOX: {},
},
},
{
name: "all flavors",
messages: map[string][]*mstore.Message{
task.FOLDER_INBOX: {
{
Subject: "to new",
},
{
Subject: "to recurring",
2021-09-22 18:38:45 +02:00
Body: "recur: 2021-05-14, daily\nid: xxx-xxx-a\nversion: 1\nproject: project\n",
2021-05-13 08:15:14 +02:00
},
{
Subject: "to planned",
2021-09-22 18:38:45 +02:00
Body: "due: 2021-05-14\nid: xxx-xxx-b\nversion: 1\nproject: project\n",
2021-05-13 08:15:14 +02:00
},
{
Subject: "to unplanned",
2021-09-22 18:38:45 +02:00
Body: "id: xxx-xxx-c\nversion: 1\nproject: project\n",
2021-05-13 08:15:14 +02:00
},
},
},
2021-05-15 11:46:03 +02:00
expCount: 4,
2021-05-13 08:15:14 +02:00
expMsgs: map[string][]*mstore.Message{
task.FOLDER_INBOX: {},
task.FOLDER_NEW: {{Subject: "to new"}},
2021-09-22 18:38:45 +02:00
task.FOLDER_RECURRING: {{Subject: "project - to recurring"}},
task.FOLDER_PLANNED: {{Subject: "2021-05-14 (friday) - project - to planned"}},
task.FOLDER_UNPLANNED: {{Subject: "project - to unplanned"}},
2021-05-13 08:15:14 +02:00
},
},
{
name: "cleanup",
messages: map[string][]*mstore.Message{
task.FOLDER_INBOX: {{
2021-09-22 18:38:45 +02:00
Subject: "project - new version",
Body: "id: xxx-xxx\nversion: 3\nproject: project\n",
2021-05-13 08:15:14 +02:00
}},
task.FOLDER_UNPLANNED: {{
Subject: "old version",
2021-09-22 18:38:45 +02:00
Body: "id: xxx-xxx\nversion: 3\nproject: project\n",
2021-05-13 08:15:14 +02:00
}},
},
2021-05-15 11:46:03 +02:00
expCount: 1,
2021-05-13 08:15:14 +02:00
expMsgs: map[string][]*mstore.Message{
task.FOLDER_INBOX: {},
2021-09-22 18:38:45 +02:00
task.FOLDER_UNPLANNED: {{Subject: "project - new version"}},
2021-05-13 08:15:14 +02:00
},
},
{
name: "cleanup version conflict",
messages: map[string][]*mstore.Message{
task.FOLDER_INBOX: {{
2021-09-22 18:38:45 +02:00
Subject: "project - new version",
Body: "id: xxx-xxx\nversion: 3\nproject\n",
2021-05-13 08:15:14 +02:00
}},
task.FOLDER_UNPLANNED: {{
2021-09-22 18:38:45 +02:00
Subject: "project - not really old version",
Body: "id: xxx-xxx\nversion: 5\nproject: project\n",
2021-05-13 08:15:14 +02:00
}},
},
2021-05-15 11:46:03 +02:00
expCount: 1,
2021-05-13 08:15:14 +02:00
expMsgs: map[string][]*mstore.Message{
task.FOLDER_INBOX: {},
2021-09-22 18:38:45 +02:00
task.FOLDER_UNPLANNED: {{Subject: "project - not really old version"}},
2021-05-13 08:15:14 +02:00
},
},
2021-07-10 11:29:48 +02:00
{
name: "remove done",
messages: map[string][]*mstore.Message{
task.FOLDER_INBOX: {{
Subject: "is done",
Body: "id: xxx-xxx\nversion: 1\ndone: true\n",
}},
task.FOLDER_UNPLANNED: {{
Subject: "the task",
Body: "id: xxx-xxx\nversion: 1\n",
}},
},
expCount: 1,
expMsgs: map[string][]*mstore.Message{
task.FOLDER_INBOX: {},
task.FOLDER_UNPLANNED: {},
},
},
2021-08-20 07:38:57 +02:00
{
name: "deduplicate",
messages: map[string][]*mstore.Message{
task.FOLDER_INBOX: {
{
2021-09-22 18:38:45 +02:00
Subject: "project - version 2",
Body: "id: xxx-xxx\nversion: 1\nproject: project\n",
2021-08-20 07:38:57 +02:00
},
{
2021-09-22 18:38:45 +02:00
Subject: "project - version 2b",
Body: "id: xxx-xxx\nversion: 1\nproject: project\n",
2021-08-20 07:38:57 +02:00
},
},
task.FOLDER_UNPLANNED: {{
2021-09-22 18:38:45 +02:00
Subject: "project - the task",
Body: "id: xxx-xxx\nversion: 1\nproject: project\n",
2021-08-20 07:38:57 +02:00
}},
},
expCount: 1,
expMsgs: map[string][]*mstore.Message{
task.FOLDER_INBOX: {},
2021-09-22 18:38:45 +02:00
task.FOLDER_UNPLANNED: {{Subject: "project - version 2b"}},
2021-08-20 07:38:57 +02:00
},
},
2021-05-13 08:15:14 +02:00
} {
t.Run(tc.name, func(t *testing.T) {
mstorer, err := mstore.NewMemory([]string{
task.FOLDER_INBOX,
task.FOLDER_NEW,
task.FOLDER_RECURRING,
task.FOLDER_PLANNED,
task.FOLDER_UNPLANNED,
})
test.OK(t, err)
for folder, messages := range tc.messages {
for _, m := range messages {
test.OK(t, mstorer.Add(folder, m.Subject, m.Body))
}
}
2021-06-25 09:14:27 +02:00
inboxProc := process.NewInbox(storage.NewRemoteRepository(mstorer))
2021-05-13 08:15:14 +02:00
actResult, err := inboxProc.Process()
test.OK(t, err)
2021-05-15 11:46:03 +02:00
test.Equals(t, tc.expCount, actResult.Count)
2021-05-13 08:15:14 +02:00
for folder, expMessages := range tc.expMsgs {
actMessages, err := mstorer.Messages(folder)
test.OK(t, err)
test.Equals(t, len(expMessages), len(actMessages))
if len(expMessages) == 0 {
continue
}
test.Equals(t, expMessages[0].Subject, actMessages[0].Subject)
}
})
}
}