summaryrefslogtreecommitdiff
path: root/internal/handlers/chains_timeline_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/handlers/chains_timeline_test.go')
-rw-r--r--internal/handlers/chains_timeline_test.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/internal/handlers/chains_timeline_test.go b/internal/handlers/chains_timeline_test.go
new file mode 100644
index 0000000..76ceb68
--- /dev/null
+++ b/internal/handlers/chains_timeline_test.go
@@ -0,0 +1,43 @@
+package handlers
+
+import (
+ "context"
+ "testing"
+ "time"
+)
+
+func TestBuildTimeline_PopulatesChainBadgeForUnlockedTask(t *testing.T) {
+ s, cleanup := setupTestDB(t)
+ defer cleanup()
+
+ chain, err := s.CreateChain("Ham Radio Track", []string{"Study Technician", "Pass exam", "Study General"})
+ if err != nil {
+ t.Fatal(err)
+ }
+ tasks, err := s.GetChainTasks(chain.ID)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ now := time.Now()
+ items, err := BuildTimeline(context.Background(), s, now.Add(-time.Hour), now.Add(24*time.Hour))
+ if err != nil {
+ t.Fatalf("BuildTimeline: %v", err)
+ }
+
+ var found bool
+ for _, item := range items {
+ if item.ID == tasks[0].ID {
+ found = true
+ if item.ChainPosition != 1 || item.ChainTotal != 3 {
+ t.Errorf("ChainPosition/ChainTotal = %d/%d, want 1/3", item.ChainPosition, item.ChainTotal)
+ }
+ }
+ if item.ID == tasks[1].ID || item.ID == tasks[2].ID {
+ t.Errorf("locked chain task %q should not appear in the timeline", item.ID)
+ }
+ }
+ if !found {
+ t.Fatal("expected the unlocked chain task (position 0) to appear in the timeline")
+ }
+}