63 lines
1.6 KiB
Go
63 lines
1.6 KiB
Go
package site_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"backend/internal/modules/site"
|
|
)
|
|
|
|
// fakeRepository is an in-memory site.Repository backing the single
|
|
// site_settings row, used to unit-test site.Service without a real database.
|
|
type fakeRepository struct {
|
|
settings site.Settings
|
|
}
|
|
|
|
func newFakeRepository() *fakeRepository {
|
|
return &fakeRepository{settings: site.Settings{ID: 1}}
|
|
}
|
|
|
|
func (r *fakeRepository) Get(_ context.Context) (*site.Settings, error) {
|
|
cp := r.settings
|
|
return &cp, nil
|
|
}
|
|
|
|
func (r *fakeRepository) Update(_ context.Context, s *site.Settings) error {
|
|
r.settings.Name = s.Name
|
|
r.settings.Description = s.Description
|
|
r.settings.Slug = s.Slug
|
|
return nil
|
|
}
|
|
|
|
func TestService_Update_PersistsFields(t *testing.T) {
|
|
svc := site.NewService(newFakeRepository())
|
|
ctx := context.Background()
|
|
|
|
updated, err := svc.Update(ctx, "My Shop", "A small shop", "my-shop")
|
|
if err != nil {
|
|
t.Fatalf("Update() error = %v", err)
|
|
}
|
|
if updated.Name != "My Shop" || updated.Description != "A small shop" || updated.Slug != "my-shop" {
|
|
t.Fatalf("Update() = %+v, fields not persisted as expected", updated)
|
|
}
|
|
|
|
fetched, err := svc.Get(ctx)
|
|
if err != nil {
|
|
t.Fatalf("Get() error = %v", err)
|
|
}
|
|
if fetched.Name != "My Shop" {
|
|
t.Fatalf("Get() after Update() = %+v, want name %q", fetched, "My Shop")
|
|
}
|
|
}
|
|
|
|
func TestService_Get_DefaultsBeforeAnyUpdate(t *testing.T) {
|
|
svc := site.NewService(newFakeRepository())
|
|
settings, err := svc.Get(context.Background())
|
|
if err != nil {
|
|
t.Fatalf("Get() error = %v", err)
|
|
}
|
|
if settings.Name != "" || settings.Slug != "" {
|
|
t.Fatalf("Get() before any update = %+v, want empty defaults", settings)
|
|
}
|
|
}
|