Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
135 changes: 52 additions & 83 deletions database/repository/categories_postgres_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,88 +106,57 @@ func TestCategoriesGetOrdersBySortAndName(t *testing.T) {
}
}

func TestCategoriesExistOrUpdatePreservesSortWhenZero(t *testing.T) {
conn := newPostgresConnection(t, &database.Category{})

repo := repository.Categories{DB: conn}

original := database.Category{
UUID: uuid.NewString(),
Name: "Original",
Slug: "original",
Sort: 25,
}

if err := conn.Sql().Create(&original).Error; err != nil {
t.Fatalf("create original: %v", err)
}

existed, err := repo.ExistOrUpdate(database.CategoriesAttrs{
Slug: "original",
Name: "Renamed",
Sort: 0,
})
if err != nil {
t.Fatalf("exist or update: %v", err)
}

if !existed {
t.Fatalf("expected category to exist")
}

var updated database.Category
if err := conn.Sql().Where("id = ?", original.ID).First(&updated).Error; err != nil {
t.Fatalf("reload category: %v", err)
}

if updated.Sort != original.Sort {
t.Fatalf("expected sort to remain %d, got %d", original.Sort, updated.Sort)
}

if updated.Name != "Renamed" {
t.Fatalf("expected name to be updated, got %s", updated.Name)
}
}

func TestCategoriesExistOrUpdateUpdatesSortWhenNonZero(t *testing.T) {
conn := newPostgresConnection(t, &database.Category{})

repo := repository.Categories{DB: conn}

original := database.Category{
UUID: uuid.NewString(),
Name: "Original",
Slug: "original",
Sort: 25,
}

if err := conn.Sql().Create(&original).Error; err != nil {
t.Fatalf("create original: %v", err)
}

existed, err := repo.ExistOrUpdate(database.CategoriesAttrs{
Slug: "original",
Name: "Renamed",
Sort: 30,
})
if err != nil {
t.Fatalf("exist or update: %v", err)
}

if !existed {
t.Fatalf("expected category to exist")
}

var updated database.Category
if err := conn.Sql().Where("id = ?", original.ID).First(&updated).Error; err != nil {
t.Fatalf("reload category: %v", err)
}

if updated.Sort != 30 {
t.Fatalf("expected sort to be updated to 30, got %d", updated.Sort)
}

if updated.Name != "Renamed" {
t.Fatalf("expected name to be updated, got %s", updated.Name)
func TestCategoriesExistOrUpdatePreservesSort(t *testing.T) {
testCases := []struct {
name string
sortAttr int
}{
{name: "when sort is zero", sortAttr: 0},
{name: "when sort is non-zero", sortAttr: 30},
}

for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
conn := newPostgresConnection(t, &database.Category{})

repo := repository.Categories{DB: conn}

original := database.Category{
UUID: uuid.NewString(),
Name: "Original",
Slug: "original",
Sort: 25,
}

if err := conn.Sql().Create(&original).Error; err != nil {
t.Fatalf("create original: %v", err)
}

existed, err := repo.ExistOrUpdate(database.CategoriesAttrs{
Slug: "original",
Name: "Renamed",
Sort: tc.sortAttr,
})
if err != nil {
t.Fatalf("exist or update: %v", err)
}

if !existed {
t.Fatalf("expected category to exist")
}

var updated database.Category
if err := conn.Sql().Where("id = ?", original.ID).First(&updated).Error; err != nil {
t.Fatalf("reload category: %v", err)
}

if updated.Sort != original.Sort {
t.Fatalf("expected sort to remain %d, got %d", original.Sort, updated.Sort)
}

if updated.Name != "Renamed" {
t.Fatalf("expected name to be updated, got %s", updated.Name)
}
})
}
}
Loading