journal_test.go

 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}`