@shopgate/pwa-common-commerce
Version:
Commerce library for the Shopgate Connect PWA.
30 lines • 4.61 kB
JavaScript
function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}import{themeConfig as mockedConfig}from'@shopgate/pwa-common/helpers/config/mock';var mockProductId='foo';var hash="{\"filters\":{},\"pipeline\":\"shopgate.catalog.getProductReviews\",\"productId\":\"".concat(mockProductId,"\"}");/**
* Get a reviews state.
* @param {Array} ids Fake review IDs.
* @param {string} _hash The review hash.
* @return {Object}
*/var reviewsState=function reviewsState(){var ids=arguments.length>0&&arguments[0]!==undefined?arguments[0]:[1];var _hash=arguments.length>1&&arguments[1]!==undefined?arguments[1]:hash;return{reviewsByHash:_defineProperty({},_hash,{isFetching:false,expires:999999999999,reviews:ids,totalReviewCount:ids.length})};};var reviewRouteMock={id:'24284d52-05b3-4da5-b035-6b23dc81b068',params:{productId:'666f6f'},pathname:'/item/666f6f/reviews',pattern:'/item/:productId/reviews',query:{},state:{}};var writeReviewRouteMock={id:'24284d52-05b3-4da5-b035-6b23dc81b068',params:{productId:'666f6f'},pathname:'/item/666f6f/write_review',pattern:'/item/:productId/write_review',query:{},state:{}};var mockedProduct={id:mockProductId,baseProductId:null,rating:{average:0,count:0}};var mockedProductWithRating={id:mockProductId,rating:{average:50,count:4}};/**
* Creates mocked review object.
* @param {string|number} id Anything that can be an id.
* @return {Object}
*/var mockReview=function mockReview(id){return{id:id,author:'',date:'2017-09-06T12:38:51.000Z',rate:100,title:'',review:'No Name and Title Lorem ipsum dolor sit amet, con… takimata sanctus est Lorem ipsum dolor sit amet.'};};/**
* Mocked state with 4 reviews.
* @type {Object}
*/var mockedStateWithAll={product:{productsById:_defineProperty({},mockProductId,{productData:mockedProductWithRating}),variantsByProductId:{}},reviews:_extends({reviewsById:{1:mockReview(1),2:mockReview(2),3:mockReview(3),4:mockReview(4)},reviewsByProductId:_defineProperty({},mockProductId,{reviews:[1,2,3,4],totalReviewCount:4})},reviewsState([1,2,3,4])),ui:{general:{}}};/**
* Similar to mockedStateWithAll, but contains only two reviews.
* @type {Object}
*/var mockedStateWithTwoReviews=function(){// Must do deep clone here.
var mockedState=JSON.parse(JSON.stringify(mockedStateWithAll));mockedState.reviews.reviewsByProductId[mockProductId].reviews=mockedState.reviews.reviewsByProductId[mockProductId].reviews.slice(0,2);mockedState.reviews.reviewsByProductId[mockProductId].totalReviewCount=2;mockedState.reviews.reviewsByHash[hash].reviews.slice(0,2);mockedState.reviews.reviewsByHash[hash].reviews.totalReviewCount=2;return mockedState;}();/**
* Mocked state with product only. Reviews not fetched.
* @type {Object}
*/var mockedStateWithoutReview={product:{productsById:_defineProperty({},mockProductId,{productData:mockedProduct})},reviews:{reviewsById:{},reviewsByProductId:{},reviewsByHash:{},userReviewsByProductId:{}},ui:{general:{}}};/**
* Mocked state without data.
* @type {{product: {productsById: {}}}}
*/var mockedStateProductEmpty={product:{productsById:{}}};/**
* @param {string} id The productID.
* @return {Object}
*/var getReviewsStateForId=function getReviewsStateForId(id){var filterHash="{\"filters\":{},\"pipeline\":\"shopgate.catalog.getProductReviews\",\"productId\":\"".concat(id,"\"}");return{reviews:_extends({reviewsById:{1:mockReview(1),2:mockReview(2),3:mockReview(3),4:mockReview(4)},reviewsByProductId:_defineProperty({},id,{reviews:[1,2,3,4],totalReviewCount:4})},reviewsState([1,2,3,4],filterHash))};};/**
* Sets up mocks.
* @param {bool} mockReviewsAvailable A feature flag "hasReviews" value.
* @type {Function}
*/var setMocks=function setMocks(){var mockReviewsAvailable=arguments.length>0&&arguments[0]!==undefined?arguments[0]:true;jest.doMock('@shopgate/pwa-common/helpers/config',function(){return _extends({},jest.requireActual('@shopgate/pwa-common/helpers/config'),{get hasReviews(){return mockReviewsAvailable;},get showWriteReview(){return true;},themeConfig:mockedConfig});});};export{hash,mockProductId,getReviewsStateForId,mockReview,mockedStateProductEmpty,mockedStateWithoutReview,mockedStateWithTwoReviews,mockedStateWithAll,reviewRouteMock,writeReviewRouteMock,setMocks};