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 { ingredientID := uuid.New() quantity := 1.0 unitID := uuid.New() return &contract.CreatePurchaseOrderRequest{ VendorID: uuid.New(), PONumber: "PO-001", TransactionDate: "2026-05-29", Items: []contract.CreatePurchaseOrderItemRequest{ { IngredientID: &ingredientID, PurchaseCategoryID: uuid.New(), Quantity: &quantity, UnitID: &unitID, 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") }