package validator import ( "testing" "apskel-pos-be/internal/constants" "apskel-pos-be/internal/contract" "github.com/google/uuid" "github.com/stretchr/testify/require" ) func validCreatePurchaseOrderRequest() *contract.CreatePurchaseOrderRequest { return &contract.CreatePurchaseOrderRequest{ VendorID: uuid.New(), PONumber: "PO-001", TransactionDate: "2026-05-29", Items: []contract.CreatePurchaseOrderItemRequest{ { IngredientID: uuid.New(), Quantity: 1, UnitID: uuid.New(), Amount: 1000, }, }, } } func TestPurchaseOrderValidatorCreateAllowsMissingDueDate(t *testing.T) { validator := NewPurchaseOrderValidator() err, code := validator.ValidateCreatePurchaseOrderRequest(validCreatePurchaseOrderRequest()) require.NoError(t, err) require.Empty(t, code) } func TestPurchaseOrderValidatorCreateRejectsInvalidDueDate(t *testing.T) { validator := NewPurchaseOrderValidator() req := validCreatePurchaseOrderRequest() dueDate := "29-05-2026" req.DueDate = &dueDate err, code := validator.ValidateCreatePurchaseOrderRequest(req) require.Error(t, err) require.Equal(t, constants.MalformedFieldErrorCode, code) require.Contains(t, err.Error(), "due_date must be in YYYY-MM-DD format") } func TestPurchaseOrderValidatorCreateRejectsDueDateBeforeTransactionDate(t *testing.T) { validator := NewPurchaseOrderValidator() req := validCreatePurchaseOrderRequest() dueDate := "2026-05-28" req.DueDate = &dueDate err, code := validator.ValidateCreatePurchaseOrderRequest(req) require.Error(t, err) require.Equal(t, constants.MalformedFieldErrorCode, code) require.Contains(t, err.Error(), "due_date must be after transaction_date") }