timeline_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 timelineNoteID = "6aa0d6e8-3b07-40a2-ae46-1bc272a0f472"
15
16func TestCreateTimelineNote_Success(t *testing.T) {
17	t.Parallel()
18
19	server, capture := newPOSTServer(t, "/person_timeline_notes", timelineNoteResponseBody)
20	defer server.Close()
21
22	client := lunatask.NewClient(testToken, lunatask.BaseURL(server.URL))
23
24	noteDate := lunatask.NewDate(time.Date(2021, 1, 10, 0, 0, 0, 0, time.UTC))
25
26	note, err := client.NewTimelineNote(personID).
27		OnDate(noteDate).
28		WithContent("Today we talked about ...").
29		Create(ctx())
30	if err != nil {
31		t.Fatalf("error = %v", err)
32	}
33
34	if note == nil {
35		t.Fatal("returned nil")
36	}
37
38	if note.ID != timelineNoteID {
39		t.Errorf("ID = %q, want %q", note.ID, timelineNoteID)
40	}
41
42	assertBodyField(t, capture.Body, "person_id", personID)
43	assertBodyField(t, capture.Body, "date_on", "2021-01-10")
44	assertBodyField(t, capture.Body, "content", "Today we talked about ...")
45}
46
47func TestCreateTimelineNote_MinimalFields(t *testing.T) {
48	t.Parallel()
49
50	server, capture := newPOSTServer(t, "/person_timeline_notes", timelineNoteResponseBody)
51	defer server.Close()
52
53	client := lunatask.NewClient(testToken, lunatask.BaseURL(server.URL))
54
55	// Per docs: date_on is optional (defaults to today), content is optional
56	_, err := client.NewTimelineNote(personID).
57		Create(ctx())
58	if err != nil {
59		t.Fatalf("error = %v", err)
60	}
61
62	assertBodyField(t, capture.Body, "person_id", personID)
63}
64
65func TestCreateTimelineNote_Errors(t *testing.T) {
66	t.Parallel()
67
68	testErrorCases(t, func(c *lunatask.Client) error {
69		_, err := c.NewTimelineNote(personID).Create(ctx())
70
71		return err //nolint:wrapcheck // test helper
72	})
73}
74
75const timelineNoteResponseBody = `{
76	"person_timeline_note": {
77		"id": "6aa0d6e8-3b07-40a2-ae46-1bc272a0f472",
78		"date_on": "2021-01-10",
79		"created_at": "2021-01-10T10:39:25Z",
80		"updated_at": "2021-01-10T10:39:25Z"
81	}
82}`