151 lines
4.3 KiB
Go
151 lines
4.3 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 := 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: ×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)
|
||
})
|
||
}
|