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,9 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
shared_examples_for 'equals input' do |input|
|
2
|
-
subject{ klass[
|
3
|
-
|
4
|
+
subject { klass[input] }
|
5
|
+
|
6
|
+
it { is_expected.to eq input }
|
4
7
|
end
|
5
8
|
|
6
9
|
shared_examples_for 'raises ConstraintError' do |input|
|
7
|
-
subject{ ->{ klass[
|
8
|
-
|
10
|
+
subject { -> { klass[input] } }
|
11
|
+
|
12
|
+
it { is_expected.to raise_error(Dry::Types::ConstraintError) }
|
9
13
|
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'fortnox/api'
|
5
|
+
require 'fortnox/api/types'
|
6
|
+
require 'fortnox/api/repositories/order'
|
7
|
+
require 'fortnox/api/models/order'
|
8
|
+
require 'fortnox/api/types/order_row'
|
9
|
+
|
10
|
+
# rubocop:disable RSpec/DescribeClass
|
11
|
+
describe 'HouseworkTypes', integration: true do
|
12
|
+
include Helpers::Configuration
|
13
|
+
|
14
|
+
before { set_api_test_configuration }
|
15
|
+
|
16
|
+
let(:repository) { Fortnox::API::Repository::Order.new }
|
17
|
+
let(:valid_model) do
|
18
|
+
Fortnox::API::Model::Order.new(customer_number: '1', order_rows: [order_row])
|
19
|
+
end
|
20
|
+
let(:order_row) do
|
21
|
+
Fortnox::API::Types::OrderRow.new(ordered_quantity: 1,
|
22
|
+
article_number: '0000',
|
23
|
+
housework_type: housework_type)
|
24
|
+
end
|
25
|
+
|
26
|
+
shared_examples_for 'housework type' do |type, legacy: false|
|
27
|
+
subject do
|
28
|
+
lambda do
|
29
|
+
VCR.use_cassette("orders/housework_type_#{type.downcase}") do
|
30
|
+
repository.save(valid_model)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
let(:error_message) { 'Skattereduktion för den valda typen av husarbete har upphört.' }
|
36
|
+
let(:housework_type) { Fortnox::API::Types::HouseworkTypes[type] }
|
37
|
+
|
38
|
+
context "when creating an OrderRow with housework_type set to #{type}" do
|
39
|
+
if legacy
|
40
|
+
it 'raises an error' do
|
41
|
+
is_expected.to raise_error(Fortnox::API::RemoteServerError, error_message)
|
42
|
+
end
|
43
|
+
else
|
44
|
+
it { is_expected.not_to raise_error }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
it_behaves_like 'housework type', 'CONSTRUCTION'
|
50
|
+
it_behaves_like 'housework type', 'ELECTRICITY'
|
51
|
+
it_behaves_like 'housework type', 'GLASSMETALWORK'
|
52
|
+
it_behaves_like 'housework type', 'GROUNDDRAINAGEWORK'
|
53
|
+
it_behaves_like 'housework type', 'MASONRY'
|
54
|
+
it_behaves_like 'housework type', 'PAINTINGWALLPAPERING'
|
55
|
+
it_behaves_like 'housework type', 'HVAC'
|
56
|
+
it_behaves_like 'housework type', 'CLEANING'
|
57
|
+
it_behaves_like 'housework type', 'TEXTILECLOTHING'
|
58
|
+
it_behaves_like 'housework type', 'CLEANING'
|
59
|
+
it_behaves_like 'housework type', 'SNOWPLOWING'
|
60
|
+
it_behaves_like 'housework type', 'GARDENING'
|
61
|
+
it_behaves_like 'housework type', 'BABYSITTING'
|
62
|
+
it_behaves_like 'housework type', 'OTHERCARE'
|
63
|
+
it_behaves_like 'housework type', 'OTHERCOSTS'
|
64
|
+
|
65
|
+
it_behaves_like 'housework type', 'COOKING', legacy: true
|
66
|
+
it_behaves_like 'housework type', 'TUTORING', legacy: true
|
67
|
+
end
|
68
|
+
# rubocop:enable RSpec/DescribeClass
|
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
require 'fortnox/api/types/invoice_row'
|
3
5
|
require 'fortnox/api/types/examples/document_row'
|
4
6
|
|
5
7
|
RSpec.describe Fortnox::API::Types::InvoiceRow, type: :type do
|
6
|
-
subject{ described_class }
|
8
|
+
subject { described_class }
|
7
9
|
|
8
10
|
it_behaves_like 'DocumentRow', {}
|
9
11
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
require 'dry-struct'
|
3
5
|
require 'fortnox/api/types/model'
|
@@ -8,7 +10,7 @@ RSpec.describe Fortnox::API::Types::Model do
|
|
8
10
|
module Types
|
9
11
|
include Dry::Types.module
|
10
12
|
|
11
|
-
Age = Int.constrained(gt: 18).
|
13
|
+
Age = Int.constrained(gt: 18).is(:required)
|
12
14
|
end
|
13
15
|
|
14
16
|
class TypesModelUser < Fortnox::API::Types::Model
|
@@ -16,16 +18,16 @@ RSpec.describe Fortnox::API::Types::Model do
|
|
16
18
|
end
|
17
19
|
end
|
18
20
|
|
19
|
-
describe "User inheriting from #{
|
20
|
-
subject{ ->{ TypesModelUser.new(args) } }
|
21
|
+
describe "User inheriting from #{described_class}" do
|
22
|
+
subject { -> { TypesModelUser.new(args) } }
|
21
23
|
|
22
|
-
it{ is_expected.to raise_error(error) }
|
24
|
+
it { is_expected.to raise_error(error) }
|
23
25
|
end
|
24
26
|
end
|
25
27
|
|
26
28
|
context 'without required keys' do
|
27
29
|
include_examples 'raises error', Fortnox::API::MissingAttributeError do
|
28
|
-
let(:args){ {} }
|
30
|
+
let(:args) { {} }
|
29
31
|
end
|
30
32
|
end
|
31
33
|
|
@@ -44,13 +46,14 @@ RSpec.describe Fortnox::API::Types::Model do
|
|
44
46
|
end
|
45
47
|
end
|
46
48
|
|
47
|
-
subject{ ->{ User.new
|
49
|
+
subject { -> { User.new } }
|
48
50
|
|
49
|
-
it{ is_expected.not_to raise_error }
|
51
|
+
it { is_expected.not_to raise_error }
|
50
52
|
|
51
53
|
describe 'optional attribute' do
|
52
|
-
subject{ User.new
|
53
|
-
|
54
|
+
subject { User.new.optional_string }
|
55
|
+
|
56
|
+
it { is_expected.to be nil }
|
54
57
|
end
|
55
58
|
end
|
56
59
|
end
|
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
require 'dry-struct'
|
3
5
|
require 'fortnox/api/types'
|
4
6
|
|
5
7
|
describe Fortnox::API::Types::Nullable, type: :type do
|
6
|
-
subject{ TestStruct }
|
8
|
+
subject { TestStruct }
|
7
9
|
|
8
10
|
describe 'String' do
|
9
11
|
using_test_class do
|
@@ -12,7 +14,7 @@ describe Fortnox::API::Types::Nullable, type: :type do
|
|
12
14
|
end
|
13
15
|
end
|
14
16
|
|
15
|
-
it{ is_expected.to have_nullable(:string, 'A simple message', 0, '0') }
|
17
|
+
it { is_expected.to have_nullable(:string, 'A simple message', 0, '0') }
|
16
18
|
end
|
17
19
|
|
18
20
|
describe 'Float' do
|
@@ -22,7 +24,7 @@ describe Fortnox::API::Types::Nullable, type: :type do
|
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|
25
|
-
it{ is_expected.to have_nullable(:float, 14.0, 'Not a Float!', 0.0) }
|
27
|
+
it { is_expected.to have_nullable(:float, 14.0, 'Not a Float!', 0.0) }
|
26
28
|
end
|
27
29
|
|
28
30
|
describe 'Integer' do
|
@@ -32,7 +34,7 @@ describe Fortnox::API::Types::Nullable, type: :type do
|
|
32
34
|
end
|
33
35
|
end
|
34
36
|
|
35
|
-
it{ is_expected.to have_nullable(:integer, 14, 14.0, 14) }
|
37
|
+
it { is_expected.to have_nullable(:integer, 14, 14.0, 14) }
|
36
38
|
end
|
37
39
|
|
38
40
|
describe 'Boolean' do
|
@@ -42,7 +44,7 @@ describe Fortnox::API::Types::Nullable, type: :type do
|
|
42
44
|
end
|
43
45
|
end
|
44
46
|
|
45
|
-
it{ is_expected.to have_nullable(:boolean, true, 'Not a Boolean!', false) }
|
47
|
+
it { is_expected.to have_nullable(:boolean, true, 'Not a Boolean!', false) }
|
46
48
|
end
|
47
49
|
|
48
50
|
describe 'Date' do
|
@@ -52,6 +54,6 @@ describe Fortnox::API::Types::Nullable, type: :type do
|
|
52
54
|
end
|
53
55
|
end
|
54
56
|
|
55
|
-
it{ is_expected.to have_nullable_date(:date, Date.new(2016, 1, 1), 'Not a Date!') }
|
57
|
+
it { is_expected.to have_nullable_date(:date, Date.new(2016, 1, 1), 'Not a Date!') }
|
56
58
|
end
|
57
59
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
require 'fortnox/api/types/order_row'
|
3
5
|
require 'fortnox/api/types/examples/document_row'
|
@@ -5,9 +7,9 @@ require 'fortnox/api/types/examples/document_row'
|
|
5
7
|
RSpec.describe Fortnox::API::Types::OrderRow, type: :type do
|
6
8
|
valid_hash = { ordered_quantity: 10.5 }
|
7
9
|
|
8
|
-
subject{ described_class }
|
10
|
+
subject { described_class }
|
9
11
|
|
10
|
-
it{ is_expected.to require_attribute(
|
12
|
+
it { is_expected.to require_attribute(:ordered_quantity, valid_hash) }
|
11
13
|
|
12
14
|
it_behaves_like 'DocumentRow', valid_hash
|
13
15
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
require 'fortnox/api/types'
|
3
5
|
require 'fortnox/api/types/required'
|
@@ -9,10 +11,10 @@ describe Fortnox::API::Types::Required, type: :type do
|
|
9
11
|
end
|
10
12
|
|
11
13
|
shared_examples_for 'required attribute' do |_type|
|
12
|
-
subject{ ->{ TestClass.new({}) } }
|
14
|
+
subject { -> { TestClass.new({}) } }
|
13
15
|
|
14
16
|
let(:error_message) do
|
15
|
-
"[#{
|
17
|
+
"[#{TestClass}.new] #{:required_attribute.inspect} is missing in Hash input"
|
16
18
|
end
|
17
19
|
|
18
20
|
it 'raises an error' do
|
@@ -1,65 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
require 'fortnox/api/types'
|
3
5
|
require 'fortnox/api/types/examples/types'
|
4
6
|
|
5
7
|
describe Fortnox::API::Types::Sized do
|
6
|
-
|
7
8
|
shared_examples_for 'Sized Types' do
|
8
|
-
context 'created with nil' do
|
9
|
-
subject{ klass[
|
10
|
-
|
9
|
+
context 'when created with nil' do
|
10
|
+
subject { klass[nil] }
|
11
|
+
|
12
|
+
it { is_expected.to be_nil }
|
11
13
|
end
|
12
14
|
end
|
13
15
|
|
14
16
|
describe 'String' do
|
15
17
|
max_size = 5
|
16
|
-
let(
|
18
|
+
let(:klass) { described_class::String[max_size] }
|
17
19
|
|
18
20
|
it_behaves_like 'Sized Types'
|
19
21
|
|
20
|
-
context 'created with empty string' do
|
22
|
+
context 'when created with empty string' do
|
21
23
|
include_examples 'equals input', ''
|
22
24
|
end
|
23
25
|
|
24
|
-
context 'created with fewer characters than the limit' do
|
26
|
+
context 'when created with fewer characters than the limit' do
|
25
27
|
include_examples 'equals input', 'a' * (max_size - 1)
|
26
28
|
end
|
27
29
|
|
28
|
-
context 'created with valid string' do
|
30
|
+
context 'when created with valid string' do
|
29
31
|
include_examples 'equals input', 'a' * max_size
|
30
32
|
end
|
31
33
|
|
32
|
-
context 'created with more characters than the limit' do
|
34
|
+
context 'when created with more characters than the limit' do
|
33
35
|
include_examples 'raises ConstraintError', 'a' * (max_size + 1)
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
37
39
|
shared_examples_for 'Sized Numeric' do |type, min, max, step|
|
38
|
-
let(
|
40
|
+
let(:klass) { described_class.const_get(type)[min, max] }
|
39
41
|
|
40
42
|
it_behaves_like 'Sized Types'
|
41
43
|
|
42
|
-
context 'created with value below the lower limit' do
|
44
|
+
context 'when created with value below the lower limit' do
|
43
45
|
include_examples 'raises ConstraintError', min - step
|
44
46
|
end
|
45
47
|
|
46
|
-
context 'created with value at the lower limit' do
|
48
|
+
context 'when created with value at the lower limit' do
|
47
49
|
include_examples 'equals input', min
|
48
50
|
end
|
49
51
|
|
50
|
-
context 'created with valid number near lower limit' do
|
52
|
+
context 'when created with valid number near lower limit' do
|
51
53
|
include_examples 'equals input', min + step
|
52
54
|
end
|
53
55
|
|
54
|
-
context 'created with valid number near upper limit' do
|
56
|
+
context 'when created with valid number near upper limit' do
|
55
57
|
include_examples 'equals input', max - step
|
56
58
|
end
|
57
59
|
|
58
|
-
context 'created with value at the upper limit' do
|
60
|
+
context 'when created with value at the upper limit' do
|
59
61
|
include_examples 'equals input', max
|
60
62
|
end
|
61
63
|
|
62
|
-
context 'created with value above the upper limit' do
|
64
|
+
context 'when created with value above the upper limit' do
|
63
65
|
include_examples 'raises ConstraintError', max + step
|
64
66
|
end
|
65
67
|
end
|
data/spec/fortnox/api_spec.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
require 'fortnox/api'
|
3
5
|
|
@@ -12,144 +14,144 @@ describe Fortnox::API do
|
|
12
14
|
end
|
13
15
|
|
14
16
|
describe 'configuration defaults' do
|
15
|
-
subject(:config_value){ described_class.config[config_key] }
|
17
|
+
subject(:config_value) { described_class.config[config_key] }
|
16
18
|
|
17
|
-
before{ Fortnox::API::TestBase.new }
|
19
|
+
before { Fortnox::API::TestBase.new }
|
18
20
|
|
19
21
|
describe 'base_url' do
|
20
|
-
let(
|
22
|
+
let(:config_key) { :base_url }
|
21
23
|
|
22
|
-
it{ is_expected.to eql 'https://api.fortnox.se/3/' }
|
24
|
+
it { is_expected.to eql 'https://api.fortnox.se/3/' }
|
23
25
|
end
|
24
26
|
|
25
27
|
describe 'client_secret' do
|
26
|
-
let(
|
28
|
+
let(:config_key) { :client_secret }
|
27
29
|
|
28
|
-
it{ is_expected.to be_nil }
|
30
|
+
it { is_expected.to be_nil }
|
29
31
|
end
|
30
32
|
|
31
33
|
describe 'access_token' do
|
32
|
-
let(
|
34
|
+
let(:config_key) { :access_token }
|
33
35
|
|
34
|
-
it{ is_expected.to be_nil }
|
36
|
+
it { is_expected.to be_nil }
|
35
37
|
end
|
36
38
|
|
37
39
|
describe 'access_tokens' do
|
38
|
-
let(
|
40
|
+
let(:config_key) { :access_tokens }
|
39
41
|
|
40
|
-
it{ is_expected.to be_nil }
|
42
|
+
it { is_expected.to be_nil }
|
41
43
|
end
|
42
44
|
|
43
45
|
describe 'token_store' do
|
44
|
-
let(
|
46
|
+
let(:config_key) { :token_store }
|
45
47
|
|
46
|
-
it{ is_expected.to eql(
|
48
|
+
it { is_expected.to eql({}) }
|
47
49
|
end
|
48
50
|
|
49
51
|
describe 'debugging' do
|
50
|
-
let(
|
52
|
+
let(:config_key) { :debugging }
|
51
53
|
|
52
|
-
it{ is_expected.to be false }
|
54
|
+
it { is_expected.to be false }
|
53
55
|
end
|
54
56
|
|
55
57
|
describe 'logger' do
|
56
|
-
let(
|
58
|
+
let(:config_key) { :logger }
|
57
59
|
|
58
|
-
it{ is_expected.to be_a Logger }
|
60
|
+
it { is_expected.to be_a Logger }
|
59
61
|
|
60
62
|
describe 'level' do
|
61
|
-
subject{ config_value.level }
|
63
|
+
subject { config_value.level }
|
62
64
|
|
63
|
-
it{ is_expected.to be Logger::WARN }
|
65
|
+
it { is_expected.to be Logger::WARN }
|
64
66
|
end
|
65
67
|
end
|
66
68
|
end
|
67
69
|
|
68
70
|
describe 'access_token' do
|
69
71
|
context 'when set to a String' do
|
70
|
-
subject{ described_class.config.access_token }
|
72
|
+
subject { described_class.config.access_token }
|
71
73
|
|
72
|
-
before{ described_class.configure{ |config| config.access_token = value } }
|
73
|
-
let(
|
74
|
+
before { described_class.configure { |config| config.access_token = value } }
|
75
|
+
let(:value) { '12345' }
|
74
76
|
|
75
|
-
it{ is_expected.to eql value }
|
77
|
+
it { is_expected.to eql value }
|
76
78
|
end
|
77
79
|
|
78
80
|
shared_examples_for 'invalid argument' do
|
79
|
-
subject{ ->{ described_class.configure{ |config| config.access_token = value } } }
|
81
|
+
subject { -> { described_class.configure { |config| config.access_token = value } } }
|
80
82
|
|
81
|
-
it{ is_expected.to raise_error(ArgumentError, /expected a String/) }
|
83
|
+
it { is_expected.to raise_error(ArgumentError, /expected a String/) }
|
82
84
|
end
|
83
85
|
|
84
86
|
context 'when set to a Hash' do
|
85
87
|
include_examples 'invalid argument' do
|
86
|
-
let(
|
88
|
+
let(:value) { { a: '123' } }
|
87
89
|
end
|
88
90
|
end
|
89
91
|
|
90
92
|
context 'when set to an Array' do
|
91
93
|
include_examples 'invalid argument' do
|
92
|
-
let(
|
94
|
+
let(:value) { %w[123 456] }
|
93
95
|
end
|
94
96
|
end
|
95
97
|
end
|
96
98
|
|
97
99
|
describe 'access_tokens' do
|
98
100
|
context 'when set to a String' do
|
99
|
-
subject{ ->{ described_class.configure{ |config| config.access_tokens = '12345' } } }
|
101
|
+
subject { -> { described_class.configure { |config| config.access_tokens = '12345' } } }
|
100
102
|
|
101
|
-
it{ is_expected.to raise_error(ArgumentError, /expected a Hash or an Array/) }
|
103
|
+
it { is_expected.to raise_error(ArgumentError, /expected a Hash or an Array/) }
|
102
104
|
end
|
103
105
|
|
104
106
|
shared_examples_for 'valid argument' do
|
105
|
-
subject{ described_class.configure{ |config| config.access_tokens = value } }
|
107
|
+
subject { described_class.configure { |config| config.access_tokens = value } }
|
106
108
|
|
107
|
-
it{ is_expected.to eql(
|
109
|
+
it { is_expected.to eql(value) }
|
108
110
|
end
|
109
111
|
|
110
112
|
context 'when set to a Hash' do
|
111
113
|
include_examples 'valid argument' do
|
112
|
-
let(
|
114
|
+
let(:value) { { a: '123', b: '456' } }
|
113
115
|
end
|
114
116
|
end
|
115
117
|
|
116
118
|
context 'when set to an Array' do
|
117
119
|
include_examples 'valid argument' do
|
118
|
-
let(
|
120
|
+
let(:value) { %w[123 456] }
|
119
121
|
end
|
120
122
|
end
|
121
123
|
end
|
122
124
|
|
123
125
|
describe 'token_store' do
|
124
|
-
subject{ described_class.config[:token_store] }
|
126
|
+
subject { described_class.config[:token_store] }
|
125
127
|
|
126
128
|
context 'when access_token set' do
|
127
|
-
before{ described_class.configure{ |config| config.access_token = access_token } }
|
128
|
-
let(
|
129
|
+
before { described_class.configure { |config| config.access_token = access_token } }
|
130
|
+
let(:access_token) { '12345' }
|
129
131
|
|
130
|
-
it{ is_expected.to eql(default: access_token) }
|
132
|
+
it { is_expected.to eql(default: access_token) }
|
131
133
|
end
|
132
134
|
|
133
135
|
context 'when access_tokens is' do
|
134
|
-
before{ described_class.configure{ |config| config.access_tokens = access_tokens } }
|
136
|
+
before { described_class.configure { |config| config.access_tokens = access_tokens } }
|
135
137
|
|
136
138
|
describe 'a Hash' do
|
137
|
-
let(
|
139
|
+
let(:access_tokens) { { a: '123', b: '456' } }
|
138
140
|
|
139
|
-
it{ is_expected.to eql(
|
141
|
+
it { is_expected.to eql(access_tokens) }
|
140
142
|
end
|
141
143
|
|
142
144
|
describe 'an Array' do
|
143
|
-
let(
|
145
|
+
let(:access_tokens) { %w[123 456] }
|
144
146
|
|
145
|
-
it{ is_expected.to eql(
|
147
|
+
it { is_expected.to eql(default: access_tokens) }
|
146
148
|
end
|
147
149
|
end
|
148
150
|
end
|
149
151
|
|
150
152
|
describe 'readers for' do
|
151
153
|
describe 'debugging' do
|
152
|
-
subject{ described_class.debugging }
|
154
|
+
subject { described_class.debugging }
|
153
155
|
|
154
156
|
it 'is available' do
|
155
157
|
is_expected.to be false
|
@@ -157,7 +159,7 @@ describe Fortnox::API do
|
|
157
159
|
end
|
158
160
|
|
159
161
|
describe 'logger' do
|
160
|
-
subject{ described_class.logger }
|
162
|
+
subject { described_class.logger }
|
161
163
|
|
162
164
|
it 'is available' do
|
163
165
|
is_expected.to be_a Logger
|