1// SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
2//
3// SPDX-License-Identifier: AGPL-3.0-or-later
4
5package lunatask_test
6
7import (
8 "testing"
9 "time"
10
11 lunatask "git.secluded.site/go-lunatask"
12)
13
14const journalEntryID = "6aa0d6e8-3b07-40a2-ae46-1bc272a0f472"
15
16func TestCreateJournalEntry_Success(t *testing.T) {
17 t.Parallel()
18
19 server, capture := newPOSTServer(t, "/journal_entries", journalEntryResponseBody)
20 defer server.Close()
21
22 client := lunatask.NewClient(testToken, lunatask.BaseURL(server.URL))
23
24 entryDate := lunatask.NewDate(time.Date(2021, 1, 10, 0, 0, 0, 0, time.UTC))
25
26 entry, err := client.NewJournalEntry(entryDate).
27 WithContent("Today was a tough day, but on the other side...").
28 Create(ctx())
29 if err != nil {
30 t.Fatalf("error = %v", err)
31 }
32
33 if entry == nil {
34 t.Fatal("returned nil")
35 }
36
37 if entry.ID != journalEntryID {
38 t.Errorf("ID = %q, want %q", entry.ID, journalEntryID)
39 }
40
41 assertBodyField(t, capture.Body, "date_on", "2021-01-10")
42 assertBodyField(t, capture.Body, "content", "Today was a tough day, but on the other side...")
43}
44
45func TestCreateJournalEntry_WithName(t *testing.T) {
46 t.Parallel()
47
48 server, capture := newPOSTServer(t, "/journal_entries", journalEntryResponseBody)
49 defer server.Close()
50
51 client := lunatask.NewClient(testToken, lunatask.BaseURL(server.URL))
52
53 entryDate := lunatask.NewDate(time.Date(2021, 1, 10, 0, 0, 0, 0, time.UTC))
54
55 _, err := client.NewJournalEntry(entryDate).
56 WithName("Custom Title").
57 WithContent("Some content").
58 Create(ctx())
59 if err != nil {
60 t.Fatalf("error = %v", err)
61 }
62
63 assertBodyField(t, capture.Body, "date_on", "2021-01-10")
64 assertBodyField(t, capture.Body, "name", "Custom Title")
65 assertBodyField(t, capture.Body, "content", "Some content")
66}
67
68func TestCreateJournalEntry_Errors(t *testing.T) {
69 t.Parallel()
70
71 testErrorCases(t, func(c *lunatask.Client) error {
72 entryDate := lunatask.NewDate(time.Date(2021, 1, 10, 0, 0, 0, 0, time.UTC))
73 _, err := c.NewJournalEntry(entryDate).Create(ctx())
74
75 return err //nolint:wrapcheck // test helper
76 })
77}
78
79const journalEntryResponseBody = `{
80 "journal_entry": {
81 "id": "6aa0d6e8-3b07-40a2-ae46-1bc272a0f472",
82 "date_on": "2021-01-10",
83 "created_at": "2021-01-10T10:39:25Z",
84 "updated_at": "2021-01-10T10:39:25Z"
85 }
86}`