132 lines
5.0 KiB
Go
132 lines
5.0 KiB
Go
package main
|
||
|
||
import (
|
||
"api-tests-for-coupon-service/base"
|
||
"fmt"
|
||
"net/http"
|
||
"strings"
|
||
"testing"
|
||
"time"
|
||
|
||
"github.com/gavv/httpexpect"
|
||
"github.com/google/uuid"
|
||
"github.com/jinzhu/now"
|
||
. "github.com/smartystreets/goconvey/convey"
|
||
)
|
||
|
||
func Test_APPLY_TIMES(t *testing.T) {
|
||
e := httpexpect.New(t, baseurl)
|
||
|
||
Convey("coupon A only can apply one time", t, func() {
|
||
u := uuid.New().String()
|
||
_post1Coupon(e, u, strings.Join([]string{u, "xx"}, ""), typeA, channelID, http.StatusOK)
|
||
_post1Coupon(e, u, strings.Join([]string{u, "xx"}, ""), typeA, channelID, http.StatusBadRequest)
|
||
})
|
||
|
||
Convey("coupon B can apply upto 2 times", t, func() {
|
||
u := uuid.New().String()
|
||
_post1Coupon(e, u, strings.Join([]string{u, "xx"}, ""), typeB, channelID, http.StatusOK)
|
||
_post1Coupon(e, u, strings.Join([]string{u, "xx"}, ""), typeB, channelID, http.StatusOK)
|
||
_post1Coupon(e, u, strings.Join([]string{u, "xx"}, ""), typeB, channelID, http.StatusBadRequest)
|
||
})
|
||
}
|
||
|
||
func Test_REDEEM_TIMES(t *testing.T) {
|
||
e := httpexpect.New(t, baseurl)
|
||
|
||
Convey("coupon A only can redeem one time", t, func() {
|
||
u := uuid.New().String()
|
||
_, cid := _post1Coupon(e, u, strings.Join([]string{u, "xx"}, ""), typeA, channelID, http.StatusOK)
|
||
_redeemCouponByID(e, u, cid, base.RandString(4), http.StatusOK)
|
||
_redeemCouponByID(e, u, cid, base.RandString(4), http.StatusBadRequest)
|
||
})
|
||
|
||
Convey("coupon B can redeem upto 2 times", t, func() {
|
||
u := uuid.New().String()
|
||
_, cid := _post1Coupon(e, u, strings.Join([]string{u, "xx"}, ""), typeB, channelID, http.StatusOK)
|
||
_redeemCouponByID(e, u, cid, base.RandString(4), http.StatusOK)
|
||
_redeemCouponByID(e, u, cid, base.RandString(4), http.StatusOK)
|
||
_redeemCouponByID(e, u, cid, base.RandString(4), http.StatusBadRequest)
|
||
})
|
||
}
|
||
|
||
func Test_REDEEM_BY_SAME_BRAND(t *testing.T) {
|
||
e := httpexpect.New(t, baseurl)
|
||
|
||
Convey("coupon issued by lancome can't be redeemed by parise", t, func() {
|
||
u := uuid.New().String()
|
||
_, cid := _post1CouponWithToken(e, u, strings.Join([]string{u, "xx"}, ""), typeB, channelID, http.StatusOK, jwttony5000d)
|
||
_redeemCouponByID(e, u, cid, base.RandString(4), http.StatusBadRequest)
|
||
})
|
||
}
|
||
|
||
func Test_REDEEM_IN_CURRENT_NATURE_MONTH_SEASON_YEAR(t *testing.T) {
|
||
e := httpexpect.New(t, baseurl)
|
||
|
||
Convey("coupon A can not redeem in next month", t, func() {
|
||
u := uuid.New().String()
|
||
_, cid := _post1Coupon(e, u, strings.Join([]string{u, "xx"}, ""), typeA, channelID, http.StatusOK)
|
||
ct := time.Now().AddDate(0, 0, -31)
|
||
sql := fmt.Sprintf(`UPDATE coupons SET createdTime = "%s" WHERE id = "%s"`, ct, cid)
|
||
_, _ = dbConnection.Exec(sql)
|
||
_redeemCouponByID(e, u, cid, base.RandString(4), http.StatusBadRequest)
|
||
})
|
||
|
||
Convey("coupon C can not redeem since expired", t, func() {
|
||
|
||
u := uuid.New().String()
|
||
_, cid := _post1Coupon(e, u, strings.Join([]string{u, "xx"}, ""), typeC, channelID, http.StatusOK)
|
||
_redeemCouponByID(e, u, cid, base.RandString(4), http.StatusBadRequest)
|
||
})
|
||
|
||
Convey("coupon B can redeem in next month", t, func() {
|
||
|
||
u := uuid.New().String()
|
||
_, cid := _post1Coupon(e, u, strings.Join([]string{u, "xx"}, ""), typeB, channelID, http.StatusOK)
|
||
|
||
ct := now.BeginningOfMonth().AddDate(0, 0, -5).Local() // coupon b 延长了31天。
|
||
sql := fmt.Sprintf(`UPDATE coupons SET createdTime = %d WHERE id = "%s"`, ct.Unix(), cid)
|
||
_, _ = dbConnection.Exec(sql)
|
||
_redeemCouponByID(e, u, cid, base.RandString(4), http.StatusOK)
|
||
})
|
||
|
||
Convey("coupon D can not redeem in the month after next month", t, func() {
|
||
|
||
u := uuid.New().String()
|
||
_, cid := _post1Coupon(e, u, strings.Join([]string{u, "xx"}, ""), typeD, channelID, http.StatusOK)
|
||
|
||
ct := now.BeginningOfMonth().AddDate(0, 0, -35) // 因为月份天数不一致,如果今天是1号或者2号可能会失败。
|
||
sql := fmt.Sprintf(`UPDATE coupons SET createdTime = %d WHERE id = "%s"`, ct.Unix(), cid)
|
||
_, _ = dbConnection.Exec(sql)
|
||
_redeemCouponByID(e, u, cid, base.RandString(4), http.StatusBadRequest)
|
||
})
|
||
}
|
||
|
||
func Test_REDEEM_PERIOD_WITH_OFFSET(t *testing.T) {
|
||
e := httpexpect.New(t, baseurl)
|
||
|
||
Convey("coupon E can redeem after issued", t, func() {
|
||
u := uuid.New().String()
|
||
_, cid := _post1Coupon(e, u, strings.Join([]string{u, "xx"}, ""), typeE, channelID, http.StatusOK)
|
||
_redeemCouponByID(e, u, cid, base.RandString(4), http.StatusOK)
|
||
})
|
||
|
||
Convey("coupon E can redeem after 100 days", t, func() {
|
||
u := uuid.New().String()
|
||
_, cid := _post1Coupon(e, u, strings.Join([]string{u, "xx"}, ""), typeE, channelID, http.StatusOK)
|
||
ct := time.Now().AddDate(0, 0, -100)
|
||
sql := fmt.Sprintf(`UPDATE coupons SET createdTime = "%s" WHERE id = "%s"`, ct, cid)
|
||
_, _ = dbConnection.Exec(sql)
|
||
_redeemCouponByID(e, u, cid, base.RandString(4), http.StatusOK)
|
||
})
|
||
|
||
Convey("coupon E can not redeem after 365 days", t, func() {
|
||
u := uuid.New().String()
|
||
_, cid := _post1Coupon(e, u, strings.Join([]string{u, "xx"}, ""), typeE, channelID, http.StatusOK)
|
||
ct := time.Now().AddDate(0, 0, -365)
|
||
sql := fmt.Sprintf(`UPDATE coupons SET createdTime = "%s" WHERE id = "%s"`, ct, cid)
|
||
_, _ = dbConnection.Exec(sql)
|
||
_redeemCouponByID(e, u, cid, base.RandString(4), http.StatusOK)
|
||
})
|
||
}
|