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
data/spec/spec_helper.rb
CHANGED
@@ -1,15 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
ENV['RUBY_ENV'] = 'test'
|
2
4
|
|
5
|
+
require 'simplecov'
|
6
|
+
|
7
|
+
SimpleCov.start
|
8
|
+
|
3
9
|
require 'rspec/collection_matchers'
|
4
10
|
require 'webmock/rspec'
|
5
11
|
require 'pry'
|
6
|
-
require "codeclimate-test-reporter"
|
7
12
|
require 'support/matchers'
|
8
13
|
require 'support/helpers'
|
9
14
|
require 'support/vcr_setup'
|
10
15
|
|
11
|
-
CodeClimate::TestReporter.start
|
12
|
-
|
13
16
|
RSpec.configure do |config|
|
14
17
|
config.run_all_when_everything_filtered = true
|
15
18
|
config.filter_run :focus
|
@@ -22,12 +25,12 @@ RSpec.configure do |config|
|
|
22
25
|
|
23
26
|
config.order = 'random'
|
24
27
|
|
25
|
-
WebMock.disable_net_connect!(
|
28
|
+
WebMock.disable_net_connect!(allow: 'codeclimate.com')
|
26
29
|
|
27
30
|
config.before do
|
28
31
|
module Test
|
29
32
|
def self.remove_constants
|
30
|
-
constants.each{ |const| remove_const(const) }
|
33
|
+
constants.each { |const| remove_const(const) }
|
31
34
|
self
|
32
35
|
end
|
33
36
|
end
|
@@ -40,7 +43,7 @@ RSpec.configure do |config|
|
|
40
43
|
# Reset configuration after each test run
|
41
44
|
config.after do
|
42
45
|
Fortnox::API::DEFAULT_CONFIGURATION.each do |key, value|
|
43
|
-
Fortnox::API.config.send("#{
|
46
|
+
Fortnox::API.config.send("#{key}=", value)
|
44
47
|
end
|
45
48
|
end
|
46
49
|
end
|
data/spec/support/helpers.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'dry-types'
|
2
4
|
|
3
5
|
module Helpers
|
4
6
|
def using_test_classes
|
5
|
-
around(
|
7
|
+
around(:all) do |example|
|
6
8
|
classes_before_examples = Object.constants
|
7
9
|
|
8
10
|
save_dry_types_state
|
@@ -16,15 +18,13 @@ module Helpers
|
|
16
18
|
|
17
19
|
clean_up_dry_types
|
18
20
|
|
19
|
-
classes_created_by_block.each
|
20
|
-
Object.send(:remove_const, klass)
|
21
|
-
end
|
21
|
+
classes_created_by_block.each { |klass| Object.send(:remove_const, klass) }
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
|
25
|
+
alias using_test_class using_test_classes
|
26
26
|
|
27
|
-
private
|
27
|
+
private
|
28
28
|
|
29
29
|
def save_dry_types_state
|
30
30
|
@types = Dry::Types.container._container.keys
|
@@ -32,8 +32,7 @@ private
|
|
32
32
|
|
33
33
|
def clean_up_dry_types
|
34
34
|
container = Dry::Types.container._container
|
35
|
-
(container.keys - @types).each{ |key| container.delete(key) }
|
35
|
+
(container.keys - @types).each { |key| container.delete(key) }
|
36
36
|
Dry::Types.instance_variable_set('@type_map', Concurrent::Map.new)
|
37
37
|
end
|
38
|
-
|
39
38
|
end
|
data/spec/support/matchers.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'support/matchers/type/attribute_matcher'
|
2
4
|
require 'support/matchers/type/type_matcher'
|
3
5
|
require 'support/matchers/type/have_nullable_matcher'
|
@@ -11,7 +13,7 @@ require 'support/matchers/type/have_sized_string_matcher'
|
|
11
13
|
require 'support/matchers/type/have_default_delivery_type_matcher'
|
12
14
|
require 'support/matchers/type/have_nullable_string_matcher'
|
13
15
|
require 'support/matchers/type/have_sized_float_matcher'
|
14
|
-
require 'support/matchers/type/
|
16
|
+
require 'support/matchers/type/have_housework_type_matcher'
|
15
17
|
require 'support/matchers/type/have_account_number_matcher'
|
16
18
|
require 'support/matchers/type/have_discount_type_matcher'
|
17
19
|
require 'support/matchers/type/have_sized_integer_matcher'
|
@@ -1,39 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Matchers
|
2
4
|
module Type
|
3
5
|
class AttributeMatcher
|
4
|
-
def initialize(
|
6
|
+
def initialize(attribute, valid_hash, attribute_type)
|
5
7
|
@attribute = attribute
|
6
8
|
@valid_hash = valid_hash.dup
|
7
9
|
@attribute_type = attribute_type
|
8
10
|
@errors = ''
|
9
11
|
end
|
10
12
|
|
11
|
-
def matches?
|
13
|
+
def matches?(klass)
|
12
14
|
@klass = klass
|
13
15
|
end
|
14
16
|
|
15
17
|
def description
|
16
|
-
"have #{
|
18
|
+
"have #{@attribute_type} attribute #{@attribute.inspect}"
|
17
19
|
end
|
18
20
|
|
19
21
|
def failure_message
|
20
|
-
"Expected class to have attribute #{
|
22
|
+
"Expected class to have attribute #{@attribute.inspect} defined as #{@attribute_type}, "\
|
21
23
|
"but got following errors:
|
22
|
-
#{
|
24
|
+
#{@errors}"
|
23
25
|
end
|
24
26
|
|
25
27
|
protected
|
26
28
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
@errors << msg
|
31
|
-
false # Fail test since expected error not thrown
|
32
|
-
rescue Dry::Struct::Error
|
33
|
-
# TODO: check if error message is correct
|
34
|
-
true
|
35
|
-
end
|
29
|
+
def expect_error(msg)
|
30
|
+
yield
|
36
31
|
|
32
|
+
@errors << msg
|
33
|
+
false # Fail test since expected error not thrown
|
34
|
+
rescue Dry::Struct::Error
|
35
|
+
# TODO: check if error message is correct
|
36
|
+
true
|
37
|
+
end
|
37
38
|
end
|
38
39
|
end
|
39
40
|
end
|
@@ -1,21 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Matchers
|
2
4
|
module Type
|
3
5
|
class EnumMatcher < TypeMatcher
|
4
|
-
def initialize(
|
6
|
+
def initialize(attribute, valid_hash, enum_type, enum_types, nonsense_value: 'NONSENSE')
|
5
7
|
valid_value = Fortnox::API::Types.const_get(enum_types).values.first
|
6
8
|
|
7
|
-
super(
|
9
|
+
super(attribute, valid_hash, enum_type, valid_value, nonsense_value)
|
8
10
|
|
9
11
|
@enum_type = Fortnox::API::Types.const_get(enum_type)
|
10
|
-
@expected_error = "Exception missing for nonsense value #{
|
12
|
+
@expected_error = "Exception missing for nonsense value #{@invalid_value.inspect}"
|
11
13
|
end
|
12
14
|
|
13
15
|
private
|
14
16
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
17
|
+
def expected_type?
|
18
|
+
@actual_type = @klass.schema[@attribute]
|
19
|
+
@actual_type == @enum_type
|
20
|
+
end
|
19
21
|
end
|
20
22
|
end
|
21
23
|
end
|
@@ -1,21 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Matchers
|
2
4
|
module Type
|
3
|
-
def have_account_number(
|
4
|
-
HaveAccountNumberMatcher.new(
|
5
|
+
def have_account_number(attribute, valid_hash = {})
|
6
|
+
HaveAccountNumberMatcher.new(attribute, valid_hash)
|
5
7
|
end
|
6
8
|
|
7
9
|
class HaveAccountNumberMatcher < TypeMatcher
|
8
|
-
def initialize(
|
9
|
-
super(
|
10
|
-
@expected_error = "Exception missing for invalid value #{
|
10
|
+
def initialize(attribute, valid_hash)
|
11
|
+
super(attribute, valid_hash, 'account number', 1000, -1)
|
12
|
+
@expected_error = "Exception missing for invalid value #{@invalid_value.inspect}"
|
11
13
|
end
|
12
14
|
|
13
15
|
private
|
14
16
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
17
|
+
def expected_type?
|
18
|
+
@actual_type = @klass.schema[@attribute]
|
19
|
+
@actual_type == Fortnox::API::Types::AccountNumber
|
20
|
+
end
|
19
21
|
end
|
20
22
|
end
|
21
23
|
end
|
@@ -1,12 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Matchers
|
2
4
|
module Type
|
3
|
-
def have_country_code(
|
4
|
-
HaveCountryCodeMatcher.new(
|
5
|
+
def have_country_code(attribute, valid_hash = {})
|
6
|
+
HaveCountryCodeMatcher.new(attribute, valid_hash)
|
5
7
|
end
|
6
8
|
|
7
9
|
class HaveCountryCodeMatcher < EnumMatcher
|
8
|
-
def initialize(
|
9
|
-
super(
|
10
|
+
def initialize(attribute, valid_hash)
|
11
|
+
super(attribute, valid_hash, 'CountryCode', 'CountryCodes', nonsense_value: 'XX')
|
10
12
|
end
|
11
13
|
end
|
12
14
|
end
|
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Matchers
|
2
4
|
module Type
|
3
|
-
def have_currency(
|
4
|
-
EnumMatcher.new(
|
5
|
+
def have_currency(attribute, valid_hash = {})
|
6
|
+
EnumMatcher.new(attribute, valid_hash, 'Currency', 'Currencies')
|
5
7
|
end
|
6
8
|
end
|
7
9
|
end
|
@@ -1,12 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Matchers
|
2
4
|
module Type
|
3
|
-
def have_customer_type(
|
4
|
-
HaveCustomerTypeMatcher.new(
|
5
|
+
def have_customer_type(attribute, valid_hash = {})
|
6
|
+
HaveCustomerTypeMatcher.new(attribute, valid_hash)
|
5
7
|
end
|
6
8
|
|
7
9
|
class HaveCustomerTypeMatcher < EnumMatcher
|
8
|
-
def initialize(
|
9
|
-
super(
|
10
|
+
def initialize(attribute, valid_hash)
|
11
|
+
super(attribute, valid_hash, 'CustomerType', 'CustomerTypes')
|
10
12
|
end
|
11
13
|
end
|
12
14
|
end
|
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Matchers
|
2
4
|
module Type
|
3
|
-
def have_default_delivery_type(
|
4
|
-
EnumMatcher.new(
|
5
|
+
def have_default_delivery_type(attribute, valid_hash = {})
|
6
|
+
EnumMatcher.new(attribute, valid_hash, 'DefaultDeliveryType', 'DefaultDeliveryTypeValues')
|
5
7
|
end
|
6
8
|
end
|
7
9
|
end
|
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Matchers
|
2
4
|
module Type
|
3
|
-
def have_discount_type(
|
4
|
-
EnumMatcher.new(
|
5
|
+
def have_discount_type(attribute, valid_hash = {})
|
6
|
+
EnumMatcher.new(attribute, valid_hash, 'DiscountType', 'DiscountTypes')
|
5
7
|
end
|
6
8
|
end
|
7
9
|
end
|
@@ -1,22 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Matchers
|
2
4
|
module Type
|
3
|
-
def have_email(
|
4
|
-
HaveEmailMatcher.new(
|
5
|
+
def have_email(attribute, valid_hash = {})
|
6
|
+
HaveEmailMatcher.new(attribute, valid_hash)
|
5
7
|
end
|
6
8
|
|
7
9
|
class HaveEmailMatcher < TypeMatcher
|
8
|
-
def initialize(
|
9
|
-
super(
|
10
|
-
@expected_error = "Exception missing for invalid value #{
|
10
|
+
def initialize(attribute, valid_hash)
|
11
|
+
super(attribute, valid_hash, 'email', 'valid@email.com', 'invalid@email_without_top_domain')
|
12
|
+
@expected_error = "Exception missing for invalid value #{@invalid_value.inspect}"
|
11
13
|
@expected_type = Fortnox::API::Types::Email
|
12
14
|
end
|
13
15
|
|
14
16
|
private
|
15
17
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
18
|
+
def expected_type?
|
19
|
+
@actual_type = @klass.schema[@attribute]
|
20
|
+
@actual_type == Fortnox::API::Types::Email
|
21
|
+
end
|
20
22
|
end
|
21
23
|
end
|
22
24
|
end
|
@@ -1,11 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Matchers
|
2
4
|
module Type
|
3
|
-
def have_nullable_date(
|
4
|
-
HaveNullableDateMatcher.new(
|
5
|
+
def have_nullable_date(attribute, valid_value, invalid_value)
|
6
|
+
HaveNullableDateMatcher.new(attribute, valid_value, invalid_value)
|
5
7
|
end
|
6
8
|
|
7
9
|
class HaveNullableDateMatcher < HaveNullableMatcher
|
8
|
-
def initialize(
|
10
|
+
def initialize(attribute, valid_value, invalid_value)
|
9
11
|
@attribute = attribute
|
10
12
|
@valid_value = valid_value
|
11
13
|
@invalid_value = invalid_value
|
@@ -14,45 +16,43 @@ module Matchers
|
|
14
16
|
@failure_description = ''
|
15
17
|
end
|
16
18
|
|
17
|
-
def matches?(
|
19
|
+
def matches?(klass)
|
18
20
|
@klass = klass
|
19
21
|
|
20
22
|
accepts_nil? && accepts_valid_value? && rejects_invalid_value?
|
21
23
|
end
|
22
24
|
|
23
25
|
def description
|
24
|
-
"have nullable attribute #{
|
26
|
+
"have nullable attribute #{@attribute.inspect}"
|
25
27
|
end
|
26
28
|
|
27
29
|
def failure_message
|
28
|
-
"Expected class to have nullable attribute #{
|
30
|
+
"Expected class to have nullable attribute #{@attribute.inspect}" << @failure_description
|
29
31
|
end
|
30
32
|
|
31
33
|
private
|
32
34
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
end
|
55
|
-
end
|
35
|
+
def accepts_nil?
|
36
|
+
@klass.new(@attribute => nil)
|
37
|
+
end
|
38
|
+
|
39
|
+
def accepts_valid_value?
|
40
|
+
model = @klass.new(@attribute => @valid_value)
|
41
|
+
model.send(@attribute) == @valid_value
|
42
|
+
end
|
43
|
+
|
44
|
+
def rejects_invalid_value?
|
45
|
+
@klass.new(@attribute => @invalid_value)
|
46
|
+
|
47
|
+
@failure_description << " (Expected #{@expected_error}, but got none)"
|
48
|
+
false
|
49
|
+
rescue @expected_error => error
|
50
|
+
return true if error.message == @expected_error_message
|
51
|
+
|
52
|
+
fail_message = "Expected error message to include #{expected_message.inspect}, "\
|
53
|
+
"but was #{error.message.inspect}"
|
54
|
+
raise(fail_message)
|
55
|
+
end
|
56
56
|
end
|
57
57
|
end
|
58
58
|
end
|