UNPKG

trailpack-proxy-cart

Version:

eCommerce - Trailpack for Proxy Engine

1,115 lines (1,026 loc) 40.5 kB
'use strict' /* global describe, it */ const assert = require('assert') const supertest = require('supertest') const _ = require('lodash') describe('Admin User OrderController', () => { let adminUser, userID, customerID let orderID let cartID let cartToken let shopProducts let transactionID let fulfillmentID before((done) => { shopProducts = global.app.shopProducts adminUser = supertest.agent(global.app.packs.express.server) // Login as Admin adminUser .post('/auth/local') .set('Accept', 'application/json') //set header for this test .send({username: 'admin', password: 'admin1234'}) .expect(200) .end((err, res) => { assert.ok(res.body.user.id) assert.ok(res.body.user.current_customer_id) userID = res.body.user.id customerID = res.body.user.current_customer_id done(err) }) }) it('should exist', () => { assert(global.app.api.controllers['OrderController']) }) it('should add item to cart', (done) => { adminUser .post('/cart') .send({ customer_id: 1, line_items: [ { product_id: shopProducts[1].id } ] }) .expect(200) .end((err, res) => { assert.ok(res.body.id) assert.ok(res.body.token) cartID = res.body.id cartToken = res.body.token done(err) }) }) it('should get general stats', (done) => { adminUser .get('/order/generalStats') .expect(200) .end((err, res) => { assert.ok(res.body) done(err) }) }) it('should count all orders', (done) => { adminUser .get('/order/count') .expect(200) .end((err, res) => { assert.ok(_.isNumber(res.body.orders)) done(err) }) }) it('should create an order', (done) => { adminUser .post('/order') .send({ shipping_address: { first_name: 'Scott', last_name: 'Wyatt', address_1: '1 Infinite Loop', city: 'Cupertino', province: 'California', country: 'United States', postal_code: '95014' }, cart_token: cartToken, email: 'example@example.com', payment_kind: 'immediate', payment_details: [ { gateway: 'payment_processor', gateway_token: '123' } ] }) .expect(200) .end((err, res) => { orderID = res.body.id assert.ok(res.body.id) assert.equal(res.body.cart_token, cartToken) assert.equal(res.body.email, 'example@example.com') // Shipping assert.equal(res.body.shipping_address.first_name, 'Scott') assert.equal(res.body.shipping_address.last_name, 'Wyatt') assert.equal(res.body.shipping_address.address_1, '1 Infinite Loop') assert.equal(res.body.shipping_address.city, 'Cupertino') assert.equal(res.body.shipping_address.province, 'California') assert.equal(res.body.shipping_address.province_code, 'CA') assert.equal(res.body.shipping_address.country_code, 'US') assert.equal(res.body.shipping_address.country, 'United States') assert.equal(res.body.shipping_address.postal_code, '95014') assert.equal(res.body.total_items, 1) // Taxes assert.equal(res.body.has_taxes, true) assert.equal(res.body.total_tax, 7750) assert.equal(res.body.taxes_included, false) assert.equal(res.body.tax_lines.length, 1) assert.equal(res.body.tax_lines[0].name, 'California Sales Tax') assert.equal(res.body.tax_lines[0].price, 7750) // Transactions assert.equal(res.body.transactions.length, 1) assert.equal(res.body.transactions[0].order_id, orderID) // Fulfillments // Defaults to not immediately fulfilled: fulfillment_status: none assert.ok(res.body.order_items[0].fulfillment_id) assert.equal(res.body.order_items[0].fulfillment_status, 'pending') assert.equal(res.body.fulfillments.length, 1) assert.equal(res.body.fulfillments[0].order_id, orderID) assert.equal(res.body.fulfillments[0].status, 'pending') assert.equal(res.body.fulfillment_status, 'pending') assert.equal(res.body.total_pending_fulfillments, 1) fulfillmentID = res.body.fulfillments[0].id assert.equal(res.body.financial_status, 'authorized') assert.equal(res.body.subtotal_price, 100000) assert.equal(res.body.total_price, 107750) assert.equal(res.body.total_authorized, 107750) assert.equal(res.body.total_due, 107750) assert.equal(res.body.total_items, 1) done(err) }) }) it('should update an order', (done) => { adminUser .post(`/order/${orderID}`) .send({ shipping_address: { first_name: 'Scottie', last_name: 'W' }, billing_address: {} }) .expect(200) .end((err, res) => { assert.equal(res.body.id, orderID) assert.equal(res.body.cart_token, cartToken) assert.equal(res.body.email, 'example@example.com') assert.equal(res.body.shipping_address.first_name, 'Scottie') assert.equal(res.body.shipping_address.last_name, 'W') assert.equal(res.body.shipping_address.address_1, '1 Infinite Loop') assert.equal(res.body.shipping_address.city, 'Cupertino') assert.equal(res.body.shipping_address.province, 'California') assert.equal(res.body.shipping_address.province_code, 'CA') assert.equal(res.body.shipping_address.country_code, 'US') assert.equal(res.body.shipping_address.country, 'United States') assert.equal(res.body.shipping_address.postal_code, '95014') assert.equal(res.body.total_items, 1) // Taxes assert.equal(res.body.has_taxes, true) assert.equal(res.body.total_tax, 7750) assert.equal(res.body.taxes_included, false) assert.equal(res.body.tax_lines.length, 1) assert.equal(res.body.tax_lines[0].name, 'California Sales Tax') assert.equal(res.body.tax_lines[0].price, 7750) // Transactions assert.equal(res.body.transactions.length, 1) assert.equal(res.body.transactions[0].order_id, orderID) // Fulfillments assert.equal(res.body.fulfillments.length, 1) assert.equal(res.body.fulfillments[0].order_id, orderID) assert.equal(res.body.fulfillments[0].status, 'pending') assert.equal(res.body.fulfillments[0].total_pending_fulfillments, 1) assert.equal(res.body.fulfillment_status, 'pending') assert.equal(res.body.financial_status, 'authorized') assert.equal(res.body.subtotal_price, 100000) assert.equal(res.body.total_price, 107750) assert.equal(res.body.total_due, 107750) assert.equal(res.body.total_authorized, 107750) assert.equal(res.body.total_tax, 7750) assert.equal(res.body.total_items, 1) done(err) }) }) it('should add an item to order', (done) => { adminUser .post(`/order/${orderID}/addItem`) .send({ product_id: shopProducts[2].id, quantity: 1, properties: [{ hello: 'world' }] }) .expect(200) .end((err, res) => { assert.equal(res.body.id, orderID) assert.equal(res.body.order_items.length, 2) assert.equal(res.body.financial_status, 'authorized') assert.equal(res.body.fulfillment_status, 'pending') // Taxes assert.equal(res.body.has_taxes, true) assert.equal(res.body.total_tax, 15500) assert.equal(res.body.taxes_included, false) assert.equal(res.body.tax_lines.length, 2) assert.equal(res.body.tax_lines[0].name, 'California Sales Tax') assert.equal(res.body.tax_lines[0].price, 7750) assert.equal(res.body.tax_lines[1].name, 'California Sales Tax') assert.equal(res.body.tax_lines[1].price, 7750) // Transactions assert.equal(res.body.transactions.length, 2) res.body.transactions.forEach(transaction => { assert.equal(transaction.order_id, orderID) assert.equal(transaction.kind, 'authorize') assert.equal(transaction.status, 'success') }) // Fulfillments assert.equal(res.body.fulfillments.length, 1) assert.equal(res.body.fulfillments[0].order_id, orderID) assert.equal(res.body.fulfillments[0].status, 'pending') assert.equal(res.body.fulfillments[0].total_pending_fulfillments, 2) assert.equal(res.body.subtotal_price, 200000) assert.equal(res.body.total_price, 215500) assert.equal(res.body.total_due, 215500) assert.equal(res.body.total_authorized, 215500) assert.equal(res.body.total_tax, 15500) assert.equal(res.body.total_items, 2) done(err) }) }) it('should update an item to order', (done) => { adminUser .post(`/order/${orderID}/updateItem`) .send({ product_id: shopProducts[2].id, quantity: 2, properties: [{ hello: 'moon' }] }) .expect(200) .end((err, res) => { assert.equal(res.body.id, orderID) assert.equal(res.body.order_items.length, 2) // Taxes assert.equal(res.body.has_taxes, true) assert.equal(res.body.total_tax, 23250) assert.equal(res.body.taxes_included, false) assert.equal(res.body.tax_lines.length, 2) assert.equal(res.body.tax_lines[0].name, 'California Sales Tax') assert.equal(res.body.tax_lines[0].price, 7750) assert.equal(res.body.tax_lines[1].name, 'California Sales Tax') assert.equal(res.body.tax_lines[1].price, 15500) // Transactions assert.equal(res.body.transactions.length, 3) res.body.transactions.forEach(transaction => { assert.equal(transaction.order_id, orderID) assert.equal(transaction.kind, 'authorize') assert.equal(transaction.status, 'success') }) // Fulfillments assert.equal(res.body.fulfillments.length, 1) assert.equal(res.body.fulfillments[0].order_id, orderID) assert.equal(res.body.fulfillments[0].status, 'pending') assert.equal(res.body.fulfillments[0].total_pending_fulfillments, 3) assert.equal(res.body.financial_status, 'authorized') assert.equal(res.body.fulfillment_status, 'pending') assert.equal(res.body.total_pending_fulfillments, 1) assert.equal(res.body.subtotal_price, 300000) assert.equal(res.body.total_price, 323250) assert.equal(res.body.total_due, 323250) assert.equal(res.body.total_authorized, 323250) assert.equal(res.body.total_tax, 23250) assert.equal(res.body.total_items, 3) done(err) }) }) it('should remove an item quantity from order', (done) => { adminUser .post(`/order/${orderID}/removeItem`) .send({ product_id: shopProducts[2].id, quantity: 1 }) .expect(200) .end((err, res) => { assert.equal(res.body.id, orderID) assert.equal(res.body.order_items.length, 2) // Transactions assert.equal(res.body.transactions.length, 3) res.body.transactions.forEach(transaction => { assert.equal(transaction.order_id, orderID) assert.equal(transaction.kind, 'authorize') assert.equal(transaction.status, 'success') }) // Fulfillments assert.equal(res.body.fulfillments.length, 1) assert.equal(res.body.fulfillments[0].order_id, orderID) assert.equal(res.body.fulfillments[0].status, 'pending') assert.equal(res.body.fulfillments[0].total_pending_fulfillments, 2) assert.equal(res.body.fulfillment_status, 'pending') assert.equal(res.body.total_pending_fulfillments, 1) assert.equal(res.body.financial_status, 'authorized') assert.equal(res.body.subtotal_price, 200000) assert.equal(res.body.total_price, 215500) assert.equal(res.body.total_due, 215500) assert.equal(res.body.total_authorized, 215500) assert.equal(res.body.total_tax, 15500) assert.equal(res.body.total_voided, 0) assert.equal(res.body.total_items, 2) assert.equal(res.body.total_shipping, 0) done(err) }) }) it('should completely remove an item from order', (done) => { adminUser .post(`/order/${orderID}/removeItem`) .send({ product_id: shopProducts[2].id, quantity: 1 }) .expect(200) .end((err, res) => { assert.equal(res.body.id, orderID) assert.equal(res.body.order_items.length, 1) // Transactions assert.equal(res.body.transactions.length, 3) res.body.transactions.forEach(transaction => { assert.equal(transaction.order_id, orderID) assert.equal(transaction.kind, 'authorize') assert.equal(transaction.status, 'success') }) // Fulfillments assert.equal(res.body.fulfillments.length, 1) assert.equal(res.body.fulfillments[0].order_id, orderID) assert.equal(res.body.fulfillments[0].status, 'pending') assert.equal(res.body.fulfillments[0].total_pending_fulfillments, 1) assert.equal(res.body.financial_status, 'authorized') assert.equal(res.body.fulfillment_status, 'pending') assert.equal(res.body.total_pending_fulfillments, 1) assert.equal(res.body.subtotal_price, 100000) assert.equal(res.body.total_price, 107750) assert.equal(res.body.total_due, 107750) assert.equal(res.body.total_authorized, 107750) assert.equal(res.body.total_voided, 0) assert.equal(res.body.total_items, 1) assert.equal(res.body.total_shipping, 0) assert.equal(res.body.total_tax, 7750) done(err) }) }) it('should add items to order', (done) => { adminUser .post(`/order/${orderID}/addItems`) .send([{ product_id: shopProducts[2].id, quantity: 2, properties: [{ hello: 'world' }] }]) .expect(200) .end((err, res) => { assert.equal(res.body.id, orderID) assert.equal(res.body.order_items.length, 2) assert.equal(res.body.financial_status, 'authorized') assert.equal(res.body.fulfillment_status, 'pending') // Taxes assert.equal(res.body.has_taxes, true) assert.equal(res.body.total_tax, 23250) assert.equal(res.body.taxes_included, false) assert.equal(res.body.tax_lines.length, 2) assert.equal(res.body.tax_lines[0].name, 'California Sales Tax') assert.equal(res.body.tax_lines[0].price, 7750) assert.equal(res.body.tax_lines[1].name, 'California Sales Tax') assert.equal(res.body.tax_lines[1].price, 15500) // Transactions assert.equal(res.body.transactions.length, 4) res.body.transactions.forEach(transaction => { assert.equal(transaction.order_id, orderID) assert.equal(transaction.kind, 'authorize') assert.equal(transaction.status, 'success') }) // Fulfillments assert.equal(res.body.fulfillments.length, 1) assert.equal(res.body.fulfillments[0].order_id, orderID) assert.equal(res.body.fulfillments[0].status, 'pending') assert.equal(res.body.fulfillments[0].total_pending_fulfillments, 3) assert.equal(res.body.subtotal_price, 300000) assert.equal(res.body.total_price, 323250) assert.equal(res.body.total_due, 323250) assert.equal(res.body.total_authorized, 323250) assert.equal(res.body.total_tax, 23250) assert.equal(res.body.total_items, 3) done(err) }) }) it('should completely remove an item from order again', (done) => { adminUser .post(`/order/${orderID}/removeItem`) .send({ product_id: shopProducts[2].id, quantity: 2 }) .expect(200) .end((err, res) => { assert.equal(res.body.id, orderID) assert.equal(res.body.order_items.length, 1) // Transactions assert.equal(res.body.transactions.length, 4) res.body.transactions.forEach(transaction => { assert.equal(transaction.order_id, orderID) assert.equal(transaction.kind, 'authorize') assert.equal(transaction.status, 'success') }) // Fulfillments assert.equal(res.body.fulfillments.length, 1) assert.equal(res.body.fulfillments[0].order_id, orderID) assert.equal(res.body.fulfillments[0].status, 'pending') assert.equal(res.body.fulfillments[0].total_pending_fulfillments, 1) assert.equal(res.body.financial_status, 'authorized') assert.equal(res.body.fulfillment_status, 'pending') assert.equal(res.body.total_pending_fulfillments, 1) assert.equal(res.body.subtotal_price, 100000) assert.equal(res.body.total_price, 107750) assert.equal(res.body.total_due, 107750) assert.equal(res.body.total_authorized, 107750) assert.equal(res.body.total_voided, 0) assert.equal(res.body.total_items, 1) assert.equal(res.body.total_shipping, 0) assert.equal(res.body.total_tax, 7750) done(err) }) }) it('should add new items to order', (done) => { adminUser .post(`/order/${orderID}/addItems`) .send([{ product_id: shopProducts[3].id, quantity: 1 }]) .expect(200) .end((err, res) => { assert.equal(res.body.id, orderID) assert.equal(res.body.order_items.length, 2) assert.equal(res.body.financial_status, 'authorized') assert.equal(res.body.fulfillment_status, 'pending') // Taxes assert.equal(res.body.has_taxes, true) assert.equal(res.body.total_tax, 15500) assert.equal(res.body.taxes_included, false) assert.equal(res.body.tax_lines.length, 2) assert.equal(res.body.tax_lines[0].name, 'California Sales Tax') assert.equal(res.body.tax_lines[0].price, 7750) assert.equal(res.body.tax_lines[1].name, 'California Sales Tax') assert.equal(res.body.tax_lines[1].price, 7750) // Transactions assert.equal(res.body.transactions.length, 5) res.body.transactions.forEach(transaction => { assert.equal(transaction.order_id, orderID) assert.equal(transaction.kind, 'authorize') assert.equal(transaction.status, 'success') }) // Fulfillments assert.equal(res.body.fulfillments.length, 1) assert.equal(res.body.fulfillments[0].order_id, orderID) assert.equal(res.body.fulfillments[0].status, 'pending') assert.equal(res.body.fulfillments[0].total_pending_fulfillments, 2) assert.equal(res.body.subtotal_price, 200000) assert.equal(res.body.total_price, 215500) assert.equal(res.body.total_due, 215500) assert.equal(res.body.total_authorized, 215500) assert.equal(res.body.total_tax, 15500) assert.equal(res.body.total_items, 2) done(err) }) }) it('should completely remove an item from order again', (done) => { adminUser .post(`/order/${orderID}/removeItem`) .send({ product_id: shopProducts[3].id, quantity: 1 }) .expect(200) .end((err, res) => { assert.equal(res.body.id, orderID) assert.equal(res.body.order_items.length, 1) // Transactions assert.equal(res.body.transactions.length, 5) res.body.transactions.forEach(transaction => { assert.equal(transaction.order_id, orderID) assert.equal(transaction.kind, 'authorize') assert.equal(transaction.status, 'success') }) // Fulfillments assert.equal(res.body.fulfillments.length, 1) assert.equal(res.body.fulfillments[0].order_id, orderID) assert.equal(res.body.fulfillments[0].status, 'pending') assert.equal(res.body.fulfillments[0].total_pending_fulfillments, 1) assert.equal(res.body.financial_status, 'authorized') assert.equal(res.body.fulfillment_status, 'pending') assert.equal(res.body.total_pending_fulfillments, 1) assert.equal(res.body.subtotal_price, 100000) assert.equal(res.body.total_price, 107750) assert.equal(res.body.total_due, 107750) assert.equal(res.body.total_authorized, 107750) assert.equal(res.body.total_voided, 0) assert.equal(res.body.total_items, 1) assert.equal(res.body.total_shipping, 0) assert.equal(res.body.total_tax, 7750) done(err) }) }) it('should add shipping to order', (done) => { adminUser .post(`/order/${orderID}/addShipping`) .send({ name: 'Test Shipping', price: 100 }) .expect(200) .end((err, res) => { // Transactions assert.equal(res.body.transactions.length, 6) res.body.transactions.forEach(transaction => { assert.equal(transaction.order_id, orderID) assert.equal(transaction.kind, 'authorize') assert.equal(transaction.status, 'success') }) // Shipping Lines assert.equal(res.body.shipping_lines.length, 1) assert.equal(res.body.shipping_lines[0].name, 'Test Shipping') assert.equal(res.body.shipping_lines[0].price, 100) // Fulfillments assert.equal(res.body.fulfillments.length, 1) assert.equal(res.body.fulfillments[0].order_id, orderID) assert.equal(res.body.fulfillments[0].status, 'pending') assert.equal(res.body.financial_status, 'authorized') assert.equal(res.body.fulfillment_status, 'pending') assert.equal(res.body.total_pending_fulfillments, 1) assert.equal(res.body.subtotal_price, 100000) assert.equal(res.body.total_price, 107850) assert.equal(res.body.total_due, 107850) assert.equal(res.body.total_authorized, 107850) assert.equal(res.body.total_voided, 0) assert.equal(res.body.total_items, 1) assert.equal(res.body.total_shipping, 100) assert.equal(res.body.total_tax, 7750) done(err) }) }) it('should remove shipping from order', (done) => { adminUser .post(`/order/${orderID}/removeShipping`) .send({ name: 'Test Shipping', price: 100 }) .expect(200) .end((err, res) => { // Transactions assert.equal(res.body.transactions.length, 6) res.body.transactions.forEach(transaction => { assert.equal(transaction.order_id, orderID) assert.equal(transaction.kind, 'authorize') assert.equal(transaction.status, 'success') }) // Shipping Lines assert.equal(res.body.shipping_lines.length, 0) // Fulfillments assert.equal(res.body.fulfillments.length, 1) assert.equal(res.body.fulfillments[0].order_id, orderID) assert.equal(res.body.fulfillments[0].status, 'pending') assert.equal(res.body.financial_status, 'authorized') assert.equal(res.body.fulfillment_status, 'pending') assert.equal(res.body.total_pending_fulfillments, 1) assert.equal(res.body.subtotal_price, 100000) assert.equal(res.body.total_price, 107750) assert.equal(res.body.total_due, 107750) assert.equal(res.body.total_authorized, 107750) assert.equal(res.body.total_voided, 0) assert.equal(res.body.total_items, 1) assert.equal(res.body.total_shipping, 0) assert.equal(res.body.total_tax, 7750) done(err) }) }) it('should add taxes to order', (done) => { adminUser .post(`/order/${orderID}/addTaxes`) .send({ name: 'Test Taxes', price: 100 }) .expect(200) .end((err, res) => { // Transactions assert.equal(res.body.transactions.length, 7) res.body.transactions.forEach(transaction => { assert.equal(transaction.order_id, orderID) assert.equal(transaction.kind, 'authorize') assert.equal(transaction.status, 'success') }) // Taxes Lines assert.equal(res.body.tax_lines.length, 2) res.body.tax_lines.forEach(line => { if (line.name === 'Test Taxes') { assert.equal(line.price, 100) } }) // Fulfillments assert.equal(res.body.fulfillments.length, 1) assert.equal(res.body.fulfillments[0].order_id, orderID) assert.equal(res.body.fulfillments[0].status, 'pending') assert.equal(res.body.financial_status, 'authorized') assert.equal(res.body.fulfillment_status, 'pending') assert.equal(res.body.total_pending_fulfillments, 1) assert.equal(res.body.subtotal_price, 100000) assert.equal(res.body.total_price, 107850) assert.equal(res.body.total_due, 107850) assert.equal(res.body.total_authorized, 107850) assert.equal(res.body.total_voided, 0) assert.equal(res.body.total_items, 1) assert.equal(res.body.total_shipping, 0) assert.equal(res.body.total_tax, 7850) done(err) }) }) it('should remove taxes from order', (done) => { adminUser .post(`/order/${orderID}/removeTaxes`) .send({ name: 'Test Taxes', price: 100 }) .expect(200) .end((err, res) => { // Transactions assert.equal(res.body.transactions.length, 7) res.body.transactions.forEach(transaction => { assert.equal(transaction.order_id, orderID) assert.equal(transaction.kind, 'authorize') assert.equal(transaction.status, 'success') }) // Taxes Lines assert.equal(res.body.tax_lines.length, 1) // Fulfillments assert.equal(res.body.fulfillments.length, 1) assert.equal(res.body.fulfillments[0].order_id, orderID) assert.equal(res.body.fulfillments[0].status, 'pending') assert.equal(res.body.financial_status, 'authorized') assert.equal(res.body.fulfillment_status, 'pending') assert.equal(res.body.total_pending_fulfillments, 1) assert.equal(res.body.subtotal_price, 100000) assert.equal(res.body.total_price, 107750) assert.equal(res.body.total_due, 107750) assert.equal(res.body.total_authorized, 107750) assert.equal(res.body.total_voided, 0) assert.equal(res.body.total_items, 1) assert.equal(res.body.total_tax, 7750) assert.equal(res.body.total_shipping, 0) done(err) }) }) it('should pay an order', (done) => { adminUser .post(`/order/${orderID}/pay`) .send({ payment_details: [ { gateway: 'payment_processor', gateway_token: '123' } ] }) .expect(200) .end((err, res) => { assert.equal(res.body.id, orderID) assert.equal(res.body.financial_status, 'paid') // Transactions assert.equal(res.body.transactions.length, 7) res.body.transactions.forEach(transaction => { assert.equal(transaction.order_id, orderID) assert.equal(transaction.kind, 'capture') assert.equal(transaction.status, 'success') }) const transaction = res.body.transactions.find(transaction => transaction.amount > 0) transactionID = transaction.id assert.equal(res.body.total_captured, 107750) assert.equal(res.body.total_due, 0) done(err) }) }) it('should fulfill an order', (done) => { adminUser .post(`/order/${orderID}/fulfill`) .send({ id: fulfillmentID, status: 'sent', status_url: 'https://cali-style.com/status', tracking_company: 'UPS', tracking_number: '1111', // receipt: { // done: 'today' // } }) .expect(200) .end((err, res) => { assert.equal(res.body.id, orderID) assert.equal(res.body.financial_status, 'paid') assert.equal(res.body.fulfillment_status, 'sent') // Fulfillments res.body.fulfillments.forEach(item => { assert.equal(item.status, 'sent') assert.equal(item.total_sent_to_fulfillment, 1) }) // Order Items res.body.order_items.forEach(item => { assert.equal(item.fulfillment_status, 'sent') }) // Transactions assert.equal(res.body.transactions.length, 7) res.body.transactions.forEach(transaction => { assert.equal(transaction.order_id, orderID) assert.equal(transaction.kind, 'capture') assert.equal(transaction.status, 'success') }) assert.equal(res.body.total_captured, 107750) assert.equal(res.body.total_due, 0) assert.equal(res.body.fulfillments.length, 1) done(err) }) }) it('should partially refund an order', (done) => { adminUser .post(`/order/${orderID}/refund`) .send([{ transaction: transactionID, amount: 100 }]) .expect(200) .end((err, res) => { assert.equal(res.body.id, orderID) // Transactions assert.equal(res.body.transactions.length, 8) res.body.transactions.forEach(transaction => { assert.equal(transaction.order_id, orderID) assert.equal(transaction.status, 'success') }) // Refunds assert.equal(res.body.refunds.length, 1) res.body.refunds.forEach(refund => { assert.equal(refund.order_id, orderID) }) assert.equal(res.body.financial_status, 'partially_refunded') assert.equal(res.body.total_refunds, 100) assert.equal(res.body.total_due, 100) done(err) }) }) it('should refund an order', (done) => { adminUser .post(`/order/${orderID}/refund`) .send([]) .expect(200) .end((err, res) => { assert.equal(res.body.id, orderID) assert.equal(res.body.financial_status, 'refunded') assert.equal(res.body.total_refunds, 107750) assert.equal(res.body.total_due, 107750) // Transactions assert.equal(res.body.transactions.length, 8) res.body.transactions.forEach(transaction => { assert.equal(transaction.order_id, orderID) assert.equal(transaction.kind, 'refund') assert.equal(transaction.status, 'success') }) assert.equal(res.body.refunds.length, 8) res.body.refunds.forEach(refund => { assert.equal(refund.order_id, orderID) }) done(err) }) }) it('should add tag to an order', (done) => { adminUser .post(`/order/${orderID}/addTag/1`) .send({}) .expect(200) .end((err, res) => { assert.equal(res.body.tags.length, 1) done(err) }) }) it('should remove tag from an order', (done) => { adminUser .post(`/order/${orderID}/removeTag/1`) .send({}) .expect(200) .end((err, res) => { assert.equal(res.body.tags.length, 0) done(err) }) }) it('should cancel an order', (done) => { adminUser .post(`/order/${orderID}/cancel`) .send({ cancel_reason: 'customer' }) .expect(200) .end((err, res) => { assert.equal(res.body.id, orderID) assert.ok(res.body.cancelled_at) assert.ok(res.body.closed_at) assert.equal(res.body.cancel_reason, 'customer') assert.equal(res.body.total_cancelled_fulfillments, 1) // Fulfillments res.body.fulfillments.forEach(item => { assert.equal(item.status, 'cancelled') assert.equal(item.total_cancelled, 1) }) // Order Items res.body.order_items.forEach(item => { assert.equal(item.fulfillment_status, 'cancelled') }) done(err) }) }) it('should get an order refunds', (done) => { adminUser .get(`/order/${orderID}/refunds`) .expect(200) .end((err, res) => { assert.ok(res.body) assert.ok(res.headers['x-pagination-total']) assert.ok(res.headers['x-pagination-pages']) assert.ok(res.headers['x-pagination-page']) assert.ok(res.headers['x-pagination-limit']) assert.ok(res.headers['x-pagination-offset']) assert.ok(res.headers['x-pagination-sort']) assert.equal(_.isNumber(parseInt(res.headers['x-pagination-total'])), true) assert.equal(_.isNumber(parseInt(res.headers['x-pagination-offset'])), true) assert.equal(_.isNumber(parseInt(res.headers['x-pagination-limit'])), true) assert.equal(_.isNumber(parseInt(res.headers['x-pagination-page'])), true) assert.equal(_.isNumber(parseInt(res.headers['x-pagination-pages'])), true) done(err) }) }) it('should get an order transactions', (done) => { adminUser .get(`/order/${orderID}/transactions`) .expect(200) .end((err, res) => { assert.ok(res.body) assert.ok(res.headers['x-pagination-total']) assert.ok(res.headers['x-pagination-pages']) assert.ok(res.headers['x-pagination-page']) assert.ok(res.headers['x-pagination-limit']) assert.ok(res.headers['x-pagination-offset']) assert.ok(res.headers['x-pagination-sort']) assert.equal(_.isNumber(parseInt(res.headers['x-pagination-total'])), true) assert.equal(_.isNumber(parseInt(res.headers['x-pagination-offset'])), true) assert.equal(_.isNumber(parseInt(res.headers['x-pagination-limit'])), true) assert.equal(_.isNumber(parseInt(res.headers['x-pagination-page'])), true) assert.equal(_.isNumber(parseInt(res.headers['x-pagination-pages'])), true) assert.equal(_.isNumber(res.body.length), true) done(err) }) }) it('should get an order fulfillments', (done) => { adminUser .get(`/order/${orderID}/fulfillments`) .expect(200) .end((err, res) => { assert.ok(res.body) assert.ok(res.headers['x-pagination-total']) assert.ok(res.headers['x-pagination-pages']) assert.ok(res.headers['x-pagination-page']) assert.ok(res.headers['x-pagination-limit']) assert.ok(res.headers['x-pagination-offset']) assert.ok(res.headers['x-pagination-sort']) assert.equal(_.isNumber(parseInt(res.headers['x-pagination-total'])), true) assert.equal(_.isNumber(parseInt(res.headers['x-pagination-offset'])), true) assert.equal(_.isNumber(parseInt(res.headers['x-pagination-limit'])), true) assert.equal(_.isNumber(parseInt(res.headers['x-pagination-page'])), true) assert.equal(_.isNumber(parseInt(res.headers['x-pagination-pages'])), true) assert.equal(_.isNumber(res.body.length), true) done(err) }) }) it('should search orders', (done) => { adminUser .get('/order/search') .query({ term: '1' }) .expect(200) .end((err, res) => { assert.ok(res.headers['x-pagination-total']) assert.ok(res.headers['x-pagination-pages']) assert.ok(res.headers['x-pagination-page']) assert.ok(res.headers['x-pagination-limit']) assert.ok(res.headers['x-pagination-offset']) assert.ok(res.headers['x-pagination-sort']) assert.equal(_.isNumber(parseInt(res.headers['x-pagination-total'])), true) assert.equal(_.isNumber(parseInt(res.headers['x-pagination-offset'])), true) assert.equal(_.isNumber(parseInt(res.headers['x-pagination-limit'])), true) assert.equal(_.isNumber(parseInt(res.headers['x-pagination-page'])), true) assert.equal(_.isNumber(parseInt(res.headers['x-pagination-pages'])), true) assert.equal(_.isNumber(res.body.length), true) done(err) }) }) it('should add item to a new cart', (done) => { adminUser .post('/cart') .send({ customer_id: 1, line_items: [ { product_id: shopProducts[1].id } ] }) .expect(200) .end((err, res) => { assert.ok(res.body.id) assert.ok(res.body.token) cartID = res.body.id cartToken = res.body.token done(err) }) }) it('should create an order', (done) => { adminUser .post('/order') .send({ shipping_address: { first_name: 'Scott', last_name: 'Wyatt', address_1: '1 Infinite Loop', city: 'Cupertino', province: 'California', country: 'United States', postal_code: '95014' }, cart_token: cartToken, email: 'example@example.com', payment_kind: 'immediate', payment_details: [ { gateway: 'payment_processor', gateway_token: '123' } ] }) .expect(200) .end((err, res) => { orderID = res.body.id assert.ok(res.body.id) assert.equal(res.body.cart_token, cartToken) assert.equal(res.body.email, 'example@example.com') // Shipping assert.equal(res.body.shipping_address.first_name, 'Scott') assert.equal(res.body.shipping_address.last_name, 'Wyatt') assert.equal(res.body.shipping_address.address_1, '1 Infinite Loop') assert.equal(res.body.shipping_address.city, 'Cupertino') assert.equal(res.body.shipping_address.province, 'California') assert.equal(res.body.shipping_address.province_code, 'CA') assert.equal(res.body.shipping_address.country_code, 'US') assert.equal(res.body.shipping_address.country, 'United States') assert.equal(res.body.shipping_address.postal_code, '95014') assert.equal(res.body.total_items, 1) // Taxes assert.equal(res.body.has_taxes, true) assert.equal(res.body.total_tax, 7750) assert.equal(res.body.taxes_included, false) assert.equal(res.body.tax_lines.length, 1) assert.equal(res.body.tax_lines[0].name, 'California Sales Tax') assert.equal(res.body.tax_lines[0].price, 7750) // Transactions assert.equal(res.body.transactions.length, 1) assert.equal(res.body.transactions[0].order_id, orderID) // Fulfillments // Defaults to not immediately fulfilled: fulfillment_status: none assert.ok(res.body.order_items[0].fulfillment_id) assert.equal(res.body.order_items[0].fulfillment_status, 'pending') assert.equal(res.body.fulfillments.length, 1) assert.equal(res.body.fulfillments[0].order_id, orderID) assert.equal(res.body.fulfillments[0].status, 'pending') assert.equal(res.body.fulfillment_status, 'pending') assert.equal(res.body.total_pending_fulfillments, 1) fulfillmentID = res.body.fulfillments[0].id assert.equal(res.body.financial_status, 'authorized') assert.equal(res.body.subtotal_price, 100000) assert.equal(res.body.total_price, 107750) assert.equal(res.body.total_authorized, 107750) assert.equal(res.body.total_due, 107750) assert.equal(res.body.total_items, 1) done(err) }) }) it('should update order fulfillment', (done) => { adminUser .put(`/order/${orderID}/fulfillment/${fulfillmentID}`) .send({ status: 'sent', status_url: 'test', tracking_company: 'test', tracking_number: '123' }) .expect(200) .end((err, res) => { // console.log('BROKE MANUAL FULFILLMENT UPDATE', res.body) assert.equal(res.body.order.fulfillment_status, 'sent') assert.equal(res.body.fulfillment.status, 'sent') assert.equal(res.body.fulfillment.status_url, 'test') assert.equal(res.body.fulfillment.tracking_company, 'test') assert.equal(res.body.fulfillment.tracking_number, '123') done(err) }) }) })