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 TestAllRelationshipStrengths(t *testing.T) {
14 t.Parallel()
15
16 strengths := lunatask.AllRelationshipStrengths()
17
18 // Check count
19 if got := len(strengths); got != 7 {
20 t.Fatalf("AllRelationshipStrengths() returned %d values, want 7", got)
21 }
22
23 // Check order (closest to most distant)
24 expected := []lunatask.RelationshipStrength{
25 lunatask.RelationshipFamily,
26 lunatask.RelationshipIntimateFriend,
27 lunatask.RelationshipCloseFriend,
28 lunatask.RelationshipCasualFriend,
29 lunatask.RelationshipAcquaintance,
30 lunatask.RelationshipBusiness,
31 lunatask.RelationshipAlmostStranger,
32 }
33 for i, want := range expected {
34 if strengths[i] != want {
35 t.Errorf("AllRelationshipStrengths()[%d] = %q, want %q", i, strengths[i], want)
36 }
37 }
38
39 // Check roundtrip: each value should be parseable
40 for _, strength := range strengths {
41 parsed, err := lunatask.ParseRelationshipStrength(strength.String())
42 if err != nil {
43 t.Errorf("ParseRelationshipStrength(%q) failed: %v", strength.String(), err)
44 }
45
46 if parsed != strength {
47 t.Errorf("ParseRelationshipStrength(%q) = %q, want %q", strength.String(), parsed, strength)
48 }
49 }
50}
51
52func TestParseRelationshipStrength(t *testing.T) {
53 t.Parallel()
54
55 tests := []struct {
56 name string
57 input string
58 want lunatask.RelationshipStrength
59 wantErr bool
60 }{
61 {"family_lower", "family", lunatask.RelationshipFamily, false},
62 {"family_upper", "FAMILY", lunatask.RelationshipFamily, false},
63 {"family_mixed", "FaMiLy", lunatask.RelationshipFamily, false},
64 {"intimate_friends_lower", "intimate-friends", lunatask.RelationshipIntimateFriend, false},
65 {"intimate_friends_upper", "INTIMATE-FRIENDS", lunatask.RelationshipIntimateFriend, false},
66 {"close_friends_lower", "close-friends", lunatask.RelationshipCloseFriend, false},
67 {"close_friends_upper", "CLOSE-FRIENDS", lunatask.RelationshipCloseFriend, false},
68 {"casual_friends_lower", "casual-friends", lunatask.RelationshipCasualFriend, false},
69 {"casual_friends_upper", "CASUAL-FRIENDS", lunatask.RelationshipCasualFriend, false},
70 {"acquaintances_lower", "acquaintances", lunatask.RelationshipAcquaintance, false},
71 {"acquaintances_upper", "ACQUAINTANCES", lunatask.RelationshipAcquaintance, false},
72 {"business_contacts_lower", "business-contacts", lunatask.RelationshipBusiness, false},
73 {"business_contacts_upper", "BUSINESS-CONTACTS", lunatask.RelationshipBusiness, false},
74 {"almost_strangers_lower", "almost-strangers", lunatask.RelationshipAlmostStranger, false},
75 {"almost_strangers_upper", "ALMOST-STRANGERS", lunatask.RelationshipAlmostStranger, false},
76 {"almost_strangers_mixed", "Almost-Strangers", lunatask.RelationshipAlmostStranger, false},
77 {"invalid", "invalid", "", true},
78 {"empty", "", "", true},
79 {"numeric", "1", "", true},
80 {"typo", "famly", "", true},
81 {"no_hyphen", "closefriends", "", true},
82 }
83
84 for _, testCase := range tests {
85 t.Run(testCase.name, func(t *testing.T) {
86 t.Parallel()
87
88 got, err := lunatask.ParseRelationshipStrength(testCase.input)
89 if (err != nil) != testCase.wantErr {
90 t.Errorf("ParseRelationshipStrength(%q) error = %v, wantErr %v", testCase.input, err, testCase.wantErr)
91
92 return
93 }
94
95 if !testCase.wantErr && got != testCase.want {
96 t.Errorf("ParseRelationshipStrength(%q) = %q, want %q", testCase.input, got, testCase.want)
97 }
98 })
99 }
100}