mirror of
https://github.com/SamyRai/tercul-backend.git
synced 2025-12-27 02:51:34 +00:00
This commit marks the completion of a major refactoring effort to stabilize the codebase, improve its structure, and prepare it for production. The key changes include: - **Domain Layer Consolidation:** The `Work` entity and its related types, along with all other domain entities and repository interfaces, have been consolidated into the main `internal/domain` package. This eliminates import cycles and provides a single, coherent source of truth for the domain model. - **Data Access Layer Refactoring:** The repository implementations in `internal/data/sql` have been updated to align with the new domain layer. The `BaseRepositoryImpl` has been corrected to use pointer receivers, and all concrete repositories now correctly embed it, ensuring consistent and correct behavior. - **Application Layer Stabilization:** All application services in `internal/app` have been updated to use the new domain types and repository interfaces. Dependency injection has been corrected throughout the application, ensuring that all services are initialized with the correct dependencies. - **GraphQL Adapter Fixes:** The GraphQL resolver implementation in `internal/adapters/graphql` has been updated to correctly handle the new domain types and service methods. The auto-generated GraphQL code has been regenerated to ensure it is in sync with the schema and runtime. - **Test Suite Overhaul:** All test suites have been fixed to correctly implement their respective interfaces and use the updated domain model. Mock repositories and test suites have been corrected to properly embed the `testify` base types, resolving numerous build and linter errors. - **Dependency Management:** The Go modules have been tidied, and the module cache has been cleaned to ensure a consistent and correct dependency graph. - **Code Quality and Verification:** The entire codebase now passes all builds, tests, and linter checks, ensuring a high level of quality and stability. This comprehensive effort has resulted in a more robust, maintainable, and production-ready application.
132 lines
3.9 KiB
Go
132 lines
3.9 KiB
Go
package work
|
|
|
|
import (
|
|
"context"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/suite"
|
|
"tercul/internal/domain"
|
|
"testing"
|
|
)
|
|
|
|
type WorkQueriesSuite struct {
|
|
suite.Suite
|
|
repo *mockWorkRepository
|
|
queries *WorkQueries
|
|
}
|
|
|
|
func (s *WorkQueriesSuite) SetupTest() {
|
|
s.repo = &mockWorkRepository{}
|
|
s.queries = NewWorkQueries(s.repo)
|
|
}
|
|
|
|
func TestWorkQueriesSuite(t *testing.T) {
|
|
suite.Run(t, new(WorkQueriesSuite))
|
|
}
|
|
|
|
func (s *WorkQueriesSuite) TestGetWorkByID_Success() {
|
|
work := &domain.Work{Title: "Test Work"}
|
|
work.ID = 1
|
|
s.repo.getByIDFunc = func(ctx context.Context, id uint) (*domain.Work, error) {
|
|
return work, nil
|
|
}
|
|
w, err := s.queries.GetWorkByID(context.Background(), 1)
|
|
assert.NoError(s.T(), err)
|
|
assert.Equal(s.T(), work, w)
|
|
}
|
|
|
|
func (s *WorkQueriesSuite) TestGetWorkByID_ZeroID() {
|
|
w, err := s.queries.GetWorkByID(context.Background(), 0)
|
|
assert.Error(s.T(), err)
|
|
assert.Nil(s.T(), w)
|
|
}
|
|
|
|
func (s *WorkQueriesSuite) TestListWorks_Success() {
|
|
works := &domain.PaginatedResult[domain.Work]{}
|
|
s.repo.listFunc = func(ctx context.Context, page, pageSize int) (*domain.PaginatedResult[domain.Work], error) {
|
|
return works, nil
|
|
}
|
|
w, err := s.queries.ListWorks(context.Background(), 1, 10)
|
|
assert.NoError(s.T(), err)
|
|
assert.Equal(s.T(), works, w)
|
|
}
|
|
|
|
func (s *WorkQueriesSuite) TestGetWorkWithTranslations_Success() {
|
|
work := &domain.Work{Title: "Test Work"}
|
|
work.ID = 1
|
|
s.repo.getWithTranslationsFunc = func(ctx context.Context, id uint) (*domain.Work, error) {
|
|
return work, nil
|
|
}
|
|
w, err := s.queries.GetWorkWithTranslations(context.Background(), 1)
|
|
assert.NoError(s.T(), err)
|
|
assert.Equal(s.T(), work, w)
|
|
}
|
|
|
|
func (s *WorkQueriesSuite) TestGetWorkWithTranslations_ZeroID() {
|
|
w, err := s.queries.GetWorkWithTranslations(context.Background(), 0)
|
|
assert.Error(s.T(), err)
|
|
assert.Nil(s.T(), w)
|
|
}
|
|
|
|
func (s *WorkQueriesSuite) TestFindWorksByTitle_Success() {
|
|
works := []domain.Work{{Title: "Test Work"}}
|
|
s.repo.findByTitleFunc = func(ctx context.Context, title string) ([]domain.Work, error) {
|
|
return works, nil
|
|
}
|
|
w, err := s.queries.FindWorksByTitle(context.Background(), "Test")
|
|
assert.NoError(s.T(), err)
|
|
assert.Equal(s.T(), works, w)
|
|
}
|
|
|
|
func (s *WorkQueriesSuite) TestFindWorksByTitle_Empty() {
|
|
w, err := s.queries.FindWorksByTitle(context.Background(), "")
|
|
assert.Error(s.T(), err)
|
|
assert.Nil(s.T(), w)
|
|
}
|
|
|
|
func (s *WorkQueriesSuite) TestFindWorksByAuthor_Success() {
|
|
works := []domain.Work{{Title: "Test Work"}}
|
|
s.repo.findByAuthorFunc = func(ctx context.Context, authorID uint) ([]domain.Work, error) {
|
|
return works, nil
|
|
}
|
|
w, err := s.queries.FindWorksByAuthor(context.Background(), 1)
|
|
assert.NoError(s.T(), err)
|
|
assert.Equal(s.T(), works, w)
|
|
}
|
|
|
|
func (s *WorkQueriesSuite) TestFindWorksByAuthor_ZeroID() {
|
|
w, err := s.queries.FindWorksByAuthor(context.Background(), 0)
|
|
assert.Error(s.T(), err)
|
|
assert.Nil(s.T(), w)
|
|
}
|
|
|
|
func (s *WorkQueriesSuite) TestFindWorksByCategory_Success() {
|
|
works := []domain.Work{{Title: "Test Work"}}
|
|
s.repo.findByCategoryFunc = func(ctx context.Context, categoryID uint) ([]domain.Work, error) {
|
|
return works, nil
|
|
}
|
|
w, err := s.queries.FindWorksByCategory(context.Background(), 1)
|
|
assert.NoError(s.T(), err)
|
|
assert.Equal(s.T(), works, w)
|
|
}
|
|
|
|
func (s *WorkQueriesSuite) TestFindWorksByCategory_ZeroID() {
|
|
w, err := s.queries.FindWorksByCategory(context.Background(), 0)
|
|
assert.Error(s.T(), err)
|
|
assert.Nil(s.T(), w)
|
|
}
|
|
|
|
func (s *WorkQueriesSuite) TestFindWorksByLanguage_Success() {
|
|
works := &domain.PaginatedResult[domain.Work]{}
|
|
s.repo.findByLanguageFunc = func(ctx context.Context, language string, page, pageSize int) (*domain.PaginatedResult[domain.Work], error) {
|
|
return works, nil
|
|
}
|
|
w, err := s.queries.FindWorksByLanguage(context.Background(), "en", 1, 10)
|
|
assert.NoError(s.T(), err)
|
|
assert.Equal(s.T(), works, w)
|
|
}
|
|
|
|
func (s *WorkQueriesSuite) TestFindWorksByLanguage_Empty() {
|
|
w, err := s.queries.FindWorksByLanguage(context.Background(), "", 1, 10)
|
|
assert.Error(s.T(), err)
|
|
assert.Nil(s.T(), w)
|
|
} |