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
@@ -1,29 +0,0 @@
|
|
1
|
-
require "fortnox/api/validators/base"
|
2
|
-
require "fortnox/api/validators/attributes/country_code"
|
3
|
-
require "fortnox/api/validators/attributes/currency"
|
4
|
-
|
5
|
-
module Fortnox
|
6
|
-
module API
|
7
|
-
module Validator
|
8
|
-
class Customer < Fortnox::API::Validator::Base
|
9
|
-
|
10
|
-
include Fortnox::API::Validator::Attribute::CountryCode
|
11
|
-
include Fortnox::API::Validator::Attribute::Currency
|
12
|
-
|
13
|
-
using_validations do
|
14
|
-
|
15
|
-
VAT_TYPES = ['SEVAT', 'SEREVERSEDVAT', 'EUREVERSEDVAT', 'EUVAT', 'EXPORT']
|
16
|
-
TYPES = ['PRIVATE', 'COMPANY']
|
17
|
-
|
18
|
-
validates_presence_of :name
|
19
|
-
|
20
|
-
validates_inclusion_of :sales_account, within: (0..9999), if: :sales_account?
|
21
|
-
validates_inclusion_of :type, within: TYPES, if: :type?
|
22
|
-
validates_inclusion_of :vat_type, within: VAT_TYPES, if: :vat_type?
|
23
|
-
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require "fortnox/api/validators/base"
|
2
|
-
|
3
|
-
module Fortnox
|
4
|
-
module API
|
5
|
-
module Validator
|
6
|
-
class EmailInformation < Fortnox::API::Validator::Base
|
7
|
-
|
8
|
-
using_validations do
|
9
|
-
validates_length_of :email_address_to, length: 0..1024, if: :email_address_to?
|
10
|
-
validates_length_of :email_address_cc, length: 0..1024, if: :email_address_cc?
|
11
|
-
validates_length_of :email_address_bcc, length: 0..1024, if: :email_address_bcc?
|
12
|
-
validates_length_of :email_subject, length: 0..100, if: :email_subject?
|
13
|
-
validates_length_of :email_body, length: 0..20000, if: :email_body?
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
require "fortnox/api/validators/base"
|
2
|
-
|
3
|
-
module Fortnox
|
4
|
-
module API
|
5
|
-
module Validator
|
6
|
-
class Invoice < Fortnox::API::Validator::Base
|
7
|
-
|
8
|
-
using_validations do
|
9
|
-
validates_presence_of :customer_number
|
10
|
-
|
11
|
-
validates_inclusion_of :administration_fee, within: (0..99_999_999_999.0), if: :administration_fee?
|
12
|
-
validates_inclusion_of :currency_rate, within: (0..999_999_999_999_999.0), if: :currency_rate?
|
13
|
-
validates_inclusion_of :currency_unit, within: (0..999_999_999_999_999.0), if: :currency_unit?
|
14
|
-
validates_inclusion_of :freight, within: (0..99_999_999_999.0), if: :freight?
|
15
|
-
|
16
|
-
validates_length_of :address1, length: 0..1024, if: :address1?
|
17
|
-
validates_length_of :address2, length: 0..1024, if: :address2?
|
18
|
-
validates_length_of :customer_name, length: 0..1024, if: :customer_name?
|
19
|
-
validates_length_of :external_invoice_reference1, length: 0..80, if: :external_invoice_reference1?
|
20
|
-
validates_length_of :external_invoice_reference2, length: 0..80, if: :external_invoice_reference2?
|
21
|
-
validates_length_of :our_reference, length: 0..50, if: :our_reference?
|
22
|
-
validates_length_of :phone1, length: 0..1024, if: :phone1?
|
23
|
-
validates_length_of :phone2, length: 0..1024, if: :phone2?
|
24
|
-
validates_length_of :remarks, length: 0..1024, if: :remarks?
|
25
|
-
validates_length_of :your_order_number, length: 0..30, if: :your_order_number?
|
26
|
-
validates_length_of :your_reference, length: 0..50, if: :your_reference?
|
27
|
-
validates_length_of :zip_code, length: 0..1024, if: :zip_code?
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
require "fortnox/api/validators/base"
|
2
|
-
|
3
|
-
module Fortnox
|
4
|
-
module API
|
5
|
-
module Validator
|
6
|
-
class Row < Fortnox::API::Validator::Base
|
7
|
-
|
8
|
-
using_validations do
|
9
|
-
validates_length_of :article_number, length: 0..50, if: :article_number?
|
10
|
-
validates_length_of :description, length: 0..50, if: :description?
|
11
|
-
|
12
|
-
validates_inclusion_of :account_number, within: (0..9999), if: :account_number?
|
13
|
-
validates_inclusion_of :delivered_quantity, within: (0..9_999_999_999_999.0), if: :delivered_quantity?
|
14
|
-
validates_inclusion_of :discount, within: (0..99_999_999_999.0), if: :discount?
|
15
|
-
validates_inclusion_of :house_work_hours_to_report, within: (0..99_999), if: :house_work_hours_to_report?
|
16
|
-
validates_inclusion_of :price, within: (0..99_999_999_999.0), if: :price?
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'fortnox/api/models/attributes/country_code'
|
3
|
-
require 'fortnox/api/models/attributes/dummy_model_context'
|
4
|
-
|
5
|
-
describe Fortnox::API::Model::Attribute::CountryCode do
|
6
|
-
|
7
|
-
include_context 'create dummy Model that includes described_class'
|
8
|
-
|
9
|
-
describe '.new' do
|
10
|
-
context 'with country code' do
|
11
|
-
it 'ignores empty values' do
|
12
|
-
test_case = Model.new()
|
13
|
-
expect( test_case.country_code ).to eql( nil )
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'truncates to two characters' do
|
17
|
-
test_case = Model.new( country_code: 'sek' )
|
18
|
-
expect( test_case.country_code ).to eql( 'SE' )
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'fortnox/api/models/attributes/currency'
|
3
|
-
require 'fortnox/api/models/attributes/dummy_model_context'
|
4
|
-
|
5
|
-
describe Fortnox::API::Model::Attribute::Currency do
|
6
|
-
|
7
|
-
include_context 'create dummy Model that includes described_class'
|
8
|
-
|
9
|
-
subject{ instance.currency }
|
10
|
-
|
11
|
-
describe '.new' do
|
12
|
-
context 'with empty country code' do
|
13
|
-
let( :instance ){ Model.new() }
|
14
|
-
it{ is_expected.to eql( nil ) }
|
15
|
-
end
|
16
|
-
|
17
|
-
context 'with too long country code' do
|
18
|
-
let( :instance ){ Model.new( currency: 'usdollar' ) }
|
19
|
-
it{ is_expected.to eql( 'USD' ) }
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'fortnox/api/models/row'
|
3
|
-
|
4
|
-
describe Fortnox::API::Model::Row do
|
5
|
-
describe '.new' do
|
6
|
-
it{ is_expected.to upcase_lower_case_for( :discount_type, 'amount' ) }
|
7
|
-
it{ is_expected.to upcase_lower_case_for( :house_work_type, 'cooking' ) }
|
8
|
-
|
9
|
-
it{ is_expected.to return_nil_for_invalid_types( :discount_type, 'INVALID_TYPE' ) }
|
10
|
-
it{ is_expected.to return_nil_for_invalid_types( :house_work_type, 'INVALID_TYPE' ) }
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
@@ -1,10 +0,0 @@
|
|
1
|
-
require 'fortnox/api/repositories/examples'
|
2
|
-
require 'fortnox/api'
|
3
|
-
|
4
|
-
shared_context 'repository context' do
|
5
|
-
before(:each){
|
6
|
-
ENV['FORTNOX_API_BASE_URL'] = 'http://api.fortnox.se/3'
|
7
|
-
ENV['FORTNOX_API_CLIENT_SECRET'] = '9aBA8ZgsvR'
|
8
|
-
ENV['FORTNOX_API_ACCESS_TOKEN'] = 'ccaef817-d5d8-4b1c-a316-54f3e55c5c54'
|
9
|
-
}
|
10
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
shared_examples_for 'repositories' do |model_class|
|
2
|
-
describe '#save' do
|
3
|
-
context "new #{model_class}" do
|
4
|
-
let( :repository ){ described_class.new }
|
5
|
-
let( :model ){ model_class.new( unsaved: false ) }
|
6
|
-
|
7
|
-
before do
|
8
|
-
# Should not make an API request in test!
|
9
|
-
expect( repository ).not_to receive( :save_new )
|
10
|
-
expect( repository ).not_to receive( :update_existing )
|
11
|
-
end
|
12
|
-
|
13
|
-
specify{ expect( repository.save( model )).to eql( true ) }
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,9 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'fortnox/api/models/base'
|
3
|
-
require 'fortnox/api/models/attributes/country_code'
|
4
|
-
require 'fortnox/api/validators/attributes/country_code'
|
5
|
-
require 'fortnox/api/validators/attributes/examples_for_validate'
|
6
|
-
|
7
|
-
describe Fortnox::API::Validator::Attribute::CountryCode do
|
8
|
-
include_examples '.validate', :country_code, 'aaa', 'SE'
|
9
|
-
end
|
@@ -1,9 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'fortnox/api/models/base'
|
3
|
-
require 'fortnox/api/models/attributes/currency'
|
4
|
-
require 'fortnox/api/validators/attributes/currency'
|
5
|
-
require 'fortnox/api/validators/attributes/examples_for_validate'
|
6
|
-
|
7
|
-
describe Fortnox::API::Validator::Attribute::Currency do
|
8
|
-
include_examples '.validate', :currency, '-_-', 'SEK'
|
9
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
shared_examples_for '.validate' do |attribute, invalid_attribute, valid_attribute|
|
2
|
-
using_test_classes do
|
3
|
-
const_name = attribute.to_s.split('_').map(&:capitalize).join
|
4
|
-
|
5
|
-
class Model < Fortnox::API::Model::Base
|
6
|
-
end
|
7
|
-
Model.send( :include, Fortnox::API::Model::Attribute. const_get( const_name ) )
|
8
|
-
|
9
|
-
class Validator < Fortnox::API::Validator::Base
|
10
|
-
end
|
11
|
-
Validator.send( :include, Fortnox::API::Validator::Attribute. const_get( const_name ) )
|
12
|
-
end
|
13
|
-
|
14
|
-
describe '.validate' do
|
15
|
-
subject{ Validator.new }
|
16
|
-
|
17
|
-
context "with :#{attribute} set to '#{invalid_attribute}'" do
|
18
|
-
let( :invalid_model ){ Model.new( attribute => invalid_attribute ) }
|
19
|
-
|
20
|
-
specify{ expect(subject.validate( invalid_model )).to eql( false ) }
|
21
|
-
end
|
22
|
-
|
23
|
-
context "with :#{attribute} set to '#{valid_attribute}'" do
|
24
|
-
let( :valid_model ){ Model.new( attribute => valid_attribute ) }
|
25
|
-
|
26
|
-
specify{ expect( subject.validate( valid_model )).to eql( true ) }
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'fortnox/api/models/base'
|
3
|
-
require 'fortnox/api/validators/base'
|
4
|
-
require 'fortnox/api/validators/validator_examples'
|
5
|
-
|
6
|
-
describe Fortnox::API::Validator::Base do
|
7
|
-
|
8
|
-
using_test_classes do
|
9
|
-
class Model < Fortnox::API::Model::Base
|
10
|
-
attribute :test_attribute, String
|
11
|
-
end
|
12
|
-
|
13
|
-
class Validator < Fortnox::API::Validator::Base
|
14
|
-
using_validations do
|
15
|
-
validates_presence_of :test_attribute
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
subject{ Validator.new }
|
21
|
-
|
22
|
-
it_behaves_like 'validators' do
|
23
|
-
let( :valid_model ){ Model.new( test_attribute: 'something' ) }
|
24
|
-
end
|
25
|
-
|
26
|
-
describe 'violations' do
|
27
|
-
let( :invalid_model ){ Model.new }
|
28
|
-
let( :valid_model ){ Model.new(test_attribute: 'test') }
|
29
|
-
|
30
|
-
specify 'are not kept between validations' do
|
31
|
-
expect( subject.validate( invalid_model ) ).to be false
|
32
|
-
expect( subject.validate( valid_model ) ).to be true
|
33
|
-
end
|
34
|
-
|
35
|
-
specify 'are not kept between instances' do
|
36
|
-
expect( subject.validate( invalid_model ) ).to be false
|
37
|
-
another_validator = Validator.new
|
38
|
-
|
39
|
-
expect( another_validator.validate( valid_model ) ).to be true
|
40
|
-
expect( another_validator.validate( invalid_model ) ).to be false
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
context 'when no validator given' do
|
45
|
-
let( :model ){ Model.new }
|
46
|
-
|
47
|
-
subject{ described_class.new }
|
48
|
-
|
49
|
-
specify '#validate raises an error' do
|
50
|
-
expect{ subject.validate( model ) }.to raise_error(ArgumentError)
|
51
|
-
end
|
52
|
-
|
53
|
-
specify '#instance raises an error' do
|
54
|
-
expect{ subject.instance }.to raise_error(ArgumentError)
|
55
|
-
end
|
56
|
-
|
57
|
-
specify '#violations raises an error' do
|
58
|
-
expect{ subject.violations }.to raise_error(ArgumentError)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'fortnox/api/validators/constant'
|
3
|
-
require 'fortnox/api/validators/validator_examples'
|
4
|
-
|
5
|
-
describe Fortnox::API::Validator::Constant do
|
6
|
-
|
7
|
-
subject{ Fortnox::API::Validator::Constant.new }
|
8
|
-
|
9
|
-
it_behaves_like 'validators' do
|
10
|
-
let( :valid_model ){ Class.new{}.new }
|
11
|
-
end
|
12
|
-
end
|
@@ -1,102 +0,0 @@
|
|
1
|
-
shared_context 'validator context' do
|
2
|
-
shared_examples_for 'behaves like valid' do |attribute, value|
|
3
|
-
let( :updated_model ){ valid_model.update( attribute => value ) }
|
4
|
-
|
5
|
-
it{ is_expected.to be_valid( updated_model ) }
|
6
|
-
end
|
7
|
-
|
8
|
-
shared_examples_for 'behaves like invalid' do |attribute, value, error_type|
|
9
|
-
let( :updated_model ){ valid_model.update( attribute => value ) }
|
10
|
-
|
11
|
-
it{ is_expected.to be_invalid( updated_model ) }
|
12
|
-
it{ is_expected.to include_error_for( updated_model, attribute, error_type ) }
|
13
|
-
end
|
14
|
-
shared_examples_for 'invalid' do |attribute, values, error_type|
|
15
|
-
values.each do |value|
|
16
|
-
context "when #{attribute.inspect} set to #{value}" do
|
17
|
-
include_examples 'behaves like invalid', attribute, value, error_type
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
shared_examples_for 'valid' do |attribute, values|
|
23
|
-
values.each do |value|
|
24
|
-
context "when #{attribute.inspect} set to #{value}" do
|
25
|
-
include_examples 'behaves like valid', attribute, value
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
shared_examples_for 'validates length of string' do |attribute, length|
|
31
|
-
context "with #{attribute.inspect} set to string with" do
|
32
|
-
context "length 0 (empty string)" do
|
33
|
-
include_examples 'behaves like valid', attribute, ''
|
34
|
-
end
|
35
|
-
|
36
|
-
context "length 1" do
|
37
|
-
include_examples 'behaves like valid', attribute, 'a'
|
38
|
-
end
|
39
|
-
context "max length (#{length} chars)" do
|
40
|
-
include_examples 'behaves like valid', attribute, 'a' * length
|
41
|
-
end
|
42
|
-
|
43
|
-
context "max length + 1 (#{length + 1})" do
|
44
|
-
include_examples 'behaves like invalid', attribute, 'a' * (length + 1), :length
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
shared_examples_for 'validates inclusion of number' do |attribute, min_value, max_value|
|
50
|
-
context "with #{attribute.inspect} set to" do
|
51
|
-
context "minimum value (#{min_value})" do
|
52
|
-
include_examples 'behaves like valid', attribute, min_value
|
53
|
-
end
|
54
|
-
|
55
|
-
context "maximum value (#{max_value})" do
|
56
|
-
include_examples 'behaves like valid', attribute, max_value
|
57
|
-
end
|
58
|
-
|
59
|
-
context "too small value (#{min_value - 1})" do
|
60
|
-
include_examples 'behaves like invalid', attribute, min_value - 1, :inclusion
|
61
|
-
end
|
62
|
-
|
63
|
-
context "too big value (#{max_value + 1})" do
|
64
|
-
include_examples 'behaves like invalid', attribute, max_value + 1, :inclusion
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
shared_examples_for 'validates inclusion of string' do |attribute, valid_strings, invalid_string|
|
70
|
-
context "with #{attribute.inspect} set to" do
|
71
|
-
valid_strings.each do |valid_string|
|
72
|
-
context "\"#{valid_string}\"" do
|
73
|
-
include_examples 'behaves like valid', attribute, valid_string
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
if invalid_string.nil?
|
78
|
-
self::NONSENSE_STRING = valid_strings.first + '123nonsense123'
|
79
|
-
else
|
80
|
-
self::NONSENSE_STRING = invalid_string
|
81
|
-
end
|
82
|
-
|
83
|
-
context "nonsense string '#{self::NONSENSE_STRING}'" do
|
84
|
-
# Try first valid string and append nonsense
|
85
|
-
include_examples 'behaves like invalid',
|
86
|
-
attribute,
|
87
|
-
self::NONSENSE_STRING,
|
88
|
-
:inclusion
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
shared_examples_for 'required attributes' do |model_class|
|
94
|
-
context 'with required attributes' do
|
95
|
-
it{ is_expected.to be_valid( valid_model ) }
|
96
|
-
end
|
97
|
-
|
98
|
-
context 'without required attributes' do
|
99
|
-
it{ is_expected.to_not be_valid( model_class.new ) }
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|