package client_test import ( "context" "queryorchestration/internal/client" "queryorchestration/internal/database" "queryorchestration/internal/database/repository" "testing" "github.com/google/uuid" "github.com/pashagolub/pgxmock/v3" "github.com/stretchr/testify/assert" ) func TestUpdate(t *testing.T) { ctx := context.Background() pool, err := pgxmock.NewPool() if err != nil { t.Fatalf("failed to open pgxmock database: %v", err) } queries := repository.New(pool) db := &database.Connection{ Queries: queries, Pool: pool, } svc := client.New(db) c := client.Client{ ID: uuid.New(), Name: "example_name", CanSync: false, } update := client.Update{ ID: c.ID, } pool.ExpectQuery("name: GetClient :one").WithArgs(database.MustToDBUUID(c.ID)). WillReturnRows( pgxmock.NewRows([]string{"id", "name", "canSync"}). AddRow(database.MustToDBUUID(c.ID), c.Name, c.CanSync), ) pool.ExpectExec("name: UpdateClient :exec").WithArgs(c.Name, c.CanSync, database.MustToDBUUID(update.ID)). WillReturnResult(pgxmock.NewResult("", 1)) err = svc.Update(ctx, &update) assert.Nil(t, err) c.CanSync = false update.CanSync = &c.CanSync pool.ExpectQuery("name: GetClient :one").WithArgs(database.MustToDBUUID(c.ID)). WillReturnRows( pgxmock.NewRows([]string{"id", "name", "canSync"}). AddRow(database.MustToDBUUID(c.ID), c.Name, c.CanSync), ) pool.ExpectExec("name: UpdateClient :exec").WithArgs(c.Name, *update.CanSync, database.MustToDBUUID(update.ID)). WillReturnResult(pgxmock.NewResult("", 1)) err = svc.Update(ctx, &update) assert.Nil(t, err) c.Name = "updated_name" update.Name = &c.Name pool.ExpectQuery("name: GetClient :one").WithArgs(database.MustToDBUUID(c.ID)). WillReturnRows( pgxmock.NewRows([]string{"id", "name", "canSync"}). AddRow(database.MustToDBUUID(c.ID), c.Name, c.CanSync), ) pool.ExpectExec("name: UpdateClient :exec").WithArgs(*update.Name, *update.CanSync, database.MustToDBUUID(update.ID)). WillReturnResult(pgxmock.NewResult("", 1)) err = svc.Update(ctx, &update) assert.Nil(t, err) }