add some promo tests
This commit is contained in:
parent
68906556b8
commit
02a9518b2c
@ -11,6 +11,7 @@ import (
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
"log"
|
||||
"strconv"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@ -18,8 +19,6 @@ import (
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
// todo add another tests
|
||||
|
||||
const mongoURI = "mongodb://test:test@127.0.0.1:27020/?authMechanism=SCRAM-SHA-256&authSource=admin&directConnection=true"
|
||||
|
||||
// codeword unit tests
|
||||
@ -142,4 +141,378 @@ func TestGetRecoveryRecord(t *testing.T) {
|
||||
_ = database.Drop(ctx)
|
||||
}
|
||||
|
||||
// promocode unit tests
|
||||
// promoCode unit tests
|
||||
|
||||
func TestInitPromoCodeIndexes(t *testing.T) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
defer cancel()
|
||||
mongoClient, err := mongo.Connect(ctx, options.Client().ApplyURI(mongoURI))
|
||||
require.NoError(t, err)
|
||||
|
||||
defer func() {
|
||||
_ = mongoClient.Disconnect(ctx)
|
||||
}()
|
||||
|
||||
database := mongoClient.Database("admin")
|
||||
promoCode := database.Collection("promoCode")
|
||||
err = repository.InitPromoCodeIndexes(ctx, promoCode)
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestCreatePromoCode(t *testing.T) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
defer cancel()
|
||||
|
||||
mongoClient, err := mongo.Connect(ctx, options.Client().ApplyURI(mongoURI))
|
||||
require.NoError(t, err)
|
||||
defer func() {
|
||||
_ = mongoClient.Disconnect(ctx)
|
||||
}()
|
||||
|
||||
database := mongoClient.Database("admin")
|
||||
promoCode := database.Collection("promoCode")
|
||||
_ = promoCode.Drop(ctx)
|
||||
|
||||
userRepo := repository.NewPromoCodeRepository(promoCode)
|
||||
|
||||
err = repository.InitPromoCodeIndexes(ctx, promoCode)
|
||||
assert.NoError(t, err)
|
||||
|
||||
t.Run("CreatePromoCode - success", func(t *testing.T) {
|
||||
req := &models.PromoCode{
|
||||
Codeword: "test_codeword",
|
||||
Description: faker.String(),
|
||||
Greetings: faker.String(),
|
||||
DueTo: 1737280065,
|
||||
ActivationCount: 100,
|
||||
}
|
||||
createdPromoCode, err := userRepo.CreatePromoCode(ctx, req)
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, createdPromoCode)
|
||||
assert.Equal(t, "test_codeword", createdPromoCode.Codeword)
|
||||
})
|
||||
|
||||
t.Run("CreatePromoCode - duplicate codeword", func(t *testing.T) {
|
||||
req := &models.PromoCode{
|
||||
Codeword: "test_codeword",
|
||||
Description: faker.String(),
|
||||
Greetings: faker.String(),
|
||||
DueTo: 1737280065,
|
||||
ActivationCount: 100,
|
||||
}
|
||||
_, err := userRepo.CreatePromoCode(ctx, req)
|
||||
assert.Error(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
func TestEditPromoCode(t *testing.T) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
defer cancel()
|
||||
|
||||
mongoClient, err := mongo.Connect(ctx, options.Client().ApplyURI(mongoURI))
|
||||
require.NoError(t, err)
|
||||
defer func() {
|
||||
_ = mongoClient.Disconnect(ctx)
|
||||
}()
|
||||
|
||||
database := mongoClient.Database("admin")
|
||||
promoCode := database.Collection("promoCode")
|
||||
_ = promoCode.Drop(ctx)
|
||||
|
||||
userRepo := repository.NewPromoCodeRepository(promoCode)
|
||||
|
||||
err = repository.InitPromoCodeIndexes(ctx, promoCode)
|
||||
assert.NoError(t, err)
|
||||
|
||||
req := &models.PromoCode{
|
||||
Codeword: "test_codeword",
|
||||
Description: faker.String(),
|
||||
Greetings: faker.String(),
|
||||
DueTo: 1737280065,
|
||||
ActivationCount: 100,
|
||||
}
|
||||
createdPromoCode, err := userRepo.CreatePromoCode(ctx, req)
|
||||
require.NoError(t, err)
|
||||
|
||||
newDescription := "New Description"
|
||||
|
||||
t.Run("EditPromoCode - success", func(t *testing.T) {
|
||||
editReq := &models.ReqEditPromoCode{
|
||||
ID: createdPromoCode.ID.Hex(),
|
||||
Description: &newDescription,
|
||||
}
|
||||
editedPromoCode, err := userRepo.EditPromoCode(ctx, editReq)
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, editedPromoCode)
|
||||
assert.Equal(t, "New Description", editedPromoCode.Description)
|
||||
})
|
||||
|
||||
t.Run("EditPromoCode - promo code not found", func(t *testing.T) {
|
||||
nonExistingID := primitive.NewObjectID().Hex()
|
||||
editReq := &models.ReqEditPromoCode{
|
||||
ID: nonExistingID,
|
||||
}
|
||||
_, err := userRepo.EditPromoCode(ctx, editReq)
|
||||
assert.Error(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
func TestGetPromoCodeByID(t *testing.T) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
defer cancel()
|
||||
|
||||
mongoClient, err := mongo.Connect(ctx, options.Client().ApplyURI(mongoURI))
|
||||
require.NoError(t, err)
|
||||
defer func() {
|
||||
_ = mongoClient.Disconnect(ctx)
|
||||
}()
|
||||
|
||||
database := mongoClient.Database("admin")
|
||||
promoCode := database.Collection("promoCode")
|
||||
_ = promoCode.Drop(ctx)
|
||||
|
||||
userRepo := repository.NewPromoCodeRepository(promoCode)
|
||||
|
||||
err = repository.InitPromoCodeIndexes(ctx, promoCode)
|
||||
assert.NoError(t, err)
|
||||
|
||||
req := &models.PromoCode{
|
||||
Codeword: "test_codeword",
|
||||
Description: faker.String(),
|
||||
Greetings: faker.String(),
|
||||
DueTo: 1737280065,
|
||||
ActivationCount: 100,
|
||||
}
|
||||
createdPromoCode, err := userRepo.CreatePromoCode(ctx, req)
|
||||
require.NoError(t, err)
|
||||
|
||||
t.Run("GetPromoCodeByID - success", func(t *testing.T) {
|
||||
result, err := userRepo.GetPromoCodeByID(ctx, createdPromoCode.ID)
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, result)
|
||||
assert.Equal(t, createdPromoCode.Codeword, result.Codeword)
|
||||
})
|
||||
|
||||
t.Run("GetPromoCodeByID - promo code not found", func(t *testing.T) {
|
||||
nonExistingID := primitive.NewObjectID()
|
||||
_, err := userRepo.GetPromoCodeByID(ctx, nonExistingID)
|
||||
assert.Error(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
func TestGetPromoCodesList(t *testing.T) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
defer cancel()
|
||||
|
||||
mongoClient, err := mongo.Connect(ctx, options.Client().ApplyURI(mongoURI))
|
||||
require.NoError(t, err)
|
||||
defer func() {
|
||||
_ = mongoClient.Disconnect(ctx)
|
||||
}()
|
||||
|
||||
database := mongoClient.Database("admin")
|
||||
promoCode := database.Collection("promoCode")
|
||||
_ = promoCode.Drop(ctx)
|
||||
|
||||
userRepo := repository.NewPromoCodeRepository(promoCode)
|
||||
|
||||
err = repository.InitPromoCodeIndexes(ctx, promoCode)
|
||||
assert.NoError(t, err)
|
||||
for i := 0; i < 1111; i++ {
|
||||
|
||||
req := &models.PromoCode{
|
||||
Codeword: "test" + faker.String() + strconv.Itoa(i),
|
||||
Description: faker.String(),
|
||||
Greetings: faker.String(),
|
||||
DueTo: 1737280065,
|
||||
ActivationCount: 100,
|
||||
Delete: faker.Bool(),
|
||||
Outdated: faker.Bool(),
|
||||
OffLimit: faker.Bool(),
|
||||
}
|
||||
createdPromoCode, err := userRepo.CreatePromoCode(ctx, req)
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, createdPromoCode)
|
||||
}
|
||||
t.Run("GetPromoCodesList - true", func(t *testing.T) {
|
||||
filter := models.GetPromoCodesListReqFilter{
|
||||
Text: "test",
|
||||
Active: true,
|
||||
}
|
||||
req := &models.GetPromoCodesListReq{
|
||||
Page: 0,
|
||||
Limit: 10,
|
||||
Filter: filter,
|
||||
}
|
||||
promoCodes, count, err := userRepo.GetPromoCodesList(ctx, req)
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, promoCodes)
|
||||
assert.True(t, count >= 0)
|
||||
})
|
||||
|
||||
t.Run("GetPromoCodesList - false", func(t *testing.T) {
|
||||
filter := models.GetPromoCodesListReqFilter{
|
||||
Text: "test",
|
||||
Active: false,
|
||||
}
|
||||
req := &models.GetPromoCodesListReq{
|
||||
Page: 0,
|
||||
Limit: 10,
|
||||
Filter: filter,
|
||||
}
|
||||
promoCodes, count, err := userRepo.GetPromoCodesList(ctx, req)
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, promoCodes)
|
||||
assert.True(t, count >= 0)
|
||||
})
|
||||
}
|
||||
|
||||
func TestActivatePromo(t *testing.T) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
defer cancel()
|
||||
|
||||
mongoClient, err := mongo.Connect(ctx, options.Client().ApplyURI(mongoURI))
|
||||
require.NoError(t, err)
|
||||
defer func() {
|
||||
_ = mongoClient.Disconnect(ctx)
|
||||
}()
|
||||
|
||||
database := mongoClient.Database("admin")
|
||||
promoCode := database.Collection("promoCode")
|
||||
_ = promoCode.Drop(ctx)
|
||||
|
||||
userRepo := repository.NewPromoCodeRepository(promoCode)
|
||||
|
||||
err = repository.InitPromoCodeIndexes(ctx, promoCode)
|
||||
assert.NoError(t, err)
|
||||
|
||||
req := &models.PromoCode{
|
||||
Codeword: "test_codeword",
|
||||
Description: faker.String(),
|
||||
Greetings: faker.String(),
|
||||
DueTo: 1737280065,
|
||||
ActivationCount: 100,
|
||||
}
|
||||
createdPromoCode, err := userRepo.CreatePromoCode(ctx, req)
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, createdPromoCode)
|
||||
|
||||
xid := "test_xid"
|
||||
err = userRepo.AddFastLink(ctx, createdPromoCode.ID, xid)
|
||||
assert.NoError(t, err)
|
||||
|
||||
t.Run("ActivatePromo Codeword - success", func(t *testing.T) {
|
||||
req := &models.ActivateReq{
|
||||
UserID: "6597babdd1ba7e2dbd32d7e3",
|
||||
Codeword: "test_codeword",
|
||||
}
|
||||
activatedPromoCode, err := userRepo.ActivatePromo(ctx, req)
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, activatedPromoCode)
|
||||
})
|
||||
|
||||
t.Run("ActivatePromo FastLink - success", func(t *testing.T) {
|
||||
req := &models.ActivateReq{
|
||||
UserID: "6597babdd1ba7e2dbd32d7e3",
|
||||
FastLink: "test_xid",
|
||||
}
|
||||
activatedPromoCode, err := userRepo.ActivatePromo(ctx, req)
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, activatedPromoCode)
|
||||
})
|
||||
|
||||
t.Run("ActivatePromo - promo code not found", func(t *testing.T) {
|
||||
req := &models.ActivateReq{
|
||||
UserID: "6597babdd1ba7e2dbd32d7e3",
|
||||
Codeword: "non_existing_codeword",
|
||||
}
|
||||
_, err := userRepo.ActivatePromo(ctx, req)
|
||||
assert.Error(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
func TestDeletePromoCode(t *testing.T) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
defer cancel()
|
||||
|
||||
mongoClient, err := mongo.Connect(ctx, options.Client().ApplyURI(mongoURI))
|
||||
require.NoError(t, err)
|
||||
defer func() {
|
||||
_ = mongoClient.Disconnect(ctx)
|
||||
}()
|
||||
|
||||
database := mongoClient.Database("admin")
|
||||
promoCode := database.Collection("promoCode")
|
||||
_ = promoCode.Drop(ctx)
|
||||
|
||||
userRepo := repository.NewPromoCodeRepository(promoCode)
|
||||
|
||||
err = repository.InitPromoCodeIndexes(ctx, promoCode)
|
||||
assert.NoError(t, err)
|
||||
|
||||
req := &models.PromoCode{
|
||||
Codeword: "test_codeword",
|
||||
Description: faker.String(),
|
||||
Greetings: faker.String(),
|
||||
DueTo: 1737280065,
|
||||
ActivationCount: 100,
|
||||
}
|
||||
createdPromoCode, err := userRepo.CreatePromoCode(ctx, req)
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, createdPromoCode)
|
||||
|
||||
t.Run("DeletePromoCode - success", func(t *testing.T) {
|
||||
err := userRepo.DeletePromoCode(ctx, createdPromoCode.ID.Hex())
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
|
||||
t.Run("DeletePromoCode - promo code not found", func(t *testing.T) {
|
||||
nonExistingID := primitive.NewObjectID().Hex()
|
||||
err := userRepo.DeletePromoCode(ctx, nonExistingID)
|
||||
assert.Error(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
func TestAddFastLink(t *testing.T) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
defer cancel()
|
||||
|
||||
mongoClient, err := mongo.Connect(ctx, options.Client().ApplyURI(mongoURI))
|
||||
require.NoError(t, err)
|
||||
defer func() {
|
||||
_ = mongoClient.Disconnect(ctx)
|
||||
}()
|
||||
|
||||
database := mongoClient.Database("admin")
|
||||
promoCode := database.Collection("promoCode")
|
||||
_ = promoCode.Drop(ctx)
|
||||
|
||||
userRepo := repository.NewPromoCodeRepository(promoCode)
|
||||
|
||||
err = repository.InitPromoCodeIndexes(ctx, promoCode)
|
||||
assert.NoError(t, err)
|
||||
|
||||
req := &models.PromoCode{
|
||||
Codeword: "test_codeword",
|
||||
Description: faker.String(),
|
||||
Greetings: faker.String(),
|
||||
DueTo: 1737280065,
|
||||
ActivationCount: 100,
|
||||
}
|
||||
createdPromoCode, err := userRepo.CreatePromoCode(ctx, req)
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, createdPromoCode)
|
||||
|
||||
t.Run("AddFastLink - success", func(t *testing.T) {
|
||||
xid := "test_xid"
|
||||
err := userRepo.AddFastLink(ctx, createdPromoCode.ID, xid)
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
|
||||
t.Run("AddFastLink - promo code not found", func(t *testing.T) {
|
||||
nonExistingID := primitive.NewObjectID()
|
||||
xid := "test_xid"
|
||||
err := userRepo.AddFastLink(ctx, nonExistingID, xid)
|
||||
assert.Error(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user