discount/internal/utils/constitute_conditions_test.go

151 lines
4.3 KiB
Go
Raw Normal View History

2023-07-04 04:04:31 +00:00
package utils_test
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
"google.golang.org/protobuf/types/known/timestamppb"
"penahub.gitlab.yandexcloud.net/pena-services/accruals-service/internal/core"
"penahub.gitlab.yandexcloud.net/pena-services/accruals-service/internal/models"
"penahub.gitlab.yandexcloud.net/pena-services/accruals-service/internal/proto/discount"
"penahub.gitlab.yandexcloud.net/pena-services/accruals-service/internal/utils"
)
func TestConstituteConditions(t *testing.T) {
userID := "1"
userType := "nkvo"
purchasesAmount := uint64(100000)
cartPurchasesAmount := uint64(5000)
productsGroup := "group"
productID1 := "1"
productID2 := "2"
productID3 := "3"
productID4 := "4"
productPrice1 := uint64(1000)
productPrice2 := uint64(6000)
productPrice3 := uint64(10000)
productPrice4 := uint64(4000)
productTerm1 := uint64(14)
productTerm2 := uint64(16)
productUsage1 := uint64(24)
productUsage2 := uint64(14)
coupon := "coupon"
period := models.PeriodCondition{
From: time.Unix(1674546287, 0).UTC(),
To: time.Unix(1674546287, 0).UTC(),
}
t.Run("Формирование условий поиска с пустыми значениями", func(t *testing.T) {
conditions, _ := utils.ConstituteConditions(&discount.ApplyDiscountRequest{})
assert.Nil(t, conditions)
})
t.Run("Формирование условий поиска с nil", func(t *testing.T) {
conditions, _ := utils.ConstituteConditions(nil)
assert.Nil(t, conditions)
})
t.Run("Формирование условий поиска с заполненной информацией", func(t *testing.T) {
conditions, err := utils.ConstituteConditions(&discount.ApplyDiscountRequest{
UserInformation: &discount.UserInformation{
ID: userID,
Type: userType,
PurchasesAmount: purchasesAmount,
CartPurchasesAmount: cartPurchasesAmount,
},
Products: []*discount.ProductInformation{
{ID: productID1, Price: productPrice1, Term: &productTerm1, Group: &productsGroup},
{ID: productID2, Price: productPrice2, Term: &productTerm2, Group: &productsGroup},
{ID: productID3, Price: productPrice3, Usage: &productUsage1},
{ID: productID4, Price: productPrice4, Term: &productTerm2, Usage: &productUsage2},
},
Coupon: &coupon,
Date: &timestamppb.Timestamp{
Seconds: 1674546287,
Nanos: 0,
},
})
assert.Nil(t, err)
assert.Equal(t, &core.DiscountConditions{
Common: core.CommonDiscountCondition{
User: userID,
UserType: userType,
PurchasesAmount: purchasesAmount,
CartPurchasesAmount: cartPurchasesAmount,
Coupon: &coupon,
Period: period,
},
Optionals: []core.OptionalDiscounCondition{
{
Product: &productID1,
PriceFrom: &productPrice1,
Group: &productsGroup,
Term: &productTerm1,
},
{
Product: &productID1,
Group: &productsGroup,
Term: &productTerm1,
},
{
Product: &productID2,
PriceFrom: &productPrice2,
Group: &productsGroup,
Term: &productTerm2,
},
{
Product: &productID2,
Group: &productsGroup,
Term: &productTerm2,
},
{
Product: &productID3,
PriceFrom: &productPrice3,
Usage: &productUsage1,
},
{
Product: &productID3,
Usage: &productUsage1,
},
{
Product: &productID4,
PriceFrom: &productPrice4,
Term: &productTerm2,
Usage: &productUsage2,
},
{
Product: &productID4,
Term: &productTerm2,
Usage: &productUsage2,
},
},
}, conditions)
})
t.Run("Формирование условий поиска с наличием nil'ого продукта", func(t *testing.T) {
conditions, err := utils.ConstituteConditions(&discount.ApplyDiscountRequest{
UserInformation: &discount.UserInformation{
ID: userID,
Type: userType,
PurchasesAmount: purchasesAmount,
CartPurchasesAmount: cartPurchasesAmount,
},
Products: []*discount.ProductInformation{
{ID: productID1, Price: productPrice1, Term: &productTerm1, Group: &productsGroup},
nil,
},
Date: &timestamppb.Timestamp{
Seconds: 1674546287,
Nanos: 0,
},
})
assert.Nil(t, conditions)
assert.Error(t, err)
})
}