fortnox-api 0.5.2 → 0.6.0
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.
- 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,13 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Fortnox
|
2
4
|
module API
|
3
5
|
module Types
|
4
|
-
|
5
6
|
module Required
|
6
|
-
String = Types::Strict::String.constructor{ |value| value.to_s unless value.nil? }.
|
7
|
-
Integer = Types::Strict::Int.constructor{ |value| value.to_i unless value.nil? }.
|
8
|
-
Float = Types::Strict::Float.constructor{ |value| value.to_f unless value.nil? }.
|
7
|
+
String = Types::Strict::String.constructor { |value| value.to_s unless value.nil? }.is(:required)
|
8
|
+
Integer = Types::Strict::Int.constructor { |value| value.to_i unless value.nil? }.is(:required)
|
9
|
+
Float = Types::Strict::Float.constructor { |value| value.to_f unless value.nil? }.is(:required)
|
9
10
|
end
|
10
|
-
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -1,22 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Fortnox
|
2
4
|
module API
|
3
5
|
module Types
|
4
6
|
module Sized
|
5
7
|
module String
|
6
|
-
def self.[](
|
7
|
-
Types::Strict::String.constrained(
|
8
|
+
def self.[](size)
|
9
|
+
Types::Strict::String.constrained(max_size: size).optional.constructor do |value|
|
10
|
+
value.to_s unless value.nil?
|
11
|
+
end
|
8
12
|
end
|
9
13
|
end
|
10
14
|
|
11
15
|
module Integer
|
12
|
-
def self.[](
|
13
|
-
Types::Strict::Int.constrained(
|
16
|
+
def self.[](low, high)
|
17
|
+
Types::Strict::Int.constrained(gteq: low, lteq: high).optional.constructor do |value|
|
18
|
+
value.to_i unless value.nil?
|
19
|
+
end
|
14
20
|
end
|
15
21
|
end
|
16
22
|
|
17
23
|
module Float
|
18
|
-
def self.[](
|
19
|
-
Types::Strict::Float.constrained(
|
24
|
+
def self.[](low, high)
|
25
|
+
Types::Strict::Float.constrained(gteq: low, lteq: high).optional.constructor do |value|
|
26
|
+
value.to_f unless value.nil?
|
27
|
+
end
|
20
28
|
end
|
21
29
|
end
|
22
30
|
end
|
data/lib/fortnox/api/version.rb
CHANGED
@@ -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/customer'
|
@@ -10,6 +12,6 @@ describe Fortnox::API::Mapper::Article do
|
|
10
12
|
json_entity_collection = 'Articles'
|
11
13
|
|
12
14
|
it_behaves_like 'mapper', key_map, json_entity_type, json_entity_collection do
|
13
|
-
let(:mapper){ described_class.new }
|
15
|
+
let(:mapper) { described_class.new }
|
14
16
|
end
|
15
17
|
end
|
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
require 'fortnox/api/mappers/base/from_json'
|
3
5
|
require 'fortnox/api/mappers/contexts/json_conversion'
|
4
6
|
|
5
7
|
describe Fortnox::API::Mapper::FromJSON do
|
6
|
-
include_context 'JSON conversion'
|
8
|
+
include_context 'with JSON conversion'
|
7
9
|
|
8
10
|
before do
|
9
11
|
module Test
|
@@ -12,20 +14,20 @@ describe Fortnox::API::Mapper::FromJSON do
|
|
12
14
|
end
|
13
15
|
end
|
14
16
|
|
15
|
-
register_mapper(
|
16
|
-
register_mapper(
|
17
|
+
register_mapper(:categories, Test::CategoryMapper)
|
18
|
+
register_mapper(:designer, Test::ProductDesignerMapper)
|
17
19
|
end
|
18
20
|
|
19
|
-
let(
|
21
|
+
let(:mapper) { Test::ProductMapper.new }
|
20
22
|
|
21
23
|
describe 'wrapped_json_hash_to_entity_hash' do
|
22
|
-
let(
|
23
|
-
let(
|
24
|
+
let(:entity_hash) { mapper.wrapped_json_hash_to_entity_hash(wrapped_json_hash) }
|
25
|
+
let(:wrapped_json_hash) do
|
24
26
|
{
|
25
27
|
'Product' => {
|
26
28
|
'@url': 'someurl@example.com',
|
27
29
|
'Name': 'Ford Mustang',
|
28
|
-
'VAT':
|
30
|
+
'VAT': 30_000,
|
29
31
|
'Categories': [{ 'Name' => 'Cars', 'ID' => '1' }, { 'Name' => 'Fast cars', 'ID' => '2' }],
|
30
32
|
'Designer': { 'Name' => 'John Najjar', 'ID' => '23' }
|
31
33
|
}
|
@@ -33,11 +35,11 @@ describe Fortnox::API::Mapper::FromJSON do
|
|
33
35
|
end
|
34
36
|
|
35
37
|
specify 'converts keys without mapping correctly' do
|
36
|
-
expect(
|
38
|
+
expect(entity_hash[:name]).to eq 'Ford Mustang'
|
37
39
|
end
|
38
40
|
|
39
41
|
specify 'converts keys with mapping correctly' do
|
40
|
-
expect(
|
42
|
+
expect(entity_hash[:vat]).to eq 30_000
|
41
43
|
end
|
42
44
|
|
43
45
|
specify 'converts keys starting with "@" correctly'
|
@@ -46,20 +48,20 @@ describe Fortnox::API::Mapper::FromJSON do
|
|
46
48
|
# end
|
47
49
|
|
48
50
|
context 'with nested models' do
|
49
|
-
let(
|
51
|
+
let(:expected_nested_model_hash) do
|
50
52
|
[{ name: 'Cars', id: '1' }, { name: 'Fast cars', id: '2' }]
|
51
53
|
end
|
52
54
|
|
53
55
|
specify 'are converted correctly' do
|
54
|
-
expect(
|
56
|
+
expect(entity_hash[:categories]).to eq(expected_nested_model_hash)
|
55
57
|
end
|
56
58
|
end
|
57
59
|
|
58
60
|
context 'with nested model' do
|
59
|
-
let(
|
61
|
+
let(:expected_nested_model_hash) { { name: 'John Najjar', id: '23' } }
|
60
62
|
|
61
63
|
specify 'is converted correctly' do
|
62
|
-
expect(
|
64
|
+
expect(entity_hash[:designer]).to eq(expected_nested_model_hash)
|
63
65
|
end
|
64
66
|
end
|
65
67
|
end
|
@@ -1,10 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
require 'fortnox/api/mappers/base/to_json'
|
3
5
|
require 'fortnox/api/mappers/contexts/json_conversion'
|
4
6
|
|
5
7
|
describe Fortnox::API::Mapper::ToJSON do
|
6
|
-
# TODO:
|
7
|
-
# Following error is risen sometimes when all specs are run:
|
8
|
+
# TODO: Following error is risen sometimes when all specs are run:
|
8
9
|
# "NoMethodError: undefined method `call\' for Test::ProductMapper:Class`"
|
9
10
|
it 'should be tested when random error is fixed!'
|
10
11
|
|
@@ -12,7 +13,7 @@ describe Fortnox::API::Mapper::ToJSON do
|
|
12
13
|
it 'should be tested'
|
13
14
|
end
|
14
15
|
|
15
|
-
# include_context 'JSON conversion'
|
16
|
+
# include_context 'with JSON conversion'
|
16
17
|
|
17
18
|
# before do
|
18
19
|
# module Test
|
@@ -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'
|
@@ -8,73 +10,75 @@ describe Fortnox::API::Mapper::Base do
|
|
8
10
|
it_behaves_like 'mapper', nil, nil, nil, check_constants: false
|
9
11
|
|
10
12
|
shared_examples_for 'simple mapper' do |registry_key, exp_value|
|
11
|
-
subject{ mapper.call(
|
12
|
-
|
13
|
-
|
13
|
+
subject { mapper.call(value) }
|
14
|
+
|
15
|
+
let(:mapper) { Fortnox::API::Registry[registry_key] }
|
16
|
+
it { is_expected.to eq(exp_value) }
|
14
17
|
end
|
15
18
|
|
16
19
|
shared_examples_for 'identity mapper' do |registry_key|
|
17
|
-
subject{ mapper.call(
|
18
|
-
|
19
|
-
|
20
|
+
subject { mapper.call(value) }
|
21
|
+
|
22
|
+
let(:mapper) { Fortnox::API::Registry[registry_key] }
|
23
|
+
it { is_expected.to eq(value) }
|
20
24
|
end
|
21
25
|
|
22
26
|
describe 'string' do
|
23
27
|
include_examples 'identity mapper', :string do
|
24
|
-
let(
|
28
|
+
let(:value) { Fortnox::API::Types::Nullable::String['test'] }
|
25
29
|
end
|
26
30
|
end
|
27
31
|
|
28
32
|
describe 'int' do
|
29
33
|
include_examples 'identity mapper', :int do
|
30
|
-
let(
|
34
|
+
let(:value) { Fortnox::API::Types::Nullable::Integer[1337] }
|
31
35
|
end
|
32
36
|
end
|
33
37
|
|
34
38
|
describe 'float' do
|
35
39
|
include_examples 'identity mapper', :float do
|
36
|
-
let(
|
40
|
+
let(:value) { Fortnox::API::Types::Nullable::Float[13.37] }
|
37
41
|
end
|
38
42
|
end
|
39
43
|
|
40
44
|
describe 'boolean' do
|
41
45
|
include_examples 'identity mapper', :boolean do
|
42
|
-
let(
|
46
|
+
let(:value) { Fortnox::API::Types::Nullable::Boolean[false] }
|
43
47
|
end
|
44
48
|
end
|
45
49
|
|
46
50
|
describe 'array' do
|
47
51
|
include_examples 'identity mapper', :array do
|
48
|
-
let(
|
52
|
+
let(:value) { [1, 3, 3, 7] }
|
49
53
|
end
|
50
54
|
end
|
51
55
|
|
52
56
|
describe 'array with very large int (Bigint if Ruby <2.4)' do
|
53
57
|
include_examples 'identity mapper', :array do
|
54
|
-
let(
|
58
|
+
let(:value) { [(100**10)] }
|
55
59
|
end
|
56
60
|
end
|
57
61
|
|
58
62
|
describe 'advanced array' do
|
59
|
-
include_examples 'simple mapper', :array, [
|
60
|
-
let(
|
63
|
+
include_examples 'simple mapper', :array, ['2016-01-01', '2016-01-02'] do
|
64
|
+
let(:value) { [Date.new(2016, 1, 1), Date.new(2016, 1, 2)] }
|
61
65
|
end
|
62
66
|
end
|
63
67
|
|
64
68
|
describe 'hash' do
|
65
69
|
include_examples 'identity mapper', :hash do
|
66
|
-
let(
|
70
|
+
let(:value) { { string: 'test', int: 1337, float: 13.37 } }
|
67
71
|
end
|
68
72
|
end
|
69
73
|
|
70
74
|
describe 'advanced hash' do
|
71
75
|
expected_hash = {
|
72
76
|
string: 'test',
|
73
|
-
date_array: [
|
74
|
-
nested_hash: { date:
|
77
|
+
date_array: ['2016-01-01', '2016-01-02'],
|
78
|
+
nested_hash: { date: '2016-01-03', string: 'test' }
|
75
79
|
}
|
76
80
|
include_examples 'identity mapper', :hash, expected_hash do
|
77
|
-
let(
|
81
|
+
let(:value) do
|
78
82
|
{
|
79
83
|
string: 'test',
|
80
84
|
date_array: [Date.new(2016, 1, 1), Date.new(2016, 1, 2)],
|
@@ -86,77 +90,78 @@ describe Fortnox::API::Mapper::Base do
|
|
86
90
|
|
87
91
|
describe 'trueclass' do
|
88
92
|
include_examples 'identity mapper', :trueclass do
|
89
|
-
let(
|
93
|
+
let(:value) { true }
|
90
94
|
end
|
91
95
|
end
|
92
96
|
describe 'falseclass' do
|
93
97
|
include_examples 'identity mapper', :falseclass do
|
94
|
-
let(
|
98
|
+
let(:value) { false }
|
95
99
|
end
|
96
100
|
end
|
97
101
|
|
98
102
|
describe 'date' do
|
99
|
-
include_examples 'simple mapper', :date,
|
100
|
-
let(
|
103
|
+
include_examples 'simple mapper', :date, '2016-01-01' do
|
104
|
+
let(:value) { Date.new(2016, 1, 1) }
|
101
105
|
end
|
102
106
|
end
|
103
107
|
|
104
108
|
describe 'nilclass' do
|
105
109
|
include_examples 'identity mapper', :nilclass do
|
106
|
-
let(
|
110
|
+
let(:value) { Fortnox::API::Types::Nullable::String[nil] }
|
107
111
|
end
|
108
112
|
end
|
109
113
|
|
110
114
|
describe 'AccountNumber' do
|
111
115
|
include_examples 'identity mapper', :account_number do
|
112
|
-
let(
|
116
|
+
let(:value) { Fortnox::API::Types::AccountNumber[1234] }
|
113
117
|
end
|
114
118
|
end
|
115
119
|
|
116
120
|
describe 'CountryCode' do
|
117
121
|
include_examples 'identity mapper', :country_code do
|
118
|
-
let(
|
122
|
+
let(:value) { Fortnox::API::Types::CountryCode['SE'] }
|
119
123
|
end
|
120
124
|
end
|
121
125
|
|
122
126
|
describe 'Currency' do
|
123
127
|
include_examples 'identity mapper', :currency do
|
124
|
-
let(
|
128
|
+
let(:value) { Fortnox::API::Types::Currency['SEK'] }
|
125
129
|
end
|
126
130
|
end
|
127
131
|
|
128
132
|
describe 'CustomerType' do
|
129
133
|
include_examples 'identity mapper', :customer_type do
|
130
|
-
let(
|
134
|
+
let(:value) { Fortnox::API::Types::CustomerType['PRIVATE'] }
|
131
135
|
end
|
132
136
|
end
|
133
137
|
|
134
138
|
describe 'DiscountType' do
|
135
139
|
include_examples 'identity mapper', :discount_type do
|
136
|
-
let(
|
140
|
+
let(:value) { Fortnox::API::Types::DiscountType['PERCENT'] }
|
137
141
|
end
|
138
142
|
end
|
139
143
|
|
140
144
|
describe 'Email' do
|
141
145
|
include_examples 'identity mapper', :email do
|
142
|
-
let(
|
146
|
+
let(:value) { Fortnox::API::Types::Email['email@example.com'] }
|
143
147
|
end
|
144
148
|
end
|
145
149
|
|
146
|
-
describe '
|
147
|
-
include_examples 'identity mapper', :
|
148
|
-
let(
|
150
|
+
describe 'HouseworkType' do
|
151
|
+
include_examples 'identity mapper', :housework_type do
|
152
|
+
let(:value) { Fortnox::API::Types::HouseworkType['CONSTRUCTION'] }
|
149
153
|
end
|
150
154
|
end
|
151
155
|
|
152
156
|
describe 'VATType' do
|
153
157
|
include_examples 'identity mapper', :vat_type do
|
154
|
-
let(
|
158
|
+
let(:value) { Fortnox::API::Types::VATType['SEVAT'] }
|
155
159
|
end
|
156
160
|
end
|
157
161
|
|
158
162
|
describe '#canonical_name_sym' do
|
159
|
-
subject{ described_class.canonical_name_sym }
|
160
|
-
|
163
|
+
subject { described_class.canonical_name_sym }
|
164
|
+
|
165
|
+
it { is_expected.to eq(described_class.name.split('::').last.downcase.to_sym) }
|
161
166
|
end
|
162
167
|
end
|
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'fortnox/api'
|
2
4
|
require 'fortnox/api/mappers'
|
3
5
|
|
4
|
-
shared_context 'JSON conversion' do
|
6
|
+
shared_context 'with JSON conversion' do
|
5
7
|
before do
|
6
8
|
module Test
|
7
9
|
class BaseMapper
|
@@ -20,8 +22,8 @@ shared_context 'JSON conversion' do
|
|
20
22
|
vat: 'VAT',
|
21
23
|
url: '@url' # TODO: How to handle url attribute?
|
22
24
|
}.freeze
|
23
|
-
JSON_ENTITY_WRAPPER = 'Product'
|
24
|
-
JSON_COLLECTION_WRAPPER = 'Products'
|
25
|
+
JSON_ENTITY_WRAPPER = 'Product'
|
26
|
+
JSON_COLLECTION_WRAPPER = 'Products'
|
25
27
|
end
|
26
28
|
|
27
29
|
class Category < Fortnox::API::Model::Base
|
@@ -38,19 +40,18 @@ shared_context 'JSON conversion' do
|
|
38
40
|
attribute :url, 'strict.string'
|
39
41
|
attribute :name, 'strict.string'
|
40
42
|
attribute :vat, 'strict.float'
|
41
|
-
attribute :categories, Dry::Types['coercible.array'].member(
|
43
|
+
attribute :categories, Dry::Types['coercible.array'].member(Test::Category)
|
42
44
|
attribute :designer, Test::ProductDesigner
|
43
45
|
end
|
44
46
|
end
|
45
47
|
|
46
|
-
def register_mapper(
|
47
|
-
|
48
|
-
|
49
|
-
end
|
48
|
+
def register_mapper(mapper_sym, mapper)
|
49
|
+
return if Fortnox::API::Registry.key? mapper_sym
|
50
|
+
Fortnox::API::Registry.register(mapper_sym, mapper)
|
50
51
|
end
|
51
52
|
|
52
|
-
register_mapper(
|
53
|
-
register_mapper(
|
54
|
-
register_mapper(
|
53
|
+
register_mapper(:category, Test::CategoryMapper)
|
54
|
+
register_mapper(:productdesigner, Test::ProductDesignerMapper)
|
55
|
+
register_mapper(:product, Test::ProductMapper)
|
55
56
|
end
|
56
57
|
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/customer'
|
@@ -20,6 +22,6 @@ describe Fortnox::API::Mapper::Customer do
|
|
20
22
|
json_entity_collection = 'Customers'
|
21
23
|
|
22
24
|
it_behaves_like 'mapper', key_map, json_entity_type, json_entity_collection do
|
23
|
-
let(:mapper){ described_class.new }
|
25
|
+
let(:mapper) { described_class.new }
|
24
26
|
end
|
25
27
|
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/default_delivery_types'
|
@@ -7,6 +9,6 @@ describe Fortnox::API::Mapper::DefaultDeliveryTypes do
|
|
7
9
|
key_map = {}
|
8
10
|
|
9
11
|
it_behaves_like 'mapper', key_map do
|
10
|
-
let(:mapper){ described_class.new }
|
12
|
+
let(:mapper) { described_class.new }
|
11
13
|
end
|
12
14
|
end
|