UNPKG

trailpack-proxy-cart

Version:

eCommerce - Trailpack for Proxy Engine

152 lines (148 loc) 4.34 kB
'use strict' /* global describe, it */ const assert = require('assert') describe('Cart Model', () => { let Cart, Discount it('should exist', () => { assert(global.app.api.models['Cart']) assert(global.app.orm['Cart']) Cart = global.app.orm['Cart'] Discount = global.app.orm['Discount'] assert(Cart) }) it('should resolve a cart instance', (done) => { Cart.resolve(Cart.build({})) .then(cart => { assert.ok(cart instanceof Cart) done() }) .catch(err => { done(err) }) }) it('should add normal discounted lines to cart items', (done) => { let cart = Cart.build({ line_items: [{ product_id: 1, type: 'product', price: 1000 }, { product_id: 2, type: 'product', price: 1000 }] }) const discount1 = Discount.build({ id: 1, handle: 'test-1', name: 'test 1', description: 'test 1', code: 'test_123-1', discount_type: 'rate', discount_rate: 100, discount_scope: 'global', status: 'enabled' }) const discount2 = Discount.build({ id: 2, handle: 'test-2', name: 'test 2', description: 'test 2', code: 'test_123-2', discount_type: 'rate', discount_rate: 100, discount_scope: 'global', status: 'enabled' }) cart = cart.setItemsDiscountedLines([discount1, discount2]) assert.equal(cart.total_discounts, 400) assert.equal(cart.discounted_lines.length, 2) assert.equal(cart.discounted_lines[0].price, 200) assert.equal(cart.discounted_lines[1].price, 200) assert.equal(cart.line_items.length, 2) assert.equal(cart.line_items[0].price, 1000) assert.equal(cart.line_items[0].calculated_price, 800) assert.equal(cart.line_items[1].price, 1000) assert.equal(cart.line_items[1].calculated_price, 800) done() }) it('should add discounted lines only once to cart items', (done) => { let cart = Cart.build({ line_items: [{ product_id: 1, type: 'product', price: 1000 }, { product_id: 2, type: 'product', price: 1000 }] }) const discount1 = Discount.build({ id: 1, handle: 'test-1', name: 'test 1', description: 'test 1', code: 'test_123-1', discount_type: 'rate', discount_rate: 100, discount_scope: 'global', applies_once: true, status: 'enabled' }) cart = cart.setItemsDiscountedLines([discount1]) // console.log('BUILT',cart.toJSON().discounted_lines) // console.log('BUILT',cart.toJSON().line_items) assert.equal(cart.total_discounts, 100) assert.equal(cart.discounted_lines.length, 1) assert.equal(cart.line_items.length, 2) assert.equal(cart.line_items[0].price, 1000) assert.equal(cart.line_items[0].calculated_price, 1000) assert.equal(cart.line_items[1].price, 1000) assert.equal(cart.line_items[1].calculated_price, 900) done() }) it('should not discount an item more than it\'s price', (done) => { let cart = Cart.build({ line_items: [{ product_id: 1, type: 'product', price: 1000 }] }) const discount1 = Discount.build({ id: 1, handle: 'test-1', name: 'test 1', description: 'test 1', code: 'test_123-1', discount_type: 'rate', discount_rate: 10000, discount_scope: 'global', applies_once: false, status: 'enabled' }) const discount2 = Discount.build({ id: 2, handle: 'test-2', name: 'test 2', description: 'test 2', code: 'test_123-2', discount_type: 'rate', discount_rate: 10000, discount_scope: 'global', applies_once: false, status: 'enabled' }) cart = cart.setItemsDiscountedLines([discount1, discount2]) // console.log('BUILT',cart.toJSON().discounted_lines) // console.log('BUILT',cart.toJSON().line_items) assert.equal(cart.total_discounts, 1000) assert.equal(cart.discounted_lines.length, 2) assert.equal(cart.line_items.length, 1) assert.equal(cart.line_items[0].calculated_price, 0) assert.equal(cart.line_items[0].total_discounts, 1000) assert.equal(cart.line_items[0].price, 1000) done() }) })