152 lines
4.5 KiB
Go
152 lines
4.5 KiB
Go
![]() |
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 := float64(100000)
|
|||
|
cartPurchasesAmount := float64(5000)
|
|||
|
productsGroup := "group"
|
|||
|
productID1 := "1"
|
|||
|
productID2 := "2"
|
|||
|
productID3 := "3"
|
|||
|
productID4 := "4"
|
|||
|
productPrice1 := float64(1000)
|
|||
|
productPrice2 := float64(6000)
|
|||
|
productPrice3 := float64(10000)
|
|||
|
productPrice4 := float64(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: ×tamppb.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: ×tamppb.Timestamp{
|
|||
|
Seconds: 1674546287,
|
|||
|
Nanos: 0,
|
|||
|
},
|
|||
|
})
|
|||
|
|
|||
|
assert.Nil(t, conditions)
|
|||
|
assert.Error(t, err)
|
|||
|
})
|
|||
|
}
|