fortnox-api 0.9.2 → 1.0.0.rc2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +120 -95
  3. data/{LICENSE.txt → LICENSE.md} +0 -0
  4. data/README.md +245 -248
  5. data/bin/fortnox-setup +211 -0
  6. data/bin/fortnox-update-env +38 -0
  7. data/fortnox.gemspec +29 -0
  8. data/lib/fortnox/auth/thread_local.rb +28 -0
  9. data/lib/fortnox/collection.rb +23 -0
  10. data/lib/fortnox/mappers/country_code.rb +34 -0
  11. data/lib/fortnox/mappers/date.rb +21 -0
  12. data/lib/fortnox/mappers/document_row.rb +12 -0
  13. data/lib/fortnox/mappers/edi_information.rb +15 -0
  14. data/lib/fortnox/mappers/email_information.rb +11 -0
  15. data/lib/fortnox/mappers/invoice_row.rb +14 -0
  16. data/lib/fortnox/mappers/label_references.rb +24 -0
  17. data/lib/fortnox/mappers/order_row.rb +9 -0
  18. data/lib/fortnox/mappers/struct.rb +71 -0
  19. data/lib/fortnox/mappers/struct_array.rb +31 -0
  20. data/lib/fortnox/resource.rb +131 -0
  21. data/lib/fortnox/resources/article.rb +160 -0
  22. data/lib/fortnox/resources/customer.rb +209 -0
  23. data/lib/fortnox/resources/document.rb +202 -0
  24. data/lib/fortnox/resources/invoice.rb +92 -0
  25. data/lib/fortnox/resources/label.rb +15 -0
  26. data/lib/fortnox/resources/order.rb +38 -0
  27. data/lib/fortnox/resources/project.rb +41 -0
  28. data/lib/fortnox/resources/terms_of_payment.rb +23 -0
  29. data/lib/fortnox/resources/unit.rb +26 -0
  30. data/lib/fortnox/struct.rb +24 -0
  31. data/lib/fortnox/structs/default_delivery_types.rb +16 -0
  32. data/lib/fortnox/structs/default_templates.rb +19 -0
  33. data/lib/fortnox/structs/document_row.rb +62 -0
  34. data/lib/fortnox/structs/edi_information.rb +25 -0
  35. data/lib/fortnox/structs/email_information.rb +22 -0
  36. data/lib/fortnox/structs/invoice_row.rb +13 -0
  37. data/lib/fortnox/structs/order_row.rb +10 -0
  38. data/lib/fortnox/types.rb +129 -0
  39. data/lib/fortnox/{api/version.rb → version.rb} +1 -3
  40. data/lib/fortnox.rb +111 -0
  41. metadata +55 -580
  42. data/.codeclimate.yml +0 -20
  43. data/.env.template +0 -7
  44. data/.env.test +0 -11
  45. data/.gitignore +0 -20
  46. data/.rspec +0 -2
  47. data/.rubocop.yml +0 -41
  48. data/.tool-versions +0 -1
  49. data/.travis.yml +0 -32
  50. data/CLAUDE.md +0 -79
  51. data/CONTRIBUTE.md +0 -38
  52. data/DEVELOPER_README.md +0 -69
  53. data/Gemfile +0 -6
  54. data/Guardfile +0 -16
  55. data/Rakefile +0 -140
  56. data/bin/console +0 -22
  57. data/bin/fortnox +0 -285
  58. data/bin/get_tokens +0 -79
  59. data/bin/renew_tokens +0 -28
  60. data/docs/gotchas.md +0 -146
  61. data/fortnox-api.gemspec +0 -50
  62. data/lib/fortnox/api/mappers/article.rb +0 -23
  63. data/lib/fortnox/api/mappers/base/canonical_name_sym.rb +0 -21
  64. data/lib/fortnox/api/mappers/base/from_json.rb +0 -91
  65. data/lib/fortnox/api/mappers/base/to_json.rb +0 -66
  66. data/lib/fortnox/api/mappers/base.rb +0 -30
  67. data/lib/fortnox/api/mappers/customer.rb +0 -27
  68. data/lib/fortnox/api/mappers/default_delivery_types.rb +0 -15
  69. data/lib/fortnox/api/mappers/default_templates.rb +0 -16
  70. data/lib/fortnox/api/mappers/edi_information.rb +0 -23
  71. data/lib/fortnox/api/mappers/email_information.rb +0 -19
  72. data/lib/fortnox/api/mappers/invoice.rb +0 -29
  73. data/lib/fortnox/api/mappers/invoice_row.rb +0 -25
  74. data/lib/fortnox/api/mappers/order.rb +0 -26
  75. data/lib/fortnox/api/mappers/order_row.rb +0 -23
  76. data/lib/fortnox/api/mappers/project.rb +0 -17
  77. data/lib/fortnox/api/mappers/terms_of_payment.rb +0 -17
  78. data/lib/fortnox/api/mappers/unit.rb +0 -17
  79. data/lib/fortnox/api/mappers/value/array.rb +0 -18
  80. data/lib/fortnox/api/mappers/value/country_string.rb +0 -24
  81. data/lib/fortnox/api/mappers/value/date.rb +0 -11
  82. data/lib/fortnox/api/mappers/value/hash.rb +0 -16
  83. data/lib/fortnox/api/mappers/value/identity.rb +0 -18
  84. data/lib/fortnox/api/mappers.rb +0 -21
  85. data/lib/fortnox/api/models/article.rb +0 -134
  86. data/lib/fortnox/api/models/base.rb +0 -128
  87. data/lib/fortnox/api/models/customer.rb +0 -210
  88. data/lib/fortnox/api/models/document.rb +0 -189
  89. data/lib/fortnox/api/models/invoice.rb +0 -87
  90. data/lib/fortnox/api/models/label.rb +0 -19
  91. data/lib/fortnox/api/models/order.rb +0 -27
  92. data/lib/fortnox/api/models/project.rb +0 -42
  93. data/lib/fortnox/api/models/terms_of_payment.rb +0 -28
  94. data/lib/fortnox/api/models/unit.rb +0 -24
  95. data/lib/fortnox/api/models.rb +0 -9
  96. data/lib/fortnox/api/repositories/article.rb +0 -17
  97. data/lib/fortnox/api/repositories/authentication.rb +0 -61
  98. data/lib/fortnox/api/repositories/base/loaders.rb +0 -64
  99. data/lib/fortnox/api/repositories/base/savers.rb +0 -57
  100. data/lib/fortnox/api/repositories/base.rb +0 -93
  101. data/lib/fortnox/api/repositories/customer.rb +0 -17
  102. data/lib/fortnox/api/repositories/invoice.rb +0 -17
  103. data/lib/fortnox/api/repositories/order.rb +0 -17
  104. data/lib/fortnox/api/repositories/project.rb +0 -17
  105. data/lib/fortnox/api/repositories/terms_of_payment.rb +0 -17
  106. data/lib/fortnox/api/repositories/unit.rb +0 -17
  107. data/lib/fortnox/api/repositories.rb +0 -10
  108. data/lib/fortnox/api/request_handling.rb +0 -46
  109. data/lib/fortnox/api/types/default_delivery_types.rb +0 -20
  110. data/lib/fortnox/api/types/default_templates.rb +0 -23
  111. data/lib/fortnox/api/types/defaulted.rb +0 -11
  112. data/lib/fortnox/api/types/document_row.rb +0 -64
  113. data/lib/fortnox/api/types/edi_information.rb +0 -29
  114. data/lib/fortnox/api/types/email_information.rb +0 -26
  115. data/lib/fortnox/api/types/enums.rb +0 -116
  116. data/lib/fortnox/api/types/invoice_row.rb +0 -19
  117. data/lib/fortnox/api/types/model.rb +0 -37
  118. data/lib/fortnox/api/types/nullable.rb +0 -25
  119. data/lib/fortnox/api/types/order_row.rb +0 -16
  120. data/lib/fortnox/api/types/required.rb +0 -13
  121. data/lib/fortnox/api/types/shim/country_string.rb +0 -10
  122. data/lib/fortnox/api/types/sized.rb +0 -33
  123. data/lib/fortnox/api/types.rb +0 -144
  124. data/lib/fortnox/api.rb +0 -62
  125. data/spec/fortnox/api/mappers/article_spec.rb +0 -17
  126. data/spec/fortnox/api/mappers/base/canonical_name_sym_spec.rb +0 -36
  127. data/spec/fortnox/api/mappers/base/from_json_spec.rb +0 -70
  128. data/spec/fortnox/api/mappers/base/to_json_spec.rb +0 -68
  129. data/spec/fortnox/api/mappers/base_spec.rb +0 -154
  130. data/spec/fortnox/api/mappers/contexts/json_conversion.rb +0 -62
  131. data/spec/fortnox/api/mappers/customer_spec.rb +0 -27
  132. data/spec/fortnox/api/mappers/default_delivery_types_spec.rb +0 -14
  133. data/spec/fortnox/api/mappers/edi_information_spec.rb +0 -23
  134. data/spec/fortnox/api/mappers/email_information_spec.rb +0 -19
  135. data/spec/fortnox/api/mappers/examples/mapper.rb +0 -34
  136. data/spec/fortnox/api/mappers/invoice_row_spec.rb +0 -24
  137. data/spec/fortnox/api/mappers/invoice_spec.rb +0 -27
  138. data/spec/fortnox/api/mappers/order_row_spec.rb +0 -21
  139. data/spec/fortnox/api/mappers/order_spec.rb +0 -23
  140. data/spec/fortnox/api/mappers/project_spec.rb +0 -12
  141. data/spec/fortnox/api/mappers/terms_of_payment_spec.rb +0 -16
  142. data/spec/fortnox/api/mappers/unit_spec.rb +0 -56
  143. data/spec/fortnox/api/models/article_spec.rb +0 -9
  144. data/spec/fortnox/api/models/base_spec.rb +0 -117
  145. data/spec/fortnox/api/models/customer_spec.rb +0 -9
  146. data/spec/fortnox/api/models/examples/document_base.rb +0 -15
  147. data/spec/fortnox/api/models/examples/model.rb +0 -22
  148. data/spec/fortnox/api/models/invoice_spec.rb +0 -11
  149. data/spec/fortnox/api/models/order_spec.rb +0 -12
  150. data/spec/fortnox/api/models/project_spec.rb +0 -9
  151. data/spec/fortnox/api/models/terms_of_payment_spec.rb +0 -9
  152. data/spec/fortnox/api/models/unit_spec.rb +0 -33
  153. data/spec/fortnox/api/repositories/article_spec.rb +0 -80
  154. data/spec/fortnox/api/repositories/authentication_spec.rb +0 -103
  155. data/spec/fortnox/api/repositories/base_spec.rb +0 -168
  156. data/spec/fortnox/api/repositories/customer_spec.rb +0 -119
  157. data/spec/fortnox/api/repositories/examples/all.rb +0 -17
  158. data/spec/fortnox/api/repositories/examples/find.rb +0 -84
  159. data/spec/fortnox/api/repositories/examples/only.rb +0 -34
  160. data/spec/fortnox/api/repositories/examples/save.rb +0 -76
  161. data/spec/fortnox/api/repositories/examples/save_with_nested_model.rb +0 -28
  162. data/spec/fortnox/api/repositories/examples/save_with_specially_named_attribute.rb +0 -26
  163. data/spec/fortnox/api/repositories/examples/search.rb +0 -39
  164. data/spec/fortnox/api/repositories/invoice_spec.rb +0 -297
  165. data/spec/fortnox/api/repositories/order_spec.rb +0 -53
  166. data/spec/fortnox/api/repositories/project_spec.rb +0 -36
  167. data/spec/fortnox/api/repositories/terms_of_payment_spec.rb +0 -34
  168. data/spec/fortnox/api/repositories/unit_spec.rb +0 -39
  169. data/spec/fortnox/api/types/account_number_spec.rb +0 -35
  170. data/spec/fortnox/api/types/country_code_spec.rb +0 -42
  171. data/spec/fortnox/api/types/country_spec.rb +0 -67
  172. data/spec/fortnox/api/types/default_delivery_types_spec.rb +0 -12
  173. data/spec/fortnox/api/types/edi_information_spec.rb +0 -15
  174. data/spec/fortnox/api/types/email_information_spec.rb +0 -15
  175. data/spec/fortnox/api/types/email_spec.rb +0 -56
  176. data/spec/fortnox/api/types/enums_spec.rb +0 -17
  177. data/spec/fortnox/api/types/examples/document_row.rb +0 -25
  178. data/spec/fortnox/api/types/examples/enum.rb +0 -55
  179. data/spec/fortnox/api/types/examples/types.rb +0 -11
  180. data/spec/fortnox/api/types/housework_types_spec.rb +0 -149
  181. data/spec/fortnox/api/types/invoice_row_spec.rb +0 -11
  182. data/spec/fortnox/api/types/model_spec.rb +0 -69
  183. data/spec/fortnox/api/types/nullable_spec.rb +0 -79
  184. data/spec/fortnox/api/types/order_row_spec.rb +0 -15
  185. data/spec/fortnox/api/types/required_spec.rb +0 -36
  186. data/spec/fortnox/api/types/sales_account_spec.rb +0 -57
  187. data/spec/fortnox/api/types/sized_spec.rb +0 -76
  188. data/spec/fortnox/api_spec.rb +0 -66
  189. data/spec/spec_helper.rb +0 -35
  190. data/spec/support/helpers/configuration_helper.rb +0 -39
  191. data/spec/support/helpers/repository_helper.rb +0 -10
  192. data/spec/support/helpers.rb +0 -3
  193. data/spec/support/matchers/type/attribute_matcher.rb +0 -40
  194. data/spec/support/matchers/type/enum_matcher.rb +0 -23
  195. data/spec/support/matchers/type/have_account_number_matcher.rb +0 -23
  196. data/spec/support/matchers/type/have_currency_matcher.rb +0 -9
  197. data/spec/support/matchers/type/have_customer_type_matcher.rb +0 -15
  198. data/spec/support/matchers/type/have_default_delivery_type_matcher.rb +0 -9
  199. data/spec/support/matchers/type/have_discount_type_matcher.rb +0 -9
  200. data/spec/support/matchers/type/have_email_matcher.rb +0 -24
  201. data/spec/support/matchers/type/have_housework_type_matcher.rb +0 -9
  202. data/spec/support/matchers/type/have_nullable_date_matcher.rb +0 -60
  203. data/spec/support/matchers/type/have_nullable_matcher.rb +0 -54
  204. data/spec/support/matchers/type/have_nullable_string_matcher.rb +0 -47
  205. data/spec/support/matchers/type/have_sized_float_matcher.rb +0 -10
  206. data/spec/support/matchers/type/have_sized_integer_matcher.rb +0 -10
  207. data/spec/support/matchers/type/have_sized_string_matcher.rb +0 -36
  208. data/spec/support/matchers/type/have_vat_type_matcher.rb +0 -9
  209. data/spec/support/matchers/type/numeric_matcher.rb +0 -52
  210. data/spec/support/matchers/type/require_attribute_matcher.rb +0 -68
  211. data/spec/support/matchers/type/type_matcher.rb +0 -40
  212. data/spec/support/matchers/type.rb +0 -19
  213. data/spec/support/matchers.rb +0 -3
  214. data/spec/support/vcr_setup.rb +0 -25
  215. data/spec/vcr_cassettes/articles/all.yml +0 -67
  216. data/spec/vcr_cassettes/articles/find_by_hash_failure.yml +0 -62
  217. data/spec/vcr_cassettes/articles/find_failure.yml +0 -62
  218. data/spec/vcr_cassettes/articles/find_id_1.yml +0 -63
  219. data/spec/vcr_cassettes/articles/find_new.yml +0 -63
  220. data/spec/vcr_cassettes/articles/limits/quantity_in_stock_min_value.yml +0 -63
  221. data/spec/vcr_cassettes/articles/limits/quantity_in_stock_rounding_positive_value.yml +0 -63
  222. data/spec/vcr_cassettes/articles/multi_param_find_by_hash.yml +0 -62
  223. data/spec/vcr_cassettes/articles/save_new.yml +0 -63
  224. data/spec/vcr_cassettes/articles/save_old.yml +0 -63
  225. data/spec/vcr_cassettes/articles/save_with_specially_named_attribute.yml +0 -63
  226. data/spec/vcr_cassettes/articles/search_by_name.yml +0 -65
  227. data/spec/vcr_cassettes/articles/search_miss.yml +0 -62
  228. data/spec/vcr_cassettes/articles/search_with_special_char.yml +0 -62
  229. data/spec/vcr_cassettes/articles/single_param_find_by_hash.yml +0 -62
  230. data/spec/vcr_cassettes/authentication/expired_token.yml +0 -54
  231. data/spec/vcr_cassettes/authentication/invalid_authorization.yml +0 -57
  232. data/spec/vcr_cassettes/authentication/invalid_refresh_token.yml +0 -58
  233. data/spec/vcr_cassettes/authentication/valid_request.yml +0 -63
  234. data/spec/vcr_cassettes/customers/all.yml +0 -69
  235. data/spec/vcr_cassettes/customers/find_by_hash_failure.yml +0 -62
  236. data/spec/vcr_cassettes/customers/find_failure.yml +0 -62
  237. data/spec/vcr_cassettes/customers/find_id_1.yml +0 -64
  238. data/spec/vcr_cassettes/customers/find_new.yml +0 -63
  239. data/spec/vcr_cassettes/customers/find_with_sales_account.yml +0 -63
  240. data/spec/vcr_cassettes/customers/multi_param_find_by_hash.yml +0 -63
  241. data/spec/vcr_cassettes/customers/save_new.yml +0 -63
  242. data/spec/vcr_cassettes/customers/save_new_with_country_code_SE.yml +0 -64
  243. data/spec/vcr_cassettes/customers/save_new_with_idn_email.yml +0 -67
  244. data/spec/vcr_cassettes/customers/save_new_with_sales_account.yml +0 -63
  245. data/spec/vcr_cassettes/customers/save_old.yml +0 -63
  246. data/spec/vcr_cassettes/customers/save_with_specially_named_attribute.yml +0 -63
  247. data/spec/vcr_cassettes/customers/search_by_name.yml +0 -64
  248. data/spec/vcr_cassettes/customers/search_miss.yml +0 -62
  249. data/spec/vcr_cassettes/customers/search_with_special_char.yml +0 -62
  250. data/spec/vcr_cassettes/customers/single_param_find_by_hash.yml +0 -64
  251. data/spec/vcr_cassettes/invoices/all.yml +0 -96
  252. data/spec/vcr_cassettes/invoices/filter_hit.yml +0 -64
  253. data/spec/vcr_cassettes/invoices/filter_invalid.yml +0 -60
  254. data/spec/vcr_cassettes/invoices/find_by_hash_failure.yml +0 -62
  255. data/spec/vcr_cassettes/invoices/find_failure.yml +0 -62
  256. data/spec/vcr_cassettes/invoices/find_id_1.yml +0 -65
  257. data/spec/vcr_cassettes/invoices/find_new.yml +0 -65
  258. data/spec/vcr_cassettes/invoices/multi_param_find_by_hash.yml +0 -63
  259. data/spec/vcr_cassettes/invoices/row_delivered_quantity_decimals.yml +0 -65
  260. data/spec/vcr_cassettes/invoices/row_delivered_quantity_decimals_round_up.yml +0 -65
  261. data/spec/vcr_cassettes/invoices/row_description_limit.yml +0 -65
  262. data/spec/vcr_cassettes/invoices/row_price_limit.yml +0 -65
  263. data/spec/vcr_cassettes/invoices/row_price_limit_round_up.yml +0 -65
  264. data/spec/vcr_cassettes/invoices/save_new.yml +0 -65
  265. data/spec/vcr_cassettes/invoices/save_new_with_comments.yml +0 -65
  266. data/spec/vcr_cassettes/invoices/save_new_with_country.yml +0 -65
  267. data/spec/vcr_cassettes/invoices/save_new_with_country_GB.yml +0 -66
  268. data/spec/vcr_cassettes/invoices/save_new_with_country_Norge.yml +0 -65
  269. data/spec/vcr_cassettes/invoices/save_new_with_country_Norway.yml +0 -65
  270. data/spec/vcr_cassettes/invoices/save_new_with_country_Sverige.yml +0 -65
  271. data/spec/vcr_cassettes/invoices/save_new_with_country_VA.yml +0 -66
  272. data/spec/vcr_cassettes/invoices/save_new_with_country_VI.yml +0 -66
  273. data/spec/vcr_cassettes/invoices/save_new_with_country_empty_string.yml +0 -65
  274. data/spec/vcr_cassettes/invoices/save_new_with_country_nil.yml +0 -65
  275. data/spec/vcr_cassettes/invoices/save_new_with_unsaved_parent.yml +0 -65
  276. data/spec/vcr_cassettes/invoices/save_old.yml +0 -65
  277. data/spec/vcr_cassettes/invoices/save_old_with_empty_comments.yml +0 -65
  278. data/spec/vcr_cassettes/invoices/save_old_with_empty_country.yml +0 -65
  279. data/spec/vcr_cassettes/invoices/save_old_with_nil_comments.yml +0 -65
  280. data/spec/vcr_cassettes/invoices/save_old_with_nil_country.yml +0 -65
  281. data/spec/vcr_cassettes/invoices/save_with_nested_model.yml +0 -65
  282. data/spec/vcr_cassettes/invoices/save_with_specially_named_attribute.yml +0 -65
  283. data/spec/vcr_cassettes/invoices/search_by_name.yml +0 -63
  284. data/spec/vcr_cassettes/invoices/search_miss.yml +0 -62
  285. data/spec/vcr_cassettes/invoices/search_with_special_char.yml +0 -62
  286. data/spec/vcr_cassettes/invoices/single_param_find_by_hash.yml +0 -64
  287. data/spec/vcr_cassettes/orders/all.yml +0 -69
  288. data/spec/vcr_cassettes/orders/filter_hit.yml +0 -64
  289. data/spec/vcr_cassettes/orders/filter_invalid.yml +0 -60
  290. data/spec/vcr_cassettes/orders/find_by_hash_failure.yml +0 -62
  291. data/spec/vcr_cassettes/orders/find_failure.yml +0 -62
  292. data/spec/vcr_cassettes/orders/find_id_1.yml +0 -67
  293. data/spec/vcr_cassettes/orders/find_new.yml +0 -65
  294. data/spec/vcr_cassettes/orders/housework_invalid_tax_reduction_type.yml +0 -61
  295. data/spec/vcr_cassettes/orders/housework_othercoses_invalid.yml +0 -61
  296. data/spec/vcr_cassettes/orders/housework_type_babysitting.yml +0 -65
  297. data/spec/vcr_cassettes/orders/housework_type_cleaning.yml +0 -65
  298. data/spec/vcr_cassettes/orders/housework_type_construction.yml +0 -65
  299. data/spec/vcr_cassettes/orders/housework_type_cooking.yml +0 -61
  300. data/spec/vcr_cassettes/orders/housework_type_electricity.yml +0 -65
  301. data/spec/vcr_cassettes/orders/housework_type_gardening.yml +0 -65
  302. data/spec/vcr_cassettes/orders/housework_type_glassmetalwork.yml +0 -65
  303. data/spec/vcr_cassettes/orders/housework_type_grounddrainagework.yml +0 -65
  304. data/spec/vcr_cassettes/orders/housework_type_hvac.yml +0 -65
  305. data/spec/vcr_cassettes/orders/housework_type_itservices.yml +0 -65
  306. data/spec/vcr_cassettes/orders/housework_type_majorappliancerepair.yml +0 -65
  307. data/spec/vcr_cassettes/orders/housework_type_masonry.yml +0 -65
  308. data/spec/vcr_cassettes/orders/housework_type_movingservices.yml +0 -65
  309. data/spec/vcr_cassettes/orders/housework_type_othercare.yml +0 -65
  310. data/spec/vcr_cassettes/orders/housework_type_othercosts.yml +0 -65
  311. data/spec/vcr_cassettes/orders/housework_type_paintingwallpapering.yml +0 -65
  312. data/spec/vcr_cassettes/orders/housework_type_snowplowing.yml +0 -65
  313. data/spec/vcr_cassettes/orders/housework_type_textileclothing.yml +0 -65
  314. data/spec/vcr_cassettes/orders/housework_type_tutoring.yml +0 -61
  315. data/spec/vcr_cassettes/orders/multi_param_find_by_hash.yml +0 -63
  316. data/spec/vcr_cassettes/orders/save_new.yml +0 -65
  317. data/spec/vcr_cassettes/orders/save_old.yml +0 -65
  318. data/spec/vcr_cassettes/orders/save_with_nested_model.yml +0 -65
  319. data/spec/vcr_cassettes/orders/search_by_name.yml +0 -63
  320. data/spec/vcr_cassettes/orders/search_miss.yml +0 -62
  321. data/spec/vcr_cassettes/orders/search_with_special_char.yml +0 -62
  322. data/spec/vcr_cassettes/orders/single_param_find_by_hash.yml +0 -64
  323. data/spec/vcr_cassettes/projects/all.yml +0 -64
  324. data/spec/vcr_cassettes/projects/find_by_hash_failure.yml +0 -62
  325. data/spec/vcr_cassettes/projects/find_failure.yml +0 -62
  326. data/spec/vcr_cassettes/projects/find_id_1.yml +0 -63
  327. data/spec/vcr_cassettes/projects/find_new.yml +0 -63
  328. data/spec/vcr_cassettes/projects/multi_param_find_by_hash.yml +0 -64
  329. data/spec/vcr_cassettes/projects/save_new.yml +0 -63
  330. data/spec/vcr_cassettes/projects/save_old.yml +0 -63
  331. data/spec/vcr_cassettes/projects/single_param_find_by_hash.yml +0 -63
  332. data/spec/vcr_cassettes/termsofpayments/all.yml +0 -68
  333. data/spec/vcr_cassettes/termsofpayments/find_failure.yml +0 -62
  334. data/spec/vcr_cassettes/termsofpayments/find_id_1.yml +0 -62
  335. data/spec/vcr_cassettes/termsofpayments/find_new.yml +0 -63
  336. data/spec/vcr_cassettes/termsofpayments/save_new.yml +0 -63
  337. data/spec/vcr_cassettes/termsofpayments/save_old.yml +0 -63
  338. data/spec/vcr_cassettes/units/all.yml +0 -64
  339. data/spec/vcr_cassettes/units/find_failure.yml +0 -62
  340. data/spec/vcr_cassettes/units/find_id_1.yml +0 -63
  341. data/spec/vcr_cassettes/units/find_new.yml +0 -63
  342. data/spec/vcr_cassettes/units/save_new.yml +0 -63
  343. data/spec/vcr_cassettes/units/save_old.yml +0 -63
  344. data/spec/vcr_cassettes/units/save_with_specially_named_attribute.yml +0 -63
data/lib/fortnox/api.rb DELETED
@@ -1,62 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'set'
4
- require 'dry-configurable'
5
- require 'dry-container'
6
- require 'logger'
7
-
8
- require_relative 'api/version'
9
-
10
- module Fortnox
11
- module API
12
- extend Dry::Configurable
13
-
14
- DEFAULT_CONFIGURATION = {
15
- base_url: 'https://api.fortnox.se/3/',
16
- token_url: 'https://apps.fortnox.se/oauth-v1/token',
17
- debugging: false,
18
- logger: lambda {
19
- logger = Logger.new($stdout)
20
- logger.level = Logger::WARN
21
- return logger
22
- }.call
23
- }.freeze
24
-
25
- setting :base_url, default: DEFAULT_CONFIGURATION[:base_url]
26
- setting :token_url, default: DEFAULT_CONFIGURATION[:token_url]
27
- setting :debugging, default: DEFAULT_CONFIGURATION[:debugging], reader: true
28
- setting :logger, default: DEFAULT_CONFIGURATION[:logger], reader: true
29
-
30
- def self.access_token=(token)
31
- Thread.current[:access_token] = token
32
- end
33
-
34
- def self.access_token
35
- Thread.current[:access_token]
36
- end
37
-
38
- class Exception < StandardError
39
- end
40
-
41
- class AttributeError < Fortnox::API::Exception
42
- end
43
-
44
- class RemoteServerError < Fortnox::API::Exception
45
- end
46
-
47
- class MissingAttributeError < Fortnox::API::Exception
48
- end
49
-
50
- class MissingConfiguration < Fortnox::API::Exception
51
- end
52
-
53
- class MissingAccessToken < Fortnox::API::Exception
54
- end
55
-
56
- Registry = Dry::Container.new
57
- end
58
- end
59
-
60
- require_relative 'api/models'
61
- require_relative 'api/repositories'
62
- require_relative 'api/mappers'
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'fortnox/api'
5
- require 'fortnox/api/mappers/customer'
6
- require 'fortnox/api/mappers/examples/mapper'
7
-
8
- describe Fortnox::API::Mapper::Article do
9
- key_map = Fortnox::API::Mapper::Article::KEY_MAP
10
-
11
- json_entity_type = 'Article'
12
- json_entity_collection = 'Articles'
13
-
14
- it_behaves_like 'mapper', key_map, json_entity_type, json_entity_collection do
15
- let(:mapper) { described_class.new }
16
- end
17
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'fortnox/api/mappers/base/canonical_name_sym'
5
-
6
- describe Fortnox::API::Mapper::CanonicalNameSym do
7
- describe '.canonical_name_sym' do
8
- context 'with simple class' do
9
- subject { TestClass.canonical_name_sym }
10
-
11
- before do
12
- test_class = Class.new do
13
- extend Fortnox::API::Mapper::CanonicalNameSym
14
- end
15
-
16
- stub_const('TestClass', test_class)
17
- end
18
-
19
- it { is_expected.to eq(:testclass) }
20
- end
21
-
22
- context 'when class included in module' do
23
- subject { Something::Test.canonical_name_sym }
24
-
25
- before do
26
- test_class = Class.new do
27
- extend Fortnox::API::Mapper::CanonicalNameSym
28
- end
29
-
30
- stub_const('Something::Test', test_class)
31
- end
32
-
33
- it { is_expected.to eq(:test) }
34
- end
35
- end
36
- end
@@ -1,70 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'fortnox/api/mappers/base/from_json'
5
- require 'fortnox/api/mappers/contexts/json_conversion'
6
-
7
- describe Fortnox::API::Mapper::FromJSON do
8
- include_context 'with JSON conversion'
9
-
10
- before do
11
- Test::BaseMapper.class_eval do
12
- include Fortnox::API::Mapper::FromJSON # rubocop:disable RSpec/DescribedClass
13
- end
14
-
15
- add_to_registry(:categories, Test::CategoryMapper)
16
- add_to_registry(:designer, Test::ProductDesignerMapper)
17
- end
18
-
19
- let(:mapper) { Test::ProductMapper.new }
20
-
21
- describe 'wrapped_json_hash_to_entity_hash' do
22
- let(:entity_hash) { mapper.wrapped_json_hash_to_entity_hash(wrapped_json_hash) }
23
- let(:wrapped_json_hash) do
24
- {
25
- 'Product' => {
26
- '@url': 'someurl@example.com',
27
- Name: 'Ford Mustang',
28
- VAT: 30_000,
29
- Categories: [{ Name: 'Cars', ID: '1' }, { Name: 'Fast cars', ID: '2' }],
30
- Designer: { Name: 'John Najjar', ID: '23' }
31
- }
32
- }
33
- end
34
-
35
- specify 'converts keys without mapping correctly' do
36
- expect(entity_hash[:name]).to eq 'Ford Mustang'
37
- end
38
-
39
- specify 'converts keys with mapping correctly' do
40
- expect(entity_hash[:vat]).to eq 30_000
41
- end
42
-
43
- specify 'converts keys starting with "@" correctly'
44
- # do
45
- # expect( entity_hash[:url] ).to eq 'someurl@example.com'
46
- # end
47
-
48
- describe 'nested models' do
49
- let(:expected_nested_model_hash) do
50
- [{ name: 'Cars', id: '1' }, { name: 'Fast cars', id: '2' }]
51
- end
52
-
53
- specify 'are converted correctly' do
54
- expect(entity_hash[:categories]).to eq(expected_nested_model_hash)
55
- end
56
- end
57
-
58
- describe 'nested model' do
59
- let(:expected_nested_model_hash) { { name: 'John Najjar', id: '23' } }
60
-
61
- specify 'is converted correctly' do
62
- expect(entity_hash[:designer]).to eq(expected_nested_model_hash)
63
- end
64
- end
65
- end
66
-
67
- describe 'wrapped_json_collection_to_entities_hash' do
68
- it 'is tested'
69
- end
70
- end
@@ -1,68 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'fortnox/api/mappers/base/to_json'
5
- require 'fortnox/api/mappers/contexts/json_conversion'
6
-
7
- describe Fortnox::API::Mapper::ToJSON do
8
- include_context 'with JSON conversion'
9
-
10
- before do
11
- Test::BaseMapper.class_eval do
12
- include Fortnox::API::Mapper::ToJSON # rubocop:disable RSpec/DescribedClass
13
- end
14
- end
15
-
16
- let(:mapper) { Test::ProductMapper.new }
17
-
18
- describe '#entity_to_hash' do
19
- let(:product) do
20
- category1 = Test::Category.new(name: 'Cars', id: '1')
21
- category2 = Test::Category.new(name: 'Fast Cars', id: '2')
22
- product_designer = Test::ProductDesigner.new(name: 'John Najjar', id: '23')
23
-
24
- Test::Product.new(url: 'someurl@example.com',
25
- name: 'Ford Mustang',
26
- vat: 30_000.0,
27
- categories: [category1, category2],
28
- designer: product_designer)
29
- end
30
- let(:keys_to_filter) { [:url] }
31
- let(:returned_hash) { mapper.entity_to_hash(product, keys_to_filter) }
32
- let(:inner_hash) { returned_hash['Product'] }
33
-
34
- it 'includes JSON entity wrapper' do
35
- expect(returned_hash).to have_key('Product')
36
- end
37
-
38
- describe 'keys without mapping' do
39
- specify 'converts correctly' do
40
- expect(inner_hash['Name']).to eq('Ford Mustang')
41
- end
42
- end
43
-
44
- describe 'keys to filter' do
45
- specify 'filteres out those keys' do
46
- expect(inner_hash).not_to have_key('@url')
47
- end
48
- end
49
-
50
- describe 'nested models' do
51
- let(:expected_nested_model_hash) do
52
- [{ 'Name' => 'Cars', 'ID' => '1' }, { 'Name' => 'Fast Cars', 'ID' => '2' }]
53
- end
54
-
55
- specify 'are converted correctly' do
56
- expect(inner_hash['Categories']).to eq(expected_nested_model_hash)
57
- end
58
- end
59
-
60
- describe 'nested model' do
61
- let(:expected_nested_model_hash) { { 'Name' => 'John Najjar', 'ID' => '23' } }
62
-
63
- specify 'is converted correctly' do
64
- expect(inner_hash['Designer']).to eq(expected_nested_model_hash)
65
- end
66
- end
67
- end
68
- end
@@ -1,154 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'fortnox/api'
5
- require 'fortnox/api/mappers'
6
- require 'fortnox/api/mappers/base'
7
- require 'fortnox/api/mappers/examples/mapper'
8
-
9
- describe Fortnox::API::Mapper::Base do
10
- it_behaves_like 'mapper', nil, nil, nil, check_constants: false
11
-
12
- shared_examples_for 'simple mapper' do |registry_key, exp_value|
13
- subject { mapper.call(value) }
14
-
15
- let(:mapper) { Fortnox::API::Registry[registry_key] }
16
- it { is_expected.to eq(exp_value) }
17
- end
18
-
19
- shared_examples_for 'identity mapper' do |registry_key|
20
- subject { mapper.call(value) }
21
-
22
- let(:mapper) { Fortnox::API::Registry[registry_key] }
23
- it { is_expected.to eq(value) }
24
- end
25
-
26
- describe 'string' do
27
- include_examples 'identity mapper', :string do
28
- let(:value) { Fortnox::API::Types::Nullable::String['test'] }
29
- end
30
- end
31
-
32
- describe 'int' do
33
- include_examples 'identity mapper', :int do
34
- let(:value) { Fortnox::API::Types::Nullable::Integer[1337] }
35
- end
36
- end
37
-
38
- describe 'integer' do
39
- include_examples 'identity mapper', :integer do
40
- let(:value) { Fortnox::API::Types::Nullable::Integer[1337] }
41
- end
42
- end
43
-
44
- describe 'float' do
45
- include_examples 'identity mapper', :float do
46
- let(:value) { Fortnox::API::Types::Nullable::Float[13.37] }
47
- end
48
- end
49
-
50
- describe 'boolean' do
51
- include_examples 'identity mapper', :boolean do
52
- let(:value) { Fortnox::API::Types::Nullable::Boolean[false] }
53
- end
54
- end
55
-
56
- describe 'array' do
57
- include_examples 'identity mapper', :array do
58
- let(:value) { [1, 3, 3, 7] }
59
- end
60
- end
61
-
62
- describe 'array with very large int (Bigint if Ruby <2.4)' do
63
- include_examples 'identity mapper', :array do
64
- let(:value) { [(100**10)] }
65
- end
66
- end
67
-
68
- describe 'advanced array' do
69
- include_examples 'simple mapper', :array, ['2016-01-01', '2016-01-02'] do
70
- let(:value) { [Date.new(2016, 1, 1), Date.new(2016, 1, 2)] }
71
- end
72
- end
73
-
74
- describe 'hash' do
75
- include_examples 'identity mapper', :hash do
76
- let(:value) { { string: 'test', int: 1337, float: 13.37 } }
77
- end
78
- end
79
-
80
- describe 'advanced hash' do
81
- expected_hash = {
82
- string: 'test',
83
- date_array: ['2016-01-01', '2016-01-02'],
84
- nested_hash: { date: '2016-01-03', string: 'test' }
85
- }
86
- include_examples 'identity mapper', :hash, expected_hash do
87
- let(:value) do
88
- {
89
- string: 'test',
90
- date_array: [Date.new(2016, 1, 1), Date.new(2016, 1, 2)],
91
- nested_hash: { date: Date.new(2016, 1, 3), string: 'test' }
92
- }
93
- end
94
- end
95
- end
96
-
97
- describe 'trueclass' do
98
- include_examples 'identity mapper', :trueclass do
99
- let(:value) { true }
100
- end
101
- end
102
-
103
- describe 'falseclass' do
104
- include_examples 'identity mapper', :falseclass do
105
- let(:value) { false }
106
- end
107
- end
108
-
109
- describe 'date' do
110
- include_examples 'simple mapper', :date, '2016-01-01' do
111
- let(:value) { Date.new(2016, 1, 1) }
112
- end
113
- end
114
-
115
- describe 'nilclass' do
116
- include_examples 'identity mapper', :nilclass do
117
- let(:value) { Fortnox::API::Types::Nullable::String[nil] }
118
- end
119
- end
120
-
121
- describe 'Country' do
122
- subject { mapper.call('GB') }
123
-
124
- let(:mapper) { Fortnox::API::Registry[:countrystring] }
125
-
126
- it { is_expected.to eq('United Kingdom') }
127
-
128
- describe 'special cases' do
129
- context 'with SE' do
130
- it 'translates code to country name in Swedish' do
131
- expect(mapper.call('SE')).to eq('Sverige')
132
- end
133
- end
134
-
135
- context 'with nil value' do
136
- subject { mapper.call(nil) }
137
-
138
- it { is_expected.to be_nil }
139
- end
140
-
141
- context 'with empty string' do
142
- subject { mapper.call('') }
143
-
144
- it { is_expected.to eq('') }
145
- end
146
-
147
- context 'with nonsense' do
148
- it 'is not supported (since input is sanitised) and therefore blows up' do
149
- expect { mapper.call('nonsense') }.to raise_error(NoMethodError)
150
- end
151
- end
152
- end
153
- end
154
- end
@@ -1,62 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'fortnox/api'
4
- require 'fortnox/api/mappers'
5
- require 'dry/container/stub'
6
-
7
- shared_context 'with JSON conversion' do
8
- include Helpers::Configuration
9
-
10
- before do
11
- stub_const('Test::BaseMapper', Class.new)
12
-
13
- stub_const('Test::CategoryMapper', Class.new(Test::BaseMapper))
14
- stub_const('Test::CategoryMapper::KEY_MAP', { id: 'ID' }.freeze)
15
-
16
- stub_const('Test::ProductDesignerMapper', Class.new(Test::BaseMapper))
17
- stub_const('Test::ProductDesignerMapper::KEY_MAP', { id: 'ID' }.freeze)
18
-
19
- stub_const('Test::ProductMapper', Class.new(Test::BaseMapper))
20
- stub_const(
21
- 'Test::ProductMapper::KEY_MAP',
22
- {
23
- vat: 'VAT',
24
- url: '@url' # TODO: How to handle url attribute?
25
- }.freeze
26
- )
27
- stub_const('Test::ProductMapper::JSON_ENTITY_WRAPPER', 'Product')
28
- stub_const('Test::ProductMapper::JSON_COLLECTION_WRAPPER', 'Products')
29
-
30
- stub_const(
31
- 'Test::Category',
32
- Class.new(Fortnox::API::Model::Base) do
33
- attribute :name, 'strict.string'
34
- attribute :id, 'strict.string'
35
- end
36
- )
37
-
38
- stub_const(
39
- 'Test::ProductDesigner',
40
- Class.new(Fortnox::API::Model::Base) do
41
- attribute :name, 'strict.string'
42
- attribute :id, 'strict.string'
43
- end
44
- )
45
-
46
- stub_const(
47
- 'Test::Product',
48
- Class.new(Fortnox::API::Model::Base) do
49
- attribute :url, 'strict.string'
50
- attribute :name, 'strict.string'
51
- attribute :vat, 'strict.float'
52
- attribute :categories, Dry::Types['coercible.array'].of(Test::Category)
53
- attribute :designer, Test::ProductDesigner
54
- end
55
- )
56
-
57
- Fortnox::API::Registry.enable_stubs!
58
- add_to_registry(:category, Test::CategoryMapper)
59
- add_to_registry(:productdesigner, Test::ProductDesignerMapper)
60
- add_to_registry(:product, Test::ProductMapper)
61
- end
62
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'fortnox/api'
5
- require 'fortnox/api/mappers/customer'
6
- require 'fortnox/api/mappers/examples/mapper'
7
-
8
- describe Fortnox::API::Mapper::Customer do
9
- key_map =
10
- {
11
- vat_type: 'VATType',
12
- vat_number: 'VATNumber',
13
- email_invoice_bcc: 'EmailInvoiceBCC',
14
- email_invoice_cc: 'EmailInvoiceCC',
15
- email_offer_bcc: 'EmailOfferBCC',
16
- email_offer_cc: 'EmailOfferCC',
17
- email_order_bcc: 'EmailOrderBCC',
18
- email_order_cc: 'EmailOrderCC',
19
- show_price_vat_included: 'ShowPriceVATIncluded'
20
- }
21
- json_entity_type = 'Customer'
22
- json_entity_collection = 'Customers'
23
-
24
- it_behaves_like 'mapper', key_map, json_entity_type, json_entity_collection do
25
- let(:mapper) { described_class.new }
26
- end
27
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'fortnox/api'
5
- require 'fortnox/api/mappers/default_delivery_types'
6
- require 'fortnox/api/mappers/examples/mapper'
7
-
8
- describe Fortnox::API::Mapper::DefaultDeliveryTypes do
9
- key_map = {}
10
-
11
- it_behaves_like 'mapper', key_map, nil, nil do
12
- let(:mapper) { described_class.new }
13
- end
14
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'fortnox/api'
5
- require 'fortnox/api/mappers/edi_information'
6
- require 'fortnox/api/mappers/examples/mapper'
7
-
8
- describe Fortnox::API::Mapper::EDIInformation do
9
- key_map = {
10
- edi_global_location_number: 'EDIGlobalLocationNumber',
11
- edi_global_location_number_delivery: 'EDIGlobalLocationNumberDelivery',
12
- edi_invoice_extra1: 'EDIInvoiceExtra1',
13
- edi_invoice_extra2: 'EDIInvoiceExtra2',
14
- edi_our_electronic_reference: 'EDIOurElectronicReference',
15
- edi_your_electronic_reference: 'EDIYourElectronicReference'
16
- }
17
- json_entity_type = 'EDIInformation'
18
- json_entity_collection = 'EDIInformation'
19
-
20
- it_behaves_like 'mapper', key_map, json_entity_type, json_entity_collection do
21
- let(:mapper) { described_class.new }
22
- end
23
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'fortnox/api'
5
- require 'fortnox/api/mappers/email_information'
6
- require 'fortnox/api/mappers/examples/mapper'
7
-
8
- describe Fortnox::API::Mapper::EmailInformation do
9
- key_map = {
10
- email_address_bcc: 'EmailAddressBCC',
11
- email_address_cc: 'EmailAddressCC'
12
- }
13
- json_entity_type = 'EmailInformation'
14
- json_entity_collection = 'EmailInformation'
15
-
16
- it_behaves_like 'mapper', key_map, json_entity_type, json_entity_collection do
17
- let(:mapper) { described_class.new }
18
- end
19
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # rubocop:disable Metrics/LineLength
4
- shared_examples_for 'mapper' do |key_map, json_entity_wrapper = nil, json_collection_wrapper = nil, check_constants: true|
5
- # rubocop:enable Metrics/LineLength
6
-
7
- it { is_expected.to respond_to(:wrapped_json_collection_to_entities_hash) }
8
- it { is_expected.to respond_to(:wrapped_json_hash_to_entity_hash) }
9
- it { is_expected.to respond_to(:entity_to_hash) }
10
-
11
- if check_constants
12
- describe 'key_map' do
13
- subject { described_class::KEY_MAP }
14
-
15
- it { expect(subject).to eq(key_map) }
16
- end
17
-
18
- unless json_entity_wrapper.nil?
19
- describe 'json_entity_wrapper' do
20
- subject { described_class::JSON_ENTITY_WRAPPER }
21
-
22
- it { is_expected.to eq(json_entity_wrapper) }
23
- end
24
- end
25
-
26
- unless json_collection_wrapper.nil?
27
- describe 'json_collection_wrapper' do
28
- subject { described_class::JSON_COLLECTION_WRAPPER }
29
-
30
- it { is_expected.to eq(json_collection_wrapper) }
31
- end
32
- end
33
- end
34
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'fortnox/api'
5
- require 'fortnox/api/mappers/invoice_row'
6
- require 'fortnox/api/mappers/examples/mapper'
7
-
8
- describe Fortnox::API::Mapper::InvoiceRow do
9
- key_map = {
10
- housework: 'HouseWork',
11
- housework_hours_to_report: 'HouseWorkHoursToReport',
12
- housework_type: 'HouseWorkType',
13
- price_excluding_vat: 'PriceExcludingVAT',
14
- total_excluding_vat: 'TotalExcludingVAT',
15
- vat: 'VAT'
16
- }
17
-
18
- json_entity_type = 'InvoiceRow'
19
- json_entity_collection = 'InvoiceRows'
20
-
21
- it_behaves_like 'mapper', key_map, json_entity_type, json_entity_collection do
22
- let(:mapper) { described_class.new }
23
- end
24
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'fortnox/api'
5
- require 'fortnox/api/mappers/invoice'
6
- require 'fortnox/api/mappers/examples/mapper'
7
-
8
- describe Fortnox::API::Mapper::Invoice do
9
- key_map =
10
- {
11
- administration_fee_vat: 'AdministrationFeeVAT',
12
- edi_information: 'EDIInformation',
13
- eu_quarterly_report: 'EUQuarterlyReport',
14
- freight_vat: 'FreightVAT',
15
- housework: 'HouseWork',
16
- ocr: 'OCR',
17
- total_vat: 'TotalVAT',
18
- vat_included: 'VATIncluded'
19
- }
20
-
21
- json_entity_type = 'Invoice'
22
- json_entity_collection = 'Invoices'
23
-
24
- it_behaves_like 'mapper', key_map, json_entity_type, json_entity_collection do
25
- let(:mapper) { described_class.new }
26
- end
27
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'fortnox/api'
5
- require 'fortnox/api/mappers/order_row'
6
- require 'fortnox/api/mappers/examples/mapper'
7
-
8
- describe Fortnox::API::Mapper::OrderRow do
9
- key_map = {
10
- housework: 'HouseWork',
11
- housework_hours_to_report: 'HouseWorkHoursToReport',
12
- housework_type: 'HouseWorkType',
13
- vat: 'VAT'
14
- }
15
- json_entity_type = 'OrderRow'
16
- json_entity_collection = 'OrderRows'
17
-
18
- it_behaves_like 'mapper', key_map, json_entity_type, json_entity_collection do
19
- let(:mapper) { described_class.new }
20
- end
21
- end