package storage import ( "testing" "github.com/denisovdennis/autohero/internal/model" ) func TestFilterCapOfferableQuests_filtersTaken(t *testing.T) { all := []model.Quest{ {ID: 1, Title: "a"}, {ID: 2, Title: "b"}, {ID: 3, Title: "c"}, } taken := map[int64]struct{}{2: {}} out := FilterCapOfferableQuests(all, taken, 10, 42) if len(out) != 2 { t.Fatalf("len=%d want 2", len(out)) } for _, q := range out { if q.ID == 2 { t.Fatal("taken quest should be removed") } } } func TestFilterCapOfferableQuests_capDeterministic(t *testing.T) { all := []model.Quest{ {ID: 10, Title: "a"}, {ID: 20, Title: "b"}, {ID: 30, Title: "c"}, } out1 := FilterCapOfferableQuests(all, nil, 2, 999) out2 := FilterCapOfferableQuests(all, nil, 2, 999) if len(out1) != 2 || len(out2) != 2 { t.Fatalf("cap: len1=%d len2=%d", len(out1), len(out2)) } if out1[0].ID != out2[0].ID || out1[1].ID != out2[1].ID { t.Fatalf("same seed should produce same order: %#v vs %#v", out1, out2) } _ = FilterCapOfferableQuests(all, nil, 2, 1000) } func TestFilterCapOfferableQuests_limitZeroReturnsAll(t *testing.T) { all := []model.Quest{{ID: 1}, {ID: 2}} out := FilterCapOfferableQuests(all, nil, 0, 1) if len(out) != 2 { t.Fatalf("len=%d want 2", len(out)) } }