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.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.rubocop.yml +9 -1104
- data/.travis.yml +22 -2
- data/Gemfile +3 -1
- data/Guardfile +4 -2
- data/README.md +2 -2
- data/Rakefile +3 -1
- data/bin/console +17 -3
- data/fortnox-api.gemspec +32 -27
- data/lib/fortnox/api.rb +17 -16
- data/lib/fortnox/api/circular_queue.rb +13 -7
- data/lib/fortnox/api/mappers.rb +29 -25
- data/lib/fortnox/api/mappers/article.rb +7 -6
- data/lib/fortnox/api/mappers/base.rb +18 -16
- data/lib/fortnox/api/mappers/base/from_json.rb +37 -30
- data/lib/fortnox/api/mappers/base/to_json.rb +39 -37
- data/lib/fortnox/api/mappers/customer.rb +7 -7
- data/lib/fortnox/api/mappers/default_delivery_types.rb +4 -2
- data/lib/fortnox/api/mappers/default_templates.rb +5 -4
- data/lib/fortnox/api/mappers/edi_information.rb +5 -4
- data/lib/fortnox/api/mappers/email_information.rb +5 -4
- data/lib/fortnox/api/mappers/invoice.rb +10 -8
- data/lib/fortnox/api/mappers/invoice_row.rb +12 -7
- data/lib/fortnox/api/mappers/order.rb +10 -7
- data/lib/fortnox/api/mappers/order_row.rb +13 -6
- data/lib/fortnox/api/mappers/project.rb +6 -4
- data/lib/fortnox/api/mappers/terms_of_payments.rb +17 -0
- data/lib/fortnox/api/mappers/unit.rb +17 -0
- data/lib/fortnox/api/models.rb +9 -5
- data/lib/fortnox/api/models/article.rb +68 -67
- data/lib/fortnox/api/models/base.rb +52 -36
- data/lib/fortnox/api/models/customer.rb +95 -94
- data/lib/fortnox/api/models/document.rb +186 -0
- data/lib/fortnox/api/models/invoice.rb +44 -44
- data/lib/fortnox/api/models/label.rb +5 -3
- data/lib/fortnox/api/models/order.rb +8 -8
- data/lib/fortnox/api/models/project.rb +10 -8
- data/lib/fortnox/api/models/terms_of_payments.rb +28 -0
- data/lib/fortnox/api/models/unit.rb +24 -0
- data/lib/fortnox/api/repositories.rb +9 -5
- data/lib/fortnox/api/repositories/article.rb +6 -4
- data/lib/fortnox/api/repositories/base.rb +49 -46
- data/lib/fortnox/api/repositories/base/loaders.rb +32 -36
- data/lib/fortnox/api/repositories/base/savers.rb +23 -21
- data/lib/fortnox/api/repositories/customer.rb +6 -4
- data/lib/fortnox/api/repositories/invoice.rb +6 -4
- data/lib/fortnox/api/repositories/order.rb +6 -4
- data/lib/fortnox/api/repositories/project.rb +6 -4
- data/lib/fortnox/api/repositories/terms_of_payments.rb +17 -0
- data/lib/fortnox/api/repositories/unit.rb +17 -0
- data/lib/fortnox/api/request_handling.rb +12 -12
- data/lib/fortnox/api/types.rb +62 -11
- data/lib/fortnox/api/types/default_delivery_types.rb +5 -3
- data/lib/fortnox/api/types/default_templates.rb +3 -1
- data/lib/fortnox/api/types/defaulted.rb +2 -2
- data/lib/fortnox/api/types/document_row.rb +41 -42
- data/lib/fortnox/api/types/edi_information.rb +10 -8
- data/lib/fortnox/api/types/email_information.rb +10 -8
- data/lib/fortnox/api/types/enums.rb +60 -47
- data/lib/fortnox/api/types/invoice_row.rb +8 -8
- data/lib/fortnox/api/types/model.rb +14 -10
- data/lib/fortnox/api/types/nullable.rb +7 -7
- data/lib/fortnox/api/types/order_row.rb +5 -5
- data/lib/fortnox/api/types/required.rb +5 -5
- data/lib/fortnox/api/types/sized.rb +14 -6
- data/lib/fortnox/api/version.rb +3 -1
- data/spec/fortnox/api/mappers/article_spec.rb +3 -1
- data/spec/fortnox/api/mappers/base/from_json_spec.rb +15 -13
- data/spec/fortnox/api/mappers/base/to_json_spec.rb +4 -3
- data/spec/fortnox/api/mappers/base_spec.rb +40 -35
- data/spec/fortnox/api/mappers/contexts/json_conversion.rb +12 -11
- data/spec/fortnox/api/mappers/customer_spec.rb +3 -1
- data/spec/fortnox/api/mappers/default_delivery_types_spec.rb +3 -1
- data/spec/fortnox/api/mappers/edi_information_spec.rb +4 -2
- data/spec/fortnox/api/mappers/email_information_spec.rb +4 -2
- data/spec/fortnox/api/mappers/examples/mapper.rb +17 -9
- data/spec/fortnox/api/mappers/invoice_row_spec.rb +8 -3
- data/spec/fortnox/api/mappers/invoice_spec.rb +4 -1
- data/spec/fortnox/api/mappers/order_row_spec.rb +9 -2
- data/spec/fortnox/api/mappers/order_spec.rb +4 -1
- data/spec/fortnox/api/mappers/project_spec.rb +3 -1
- data/spec/fortnox/api/mappers/terms_of_payments_spec.rb +16 -0
- data/spec/fortnox/api/mappers/unit_spec.rb +57 -0
- data/spec/fortnox/api/models/article_spec.rb +2 -0
- data/spec/fortnox/api/models/base_spec.rb +46 -38
- data/spec/fortnox/api/models/customer_spec.rb +2 -0
- data/spec/fortnox/api/models/examples/document_base.rb +5 -3
- data/spec/fortnox/api/models/examples/model.rb +12 -9
- data/spec/fortnox/api/models/invoice_spec.rb +2 -0
- data/spec/fortnox/api/models/order_spec.rb +2 -0
- data/spec/fortnox/api/models/project_spec.rb +2 -0
- data/spec/fortnox/api/models/terms_of_payments_spec.rb +9 -0
- data/spec/fortnox/api/models/unit_spec.rb +31 -0
- data/spec/fortnox/api/repositories/article_spec.rb +7 -5
- data/spec/fortnox/api/repositories/base_spec.rb +121 -100
- data/spec/fortnox/api/repositories/customer_spec.rb +7 -5
- data/spec/fortnox/api/repositories/examples/all.rb +5 -4
- data/spec/fortnox/api/repositories/examples/find.rb +50 -41
- data/spec/fortnox/api/repositories/examples/only.rb +14 -13
- data/spec/fortnox/api/repositories/examples/save.rb +23 -29
- data/spec/fortnox/api/repositories/examples/save_with_nested_model.rb +11 -11
- data/spec/fortnox/api/repositories/examples/save_with_specially_named_attribute.rb +11 -10
- data/spec/fortnox/api/repositories/examples/search.rb +15 -15
- data/spec/fortnox/api/repositories/invoice_spec.rb +8 -6
- data/spec/fortnox/api/repositories/order_spec.rb +8 -6
- data/spec/fortnox/api/repositories/project_spec.rb +7 -5
- data/spec/fortnox/api/repositories/terms_of_payments_spec.rb +30 -0
- data/spec/fortnox/api/repositories/unit_spec.rb +34 -0
- data/spec/fortnox/api/types/account_number_spec.rb +12 -9
- data/spec/fortnox/api/types/default_delivery_types_spec.rb +6 -4
- data/spec/fortnox/api/types/edi_information_spec.rb +9 -7
- data/spec/fortnox/api/types/email_information_spec.rb +8 -6
- data/spec/fortnox/api/types/email_spec.rb +27 -14
- data/spec/fortnox/api/types/enums_spec.rb +3 -1
- data/spec/fortnox/api/types/examples/document_row.rb +10 -8
- data/spec/fortnox/api/types/examples/enum.rb +29 -22
- data/spec/fortnox/api/types/examples/types.rb +8 -4
- data/spec/fortnox/api/types/housework_types_spec.rb +68 -0
- data/spec/fortnox/api/types/invoice_row_spec.rb +3 -1
- data/spec/fortnox/api/types/model_spec.rb +12 -9
- data/spec/fortnox/api/types/nullable_spec.rb +8 -6
- data/spec/fortnox/api/types/order_row_spec.rb +4 -2
- data/spec/fortnox/api/types/required_spec.rb +4 -2
- data/spec/fortnox/api/types/sized_spec.rb +18 -16
- data/spec/fortnox/api_spec.rb +45 -43
- data/spec/spec_helper.rb +9 -6
- data/spec/support/helpers.rb +3 -1
- data/spec/support/helpers/configuration_helper.rb +2 -0
- data/spec/support/helpers/dummy_class_helper.rb +7 -8
- data/spec/support/helpers/repository_helper.rb +2 -0
- data/spec/support/helpers/when_performing_helper.rb +3 -1
- data/spec/support/matchers.rb +2 -0
- data/spec/support/matchers/type.rb +3 -1
- data/spec/support/matchers/type/attribute_matcher.rb +15 -14
- data/spec/support/matchers/type/enum_matcher.rb +9 -7
- data/spec/support/matchers/type/have_account_number_matcher.rb +11 -9
- data/spec/support/matchers/type/have_country_code_matcher.rb +6 -4
- data/spec/support/matchers/type/have_currency_matcher.rb +4 -2
- data/spec/support/matchers/type/have_customer_type_matcher.rb +6 -4
- data/spec/support/matchers/type/have_default_delivery_type_matcher.rb +4 -2
- data/spec/support/matchers/type/have_discount_type_matcher.rb +4 -2
- data/spec/support/matchers/type/have_email_matcher.rb +11 -9
- data/spec/support/matchers/type/have_housework_type_matcher.rb +9 -0
- data/spec/support/matchers/type/have_nullable_date_matcher.rb +29 -29
- data/spec/support/matchers/type/have_nullable_matcher.rb +23 -21
- data/spec/support/matchers/type/have_nullable_string_matcher.rb +30 -32
- data/spec/support/matchers/type/have_sized_float_matcher.rb +4 -2
- data/spec/support/matchers/type/have_sized_integer_matcher.rb +4 -2
- data/spec/support/matchers/type/have_sized_string_matcher.rb +16 -15
- data/spec/support/matchers/type/have_vat_type_matcher.rb +4 -2
- data/spec/support/matchers/type/numeric_matcher.rb +25 -23
- data/spec/support/matchers/type/require_attribute_matcher.rb +36 -37
- data/spec/support/matchers/type/type_matcher.rb +18 -16
- data/spec/support/vcr_setup.rb +2 -0
- data/spec/vcr_cassettes/orders/{house_work_type_babysitting.yml → housework_type_babysitting.yml} +9 -10
- data/spec/vcr_cassettes/orders/{house_work_type_cleaning.yml → housework_type_cleaning.yml} +9 -10
- data/spec/vcr_cassettes/orders/{house_work_type_construction.yml → housework_type_construction.yml} +9 -10
- data/spec/vcr_cassettes/orders/{house_work_type_cooking.yml → housework_type_cooking.yml} +7 -7
- data/spec/vcr_cassettes/orders/{house_work_type_electricity.yml → housework_type_electricity.yml} +9 -10
- data/spec/vcr_cassettes/orders/{house_work_type_gardening.yml → housework_type_gardening.yml} +9 -10
- data/spec/vcr_cassettes/orders/{house_work_type_glassmetalwork.yml → housework_type_glassmetalwork.yml} +9 -10
- data/spec/vcr_cassettes/orders/{house_work_type_grounddrainagework.yml → housework_type_grounddrainagework.yml} +9 -10
- data/spec/vcr_cassettes/orders/{house_work_type_hvac.yml → housework_type_hvac.yml} +9 -10
- data/spec/vcr_cassettes/orders/{house_work_type_masonry.yml → housework_type_masonry.yml} +9 -10
- data/spec/vcr_cassettes/orders/{house_work_type_othercare.yml → housework_type_othercare.yml} +9 -10
- data/spec/vcr_cassettes/orders/{house_work_type_othercosts.yml → housework_type_othercosts.yml} +9 -10
- data/spec/vcr_cassettes/orders/{house_work_type_paintingwallpapering.yml → housework_type_paintingwallpapering.yml} +9 -10
- data/spec/vcr_cassettes/orders/{house_work_type_snowplowing.yml → housework_type_snowplowing.yml} +9 -10
- data/spec/vcr_cassettes/orders/{house_work_type_textileclothing.yml → housework_type_textileclothing.yml} +9 -10
- data/spec/vcr_cassettes/orders/{house_work_type_tutoring.yml → housework_type_tutoring.yml} +7 -7
- data/spec/vcr_cassettes/termsofpayments/all.yml +51 -0
- data/spec/vcr_cassettes/termsofpayments/find_failure.yml +45 -0
- data/spec/vcr_cassettes/termsofpayments/find_id_1.yml +46 -0
- data/spec/vcr_cassettes/termsofpayments/find_new.yml +46 -0
- data/spec/vcr_cassettes/termsofpayments/save_new.yml +45 -0
- data/spec/vcr_cassettes/termsofpayments/save_old.yml +46 -0
- data/spec/vcr_cassettes/units/all.yml +48 -0
- data/spec/vcr_cassettes/units/find_failure.yml +45 -0
- data/spec/vcr_cassettes/units/find_id_1.yml +46 -0
- data/spec/vcr_cassettes/units/find_new.yml +48 -0
- data/spec/vcr_cassettes/units/save_new.yml +47 -0
- data/spec/vcr_cassettes/units/save_old.yml +48 -0
- data/spec/vcr_cassettes/units/save_with_specially_named_attribute.yml +47 -0
- metadata +127 -88
- data/docs/account.rb +0 -59
- data/docs/extraction_script.js +0 -23
- data/docs/generation_script.rb +0 -43
- data/docs/json/account.json +0 -77
- data/lib/fortnox/api/models/document_base.rb +0 -189
- data/spec/fortnox/api/types/house_work_types_spec.rb +0 -64
- data/spec/support/matchers/type/have_house_work_type_matcher.rb +0 -7
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
require 'fortnox/api'
|
3
5
|
require 'fortnox/api/mappers/edi_information'
|
4
6
|
require 'fortnox/api/mappers/examples/mapper'
|
5
7
|
|
6
8
|
describe Fortnox::API::Mapper::EDIInformation do
|
7
|
-
key_map = {
|
9
|
+
key_map = {
|
8
10
|
edi_global_location_number: 'EDIGlobalLocationNumber',
|
9
11
|
edi_global_location_number_delivery: 'EDIGlobalLocationNumberDelivery',
|
10
12
|
edi_invoice_extra1: 'EDIInvoiceExtra1',
|
@@ -16,6 +18,6 @@ describe Fortnox::API::Mapper::EDIInformation do
|
|
16
18
|
json_entity_collection = 'EDIInformation'
|
17
19
|
|
18
20
|
it_behaves_like 'mapper', key_map, json_entity_type, json_entity_collection do
|
19
|
-
let(:mapper){ described_class.new }
|
21
|
+
let(:mapper) { described_class.new }
|
20
22
|
end
|
21
23
|
end
|
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
require 'fortnox/api'
|
3
5
|
require 'fortnox/api/mappers/email_information'
|
4
6
|
require 'fortnox/api/mappers/examples/mapper'
|
5
7
|
|
6
8
|
describe Fortnox::API::Mapper::EmailInformation do
|
7
|
-
key_map = {
|
9
|
+
key_map = {
|
8
10
|
email_address_bcc: 'EmailAddressBCC',
|
9
11
|
email_address_cc: 'EmailAddressCC'
|
10
12
|
}
|
@@ -12,6 +14,6 @@ describe Fortnox::API::Mapper::EmailInformation do
|
|
12
14
|
json_entity_collection = 'EmailInformation'
|
13
15
|
|
14
16
|
it_behaves_like 'mapper', key_map, json_entity_type, json_entity_collection do
|
15
|
-
let(:mapper){ described_class.new }
|
17
|
+
let(:mapper) { described_class.new }
|
16
18
|
end
|
17
19
|
end
|
@@ -1,25 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# rubocop:disable Metrics/LineLength
|
1
4
|
shared_examples_for 'mapper' do |key_map, json_entity_wrapper = nil, json_collection_wrapper = nil, check_constants: true|
|
2
|
-
|
3
|
-
|
4
|
-
it{ is_expected.to respond_to(:
|
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) }
|
5
10
|
|
6
11
|
if check_constants
|
7
12
|
describe 'key_map' do
|
8
|
-
subject{ described_class::KEY_MAP }
|
9
|
-
|
13
|
+
subject { described_class::KEY_MAP }
|
14
|
+
|
15
|
+
it { is_expected.to eq(key_map) }
|
10
16
|
end
|
11
17
|
|
12
18
|
unless json_entity_wrapper.nil?
|
13
19
|
describe 'json_entity_wrapper' do
|
14
|
-
subject{ described_class::JSON_ENTITY_WRAPPER }
|
15
|
-
|
20
|
+
subject { described_class::JSON_ENTITY_WRAPPER }
|
21
|
+
|
22
|
+
it { is_expected.to eq(json_entity_wrapper) }
|
16
23
|
end
|
17
24
|
end
|
18
25
|
|
19
26
|
unless json_collection_wrapper.nil?
|
20
27
|
describe 'json_collection_wrapper' do
|
21
|
-
subject{ described_class::JSON_COLLECTION_WRAPPER }
|
22
|
-
|
28
|
+
subject { described_class::JSON_COLLECTION_WRAPPER }
|
29
|
+
|
30
|
+
it { is_expected.to eq(json_collection_wrapper) }
|
23
31
|
end
|
24
32
|
end
|
25
33
|
end
|
@@ -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/invoice_row'
|
@@ -5,15 +7,18 @@ require 'fortnox/api/mappers/examples/mapper'
|
|
5
7
|
|
6
8
|
describe Fortnox::API::Mapper::InvoiceRow do
|
7
9
|
key_map = {
|
8
|
-
|
10
|
+
housework: 'HouseWork',
|
11
|
+
housework_hours_to_report: 'HouseWorkHoursToReport',
|
12
|
+
housework_type: 'HouseWorkType',
|
9
13
|
price_excluding_vat: 'PriceExcludingVAT',
|
10
|
-
total_excluding_vat: 'TotalExcludingVAT'
|
14
|
+
total_excluding_vat: 'TotalExcludingVAT',
|
15
|
+
vat: 'VAT'
|
11
16
|
}
|
12
17
|
|
13
18
|
json_entity_type = 'InvoiceRow'
|
14
19
|
json_entity_collection = 'InvoiceRows'
|
15
20
|
|
16
21
|
it_behaves_like 'mapper', key_map, json_entity_type, json_entity_collection do
|
17
|
-
let(:mapper){ described_class.new }
|
22
|
+
let(:mapper) { described_class.new }
|
18
23
|
end
|
19
24
|
end
|
@@ -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/invoice'
|
@@ -10,6 +12,7 @@ describe Fortnox::API::Mapper::Invoice do
|
|
10
12
|
edi_information: 'EDIInformation',
|
11
13
|
eu_quarterly_report: 'EUQuarterlyReport',
|
12
14
|
freight_vat: 'FreightVAT',
|
15
|
+
housework: 'HouseWork',
|
13
16
|
ocr: 'OCR',
|
14
17
|
total_vat: 'TotalVAT',
|
15
18
|
vat_included: 'VATIncluded'
|
@@ -19,6 +22,6 @@ describe Fortnox::API::Mapper::Invoice do
|
|
19
22
|
json_entity_collection = 'Invoices'
|
20
23
|
|
21
24
|
it_behaves_like 'mapper', key_map, json_entity_type, json_entity_collection do
|
22
|
-
let(:mapper){ described_class.new }
|
25
|
+
let(:mapper) { described_class.new }
|
23
26
|
end
|
24
27
|
end
|
@@ -1,14 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
require 'fortnox/api'
|
3
5
|
require 'fortnox/api/mappers/order_row'
|
4
6
|
require 'fortnox/api/mappers/examples/mapper'
|
5
7
|
|
6
8
|
describe Fortnox::API::Mapper::OrderRow do
|
7
|
-
key_map = {
|
9
|
+
key_map = {
|
10
|
+
housework: 'HouseWork',
|
11
|
+
housework_hours_to_report: 'HouseWorkHoursToReport',
|
12
|
+
housework_type: 'HouseWorkType',
|
13
|
+
vat: 'VAT'
|
14
|
+
}
|
8
15
|
json_entity_type = 'OrderRow'
|
9
16
|
json_entity_collection = 'OrderRows'
|
10
17
|
|
11
18
|
it_behaves_like 'mapper', key_map, json_entity_type, json_entity_collection do
|
12
|
-
let(:mapper){ described_class.new }
|
19
|
+
let(:mapper) { described_class.new }
|
13
20
|
end
|
14
21
|
end
|
@@ -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/order'
|
@@ -8,6 +10,7 @@ describe Fortnox::API::Mapper::Order do
|
|
8
10
|
{
|
9
11
|
administration_fee_vat: 'AdministrationFeeVAT',
|
10
12
|
freight_vat: 'FreightVAT',
|
13
|
+
housework: 'HouseWork',
|
11
14
|
total_vat: 'TotalVAT',
|
12
15
|
vat_included: 'VATIncluded'
|
13
16
|
}
|
@@ -15,6 +18,6 @@ describe Fortnox::API::Mapper::Order do
|
|
15
18
|
json_entity_collection = 'Orders'
|
16
19
|
|
17
20
|
it_behaves_like 'mapper', key_map, json_entity_type, json_entity_collection do
|
18
|
-
let(:mapper){ described_class.new }
|
21
|
+
let(:mapper) { described_class.new }
|
19
22
|
end
|
20
23
|
end
|
@@ -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/project'
|
@@ -5,6 +7,6 @@ require 'fortnox/api/mappers/examples/mapper'
|
|
5
7
|
|
6
8
|
describe Fortnox::API::Mapper::Project do
|
7
9
|
it_behaves_like 'mapper', {}, 'Project', 'Projects' do
|
8
|
-
let(:mapper){ described_class.new }
|
10
|
+
let(:mapper) { described_class.new }
|
9
11
|
end
|
10
12
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'fortnox/api'
|
5
|
+
require 'fortnox/api/mappers/terms_of_payments'
|
6
|
+
require 'fortnox/api/mappers/examples/mapper'
|
7
|
+
|
8
|
+
describe Fortnox::API::Mapper::TermsOfPayments do
|
9
|
+
key_map = {}
|
10
|
+
json_entity_type = 'TermsOfPayment'
|
11
|
+
json_entity_collection = 'TermsOfPayments'
|
12
|
+
|
13
|
+
it_behaves_like 'mapper', key_map, json_entity_type, json_entity_collection do
|
14
|
+
let(:mapper) { described_class.new }
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'fortnox/api'
|
5
|
+
require 'fortnox/api/mappers/unit'
|
6
|
+
require 'fortnox/api/models/unit'
|
7
|
+
require 'fortnox/api/mappers/examples/mapper'
|
8
|
+
|
9
|
+
module Fortnox
|
10
|
+
module API
|
11
|
+
# Shhh Rubocop, we don't need a comment here ... Really
|
12
|
+
module Mapper
|
13
|
+
describe Unit do
|
14
|
+
context 'when mapping model' do
|
15
|
+
let(:model) { Model::Unit.new(code: 'lbs', description: 'Pounds') }
|
16
|
+
let(:serialised_model_hash) { { 'Unit' => { 'Code' => 'lbs', 'Description' => 'Pounds' } } }
|
17
|
+
let(:model_hash) { { code: 'lbs', description: 'Pounds' } }
|
18
|
+
|
19
|
+
describe '#entity_to_hash' do
|
20
|
+
subject { Unit.new.entity_to_hash(model, {}) }
|
21
|
+
|
22
|
+
it { is_expected.to eq(serialised_model_hash) }
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#wrapped_json_hash_to_entity_hash' do
|
26
|
+
subject { Unit.new.wrapped_json_hash_to_entity_hash(serialised_model_hash) }
|
27
|
+
|
28
|
+
it { is_expected.to eq(model_hash) }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'when mapping collection' do
|
33
|
+
let(:serialised_collection_hash) do
|
34
|
+
{ 'Units' => [
|
35
|
+
{ 'Unit' => { 'Code' => 'lbs', 'Description' => 'Pounds' } },
|
36
|
+
{ 'Unit' => { 'Code' => 'ohm', 'Description' => 'Ω' } },
|
37
|
+
{ 'Unit' => { 'Code' => 'A/V', 'Description' => 'Ampere volt' } }
|
38
|
+
] }
|
39
|
+
end
|
40
|
+
let(:collection_hash) do
|
41
|
+
[
|
42
|
+
{ unit: { code: 'lbs', description: 'Pounds' } },
|
43
|
+
{ unit: { code: 'ohm', description: 'Ω' } },
|
44
|
+
{ unit: { code: 'A/V', description: 'Ampere volt' } }
|
45
|
+
]
|
46
|
+
end
|
47
|
+
|
48
|
+
describe '#wrapped_json_collection_to_entities_hash' do
|
49
|
+
subject { Unit.new.wrapped_json_collection_to_entities_hash(serialised_collection_hash) }
|
50
|
+
|
51
|
+
it { is_expected.to eq(collection_hash) }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
require 'fortnox/api/models/base'
|
3
5
|
require 'fortnox/api/types'
|
@@ -5,7 +7,7 @@ require 'fortnox/api/types'
|
|
5
7
|
describe Fortnox::API::Model::Base do
|
6
8
|
using_test_classes do
|
7
9
|
class Entity < Fortnox::API::Model::Base
|
8
|
-
attribute :private, Fortnox::API::Types::String.
|
10
|
+
attribute :private, Fortnox::API::Types::String.is(:read_only)
|
9
11
|
attribute :string, Fortnox::API::Types::Required::String
|
10
12
|
attribute :number, Fortnox::API::Types::Nullable::Integer
|
11
13
|
attribute :account, Fortnox::API::Types::AccountNumber
|
@@ -14,85 +16,91 @@ describe Fortnox::API::Model::Base do
|
|
14
16
|
|
15
17
|
describe '.new' do
|
16
18
|
context 'with basic attribute' do
|
17
|
-
subject{ Entity.new(
|
19
|
+
subject { Entity.new(string: 'Test') }
|
18
20
|
|
19
|
-
it{ is_expected.to be_a Entity }
|
20
|
-
it{ is_expected.to be_new }
|
21
|
-
it{ is_expected.not_to be_saved }
|
21
|
+
it { is_expected.to be_a Entity }
|
22
|
+
it { is_expected.to be_new }
|
23
|
+
it { is_expected.not_to be_saved }
|
22
24
|
end
|
23
25
|
|
24
26
|
context 'without required attribute' do
|
25
|
-
subject{ ->{ Entity.new({}) } }
|
27
|
+
subject { -> { Entity.new({}) } }
|
26
28
|
|
27
|
-
it{ is_expected.to raise_error Fortnox::API::Exception }
|
28
|
-
it{ is_expected.to raise_error Fortnox::API::MissingAttributeError }
|
29
|
-
it{ is_expected.to raise_error Fortnox::API::MissingAttributeError, /Missing attribute :string/ }
|
29
|
+
it { is_expected.to raise_error Fortnox::API::Exception }
|
30
|
+
it { is_expected.to raise_error Fortnox::API::MissingAttributeError }
|
31
|
+
it { is_expected.to raise_error Fortnox::API::MissingAttributeError, /Missing attribute :string/ }
|
30
32
|
end
|
31
33
|
|
32
34
|
context 'with invalid attribute value' do
|
33
|
-
subject{ ->{ Entity.new(
|
35
|
+
subject { -> { Entity.new(string: 'Test', account: 13_337) } }
|
34
36
|
|
35
|
-
it{ is_expected.to raise_error Fortnox::API::Exception }
|
36
|
-
it{ is_expected.to raise_error Fortnox::API::AttributeError }
|
37
|
-
it{ is_expected.to raise_error Fortnox::API::AttributeError, /invalid type for :account/ }
|
37
|
+
it { is_expected.to raise_error Fortnox::API::Exception }
|
38
|
+
it { is_expected.to raise_error Fortnox::API::AttributeError }
|
39
|
+
it { is_expected.to raise_error Fortnox::API::AttributeError, /invalid type for :account/ }
|
38
40
|
end
|
39
41
|
end
|
40
42
|
|
41
43
|
describe '.update' do
|
42
|
-
let(:original){ Entity.new(
|
44
|
+
let(:original) { Entity.new(string: 'Test') }
|
43
45
|
|
44
46
|
context 'with new, simple value' do
|
45
|
-
subject{ updated_model }
|
47
|
+
subject { updated_model }
|
46
48
|
|
47
|
-
let(:updated_model){ original.update(
|
49
|
+
let(:updated_model) { original.update(string: 'Variant') }
|
48
50
|
|
49
|
-
it{ is_expected.to be_new }
|
50
|
-
it{ is_expected.not_to be_saved }
|
51
|
+
it { is_expected.to be_new }
|
52
|
+
it { is_expected.not_to be_saved }
|
51
53
|
|
52
54
|
it 'returns a new object' do
|
53
|
-
is_expected.not_to eql(
|
55
|
+
is_expected.not_to eql(original)
|
54
56
|
end
|
55
57
|
|
56
58
|
describe 'updated attribute' do
|
57
|
-
subject{ updated_model.string }
|
58
|
-
|
59
|
+
subject { updated_model.string }
|
60
|
+
|
61
|
+
it { is_expected.to eql('Variant') }
|
59
62
|
end
|
60
63
|
|
61
64
|
describe 'returned class' do
|
62
|
-
subject{ updated_model.class }
|
63
|
-
|
65
|
+
subject { updated_model.class }
|
66
|
+
|
67
|
+
it { is_expected.to eql(original.class) }
|
64
68
|
end
|
65
69
|
end
|
66
70
|
|
67
71
|
context 'with the same, simple value' do
|
68
|
-
subject(
|
72
|
+
subject(:updated_model) { original.update(string: 'Test') }
|
69
73
|
|
70
74
|
it 'returns the same object' do
|
71
|
-
is_expected.to eql(
|
75
|
+
is_expected.to eql(original)
|
72
76
|
end
|
73
77
|
|
74
78
|
it 'returns a object with the same value' do
|
75
|
-
expect(
|
79
|
+
expect(updated_model.string).to eql('Test')
|
76
80
|
end
|
77
81
|
|
78
|
-
it{ is_expected.to be_new }
|
79
|
-
it{ is_expected.not_to be_saved }
|
82
|
+
it { is_expected.to be_new }
|
83
|
+
it { is_expected.not_to be_saved }
|
80
84
|
end
|
81
85
|
|
82
|
-
context '
|
83
|
-
|
86
|
+
context 'when updating' do
|
87
|
+
let(:updated_entity) do
|
88
|
+
saved_entity = Entity.new(string: 'Saved', new: false, unsaved: false)
|
89
|
+
saved_entity.update(string: 'Updated')
|
90
|
+
end
|
84
91
|
|
85
|
-
|
92
|
+
describe 'updated entity' do
|
93
|
+
subject { updated_entity }
|
86
94
|
|
87
|
-
|
88
|
-
|
89
|
-
expect(saved_entry).to be_saved
|
95
|
+
it { is_expected.not_to be_saved }
|
96
|
+
it { is_expected.not_to be_new }
|
90
97
|
end
|
91
98
|
|
92
|
-
|
93
|
-
|
94
|
-
|
99
|
+
describe 'updated attribute value' do
|
100
|
+
subject { updated_entity.string }
|
101
|
+
|
102
|
+
it { is_expected.to eq('Updated') }
|
103
|
+
end
|
95
104
|
end
|
96
105
|
end
|
97
|
-
|
98
106
|
end
|
@@ -1,13 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'fortnox/api/models/examples/model'
|
2
4
|
|
3
5
|
shared_examples_for 'DocumentBase Model' do |row_class, row_attribute, valid_row_hash: {}|
|
4
6
|
it_behaves_like 'a model', 1
|
5
7
|
|
6
|
-
context "when having a(n) #{
|
8
|
+
context "when having a(n) #{row_class}" do
|
7
9
|
it 'returns the correct object' do
|
8
10
|
row = row_class.new(valid_row_hash)
|
9
|
-
|
10
|
-
expect(
|
11
|
+
document = described_class.new(customer_number: '123', row_attribute => [row])
|
12
|
+
expect(document.send(row_attribute)).to eq([row])
|
11
13
|
end
|
12
14
|
end
|
13
15
|
end
|