flamingo.me/flamingo-commerce/v3@v3.11.0/test/integrationtest/projecttest/tests/frontend/testutil_test.go (about)

     1  //go:build integration
     2  // +build integration
     3  
     4  package frontend_test
     5  
     6  import (
     7  	"fmt"
     8  	"net/http"
     9  	"testing"
    10  
    11  	"github.com/gavv/httpexpect/v2"
    12  )
    13  
    14  type (
    15  	// CartItems list of CartItem
    16  	CartItems []CartItem
    17  	// CartItem used as simple CartItem representation during test
    18  	CartItem struct {
    19  		ProductName     string
    20  		MarketplaceCode string
    21  		Qty             int
    22  	}
    23  )
    24  
    25  const (
    26  	routeCheckoutSubmit     = "/en/checkout"
    27  	routeCheckoutReview     = "/en/checkout/review"
    28  	routeCheckoutPlaceOrder = "/en/checkout/placeorder"
    29  	routeCheckoutSuccess    = "/en/checkout/success"
    30  )
    31  
    32  // CartAddProduct helper
    33  func CartAddProduct(t *testing.T, e *httpexpect.Expect, marketplaceCode string, qty int, variantMarketplaceCode string, deliveryCode string) {
    34  	t.Helper()
    35  	request := e.POST("/en/cart/add/"+marketplaceCode).WithQuery("qty", qty)
    36  	if deliveryCode != "" {
    37  		request = request.WithQuery("deliveryCode", deliveryCode)
    38  	}
    39  	if variantMarketplaceCode != "" {
    40  		request = request.WithQuery("variantMarketplaceCode", variantMarketplaceCode)
    41  	}
    42  	request.Expect().
    43  		Status(http.StatusOK)
    44  }
    45  
    46  // CartApplyVoucher applies a voucher via api
    47  func CartApplyVoucher(t *testing.T, e *httpexpect.Expect, code string) {
    48  	t.Helper()
    49  	request := e.POST("/en/api/cart/applyvoucher").WithQuery("couponCode", code)
    50  	request.Expect().Status(http.StatusOK)
    51  }
    52  
    53  // CartGetItems testhelper
    54  func CartGetItems(t *testing.T, e *httpexpect.Expect) CartItems {
    55  	t.Helper()
    56  	var items CartItems
    57  
    58  	cartItems := e.GET("/en/cart/").Expect().Status(http.StatusOK).JSON().Object().
    59  		Value("DecoratedCart").Object().
    60  		Value("Cart").Object().
    61  		Value("Deliveries").Array().Value(0).Object().
    62  		Value("Cartitems").Array()
    63  
    64  	for _, v := range cartItems.Iter() {
    65  		items = append(items, CartItem{
    66  			ProductName:     v.Object().Value("ProductName").String().Raw(),
    67  			Qty:             int(v.Object().Value("Qty").Number().Raw()),
    68  			MarketplaceCode: v.Object().Value("MarketplaceCode").String().Raw(),
    69  		})
    70  
    71  	}
    72  	return items
    73  }
    74  
    75  // MustContain checks and returns CartItem by marketplaceCode
    76  func (c CartItems) MustContain(t *testing.T, marketplaceCode string) *CartItem {
    77  	t.Helper()
    78  	for _, v := range c {
    79  		if v.MarketplaceCode == marketplaceCode {
    80  			return &v
    81  		}
    82  	}
    83  	t.Fatal(fmt.Sprintf("No CartItem with marketplaceCode: %v Only: %#v", marketplaceCode, c))
    84  	return nil
    85  }
    86  
    87  // SubmitCheckoutForm sends a POST request to the checkout route with provided form params
    88  func SubmitCheckoutForm(t *testing.T, e *httpexpect.Expect, form map[string]interface{}) *httpexpect.Response {
    89  	t.Helper()
    90  	return e.POST(routeCheckoutSubmit).WithForm(form).Expect().Status(http.StatusOK)
    91  }
    92  
    93  // SubmitReviewForm sends a POST request to the review route with provided form params
    94  func SubmitReviewForm(t *testing.T, e *httpexpect.Expect, form map[string]interface{}) *httpexpect.Response {
    95  	t.Helper()
    96  	return e.POST(routeCheckoutReview).WithForm(form).Expect().Status(http.StatusOK)
    97  }