package application import ( "context" "errors" "testing" "time" "img_infinite_canvas/internal/domain/design" "img_infinite_canvas/internal/infrastructure/memory" ) func TestUpdateProjectTitlePersistsTrimmedTitle(t *testing.T) { ctx := context.Background() repo := memory.NewProjectRepository() service := NewDesignService(repo, nil, nil, nil, nil) createdAt := time.Date(2026, 7, 5, 12, 0, 0, 0, time.UTC) service.now = func() time.Time { return createdAt.Add(time.Minute) } project := design.Project{ ID: "project-title", Title: "Old title", Brief: "brief", Status: design.StatusReady, UpdatedAt: createdAt, } if err := repo.Save(ctx, project); err != nil { t.Fatal(err) } renamed, err := service.UpdateProjectTitle(ctx, project.ID, " New canvas name ") if err != nil { t.Fatal(err) } if renamed.Title != "New canvas name" { t.Fatalf("unexpected title: %s", renamed.Title) } if !renamed.UpdatedAt.After(createdAt) { t.Fatalf("expected updated timestamp to advance, got %s", renamed.UpdatedAt) } stored, err := repo.Get(ctx, project.ID) if err != nil { t.Fatal(err) } if stored.Title != renamed.Title { t.Fatalf("stored title mismatch: %s", stored.Title) } } func TestUpdateProjectTitleRejectsBlankTitle(t *testing.T) { ctx := context.Background() repo := memory.NewProjectRepository() service := NewDesignService(repo, nil, nil, nil, nil) if _, err := service.UpdateProjectTitle(ctx, "project-title", " "); !errors.Is(err, design.ErrInvalidInput) { t.Fatalf("expected invalid input, got %v", err) } }