From a57f0c0b5eb005a521e9acb75bdc7418586152e0 Mon Sep 17 00:00:00 2001 From: Gus Date: Tue, 21 Oct 2025 11:45:53 +0800 Subject: [PATCH 1/2] Align category tests with preserved sort --- database/repository/categories_postgres_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/database/repository/categories_postgres_test.go b/database/repository/categories_postgres_test.go index a2185d8b..13a1074f 100644 --- a/database/repository/categories_postgres_test.go +++ b/database/repository/categories_postgres_test.go @@ -149,7 +149,7 @@ func TestCategoriesExistOrUpdatePreservesSortWhenZero(t *testing.T) { } } -func TestCategoriesExistOrUpdateUpdatesSortWhenNonZero(t *testing.T) { +func TestCategoriesExistOrUpdatePreservesSortWhenNonZero(t *testing.T) { conn := newPostgresConnection(t, &database.Category{}) repo := repository.Categories{DB: conn} @@ -183,8 +183,8 @@ func TestCategoriesExistOrUpdateUpdatesSortWhenNonZero(t *testing.T) { 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.Sort != original.Sort { + t.Fatalf("expected sort to remain %d, got %d", original.Sort, updated.Sort) } if updated.Name != "Renamed" { From 76be8ebbdcba5c6f2a8305c5b4c1a545fc36d177 Mon Sep 17 00:00:00 2001 From: Gus Date: Tue, 21 Oct 2025 11:54:09 +0800 Subject: [PATCH 2/2] Refactor category sort preservation test --- .../repository/categories_postgres_test.go | 135 +++++++----------- 1 file changed, 52 insertions(+), 83 deletions(-) diff --git a/database/repository/categories_postgres_test.go b/database/repository/categories_postgres_test.go index 13a1074f..05162c3b 100644 --- a/database/repository/categories_postgres_test.go +++ b/database/repository/categories_postgres_test.go @@ -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 TestCategoriesExistOrUpdatePreservesSortWhenNonZero(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 != 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 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) + } + }) } }