From 87b255a3566d3ba9120de67c65b6a2b8a19e6e6d Mon Sep 17 00:00:00 2001 From: Pavel Date: Fri, 26 Jan 2024 14:47:44 +0300 Subject: [PATCH] add test create promo --- .../promocode/promocode_controller.go | 4 + tests/e2e/promo_test.go | 184 ++++++++++++++++++ 2 files changed, 188 insertions(+) diff --git a/internal/controller/promocode/promocode_controller.go b/internal/controller/promocode/promocode_controller.go index e1eb1b1..3876843 100644 --- a/internal/controller/promocode/promocode_controller.go +++ b/internal/controller/promocode/promocode_controller.go @@ -27,6 +27,10 @@ func (p *PromoCodeController) CreatePromoCode(c *fiber.Ctx) error { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"}) } + if req.Codeword == "" { + return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "codeword ID is required"}) + } + createdPromoCode, err := p.promoCodeService.CreatePromoCode(c.Context(), &req) if err != nil { p.logger.Error("Failed to create promocode", zap.Error(err)) diff --git a/tests/e2e/promo_test.go b/tests/e2e/promo_test.go index df8caf7..0b68f4b 100644 --- a/tests/e2e/promo_test.go +++ b/tests/e2e/promo_test.go @@ -1 +1,185 @@ package e2e + +import ( + "codeword/internal/models" + "encoding/json" + "fmt" + "github.com/gofiber/fiber/v2" + "github.com/stretchr/testify/assert" + "testing" +) + +func TestPromoCodeControllerE2E(t *testing.T) { + client := fiber.AcquireClient() + + t.Run("CreatePromoCode-success", func(t *testing.T) { + jsonString := `{ + "codeword": "example", + "description": "Example description", + "greetings": "Example greetings", + "dueTo": 1734429225, + "activationCount": 100, + "bonus": { + "privilege": { + "privilegeID": "examplePrivilegeID", + "amount": 50 + }, + "discount": { + "layer": 1, + "factor": 0.2, + "target": "exampleTarget", + "threshold": 500 + } + }, + "outdated": false, + "offLimit": false, + "delete": false + }` + + var reqBody models.PromoCode + err := json.Unmarshal([]byte(jsonString), &reqBody) + assert.NoError(t, err) + + reqJSON, _ := json.Marshal(reqBody) + + req := client.Post(BaseUrl+"/promocode/create").Set("Content-Type", "application/json").Body(reqJSON) + + statusCode, resBody, errs := req.Bytes() + if len(errs) != 0 { + assert.NoError(t, errs[0]) + } + + assert.Equal(t, fiber.StatusCreated, statusCode) + + var response models.PromoCode + err = json.Unmarshal(resBody, &response) + assert.NoError(t, err) + fmt.Println(response) + }) + t.Run("CreatePromoCode-duplicate", func(t *testing.T) { + jsonString := `{ + "codeword": "example", + "description": "Example description", + "greetings": "Example greetings", + "dueTo": 1734429225, + "activationCount": 100, + "bonus": { + "privilege": { + "privilegeID": "examplePrivilegeID", + "amount": 50 + }, + "discount": { + "layer": 1, + "factor": 0.2, + "target": "exampleTarget", + "threshold": 500 + } + }, + "outdated": false, + "offLimit": false, + "delete": false + }` + + var reqBody models.PromoCode + err := json.Unmarshal([]byte(jsonString), &reqBody) + assert.NoError(t, err) + + reqJSON, _ := json.Marshal(reqBody) + + req := client.Post(BaseUrl+"/promocode/create").Set("Content-Type", "application/json").Body(reqJSON) + + statusCode, resBody, errs := req.Bytes() + if len(errs) != 0 { + assert.Error(t, errs[0]) + } + + assert.Equal(t, fiber.StatusBadRequest, statusCode) + + var response map[string]interface{} + err = json.Unmarshal(resBody, &response) + assert.NoError(t, err) + fmt.Println(response["error"]) + }) + t.Run("CreatePromoCode-invalid request payload", func(t *testing.T) { + jsonString := `{ + "example": "example", + "description": "Example description", + "greetings": "Example greetings", + "dueTo": 1734429225, + "activationCount": 100, + "bonus": { + "privilege": { + "privilegeID": "examplePrivilegeID", + "amount": 50 + }, + "discount": { + "layer": 1, + "factor": 0.2, + "target": "exampleTarget", + "threshold": 500 + } + }, + "outdated": false, + "offLimit": false, + "delete": false + }` + + req := client.Post(BaseUrl+"/promocode/create").Set("Content-Type", "application/json").Body([]byte(jsonString)) + + statusCode, resBody, errs := req.Bytes() + if len(errs) != 0 { + assert.Error(t, errs[0]) + } + + assert.Equal(t, fiber.StatusBadRequest, statusCode) + + var response map[string]interface{} + err := json.Unmarshal(resBody, &response) + assert.NoError(t, err) + fmt.Println(response["error"]) + }) + t.Run("CreatePromoCode-nil codeword", func(t *testing.T) { + jsonString := `{ + "description": "Example description", + "greetings": "Example greetings", + "dueTo": 1734429225, + "activationCount": 100, + "bonus": { + "privilege": { + "privilegeID": "examplePrivilegeID", + "amount": 50 + }, + "discount": { + "layer": 1, + "factor": 0.2, + "target": "exampleTarget", + "threshold": 500 + } + }, + "outdated": false, + "offLimit": false, + "delete": false + }` + + var reqBody models.PromoCode + err := json.Unmarshal([]byte(jsonString), &reqBody) + assert.NoError(t, err) + + reqJSON, _ := json.Marshal(reqBody) + + req := client.Post(BaseUrl+"/promocode/create").Set("Content-Type", "application/json").Body(reqJSON) + + statusCode, resBody, errs := req.Bytes() + if len(errs) != 0 { + assert.Error(t, errs[0]) + } + + assert.Equal(t, fiber.StatusBadRequest, statusCode) + + var response map[string]interface{} + err = json.Unmarshal(resBody, &response) + assert.NoError(t, err) + fmt.Println(response["error"]) + }) + +}