fortnox-api 0.5.2 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (192) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.rubocop.yml +9 -1104
  4. data/.travis.yml +22 -2
  5. data/Gemfile +3 -1
  6. data/Guardfile +4 -2
  7. data/README.md +2 -2
  8. data/Rakefile +3 -1
  9. data/bin/console +17 -3
  10. data/fortnox-api.gemspec +32 -27
  11. data/lib/fortnox/api.rb +17 -16
  12. data/lib/fortnox/api/circular_queue.rb +13 -7
  13. data/lib/fortnox/api/mappers.rb +29 -25
  14. data/lib/fortnox/api/mappers/article.rb +7 -6
  15. data/lib/fortnox/api/mappers/base.rb +18 -16
  16. data/lib/fortnox/api/mappers/base/from_json.rb +37 -30
  17. data/lib/fortnox/api/mappers/base/to_json.rb +39 -37
  18. data/lib/fortnox/api/mappers/customer.rb +7 -7
  19. data/lib/fortnox/api/mappers/default_delivery_types.rb +4 -2
  20. data/lib/fortnox/api/mappers/default_templates.rb +5 -4
  21. data/lib/fortnox/api/mappers/edi_information.rb +5 -4
  22. data/lib/fortnox/api/mappers/email_information.rb +5 -4
  23. data/lib/fortnox/api/mappers/invoice.rb +10 -8
  24. data/lib/fortnox/api/mappers/invoice_row.rb +12 -7
  25. data/lib/fortnox/api/mappers/order.rb +10 -7
  26. data/lib/fortnox/api/mappers/order_row.rb +13 -6
  27. data/lib/fortnox/api/mappers/project.rb +6 -4
  28. data/lib/fortnox/api/mappers/terms_of_payments.rb +17 -0
  29. data/lib/fortnox/api/mappers/unit.rb +17 -0
  30. data/lib/fortnox/api/models.rb +9 -5
  31. data/lib/fortnox/api/models/article.rb +68 -67
  32. data/lib/fortnox/api/models/base.rb +52 -36
  33. data/lib/fortnox/api/models/customer.rb +95 -94
  34. data/lib/fortnox/api/models/document.rb +186 -0
  35. data/lib/fortnox/api/models/invoice.rb +44 -44
  36. data/lib/fortnox/api/models/label.rb +5 -3
  37. data/lib/fortnox/api/models/order.rb +8 -8
  38. data/lib/fortnox/api/models/project.rb +10 -8
  39. data/lib/fortnox/api/models/terms_of_payments.rb +28 -0
  40. data/lib/fortnox/api/models/unit.rb +24 -0
  41. data/lib/fortnox/api/repositories.rb +9 -5
  42. data/lib/fortnox/api/repositories/article.rb +6 -4
  43. data/lib/fortnox/api/repositories/base.rb +49 -46
  44. data/lib/fortnox/api/repositories/base/loaders.rb +32 -36
  45. data/lib/fortnox/api/repositories/base/savers.rb +23 -21
  46. data/lib/fortnox/api/repositories/customer.rb +6 -4
  47. data/lib/fortnox/api/repositories/invoice.rb +6 -4
  48. data/lib/fortnox/api/repositories/order.rb +6 -4
  49. data/lib/fortnox/api/repositories/project.rb +6 -4
  50. data/lib/fortnox/api/repositories/terms_of_payments.rb +17 -0
  51. data/lib/fortnox/api/repositories/unit.rb +17 -0
  52. data/lib/fortnox/api/request_handling.rb +12 -12
  53. data/lib/fortnox/api/types.rb +62 -11
  54. data/lib/fortnox/api/types/default_delivery_types.rb +5 -3
  55. data/lib/fortnox/api/types/default_templates.rb +3 -1
  56. data/lib/fortnox/api/types/defaulted.rb +2 -2
  57. data/lib/fortnox/api/types/document_row.rb +41 -42
  58. data/lib/fortnox/api/types/edi_information.rb +10 -8
  59. data/lib/fortnox/api/types/email_information.rb +10 -8
  60. data/lib/fortnox/api/types/enums.rb +60 -47
  61. data/lib/fortnox/api/types/invoice_row.rb +8 -8
  62. data/lib/fortnox/api/types/model.rb +14 -10
  63. data/lib/fortnox/api/types/nullable.rb +7 -7
  64. data/lib/fortnox/api/types/order_row.rb +5 -5
  65. data/lib/fortnox/api/types/required.rb +5 -5
  66. data/lib/fortnox/api/types/sized.rb +14 -6
  67. data/lib/fortnox/api/version.rb +3 -1
  68. data/spec/fortnox/api/mappers/article_spec.rb +3 -1
  69. data/spec/fortnox/api/mappers/base/from_json_spec.rb +15 -13
  70. data/spec/fortnox/api/mappers/base/to_json_spec.rb +4 -3
  71. data/spec/fortnox/api/mappers/base_spec.rb +40 -35
  72. data/spec/fortnox/api/mappers/contexts/json_conversion.rb +12 -11
  73. data/spec/fortnox/api/mappers/customer_spec.rb +3 -1
  74. data/spec/fortnox/api/mappers/default_delivery_types_spec.rb +3 -1
  75. data/spec/fortnox/api/mappers/edi_information_spec.rb +4 -2
  76. data/spec/fortnox/api/mappers/email_information_spec.rb +4 -2
  77. data/spec/fortnox/api/mappers/examples/mapper.rb +17 -9
  78. data/spec/fortnox/api/mappers/invoice_row_spec.rb +8 -3
  79. data/spec/fortnox/api/mappers/invoice_spec.rb +4 -1
  80. data/spec/fortnox/api/mappers/order_row_spec.rb +9 -2
  81. data/spec/fortnox/api/mappers/order_spec.rb +4 -1
  82. data/spec/fortnox/api/mappers/project_spec.rb +3 -1
  83. data/spec/fortnox/api/mappers/terms_of_payments_spec.rb +16 -0
  84. data/spec/fortnox/api/mappers/unit_spec.rb +57 -0
  85. data/spec/fortnox/api/models/article_spec.rb +2 -0
  86. data/spec/fortnox/api/models/base_spec.rb +46 -38
  87. data/spec/fortnox/api/models/customer_spec.rb +2 -0
  88. data/spec/fortnox/api/models/examples/document_base.rb +5 -3
  89. data/spec/fortnox/api/models/examples/model.rb +12 -9
  90. data/spec/fortnox/api/models/invoice_spec.rb +2 -0
  91. data/spec/fortnox/api/models/order_spec.rb +2 -0
  92. data/spec/fortnox/api/models/project_spec.rb +2 -0
  93. data/spec/fortnox/api/models/terms_of_payments_spec.rb +9 -0
  94. data/spec/fortnox/api/models/unit_spec.rb +31 -0
  95. data/spec/fortnox/api/repositories/article_spec.rb +7 -5
  96. data/spec/fortnox/api/repositories/base_spec.rb +121 -100
  97. data/spec/fortnox/api/repositories/customer_spec.rb +7 -5
  98. data/spec/fortnox/api/repositories/examples/all.rb +5 -4
  99. data/spec/fortnox/api/repositories/examples/find.rb +50 -41
  100. data/spec/fortnox/api/repositories/examples/only.rb +14 -13
  101. data/spec/fortnox/api/repositories/examples/save.rb +23 -29
  102. data/spec/fortnox/api/repositories/examples/save_with_nested_model.rb +11 -11
  103. data/spec/fortnox/api/repositories/examples/save_with_specially_named_attribute.rb +11 -10
  104. data/spec/fortnox/api/repositories/examples/search.rb +15 -15
  105. data/spec/fortnox/api/repositories/invoice_spec.rb +8 -6
  106. data/spec/fortnox/api/repositories/order_spec.rb +8 -6
  107. data/spec/fortnox/api/repositories/project_spec.rb +7 -5
  108. data/spec/fortnox/api/repositories/terms_of_payments_spec.rb +30 -0
  109. data/spec/fortnox/api/repositories/unit_spec.rb +34 -0
  110. data/spec/fortnox/api/types/account_number_spec.rb +12 -9
  111. data/spec/fortnox/api/types/default_delivery_types_spec.rb +6 -4
  112. data/spec/fortnox/api/types/edi_information_spec.rb +9 -7
  113. data/spec/fortnox/api/types/email_information_spec.rb +8 -6
  114. data/spec/fortnox/api/types/email_spec.rb +27 -14
  115. data/spec/fortnox/api/types/enums_spec.rb +3 -1
  116. data/spec/fortnox/api/types/examples/document_row.rb +10 -8
  117. data/spec/fortnox/api/types/examples/enum.rb +29 -22
  118. data/spec/fortnox/api/types/examples/types.rb +8 -4
  119. data/spec/fortnox/api/types/housework_types_spec.rb +68 -0
  120. data/spec/fortnox/api/types/invoice_row_spec.rb +3 -1
  121. data/spec/fortnox/api/types/model_spec.rb +12 -9
  122. data/spec/fortnox/api/types/nullable_spec.rb +8 -6
  123. data/spec/fortnox/api/types/order_row_spec.rb +4 -2
  124. data/spec/fortnox/api/types/required_spec.rb +4 -2
  125. data/spec/fortnox/api/types/sized_spec.rb +18 -16
  126. data/spec/fortnox/api_spec.rb +45 -43
  127. data/spec/spec_helper.rb +9 -6
  128. data/spec/support/helpers.rb +3 -1
  129. data/spec/support/helpers/configuration_helper.rb +2 -0
  130. data/spec/support/helpers/dummy_class_helper.rb +7 -8
  131. data/spec/support/helpers/repository_helper.rb +2 -0
  132. data/spec/support/helpers/when_performing_helper.rb +3 -1
  133. data/spec/support/matchers.rb +2 -0
  134. data/spec/support/matchers/type.rb +3 -1
  135. data/spec/support/matchers/type/attribute_matcher.rb +15 -14
  136. data/spec/support/matchers/type/enum_matcher.rb +9 -7
  137. data/spec/support/matchers/type/have_account_number_matcher.rb +11 -9
  138. data/spec/support/matchers/type/have_country_code_matcher.rb +6 -4
  139. data/spec/support/matchers/type/have_currency_matcher.rb +4 -2
  140. data/spec/support/matchers/type/have_customer_type_matcher.rb +6 -4
  141. data/spec/support/matchers/type/have_default_delivery_type_matcher.rb +4 -2
  142. data/spec/support/matchers/type/have_discount_type_matcher.rb +4 -2
  143. data/spec/support/matchers/type/have_email_matcher.rb +11 -9
  144. data/spec/support/matchers/type/have_housework_type_matcher.rb +9 -0
  145. data/spec/support/matchers/type/have_nullable_date_matcher.rb +29 -29
  146. data/spec/support/matchers/type/have_nullable_matcher.rb +23 -21
  147. data/spec/support/matchers/type/have_nullable_string_matcher.rb +30 -32
  148. data/spec/support/matchers/type/have_sized_float_matcher.rb +4 -2
  149. data/spec/support/matchers/type/have_sized_integer_matcher.rb +4 -2
  150. data/spec/support/matchers/type/have_sized_string_matcher.rb +16 -15
  151. data/spec/support/matchers/type/have_vat_type_matcher.rb +4 -2
  152. data/spec/support/matchers/type/numeric_matcher.rb +25 -23
  153. data/spec/support/matchers/type/require_attribute_matcher.rb +36 -37
  154. data/spec/support/matchers/type/type_matcher.rb +18 -16
  155. data/spec/support/vcr_setup.rb +2 -0
  156. data/spec/vcr_cassettes/orders/{house_work_type_babysitting.yml → housework_type_babysitting.yml} +9 -10
  157. data/spec/vcr_cassettes/orders/{house_work_type_cleaning.yml → housework_type_cleaning.yml} +9 -10
  158. data/spec/vcr_cassettes/orders/{house_work_type_construction.yml → housework_type_construction.yml} +9 -10
  159. data/spec/vcr_cassettes/orders/{house_work_type_cooking.yml → housework_type_cooking.yml} +7 -7
  160. data/spec/vcr_cassettes/orders/{house_work_type_electricity.yml → housework_type_electricity.yml} +9 -10
  161. data/spec/vcr_cassettes/orders/{house_work_type_gardening.yml → housework_type_gardening.yml} +9 -10
  162. data/spec/vcr_cassettes/orders/{house_work_type_glassmetalwork.yml → housework_type_glassmetalwork.yml} +9 -10
  163. data/spec/vcr_cassettes/orders/{house_work_type_grounddrainagework.yml → housework_type_grounddrainagework.yml} +9 -10
  164. data/spec/vcr_cassettes/orders/{house_work_type_hvac.yml → housework_type_hvac.yml} +9 -10
  165. data/spec/vcr_cassettes/orders/{house_work_type_masonry.yml → housework_type_masonry.yml} +9 -10
  166. data/spec/vcr_cassettes/orders/{house_work_type_othercare.yml → housework_type_othercare.yml} +9 -10
  167. data/spec/vcr_cassettes/orders/{house_work_type_othercosts.yml → housework_type_othercosts.yml} +9 -10
  168. data/spec/vcr_cassettes/orders/{house_work_type_paintingwallpapering.yml → housework_type_paintingwallpapering.yml} +9 -10
  169. data/spec/vcr_cassettes/orders/{house_work_type_snowplowing.yml → housework_type_snowplowing.yml} +9 -10
  170. data/spec/vcr_cassettes/orders/{house_work_type_textileclothing.yml → housework_type_textileclothing.yml} +9 -10
  171. data/spec/vcr_cassettes/orders/{house_work_type_tutoring.yml → housework_type_tutoring.yml} +7 -7
  172. data/spec/vcr_cassettes/termsofpayments/all.yml +51 -0
  173. data/spec/vcr_cassettes/termsofpayments/find_failure.yml +45 -0
  174. data/spec/vcr_cassettes/termsofpayments/find_id_1.yml +46 -0
  175. data/spec/vcr_cassettes/termsofpayments/find_new.yml +46 -0
  176. data/spec/vcr_cassettes/termsofpayments/save_new.yml +45 -0
  177. data/spec/vcr_cassettes/termsofpayments/save_old.yml +46 -0
  178. data/spec/vcr_cassettes/units/all.yml +48 -0
  179. data/spec/vcr_cassettes/units/find_failure.yml +45 -0
  180. data/spec/vcr_cassettes/units/find_id_1.yml +46 -0
  181. data/spec/vcr_cassettes/units/find_new.yml +48 -0
  182. data/spec/vcr_cassettes/units/save_new.yml +47 -0
  183. data/spec/vcr_cassettes/units/save_old.yml +48 -0
  184. data/spec/vcr_cassettes/units/save_with_specially_named_attribute.yml +47 -0
  185. metadata +127 -88
  186. data/docs/account.rb +0 -59
  187. data/docs/extraction_script.js +0 -23
  188. data/docs/generation_script.rb +0 -43
  189. data/docs/json/account.json +0 -77
  190. data/lib/fortnox/api/models/document_base.rb +0 -189
  191. data/spec/fortnox/api/types/house_work_types_spec.rb +0 -64
  192. data/spec/support/matchers/type/have_house_work_type_matcher.rb +0 -7
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'fortnox/api'
3
5
  require 'fortnox/api/mappers'
@@ -11,9 +13,9 @@ require 'fortnox/api/repositories/examples/search'
11
13
  describe Fortnox::API::Repository::Customer, order: :defined, integration: true do
12
14
  include Helpers::Configuration
13
15
 
14
- before{ set_api_test_configuration }
16
+ before { set_api_test_configuration }
15
17
 
16
- subject(:repository){ described_class.new }
18
+ subject(:repository) { described_class.new }
17
19
 
18
20
  include_examples '.save', :name
19
21
 
@@ -28,10 +30,10 @@ describe Fortnox::API::Repository::Customer, order: :defined, integration: true
28
30
  include_examples '.all', 100
29
31
 
30
32
  include_examples '.find', '1' do
31
- let( :find_by_hash_failure ){ { city: 'Not Found' } }
32
- let( :single_param_find_by_hash ){ { find_hash: { city: 'New York' }, matches: 2 } }
33
+ let(:find_by_hash_failure) { { city: 'Not Found' } }
34
+ let(:single_param_find_by_hash) { { find_hash: { city: 'New York' }, matches: 2 } }
33
35
 
34
- let( :multi_param_find_by_hash ) do
36
+ let(:multi_param_find_by_hash) do
35
37
  { find_hash: { city: 'New York', zipcode: '10001' }, matches: 1 }
36
38
  end
37
39
  end
@@ -1,16 +1,17 @@
1
- # rubocop:disable RSpec/DescribeClass
1
+ # frozen_string_literal: true
2
+
2
3
  RSpec.shared_examples_for '.all' do |count|
3
4
  describe '.all' do
4
5
  let(:response) do
5
- VCR.use_cassette( "#{ vcr_dir }/all" ){ subject.all }
6
+ VCR.use_cassette("#{vcr_dir}/all") { subject.all }
6
7
  end
7
8
 
8
9
  specify 'returns correct number of records' do
9
- expect( response.size ).to be count
10
+ expect(response.size).to be count
10
11
  end
11
12
 
12
13
  specify 'returns correct class' do
13
- expect( response.first.class ).to be described_class::MODEL
14
+ expect(response.first.class).to be described_class::MODEL
14
15
  end
15
16
  end
16
17
  end
@@ -1,78 +1,87 @@
1
- shared_examples_for '.find' do |searched_entity_id|
1
+ # frozen_string_literal: true
2
+
3
+ shared_examples_for '.find' do |searched_entity_id, find_by_hash: true|
2
4
  describe '.find by id' do
3
- let( :returned_object ) do
4
- VCR.use_cassette( "#{ vcr_dir }/find_id_1" ){ repository.find( searched_entity_id ) }
5
+ let(:returned_object) do
6
+ VCR.use_cassette("#{vcr_dir}/find_id_1") { repository.find(searched_entity_id) }
5
7
  end
6
8
 
7
9
  context 'when found' do
8
10
  describe 'returned object' do
9
- subject{ returned_object }
10
- it{ is_expected.to be_saved }
11
- it{ is_expected.not_to be_new }
11
+ subject { returned_object }
12
+
13
+ it { is_expected.to be_saved }
14
+ it { is_expected.not_to be_new }
12
15
  end
13
16
 
14
17
  describe 'class' do
15
- subject{ returned_object.class }
16
- it{ is_expected.to be described_class::MODEL }
18
+ subject { returned_object.class }
19
+
20
+ it { is_expected.to be described_class::MODEL }
17
21
  end
18
22
 
19
23
  describe 'unique id' do
20
- subject{ returned_object.unique_id }
21
- it{ is_expected.to eq searched_entity_id }
24
+ subject { returned_object.unique_id }
25
+
26
+ it { is_expected.to eq searched_entity_id }
22
27
  end
23
28
  end
24
29
 
25
30
  context 'when not found' do
26
- subject{ find_failure }
31
+ subject { find_failure }
27
32
 
28
- let( :not_found_id ){ '123456789' }
29
- let( :find_failure ) do
33
+ let(:not_found_id) { '123456789' }
34
+ let(:find_failure) do
30
35
  when_performing do
31
- VCR.use_cassette( "#{ vcr_dir }/find_failure" ){ repository.find( not_found_id ) }
36
+ VCR.use_cassette("#{vcr_dir}/find_failure") { repository.find(not_found_id) }
32
37
  end
33
38
  end
34
39
 
35
- it{ is_expected.to raise_error( Fortnox::API::RemoteServerError, /Kan inte hitta /) }
40
+ it { is_expected.to raise_error(Fortnox::API::RemoteServerError, /Kan inte hitta /) }
36
41
  end
37
42
  end
38
43
 
39
- describe '.find by hash' do
40
- context 'when found' do
41
- let( :returned_array ) do
42
- VCR.use_cassette( "#{ vcr_dir }/#{ cassette }" ){ repository.find( find_hash ) }
43
- end
44
+ if find_by_hash
45
+ describe '.find by hash' do
46
+ context 'when found' do
47
+ let(:returned_array) do
48
+ VCR.use_cassette("#{vcr_dir}/#{cassette}") { repository.find(find_hash) }
49
+ end
44
50
 
45
- context 'with single parameter' do
46
- let( :cassette ){ 'single_param_find_by_hash' }
47
- let( :find_hash ){ single_param_find_by_hash[:find_hash] }
51
+ context 'with single parameter' do
52
+ let(:cassette) { 'single_param_find_by_hash' }
53
+ let(:find_hash) { single_param_find_by_hash[:find_hash] }
48
54
 
49
- describe 'returned array size' do
50
- subject{ returned_array.size }
51
- it{ is_expected.to eq single_param_find_by_hash[:matches] }
55
+ describe 'returned array size' do
56
+ subject { returned_array.size }
57
+
58
+ it { is_expected.to eq single_param_find_by_hash[:matches] }
59
+ end
52
60
  end
53
- end
54
61
 
55
- context 'with multiple parameters' do
56
- let( :cassette ){ 'multi_param_find_by_hash' }
57
- let( :find_hash ){ multi_param_find_by_hash[:find_hash] }
62
+ context 'with multiple parameters' do
63
+ let(:cassette) { 'multi_param_find_by_hash' }
64
+ let(:find_hash) { multi_param_find_by_hash[:find_hash] }
58
65
 
59
- describe 'returned array size' do
60
- subject{ returned_array.size }
61
- it{ is_expected.to eq multi_param_find_by_hash[:matches] }
66
+ describe 'returned array size' do
67
+ subject { returned_array.size }
68
+
69
+ it { is_expected.to eq multi_param_find_by_hash[:matches] }
70
+ end
62
71
  end
63
72
  end
64
- end
65
73
 
66
- context 'when not found' do
67
- subject{ find_failure }
74
+ context 'when not found' do
75
+ subject { find_failure }
68
76
 
69
- let( :find_failure ) do
70
- VCR.use_cassette( "#{ vcr_dir }/find_by_hash_failure" ) do
71
- repository.find( find_by_hash_failure )
77
+ let(:find_failure) do
78
+ VCR.use_cassette("#{vcr_dir}/find_by_hash_failure") do
79
+ repository.find(find_by_hash_failure)
80
+ end
72
81
  end
73
- end
74
82
 
75
- it{ is_expected.to eq [] }
83
+ it { is_expected.to eq [] }
84
+ end
76
85
  end
77
86
  end
78
87
  end
@@ -1,41 +1,42 @@
1
- # rubocop:disable RSpec/DescribeClass
1
+ # frozen_string_literal: true
2
+
2
3
  shared_examples_for '.only' do |matching_filter, expected_matches, missing_filter: nil|
3
4
  describe '.only' do
4
5
  def repository_only(repository, vcr_cassette, filter)
5
- VCR.use_cassette( "#{ vcr_dir }/#{ vcr_cassette }" ) do
6
- repository.only( filter )
6
+ VCR.use_cassette("#{vcr_dir}/#{vcr_cassette}") do
7
+ repository.only(filter)
7
8
  end
8
9
  end
9
10
 
10
11
  shared_examples '.only response' do |vcr_cassette, expected_entries|
11
- subject{ repository_only( repository, vcr_cassette, filter ) }
12
+ subject { repository_only(repository, vcr_cassette, filter) }
12
13
 
13
- it{ is_expected.to be_instance_of( Array ) }
14
- it{ is_expected.to have(expected_entries).entries }
14
+ it { is_expected.to be_instance_of(Array) }
15
+ it { is_expected.to have(expected_entries).entries }
15
16
  end
16
17
 
17
18
  unless missing_filter.nil?
18
- context "with no matches" do
19
+ context 'with no matches' do
19
20
  include_examples '.only response', 'filter_miss', 0 do
20
- let(:filter){ missing_filter }
21
+ let(:filter) { missing_filter }
21
22
  end
22
23
  end
23
24
  end
24
25
 
25
- context "with matches" do
26
+ context 'with matches' do
26
27
  include_examples '.only response', 'filter_hit', expected_matches do
27
- let(:filter){ matching_filter }
28
+ let(:filter) { matching_filter }
28
29
  end
29
30
  end
30
31
 
31
- context "with invalid filter" do
32
+ context 'with invalid filter' do
32
33
  subject do
33
34
  when_performing do
34
- repository_only( repository, 'filter_invalid', 'doesntexist' )
35
+ repository_only(repository, 'filter_invalid', 'doesntexist')
35
36
  end
36
37
  end
37
38
 
38
- it{ is_expected.to raise_error( Fortnox::API::RemoteServerError, /ogiltigt filter/ ) }
39
+ it { is_expected.to raise_error(Fortnox::API::RemoteServerError, /ogiltigt filter/) }
39
40
  end
40
41
  end
41
42
  end
@@ -1,65 +1,59 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #######################################
2
4
  # SPEC IS DEPENDENT ON DEFINED ORDER!
3
5
  #######################################
4
6
  #
5
7
  # Assumes that attribute is a string attribute without restrictions.
6
-
7
- # rubocop:disable RSpec/DescribeClass
8
8
  shared_examples_for '.save' do |attribute, additional_attrs: {}|
9
9
  describe '.save' do
10
- let( :new_hash ){ additional_attrs.merge( attribute => value ) }
11
- let( :new_model ){ described_class::MODEL.new( new_hash ) }
12
- let( :save_new ){ VCR.use_cassette( "#{ vcr_dir }/save_new" ){ repository.save( new_model ) } }
13
- let( :entity_wrapper ){ repository.mapper.class::JSON_ENTITY_WRAPPER }
14
- let( :value ){ 'A value' }
10
+ let(:new_hash) { additional_attrs.merge(attribute => value) }
11
+ let(:new_model) { described_class::MODEL.new(new_hash) }
12
+ let(:save_new) { VCR.use_cassette("#{vcr_dir}/save_new") { repository.save(new_model) } }
13
+ let(:entity_wrapper) { repository.mapper.class::JSON_ENTITY_WRAPPER }
14
+ let(:value) { 'A value' }
15
15
 
16
16
  shared_examples_for 'save' do
17
17
  before do
18
18
  if model.saved?
19
19
  message = 'Test trying to save model, but already marked as saved!'
20
- message << " Model: #{ model.inspect }"
21
- fail(message)
20
+ message << " Model: #{model.inspect}"
21
+ raise(message)
22
22
  end
23
23
  end
24
24
 
25
- specify "includes correct #{ attribute.inspect }" do
25
+ specify "includes correct #{attribute.inspect}" do
26
26
  saved_entity = send_request
27
- expect( saved_entity.send(attribute) ).to eql( value )
27
+ expect(saved_entity.send(attribute)).to eql(value)
28
28
  end
29
29
  end
30
30
 
31
31
  describe 'new' do
32
32
  context 'when not saved' do
33
33
  include_examples 'save' do
34
- let( :model ){ new_model }
35
- let( :send_request ){ save_new }
34
+ let(:model) { new_model }
35
+ let(:send_request) { save_new }
36
36
  end
37
37
  end
38
38
 
39
- context "saved #{ described_class::MODEL }" do
40
- let( :hash ){ { unsaved: false }.merge(new_hash) }
41
- let( :model ){ described_class::MODEL.new( hash ) }
42
-
43
- before do
44
- # Should not make an API request in test!
45
- expect( repository ).not_to receive( :save_new )
46
- expect( repository ).not_to receive( :update_existing )
47
- end
39
+ context "saved #{described_class::MODEL}" do
40
+ let(:hash) { { unsaved: false }.merge(new_hash) }
41
+ let(:model) { described_class::MODEL.new(hash) }
48
42
 
49
- specify{ expect( repository.save( model )).to be( true ) }
43
+ specify { expect(repository.save(model)).to be(true) }
50
44
  end
51
45
  end
52
46
 
53
47
  describe 'old (update existing)' do
54
48
  include_examples 'save' do
55
- let( :value ){ "Updated #{ attribute }" }
56
- let( :model ) do
49
+ let(:value) { "Updated #{attribute}" }
50
+ let(:model) do
57
51
  new_id = save_new.unique_id
58
- new_record = VCR.use_cassette( "#{ vcr_dir }/find_new" ){ repository.find( new_id ) }
59
- new_record.update( attribute => value )
52
+ new_record = VCR.use_cassette("#{vcr_dir}/find_new") { repository.find(new_id) }
53
+ new_record.update(attribute => value)
60
54
  end
61
- let( :send_request ) do
62
- VCR.use_cassette( "#{ vcr_dir }/save_old" ){ repository.save( model ) }
55
+ let(:send_request) do
56
+ VCR.use_cassette("#{vcr_dir}/save_old") { repository.save(model) }
63
57
  end
64
58
  end
65
59
  end
@@ -1,26 +1,26 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # TODO: This will not work until we solve issue #62.
2
4
  # Until then, these tests are pending.
3
-
4
- # rubocop:disable RSpec/DescribeClass
5
5
  shared_examples_for '.save with nested model' do |required_hash, nested_model_key, nested_model_hash, nested_entity|
6
6
  describe '.save with nested model' do
7
- let( :repository ){ described_class.new }
8
- let( :new_hash ) do
9
- required_hash.merge( nested_model_key => nested_entity )
7
+ let(:repository) { described_class.new }
8
+ let(:new_hash) do
9
+ required_hash.merge(nested_model_key => nested_entity)
10
10
  end
11
- let( :response ) do
12
- VCR.use_cassette( "#{ vcr_dir }/save_with_nested_model" ) do
13
- model = described_class::MODEL.new( new_hash )
14
- repository.save( model )
11
+ let(:response) do
12
+ VCR.use_cassette("#{vcr_dir}/save_with_nested_model") do
13
+ model = described_class::MODEL.new(new_hash)
14
+ repository.save(model)
15
15
  end
16
16
  end
17
17
 
18
18
  it 'does not raise any errors' do
19
- expect{ response }.not_to raise_error
19
+ expect { response }.not_to raise_error
20
20
  end
21
21
 
22
22
  describe 'returned entity\'s nested model' do
23
- subject(:returned_nested_model){ response.send(nested_model_key).first }
23
+ subject(:returned_nested_model) { response.send(nested_model_key).first }
24
24
 
25
25
  it 'has the wanted attributes' do
26
26
  nested_model_hash.each do |attribute, value|
@@ -1,26 +1,27 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Test saving model with attributes that has specially names that needs to be mapped.
2
4
  #
3
5
  # NOTE: VCR cassette must be discarded when repositories are updated to reflect
4
6
  # the changes!
5
-
6
- # rubocop:disable RSpec/DescribeClass
7
7
  shared_examples_for '.save with specially named attribute' do |required_hash, attribute, value|
8
8
  describe '.save' do
9
9
  context 'with specially named attribute' do
10
- subject{ ->{ save_model } }
10
+ subject { -> { save_model } }
11
11
 
12
- let( :new_model ){ described_class::MODEL.new( required_hash.merge(attribute => value) ) }
13
- let( :save_model )do
14
- VCR.use_cassette( "#{ vcr_dir }/save_with_specially_named_attribute" ) do
15
- repository.save( new_model )
12
+ let(:new_model) { described_class::MODEL.new(required_hash.merge(attribute => value)) }
13
+ let(:save_model) do
14
+ VCR.use_cassette("#{vcr_dir}/save_with_specially_named_attribute") do
15
+ repository.save(new_model)
16
16
  end
17
17
  end
18
18
 
19
- it{ is_expected.not_to raise_error }
19
+ it { is_expected.not_to raise_error }
20
20
 
21
21
  describe 'response' do
22
- subject{ save_model.send(attribute) }
23
- it{ is_expected.to eq(value) }
22
+ subject { save_model.send(attribute) }
23
+
24
+ it { is_expected.to eq(value) }
24
25
  end
25
26
  end
26
27
  end
@@ -1,40 +1,40 @@
1
- # rubocop:disable RSpec/DescribeClass
1
+ # frozen_string_literal: true
2
+
2
3
  shared_examples_for '.search' do |attribute_hash_key_name, value, matches|
3
4
  describe '.search' do
4
-
5
5
  describe 'search' do
6
- context "with no matches" do
6
+ context 'with no matches' do
7
7
  subject do
8
- VCR.use_cassette( "#{ vcr_dir }/search_miss" ) do
9
- repository.search( attribute_hash_key_name => 'nothing' )
8
+ VCR.use_cassette("#{vcr_dir}/search_miss") do
9
+ repository.search(attribute_hash_key_name => 'nothing')
10
10
  end
11
11
  end
12
12
 
13
- it{ is_expected.to be_instance_of( Array ) }
14
- it{ is_expected.to have(0).entries }
13
+ it { is_expected.to be_instance_of(Array) }
14
+ it { is_expected.to have(0).entries }
15
15
  end
16
16
 
17
- context "with #{ matches } match(es)" do
17
+ context "with #{matches} match(es)" do
18
18
  subject do
19
- VCR.use_cassette( "#{ vcr_dir }/search_by_name" ) do
20
- repository.search( attribute_hash_key_name => value )
19
+ VCR.use_cassette("#{vcr_dir}/search_by_name") do
20
+ repository.search(attribute_hash_key_name => value)
21
21
  end
22
22
  end
23
23
 
24
- it{ is_expected.to be_instance_of( Array) }
25
- it{ is_expected.to have(matches).entries }
24
+ it { is_expected.to be_instance_of(Array) }
25
+ it { is_expected.to have(matches).entries }
26
26
  end
27
27
 
28
28
  context 'with special characters' do
29
29
  subject do
30
30
  when_performing do
31
- VCR.use_cassette( "#{ vcr_dir }/search_with_special_char") do
32
- repository.search( attribute_hash_key_name => 'special char å' )
31
+ VCR.use_cassette("#{vcr_dir}/search_with_special_char") do
32
+ repository.search(attribute_hash_key_name => 'special char å')
33
33
  end
34
34
  end
35
35
  end
36
36
 
37
- it{ is_expected.not_to raise_error }
37
+ it { is_expected.not_to raise_error }
38
38
  end
39
39
  end
40
40
  end