apskel-pos-backend/internal/processor/unit_processor_test.go
2025-08-03 23:55:51 +07:00

154 lines
3.8 KiB
Go

package processor
import (
"apskel-pos-be/internal/models"
"context"
"testing"
"github.com/google/uuid"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
)
// MockUnitRepository is a mock implementation of the unit repository
type MockUnitRepository struct {
mock.Mock
}
func (m *MockUnitRepository) Create(ctx context.Context, unit *models.Unit) error {
args := m.Called(ctx, unit)
return args.Error(0)
}
func (m *MockUnitRepository) GetByID(ctx context.Context, id, organizationID uuid.UUID) (*models.Unit, error) {
args := m.Called(ctx, id, organizationID)
if args.Get(0) == nil {
return nil, args.Error(1)
}
return args.Get(0).(*models.Unit), args.Error(1)
}
func (m *MockUnitRepository) GetAll(ctx context.Context, organizationID uuid.UUID, outletID *uuid.UUID, page, limit int, search string) ([]*models.Unit, int, error) {
args := m.Called(ctx, organizationID, outletID, page, limit, search)
if args.Get(0) == nil {
return nil, args.Int(1), args.Error(2)
}
return args.Get(0).([]*models.Unit), args.Int(1), args.Error(2)
}
func (m *MockUnitRepository) Update(ctx context.Context, unit *models.Unit) error {
args := m.Called(ctx, unit)
return args.Error(0)
}
func (m *MockUnitRepository) Delete(ctx context.Context, id, organizationID uuid.UUID) error {
args := m.Called(ctx, id, organizationID)
return args.Error(0)
}
func TestUnitProcessor_Create(t *testing.T) {
// Create mock repository
mockRepo := &MockUnitRepository{}
// Create processor
processor := NewUnitProcessor(mockRepo)
// Test data
organizationID := uuid.New()
request := &models.CreateUnitRequest{
Name: "Gram",
Abbreviation: "g",
IsActive: true,
}
// Mock expectations
mockRepo.On("Create", mock.Anything, mock.AnythingOfType("*models.Unit")).Return(nil)
// Execute
result, err := processor.Create(request, organizationID)
// Assertions
assert.NoError(t, err)
assert.NotNil(t, result)
assert.Equal(t, request.Name, result.Name)
assert.Equal(t, request.Abbreviation, result.Abbreviation)
assert.Equal(t, request.IsActive, result.IsActive)
assert.Equal(t, organizationID, result.OrganizationID)
mockRepo.AssertExpectations(t)
}
func TestUnitProcessor_GetByID(t *testing.T) {
// Create mock repository
mockRepo := &MockUnitRepository{}
// Create processor
processor := NewUnitProcessor(mockRepo)
// Test data
unitID := uuid.New()
organizationID := uuid.New()
expectedUnit := &models.Unit{
ID: unitID,
OrganizationID: organizationID,
Name: "Gram",
Abbreviation: "g",
IsActive: true,
}
// Mock expectations
mockRepo.On("GetByID", mock.Anything, unitID, organizationID).Return(expectedUnit, nil)
// Execute
result, err := processor.GetByID(unitID, organizationID)
// Assertions
assert.NoError(t, err)
assert.NotNil(t, result)
assert.Equal(t, expectedUnit.ID, result.ID)
assert.Equal(t, expectedUnit.Name, result.Name)
mockRepo.AssertExpectations(t)
}
func TestUnitProcessor_GetAll(t *testing.T) {
// Create mock repository
mockRepo := &MockUnitRepository{}
// Create processor
processor := NewUnitProcessor(mockRepo)
// Test data
organizationID := uuid.New()
expectedUnits := []*models.Unit{
{
ID: uuid.New(),
OrganizationID: organizationID,
Name: "Gram",
Abbreviation: "g",
IsActive: true,
},
{
ID: uuid.New(),
OrganizationID: organizationID,
Name: "Liter",
Abbreviation: "L",
IsActive: true,
},
}
// Mock expectations
mockRepo.On("GetAll", mock.Anything, organizationID, (*uuid.UUID)(nil), 1, 10, "").Return(expectedUnits, 2, nil)
// Execute
result, err := processor.GetAll(organizationID, nil, 1, 10, "")
// Assertions
assert.NoError(t, err)
assert.NotNil(t, result)
assert.Len(t, result.Data, 2)
assert.Equal(t, 2, result.Pagination.Total)
mockRepo.AssertExpectations(t)
}