xeroizer-3-pre-beta 3.0.0.pre.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (429) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +41 -0
  3. data/README.md +34 -0
  4. data/lib/class_level_inheritable_attributes.rb +28 -0
  5. data/lib/xeroizer.rb +117 -0
  6. data/lib/xeroizer/application_http_proxy.rb +30 -0
  7. data/lib/xeroizer/ca-certificates.crt +2694 -0
  8. data/lib/xeroizer/configuration.rb +19 -0
  9. data/lib/xeroizer/connection.rb +31 -0
  10. data/lib/xeroizer/exceptions.rb +161 -0
  11. data/lib/xeroizer/generic_application.rb +90 -0
  12. data/lib/xeroizer/http.rb +160 -0
  13. data/lib/xeroizer/http_encoding_helper.rb +49 -0
  14. data/lib/xeroizer/http_response.rb +154 -0
  15. data/lib/xeroizer/logging.rb +8 -0
  16. data/lib/xeroizer/models/account.rb +72 -0
  17. data/lib/xeroizer/models/accounts_payable.rb +13 -0
  18. data/lib/xeroizer/models/accounts_receivable.rb +13 -0
  19. data/lib/xeroizer/models/address.rb +41 -0
  20. data/lib/xeroizer/models/allocation.rb +13 -0
  21. data/lib/xeroizer/models/attachment.rb +95 -0
  22. data/lib/xeroizer/models/balances.rb +17 -0
  23. data/lib/xeroizer/models/bank_account.rb +13 -0
  24. data/lib/xeroizer/models/bank_transaction.rb +95 -0
  25. data/lib/xeroizer/models/bank_transfer.rb +28 -0
  26. data/lib/xeroizer/models/batch_payment.rb +24 -0
  27. data/lib/xeroizer/models/batch_payments.rb +14 -0
  28. data/lib/xeroizer/models/bills.rb +13 -0
  29. data/lib/xeroizer/models/branding_theme.rb +62 -0
  30. data/lib/xeroizer/models/contact.rb +77 -0
  31. data/lib/xeroizer/models/contact_group.rb +64 -0
  32. data/lib/xeroizer/models/contact_person.rb +20 -0
  33. data/lib/xeroizer/models/contact_purchases_tracking_category.rb +19 -0
  34. data/lib/xeroizer/models/contact_sales_tracking_category.rb +19 -0
  35. data/lib/xeroizer/models/credit_note.rb +164 -0
  36. data/lib/xeroizer/models/currency.rb +30 -0
  37. data/lib/xeroizer/models/employee.rb +73 -0
  38. data/lib/xeroizer/models/expense_claim.rb +29 -0
  39. data/lib/xeroizer/models/external_link.rb +16 -0
  40. data/lib/xeroizer/models/from_bank_account.rb +13 -0
  41. data/lib/xeroizer/models/invoice.rb +229 -0
  42. data/lib/xeroizer/models/invoice_reminder.rb +19 -0
  43. data/lib/xeroizer/models/item.rb +39 -0
  44. data/lib/xeroizer/models/item_purchase_details.rb +20 -0
  45. data/lib/xeroizer/models/item_sales_details.rb +19 -0
  46. data/lib/xeroizer/models/journal.rb +27 -0
  47. data/lib/xeroizer/models/journal_line.rb +29 -0
  48. data/lib/xeroizer/models/journal_line_tracking_category.rb +21 -0
  49. data/lib/xeroizer/models/line_amount_type.rb +11 -0
  50. data/lib/xeroizer/models/line_item.rb +64 -0
  51. data/lib/xeroizer/models/line_item_sum.rb +21 -0
  52. data/lib/xeroizer/models/manual_journal.rb +49 -0
  53. data/lib/xeroizer/models/manual_journal_line.rb +28 -0
  54. data/lib/xeroizer/models/online_invoice.rb +37 -0
  55. data/lib/xeroizer/models/option.rb +18 -0
  56. data/lib/xeroizer/models/organisation.rb +85 -0
  57. data/lib/xeroizer/models/overpayment.rb +40 -0
  58. data/lib/xeroizer/models/payment.rb +48 -0
  59. data/lib/xeroizer/models/payment_service.rb +22 -0
  60. data/lib/xeroizer/models/payment_terms.rb +16 -0
  61. data/lib/xeroizer/models/payroll/address.rb +53 -0
  62. data/lib/xeroizer/models/payroll/bank_account.rb +35 -0
  63. data/lib/xeroizer/models/payroll/benefit_line.rb +26 -0
  64. data/lib/xeroizer/models/payroll/benefit_type.rb +45 -0
  65. data/lib/xeroizer/models/payroll/deduction_line.rb +32 -0
  66. data/lib/xeroizer/models/payroll/deduction_type.rb +49 -0
  67. data/lib/xeroizer/models/payroll/earnings_line.rb +39 -0
  68. data/lib/xeroizer/models/payroll/earnings_type.rb +53 -0
  69. data/lib/xeroizer/models/payroll/employee.rb +67 -0
  70. data/lib/xeroizer/models/payroll/leave_application.rb +27 -0
  71. data/lib/xeroizer/models/payroll/leave_line.rb +30 -0
  72. data/lib/xeroizer/models/payroll/leave_period.rb +15 -0
  73. data/lib/xeroizer/models/payroll/pay_items.rb +22 -0
  74. data/lib/xeroizer/models/payroll/pay_run.rb +33 -0
  75. data/lib/xeroizer/models/payroll/pay_schedule.rb +40 -0
  76. data/lib/xeroizer/models/payroll/pay_template.rb +24 -0
  77. data/lib/xeroizer/models/payroll/payment_method.rb +24 -0
  78. data/lib/xeroizer/models/payroll/paystub.rb +44 -0
  79. data/lib/xeroizer/models/payroll/reimbursement_line.rb +21 -0
  80. data/lib/xeroizer/models/payroll/reimbursement_type.rb +22 -0
  81. data/lib/xeroizer/models/payroll/salary_and_wage.rb +29 -0
  82. data/lib/xeroizer/models/payroll/super_line.rb +40 -0
  83. data/lib/xeroizer/models/payroll/tax_declaration.rb +50 -0
  84. data/lib/xeroizer/models/payroll/time_off_line.rb +20 -0
  85. data/lib/xeroizer/models/payroll/time_off_type.rb +32 -0
  86. data/lib/xeroizer/models/payroll/work_location.rb +25 -0
  87. data/lib/xeroizer/models/phone.rb +26 -0
  88. data/lib/xeroizer/models/prepayment.rb +41 -0
  89. data/lib/xeroizer/models/purchase_order.rb +49 -0
  90. data/lib/xeroizer/models/receipt.rb +39 -0
  91. data/lib/xeroizer/models/repeating_invoice.rb +80 -0
  92. data/lib/xeroizer/models/sales.rb +13 -0
  93. data/lib/xeroizer/models/schedule.rb +34 -0
  94. data/lib/xeroizer/models/tax_component.rb +13 -0
  95. data/lib/xeroizer/models/tax_rate.rb +36 -0
  96. data/lib/xeroizer/models/to_bank_account.rb +13 -0
  97. data/lib/xeroizer/models/tracking_category.rb +23 -0
  98. data/lib/xeroizer/models/tracking_category_child.rb +20 -0
  99. data/lib/xeroizer/models/user.rb +26 -0
  100. data/lib/xeroizer/oauth.rb +162 -0
  101. data/lib/xeroizer/oauth2.rb +66 -0
  102. data/lib/xeroizer/oauth2_application.rb +42 -0
  103. data/lib/xeroizer/partner_application.rb +52 -0
  104. data/lib/xeroizer/payroll_application.rb +33 -0
  105. data/lib/xeroizer/private_application.rb +26 -0
  106. data/lib/xeroizer/public_application.rb +22 -0
  107. data/lib/xeroizer/record/application_helper.rb +32 -0
  108. data/lib/xeroizer/record/base.rb +203 -0
  109. data/lib/xeroizer/record/base_model.rb +253 -0
  110. data/lib/xeroizer/record/base_model_http_proxy.rb +141 -0
  111. data/lib/xeroizer/record/model_definition_helper.rb +101 -0
  112. data/lib/xeroizer/record/payroll_base.rb +29 -0
  113. data/lib/xeroizer/record/payroll_base_model.rb +29 -0
  114. data/lib/xeroizer/record/record_association_helper.rb +141 -0
  115. data/lib/xeroizer/record/validation_helper.rb +75 -0
  116. data/lib/xeroizer/record/validators/associated_validator.rb +34 -0
  117. data/lib/xeroizer/record/validators/block_validator.rb +22 -0
  118. data/lib/xeroizer/record/validators/inclusion_of_validator.rb +22 -0
  119. data/lib/xeroizer/record/validators/length_of_validator.rb +23 -0
  120. data/lib/xeroizer/record/validators/presence_of_validator.rb +19 -0
  121. data/lib/xeroizer/record/validators/validator.rb +33 -0
  122. data/lib/xeroizer/record/xml_helper.rb +144 -0
  123. data/lib/xeroizer/report/aged_receivables_by_contact.rb +42 -0
  124. data/lib/xeroizer/report/base.rb +42 -0
  125. data/lib/xeroizer/report/cell.rb +32 -0
  126. data/lib/xeroizer/report/cell_xml_helper.rb +74 -0
  127. data/lib/xeroizer/report/factory.rb +54 -0
  128. data/lib/xeroizer/report/row/header.rb +12 -0
  129. data/lib/xeroizer/report/row/row.rb +48 -0
  130. data/lib/xeroizer/report/row/section.rb +10 -0
  131. data/lib/xeroizer/report/row/summary.rb +9 -0
  132. data/lib/xeroizer/report/row/xml_helper.rb +77 -0
  133. data/lib/xeroizer/report/xml_helper.rb +58 -0
  134. data/lib/xeroizer/response.rb +74 -0
  135. data/lib/xeroizer/version.rb +3 -0
  136. data/test/acceptance/about_creating_bank_transactions_test.rb +170 -0
  137. data/test/acceptance/about_creating_prepayment_test.rb +41 -0
  138. data/test/acceptance/about_fetching_bank_transactions_test.rb +53 -0
  139. data/test/acceptance/about_online_invoice_test.rb +25 -0
  140. data/test/acceptance/acceptance_test.rb +77 -0
  141. data/test/acceptance/bank_transaction_reference_data.rb +32 -0
  142. data/test/acceptance/bank_transfer_test.rb +21 -0
  143. data/test/acceptance/bulk_operations_test.rb +50 -0
  144. data/test/acceptance/connections_test.rb +11 -0
  145. data/test/stub_responses/accounts.xml +589 -0
  146. data/test/stub_responses/api_exception.xml +153 -0
  147. data/test/stub_responses/bad_request.json +6 -0
  148. data/test/stub_responses/bogus_oauth_error +1 -0
  149. data/test/stub_responses/branding_themes.xml +20 -0
  150. data/test/stub_responses/connections.json +16 -0
  151. data/test/stub_responses/contact.xml +54 -0
  152. data/test/stub_responses/contact_with_details.xml +79 -0
  153. data/test/stub_responses/contacts.xml +0 -0
  154. data/test/stub_responses/create_credit_note.xml +104 -0
  155. data/test/stub_responses/create_invoice.xml +64 -0
  156. data/test/stub_responses/credit_note.xml +75 -0
  157. data/test/stub_responses/credit_note_not_found_error.xml +1 -0
  158. data/test/stub_responses/credit_notes.xml +169 -0
  159. data/test/stub_responses/currencies.xml +12 -0
  160. data/test/stub_responses/employees.xml +29 -0
  161. data/test/stub_responses/expired_oauth2_token.json +6 -0
  162. data/test/stub_responses/generic_response_error.json +6 -0
  163. data/test/stub_responses/invalid_api_key_error.xml +1 -0
  164. data/test/stub_responses/invalid_consumer_key +1 -0
  165. data/test/stub_responses/invalid_oauth2_request_token.json +6 -0
  166. data/test/stub_responses/invalid_request_token +1 -0
  167. data/test/stub_responses/invalid_tenant_header.json +6 -0
  168. data/test/stub_responses/invoice.xml +84 -0
  169. data/test/stub_responses/invoice_not_found_error.xml +1 -0
  170. data/test/stub_responses/invoices.xml +1899 -0
  171. data/test/stub_responses/items.xml +112 -0
  172. data/test/stub_responses/manual_journal.xml +45 -0
  173. data/test/stub_responses/manual_journals.xml +40 -0
  174. data/test/stub_responses/nonce_used +1 -0
  175. data/test/stub_responses/object_not_found.json +6 -0
  176. data/test/stub_responses/organisation.xml +55 -0
  177. data/test/stub_responses/organisations.xml +35 -0
  178. data/test/stub_responses/payment_service.xml +15 -0
  179. data/test/stub_responses/payments.xml +1121 -0
  180. data/test/stub_responses/prepayments.xml +27 -0
  181. data/test/stub_responses/rate_limit_exceeded +1 -0
  182. data/test/stub_responses/records/contact-043892a1-aef1-4c18-88d8-b8ccb6d31466.xml +38 -0
  183. data/test/stub_responses/records/contact-09664078-efe2-4a88-89a5-67eac9b0047b.xml +40 -0
  184. data/test/stub_responses/records/contact-0a4cf37b-a1a8-4753-9ee2-f9207f63a8ff.xml +48 -0
  185. data/test/stub_responses/records/contact-0e74f929-11b9-4255-a035-1fdfe573e676.xml +40 -0
  186. data/test/stub_responses/records/contact-0f471ca5-15c9-405e-a1b9-7cc35194b673.xml +38 -0
  187. data/test/stub_responses/records/contact-13cd4c47-baa6-4f07-93f6-6442310df4bf.xml +47 -0
  188. data/test/stub_responses/records/contact-158a2667-82ee-43bf-8f33-a6cc9524092d.xml +38 -0
  189. data/test/stub_responses/records/contact-17465072-6fa3-40bf-bc42-97765d9e1bea.xml +38 -0
  190. data/test/stub_responses/records/contact-1975b0ed-b7ba-4c61-bae8-2aa6d78b0dee.xml +39 -0
  191. data/test/stub_responses/records/contact-1b2be6e9-8d58-4da9-aaf8-4fe5471b653c.xml +53 -0
  192. data/test/stub_responses/records/contact-1c40da58-fe1d-4e97-b729-b2abdae94d9e.xml +38 -0
  193. data/test/stub_responses/records/contact-258176a5-c622-4394-9c94-6f88c3ea12e5.xml +40 -0
  194. data/test/stub_responses/records/contact-299dd3a0-a417-4a37-8a04-2f55e91963e5.xml +40 -0
  195. data/test/stub_responses/records/contact-2be39278-5154-4ed1-8eb0-676f25acfc66.xml +40 -0
  196. data/test/stub_responses/records/contact-2e58cff6-488c-4a32-884b-baf848010229.xml +40 -0
  197. data/test/stub_responses/records/contact-2faccd41-935e-40aa-b74e-e2fc28ac34c3.xml +38 -0
  198. data/test/stub_responses/records/contact-31af01e7-2ca7-45b9-a500-b02db996568e.xml +38 -0
  199. data/test/stub_responses/records/contact-344f1113-a25b-4344-b82e-bedeacc17c8e.xml +40 -0
  200. data/test/stub_responses/records/contact-3e776c4b-ea9e-4bb1-96be-6b0c7a71a37f.xml +39 -0
  201. data/test/stub_responses/records/contact-3fc1fc6c-e5ff-4e40-b6f3-7eb535637d87.xml +38 -0
  202. data/test/stub_responses/records/contact-416ab20c-5357-4beb-a740-e8d175d71efb.xml +38 -0
  203. data/test/stub_responses/records/contact-41a42865-f15a-4fa1-b643-47877608f557.xml +54 -0
  204. data/test/stub_responses/records/contact-42771b60-19a7-4692-af81-dd9f9b9362d4.xml +43 -0
  205. data/test/stub_responses/records/contact-451ceb28-9610-44c9-8f35-3225482f2413.xml +40 -0
  206. data/test/stub_responses/records/contact-4ab343ad-1ebb-4afe-9d48-1814a93c2081.xml +38 -0
  207. data/test/stub_responses/records/contact-4bb77692-42d4-4565-85a0-8849eb85e039.xml +39 -0
  208. data/test/stub_responses/records/contact-4dec292f-3ab7-46a8-83e4-5fb5eac42c7f.xml +40 -0
  209. data/test/stub_responses/records/contact-4e2f192e-8397-4d4d-97ca-a4fc5ac531bf.xml +38 -0
  210. data/test/stub_responses/records/contact-5188c17c-7786-4436-ad6e-9da2997386d0.xml +40 -0
  211. data/test/stub_responses/records/contact-52442753-b1c4-40b7-9b79-c33997de5837.xml +40 -0
  212. data/test/stub_responses/records/contact-565acaa9-e7f3-4fbf-80c3-16b081ddae10.xml +38 -0
  213. data/test/stub_responses/records/contact-571a2414-81ff-4f8f-8498-d91d83793131.xml +44 -0
  214. data/test/stub_responses/records/contact-58697449-85ef-46ae-83fc-6a9446f037fb.xml +40 -0
  215. data/test/stub_responses/records/contact-58bf2ae3-5144-4628-8de2-e165ac2bcdc6.xml +40 -0
  216. data/test/stub_responses/records/contact-5d41dafd-eb7e-42c1-bd5a-ba3be1da0960.xml +38 -0
  217. data/test/stub_responses/records/contact-5f005a09-5ce4-4fb4-8096-e69c18be636e.xml +38 -0
  218. data/test/stub_responses/records/contact-60d578d9-3e10-4aef-b5dc-9d9fd60a3633.xml +47 -0
  219. data/test/stub_responses/records/contact-62392126-dba4-4a75-b907-5875ebf75259.xml +40 -0
  220. data/test/stub_responses/records/contact-642c7fb5-e8e5-48e1-a710-39a18c6c3217.xml +40 -0
  221. data/test/stub_responses/records/contact-64aebf9c-bb89-4b38-b99b-405bd1ece6fd.xml +40 -0
  222. data/test/stub_responses/records/contact-64eedbc9-1fa0-485a-837f-705f23188161.xml +38 -0
  223. data/test/stub_responses/records/contact-65e96c9f-1595-4653-9a8a-2a36d49223c2.xml +40 -0
  224. data/test/stub_responses/records/contact-67d26b93-ccb4-4890-9bf1-284b70ea755d.xml +38 -0
  225. data/test/stub_responses/records/contact-69d3e538-44b3-4e00-a5f6-7dddcb6e0656.xml +40 -0
  226. data/test/stub_responses/records/contact-6a8450bc-f81a-4bb0-a8f6-aa4afe9497c7.xml +40 -0
  227. data/test/stub_responses/records/contact-6c70e424-41d6-4b9b-af3e-b3a9f3589106.xml +40 -0
  228. data/test/stub_responses/records/contact-6de0b0cf-560c-4503-aab3-e1543c329deb.xml +54 -0
  229. data/test/stub_responses/records/contact-72dd6a02-396e-42a2-a4d6-cc3fa75dfece.xml +41 -0
  230. data/test/stub_responses/records/contact-755f1475-d255-43a8-bedc-5ea7fd26c71f.xml +51 -0
  231. data/test/stub_responses/records/contact-78a9d0a0-3d8c-4f84-af3e-f260bf4a9dc0.xml +38 -0
  232. data/test/stub_responses/records/contact-79aa39ca-22b0-42c2-9026-78757a29d665.xml +42 -0
  233. data/test/stub_responses/records/contact-804f4140-5978-48fe-ba20-b56e5b834b18.xml +40 -0
  234. data/test/stub_responses/records/contact-812d4f28-1681-4241-8e34-d15c5520ba35.xml +38 -0
  235. data/test/stub_responses/records/contact-860b99a9-0958-4c8d-a98f-bb1f092b16bb.xml +60 -0
  236. data/test/stub_responses/records/contact-87c8da45-97cc-46be-b170-398da0eacfb8.xml +40 -0
  237. data/test/stub_responses/records/contact-8a154a19-6c6c-404b-bbc9-6deae2d18251.xml +38 -0
  238. data/test/stub_responses/records/contact-8bb6931d-2865-44e9-9a23-ed1fb9c7a46c.xml +40 -0
  239. data/test/stub_responses/records/contact-936c9759-01da-4063-b472-424ab9f48212.xml +38 -0
  240. data/test/stub_responses/records/contact-9d12a994-9640-4b75-95cc-3de1e9d0ef09.xml +38 -0
  241. data/test/stub_responses/records/contact-9fe59245-1fbb-4157-93c3-dc97388f3746.xml +40 -0
  242. data/test/stub_responses/records/contact-a06a7225-6f8a-4522-8400-c534dd43a16e.xml +40 -0
  243. data/test/stub_responses/records/contact-a76a85fe-73a2-46fa-aba7-791f36103cdb.xml +40 -0
  244. data/test/stub_responses/records/contact-a93b5f40-0346-4d21-9181-431e129911c0.xml +40 -0
  245. data/test/stub_responses/records/contact-abf272dd-6b1d-4829-af88-c57bf55855e3.xml +38 -0
  246. data/test/stub_responses/records/contact-ad24c33b-256b-4157-ad56-cbcf0e8db7b1.xml +47 -0
  247. data/test/stub_responses/records/contact-b107129d-f4c9-438e-9573-64b778527f4a.xml +40 -0
  248. data/test/stub_responses/records/contact-b233288a-aa26-4b26-9fc7-779d797dd56f.xml +40 -0
  249. data/test/stub_responses/records/contact-b2b5333a-2546-4975-891f-d71a8a640d23.xml +38 -0
  250. data/test/stub_responses/records/contact-b4d149bf-1823-4bd2-96da-9032388c9686.xml +40 -0
  251. data/test/stub_responses/records/contact-b78d4fd1-4306-4d83-a0b9-61458d1c53a2.xml +40 -0
  252. data/test/stub_responses/records/contact-b7d108a8-d5f7-4f16-a7c9-26eaed98e8de.xml +40 -0
  253. data/test/stub_responses/records/contact-baeed0f3-7989-4874-99b3-59f23032cb73.xml +38 -0
  254. data/test/stub_responses/records/contact-bc51a3a1-b7f6-46ca-ac9e-19b87e6ca100.xml +40 -0
  255. data/test/stub_responses/records/contact-be9f3aab-52f5-4d9c-94b4-87f7d9e5ee8b.xml +38 -0
  256. data/test/stub_responses/records/contact-c135f994-01e4-427b-9e15-acfe8a477c16.xml +49 -0
  257. data/test/stub_responses/records/contact-c14edf75-15e4-4a9c-86e4-f52e2fe7cfa4.xml +40 -0
  258. data/test/stub_responses/records/contact-ca9b9abc-c2dc-4221-8101-31f464d314cc.xml +44 -0
  259. data/test/stub_responses/records/contact-cc4db604-9ed8-4eef-8a29-51b5b70496a0.xml +38 -0
  260. data/test/stub_responses/records/contact-cce9b044-be4a-43b3-9dc7-c027d8dd35b2.xml +38 -0
  261. data/test/stub_responses/records/contact-d0cd2c4f-18a0-4f7c-a32a-2db00f29d298.xml +43 -0
  262. data/test/stub_responses/records/contact-d6851dc2-9ed9-4515-bc0b-810b09c06a6a.xml +38 -0
  263. data/test/stub_responses/records/contact-d6a384fb-f46f-41a3-8ac7-b7bc9e0b5efa.xml +46 -0
  264. data/test/stub_responses/records/contact-d74e61cf-2ad0-4f0d-b9d1-6a808e3f70cf.xml +40 -0
  265. data/test/stub_responses/records/contact-d9ab0f61-3b56-4e2b-be39-f33c11bd99e3.xml +40 -0
  266. data/test/stub_responses/records/contact-dbb1f0b5-a71b-4458-8462-104acd0fec6b.xml +38 -0
  267. data/test/stub_responses/records/contact-dd981bd6-40dd-496d-a282-bf7d3391b8b9.xml +40 -0
  268. data/test/stub_responses/records/contact-e1826204-cc0a-42a5-a6d0-4b352d9d5953.xml +40 -0
  269. data/test/stub_responses/records/contact-e2d955db-f366-42dd-87f7-fbdb4da2306f.xml +40 -0
  270. data/test/stub_responses/records/contact-e32e2130-3d27-443a-8313-48fffa03cf53.xml +40 -0
  271. data/test/stub_responses/records/contact-e3a68332-d322-4816-8678-73a537c8cd33.xml +38 -0
  272. data/test/stub_responses/records/contact-e6ac76a3-ca32-4fa1-8ef9-6a4bf8b0ec2a.xml +40 -0
  273. data/test/stub_responses/records/contact-e6ca965d-7c48-480e-be39-e847307f474a.xml +38 -0
  274. data/test/stub_responses/records/contact-e77d1f20-2e8e-46ec-9a10-50335a216724.xml +40 -0
  275. data/test/stub_responses/records/contact-e8b98c13-a424-41d2-ba0e-7b7621411e7a.xml +38 -0
  276. data/test/stub_responses/records/contact-e8e9a2c2-3e7e-48ed-8528-c3d61b28f276.xml +39 -0
  277. data/test/stub_responses/records/contact-eb43fcc6-87ec-4a0a-b243-d718bee4e2cb.xml +38 -0
  278. data/test/stub_responses/records/contact-ef6f54c1-eb45-4956-b8cd-1be82ad665f2.xml +43 -0
  279. data/test/stub_responses/records/contact-efdb3600-f233-42e2-8f18-ce7e2a95e4b1.xml +38 -0
  280. data/test/stub_responses/records/contact-f7eca431-5c97-4d24-93fd-004bb8a6c644.xml +40 -0
  281. data/test/stub_responses/records/contact-fb078879-5d6d-474f-825f-61dc90689349.xml +38 -0
  282. data/test/stub_responses/records/contact-fc39b273-4aa2-4785-99ca-24672f6c0000.xml +38 -0
  283. data/test/stub_responses/records/contact-fc9ec3a6-a2fe-4300-a8cb-ca8a0b3662e0.xml +40 -0
  284. data/test/stub_responses/records/contact-fdf96102-7491-44b6-bf4d-7a77ff25f890.xml +40 -0
  285. data/test/stub_responses/records/contact-fe61ead1-8afc-4f0b-beda-066620227aad.xml +38 -0
  286. data/test/stub_responses/records/credit_note-371cd138-1e5c-4ec1-a8c6-a1c10e8bdab1.xml +73 -0
  287. data/test/stub_responses/records/credit_note-3bffc09b-79f2-490d-b91b-c59b700b43a4.xml +95 -0
  288. data/test/stub_responses/records/credit_note-43c678ee-f357-48e2-b192-b6e3634762f9.xml +94 -0
  289. data/test/stub_responses/records/credit_note-482c018b-d329-4e05-9b4f-7a4cfc695aa0.xml +77 -0
  290. data/test/stub_responses/records/credit_note-4f67130a-749a-4ee6-98b2-743adbc11245.xml +62 -0
  291. data/test/stub_responses/records/credit_note-50e98404-2fba-4031-af67-8ba4bb227c44.xml +77 -0
  292. data/test/stub_responses/records/credit_note-7df8949c-b71f-40c0-bbcf-39f2f450f286.xml +75 -0
  293. data/test/stub_responses/records/credit_note-b356e488-2678-4be4-ad4b-d294df2d48d6.xml +78 -0
  294. data/test/stub_responses/records/invoice-0032f627-3156-4d30-9b1c-4d3b994dc921.xml +84 -0
  295. data/test/stub_responses/records/invoice-00c9511b-24b9-4190-a90a-8abf2fe9f4a0.xml +76 -0
  296. data/test/stub_responses/records/invoice-024d7994-a26c-4c20-9894-13934840fc31.xml +74 -0
  297. data/test/stub_responses/records/invoice-0e64a623-c2a1-446a-93ed-eb897f118cbc.xml +97 -0
  298. data/test/stub_responses/records/invoice-15e88e57-2554-4496-a18e-eb3f5c622345.xml +75 -0
  299. data/test/stub_responses/records/invoice-166f0588-d0ba-458c-b28a-8edd4c8fc463.xml +75 -0
  300. data/test/stub_responses/records/invoice-1d1ba340-afa2-4f4c-8ff7-a147bda9a47b.xml +93 -0
  301. data/test/stub_responses/records/invoice-290ef4c4-baec-492b-b4dd-c102826470ae.xml +87 -0
  302. data/test/stub_responses/records/invoice-30a87092-31b5-4a2c-831e-327486533dd2.xml +79 -0
  303. data/test/stub_responses/records/invoice-30dbd181-72a8-43df-b392-4241bf43d5fc.xml +79 -0
  304. data/test/stub_responses/records/invoice-33e4123e-7cdd-4f05-9a0a-eb8adeb2b868.xml +94 -0
  305. data/test/stub_responses/records/invoice-387db692-26ac-47e6-b6cc-015343809bda.xml +75 -0
  306. data/test/stub_responses/records/invoice-3b28bf11-ed2f-4cf4-8e9e-fcae730cc292.xml +91 -0
  307. data/test/stub_responses/records/invoice-3fcb9847-b350-412e-ab90-7d9d774ad881.xml +91 -0
  308. data/test/stub_responses/records/invoice-440613e4-4785-4eff-9ba1-c432816cf8c7.xml +78 -0
  309. data/test/stub_responses/records/invoice-4602eda6-abe9-448e-b65f-ae6bea21f0eb.xml +98 -0
  310. data/test/stub_responses/records/invoice-46441f63-873f-4cdc-a278-b8fe516f3abb.xml +94 -0
  311. data/test/stub_responses/records/invoice-4ad1ec01-f4a3-41d7-bbb4-d2ab2fec8e65.xml +74 -0
  312. data/test/stub_responses/records/invoice-4b9afceb-f7c7-4e64-8aac-7b009971fd52.xml +86 -0
  313. data/test/stub_responses/records/invoice-4edbf6d5-4e92-43af-bedd-7effc0b86833.xml +70 -0
  314. data/test/stub_responses/records/invoice-4fad1af2-b871-4ac5-a15a-3c5e32d2e2c4.xml +93 -0
  315. data/test/stub_responses/records/invoice-52ee4d67-cae4-462c-adb2-182c39017f3d.xml +83 -0
  316. data/test/stub_responses/records/invoice-54585f46-c1a0-4432-bd4f-c1fae2fba59b.xml +67 -0
  317. data/test/stub_responses/records/invoice-5613938b-9e27-472e-92ae-3b038b669d10.xml +87 -0
  318. data/test/stub_responses/records/invoice-5aa9451d-95d1-4f95-a966-bbab2573f71c.xml +75 -0
  319. data/test/stub_responses/records/invoice-5aadcd34-01a9-4b8d-a2bb-d7cc1de9fa45.xml +89 -0
  320. data/test/stub_responses/records/invoice-5f6deadf-36a2-495a-9980-ceb11e8af9a9.xml +85 -0
  321. data/test/stub_responses/records/invoice-625ffe1b-f5d8-438e-a376-981de5f5a733.xml +77 -0
  322. data/test/stub_responses/records/invoice-64cd559e-8e03-46af-b461-8555285cee71.xml +86 -0
  323. data/test/stub_responses/records/invoice-666f8dbb-bc9a-476c-8ec4-4665d7f83190.xml +63 -0
  324. data/test/stub_responses/records/invoice-66fbe37f-49b1-43fd-97ed-85114022cd2f.xml +79 -0
  325. data/test/stub_responses/records/invoice-673dd7cc-beb7-4697-83d4-0c47cb400cc2.xml +95 -0
  326. data/test/stub_responses/records/invoice-69fc971e-9b37-41c5-9c87-174330f22343.xml +66 -0
  327. data/test/stub_responses/records/invoice-70e6db69-e5a4-42c7-a397-aa3212c2945f.xml +75 -0
  328. data/test/stub_responses/records/invoice-762aa45d-4632-45b5-8087-b4f47690665e.xml +54 -0
  329. data/test/stub_responses/records/invoice-766d1289-b440-4675-a656-1a0612ecac77.xml +76 -0
  330. data/test/stub_responses/records/invoice-76bcb361-f93b-4513-b312-5a4af306d276.xml +67 -0
  331. data/test/stub_responses/records/invoice-76e3f056-479f-417c-a72b-f3d767899b87.xml +91 -0
  332. data/test/stub_responses/records/invoice-77b338ef-ecc0-4b95-a0d7-2617b0054611.xml +114 -0
  333. data/test/stub_responses/records/invoice-7be9956d-5316-4f6b-a66a-d355b3f159b2.xml +84 -0
  334. data/test/stub_responses/records/invoice-7dae876a-b424-436b-a4e6-17b3fdeec80c.xml +91 -0
  335. data/test/stub_responses/records/invoice-7e862d93-8dab-4856-8b0c-d844e09d750f.xml +68 -0
  336. data/test/stub_responses/records/invoice-803f70b0-56d9-4157-9787-41df271777a0.xml +84 -0
  337. data/test/stub_responses/records/invoice-86102312-aa3f-438c-9938-6840f4d8dda6.xml +75 -0
  338. data/test/stub_responses/records/invoice-8694c9c5-7097-4449-a708-b8c1982921a4.xml +69 -0
  339. data/test/stub_responses/records/invoice-86d6e00f-ef56-49f7-9a54-796ccd5ca057.xml +85 -0
  340. data/test/stub_responses/records/invoice-88e77f0f-54a5-4efc-a979-7e22223cc4d7.xml +66 -0
  341. data/test/stub_responses/records/invoice-8b0ccb6a-d9b7-4da5-8360-ef7fb157b5aa.xml +66 -0
  342. data/test/stub_responses/records/invoice-935fc854-8037-4111-8d91-993010c331cc.xml +74 -0
  343. data/test/stub_responses/records/invoice-95ef3000-c764-4ba9-a66a-b6e2d161f839.xml +62 -0
  344. data/test/stub_responses/records/invoice-962ef33f-c9d2-4602-9b9f-93a02bea23b3.xml +93 -0
  345. data/test/stub_responses/records/invoice-9868b472-1983-48e9-8edf-7e81ddf2c03a.xml +85 -0
  346. data/test/stub_responses/records/invoice-9a448e9b-a9fa-4a8b-98f5-6dc892a37374.xml +62 -0
  347. data/test/stub_responses/records/invoice-a1d04a14-96a8-4067-a0ff-8136990a354f.xml +91 -0
  348. data/test/stub_responses/records/invoice-a3bc62ef-f11b-4a9c-a4f9-a342bda371b5.xml +66 -0
  349. data/test/stub_responses/records/invoice-a6894ca0-60ee-4d45-9dd4-b44fcba46ec5.xml +90 -0
  350. data/test/stub_responses/records/invoice-a77268ce-74b2-483d-a2b3-70dbdc9e49d2.xml +78 -0
  351. data/test/stub_responses/records/invoice-a9f765e6-b9bc-4505-a47b-fb3ecb327e7b.xml +88 -0
  352. data/test/stub_responses/records/invoice-aa0173af-8707-4e7f-8dde-4c7a357bd312.xml +109 -0
  353. data/test/stub_responses/records/invoice-ab63738a-370a-43a5-bfa3-620d684e66d0.xml +83 -0
  354. data/test/stub_responses/records/invoice-b0344791-5a8a-40dd-a208-d99a461a6c10.xml +84 -0
  355. data/test/stub_responses/records/invoice-b1e53910-473c-46a3-b3cb-38ece571220e.xml +76 -0
  356. data/test/stub_responses/records/invoice-b2c02d0b-41a8-4d4d-97d7-014c78b3547d.xml +93 -0
  357. data/test/stub_responses/records/invoice-b75b3928-ab72-4424-8b93-9cdbbde4cd72.xml +90 -0
  358. data/test/stub_responses/records/invoice-bcd8a71f-aa31-4d0f-8a01-13ea26363ddf.xml +94 -0
  359. data/test/stub_responses/records/invoice-bfbb7c45-de02-45e7-b065-d9863ecfb0d8.xml +66 -0
  360. data/test/stub_responses/records/invoice-c12aff7e-12bf-4185-8702-460929f19674.xml +77 -0
  361. data/test/stub_responses/records/invoice-c3380b96-976d-4b3e-8b26-8d01eb6a3742.xml +87 -0
  362. data/test/stub_responses/records/invoice-c963f2b0-cbe1-4abd-9ccc-7e512c942068.xml +67 -0
  363. data/test/stub_responses/records/invoice-cba46b29-3788-4158-b668-ab10160ccbfe.xml +78 -0
  364. data/test/stub_responses/records/invoice-d62646b9-d0a9-4fdb-9561-756a8b7eba45.xml +63 -0
  365. data/test/stub_responses/records/invoice-dba2f021-f149-4191-a126-5351d587ab0e.xml +75 -0
  366. data/test/stub_responses/records/invoice-de5d9c29-21b3-4342-958b-ed72c4bd7ab0.xml +108 -0
  367. data/test/stub_responses/records/invoice-e3d96555-2876-4364-a46a-7551a4f52611.xml +123 -0
  368. data/test/stub_responses/records/invoice-e4a0afbd-aea0-450b-ae23-0ce921e84a77.xml +102 -0
  369. data/test/stub_responses/records/invoice-e9cb9ecb-58ef-43a8-bd20-69a85338142d.xml +76 -0
  370. data/test/stub_responses/records/invoice-ec9a6f67-7128-4a63-8ba3-5e516f455f9b.xml +94 -0
  371. data/test/stub_responses/records/invoice-ed0f2587-84fc-4aef-bc4b-b1a262e24484.xml +81 -0
  372. data/test/stub_responses/records/invoice-f362ca53-8ade-4047-865a-bb64bee5863d.xml +74 -0
  373. data/test/stub_responses/records/invoice-f571c38b-5be1-41e1-ad5a-ff6184284beb.xml +114 -0
  374. data/test/stub_responses/records/invoice-f5832195-5cd3-4660-ad3f-b73d9c64f263.xml +85 -0
  375. data/test/stub_responses/records/invoice-f9c857eb-64cd-4235-a078-d04b52c77ea7.xml +76 -0
  376. data/test/stub_responses/records/manual_journal-4765d07b-aa03-4e56-9166-50661958c864.xml +38 -0
  377. data/test/stub_responses/records/manual_journal-53fc5558-5b76-4ecd-ae5c-c4af3ccde87c.xml +31 -0
  378. data/test/stub_responses/records/manual_journal-bb6cfcfc-4500-4475-bd3a-93ee512428e0.xml +31 -0
  379. data/test/stub_responses/records/manual_journal-f00a355b-7374-445c-886b-0437bea4095c.xml +45 -0
  380. data/test/stub_responses/records/prepayment-7d3619b1-82cc-405b-8f44-9d4f9a787a8a.xml +92 -0
  381. data/test/stub_responses/records/repeating_invoice-ad3550bc-1ae0-45c0-a782-48c6d2061127.xml +43 -0
  382. data/test/stub_responses/refresh_responses.rb +29 -0
  383. data/test/stub_responses/repeating_invoices.xml +43 -0
  384. data/test/stub_responses/reports/trial_balance.xml +1435 -0
  385. data/test/stub_responses/tax_rates.xml +198 -0
  386. data/test/stub_responses/token_expired +1 -0
  387. data/test/stub_responses/tracking_categories.xml +27 -0
  388. data/test/stub_responses/unknown_error.xml +1 -0
  389. data/test/stub_responses/users.xml +17 -0
  390. data/test/test_helper.rb +72 -0
  391. data/test/unit/generic_application_test.rb +52 -0
  392. data/test/unit/http_test.rb +302 -0
  393. data/test/unit/models/address_test.rb +92 -0
  394. data/test/unit/models/bank_transaction_model_parsing_test.rb +133 -0
  395. data/test/unit/models/bank_transaction_test.rb +44 -0
  396. data/test/unit/models/bank_transaction_validation_test.rb +115 -0
  397. data/test/unit/models/contact_test.rb +132 -0
  398. data/test/unit/models/credit_note_test.rb +37 -0
  399. data/test/unit/models/employee_test.rb +43 -0
  400. data/test/unit/models/invoice_test.rb +133 -0
  401. data/test/unit/models/journal_line_test.rb +22 -0
  402. data/test/unit/models/journal_test.rb +44 -0
  403. data/test/unit/models/line_item_sum_test.rb +25 -0
  404. data/test/unit/models/line_item_test.rb +59 -0
  405. data/test/unit/models/manual_journal_test.rb +25 -0
  406. data/test/unit/models/organisation_test.rb +52 -0
  407. data/test/unit/models/payment_service_test.rb +29 -0
  408. data/test/unit/models/phone_test.rb +31 -0
  409. data/test/unit/models/prepayment_test.rb +21 -0
  410. data/test/unit/models/repeating_invoice_test.rb +36 -0
  411. data/test/unit/models/tax_rate_test.rb +132 -0
  412. data/test/unit/oauth2_test.rb +171 -0
  413. data/test/unit/oauth_config_test.rb +20 -0
  414. data/test/unit/oauth_test.rb +179 -0
  415. data/test/unit/private_application_test.rb +20 -0
  416. data/test/unit/record/base_model_test.rb +58 -0
  417. data/test/unit/record/base_test.rb +174 -0
  418. data/test/unit/record/block_validator_test.rb +125 -0
  419. data/test/unit/record/connection_test.rb +60 -0
  420. data/test/unit/record/model_definition_test.rb +165 -0
  421. data/test/unit/record/parse_params_test.rb +59 -0
  422. data/test/unit/record/parse_where_hash_test.rb +63 -0
  423. data/test/unit/record/record_association_test.rb +93 -0
  424. data/test/unit/record/validators_test.rb +228 -0
  425. data/test/unit/record_definition_test.rb +27 -0
  426. data/test/unit/report_definition_test.rb +26 -0
  427. data/test/unit/report_test.rb +154 -0
  428. data/test/unit_test_helper.rb +16 -0
  429. metadata +1024 -0
@@ -0,0 +1,41 @@
1
+ require "test_helper"
2
+ require "acceptance_test"
3
+
4
+ class AboutCreatingPrepayment < Test::Unit::TestCase
5
+ include AcceptanceTest
6
+
7
+ def any_line_items(account)
8
+ [{
9
+ :description => "Clingfilm bike shorts",
10
+ :quantity => 1,
11
+ :unit_amount => "200.00",
12
+ :account_code => account.code,
13
+ :tax_type => account.tax_type
14
+ }]
15
+ end
16
+
17
+ def assert_exists(prepayment, client)
18
+ assert_not_nil prepayment.id,
19
+ "Cannot check for exitence unless the prepayment (bank transaction) has non-null identifier"
20
+ assert_not_nil client.BankTransaction.find prepayment.id
21
+ end
22
+
23
+ setup do
24
+ @client = AcceptanceTestHelpers.oauth2_client
25
+ all_accounts = @client.Account.all
26
+ @account = all_accounts.select{|acct| acct.status == "ACTIVE" && acct.type == "REVENUE"}.first
27
+ @bank_account = all_accounts.select{|acct| acct.status == "ACTIVE" && acct.type == "BANK"}.first
28
+ end
29
+
30
+ can "create a new PrePayment bank transaction" do
31
+ new_transaction = @client.BankTransaction.build(
32
+ :type => "RECEIVE-PREPAYMENT",
33
+ :contact => { :name => "Jazz Kang" },
34
+ :line_items => any_line_items(@account),
35
+ :bank_account => { :account_id => @bank_account.account_id }
36
+ )
37
+
38
+ assert new_transaction.save, "Save failed with the following errors: #{new_transaction.errors.inspect}"
39
+ assert_exists new_transaction, @client
40
+ end
41
+ end
@@ -0,0 +1,53 @@
1
+ require "test_helper"
2
+ require "acceptance_test"
3
+ require "bank_transaction_reference_data"
4
+
5
+ class AboutFetchingBankTransactions < Test::Unit::TestCase
6
+ include AcceptanceTest
7
+
8
+ setup do
9
+ @client = AcceptanceTestHelpers.oauth2_client
10
+ end
11
+
12
+ context "when requesting a single bank transaction with a reference" do
13
+ setup do
14
+ @a_new_bank_transaction = BankTransactionReferenceData.new(@client).bank_transaction
15
+ end
16
+
17
+ it "has the extended set of attributes" do
18
+ keys = [:line_amount_types, :contact, :date, :status, :line_items,
19
+ :updated_date_utc, :currency_code, :bank_transaction_id,
20
+ :bank_account, :type, :reference, :is_reconciled, :currency_rate]
21
+ assert_equal(keys, @a_new_bank_transaction.attributes.keys)
22
+ end
23
+
24
+ it "returns full line item details" do
25
+ single_bank_transaction = @client.BankTransaction.find @a_new_bank_transaction.id
26
+
27
+ assert_not_empty single_bank_transaction.line_items,
28
+ "expected the bank transaction's line items to have been included"
29
+ end
30
+ end
31
+
32
+ context "when requesting all bank transactions (i.e., without filter)" do
33
+ setup do
34
+ @the_first_bank_transaction = @client.BankTransaction.all.detect { |trans| trans.attributes.keys.include?(:reference) }
35
+ end
36
+
37
+ it "has the limited set of attributes" do
38
+ keys = [:line_amount_types, :contact, :date, :status, :updated_date_utc,
39
+ :currency_code, :bank_transaction_id, :bank_account, :type, :reference,
40
+ :is_reconciled]
41
+ assert_equal(keys, @the_first_bank_transaction.attributes.keys)
42
+ end
43
+
44
+ it "returns contact" do
45
+ assert_not_nil @the_first_bank_transaction.contact
46
+ end
47
+
48
+ it "returns the bank account" do
49
+ assert_not_nil @the_first_bank_transaction.bank_account
50
+ end
51
+ end
52
+
53
+ end
@@ -0,0 +1,25 @@
1
+ require "test_helper"
2
+ require "acceptance_test"
3
+
4
+ class AboutGetOnlineInvoiceUrl < Test::Unit::TestCase
5
+ include AcceptanceTest
6
+
7
+ setup do
8
+ @client = AcceptanceTestHelpers.oauth2_client
9
+ @invoice = @client.Invoice.all(:where => 'Type=="ACCREC"').first
10
+ @invoice_acc_pay = @client.Invoice.all(:where => 'Type=="ACCPAY"').first
11
+ end
12
+
13
+ can "Request OnlineInvoice of an AccRec invoice" do
14
+ @online_invoice = @invoice.online_invoice
15
+
16
+ assert @online_invoice.online_invoice_url, "online_invoice_url not found"
17
+ assert @online_invoice.online_invoice_url.start_with?('https://in.xero.com/'), "online_invoice_url returned in unexpected format"
18
+ end
19
+
20
+ can "Not request OnlineInvoice of an AccPay invoice" do
21
+ assert_raise do
22
+ @online_invoice_acc_pay = @invoice_acc_pay.online_invoice
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,77 @@
1
+ module AcceptanceTestHelpers
2
+ def self.oauth_client
3
+ config = load_config_from_file || load_config_from_env
4
+ Xeroizer::PrivateApplication.new(config.consumer_key, config.consumer_secret, config.key_file)
5
+ end
6
+
7
+ def self.oauth2_client
8
+ config = self.load_oauth2_config_from_env
9
+ Xeroizer::OAuth2Application.new(
10
+ config.client_id,
11
+ config.client_secret,
12
+ access_token: config.access_token,
13
+ tenant_id: config.tenant_id
14
+ )
15
+ end
16
+
17
+ def self.load_config_from_file
18
+ the_file_name = File.join(File.dirname(__FILE__), '..', '..', '.oauth')
19
+
20
+ return nil unless File.exist? the_file_name
21
+
22
+ Xeroizer::OAuthConfig.load IO.read the_file_name
23
+ end
24
+
25
+ def self.load_config_from_env
26
+ raise "No CONSUMER_KEY environment variable specified." unless ENV["CONSUMER_KEY"]
27
+ raise "No CONSUMER_SECRET environment variable specified." unless ENV["CONSUMER_SECRET"]
28
+ raise "No PRIVATE_KEY_PATH environment variable specified." unless ENV["PRIVATE_KEY_PATH"]
29
+ raise "The file <#{ENV["PRIVATE_KEY_PATH"]}> does not exist." unless File.exist?(ENV["PRIVATE_KEY_PATH"])
30
+ Xeroizer::OAuthCredentials.new ENV["CONSUMER_KEY"], ENV["CONSUMER_SECRET"], ENV["PRIVATE_KEY_PATH"]
31
+ end
32
+
33
+ def self.load_oauth2_config_from_env
34
+ raise "No XERO_CLIENT_ID environment variable specified." unless ENV["XERO_CLIENT_ID"]
35
+ raise "No XERO_CLIENT_SECRET environment variable specified." unless ENV["XERO_CLIENT_SECRET"]
36
+ raise "No XERO_ACCESS_TOKEN environment variable specified." unless ENV["XERO_ACCESS_TOKEN"]
37
+ raise "No XERO_TENANT_ID environment variable specified." unless ENV["XERO_TENANT_ID"]
38
+
39
+ OpenStruct.new(client_id: ENV["XERO_CLIENT_ID"],
40
+ client_secret: ENV["XERO_CLIENT_SECRET"],
41
+ access_token: ENV["XERO_ACCESS_TOKEN"],
42
+ tenant_id: ENV["XERO_TENANT_ID"])
43
+ end
44
+ end
45
+
46
+ module AcceptanceTest
47
+ class << self
48
+ def included(klass)
49
+ klass.class_eval do
50
+ def self.it_works_using_oauth1_and_oauth2(&block)
51
+ instance_exec(AcceptanceTestHelpers.oauth_client, 'oauth', &block)
52
+ instance_exec(AcceptanceTestHelpers.oauth2_client, 'oauth2', &block)
53
+ end
54
+
55
+ def self.log_to_console
56
+ Xeroizer::Logging.const_set :Log, Xeroizer::Logging::StdOutLog
57
+ end
58
+
59
+ def self.no_log
60
+ Xeroizer::Logging.const_set :Log, Xeroizer::Logging::DevNullLog
61
+ end
62
+
63
+ def self.let(symbol, &block)
64
+ return unless block_given?
65
+
66
+ unless respond_to? symbol
67
+ define_method symbol do
68
+ cached_method_result = instance_variable_get ivar_name = "@#{symbol}"
69
+ instance_variable_set(ivar_name, instance_eval(&block)) if cached_method_result.nil?
70
+ instance_variable_get ivar_name
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,32 @@
1
+ class BankTransactionReferenceData
2
+ def initialize(client); @client = client; end
3
+ def bank_transaction; @bank_transaction ||= new_bank_transaction; end
4
+
5
+ private
6
+
7
+ def new_bank_transaction
8
+ all_accounts = @client.Account.all
9
+
10
+ account = all_accounts.select{|acct| acct.status == "ACTIVE" && acct.type == "REVENUE"}.first
11
+ bank_account = all_accounts.select{|acct| acct.status == "ACTIVE" && acct.type == "BANK"}.first
12
+
13
+ result = @client.BankTransaction.build(
14
+ :type => "SPEND",
15
+ :contact => { :name => "Jazz Kang" },
16
+ :line_items => [
17
+ :description => "Bike shorts made of clear, unbreathable material",
18
+ :quantity => 1,
19
+ :unit_amount => 39.99,
20
+ :account_code => account.code,
21
+ :tax_type => account.tax_type
22
+ ],
23
+ :bank_account => { :account_id => bank_account.account_id },
24
+ :reference => "BTF323"
25
+ )
26
+
27
+ fail("Expected save to have succeeded, but it failed. #{result.errors.inspect}") unless result.save
28
+
29
+ result
30
+ end
31
+
32
+ end
@@ -0,0 +1,21 @@
1
+ require "test_helper"
2
+ require "acceptance_test"
3
+
4
+ class BankTransfer < Test::Unit::TestCase
5
+ include AcceptanceTest
6
+
7
+ it_works_using_oauth1_and_oauth2 do |client, client_type|
8
+ can "create a bank for #{client_type}" do
9
+ all_accounts = client.Account.all
10
+ @from_bank_account = all_accounts.select { |acct| acct.status == "ACTIVE" && acct.type == "BANK" }.first
11
+ @to_bank_account = all_accounts.select { |acct| acct.status == "ACTIVE" && acct.type == "BANK" }.last
12
+
13
+ new_transfer = client.BankTransfer.build(
14
+ :amount => 300,
15
+ :from_bank_account => { :account_id => @from_bank_account.account_id },
16
+ :to_bank_account => { :account_id => @to_bank_account.account_id }
17
+ )
18
+ assert new_transfer.save, "Save failed with the following errors: #{new_transfer.errors.inspect}"
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,50 @@
1
+ require "test_helper"
2
+ require "acceptance_test"
3
+ require "shoulda/matchers"
4
+
5
+ include Shoulda::Matchers
6
+
7
+ class BulkOperationsTest < Test::Unit::TestCase
8
+ include AcceptanceTest
9
+
10
+ def random_name
11
+ "test-person-#{rand 1000000000}"
12
+ end
13
+
14
+ setup do
15
+ @client = AcceptanceTestHelpers.oauth2_client
16
+ end
17
+
18
+ should "create multiple invoices at once" do
19
+ c1, c2 = nil, nil
20
+ assert_true(
21
+ @client.Contact.batch_save do
22
+ c1 = @client.Contact.build(name: random_name)
23
+ c2 = @client.Contact.build(name: random_name)
24
+ end
25
+ )
26
+ [c1, c2].each {|c| assert_false c.new_record? }
27
+ end
28
+
29
+ can "create and update new records in bulk" do
30
+ c1, c2 = nil, nil
31
+ assert_true(
32
+ @client.Contact.batch_save do
33
+ c1 = @client.Contact.create(name: random_name)
34
+ c1.email_address = "foo@bar.com"
35
+ c2 = @client.Contact.build(name: random_name)
36
+ end
37
+ )
38
+ [c1, c2].each {|c| assert_false c.new_record? }
39
+ c1.download_complete_record!
40
+ assert_equal c1.email_address, "foo@bar.com"
41
+ end
42
+
43
+ can "return false from #batch_save if validation fails" do
44
+ assert_false(
45
+ @client.Contact.batch_save do
46
+ @client.Contact.build(email_address: "guy-with-no-name@example.com")
47
+ end
48
+ )
49
+ end
50
+ end
@@ -0,0 +1,11 @@
1
+ require "test_helper"
2
+ require "acceptance_test"
3
+
4
+ class ConnectionsTest < Test::Unit::TestCase
5
+ include AcceptanceTest
6
+
7
+ should "be able to hit Xero to get current connections via OAuth2" do
8
+ connections = AcceptanceTestHelpers.oauth2_client.current_connections
9
+ assert_not_nil connections.first.tenant_id
10
+ end
11
+ end
@@ -0,0 +1,589 @@
1
+ <Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
2
+ <Id>123bfff9-e1b6-481b-9f3b-41997d7bd627</Id>
3
+ <Status>OK</Status>
4
+ <ProviderName>Appcordion Private</ProviderName>
5
+ <DateTimeUTC>2010-12-21T00:56:58.7320527Z</DateTimeUTC>
6
+ <Accounts>
7
+ <Account>
8
+ <AccountID>13918178-849a-4823-9a31-57b7eac713d7</AccountID>
9
+ <Name>ANZ Business Account</Name>
10
+ <Status>ACTIVE</Status>
11
+ <Type>BANK</Type>
12
+ <TaxType>NONE</TaxType>
13
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
14
+ <BankAccountNumber>01023412345678</BankAccountNumber>
15
+ <CurrencyCode>AUD</CurrencyCode>
16
+ </Account>
17
+ <Account>
18
+ <AccountID>26028d3a-f981-44d6-a9ed-a522198870f8</AccountID>
19
+ <Code>099</Code>
20
+ <Name>Ridgeway Savings</Name>
21
+ <Status>ACTIVE</Status>
22
+ <Type>BANK</Type>
23
+ <TaxType>NONE</TaxType>
24
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
25
+ <BankAccountNumber>0932107654321</BankAccountNumber>
26
+ <CurrencyCode>AUD</CurrencyCode>
27
+ </Account>
28
+ <Account>
29
+ <AccountID>e2bacdc6-2006-43c2-a5da-3c0e5f43b452</AccountID>
30
+ <Code>200</Code>
31
+ <Name>Sales</Name>
32
+ <Status>ACTIVE</Status>
33
+ <Type>REVENUE</Type>
34
+ <TaxType>OUTPUT</TaxType>
35
+ <Description>Income from any normal business activity</Description>
36
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
37
+ </Account>
38
+ <Account>
39
+ <AccountID>39987591-5a9a-4513-8072-828069a65f9c</AccountID>
40
+ <Code>260</Code>
41
+ <Name>Other Revenue</Name>
42
+ <Status>ACTIVE</Status>
43
+ <Type>REVENUE</Type>
44
+ <TaxType>OUTPUT</TaxType>
45
+ <Description>Any other income that does not relate to normal business activities and is not recurring</Description>
46
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
47
+ </Account>
48
+ <Account>
49
+ <AccountID>1335b8b2-4d63-4af8-937f-04087ae2e36e</AccountID>
50
+ <Code>270</Code>
51
+ <Name>Interest Income</Name>
52
+ <Status>ACTIVE</Status>
53
+ <Type>REVENUE</Type>
54
+ <TaxType>NONE</TaxType>
55
+ <Description>Interest income</Description>
56
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
57
+ </Account>
58
+ <Account>
59
+ <AccountID>ee30a086-d381-4bd6-ba47-7af927d25825</AccountID>
60
+ <Code>300</Code>
61
+ <Name>Purchases</Name>
62
+ <Status>ACTIVE</Status>
63
+ <Type>DIRECTCOSTS</Type>
64
+ <TaxType>INPUT</TaxType>
65
+ <Description>Goods purchased with the intention of selling these to customers</Description>
66
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
67
+ <ReportingCode>EXP</ReportingCode>
68
+ <ReportingCodeName>Expense</ReportingCodeName>
69
+ </Account>
70
+ <Account>
71
+ <AccountID>d392fe47-c99d-499e-a200-46709dd6b6e7</AccountID>
72
+ <Code>400</Code>
73
+ <Name>Advertising</Name>
74
+ <Status>ACTIVE</Status>
75
+ <Type>EXPENSE</Type>
76
+ <TaxType>INPUT</TaxType>
77
+ <Description>Expenses incurred for advertising while trying to increase sales</Description>
78
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
79
+ </Account>
80
+ <Account>
81
+ <AccountID>959af5f4-9925-44e8-b283-7ddf4b427238</AccountID>
82
+ <Code>404</Code>
83
+ <Name>Bank Fees</Name>
84
+ <Status>ACTIVE</Status>
85
+ <Type>EXPENSE</Type>
86
+ <TaxType>NONE</TaxType>
87
+ <Description>Fees charged by your bank for transactions regarding your bank account(s).</Description>
88
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
89
+ </Account>
90
+ <Account>
91
+ <AccountID>ff09eac3-5b17-44fb-9eea-e2e9375e91b4</AccountID>
92
+ <Code>408</Code>
93
+ <Name>Cleaning</Name>
94
+ <Status>ACTIVE</Status>
95
+ <Type>EXPENSE</Type>
96
+ <TaxType>INPUT</TaxType>
97
+ <Description>Expenses incurred for cleaning business property.</Description>
98
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
99
+ </Account>
100
+ <Account>
101
+ <AccountID>6db51cfa-0326-4e63-a743-c78c4d99aba4</AccountID>
102
+ <Code>412</Code>
103
+ <Name>Consulting &amp; Accounting</Name>
104
+ <Status>ACTIVE</Status>
105
+ <Type>EXPENSE</Type>
106
+ <TaxType>INPUT</TaxType>
107
+ <Description>Expenses related to paying consultants</Description>
108
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
109
+ </Account>
110
+ <Account>
111
+ <AccountID>7f940c53-bae5-41a8-a3a3-c841227fee01</AccountID>
112
+ <Code>416</Code>
113
+ <Name>Depreciation</Name>
114
+ <Status>ACTIVE</Status>
115
+ <Type>EXPENSE</Type>
116
+ <TaxType>NONE</TaxType>
117
+ <Description>The amount of the asset's cost (based on the useful life) that was consumed during the period</Description>
118
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
119
+ </Account>
120
+ <Account>
121
+ <AccountID>18e27517-81e0-437c-bc21-fbba8e30d6bb</AccountID>
122
+ <Code>420</Code>
123
+ <Name>Entertainment</Name>
124
+ <Status>ACTIVE</Status>
125
+ <Type>EXPENSE</Type>
126
+ <TaxType>NONE</TaxType>
127
+ <Description>Expenses paid by company for the business but are not deductable for income tax purposes.</Description>
128
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
129
+ </Account>
130
+ <Account>
131
+ <AccountID>c4a9d449-ef04-43a7-9af8-49c6558b361e</AccountID>
132
+ <Code>425</Code>
133
+ <Name>Freight &amp; Courier</Name>
134
+ <Status>ACTIVE</Status>
135
+ <Type>EXPENSE</Type>
136
+ <TaxType>INPUT</TaxType>
137
+ <Description>Expenses incurred on courier &amp; freight costs</Description>
138
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
139
+ </Account>
140
+ <Account>
141
+ <AccountID>94882296-5acf-4350-8c5b-82bc9370ab78</AccountID>
142
+ <Code>429</Code>
143
+ <Name>General Expenses</Name>
144
+ <Status>ACTIVE</Status>
145
+ <Type>EXPENSE</Type>
146
+ <TaxType>INPUT</TaxType>
147
+ <Description>General expenses related to the running of the business.</Description>
148
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
149
+ </Account>
150
+ <Account>
151
+ <AccountID>48a193e4-f1e3-49b8-8ff3-74137575f087</AccountID>
152
+ <Code>433</Code>
153
+ <Name>Insurance</Name>
154
+ <Status>ACTIVE</Status>
155
+ <Type>EXPENSE</Type>
156
+ <TaxType>INPUT</TaxType>
157
+ <Description>Expenses incurred for insuring the business' assets</Description>
158
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
159
+ </Account>
160
+ <Account>
161
+ <AccountID>a29e26fb-06ec-4aad-8a6f-6cadc52291f8</AccountID>
162
+ <Code>437</Code>
163
+ <Name>Interest Expense</Name>
164
+ <Status>ACTIVE</Status>
165
+ <Type>EXPENSE</Type>
166
+ <TaxType>NONE</TaxType>
167
+ <Description>Any interest expenses paid to ATO, business bank accounts or credit card accounts.</Description>
168
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
169
+ </Account>
170
+ <Account>
171
+ <AccountID>1b83b470-95ae-4b0b-a84e-8c407d5ea2ae</AccountID>
172
+ <Code>441</Code>
173
+ <Name>Legal expenses</Name>
174
+ <Status>ACTIVE</Status>
175
+ <Type>EXPENSE</Type>
176
+ <TaxType>INPUT</TaxType>
177
+ <Description>Expenses incurred on any legal matters</Description>
178
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
179
+ </Account>
180
+ <Account>
181
+ <AccountID>42a56c1a-6141-4bf2-913d-916dc1a35cfd</AccountID>
182
+ <Code>445</Code>
183
+ <Name>Light, Power, Heating</Name>
184
+ <Status>ACTIVE</Status>
185
+ <Type>EXPENSE</Type>
186
+ <TaxType>INPUT</TaxType>
187
+ <Description>Expenses incurred for lighting, powering or heating the premises</Description>
188
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
189
+ </Account>
190
+ <Account>
191
+ <AccountID>005f380d-4a9c-497f-b9d7-817f0f02790e</AccountID>
192
+ <Code>449</Code>
193
+ <Name>Motor Vehicle Expenses</Name>
194
+ <Status>ACTIVE</Status>
195
+ <Type>EXPENSE</Type>
196
+ <TaxType>INPUT</TaxType>
197
+ <Description>Expenses incurred on the running of company motor vehicles</Description>
198
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
199
+ </Account>
200
+ <Account>
201
+ <AccountID>8ab9d684-f897-4168-b5d1-2279bf74bb82</AccountID>
202
+ <Code>453</Code>
203
+ <Name>Office Expenses</Name>
204
+ <Status>ACTIVE</Status>
205
+ <Type>EXPENSE</Type>
206
+ <TaxType>INPUT</TaxType>
207
+ <Description>General expenses related to the running of the business office.</Description>
208
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
209
+ </Account>
210
+ <Account>
211
+ <AccountID>b18eaea6-4d11-462c-ac30-7975108b5859</AccountID>
212
+ <Code>461</Code>
213
+ <Name>Printing &amp; Stationery</Name>
214
+ <Status>ACTIVE</Status>
215
+ <Type>EXPENSE</Type>
216
+ <TaxType>INPUT</TaxType>
217
+ <Description>Expenses incurred by the entity as a result of printing and stationery</Description>
218
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
219
+ </Account>
220
+ <Account>
221
+ <AccountID>f5f05ee3-f9cd-4bf9-9423-ed81de96b537</AccountID>
222
+ <Code>469</Code>
223
+ <Name>Rent</Name>
224
+ <Status>ACTIVE</Status>
225
+ <Type>EXPENSE</Type>
226
+ <TaxType>INPUT</TaxType>
227
+ <Description>The payment to lease a building or area.</Description>
228
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
229
+ </Account>
230
+ <Account>
231
+ <AccountID>e91eee7a-340e-4203-8af8-14db5121af35</AccountID>
232
+ <Code>473</Code>
233
+ <Name>Repairs and Maintenance</Name>
234
+ <Status>ARCHIVED</Status>
235
+ <Type>EXPENSE</Type>
236
+ <TaxType>INPUT</TaxType>
237
+ <Description>Expenses incurred on a damaged or run down asset that will bring the asset back to its original condition.</Description>
238
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
239
+ </Account>
240
+ <Account>
241
+ <AccountID>c4f12f09-846e-4f6f-b39c-dff3be3e49a7</AccountID>
242
+ <Code>477</Code>
243
+ <Name>Wages and Salaries</Name>
244
+ <Status>ACTIVE</Status>
245
+ <Type>EXPENSE</Type>
246
+ <TaxType>EXEMPTINPUT</TaxType>
247
+ <Description>Payment to employees in exchange for their resources</Description>
248
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
249
+ </Account>
250
+ <Account>
251
+ <AccountID>479252dc-1e01-4a86-a452-9552a191453f</AccountID>
252
+ <Code>478</Code>
253
+ <Name>Superannuation</Name>
254
+ <Status>ACTIVE</Status>
255
+ <Type>EXPENSE</Type>
256
+ <TaxType>EXEMPTINPUT</TaxType>
257
+ <Description>Superannuation contributions</Description>
258
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
259
+ <ReportingCode>EXP</ReportingCode>
260
+ <ReportingCodeName>Expense</ReportingCodeName>
261
+ </Account>
262
+ <Account>
263
+ <AccountID>98154d6b-0424-42f7-9aff-678db4ff62ba</AccountID>
264
+ <Code>479</Code>
265
+ <Name>Commission</Name>
266
+ <Status>ACTIVE</Status>
267
+ <Type>DIRECTCOSTS</Type>
268
+ <TaxType>NONE</TaxType>
269
+ <Description>% to staff for consultancy work invoiced to them</Description>
270
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
271
+ </Account>
272
+ <Account>
273
+ <AccountID>b3742a53-0f64-4765-b5cc-3ece843b2e91</AccountID>
274
+ <Code>485</Code>
275
+ <Name>Subscriptions</Name>
276
+ <Status>ACTIVE</Status>
277
+ <Type>EXPENSE</Type>
278
+ <TaxType>INPUT</TaxType>
279
+ <Description>E.g. Magazines, professional bodies.</Description>
280
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
281
+ </Account>
282
+ <Account>
283
+ <AccountID>266f40cc-5aa1-4f6c-b078-eb615171d6de</AccountID>
284
+ <Code>489</Code>
285
+ <Name>Telephone &amp; Internet</Name>
286
+ <Status>ACTIVE</Status>
287
+ <Type>EXPENSE</Type>
288
+ <TaxType>INPUT</TaxType>
289
+ <Description>Expenditure incurred from any business-related phone calls, phone lines, or internet connections</Description>
290
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
291
+ </Account>
292
+ <Account>
293
+ <AccountID>25717024-5b50-4320-93b7-280c0614a613</AccountID>
294
+ <Code>493</Code>
295
+ <Name>Travel - National</Name>
296
+ <Status>ACTIVE</Status>
297
+ <Type>EXPENSE</Type>
298
+ <TaxType>INPUT</TaxType>
299
+ <Description>Expenses incurred from domestic travel which has a business purpose</Description>
300
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
301
+ </Account>
302
+ <Account>
303
+ <AccountID>eaa06c90-21e6-4176-9333-8ab4c23f0004</AccountID>
304
+ <Code>494</Code>
305
+ <Name>Travel - International</Name>
306
+ <Status>ACTIVE</Status>
307
+ <Type>EXPENSE</Type>
308
+ <TaxType>NONE</TaxType>
309
+ <Description>Expenses incurred from international travel which has a business purpose</Description>
310
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
311
+ </Account>
312
+ <Account>
313
+ <AccountID>d290c7f4-df33-46f0-917b-d188c6f517dc</AccountID>
314
+ <Code>497</Code>
315
+ <Name>Bank Revaluations</Name>
316
+ <Status>ARCHIVED</Status>
317
+ <Type>EXPENSE</Type>
318
+ <TaxType>NONE</TaxType>
319
+ <Description>Bank account revaluations due for foreign exchange rate changes</Description>
320
+ <SystemAccount>BANKCURRENCYGAIN</SystemAccount>
321
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
322
+ </Account>
323
+ <Account>
324
+ <AccountID>09ef3689-6913-4f31-aeca-81646680e623</AccountID>
325
+ <Code>498</Code>
326
+ <Name>Unrealised Currency Gains</Name>
327
+ <Status>ARCHIVED</Status>
328
+ <Type>EXPENSE</Type>
329
+ <TaxType>NONE</TaxType>
330
+ <Description>Unrealised currency gains on outstanding items</Description>
331
+ <SystemAccount>UNREALISEDCURRENCYGAIN</SystemAccount>
332
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
333
+ </Account>
334
+ <Account>
335
+ <AccountID>e0b4f130-7fb7-4e29-9a85-1e002ea5cc31</AccountID>
336
+ <Code>499</Code>
337
+ <Name>Realised Currency Gains</Name>
338
+ <Status>ARCHIVED</Status>
339
+ <Type>EXPENSE</Type>
340
+ <TaxType>NONE</TaxType>
341
+ <Description>Gains or losses made due to currency exchange rate changes</Description>
342
+ <SystemAccount>REALISEDCURRENCYGAIN</SystemAccount>
343
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
344
+ </Account>
345
+ <Account>
346
+ <AccountID>53bee866-8d31-4669-bd62-69026afcc86d</AccountID>
347
+ <Code>505</Code>
348
+ <Name>Income Tax Expense</Name>
349
+ <Status>ACTIVE</Status>
350
+ <Type>EXPENSE</Type>
351
+ <TaxType>EXEMPTINPUT</TaxType>
352
+ <Description>A percentage of total earnings paid to the government.</Description>
353
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
354
+ <ReportingCode>EXP</ReportingCode>
355
+ <ReportingCodeName>Expense</ReportingCodeName>
356
+ </Account>
357
+ <Account>
358
+ <AccountID>3dd5c80d-e109-4313-8c61-41648e33704f</AccountID>
359
+ <Code>610</Code>
360
+ <Name>Accounts Receivable</Name>
361
+ <Status>ACTIVE</Status>
362
+ <Type>CURRENT</Type>
363
+ <TaxType>NONE</TaxType>
364
+ <Description>Outstanding invoices the company has issued out to the client but has not yet received in cash at balance date.</Description>
365
+ <SystemAccount>DEBTORS</SystemAccount>
366
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
367
+ </Account>
368
+ <Account>
369
+ <AccountID>26a3ec3b-0aa8-4cbe-b0b1-20c6277a55ad</AccountID>
370
+ <Code>620</Code>
371
+ <Name>Prepayments</Name>
372
+ <Status>ARCHIVED</Status>
373
+ <Type>CURRENT</Type>
374
+ <TaxType>NONE</TaxType>
375
+ <Description>An expenditure that has been paid for in advance.</Description>
376
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
377
+ </Account>
378
+ <Account>
379
+ <AccountID>2d69b4ee-37d4-4f67-b950-32cbdd5765ed</AccountID>
380
+ <Code>710</Code>
381
+ <Name>Office Equipment</Name>
382
+ <Status>ACTIVE</Status>
383
+ <Type>FIXED</Type>
384
+ <TaxType>CAPEXINPUT</TaxType>
385
+ <Description>Office equipment that is owned and controlled by the business</Description>
386
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
387
+ </Account>
388
+ <Account>
389
+ <AccountID>24d010bf-5e4b-42dd-9aa3-a5484dd0686f</AccountID>
390
+ <Code>711</Code>
391
+ <Name>Less Accumulated Depreciation on Office Equipment</Name>
392
+ <Status>ACTIVE</Status>
393
+ <Type>FIXED</Type>
394
+ <TaxType>EXEMPTINPUT</TaxType>
395
+ <Description>The total amount of office equipment cost that has been consumed by the entity (based on the useful life)</Description>
396
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
397
+ <ReportingCode>ASS</ReportingCode>
398
+ <ReportingCodeName>Assets</ReportingCodeName>
399
+ </Account>
400
+ <Account>
401
+ <AccountID>75bbcb81-6b3d-4ca9-8522-3b582cb5c21a</AccountID>
402
+ <Code>720</Code>
403
+ <Name>Computer Equipment</Name>
404
+ <Status>ACTIVE</Status>
405
+ <Type>FIXED</Type>
406
+ <TaxType>CAPEXINPUT</TaxType>
407
+ <Description>Computer equipment that is owned and controlled by the business</Description>
408
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
409
+ </Account>
410
+ <Account>
411
+ <AccountID>44ef13ab-a913-4688-b6f0-52877b670ad4</AccountID>
412
+ <Code>721</Code>
413
+ <Name>Less Accumulated Depreciation on Computer Equipment</Name>
414
+ <Status>ACTIVE</Status>
415
+ <Type>FIXED</Type>
416
+ <TaxType>EXEMPTINPUT</TaxType>
417
+ <Description>The total amount of computer equipment cost that has been consumed by the business (based on the useful life)</Description>
418
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
419
+ <ReportingCode>ASS</ReportingCode>
420
+ <ReportingCodeName>Assets</ReportingCodeName>
421
+ </Account>
422
+ <Account>
423
+ <AccountID>8e9c5166-d3fe-4e21-827a-f42753568e80</AccountID>
424
+ <Code>800</Code>
425
+ <Name>Accounts Payable</Name>
426
+ <Status>ACTIVE</Status>
427
+ <Type>CURRLIAB</Type>
428
+ <TaxType>NONE</TaxType>
429
+ <Description>Outstanding invoices the company has received from suppliers but has not yet paid at balance date</Description>
430
+ <SystemAccount>CREDITORS</SystemAccount>
431
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
432
+ </Account>
433
+ <Account>
434
+ <AccountID>c11b84a9-e90a-4094-83d7-b8494d195ecc</AccountID>
435
+ <Code>801</Code>
436
+ <Name>Unpaid Expense Claims</Name>
437
+ <Status>ACTIVE</Status>
438
+ <Type>CURRLIAB</Type>
439
+ <TaxType>NONE</TaxType>
440
+ <Description>Expense claims typically made by employees/shareholder employees still outstanding.</Description>
441
+ <SystemAccount>UNPAIDEXPCLM</SystemAccount>
442
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
443
+ </Account>
444
+ <Account>
445
+ <AccountID>38b7b812-d334-46eb-872e-67c4cfb87538</AccountID>
446
+ <Code>805</Code>
447
+ <Name>Accrued Liabilities</Name>
448
+ <Status>ACTIVE</Status>
449
+ <Type>CURRLIAB</Type>
450
+ <TaxType>NONE</TaxType>
451
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
452
+ </Account>
453
+ <Account>
454
+ <AccountID>66e60a82-99d8-47d1-956b-5baea404acba</AccountID>
455
+ <Code>820</Code>
456
+ <Name>GST</Name>
457
+ <Status>ACTIVE</Status>
458
+ <Type>CURRLIAB</Type>
459
+ <TaxType>NONE</TaxType>
460
+ <Description>The balance in this account represents GST owing to or from the ATO. At the end of the GST period, it is this account that should be used to code against either the 'refunds from' or 'payments to' the ATO that will appear on the bank statement. Xero has been designed to use only one GST account to track GST on income and expenses, so there is no need to add any new GST accounts to Xero.</Description>
461
+ <SystemAccount>GST</SystemAccount>
462
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
463
+ </Account>
464
+ <Account>
465
+ <AccountID>4d111d55-1c71-46b4-8cbc-d8b54d8d54c5</AccountID>
466
+ <Code>825</Code>
467
+ <Name>PAYG Withholdings Payable</Name>
468
+ <Status>ACTIVE</Status>
469
+ <Type>CURRLIAB</Type>
470
+ <TaxType>NONE</TaxType>
471
+ <Description>The amount of PAYE tax that is due to be paid</Description>
472
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
473
+ </Account>
474
+ <Account>
475
+ <AccountID>a47d1f5b-5297-484a-8a8a-64a75053e4f4</AccountID>
476
+ <Code>826</Code>
477
+ <Name>Superannuation Payable</Name>
478
+ <Status>ACTIVE</Status>
479
+ <Type>CURRLIAB</Type>
480
+ <TaxType>NONE</TaxType>
481
+ <Description>The amount of superannuation that is due to be paid</Description>
482
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
483
+ </Account>
484
+ <Account>
485
+ <AccountID>eba8b619-8e5d-43df-bd0a-08c328021003</AccountID>
486
+ <Code>830</Code>
487
+ <Name>Income Tax Payable</Name>
488
+ <Status>ACTIVE</Status>
489
+ <Type>CURRLIAB</Type>
490
+ <TaxType>NONE</TaxType>
491
+ <Description>The amount of income tax that is due to be paid, also resident withholding tax paid on interest received.</Description>
492
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
493
+ </Account>
494
+ <Account>
495
+ <AccountID>305b05b3-01f3-4f47-a45d-edfa66ea03e7</AccountID>
496
+ <Code>840</Code>
497
+ <Name>Historical Adjustment</Name>
498
+ <Status>ACTIVE</Status>
499
+ <Type>CURRLIAB</Type>
500
+ <TaxType>NONE</TaxType>
501
+ <Description>For accountant adjustments</Description>
502
+ <SystemAccount>HISTORICAL</SystemAccount>
503
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
504
+ </Account>
505
+ <Account>
506
+ <AccountID>50031b5d-828f-4090-b1f1-d5eb591d8b18</AccountID>
507
+ <Code>850</Code>
508
+ <Name>Suspense</Name>
509
+ <Status>ACTIVE</Status>
510
+ <Type>CURRLIAB</Type>
511
+ <TaxType>NONE</TaxType>
512
+ <Description>An entry that allows an unknown transaction to be entered, so the accounts can still be worked on in balance and the entry can be dealt with later.</Description>
513
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
514
+ </Account>
515
+ <Account>
516
+ <AccountID>37441137-cfe3-4c2b-a569-ef75e6b66ae4</AccountID>
517
+ <Code>860</Code>
518
+ <Name>Rounding</Name>
519
+ <Status>ACTIVE</Status>
520
+ <Type>CURRLIAB</Type>
521
+ <TaxType>NONE</TaxType>
522
+ <Description>An adjustment entry to allow for rounding</Description>
523
+ <SystemAccount>ROUNDING</SystemAccount>
524
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
525
+ </Account>
526
+ <Account>
527
+ <AccountID>a94c9633-aeb1-4b13-a96b-7998d887b770</AccountID>
528
+ <Code>877</Code>
529
+ <Name>Tracking Transfers</Name>
530
+ <Status>ACTIVE</Status>
531
+ <Type>CURRLIAB</Type>
532
+ <TaxType>NONE</TaxType>
533
+ <Description>Transfers between tracking categories</Description>
534
+ <SystemAccount>TRACKINGTRANSFERS</SystemAccount>
535
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
536
+ </Account>
537
+ <Account>
538
+ <AccountID>64ddb541-7e5f-4ded-a072-2f59d8898a8c</AccountID>
539
+ <Code>880</Code>
540
+ <Name>Owner A Drawings</Name>
541
+ <Status>ACTIVE</Status>
542
+ <Type>CURRLIAB</Type>
543
+ <TaxType>NONE</TaxType>
544
+ <Description>Withdrawals by the owners</Description>
545
+ <EnablePaymentsToAccount>true</EnablePaymentsToAccount>
546
+ </Account>
547
+ <Account>
548
+ <AccountID>16e01c0e-4fbd-4488-b4c3-e399903306aa</AccountID>
549
+ <Code>881</Code>
550
+ <Name>Owner A Funds Introduced</Name>
551
+ <Status>ACTIVE</Status>
552
+ <Type>CURRLIAB</Type>
553
+ <TaxType>NONE</TaxType>
554
+ <Description>Funds contributed by the owner</Description>
555
+ <EnablePaymentsToAccount>true</EnablePaymentsToAccount>
556
+ </Account>
557
+ <Account>
558
+ <AccountID>c1de1295-c39c-444c-abfa-447b2263563f</AccountID>
559
+ <Code>900</Code>
560
+ <Name>Loan</Name>
561
+ <Status>ARCHIVED</Status>
562
+ <Type>TERMLIAB</Type>
563
+ <TaxType>NONE</TaxType>
564
+ <Description>Money that has been borrowed from a creditor</Description>
565
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
566
+ </Account>
567
+ <Account>
568
+ <AccountID>e2eda5d3-a80f-45ff-af4c-74472fd904d4</AccountID>
569
+ <Code>960</Code>
570
+ <Name>Retained Earnings</Name>
571
+ <Status>ACTIVE</Status>
572
+ <Type>EQUITY</Type>
573
+ <TaxType>NONE</TaxType>
574
+ <Description>Do not Use</Description>
575
+ <SystemAccount>RETAINEDEARNINGS</SystemAccount>
576
+ <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
577
+ </Account>
578
+ <Account>
579
+ <AccountID>dfe8ba15-3324-4d29-b4e2-2f23c05e8532</AccountID>
580
+ <Code>970</Code>
581
+ <Name>Owner A Share Capital</Name>
582
+ <Status>ACTIVE</Status>
583
+ <Type>EQUITY</Type>
584
+ <TaxType>NONE</TaxType>
585
+ <Description>The value of shares purchased by the shareholders</Description>
586
+ <EnablePaymentsToAccount>true</EnablePaymentsToAccount>
587
+ </Account>
588
+ </Accounts>
589
+ </Response>