netsuite 0.8.4 → 0.8.8

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.
Files changed (87) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/main.yml +20 -0
  3. data/.gitignore +1 -0
  4. data/.ruby-version +1 -1
  5. data/.tool-versions +1 -0
  6. data/Gemfile +2 -5
  7. data/HISTORY.md +26 -0
  8. data/README.md +72 -29
  9. data/Rakefile +1 -1
  10. data/lib/netsuite.rb +13 -19
  11. data/lib/netsuite/actions/login.rb +10 -2
  12. data/lib/netsuite/actions/upsert.rb +2 -0
  13. data/lib/netsuite/configuration.rb +34 -4
  14. data/lib/netsuite/records/accounting_period.rb +2 -2
  15. data/lib/netsuite/records/classification.rb +4 -1
  16. data/lib/netsuite/records/contact.rb +1 -1
  17. data/lib/netsuite/records/cost_category.rb +28 -0
  18. data/lib/netsuite/records/credit_memo.rb +1 -1
  19. data/lib/netsuite/records/custom_field_list.rb +9 -3
  20. data/lib/netsuite/records/custom_record.rb +1 -1
  21. data/lib/netsuite/records/customer.rb +2 -1
  22. data/lib/netsuite/records/customer_credit_cards.rb +36 -0
  23. data/lib/netsuite/records/customer_credit_cards_list.rb +10 -0
  24. data/lib/netsuite/records/customer_deposit.rb +5 -5
  25. data/lib/netsuite/records/customer_payment.rb +6 -2
  26. data/lib/netsuite/records/customer_payment_credit.rb +17 -0
  27. data/lib/netsuite/records/customer_payment_credit_list.rb +12 -0
  28. data/lib/netsuite/records/employee.rb +1 -1
  29. data/lib/netsuite/records/estimate.rb +42 -0
  30. data/lib/netsuite/records/estimate_item.rb +40 -0
  31. data/lib/netsuite/records/estimate_item_list.rb +11 -0
  32. data/lib/netsuite/records/inventory_item.rb +62 -1
  33. data/lib/netsuite/records/invoice.rb +94 -1
  34. data/lib/netsuite/records/item_fulfillment.rb +1 -1
  35. data/lib/netsuite/records/lot_numbered_inventory_item.rb +116 -0
  36. data/lib/netsuite/records/matrix_option_list.rb +12 -4
  37. data/lib/netsuite/records/message.rb +30 -0
  38. data/lib/netsuite/records/non_inventory_resale_item.rb +1 -0
  39. data/lib/netsuite/records/non_inventory_sale_item.rb +1 -1
  40. data/lib/netsuite/records/other_charge_sale_item.rb +2 -2
  41. data/lib/netsuite/records/partner.rb +7 -5
  42. data/lib/netsuite/records/serialized_assembly_item.rb +3 -1
  43. data/lib/netsuite/records/service_resale_item.rb +1 -1
  44. data/lib/netsuite/records/support_case_type.rb +26 -0
  45. data/lib/netsuite/records/tax_group.rb +2 -2
  46. data/lib/netsuite/records/vendor.rb +2 -1
  47. data/lib/netsuite/records/vendor_currency.rb +26 -0
  48. data/lib/netsuite/records/vendor_currency_list.rb +9 -0
  49. data/lib/netsuite/support/fields.rb +16 -0
  50. data/lib/netsuite/support/records.rb +1 -1
  51. data/lib/netsuite/support/search_result.rb +36 -6
  52. data/lib/netsuite/utilities.rb +18 -6
  53. data/lib/netsuite/version.rb +1 -1
  54. data/netsuite.gemspec +5 -3
  55. data/spec/netsuite/actions/search_spec.rb +22 -0
  56. data/spec/netsuite/configuration_spec.rb +111 -6
  57. data/spec/netsuite/records/basic_record_spec.rb +9 -1
  58. data/spec/netsuite/records/classification_spec.rb +10 -1
  59. data/spec/netsuite/records/cost_category_spec.rb +105 -0
  60. data/spec/netsuite/records/custom_field_list_spec.rb +46 -6
  61. data/spec/netsuite/records/custom_record_spec.rb +1 -1
  62. data/spec/netsuite/records/customer_credit_cards_list_spec.rb +23 -0
  63. data/spec/netsuite/records/customer_payment_credit_list_spec.rb +26 -0
  64. data/spec/netsuite/records/customer_payment_spec.rb +1 -6
  65. data/spec/netsuite/records/customer_spec.rb +22 -1
  66. data/spec/netsuite/records/employee_spec.rb +2 -2
  67. data/spec/netsuite/records/estimate_item_list_spec.rb +26 -0
  68. data/spec/netsuite/records/estimate_item_spec.rb +40 -0
  69. data/spec/netsuite/records/estimate_spec.rb +216 -0
  70. data/spec/netsuite/records/inventory_item_spec.rb +65 -0
  71. data/spec/netsuite/records/invoice_spec.rb +94 -0
  72. data/spec/netsuite/records/matrix_option_list_spec.rb +15 -5
  73. data/spec/netsuite/records/message_spec.rb +49 -0
  74. data/spec/netsuite/records/non_inventory_resale_item_spec.rb +165 -0
  75. data/spec/netsuite/records/non_inventory_sale_item_spec.rb +1 -1
  76. data/spec/netsuite/records/partner_spec.rb +143 -0
  77. data/spec/netsuite/records/service_resale_item_spec.rb +134 -0
  78. data/spec/netsuite/records/support_case_type_spec.rb +22 -0
  79. data/spec/netsuite/records/vendor_spec.rb +1 -1
  80. data/spec/netsuite/support/search_result_spec.rb +24 -0
  81. data/spec/netsuite/utilities_spec.rb +20 -15
  82. data/spec/support/fixtures/custom_fields/multi_select.xml +47 -0
  83. data/spec/support/fixtures/search/saved_search_item.xml +55 -0
  84. data/spec/support/fixtures/search/saved_search_joined_custom_customer.xml +15 -1
  85. data/spec/support/search_only_field_matcher.rb +7 -0
  86. metadata +77 -12
  87. data/circle.yml +0 -17
@@ -0,0 +1,143 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Records::Partner do
4
+ let(:partner) { NetSuite::Records::Partner.new }
5
+
6
+ it 'has all the right fields' do
7
+ [
8
+ :alt_email, :alt_name, :bcn, :comments, :company_name, :date_created, :default_address,
9
+ :eligible_for_commission, :email, :entity_id, :fax, :first_name, :give_access, :home_phone, :is_inactive,
10
+ :is_person, :last_modified_date, :last_name, :login_as, :middle_name, :mobile_phone, :partner_code,
11
+ :password, :password2, :phone, :phonetic_name, :print_on_check_as, :referring_url, :require_pwd_change,
12
+ :salutation, :send_email, :sub_partner_login, :tax_id_num, :title, :url, :vat_reg_number
13
+ ].each do |field|
14
+ expect(partner).to have_field(field)
15
+ end
16
+ end
17
+
18
+ it 'has all the right record refs' do
19
+ [
20
+ :access_role, :klass, :custom_form, :default_tax_reg, :department, :image, :location, :parent, :subsidiary
21
+ ].each do |record_ref|
22
+ expect(partner).to have_record_ref(record_ref)
23
+ end
24
+ end
25
+
26
+ describe '.get' do
27
+ context 'when the response is successful' do
28
+ let(:response) { NetSuite::Response.new(:success => true, :body => { :account_number => 7 }) }
29
+
30
+ it 'returns an Partner instance populated with the data from the response object' do
31
+ expect(NetSuite::Actions::Get).to receive(:call).with([NetSuite::Records::Partner, { :external_id => 1 }], {}).and_return(response)
32
+ Partner = NetSuite::Records::Partner.get(:external_id => 1)
33
+ expect(Partner).to be_kind_of(NetSuite::Records::Partner)
34
+ end
35
+ end
36
+
37
+ context 'when the response is unsuccessful' do
38
+ let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
39
+
40
+ it 'raises a RecordNotFound exception' do
41
+ expect(NetSuite::Actions::Get).to receive(:call).with([NetSuite::Records::Partner, { :external_id => 1 }], {}).and_return(response)
42
+ expect {
43
+ NetSuite::Records::Partner.get(:external_id => 1)
44
+ }.to raise_error(NetSuite::RecordNotFound,
45
+ /NetSuite::Records::Partner with OPTIONS=(.*) could not be found/)
46
+ end
47
+ end
48
+ end
49
+
50
+ describe '#add' do
51
+ let(:partner) { NetSuite::Records::Partner.new(:email => 'dale.cooper@example.com') }
52
+
53
+ context 'when the response is successful' do
54
+ let(:response) { NetSuite::Response.new(:success => true, :body => { :internal_id => '1' }) }
55
+
56
+ it 'returns true' do
57
+ expect(NetSuite::Actions::Add).to receive(:call).
58
+ with([partner], {}).
59
+ and_return(response)
60
+ expect(partner.add).to be_truthy
61
+ end
62
+ end
63
+
64
+ context 'when the response is unsuccessful' do
65
+ let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
66
+
67
+ it 'returns false' do
68
+ expect(NetSuite::Actions::Add).to receive(:call).
69
+ with([partner], {}).
70
+ and_return(response)
71
+ expect(partner.add).to be_falsey
72
+ end
73
+ end
74
+ end
75
+
76
+ describe '#delete' do
77
+ context 'when the response is successful' do
78
+ let(:response) { NetSuite::Response.new(:success => true, :body => { :internal_id => '1' }) }
79
+
80
+ it 'returns true' do
81
+ expect(NetSuite::Actions::Delete).to receive(:call).
82
+ with([partner], {}).
83
+ and_return(response)
84
+ expect(partner.delete).to be_truthy
85
+ end
86
+ end
87
+
88
+ context 'when the response is unsuccessful' do
89
+ let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
90
+
91
+ it 'returns false' do
92
+ expect(NetSuite::Actions::Delete).to receive(:call).
93
+ with([partner], {}).
94
+ and_return(response)
95
+ expect(partner.delete).to be_falsey
96
+ end
97
+ end
98
+ end
99
+
100
+ describe '.update' do
101
+ context 'when the response is successful' do
102
+ let(:response) { NetSuite::Response.new(:success => true, :body => { :email => 'leland.palmer@example.com' }) }
103
+
104
+ it 'returns true' do
105
+ expect(NetSuite::Actions::Update).to receive(:call).with([NetSuite::Records::Partner, { :internal_id => 1, :email => 'leland.palmer@example.com' }], {}).and_return(response)
106
+ partner = NetSuite::Records::Partner.new(:internal_id => 1)
107
+ expect(partner.update(:email => 'leland.palmer@example.com')).to be_truthy
108
+ end
109
+ end
110
+
111
+ context 'when the response is unsuccessful' do
112
+ let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
113
+
114
+ it 'raises a RecordNotFound exception' do
115
+ expect(NetSuite::Actions::Update).to receive(:call).with([NetSuite::Records::Partner, { :internal_id => 1, :account_number => 7 }], {}).and_return(response)
116
+ partner = NetSuite::Records::Partner.new(:internal_id => 1)
117
+ expect(partner.update(:account_number => 7)).to be_falsey
118
+ end
119
+ end
120
+ end
121
+
122
+ describe '#to_record' do
123
+ let(:partner) { NetSuite::Records::Partner.new(:email => 'bob@example.com') }
124
+
125
+ it 'returns a hash of attributes that can be used in a SOAP request' do
126
+ expect(partner.to_record).to eql({ 'listRel:email' => 'bob@example.com' })
127
+ end
128
+ end
129
+
130
+ describe '#record_type' do
131
+ it 'returns a string type for the record to be used in a SOAP request' do
132
+ expect(partner.record_type).to eql('listRel:Partner')
133
+ end
134
+ end
135
+
136
+ it 'has the right record_refs' do
137
+ [
138
+ :klass, :access_role, :department, :subsidiary
139
+ ].each do |record_ref|
140
+ expect(partner).to have_record_ref(record_ref)
141
+ end
142
+ end
143
+ end
@@ -0,0 +1,134 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Records::ServiceResaleItem do
4
+ let(:item) { NetSuite::Records::ServiceResaleItem.new }
5
+
6
+ it 'has the right fields' do
7
+ [
8
+ :available_to_partners, :cost, :cost_estimate, :cost_estimate_type, :cost_estimate_units, :create_job, :created_date,
9
+ :display_name, :dont_show_price, :enforce_min_qty_internally, :exclude_from_sitemap, :featured_description,
10
+ :include_children, :is_donation_item, :is_fulfillable, :is_gco_compliant, :is_inactive, :is_online, :is_taxable,
11
+ :item_id, :last_modified_date, :matrix_option_list, :matrix_type, :max_donation_amount, :meta_tag_html,
12
+ :minimum_quantity, :minimum_quantity_units, :no_price_message, :offer_support, :on_special, :out_of_stock_behavior,
13
+ :out_of_stock_message, :overall_quantity_pricing_type, :page_title, :presentation_item_list, :prices_include_tax,
14
+ :show_default_donation_amount, :site_category_list, :sitemap_priority, :soft_descriptor, :specials_description,
15
+ :store_description, :store_detailed_description, :store_display_name, :translations_list, :upc_code, :url_component,
16
+ :use_marginal_rates, :vsoe_deferral, :vsoe_delivered, :vsoe_permit_discount, :vsoe_price, :vsoe_sop_group
17
+ ].each do |field|
18
+ expect(item).to have_field(field)
19
+ end
20
+
21
+ # TODO there is a probably a more robust way to test this
22
+ expect(item.custom_field_list.class).to eq(NetSuite::Records::CustomFieldList)
23
+ expect(item.pricing_matrix.class).to eq(NetSuite::Records::PricingMatrix)
24
+ expect(item.subsidiary_list.class).to eq(NetSuite::Records::RecordRefList)
25
+ end
26
+
27
+ it 'has the right record_refs' do
28
+ [
29
+ :billing_schedule, :cost_category, :custom_form, :deferred_revenue_account, :department, :income_account,
30
+ :issue_product, :item_options_list, :klass, :location, :parent, :pricing_group, :purchase_tax_code,
31
+ :quantity_pricing_schedule, :rev_rec_schedule, :sale_unit, :sales_tax_code, :store_display_image,
32
+ :store_display_thumbnail, :store_item_template, :tax_schedule, :units_type
33
+ ].each do |record_ref|
34
+ expect(item).to have_record_ref(record_ref)
35
+ end
36
+ end
37
+
38
+ describe '.get' do
39
+ context 'when the response is successful' do
40
+ let(:response) { NetSuite::Response.new(:success => true, :body => { :item_id => 'penguins' }) }
41
+
42
+ it 'returns a ServiceResaleItem instance populated with the data from the response object' do
43
+ expect(NetSuite::Actions::Get).to receive(:call).with([NetSuite::Records::ServiceResaleItem, :external_id => 20], {}).and_return(response)
44
+ customer = NetSuite::Records::ServiceResaleItem.get(:external_id => 20)
45
+ expect(customer).to be_kind_of(NetSuite::Records::ServiceResaleItem)
46
+ expect(customer.item_id).to eql('penguins')
47
+ end
48
+ end
49
+
50
+ context 'when the response is unsuccessful' do
51
+ let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
52
+
53
+ it 'raises a RecordNotFound exception' do
54
+ expect(NetSuite::Actions::Get).to receive(:call).with([NetSuite::Records::ServiceResaleItem, :external_id => 20], {}).and_return(response)
55
+ expect {
56
+ NetSuite::Records::ServiceResaleItem.get(:external_id => 20)
57
+ }.to raise_error(NetSuite::RecordNotFound,
58
+ /NetSuite::Records::ServiceResaleItem with OPTIONS=(.*) could not be found/)
59
+ end
60
+ end
61
+ end
62
+
63
+ describe '#add' do
64
+ let(:item) { NetSuite::Records::ServiceResaleItem.new(:cost => 100, :is_inactive => false) }
65
+
66
+ context 'when the response is successful' do
67
+ let(:response) { NetSuite::Response.new(:success => true, :body => { :internal_id => '1' }) }
68
+
69
+ it 'returns true' do
70
+ expect(NetSuite::Actions::Add).to receive(:call).
71
+ with([item], {}).
72
+ and_return(response)
73
+ expect(item.add).to be_truthy
74
+ end
75
+ end
76
+
77
+ context 'when the response is unsuccessful' do
78
+ let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
79
+
80
+ it 'returns false' do
81
+ expect(NetSuite::Actions::Add).to receive(:call).
82
+ with([item], {}).
83
+ and_return(response)
84
+ expect(item.add).to be_falsey
85
+ end
86
+ end
87
+ end
88
+
89
+ describe '#delete' do
90
+ context 'when the response is successful' do
91
+ let(:response) { NetSuite::Response.new(:success => true, :body => { :internal_id => '1' }) }
92
+
93
+ it 'returns true' do
94
+ expect(NetSuite::Actions::Delete).to receive(:call).
95
+ with([item], {}).
96
+ and_return(response)
97
+ expect(item.delete).to be_truthy
98
+ end
99
+ end
100
+
101
+ context 'when the response is unsuccessful' do
102
+ let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
103
+
104
+ it 'returns false' do
105
+ expect(NetSuite::Actions::Delete).to receive(:call).
106
+ with([item], {}).
107
+ and_return(response)
108
+ expect(item.delete).to be_falsey
109
+ end
110
+ end
111
+ end
112
+
113
+ describe '#to_record' do
114
+ before do
115
+ item.item_id = 'penguins'
116
+ item.is_online = true
117
+ end
118
+
119
+ it 'can represent itself as a SOAP record' do
120
+ record = {
121
+ 'listAcct:itemId' => 'penguins',
122
+ 'listAcct:isOnline' => true
123
+ }
124
+ expect(item.to_record).to eql(record)
125
+ end
126
+ end
127
+
128
+ describe '#record_type' do
129
+ it 'returns a string of the SOAP type' do
130
+ expect(item.record_type).to eql('listAcct:ServiceResaleItem')
131
+ end
132
+ end
133
+
134
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Records::SupportCaseType do
4
+ let(:support_case_type) { NetSuite::Records::SupportCaseType.new }
5
+
6
+ it 'has all the right fields' do
7
+ [
8
+ :description, :is_inactive, :name
9
+ ].each do |field|
10
+ expect(support_case_type).to have_field(field)
11
+ end
12
+ end
13
+
14
+ it 'has the right record_refs' do
15
+ [
16
+ :insert_before
17
+ ].each do |record_ref|
18
+ expect(support_case_type).to have_record_ref(record_ref)
19
+ end
20
+ end
21
+
22
+ end
@@ -7,7 +7,7 @@ describe NetSuite::Records::Vendor do
7
7
  [
8
8
  :account_number, :alt_email, :alt_name, :alt_phone, :balance,
9
9
  :balance_primary, :bcn, :bill_pay, :comments, :company_name, :credit_limit,
10
- :currency_list, :date_created, :default_address, :eligible_for_commission,
10
+ :date_created, :default_address, :eligible_for_commission,
11
11
  :email, :email_preference, :email_transactions, :entity_id, :fax, :fax_transactions,
12
12
  :first_name, :give_access, :global_subscription_status, :home_phone, :is1099_eligible,
13
13
  :is_accountant, :is_inactive, :is_job_resource_vend, :is_person, :labor_cost,
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Support::SearchResult do
4
+ describe '#results' do
5
+ context 'empty page' do
6
+ it 'returns empty array' do
7
+ response_body = {
8
+ :status => {:@is_success=>"true"},
9
+ :total_records => "242258",
10
+ :page_size => "10",
11
+ :total_pages => "24226",
12
+ :page_index => "99",
13
+ :search_id => "WEBSERVICES_4132604_SB1_051620191060155623420663266_336cbf12",
14
+ :record_list => nil,
15
+ :"@xmlns:platform_core" => "urn:core_2016_2.platform.webservices.netsuite.com"
16
+ }
17
+ response = NetSuite::Response.new(body: response_body)
18
+
19
+ results = described_class.new(response, NetSuite::Actions::Search, {}).results
20
+ expect(results).to eq []
21
+ end
22
+ end
23
+ end
24
+ end
@@ -3,24 +3,29 @@ require 'spec_helper'
3
3
  describe NetSuite::Utilities do
4
4
  describe 'time utilities' do
5
5
  it '#normalize_time_to_netsuite_date' do
6
- stamp = DateTime.parse('Wed, 27 Jul 2016 00:00:00 -0000')
7
- formatted_date = NetSuite::Utilities.normalize_time_to_netsuite_date(stamp.to_time.to_i)
8
- expect(formatted_date).to eq('2016-07-27T00:00:00-07:00')
6
+ ['Etc/UTC', 'America/Los_Angeles', 'America/Denver'].each do |zone|
7
+ ENV['TZ'] = zone
8
+ puts "In zone: #{zone}"
9
9
 
10
- no_dst_stamp = DateTime.parse('Sun, November 6 2017 00:00:00 -0000')
11
- formatted_date = NetSuite::Utilities.normalize_time_to_netsuite_date(no_dst_stamp.to_time.to_i)
12
- expect(formatted_date).to eq('2017-11-06T00:00:00-08:00')
10
+ stamp = DateTime.parse('Wed, 27 Jul 2016 00:00:00 -0000')
11
+ formatted_date = NetSuite::Utilities.normalize_time_to_netsuite_date(stamp.to_time.to_i)
12
+ expect(formatted_date).to eq('2016-07-27T00:00:00-07:00')
13
13
 
14
- no_dst_stamp_with_time = DateTime.parse('Sun, November 6 2017 12:11:10 -0000')
15
- formatted_date = NetSuite::Utilities.normalize_time_to_netsuite_date(no_dst_stamp_with_time.to_time.to_i)
16
- expect(formatted_date).to eq('2017-11-06T00:00:00-08:00')
14
+ no_dst_stamp = DateTime.parse('Sun, November 6 2017 00:00:00 -0000')
15
+ formatted_date = NetSuite::Utilities.normalize_time_to_netsuite_date(no_dst_stamp.to_time.to_i)
16
+ expect(formatted_date).to eq('2017-11-06T00:00:00-08:00')
17
+
18
+ no_dst_stamp_with_time = DateTime.parse('Sun, November 6 2017 12:11:10 -0000')
19
+ formatted_date = NetSuite::Utilities.normalize_time_to_netsuite_date(no_dst_stamp_with_time.to_time.to_i)
20
+ expect(formatted_date).to eq('2017-11-06T00:00:00-08:00')
21
+ end
17
22
  end
18
23
  end
19
24
 
20
25
  it "#netsuite_data_center_urls" do
21
26
  domains = NetSuite::Utilities.netsuite_data_center_urls('TSTDRV1576318')
22
- expect(domains[:webservices_domain]).to eq('https://webservices.netsuite.com')
23
- expect(domains[:system_domain]).to eq('https://system.netsuite.com')
27
+ expect(domains[:webservices_domain]).to eq('https://tstdrv1576318.suitetalk.api.netsuite.com')
28
+ expect(domains[:system_domain]).to eq('https://tstdrv1576318.app.netsuite.com')
24
29
 
25
30
  # ensure domains returned don't change when sandbox is enabled
26
31
  NetSuite.configure do
@@ -29,8 +34,8 @@ describe NetSuite::Utilities do
29
34
  end
30
35
 
31
36
  domains = NetSuite::Utilities.netsuite_data_center_urls('TSTDRV1576318')
32
- expect(domains[:webservices_domain]).to eq('https://webservices.netsuite.com')
33
- expect(domains[:system_domain]).to eq('https://system.netsuite.com')
37
+ expect(domains[:webservices_domain]).to eq('https://tstdrv1576318.suitetalk.api.netsuite.com')
38
+ expect(domains[:system_domain]).to eq('https://tstdrv1576318.app.netsuite.com')
34
39
 
35
40
  NetSuite.configure do
36
41
  reset!
@@ -38,8 +43,8 @@ describe NetSuite::Utilities do
38
43
  end
39
44
 
40
45
  domains = NetSuite::Utilities.netsuite_data_center_urls('TSTDRV1576318')
41
- expect(domains[:webservices_domain]).to eq('https://webservices.netsuite.com')
42
- expect(domains[:system_domain]).to eq('https://system.netsuite.com')
46
+ expect(domains[:webservices_domain]).to eq('https://tstdrv1576318.suitetalk.api.netsuite.com')
47
+ expect(domains[:system_domain]).to eq('https://tstdrv1576318.app.netsuite.com')
43
48
 
44
49
  domains = NetSuite::Utilities.netsuite_data_center_urls('4810331')
45
50
  expect(domains[:webservices_domain]).to eq('https://4810331.suitetalk.api.netsuite.com')
@@ -0,0 +1,47 @@
1
+ <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
2
+ <soapenv:Header>
3
+ <platformMsgs:documentInfo xmlns:platformMsgs="urn:messages_2017_2.platform.webservices.netsuite.com">
4
+ <platformMsgs:nsId>WEBSERVICES_4384362_0714202114843454571284681300_c8529d78de5</platformMsgs:nsId>
5
+ </platformMsgs:documentInfo>
6
+ </soapenv:Header>
7
+ <soapenv:Body>
8
+ <getResponse xmlns="urn:messages_2017_2.platform.webservices.netsuite.com">
9
+ <readResponse>
10
+ <platformCore:status xmlns:platformCore="urn:core_2017_2.platform.webservices.netsuite.com" isSuccess="true"/>
11
+ <record xmlns:tranCust="urn:customers_2017_2.transactions.webservices.netsuite.com" internalId="9948394" xsi:type="tranCust:CreditMemo">
12
+ <tranCust:createdDate>2021-07-14T12:45:42.000-07:00</tranCust:createdDate>
13
+ <tranCust:lastModifiedDate>2021-07-14T14:56:35.000-07:00</tranCust:lastModifiedDate>
14
+ <tranCust:customFieldList xmlns:platformCore="urn:core_2017_2.platform.webservices.netsuite.com">
15
+ <platformCore:customField internalId="520" scriptId="custbody_standard_select" xsi:type="platformCore:SelectCustomFieldRef">
16
+ <platformCore:value internalId="2" typeId="142">
17
+ <platformCore:name>Manual</platformCore:name>
18
+ </platformCore:value>
19
+ </platformCore:customField>
20
+ <platformCore:customField internalId="26" scriptId="custbody_date_field" xsi:type="platformCore:DateCustomFieldRef">
21
+ <platformCore:value>2021-07-13T22:00:00.000-07:00</platformCore:value>
22
+ </platformCore:customField>
23
+ <platformCore:customField internalId="1371" scriptId="custbody_string_field" xsi:type="platformCore:StringCustomFieldRef">
24
+ <platformCore:value>a very nice string</platformCore:value>
25
+ </platformCore:customField>
26
+ <platformCore:customField internalId="1593" scriptId="custbody_boolean_field" xsi:type="platformCore:BooleanCustomFieldRef">
27
+ <platformCore:value>false</platformCore:value>
28
+ </platformCore:customField>
29
+ <platformCore:customField internalId="1552" scriptId="custbody_multi_select_field" xsi:type="platformCore:MultiSelectCustomFieldRef">
30
+ <platformCore:value internalId="7623" typeId="164">
31
+ <platformCore:name>selection value</platformCore:name>
32
+ </platformCore:value>
33
+ </platformCore:customField>
34
+ <platformCore:customField internalId="1553" scriptId="custbody_multi_select_with_multiple" xsi:type="platformCore:MultiSelectCustomFieldRef">
35
+ <platformCore:value internalId="7613" typeId="164">
36
+ <platformCore:name>selection value 1</platformCore:name>
37
+ </platformCore:value>
38
+ <platformCore:value internalId="7614" typeId="165">
39
+ <platformCore:name>selection value 2</platformCore:name>
40
+ </platformCore:value>
41
+ </platformCore:customField>
42
+ </tranCust:customFieldList>
43
+ </record>
44
+ </readResponse>
45
+ </getResponse>
46
+ </soapenv:Body>
47
+ </soapenv:Envelope>