fortnox-api 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +3 -2
- data/.env.test +3 -0
- data/.rubocop.yml +32 -23
- data/.travis.yml +3 -2
- data/Guardfile +2 -2
- data/LICENSE.txt +165 -22
- data/README.md +56 -37
- data/fortnox-api.gemspec +9 -6
- data/lib/fortnox/api.rb +18 -2
- data/lib/fortnox/api/base.rb +5 -3
- data/lib/fortnox/api/environment_validation.rb +51 -6
- data/lib/fortnox/api/mappers.rb +49 -0
- data/lib/fortnox/api/mappers/base.rb +47 -0
- data/lib/fortnox/api/mappers/base/from_json.rb +78 -0
- data/lib/fortnox/api/mappers/base/to_json.rb +65 -0
- data/lib/fortnox/api/mappers/customer.rb +27 -0
- data/lib/fortnox/api/mappers/default_delivery_types.rb +13 -0
- data/lib/fortnox/api/mappers/default_templates.rb +15 -0
- data/lib/fortnox/api/mappers/edi_information.rb +22 -0
- data/lib/fortnox/api/mappers/email_information.rb +18 -0
- data/lib/fortnox/api/mappers/invoice.rb +27 -0
- data/lib/fortnox/api/mappers/invoice_row.rb +20 -0
- data/lib/fortnox/api/mappers/order.rb +23 -0
- data/lib/fortnox/api/mappers/order_row.rb +16 -0
- data/lib/fortnox/api/models.rb +2 -0
- data/lib/fortnox/api/models/base.rb +56 -13
- data/lib/fortnox/api/models/customer.rb +112 -101
- data/lib/fortnox/api/models/document_base.rb +189 -0
- data/lib/fortnox/api/models/invoice.rb +29 -195
- data/lib/fortnox/api/models/label.rb +17 -0
- data/lib/fortnox/api/models/order.rb +27 -0
- data/lib/fortnox/api/repositories.rb +2 -0
- data/lib/fortnox/api/repositories/base.rb +4 -5
- data/lib/fortnox/api/repositories/base/loaders.rb +22 -14
- data/lib/fortnox/api/repositories/base/savers.rb +30 -16
- data/lib/fortnox/api/repositories/customer.rb +3 -25
- data/lib/fortnox/api/repositories/invoice.rb +3 -22
- data/lib/fortnox/api/repositories/order.rb +16 -0
- data/lib/fortnox/api/request_handling.rb +3 -3
- data/lib/fortnox/api/types.rb +44 -0
- data/lib/fortnox/api/types/default_delivery_types.rb +20 -0
- data/lib/fortnox/api/types/default_templates.rb +23 -0
- data/lib/fortnox/api/types/defaulted.rb +11 -0
- data/lib/fortnox/api/types/document_row.rb +65 -0
- data/lib/fortnox/api/types/edi_information.rb +29 -0
- data/lib/fortnox/api/types/email_information.rb +26 -0
- data/lib/fortnox/api/types/enums.rb +75 -0
- data/lib/fortnox/api/types/invoice_row.rb +19 -0
- data/lib/fortnox/api/types/model.rb +40 -0
- data/lib/fortnox/api/types/nullable.rb +21 -0
- data/lib/fortnox/api/types/order_row.rb +16 -0
- data/lib/fortnox/api/types/required.rb +13 -0
- data/lib/fortnox/api/types/sized.rb +25 -0
- data/lib/fortnox/api/version.rb +1 -1
- data/spec/fortnox/api/base_spec.rb +85 -14
- data/spec/fortnox/api/mappers/base/from_json_spec.rb +70 -0
- data/spec/fortnox/api/mappers/base/to_json_spec.rb +76 -0
- data/spec/fortnox/api/mappers/base_spec.rb +156 -0
- data/spec/fortnox/api/mappers/contexts/json_conversion.rb +56 -0
- data/spec/fortnox/api/mappers/customer_spec.rb +25 -0
- data/spec/fortnox/api/mappers/default_delivery_types_spec.rb +12 -0
- data/spec/fortnox/api/mappers/edi_information_spec.rb +21 -0
- data/spec/fortnox/api/mappers/email_information_spec.rb +17 -0
- data/spec/fortnox/api/mappers/examples/mapper.rb +26 -0
- data/spec/fortnox/api/mappers/invoice_row_spec.rb +19 -0
- data/spec/fortnox/api/mappers/invoice_spec.rb +24 -0
- data/spec/fortnox/api/mappers/order_row_spec.rb +14 -0
- data/spec/fortnox/api/mappers/order_spec.rb +20 -0
- data/spec/fortnox/api/models/base_spec.rb +44 -22
- data/spec/fortnox/api/models/customer_spec.rb +9 -0
- data/spec/fortnox/api/models/examples/document_base.rb +13 -0
- data/spec/fortnox/api/models/examples/model.rb +13 -0
- data/spec/fortnox/api/models/invoice_spec.rb +7 -31
- data/spec/fortnox/api/models/order_spec.rb +13 -0
- data/spec/fortnox/api/repositories/customer_spec.rb +20 -76
- data/spec/fortnox/api/repositories/examples/all.rb +17 -0
- data/spec/fortnox/api/repositories/examples/find.rb +25 -0
- data/spec/fortnox/api/repositories/examples/only.rb +42 -0
- data/spec/fortnox/api/repositories/examples/save.rb +69 -0
- data/spec/fortnox/api/repositories/examples/save_with_nested_model.rb +32 -0
- data/spec/fortnox/api/repositories/examples/save_with_specially_named_attribute.rb +27 -0
- data/spec/fortnox/api/repositories/examples/search.rb +31 -0
- data/spec/fortnox/api/repositories/invoice_spec.rb +36 -5
- data/spec/fortnox/api/repositories/order_spec.rb +35 -0
- data/spec/fortnox/api/types/account_number_spec.rb +28 -0
- data/spec/fortnox/api/types/default_delivery_types_spec.rb +10 -0
- data/spec/fortnox/api/types/edi_information_spec.rb +13 -0
- data/spec/fortnox/api/types/email_information_spec.rb +13 -0
- data/spec/fortnox/api/types/email_spec.rb +29 -0
- data/spec/fortnox/api/types/enums_spec.rb +13 -0
- data/spec/fortnox/api/types/examples/document_row.rb +15 -0
- data/spec/fortnox/api/types/examples/enum.rb +48 -0
- data/spec/fortnox/api/types/examples/types.rb +9 -0
- data/spec/fortnox/api/types/house_work_types_spec.rb +60 -0
- data/spec/fortnox/api/types/invoice_row_spec.rb +9 -0
- data/spec/fortnox/api/types/model_spec.rb +56 -0
- data/spec/fortnox/api/types/nullable_spec.rb +57 -0
- data/spec/fortnox/api/types/order_row_spec.rb +13 -0
- data/spec/fortnox/api/types/required_spec.rb +42 -0
- data/spec/fortnox/api/types/sized_spec.rb +74 -0
- data/spec/fortnox/api_spec.rb +16 -15
- data/spec/spec_helper.rb +19 -9
- data/spec/support/helpers/dummy_class_helper.rb +19 -0
- data/spec/support/helpers/environment_helper.rb +7 -0
- data/spec/support/helpers/repository_helper.rb +8 -0
- data/spec/support/helpers/when_performing_helper.rb +5 -0
- data/spec/support/matchers.rb +1 -1
- data/spec/support/matchers/type.rb +17 -0
- data/spec/support/matchers/type/attribute_matcher.rb +39 -0
- data/spec/support/matchers/type/enum_matcher.rb +21 -0
- data/spec/support/matchers/type/have_account_number_matcher.rb +21 -0
- data/spec/support/matchers/type/have_country_code_matcher.rb +13 -0
- data/spec/support/matchers/type/have_currency_matcher.rb +7 -0
- data/spec/support/matchers/type/have_customer_type_matcher.rb +13 -0
- data/spec/support/matchers/type/have_default_delivery_type_matcher.rb +7 -0
- data/spec/support/matchers/type/have_discount_type_matcher.rb +7 -0
- data/spec/support/matchers/type/have_email_matcher.rb +22 -0
- data/spec/support/matchers/type/have_house_work_type_matcher.rb +7 -0
- data/spec/support/matchers/type/have_nullable_date_matcher.rb +58 -0
- data/spec/support/matchers/type/have_nullable_matcher.rb +52 -0
- data/spec/support/matchers/type/have_nullable_string_matcher.rb +49 -0
- data/spec/support/matchers/type/have_sized_float_matcher.rb +8 -0
- data/spec/support/matchers/type/have_sized_integer_matcher.rb +8 -0
- data/spec/support/matchers/type/have_sized_string_matcher.rb +35 -0
- data/spec/support/matchers/type/have_vat_type_matcher.rb +7 -0
- data/spec/support/matchers/type/numeric_matcher.rb +50 -0
- data/spec/support/matchers/type/require_attribute_matcher.rb +69 -0
- data/spec/support/matchers/type/type_matcher.rb +38 -0
- data/spec/vcr_cassettes/customers/all.yml +119 -9
- data/spec/vcr_cassettes/customers/find_id_1.yml +8 -9
- data/spec/vcr_cassettes/customers/find_new.yml +46 -0
- data/spec/vcr_cassettes/customers/save_new.yml +9 -11
- data/spec/vcr_cassettes/customers/save_old.yml +9 -12
- data/spec/vcr_cassettes/customers/save_with_specially_named_attribute.yml +45 -0
- data/spec/vcr_cassettes/customers/search_by_name.yml +66 -0
- data/spec/vcr_cassettes/customers/search_miss.yml +45 -0
- data/spec/vcr_cassettes/invoices/all.yml +104 -0
- data/spec/vcr_cassettes/invoices/filter_hit.yml +46 -0
- data/spec/vcr_cassettes/invoices/filter_invalid.yml +42 -0
- data/spec/vcr_cassettes/invoices/find_id_1.yml +47 -0
- data/spec/vcr_cassettes/invoices/find_new.yml +49 -0
- data/spec/vcr_cassettes/invoices/save_new.yml +48 -0
- data/spec/vcr_cassettes/invoices/save_old.yml +49 -0
- data/spec/vcr_cassettes/invoices/save_with_nested_model.yml +47 -0
- data/spec/vcr_cassettes/invoices/save_with_specially_named_attribute.yml +47 -0
- data/spec/vcr_cassettes/invoices/search_by_name.yml +48 -0
- data/spec/vcr_cassettes/invoices/search_miss.yml +45 -0
- data/spec/vcr_cassettes/orders/all.yml +144 -0
- data/spec/vcr_cassettes/orders/filter_hit.yml +48 -0
- data/spec/vcr_cassettes/orders/filter_invalid.yml +42 -0
- data/spec/vcr_cassettes/orders/find_id_1.yml +48 -0
- data/spec/vcr_cassettes/orders/find_new.yml +49 -0
- data/spec/vcr_cassettes/orders/house_work_type_babysitting.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_cleaning.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_construction.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_cooking.yml +43 -0
- data/spec/vcr_cassettes/orders/house_work_type_electricity.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_gardening.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_glassmetalwork.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_grounddrainagework.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_hvac.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_masonry.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_othercare.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_othercosts.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_paintingwallpapering.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_snowplowing.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_textileclothing.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_tutoring.yml +43 -0
- data/spec/vcr_cassettes/orders/save_new.yml +48 -0
- data/spec/vcr_cassettes/orders/save_old.yml +49 -0
- data/spec/vcr_cassettes/orders/save_with_nested_model.yml +47 -0
- data/spec/vcr_cassettes/orders/search_by_name.yml +47 -0
- data/spec/vcr_cassettes/orders/search_miss.yml +45 -0
- metadata +301 -71
- data/lib/fortnox/api/models/attributes/country_code.rb +0 -17
- data/lib/fortnox/api/models/attributes/currency.rb +0 -17
- data/lib/fortnox/api/models/edi_information.rb +0 -28
- data/lib/fortnox/api/models/email_information.rb +0 -25
- data/lib/fortnox/api/models/row.rb +0 -82
- data/lib/fortnox/api/repositories/base/json_convertion.rb +0 -68
- data/lib/fortnox/api/repositories/base/options.rb +0 -33
- data/lib/fortnox/api/validators.rb +0 -1
- data/lib/fortnox/api/validators/attributes/country_code.rb +0 -42
- data/lib/fortnox/api/validators/attributes/currency.rb +0 -38
- data/lib/fortnox/api/validators/base.rb +0 -70
- data/lib/fortnox/api/validators/constant.rb +0 -21
- data/lib/fortnox/api/validators/customer.rb +0 -29
- data/lib/fortnox/api/validators/edi_information.rb +0 -11
- data/lib/fortnox/api/validators/email_information.rb +0 -19
- data/lib/fortnox/api/validators/invoice.rb +0 -33
- data/lib/fortnox/api/validators/row.rb +0 -22
- data/spec/fortnox/api/models/attributes/country_code_spec.rb +0 -23
- data/spec/fortnox/api/models/attributes/currency_spec.rb +0 -23
- data/spec/fortnox/api/models/attributes/dummy_model_context.rb +0 -9
- data/spec/fortnox/api/models/row_spec.rb +0 -13
- data/spec/fortnox/api/repositories/context.rb +0 -10
- data/spec/fortnox/api/repositories/examples.rb +0 -16
- data/spec/fortnox/api/validators/attributes/country_code_spec.rb +0 -9
- data/spec/fortnox/api/validators/attributes/currency_spec.rb +0 -9
- data/spec/fortnox/api/validators/attributes/examples_for_validate.rb +0 -29
- data/spec/fortnox/api/validators/base_spec.rb +0 -61
- data/spec/fortnox/api/validators/constant_spec.rb +0 -12
- data/spec/fortnox/api/validators/context.rb +0 -102
- data/spec/fortnox/api/validators/customer_spec.rb +0 -31
- data/spec/fortnox/api/validators/edi_information_spec.rb +0 -18
- data/spec/fortnox/api/validators/email_information_spec.rb +0 -26
- data/spec/fortnox/api/validators/invoice_spec.rb +0 -36
- data/spec/fortnox/api/validators/row_spec.rb +0 -27
- data/spec/fortnox/api/validators/validator_examples.rb +0 -20
- data/spec/support/matchers/models.rb +0 -27
- data/spec/support/matchers/validators.rb +0 -36
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'fortnox/api/mappers/base/to_json'
|
3
|
+
require 'fortnox/api/mappers/contexts/json_conversion'
|
4
|
+
|
5
|
+
describe Fortnox::API::Mapper::ToJSON do
|
6
|
+
# TODO:
|
7
|
+
# Following error is risen sometimes when all specs are run:
|
8
|
+
# "NoMethodError: undefined method `call\' for Test::ProductMapper:Class`"
|
9
|
+
it 'should be tested when random error is fixed!'
|
10
|
+
|
11
|
+
describe 'wrapp_entity_json_hash' do
|
12
|
+
it 'should be tested'
|
13
|
+
end
|
14
|
+
|
15
|
+
# include_context 'JSON conversion'
|
16
|
+
|
17
|
+
# before do
|
18
|
+
# module Test
|
19
|
+
# class BaseMapper
|
20
|
+
# include Fortnox::API::Mapper::ToJSON
|
21
|
+
# end
|
22
|
+
# end
|
23
|
+
# end
|
24
|
+
|
25
|
+
# let( :mapper ){ Test::ProductMapper.new }
|
26
|
+
|
27
|
+
# describe 'entity_to_hash' do
|
28
|
+
# let( :category1 ){ Test::Category.new( name: 'Cars', id: '1' ) }
|
29
|
+
# let( :category2 ){ Test::Category.new( name: 'Fast Cars', id: '2' ) }
|
30
|
+
# let( :product_designer ){ Test::ProductDesigner.new( name: 'John Najjar', id: '23' ) }
|
31
|
+
# let( :product ) do
|
32
|
+
# Test::Product.new( url: 'someurl@example.com',
|
33
|
+
# name: 'Ford Mustang',
|
34
|
+
# vat: 30000.0 ,
|
35
|
+
# categories: [category1, category2],
|
36
|
+
# designer: product_designer )
|
37
|
+
# end
|
38
|
+
# let( :keys_to_filter ){ [:url] }
|
39
|
+
# let( :returned_hash ){ mapper.entity_to_hash( product, keys_to_filter ) }
|
40
|
+
# let( :inner_hash ){ returned_hash['Product'] }
|
41
|
+
|
42
|
+
# it 'includes JSON entity wrapper' do
|
43
|
+
# expect( returned_hash ).to have_key( 'Product' )
|
44
|
+
# end
|
45
|
+
|
46
|
+
# context 'with keys without mapping' do
|
47
|
+
# specify 'converts correctly' do
|
48
|
+
# expect( inner_hash['Name'] ).to eq( 'Ford Mustang' )
|
49
|
+
# end
|
50
|
+
# end
|
51
|
+
|
52
|
+
# context 'with keys to filter' do
|
53
|
+
# specify 'filteres out those keys' do
|
54
|
+
# expect( inner_hash ).not_to have_key( '@url' )
|
55
|
+
# end
|
56
|
+
# end
|
57
|
+
|
58
|
+
# context 'with nested models' do
|
59
|
+
# let( :expected_nested_model_hash ) do
|
60
|
+
# [{"Name" => "Cars", "ID" => "1"}, {"Name" => "Fast Cars", "ID" => "2"}]
|
61
|
+
# end
|
62
|
+
|
63
|
+
# specify 'are converted correctly' do
|
64
|
+
# expect( inner_hash['Categories'] ).to eq( expected_nested_model_hash )
|
65
|
+
# end
|
66
|
+
# end
|
67
|
+
|
68
|
+
# context 'with nested model' do
|
69
|
+
# let( :expected_nested_model_hash ){ { 'Name' => 'John Najjar', 'ID' => '23' } }
|
70
|
+
|
71
|
+
# specify 'is converted correctly' do
|
72
|
+
# expect( inner_hash['Designer'] ).to eq( expected_nested_model_hash )
|
73
|
+
# end
|
74
|
+
# end
|
75
|
+
# end
|
76
|
+
end
|
@@ -0,0 +1,156 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'fortnox/api'
|
3
|
+
require 'fortnox/api/mappers'
|
4
|
+
require 'fortnox/api/mappers/base'
|
5
|
+
require 'fortnox/api/mappers/examples/mapper'
|
6
|
+
|
7
|
+
describe Fortnox::API::Mapper::Base do
|
8
|
+
it_behaves_like 'mapper', nil, nil, nil, check_constants: false
|
9
|
+
|
10
|
+
shared_examples_for 'simple mapper' do |registry_key, exp_value|
|
11
|
+
subject{ mapper.call( value ) }
|
12
|
+
let( :mapper ){ Fortnox::API::Registry[ registry_key ] }
|
13
|
+
it{ is_expected.to eq( exp_value ) }
|
14
|
+
end
|
15
|
+
|
16
|
+
shared_examples_for 'identity mapper' do |registry_key|
|
17
|
+
subject{ mapper.call( value ) }
|
18
|
+
let( :mapper ){ Fortnox::API::Registry[ registry_key ] }
|
19
|
+
it{ is_expected.to eq( value ) }
|
20
|
+
end
|
21
|
+
|
22
|
+
describe 'string' do
|
23
|
+
include_examples 'identity mapper', :string do
|
24
|
+
let( :value ){ Fortnox::API::Types::Nullable::String[ 'test' ] }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe 'int' do
|
29
|
+
include_examples 'identity mapper', :int do
|
30
|
+
let( :value ){ Fortnox::API::Types::Nullable::Integer[ 1337 ] }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe 'float' do
|
35
|
+
include_examples 'identity mapper', :float do
|
36
|
+
let( :value ){ Fortnox::API::Types::Nullable::Float[ 13.37 ] }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe 'boolean' do
|
41
|
+
include_examples 'identity mapper', :boolean do
|
42
|
+
let( :value ){ Fortnox::API::Types::Nullable::Boolean[ false ] }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe 'array' do
|
47
|
+
include_examples 'identity mapper', :array do
|
48
|
+
let( :value ){ [1,3,3,7] }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe 'advanced array' do
|
53
|
+
include_examples 'simple mapper', :array, [ "2016-01-01", "2016-01-02" ] do
|
54
|
+
let( :value ){ [ Date.new(2016, 1, 1), Date.new(2016, 1, 2) ] }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe 'hash' do
|
59
|
+
include_examples 'identity mapper', :hash do
|
60
|
+
let( :value ){ { string: 'test', int: 1337, float: 13.37 } }
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe 'advanced hash' do
|
65
|
+
expected_hash = {
|
66
|
+
string: 'test',
|
67
|
+
date_array: [ "2016-01-01", "2016-01-02"],
|
68
|
+
nested_hash: { date: "2016-01-03", string: 'test' }
|
69
|
+
}
|
70
|
+
include_examples 'identity mapper', :hash, expected_hash do
|
71
|
+
let( :value ) do
|
72
|
+
{
|
73
|
+
string: 'test',
|
74
|
+
date_array: [Date.new(2016, 1, 1), Date.new(2016, 1, 2)],
|
75
|
+
nested_hash: { date: Date.new(2016, 1, 3), string: 'test' }
|
76
|
+
}
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe 'trueclass' do
|
82
|
+
include_examples 'identity mapper', :trueclass do
|
83
|
+
let( :value ){ true }
|
84
|
+
end
|
85
|
+
end
|
86
|
+
describe 'falseclass' do
|
87
|
+
include_examples 'identity mapper', :falseclass do
|
88
|
+
let( :value ){ false }
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe 'date' do
|
93
|
+
include_examples 'simple mapper', :date, "2016-01-01" do
|
94
|
+
let( :value ){ Date.new(2016, 1, 1) }
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
describe 'nilclass' do
|
99
|
+
include_examples 'identity mapper', :nilclass do
|
100
|
+
let( :value ){ Fortnox::API::Types::Nullable::String[ nil ] }
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe 'AccountNumber' do
|
105
|
+
include_examples 'identity mapper', :account_number do
|
106
|
+
let( :value ){ Fortnox::API::Types::AccountNumber[ 1234 ] }
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe 'CountryCode' do
|
111
|
+
include_examples 'identity mapper', :country_code do
|
112
|
+
let( :value ){ Fortnox::API::Types::CountryCode[ 'SE' ] }
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
describe 'Currency' do
|
117
|
+
include_examples 'identity mapper', :currency do
|
118
|
+
let( :value ){ Fortnox::API::Types::Currency[ 'SEK' ] }
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe 'CustomerType' do
|
123
|
+
include_examples 'identity mapper', :customer_type do
|
124
|
+
let( :value ){ Fortnox::API::Types::CustomerType[ 'PRIVATE' ] }
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
describe 'DiscountType' do
|
129
|
+
include_examples 'identity mapper', :discount_type do
|
130
|
+
let( :value ){ Fortnox::API::Types::DiscountType[ 'PERCENT' ] }
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
describe 'Email' do
|
135
|
+
include_examples 'identity mapper', :email do
|
136
|
+
let( :value ){ Fortnox::API::Types::Email[ 'email@example.com' ] }
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
describe 'HouseWorkType' do
|
141
|
+
include_examples 'identity mapper', :house_work_type do
|
142
|
+
let( :value ){ Fortnox::API::Types::HouseWorkType[ 'CONSTRUCTION' ] }
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
describe 'VATType' do
|
147
|
+
include_examples 'identity mapper', :vat_type do
|
148
|
+
let( :value ){ Fortnox::API::Types::VATType[ 'SEVAT' ] }
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
describe '#canonical_name_sym' do
|
153
|
+
subject{ described_class.canonical_name_sym }
|
154
|
+
it{ is_expected.to eq( described_class.name.split( '::' ).last.downcase.to_sym ) }
|
155
|
+
end
|
156
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'fortnox/api'
|
2
|
+
require 'fortnox/api/mappers'
|
3
|
+
|
4
|
+
shared_context 'JSON conversion' do
|
5
|
+
before do
|
6
|
+
module Test
|
7
|
+
class BaseMapper
|
8
|
+
end
|
9
|
+
|
10
|
+
class CategoryMapper < BaseMapper
|
11
|
+
KEY_MAP = { id: 'ID' }.freeze
|
12
|
+
end
|
13
|
+
|
14
|
+
class ProductDesignerMapper < BaseMapper
|
15
|
+
KEY_MAP = { id: 'ID' }.freeze
|
16
|
+
end
|
17
|
+
|
18
|
+
class ProductMapper < BaseMapper
|
19
|
+
KEY_MAP = {
|
20
|
+
vat: 'VAT',
|
21
|
+
url: '@url' # TODO: How to handle url attribute?
|
22
|
+
}.freeze
|
23
|
+
JSON_ENTITY_WRAPPER = 'Product'.freeze
|
24
|
+
JSON_COLLECTION_WRAPPER = 'Products'.freeze
|
25
|
+
end
|
26
|
+
|
27
|
+
class Category < Fortnox::API::Model::Base
|
28
|
+
attribute :name, 'strict.string'
|
29
|
+
attribute :id, 'strict.string'
|
30
|
+
end
|
31
|
+
|
32
|
+
class ProductDesigner < Fortnox::API::Model::Base
|
33
|
+
attribute :name, 'strict.string'
|
34
|
+
attribute :id, 'strict.string'
|
35
|
+
end
|
36
|
+
|
37
|
+
class Product < Fortnox::API::Model::Base
|
38
|
+
attribute :url, 'strict.string'
|
39
|
+
attribute :name, 'strict.string'
|
40
|
+
attribute :vat, 'strict.float'
|
41
|
+
attribute :categories, Dry::Types['coercible.array'].member( Test::Category )
|
42
|
+
attribute :designer, Test::ProductDesigner
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def register_mapper( mapper_sym, mapper )
|
47
|
+
unless Fortnox::API::Registry.key? mapper_sym
|
48
|
+
Fortnox::API::Registry.register( mapper_sym, mapper )
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
register_mapper( :category, Test::CategoryMapper)
|
53
|
+
register_mapper( :productdesigner, Test::ProductDesignerMapper )
|
54
|
+
register_mapper( :product, Test::ProductMapper )
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'fortnox/api'
|
3
|
+
require 'fortnox/api/mappers/customer'
|
4
|
+
require 'fortnox/api/mappers/examples/mapper'
|
5
|
+
|
6
|
+
describe Fortnox::API::Mapper::Customer do
|
7
|
+
key_map =
|
8
|
+
{
|
9
|
+
vat_type: 'VATType',
|
10
|
+
vat_number: 'VATNumber',
|
11
|
+
email_invoice_bcc: 'EmailInvoiceBCC',
|
12
|
+
email_invoice_cc: 'EmailInvoiceCC',
|
13
|
+
email_offer_bcc: 'EmailOfferBCC',
|
14
|
+
email_offer_cc: 'EmailOfferCC',
|
15
|
+
email_order_bcc: 'EmailOrderBCC',
|
16
|
+
email_order_cc: 'EmailOrderCC',
|
17
|
+
show_price_vat_included: 'ShowPriceVATIncluded'
|
18
|
+
}
|
19
|
+
json_entity_type = 'Customer'
|
20
|
+
json_entity_collection = 'Customers'
|
21
|
+
|
22
|
+
it_behaves_like 'mapper', key_map, json_entity_type, json_entity_collection do
|
23
|
+
let(:mapper){ described_class.new }
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'fortnox/api'
|
3
|
+
require 'fortnox/api/mappers/default_delivery_types'
|
4
|
+
require 'fortnox/api/mappers/examples/mapper'
|
5
|
+
|
6
|
+
describe Fortnox::API::Mapper::DefaultDeliveryTypes do
|
7
|
+
key_map = {}
|
8
|
+
|
9
|
+
it_behaves_like 'mapper', key_map do
|
10
|
+
let(:mapper){ described_class.new }
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'fortnox/api'
|
3
|
+
require 'fortnox/api/mappers/edi_information'
|
4
|
+
require 'fortnox/api/mappers/examples/mapper'
|
5
|
+
|
6
|
+
describe Fortnox::API::Mapper::EDIInformation do
|
7
|
+
key_map = {
|
8
|
+
edi_global_location_number: 'EDIGlobalLocationNumber',
|
9
|
+
edi_global_location_number_delivery: 'EDIGlobalLocationNumberDelivery',
|
10
|
+
edi_invoice_extra1: 'EDIInvoiceExtra1',
|
11
|
+
edi_invoice_extra2: 'EDIInvoiceExtra2',
|
12
|
+
edi_our_electronic_reference: 'EDIOurElectronicReference',
|
13
|
+
edi_your_electronic_reference: 'EDIYourElectronicReference'
|
14
|
+
}
|
15
|
+
json_entity_type = 'EDIInformation'
|
16
|
+
json_entity_collection = 'EDIInformation'
|
17
|
+
|
18
|
+
it_behaves_like 'mapper', key_map, json_entity_type, json_entity_collection do
|
19
|
+
let(:mapper){ described_class.new }
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'fortnox/api'
|
3
|
+
require 'fortnox/api/mappers/email_information'
|
4
|
+
require 'fortnox/api/mappers/examples/mapper'
|
5
|
+
|
6
|
+
describe Fortnox::API::Mapper::EmailInformation do
|
7
|
+
key_map = {
|
8
|
+
email_address_bcc: 'EmailAddressBCC',
|
9
|
+
email_address_cc: 'EmailAddressCC'
|
10
|
+
}
|
11
|
+
json_entity_type = 'EmailInformation'
|
12
|
+
json_entity_collection = 'EmailInformation'
|
13
|
+
|
14
|
+
it_behaves_like 'mapper', key_map, json_entity_type, json_entity_collection do
|
15
|
+
let(:mapper){ described_class.new }
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
shared_examples_for 'mapper' do |key_map, json_entity_wrapper = nil, json_collection_wrapper = nil, check_constants: true|
|
2
|
+
it{ is_expected.to respond_to(:wrapped_json_collection_to_entities_hash) }
|
3
|
+
it{ is_expected.to respond_to(:wrapped_json_hash_to_entity_hash) }
|
4
|
+
it{ is_expected.to respond_to(:entity_to_hash) }
|
5
|
+
|
6
|
+
if check_constants
|
7
|
+
describe 'key_map' do
|
8
|
+
subject{ described_class::KEY_MAP }
|
9
|
+
it{ is_expected.to eq(key_map) }
|
10
|
+
end
|
11
|
+
|
12
|
+
unless json_entity_wrapper.nil?
|
13
|
+
describe 'json_entity_wrapper' do
|
14
|
+
subject{ described_class::JSON_ENTITY_WRAPPER }
|
15
|
+
it{ is_expected.to eq(json_entity_wrapper) }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
unless json_collection_wrapper.nil?
|
20
|
+
describe 'json_collection_wrapper' do
|
21
|
+
subject{ described_class::JSON_COLLECTION_WRAPPER }
|
22
|
+
it{ is_expected.to eq(json_collection_wrapper) }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'fortnox/api'
|
3
|
+
require 'fortnox/api/mappers/invoice_row'
|
4
|
+
require 'fortnox/api/mappers/examples/mapper'
|
5
|
+
|
6
|
+
describe Fortnox::API::Mapper::InvoiceRow do
|
7
|
+
key_map = {
|
8
|
+
vat: 'VAT',
|
9
|
+
price_excluding_vat: 'PriceExcludingVAT',
|
10
|
+
total_excluding_vat: 'TotalExcludingVAT'
|
11
|
+
}
|
12
|
+
|
13
|
+
json_entity_type = 'InvoiceRow'
|
14
|
+
json_entity_collection = 'InvoiceRows'
|
15
|
+
|
16
|
+
it_behaves_like 'mapper', key_map, json_entity_type, json_entity_collection do
|
17
|
+
let(:mapper){ described_class.new }
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'fortnox/api'
|
3
|
+
require 'fortnox/api/mappers/invoice'
|
4
|
+
require 'fortnox/api/mappers/examples/mapper'
|
5
|
+
|
6
|
+
describe Fortnox::API::Mapper::Invoice do
|
7
|
+
key_map =
|
8
|
+
{
|
9
|
+
administration_fee_vat: 'AdministrationFeeVAT',
|
10
|
+
edi_information: 'EDIInformation',
|
11
|
+
eu_quarterly_report: 'EUQuarterlyReport',
|
12
|
+
freight_vat: 'FreightVAT',
|
13
|
+
ocr: 'OCR',
|
14
|
+
total_vat: 'TotalVAT',
|
15
|
+
vat_included: 'VATIncluded'
|
16
|
+
}
|
17
|
+
|
18
|
+
json_entity_type = 'Invoice'
|
19
|
+
json_entity_collection = 'Invoices'
|
20
|
+
|
21
|
+
it_behaves_like 'mapper', key_map, json_entity_type, json_entity_collection do
|
22
|
+
let(:mapper){ described_class.new }
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'fortnox/api'
|
3
|
+
require 'fortnox/api/mappers/order_row'
|
4
|
+
require 'fortnox/api/mappers/examples/mapper'
|
5
|
+
|
6
|
+
describe Fortnox::API::Mapper::OrderRow do
|
7
|
+
key_map = { vat: 'VAT' }
|
8
|
+
json_entity_type = 'OrderRow'
|
9
|
+
json_entity_collection = 'OrderRows'
|
10
|
+
|
11
|
+
it_behaves_like 'mapper', key_map, json_entity_type, json_entity_collection do
|
12
|
+
let(:mapper){ described_class.new }
|
13
|
+
end
|
14
|
+
end
|