271 lines
10 KiB
JavaScript
271 lines
10 KiB
JavaScript
var assert = require('chai').assert;
|
|
var request = require('request-promise');
|
|
var config = require('../it.config');
|
|
var chai = require('chai');
|
|
var chaiSubset = require('chai-subset');
|
|
chai.use(chaiSubset);
|
|
|
|
describe('Remove product variant from line item', function () {
|
|
this.timeout(50000);
|
|
|
|
var variantPid1 = '701643421084M';
|
|
var qty1 = 2;
|
|
var variantPid2 = '701642923459M';
|
|
var qty2 = 1;
|
|
var variantPid3 = '029407331258M';
|
|
var qty3 = 3;
|
|
|
|
var prodIdUuidMap = {};
|
|
|
|
var cookieJar = request.jar();
|
|
var myRequest = {
|
|
url: '',
|
|
method: 'POST',
|
|
rejectUnauthorized: false,
|
|
resolveWithFullResponse: true,
|
|
jar: cookieJar,
|
|
headers: {
|
|
'X-Requested-With': 'XMLHttpRequest'
|
|
}
|
|
};
|
|
|
|
var cookieString;
|
|
|
|
before(function () {
|
|
// ----- adding product #1:
|
|
myRequest.url = config.baseUrl + '/Cart-AddProduct';
|
|
myRequest.form = {
|
|
pid: variantPid1,
|
|
quantity: qty1
|
|
};
|
|
|
|
return request(myRequest)
|
|
.then(function () {
|
|
cookieString = cookieJar.getCookieString(myRequest.url);
|
|
})
|
|
|
|
// ----- adding product #2, a different variant of same product 1:
|
|
.then(function () {
|
|
myRequest.url = config.baseUrl + '/Cart-AddProduct';
|
|
myRequest.form = {
|
|
pid: variantPid2,
|
|
quantity: qty2
|
|
};
|
|
|
|
var cookie = request.cookie(cookieString);
|
|
cookieJar.setCookie(cookie, myRequest.url);
|
|
|
|
return request(myRequest);
|
|
})
|
|
|
|
// ----- adding product #3:
|
|
.then(function () {
|
|
myRequest.url = config.baseUrl + '/Cart-AddProduct';
|
|
myRequest.form = {
|
|
pid: variantPid3,
|
|
quantity: qty3
|
|
};
|
|
return request(myRequest);
|
|
})
|
|
|
|
// ----- select a shipping method. Need shipping method so that shipping cost, sales tax,
|
|
// and grand total can be calculated.
|
|
.then(function () {
|
|
var shipMethodId = '001'; // 001 = Ground
|
|
|
|
myRequest.method = 'POST';
|
|
myRequest.url = config.baseUrl + '/Cart-SelectShippingMethod?methodID=' + shipMethodId;
|
|
return request(myRequest);
|
|
})
|
|
|
|
// ----- Get UUID for each product line items
|
|
.then(function (response4) {
|
|
var bodyAsJson = JSON.parse(response4.body);
|
|
|
|
prodIdUuidMap[bodyAsJson.items[0].id] = bodyAsJson.items[0].UUID;
|
|
prodIdUuidMap[bodyAsJson.items[1].id] = bodyAsJson.items[1].UUID;
|
|
prodIdUuidMap[bodyAsJson.items[2].id] = bodyAsJson.items[2].UUID;
|
|
});
|
|
});
|
|
|
|
it(' 1>. should remove line item', function () {
|
|
// removing product variant on line item 2
|
|
|
|
var variantUuid2 = prodIdUuidMap[variantPid2];
|
|
var expectedItems = {
|
|
'totals': {
|
|
'subTotal': '$137.97',
|
|
'totalShippingCost': '$7.99',
|
|
'grandTotal': '$153.26',
|
|
'totalTax': '$7.30'
|
|
},
|
|
'shipments': [
|
|
{
|
|
'shippingMethods': [
|
|
{
|
|
'ID': '001',
|
|
'displayName': 'Ground',
|
|
'shippingCost': '$7.99',
|
|
'selected': true
|
|
}
|
|
],
|
|
'selectedShippingMethod': '001'
|
|
}
|
|
],
|
|
'items': [
|
|
{
|
|
'productName': '3/4 Sleeve V-Neck Top',
|
|
'price': {
|
|
'sales': {
|
|
'value': 24,
|
|
'currency': 'USD'
|
|
}
|
|
},
|
|
'variationAttributes': [
|
|
{
|
|
'displayName': 'Color',
|
|
'displayValue': 'Icy Mint'
|
|
},
|
|
{
|
|
'displayName': 'Size',
|
|
'displayValue': 'XS'
|
|
}
|
|
],
|
|
'quantity': 2
|
|
},
|
|
{
|
|
'productName': 'Solid Silk Tie',
|
|
'price': {
|
|
'sales': {
|
|
'value': 29.99,
|
|
'currency': 'USD'
|
|
},
|
|
'list': {
|
|
'value': 39.5,
|
|
'currency': 'USD'
|
|
}
|
|
},
|
|
'variationAttributes': [
|
|
{
|
|
'displayName': 'Color',
|
|
'displayValue': 'Red'
|
|
}
|
|
],
|
|
'quantity': 3
|
|
}
|
|
]
|
|
|
|
};
|
|
|
|
myRequest.method = 'GET';
|
|
myRequest.url = config.baseUrl + '/Cart-RemoveProductLineItem?pid=' + variantPid2 + '&uuid=' + variantUuid2;
|
|
|
|
return request(myRequest)
|
|
.then(function (removedItemResponse) {
|
|
assert.equal(removedItemResponse.statusCode, 200, 'Expected statusCode to be 200.');
|
|
|
|
var bodyAsJson = JSON.parse(removedItemResponse.body);
|
|
assert.containSubset(bodyAsJson.basket, expectedItems, 'Actual response dose not contain expected expectedResponse.');
|
|
|
|
// Verify path to image source
|
|
var prodImageSrc1 = bodyAsJson.basket.items[0].images.small[0].url;
|
|
var prodImageSrc2 = bodyAsJson.basket.items[1].images.small[0].url;
|
|
assert.isTrue(prodImageSrc1.endsWith('/images/small/PG.10221714.JJ8UTXX.PZ.jpg'), 'product 1 item image: src not end with /images/small/PG.10221714.JJ8UTXX.PZ.jpg.');
|
|
assert.isTrue(prodImageSrc2.endsWith('/images/small/PG.949432114S.REDSI.PZ.jpg'), 'product 2 item image: src not end with /images/small/PG.949432114S.REDSI.PZ.jpg.');
|
|
});
|
|
});
|
|
|
|
|
|
it(' 2>. should return error if PID and UUID does not match', function () {
|
|
var variantUuid3 = prodIdUuidMap[variantPid3];
|
|
|
|
myRequest.url = config.baseUrl + '/Cart-RemoveProductLineItem?pid=' + variantPid1 + '&uuid=' + variantUuid3;
|
|
|
|
return request(myRequest)
|
|
.then(function (response) {
|
|
assert.equal(response.statusCode, 500, 'Expected request to fail when PID and UUID do not match.');
|
|
})
|
|
.catch(function (err) {
|
|
assert.equal(err.statusCode, 500, 'Expected statusCode to be 500 for removing product item with non-matching PID and UUID.');
|
|
|
|
var bodyAsJson = JSON.parse(err.response.body);
|
|
|
|
assert.equal(bodyAsJson.errorMessage,
|
|
'Unable to remove item from the cart. Please try again! If the issue continues please contact customer service.',
|
|
'Actual error message from removing product item with non-matching PID and UUID not as expected');
|
|
});
|
|
});
|
|
|
|
it(' 3>. should remove all line items', function () {
|
|
var expectedRemoveAllResp = {
|
|
'totals': {
|
|
'subTotal': '$0.00',
|
|
'grandTotal': '$0.00',
|
|
'totalTax': '$0.00',
|
|
'totalShippingCost': '$0.00'
|
|
},
|
|
'shipments': [
|
|
{
|
|
'selectedShippingMethod': '001',
|
|
'shippingMethods': [
|
|
{
|
|
'description': 'Order received within 7-10 business days',
|
|
'displayName': 'Ground',
|
|
'ID': '001',
|
|
'shippingCost': '$0.00',
|
|
'estimatedArrivalTime': '7-10 Business Days',
|
|
'default': true,
|
|
'selected': true
|
|
}
|
|
]
|
|
}
|
|
],
|
|
'numItems': 0,
|
|
'resources': {
|
|
'numberOfItems': '0 Items',
|
|
'emptyCartMsg': 'Your Shopping Cart is Empty'
|
|
}
|
|
};
|
|
|
|
var variantUuid1 = prodIdUuidMap[variantPid1];
|
|
var variantUuid3 = prodIdUuidMap[variantPid3];
|
|
|
|
myRequest.method = 'GET';
|
|
myRequest.url = config.baseUrl + '/Cart-RemoveProductLineItem?pid=' + variantPid1 + '&uuid=' + variantUuid1;
|
|
|
|
return request(myRequest)
|
|
.then(function () {
|
|
myRequest.url = config.baseUrl + '/Cart-RemoveProductLineItem?pid=' + variantPid3 + '&uuid=' + variantUuid3;
|
|
return request(myRequest);
|
|
})
|
|
|
|
// Handle response
|
|
.then(function (response2) {
|
|
assert.equal(response2.statusCode, 200, 'Expected statusCode from remove all product line item to be 200.');
|
|
|
|
var bodyAsJson2 = JSON.parse(response2.body);
|
|
assert.containSubset(bodyAsJson2.basket, expectedRemoveAllResp, 'Actual response from removing all items does not contain expectedRemoveAllResp.');
|
|
});
|
|
});
|
|
|
|
it(' 4>. should return error if product does not exist in cart', function () {
|
|
var variantPidNotExist = '701643421084Mabc';
|
|
var variantUuidNotExist = '529f59ef63a0d238b8575c4f8fabc';
|
|
myRequest.url = config.baseUrl + '/Cart-RemoveProductLineItem?pid=' + variantPidNotExist + '&uuid=' + variantUuidNotExist;
|
|
|
|
return request(myRequest)
|
|
.then(function (response3) {
|
|
assert.equal(response3.statusCode, 500, 'Expected request to fail when product does not exist.');
|
|
})
|
|
.catch(function (err) {
|
|
assert.equal(err.statusCode, 500, 'Expected statusCode to be 500 for removing product item not in cart.');
|
|
|
|
var bodyAsJson = JSON.parse(err.response.body);
|
|
|
|
assert.equal(bodyAsJson.errorMessage,
|
|
'Unable to remove item from the cart. Please try again! If the issue continues please contact customer service.',
|
|
'Actual error message of removing non-existing product item not as expected');
|
|
});
|
|
});
|
|
});
|