238 lines
7.1 KiB
JavaScript
238 lines
7.1 KiB
JavaScript
import{ serial as test }from'ava';
|
|
const {
|
|
runBefore,
|
|
g
|
|
} = require('../helper');
|
|
const moment = require('moment');
|
|
|
|
test.before(async () => {
|
|
await runBefore();
|
|
});
|
|
|
|
test('[Success] Add valid amount discount', async t => {
|
|
// Remove any sessions
|
|
await g.db.sessions.deleteMany({}, {});
|
|
|
|
await g.request
|
|
.post('/product/addtocart')
|
|
.send({
|
|
productId: g.products[0]._id,
|
|
productQuantity: 1,
|
|
productOptions: JSON.stringify(g.products[0].productOptions)
|
|
})
|
|
.expect(200);
|
|
|
|
const res = await g.request
|
|
.post('/checkout/adddiscountcode')
|
|
.send({
|
|
discountCode: g.discounts[0].code
|
|
})
|
|
.expect(200);
|
|
|
|
t.deepEqual(res.body.message, 'Discount code applied');
|
|
|
|
// Get our session
|
|
const sessions = await g.db.sessions.find({}).toArray();
|
|
if(!sessions || sessions.length === 0){
|
|
t.fail();
|
|
}
|
|
|
|
// Calculate what we expect
|
|
const totalCartAmount = g.products[0].productPrice * 1;
|
|
|
|
const session = sessions[0].session;
|
|
t.deepEqual(session.discountCode, g.discounts[0].code);
|
|
t.deepEqual(session.totalCartDiscount, g.discounts[0].value);
|
|
t.deepEqual(session.totalCartAmount, totalCartAmount - g.discounts[0].value);
|
|
});
|
|
|
|
test('[Success] Add valid percent discount', async t => {
|
|
// Remove any sessions
|
|
await g.db.sessions.deleteMany({}, {});
|
|
|
|
await g.request
|
|
.post('/product/addtocart')
|
|
.send({
|
|
productId: g.products[0]._id,
|
|
productQuantity: 1,
|
|
productOptions: JSON.stringify(g.products[0].productOptions)
|
|
})
|
|
.expect(200);
|
|
|
|
const res = await g.request
|
|
.post('/checkout/adddiscountcode')
|
|
.send({
|
|
discountCode: g.discounts[1].code
|
|
})
|
|
.expect(200);
|
|
|
|
t.deepEqual(res.body.message, 'Discount code applied');
|
|
|
|
// Get our session
|
|
const sessions = await g.db.sessions.find({}).toArray();
|
|
if(!sessions || sessions.length === 0){
|
|
t.fail();
|
|
}
|
|
|
|
// Calculate what we expect - percent
|
|
const totalCartAmount = g.products[0].productPrice * 1;
|
|
const expectedDiscount = (g.discounts[1].value / 100) * totalCartAmount;
|
|
|
|
const session = sessions[0].session;
|
|
t.deepEqual(session.discountCode, g.discounts[1].code);
|
|
t.deepEqual(session.totalCartAmount, totalCartAmount - expectedDiscount);
|
|
t.deepEqual(session.totalCartDiscount, expectedDiscount);
|
|
});
|
|
|
|
test('[Fail] Add an expired discount code', async t => {
|
|
await g.request
|
|
.post('/product/addtocart')
|
|
.send({
|
|
productId: g.products[0]._id,
|
|
productQuantity: 1,
|
|
productOptions: JSON.stringify(g.products[0].productOptions)
|
|
})
|
|
.expect(200);
|
|
|
|
const res = await g.request
|
|
.post('/checkout/adddiscountcode')
|
|
.send({
|
|
discountCode: g.discounts[2].code
|
|
})
|
|
.expect(400);
|
|
|
|
t.deepEqual(res.body.message, 'Discount is expired');
|
|
});
|
|
|
|
test('[Fail] Add a future discount code', async t => {
|
|
await g.request
|
|
.post('/product/addtocart')
|
|
.send({
|
|
productId: g.products[0]._id,
|
|
productQuantity: 1,
|
|
productOptions: JSON.stringify(g.products[0].productOptions)
|
|
})
|
|
.expect(200);
|
|
|
|
const res = await g.request
|
|
.post('/checkout/adddiscountcode')
|
|
.send({
|
|
discountCode: g.discounts[3].code
|
|
})
|
|
.expect(400);
|
|
|
|
t.deepEqual(res.body.message, 'Discount is expired');
|
|
});
|
|
|
|
test('[Fail] Add a bogus code', async t => {
|
|
await g.request
|
|
.post('/product/addtocart')
|
|
.send({
|
|
productId: g.products[0]._id,
|
|
productQuantity: 1,
|
|
productOptions: JSON.stringify(g.products[0].productOptions)
|
|
})
|
|
.expect(200);
|
|
|
|
const res = await g.request
|
|
.post('/checkout/adddiscountcode')
|
|
.send({
|
|
discountCode: 'some_bogus_code'
|
|
})
|
|
.set('csrf-token', g.csrf)
|
|
.expect(400);
|
|
|
|
t.deepEqual(res.body.message, 'Discount code is invalid or expired');
|
|
});
|
|
|
|
test('[Success] Create a new discount code', async t => {
|
|
// Add a discount code
|
|
const res = await g.request
|
|
.post('/admin/settings/discount/create')
|
|
.send({
|
|
code: 'TEST_CODE_5',
|
|
type: 'amount',
|
|
value: 10,
|
|
start: moment().add(1, 'days').format('DD/MM/YYYY HH:mm'),
|
|
end: moment().add(7, 'days').format('DD/MM/YYYY HH:mm')
|
|
})
|
|
.set('apiKey', g.users[0].apiKey)
|
|
.set('csrf-token', g.csrf)
|
|
.expect(200);
|
|
|
|
t.deepEqual(res.body.message, 'Discount code created successfully');
|
|
});
|
|
|
|
test('[Fail] Create a new discount code with invalid type', async t => {
|
|
// Add a discount code
|
|
const res = await g.request
|
|
.post('/admin/settings/discount/create')
|
|
.send({
|
|
code: 'TEST_CODE_1',
|
|
type: 'bogus_type',
|
|
value: 10,
|
|
start: moment().add(1, 'days').format('DD/MM/YYYY HH:mm'),
|
|
end: moment().add(7, 'days').format('DD/MM/YYYY HH:mm')
|
|
})
|
|
.set('apiKey', g.users[0].apiKey)
|
|
.set('csrf-token', g.csrf)
|
|
.expect(400);
|
|
|
|
t.deepEqual(res.body[0].message, 'should be equal to one of the allowed values');
|
|
});
|
|
|
|
test('[Fail] Create a new discount code with existing code', async t => {
|
|
// Add a discount code
|
|
const res = await g.request
|
|
.post('/admin/settings/discount/create')
|
|
.send({
|
|
code: 'valid_10_amount_code',
|
|
type: 'amount',
|
|
value: 10,
|
|
start: moment().add(1, 'days').format('DD/MM/YYYY HH:mm'),
|
|
end: moment().add(7, 'days').format('DD/MM/YYYY HH:mm')
|
|
})
|
|
.set('apiKey', g.users[0].apiKey)
|
|
.set('csrf-token', g.csrf)
|
|
.expect(400);
|
|
|
|
t.deepEqual(res.body.message, 'Discount code already exists');
|
|
});
|
|
|
|
test('[Success] Update a discount code', async t => {
|
|
// Add a discount code
|
|
const res = await g.request
|
|
.post('/admin/settings/discount/update')
|
|
.send({
|
|
discountId: g.discounts[0]._id,
|
|
code: 'TEST_CODE_99',
|
|
type: 'amount',
|
|
value: 20,
|
|
start: moment().add(1, 'days').format('DD/MM/YYYY HH:mm'),
|
|
end: moment().add(7, 'days').format('DD/MM/YYYY HH:mm')
|
|
})
|
|
.set('apiKey', g.users[0].apiKey)
|
|
.expect(200);
|
|
|
|
t.deepEqual(res.body.discount.value, 20);
|
|
t.deepEqual(res.body.message, 'Successfully saved');
|
|
});
|
|
|
|
test('[Fail] Update a discount with same code as existing', async t => {
|
|
// Add a discount code
|
|
const res = await g.request
|
|
.post('/admin/settings/discount/update')
|
|
.send({
|
|
discountId: g.discounts[1]._id,
|
|
code: 'TEST_CODE_99',
|
|
type: 'amount',
|
|
value: 20,
|
|
start: moment().add(1, 'days').format('DD/MM/YYYY HH:mm'),
|
|
end: moment().add(7, 'days').format('DD/MM/YYYY HH:mm')
|
|
})
|
|
.set('apiKey', g.users[0].apiKey)
|
|
.expect(400);
|
|
|
|
t.deepEqual(res.body.message, 'Discount code already exists');
|
|
});
|