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,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
|