Files
apskel-pos-backend/internal/processor/team_test.go
T
2026-10-04 21:54:13 +07:00

65 lines
2.5 KiB
Go

package processor
import (
"context"
"errors"
"testing"
"apskel-pos-be/internal/constants"
"apskel-pos-be/internal/entities"
"github.com/google/uuid"
"github.com/stretchr/testify/require"
)
// teamCategoryRepositoryStub serves the two lookups the team rules make. The embedded
// interface is left nil, so any other call panics and shows up in the test.
type teamCategoryRepositoryStub struct {
CategoryRepository
categories []*entities.Category
}
func (s *teamCategoryRepositoryStub) ListParentCategories(ctx context.Context, organizationID uuid.UUID, outletID *uuid.UUID) ([]*entities.Category, error) {
return s.categories, nil
}
func (s *teamCategoryRepositoryStub) GetByID(ctx context.Context, id uuid.UUID) (*entities.Category, error) {
for _, category := range s.categories {
if category.ID == id {
return category, nil
}
}
return nil, errors.New("record not found")
}
func TestListTeamsSkipsParentCategoriesThatAreNotTeams(t *testing.T) {
organizationID := uuid.New()
food := &entities.Category{ID: uuid.New(), OrganizationID: organizationID, Name: "Food", IsTeam: true}
merch := &entities.Category{ID: uuid.New(), OrganizationID: organizationID, Name: "Merchandise", IsTeam: false}
repo := &teamCategoryRepositoryStub{categories: []*entities.Category{food, merch}}
result, err := listTeams(context.Background(), repo, organizationID, nil)
require.NoError(t, err)
require.Len(t, result.Teams, 2)
require.Equal(t, "Food", result.Teams[0].Name)
require.Equal(t, &food.ID, result.Teams[0].CategoryID)
require.Equal(t, constants.PurchaseTeamCentralName, result.Teams[1].Name)
}
func TestResolveTeamSelectionRejectsParentCategoryThatIsNotATeam(t *testing.T) {
organizationID := uuid.New()
food := &entities.Category{ID: uuid.New(), OrganizationID: organizationID, Name: "Food", IsTeam: true}
merch := &entities.Category{ID: uuid.New(), OrganizationID: organizationID, Name: "Merchandise", IsTeam: false}
repo := &teamCategoryRepositoryStub{categories: []*entities.Category{food, merch}}
scope := constants.PurchaseTeamScopeCategory
resolvedScope, resolvedID, err := resolveTeamSelection(context.Background(), repo, organizationID, nil, &scope, &food.ID)
require.NoError(t, err)
require.Equal(t, constants.PurchaseTeamScopeCategory, *resolvedScope)
require.Equal(t, food.ID, *resolvedID)
_, _, err = resolveTeamSelection(context.Background(), repo, organizationID, nil, &scope, &merch.ID)
require.EqualError(t, err, "category Merchandise is not a team")
}