package test import ( "RenewCMS/internal/domain/site" "RenewCMS/internal/infrastructure/persistence/database" persistence "RenewCMS/internal/infrastructure/persistence/repositories" "fmt" "testing" ) func TestSiteRepositoryFind(t *testing.T) { db := openUnmigratedSQLite(t) if err := database.Migrate(db, "https://renew.example.com"); err != nil { t.Fatalf("migrate: %v", err) } repo := persistence.NewSiteRepository(db) for i := 0; i < 12; i++ { _, err := repo.Create(site.Site{Name: fmt.Sprintf("Shop %02d", i), Key: fmt.Sprintf("shop%02d", i), BaseURL: "https://shop.example.net", DefaultRobots: site.RobotsIndex}) if err != nil { t.Fatalf("create: %v", err) } } if _, err := repo.Create(site.Site{Name: "100% Café", Key: "cafe", BaseURL: "https://cafe.example.net", DefaultRobots: site.RobotsIndex}); err != nil { t.Fatalf("create: %v", err) } t.Run("Unpaged returns everything with the default first", func(t *testing.T) { page, err := repo.Find(site.ListQuery{}) if err != nil || page.Total != 14 || len(page.Items) != 14 || !page.Items[0].IsDefault { t.Fatalf("page %+v err %v", page.Total, err) } }) t.Run("Paging slices after the search", func(t *testing.T) { page, err := repo.Find(site.ListQuery{Q: "SHOP", Page: 2, Size: 5}) if err != nil || page.Total != 12 || len(page.Items) != 5 || page.Items[0].Name != "Shop 05" { t.Fatalf("page %+v err %v", page, err) } past, err := repo.Find(site.ListQuery{Q: "shop", Page: 9, Size: 5}) if err != nil || past.Total != 12 || past.Items == nil || len(past.Items) != 0 { t.Fatalf("past %+v err %v", past, err) } }) t.Run("Wildcards are literal and accents are ignored", func(t *testing.T) { for _, q := range []string{"%", "cafe", "CAFÉ"} { page, err := repo.Find(site.ListQuery{Q: q}) if err != nil || page.Total != 1 || page.Items[0].Key != "cafe" { t.Fatalf("%q: %+v err %v", q, page, err) } } }) }