UNPKG

freshbooks-js

Version:

Freshbooks for NodeJS ES Harmoney

360 lines (290 loc) 9.41 kB
// mocha (function() { "use strict"; var expect = require('expect.js'); var freshbooks = require('./lib/helpers'); var thunkify = require('thunkify'); var request = require('request'); var post = thunkify(request.post); function get_deep_value(obj, path) { if(typeof path === "string") { path = path.split("."); } var p; while( p = path.shift() ) { obj = obj[p] } return obj; } describe('Setup and Config:', function() { it('Has a subdomin to test with', function() { expect(freshbooks.config.subdomain).to.be.a('string'); }); it('has a method to set auth info', function() { expect(freshbooks.config.update).to.be.a('function'); }); // it('Has an api url') }); describe('The API methods', function() { it('has a function for every freshbooks.methods item', function() { for(var i=0,len=freshbooks.methods.length; i<len; i++) { expect( get_deep_value(freshbooks, freshbooks.methods[i]) ).to.be.a('function'); } }); }); /** TODO, 1. ensure parsed JSON response matches to random sample 1. add DOM / xpath methods for checking XML against JSON */ describe("Connections to system", function() { var data; var data1; before(function*() { data = yield freshbooks.system.current(null, { basic_auth:true, subdomain:freshbooks.config.subdomain }); data1 = yield freshbooks.api.open("system.current", null, { basic_auth:true, subdomain:freshbooks.config.subdomain }); }); it("should connect to the system endpoint", function*() { // console.log("data", data.json); expect(data.status).to.be("ok"); expect(data.json.response.system.company_name).to.equal(data1.json.response.system.company_name) // console.log("system() %j", data && data.json); }); }); describe("Test update expense", function() { var data2; var category; var expenses; var expense_id; before(function*(){ category = yield freshbooks.category.create({ name:"test update expense, category " + (1000*Math.random()) }, { basic_auth:true, subdomain:freshbooks.config.subdomain }); yield freshbooks.expense.create({ staff_id:1, amount:25.55, notes:"Test amount", category_id:category.get("category_id") }, { basic_auth:true, subdomain:freshbooks.config.subdomain }); expenses = yield freshbooks.expense.list(null, { basic_auth:true, subdomain:freshbooks.config.subdomain }); // console.log("expenses %j", expenses.json) expense_id = expenses.get("expenses").expense[0].expense_id; // console.log("expense_id", expense_id) var data1 = yield freshbooks.expense.get({ expense_id:expense_id }, { basic_auth:true, subdomain:freshbooks.config.subdomain }); data2 = yield freshbooks.expense.update({ expense_id:expense_id, notes:data1.json.response.note + "This is an updated value" }, { basic_auth:true, subdomain:freshbooks.config.subdomain }); // console.log("Results", data1.json, data2.json); }); it("modify the note field",function*(){ expect(expense_id).to.be.ok(); // console.log(data2.get("note"), "", expenses); }); }); describe("Connections to expenses", function() { var data; var expense; var category; var expense_get; var expense_delete; var expense_update; var expense_list; before(function*() { category = yield freshbooks.category.create({ name:"test category " + (1000*Math.random()) }, { basic_auth:true, subdomain:freshbooks.config.subdomain }); // console.log("category.json", category.json) // need to get a staff id expense = yield freshbooks.expense.create({ staff_id:1, amount:25.55, notes:"Test amount", category_id:category.get("category_id") }, { basic_auth:true, subdomain:freshbooks.config.subdomain }); // console.log("expense.json", expense.json); expense_get = yield freshbooks.expense.get({ expense_id:expense.get("expense_id") }, { basic_auth:true, subdomain:freshbooks.config.subdomain }); expense_list = yield freshbooks.expense.list(null, { basic_auth:true, subdomain:freshbooks.config.subdomain }); expense_update = yield freshbooks.expense.update({ expense_id:expense.get("expense_id"), notes:"This is an updated amout" }, { basic_auth:true, subdomain:freshbooks.config.subdomain }); expense_delete = yield freshbooks.expense.delete({ expense_id:expense.get("expense_id") }, { basic_auth:true, subdomain:freshbooks.config.subdomain }); }); it("should have a category id b/c expenses require it.", function*() { expect(category.get("category_id")).to.equal( category.get("category_id") ); }); it("should connect to the expense list endpoint", function*() { expect(expense_list.status).to.be("ok"); }); it("should connect to the expense_update endpoint", function*() { expect(expense_update.status).to.be("ok"); }); it("should connect to the expense_get endpoint", function*() { expect(expense_get.status).to.be("ok"); }); it("should connect to the expense_delete endpoint", function*() { expect(expense_delete.status).to.be("ok"); }); it("should create a new expense via the expense endpoint", function*() { expect(expense.status).to.be("ok"); expect(expense.get("expense_id")).to.be.a("number"); }); }); describe("During a connection to the estimate endpoint", function() { var estimate; var client; var estimate_get; var estimate_delete; var client_delete; var send_email; var estimate_list; before(function*() { client = yield freshbooks.client.create({ email:"username@example.com" }, { basic_auth:true, subdomain:freshbooks.config.subdomain }); // console.log("client", client.json.response, client.get("client_id")); estimate = yield freshbooks.estimate.create({ client_id:client.get("client_id") }, { basic_auth:true, subdomain:freshbooks.config.subdomain }); // console.log("estimate", estimate.json, estimate.status) estimate_get = yield freshbooks.estimate.get({ estimate_id:estimate.get("estimate_id") }, { basic_auth:true, subdomain:freshbooks.config.subdomain }); estimate_list = yield freshbooks.estimate.list(null, { basic_auth:true, subdomain:freshbooks.config.subdomain }); send_email = yield freshbooks.estimate.sendByEmail({ estimate_id:estimate.get("estimate_id") // email:"gregory.tomlinson@gmail.com" }, { basic_auth:true, subdomain:freshbooks.config.subdomain }) estimate_delete = yield freshbooks.estimate.delete({ estimate_id:estimate.get("estimate_id") }, { basic_auth:true, subdomain:freshbooks.config.subdomain }); client_delete = yield freshbooks.client.delete({ client_id:client.get("client_id") }, { basic_auth:true, subdomain:freshbooks.config.subdomain }); }); it("allows a new client to be created", function*() { // console.log("client %j", client.json, client.status) expect(client.status).to.equal("ok"); expect(client.get("client_id")).to.be.ok(); }); it("estimate_get", function*() { // console.log("%j", estimate_get && estimate_get.json.response); expect(estimate_get.get("estimate").estimate_id).to.equal( estimate.get("estimate_id") ); }); it("should send and email via sendByEmail endpoint", function*() { expect(send_email.status).to.be("ok"); }); it("should connect via estimate_list endpoint", function*() { expect(estimate_list.status).to.be("ok"); }); it("should connect via client_delete endpoint", function*() { expect(client_delete.status).to.be("ok"); }); it("should connect via estimate_delete endpoint", function*() { expect(estimate_delete.status).to.be("ok"); }); it("should connect via estimate_get endpoint", function*() { expect(estimate_get.status).to.be("ok"); }); }); describe("Connection to the payment gateway", function() { var data; before(function*() { data = yield freshbooks.gateway.list(null, { basic_auth:true, subdomain:freshbooks.config.subdomain }); }); it("should connect to the gateway endpoint", function*() { // console.log("gateway.list() %j", data && data.json.response); }); }); // describe("Cleanup", function() { // var clients; // var resps; // before(function*() { // clients = yield freshbooks.client.list; // resps = []; // console.log(clients.get("clients"), "clients.json.") // for(var i=0, len=clients.get("clients").length; i<len; i++) { // var item = clients.get("clients")[i]; // console.log("item", item) // var clientd = yield freshbooks.client.delete({ // client_id:item.client_id // }); // resps.push(clientd); // } // }) // it("Had clients", function* (){ // // console.log("clients.get("clients")", clients.get("clients")) // expect(clients.get("clients").length===0).to.be(true) // }); // }) })();