status_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
10	lunatask "git.secluded.site/go-lunatask"
11)
12
13func TestParseTaskStatus(t *testing.T) {
14	t.Parallel()
15
16	tests := []struct {
17		name    string
18		input   string
19		want    lunatask.TaskStatus
20		wantErr bool
21	}{
22		{"later_lower", "later", lunatask.StatusLater, false},
23		{"later_upper", "LATER", lunatask.StatusLater, false},
24		{"later_mixed", "LaTeR", lunatask.StatusLater, false},
25		{"next_lower", "next", lunatask.StatusNext, false},
26		{"next_upper", "NEXT", lunatask.StatusNext, false},
27		{"started_lower", "started", lunatask.StatusInProgress, false},
28		{"started_upper", "STARTED", lunatask.StatusInProgress, false},
29		{"in_progress_lower", "in-progress", lunatask.StatusInProgress, false},
30		{"in_progress_upper", "IN-PROGRESS", lunatask.StatusInProgress, false},
31		{"waiting_lower", "waiting", lunatask.StatusWaiting, false},
32		{"waiting_upper", "WAITING", lunatask.StatusWaiting, false},
33		{"completed_lower", "completed", lunatask.StatusCompleted, false},
34		{"completed_upper", "COMPLETED", lunatask.StatusCompleted, false},
35		{"completed_mixed", "CoMpLeTeD", lunatask.StatusCompleted, false},
36		{"invalid", "invalid", "", true},
37		{"empty", "", "", true},
38		{"numeric", "1", "", true},
39		{"typo", "completd", "", true},
40	}
41
42	for _, testCase := range tests {
43		t.Run(testCase.name, func(t *testing.T) {
44			t.Parallel()
45
46			got, err := lunatask.ParseTaskStatus(testCase.input)
47			if (err != nil) != testCase.wantErr {
48				t.Errorf("ParseTaskStatus(%q) error = %v, wantErr %v", testCase.input, err, testCase.wantErr)
49
50				return
51			}
52
53			if !testCase.wantErr && got != testCase.want {
54				t.Errorf("ParseTaskStatus(%q) = %q, want %q", testCase.input, got, testCase.want)
55			}
56		})
57	}
58}