ledger_sync 1.3.3 → 1.3.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/.rubocop_todo.yml +0 -3
  4. data/Gemfile.lock +47 -44
  5. data/ledger_sync.gemspec +1 -1
  6. data/lib/ledger_sync.rb +5 -0
  7. data/lib/ledger_sync/adaptors/adaptor.rb +28 -0
  8. data/lib/ledger_sync/adaptors/netsuite/account/operations/create.rb +1 -1
  9. data/lib/ledger_sync/adaptors/netsuite/account/searcher.rb +0 -16
  10. data/lib/ledger_sync/adaptors/netsuite/adaptor.rb +11 -3
  11. data/lib/ledger_sync/adaptors/netsuite/currency/operations/create.rb +1 -1
  12. data/lib/ledger_sync/adaptors/netsuite/customer/operations/create.rb +1 -1
  13. data/lib/ledger_sync/adaptors/netsuite/department/ledger_serializer.rb +17 -0
  14. data/lib/ledger_sync/adaptors/netsuite/department/operations/create.rb +25 -0
  15. data/lib/ledger_sync/adaptors/netsuite/department/operations/delete.rb +25 -0
  16. data/lib/ledger_sync/adaptors/netsuite/department/operations/find.rb +25 -0
  17. data/lib/ledger_sync/adaptors/netsuite/department/operations/update.rb +25 -0
  18. data/lib/ledger_sync/adaptors/netsuite/department/searcher.rb +12 -0
  19. data/lib/ledger_sync/adaptors/netsuite/ledger_serializer.rb +1 -1
  20. data/lib/ledger_sync/adaptors/netsuite/record/http_method.rb +14 -19
  21. data/lib/ledger_sync/adaptors/netsuite/record/metadata.rb +47 -21
  22. data/lib/ledger_sync/adaptors/netsuite/record/parameter.rb +20 -0
  23. data/lib/ledger_sync/adaptors/netsuite/record/property.rb +8 -31
  24. data/lib/ledger_sync/adaptors/netsuite/searcher.rb +19 -0
  25. data/lib/ledger_sync/adaptors/netsuite/vendor/operations/create.rb +1 -1
  26. data/lib/ledger_sync/adaptors/quickbooks_online/adaptor.rb +6 -11
  27. data/lib/ledger_sync/adaptors/quickbooks_online/bill_payment/ledger_serializer.rb +76 -0
  28. data/lib/ledger_sync/adaptors/quickbooks_online/bill_payment/operations/create.rb +33 -0
  29. data/lib/ledger_sync/adaptors/quickbooks_online/bill_payment/operations/find.rb +33 -0
  30. data/lib/ledger_sync/adaptors/quickbooks_online/bill_payment/operations/update.rb +33 -0
  31. data/lib/ledger_sync/adaptors/quickbooks_online/bill_payment_line_item/ledger_serializer.rb +19 -0
  32. data/lib/ledger_sync/adaptors/quickbooks_online/operation.rb +1 -1
  33. data/lib/ledger_sync/adaptors/quickbooks_online/operation/find.rb +0 -6
  34. data/lib/ledger_sync/adaptors/quickbooks_online/preferences/ledger_serializer.rb +45 -0
  35. data/lib/ledger_sync/adaptors/quickbooks_online/preferences/operations/find.rb +38 -0
  36. data/lib/ledger_sync/adaptors/quickbooks_online/resources/preferences.rb +24 -0
  37. data/lib/ledger_sync/adaptors/searcher.rb +4 -0
  38. data/lib/ledger_sync/error/operation_errors.rb +0 -10
  39. data/lib/ledger_sync/resource.rb +1 -1
  40. data/lib/ledger_sync/resources/bill_payment.rb +32 -0
  41. data/lib/ledger_sync/resources/bill_payment_line_item.rb +15 -0
  42. data/lib/ledger_sync/type/hash.rb +34 -0
  43. data/lib/ledger_sync/util/read_only_object.rb +54 -0
  44. data/lib/ledger_sync/version.rb +1 -1
  45. metadata +23 -30
  46. data/qa/env_spec.rb +0 -5
  47. data/qa/netsuite/account_spec.rb +0 -20
  48. data/qa/netsuite/currency_spec.rb +0 -16
  49. data/qa/netsuite/customer.rb +0 -76
  50. data/qa/netsuite/customer_spec.rb +0 -21
  51. data/qa/netsuite/vendor.rb +0 -76
  52. data/qa/netsuite/vendor_spec.rb +0 -23
  53. data/qa/netsuite_soap/customer_spec.rb +0 -21
  54. data/qa/netsuite_soap/subsidiary_spec.rb +0 -0
  55. data/qa/qa_helper.rb +0 -58
  56. data/qa/quickbooks_online/account_spec.rb +0 -14
  57. data/qa/quickbooks_online/customer_spec.rb +0 -13
  58. data/qa/quickbooks_online/expense_spec.rb +0 -31
  59. data/qa/quickbooks_online/vendor_spec.rb +0 -13
  60. data/qa/stripe/customers_spec.rb +0 -15
  61. data/qa/support/adaptor_helpers.rb +0 -99
  62. data/qa/support/adaptor_support_setup.rb +0 -23
  63. data/qa/support/netsuite_helpers.rb +0 -33
  64. data/qa/support/netsuite_shared_examples.rb +0 -30
  65. data/qa/support/netsuite_soap_helpers.rb +0 -33
  66. data/qa/support/netsuite_soap_shared_examples.rb +0 -10
  67. data/qa/support/quickbooks_online_helpers.rb +0 -42
  68. data/qa/support/quickbooks_online_shared_examples.rb +0 -82
  69. data/qa/support/shared_examples.rb +0 -127
  70. data/qa/support/stripe_helpers.rb +0 -22
  71. data/qa/support/stripe_shared_examples.rb +0 -10
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe ENV do
4
- it { expect(ENV['QA_ENV']).to eq('true') }
5
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe LedgerSync::Adaptors::NetSuite::Account, adaptor: :netsuite do
4
- let(:adaptor) { netsuite_adaptor }
5
- let(:attribute_updates) do
6
- {
7
- name: "QA UPDATE #{test_run_id}"
8
- }
9
- end
10
- let(:record) { :customer }
11
- let(:resource) do
12
- LedgerSync::Account.new(
13
- name: "Test Account #{test_run_id}"
14
- )
15
- end
16
-
17
- # it_behaves_like 'a full netsuite resource'
18
- it_behaves_like 'a record with metadata'
19
- it_behaves_like 'a find'
20
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe LedgerSync::Adaptors::NetSuite::Currency, adaptor: :netsuite do
4
- let(:adaptor) { netsuite_adaptor }
5
- let(:attribute_updates) do
6
- {
7
- name: "QA UPDATE #{test_run_id}"
8
- }
9
- end
10
- let(:record) { :currency }
11
- let(:resource) do
12
- FactoryBot.create(:currency)
13
- end
14
-
15
- it_behaves_like 'a full netsuite resource'
16
- end
@@ -1,76 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module QA
4
- module NetSuite
5
- module Customer
6
- def customer_create
7
- perform(
8
- LedgerSync::Adaptors::NetSuite::Customer::Operations::Create.new(
9
- adaptor: adaptor,
10
- resource: new_customer(
11
- subsidiary: existing_netsuite_subsidiary
12
- )
13
- )
14
- )
15
- end
16
-
17
- def customer_delete(customer:)
18
- perform(
19
- LedgerSync::Adaptors::NetSuite::Customer::Operations::Delete.new(
20
- adaptor: adaptor,
21
- resource: customer
22
- )
23
- )
24
- end
25
-
26
- def customer_delete_nonexisting(customer:)
27
- result = LedgerSync::Adaptors::NetSuite::Customer::Operations::Delete.new(
28
- adaptor: adaptor,
29
- resource: customer
30
- ).perform
31
-
32
- unless result.failure?
33
- pd 'Should be failure'
34
- byebug
35
- end
36
-
37
- LedgerSync::Result.Success
38
- end
39
-
40
- def customer_find(customer:)
41
- perform(
42
- LedgerSync::Adaptors::NetSuite::Customer::Operations::Find.new(
43
- adaptor: adaptor,
44
- resource: customer
45
- )
46
- )
47
- end
48
-
49
- def customer_update(customer:)
50
- name = "QA UPDATE #{test_run_id}"
51
- customer.name = name
52
-
53
- result = perform(
54
- LedgerSync::Adaptors::NetSuite::Customer::Operations::Update.new(
55
- adaptor: adaptor,
56
- resource: customer
57
- )
58
- )
59
-
60
- byebug if result.resource.name != name
61
- result
62
- end
63
-
64
- def schema_customer
65
- schema = adaptor.base_module::Record::Metadata.new(
66
- adaptor: adaptor,
67
- record: :customer
68
- )
69
-
70
- # byebug unless schema['items'].count == 1
71
-
72
- LedgerSync::Result.Success(schema)
73
- end
74
- end
75
- end
76
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe LedgerSync::Adaptors::NetSuite::Customer, adaptor: :netsuite do
4
- let(:adaptor) { netsuite_adaptor }
5
- let(:attribute_updates) do
6
- {
7
- name: "QA UPDATE #{test_run_id}"
8
- }
9
- end
10
- let(:record) { :customer }
11
- let(:resource) do
12
- LedgerSync::Customer.new(
13
- email: "#{test_run_id}@example.com",
14
- name: "Test Customer #{test_run_id}",
15
- phone_number: '1234567890',
16
- subsidiary: existing_subsidiary_resource
17
- )
18
- end
19
-
20
- it_behaves_like 'a full netsuite resource'
21
- end
@@ -1,76 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module QA
4
- module NetSuite
5
- module Vendor
6
- def vendor_create
7
- perform(
8
- LedgerSync::Adaptors::NetSuite::Vendor::Operations::Create.new(
9
- adaptor: adaptor,
10
- resource: new_vendor(
11
- subsidiary: existing_netsuite_subsidiary
12
- )
13
- )
14
- )
15
- end
16
-
17
- def vendor_delete(vendor:)
18
- perform(
19
- LedgerSync::Adaptors::NetSuite::Vendor::Operations::Delete.new(
20
- adaptor: adaptor,
21
- resource: vendor
22
- )
23
- )
24
- end
25
-
26
- def vendor_delete_nonexisting(vendor:)
27
- result = LedgerSync::Adaptors::NetSuite::Vendor::Operations::Delete.new(
28
- adaptor: adaptor,
29
- resource: vendor
30
- ).perform
31
-
32
- unless result.failure?
33
- pd 'Should be failure'
34
- byebug
35
- end
36
-
37
- LedgerSync::Result.Success
38
- end
39
-
40
- def vendor_find(vendor:)
41
- perform(
42
- LedgerSync::Adaptors::NetSuite::Vendor::Operations::Find.new(
43
- adaptor: adaptor,
44
- resource: vendor
45
- )
46
- )
47
- end
48
-
49
- def vendor_update(vendor:)
50
- name = "QA UPDATE #{test_run_id}"
51
- vendor.company_name = name
52
-
53
- result = perform(
54
- LedgerSync::Adaptors::NetSuite::Vendor::Operations::Update.new(
55
- adaptor: adaptor,
56
- resource: vendor
57
- )
58
- )
59
-
60
- byebug if result.resource.company_name != name
61
- result
62
- end
63
-
64
- def schema_vendor
65
- schema = adaptor.base_module::Record::Metadata.new(
66
- adaptor: adaptor,
67
- record: :vendor
68
- )
69
-
70
- # byebug unless schema['items'].count == 1
71
-
72
- LedgerSync::Result.Success(schema)
73
- end
74
- end
75
- end
76
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe LedgerSync::Adaptors::NetSuite::Vendor, adaptor: :netsuite do
4
- let(:adaptor) { netsuite_adaptor }
5
- let(:attribute_updates) do
6
- {
7
- company_name: "QA UPDATE #{test_run_id}"
8
- }
9
- end
10
- let(:record) { :vendor }
11
- let(:resource) do
12
- LedgerSync::Vendor.new(
13
- company_name: "#{test_run_id} Company",
14
- email: "test-#{test_run_id}-vendor@example.com",
15
- first_name: "TestFirst#{test_run_id}",
16
- last_name: "TestLast#{test_run_id}",
17
- display_name: "Test #{test_run_id} Display Name",
18
- subsidiary: existing_subsidiary_resource
19
- )
20
- end
21
-
22
- it_behaves_like 'a full netsuite resource'
23
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe LedgerSync::Adaptors::NetSuiteSOAP::Customer, adaptor: :netsuite_soap do
4
- let(:adaptor) { netsuite_soap_adaptor }
5
- let(:attribute_updates) do
6
- {
7
- name: "QA UPDATE #{rand_id}"
8
- }
9
- end
10
- let(:record) { :customer }
11
- let(:resource) do
12
- LedgerSync::Customer.new(
13
- email: "#{rand_id}@example.com",
14
- name: "Test Customer #{rand_id}",
15
- phone_number: '1234567890',
16
- subsidiary: existing_subsidiary_resource
17
- )
18
- end
19
-
20
- it_behaves_like 'a full netsuite soap resource'
21
- end
File without changes
@@ -1,58 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Set an environment variable to determine when we are running QA tests.
4
- ENV['QA_ENV'] = 'true'
5
-
6
- require 'bundler/setup'
7
- require 'ap'
8
- require 'byebug'
9
- require 'ledger_sync'
10
-
11
- #
12
- # Helper method for requiring support files
13
- #
14
- # @param [String] *paths List of strings or symbols
15
- #
16
- # @return [Boolean]
17
- #
18
- def support(*paths)
19
- paths.each do |path|
20
- require File.join(LedgerSync.root, 'qa/support/', path.to_s)
21
- end
22
- end
23
-
24
- #
25
- # Helper method for requiring support files from /spec/support dir
26
- #
27
- # @param [String] *paths List of strings or symbols
28
- #
29
- # @return [Boolean]
30
- #
31
- def spec_support(*paths)
32
- paths.each do |path|
33
- require File.join(LedgerSync.root, 'spec/support/', path.to_s)
34
- end
35
- end
36
-
37
- spec_support :factory_bot
38
-
39
- support :adaptor_support_setup
40
-
41
- setup_adaptor_support(
42
- LedgerSync::Adaptors::NetSuite::Adaptor,
43
- LedgerSync::Adaptors::NetSuiteSOAP::Adaptor,
44
- LedgerSync::Adaptors::QuickBooksOnline::Adaptor,
45
- LedgerSync::Adaptors::Stripe::Adaptor
46
- )
47
-
48
- RSpec.configure do |config|
49
- # Enable flags like --only-failures and --next-failure
50
- config.example_status_persistence_file_path = 'tmp/qa_history.txt'
51
-
52
- # Disable RSpec exposing methods globally on `Module` and `main`
53
- config.disable_monkey_patching!
54
-
55
- config.expect_with :rspec do |c|
56
- c.syntax = :expect
57
- end
58
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe LedgerSync::Adaptors::QuickBooksOnline::Account, adaptor: :quickbooks_online do
4
- let(:adaptor) { quickbooks_online_adaptor }
5
- let(:attribute_updates) do
6
- {
7
- name: "QA UPDATE #{test_run_id}"
8
- }
9
- end
10
- let(:record) { :account }
11
- let(:resource) { FactoryBot.create(:account) }
12
-
13
- it_behaves_like 'a standard quickbooks_online resource'
14
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe LedgerSync::Adaptors::QuickBooksOnline::Customer, adaptor: :quickbooks_online do
4
- let(:adaptor) { quickbooks_online_adaptor }
5
- let(:attribute_updates) do
6
- {
7
- name: "QA UPDATE #{rand_id}"
8
- }
9
- end
10
- let(:resource) { FactoryBot.create(:customer) }
11
-
12
- it_behaves_like 'a standard quickbooks_online resource'
13
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe LedgerSync::Adaptors::QuickBooksOnline::Expense, adaptor: :quickbooks_online do
4
- let(:adaptor) { quickbooks_online_adaptor }
5
- let(:attribute_updates) do
6
- {
7
- memo: "QA UPDATE #{rand_id}"
8
- }
9
- end
10
-
11
- let(:account) do
12
- create_resource_for(
13
- adaptor: adaptor,
14
- resource: FactoryBot.create(:account)
15
- )
16
- end
17
-
18
- let(:resource) do
19
- FactoryBot.create(
20
- :expense,
21
- account: account,
22
- line_items: FactoryBot.create_list(
23
- :expense_line_item,
24
- 2,
25
- account: account
26
- )
27
- )
28
- end
29
-
30
- it_behaves_like 'a standard quickbooks_online resource'
31
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe LedgerSync::Adaptors::QuickBooksOnline::Vendor, adaptor: :quickbooks_online do
4
- let(:adaptor) { quickbooks_online_adaptor }
5
- let(:attribute_updates) do
6
- {
7
- display_name: "QA UPDATE #{rand_id}"
8
- }
9
- end
10
- let(:resource) { FactoryBot.create(:vendor) }
11
-
12
- it_behaves_like 'a standard quickbooks_online resource'
13
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe LedgerSync::Adaptors::Stripe::Customer, adaptor: :stripe do
4
- let(:adaptor) { stripe_adaptor }
5
- let(:attribute_updates) do
6
- {
7
- name: "QA UPDATE #{rand_id}"
8
- }
9
- end
10
- let(:resource) do
11
- FactoryBot.create(:customer)
12
- end
13
-
14
- it_behaves_like 'a full stripe resource'
15
- end
@@ -1,99 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module AdaptorHelpers
4
- def adaptor_class
5
- raise NotImplementedError
6
- end
7
-
8
- def create_operation_for(resource_class:)
9
- operation_for(
10
- method: :create,
11
- resource: resource_class
12
- )
13
- end
14
-
15
- def create_resource_for(*args)
16
- create_result_for(*args).raise_if_error.resource
17
- end
18
-
19
- def create_result_for(adaptor:, resource:)
20
- result_for(
21
- adaptor: adaptor,
22
- method: :create,
23
- resource: resource
24
- )
25
- end
26
-
27
- def delete_operation_for(resource_class:)
28
- operation_for(
29
- method: :delete,
30
- resource: resource_class
31
- )
32
- end
33
-
34
- def delete_resource_for(*args)
35
- delete_result_for(*args).raise_if_error.resource
36
- end
37
-
38
- def delete_result_for(adaptor:, resource:)
39
- result_for(
40
- adaptor: adaptor,
41
- method: :delete,
42
- resource: resource
43
- )
44
- end
45
-
46
- def find_operation_for(resource_class:)
47
- operation_for(
48
- method: :find,
49
- resource: resource_class
50
- )
51
- end
52
-
53
- def find_resource_for(*args)
54
- find_result_for(*args).raise_if_error.resource
55
- end
56
-
57
- def find_result_for(adaptor:, resource:)
58
- result_for(
59
- adaptor: adaptor,
60
- method: :find,
61
- resource: resource
62
- )
63
- end
64
-
65
- def operation_for(method:, resource_class:)
66
- adaptor_class
67
- .base_operation_module_for(resource_class: resource_class)
68
- .const_get(LedgerSync::Util::StringHelpers.camelcase(method.to_s))
69
- end
70
-
71
- def result_for(adaptor:, method:, resource:)
72
- operation_for(
73
- method: method,
74
- resource_class: resource.class
75
- ).new(
76
- adaptor: adaptor,
77
- resource: resource
78
- ).perform
79
- end
80
-
81
- def update_operation_for(resource_class:)
82
- operation_for(
83
- method: :update,
84
- resource: resource_class
85
- )
86
- end
87
-
88
- def update_resource_for(*args)
89
- update_result_for(*args).raise_if_error.resource
90
- end
91
-
92
- def update_result_for(adaptor:, resource:)
93
- result_for(
94
- adaptor: adaptor,
95
- method: :update,
96
- resource: resource
97
- )
98
- end
99
- end