LearningSalesForceCommerceC.../storefront-reference-architecture/test/integration/promotion/approachingPromotionMsg.js
2021-12-21 10:57:31 -08:00

134 lines
6.0 KiB
JavaScript

var assert = require('chai').assert;
var request = require('request-promise');
var config = require('../it.config');
// Test Case
// pid=799927767720M
// 1. Product PDP page contains the promotional messages
// 2. Add 2 products to Cart, should return approaching order/shipping promotion messages
// 3. shipping cost and order discount
// 4. Shipping form updates
describe('Approaching order level promotion', function () {
this.timeout(5000);
var mainPid = '25594767M';
var variantPid = '799927767720M';
var qty = 2;
var cookieString;
var cookieJar = request.jar();
var UUID;
var myShippingMethodForm = {
methodID: '001'
};
var myNewShippingMethodForm = {
methodID: '021'
};
var myRequest = {
url: '',
method: 'GET',
rejectUnauthorized: false,
resolveWithFullResponse: true,
jar: cookieJar,
headers: {
'X-Requested-With': 'XMLHttpRequest'
}
};
var myNewRequest = {
url: '',
method: 'GET',
rejectUnauthorized: false,
resolveWithFullResponse: true,
jar: cookieJar,
headers: {
'X-Requested-With': 'XMLHttpRequest'
}
};
var myShippingRequest = {
url: '',
method: 'POST',
rejectUnauthorized: false,
resolveWithFullResponse: true,
jar: cookieJar,
headers: {
'X-Requested-With': 'XMLHttpRequest'
}
};
var orderDiscountMsg = 'Purchase $24.00 or more and receive 20% off on your order';
var shippingDiscountMsg = 'Purchase $24.00 or more and receive Free Shipping with USPS (7-10 Business Days)';
it('1. should return a response containing promotional messages for the order and shipping discounts on PDP', function () {
myRequest.url = config.baseUrl + '/Product-Variation?pid='
+ mainPid + '&dwvar_' + mainPid + '_color=BLUJEFB&quantity=1';
return request(myRequest, function (error, response) {
var bodyAsJson = JSON.parse(response.body);
assert.equal(response.statusCode, 200, 'Expected GET Product-Variation statusCode to be 200.');
assert.isTrue(bodyAsJson.product.promotions[0].calloutMsg === '20% off on your order');
assert.isTrue(bodyAsJson.product.promotions[1].calloutMsg === 'Free Shipping with USPS (7-10 Business Days)');
});
});
it('2. should return a response containing approaching promotional call out messages', function () {
// add 2 product to Cart
myRequest.url = config.baseUrl + '/Cart-AddProduct';
myRequest.form = {
pid: variantPid,
quantity: qty
};
myRequest.method = 'POST';
return request(myRequest)
.then(function (response) {
assert.equal(response.statusCode, 200, 'expected add variant to Cart call to return status code 200');
var bodyAsJson = JSON.parse(response.body);
UUID = bodyAsJson.cart.items[0].UUID;
assert.isTrue(bodyAsJson.quantityTotal === 2, 'should have 2 items added to Cart');
assert.isTrue(bodyAsJson.message === 'Product added to cart');
cookieString = cookieJar.getCookieString(myRequest.url);
})
// select a shipping method with Form is required before going to Cart
.then(function () {
myRequest.form = myShippingMethodForm; // Ground Shipping method
myRequest.method = 'POST';
myRequest.url = config.baseUrl + '/Cart-SelectShippingMethod';
var cookie = request.cookie(cookieString);
cookieJar.setCookie(cookie, myRequest.url);
return request(myRequest);
})
.then(function (response) {
assert.equal(response.statusCode, 200, 'expected add shipping method to return status code 200');
var bodyAsJson = JSON.parse(response.body);
assert.equal(bodyAsJson.approachingDiscounts[0].discountMsg, orderDiscountMsg);
assert.equal(bodyAsJson.approachingDiscounts[1].discountMsg, shippingDiscountMsg);
});
});
it('3. should return a response with Approaching Order Discount -$30.40 in Cart', function () {
// update the quantity to 4 to trigger the order level discount
myNewRequest.url = config.baseUrl + '/Cart-UpdateQuantity?pid=' + variantPid + '&quantity=4&uuid=' + UUID;
return request(myNewRequest)
.then(function (response) {
assert.equal(response.statusCode, 200, 'expected update quantity call to return status code 200');
var bodyAsJson = JSON.parse(response.body);
var discounts = bodyAsJson.totals.discounts[0];
assert.equal(bodyAsJson.totals.orderLevelDiscountTotal.formatted, '$30.40');
assert.equal(discounts.lineItemText, 'Approaching Order Discount Test');
assert.equal(discounts.price, '-$30.40');
assert.equal(discounts.type, 'promotion');
});
});
it('4. should return a response with Approaching Shipping Discount -$7.99 in Cart', function () {
// update the shipping methods to be USPS to meet the promotion requirement
myShippingRequest.form = myNewShippingMethodForm; // Ground Shipping method
myShippingRequest.url = config.baseUrl + '/Cart-SelectShippingMethod';
return request(myShippingRequest)
.then(function (response) {
assert.equal(response.statusCode, 200, 'expected selectShippingMethod call to return status code 200');
var bodyAsJson = JSON.parse(response.body);
var discounts = bodyAsJson.totals.discounts[1];
assert.equal(bodyAsJson.totals.shippingLevelDiscountTotal.formatted, '$7.99');
assert.equal(discounts.lineItemText, 'Approaching Shipping Discount Test');
assert.equal(discounts.price, '-$7.99');
assert.equal(discounts.type, 'promotion');
});
});
});