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