UNPKG

node-quickbooks

Version:

node.js client for Intuit's IPP QuickBooks V3 API.

202 lines (177 loc) 6 kB
var os = require('os'), fs = require('fs'), util = require('util'), expect = require('expect'), async = require('async'), _ = require('underscore'), config = require('../config'), QuickBooks = require('../index'), qbo = new QuickBooks(config); describe('Attachable CRUDQ', function() { this.timeout(15000); it('should CRUDQ an Attachable', function(done) { var _attach; async.series([function(cb) { qbo.createAttachable({Note: 'My File'}, function(err, attach) { expect(err).toBe(null) expect(attach.Fault).toBe(undefined) expect(attach.Note).toBe('My File') _attach = attach cb() }) }, function(cb) { qbo.getAttachable(_attach.Id, function(err, attachable) { expect(err).toBe(null) expect(attachable.Fault).toBe(undefined) expect(attachable.Note).toBe('My File') attachable.Note = 'My Updated File' _attach = attachable cb() }) }, function(cb) { qbo.updateAttachable(_attach, function(err, updated) { expect(err).toBe(null) expect(updated.Fault).toBe(undefined) expect(updated.Note).toBe('My Updated File') cb() }) }, function(cb) { qbo.findAttachables(function(err, list) { expect(err).toBe(null) expect(list.Fault).toBe(undefined) expect(list.QueryResponse.Attachable.length).toBeGreaterThan(0) expect(list.QueryResponse.Attachable[0].Note).toBe('My Updated File') cb() }) }, function(cb) { qbo.deleteAttachable(_attach.Id, function(err, deleted) { expect(err).toBe(null) expect(deleted.Fault).toBe(undefined) expect(deleted.Attachable.status).toBe('Deleted') cb() }) }, function(cb) { qbo.findAttachables(function(err, list) { expect(err).toBe(null) expect(list.Fault).toBe(undefined) expect(JSON.stringify(list.QueryResponse)).toBe('{}') cb() }) }], function(e, r) { done() }) }) }) describe('Query', function() { this.timeout(15000); it('should fetch Accounts', function (done) { qbo.findAccounts(function(err, accounts) { expect(err).toBe(null) expect(accounts.Fault).toBe(undefined) expect(accounts.QueryResponse.Account.length).toBeGreaterThan(20) done() }) }) it('should fetch Expense Accounts by AccountType', function (done) { qbo.findAccounts({AccountType: 'Expense'}, function(err, accounts) { expect(err).toBe(null) expect(accounts.Fault).toBe(undefined) expect(accounts.QueryResponse.Account.length).toBeGreaterThan(0) expect(accounts.QueryResponse.Account[0].AccountType).toBe('Expense') done() }) }) it('should fetch the Travel Account', function (done) { qbo.findAccounts({Name: 'Travel'}, function(err, accounts) { expect(err).toBe(null) expect(accounts.Fault).toBe(undefined) expect(accounts.QueryResponse.Account.length).toBe(1) expect(accounts.QueryResponse.Account[0].AccountType).toBe('Expense') done() }) }) var queries = fs.readFileSync('build/query.txt').toString('utf-8').split(os.EOL) queries.forEach(function(q) { it('should fetch ' + qbo.capitalize(q), function (done) { qbo['find' + qbo.pluralize(qbo.capitalize(q))].call(qbo, function(err, data) { expect(err).toBe(null) expect(data.Fault).toBe(undefined) expect(_.isObject(data.QueryResponse)).toBe(true) done() }) }) }) }) describe('Reports', function() { this.timeout(30000); var reports = fs.readFileSync('build/report.txt').toString('utf-8').split(os.EOL) reports.some(function (line) { if (line === '') return true it('should fetch ' + line + ' Report', function (done) { qbo['report' + line].call(qbo, function(err, report) { expect(err).toBe(null) expect(report.Fault).toBe(undefined) done() }) }) }) }) describe('SalesReceipt', function() { this.timeout(30000); it('should create a new SalesReceipt', function (done) { qbo.createSalesReceipt({ DocNumber: "1044", TxnDate: "2014-08-04", PrivateNote: "Memo for SalesReceipt", CustomerMemo: { value: "my message"} , Line: [ { Description: "Line description", Amount: 14, DetailType: "SalesItemLineDetail", SalesItemLineDetail: { ServiceDate: "2014-08-14", UnitPrice: 14, Qty: 1, TaxCodeRef: {value: "TAX"} } }, { Amount: 0.28, DetailType: "DiscountLineDetail", DiscountLineDetail: { PercentBased: true, DiscountPercent: 2 } } ]}, function(err, salesReceipt) { expect(err).toBe(null) expect(salesReceipt.Fault).toBe(undefined) async.series([function(cb) { qbo.sendSalesReceiptPdf(salesReceipt.Id, config.testEmail, function(err, data) { console.log(util.inspect(data, {showHidden: false, depth: null})); cb() }) }, function(cb) { qbo.getSalesReceiptPdf(salesReceipt.Id, function(err, data) { fs.writeFileSync('salesReceipt_'+salesReceipt.Id+'.pdf',data); console.log(util.inspect(data, {showHidden: false, depth: null})); cb() }) }],function(e, r) { done() }) }) }) it('should fetch and delete all SalesReceipts', function (done) { qbo.findSalesReceipts(function(err, items) { var deletes = [] if (items.QueryResponse.SalesReceipt) { items.QueryResponse.SalesReceipt.forEach(function (e) { deletes.push(function(cb) { qbo.deleteSalesReceipt(e.Id, cb) }) }) } else { done() } async.series(deletes, function(e, r) { done() }) }) }) })