netsuite 0.2.6 → 0.3.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.
- data/.travis.yml +3 -0
- data/Gemfile +2 -0
- data/README.md +132 -54
- data/lib/netsuite.rb +123 -76
- data/lib/netsuite/actions/add.rb +1 -0
- data/lib/netsuite/actions/delete.rb +1 -0
- data/lib/netsuite/actions/get.rb +1 -0
- data/lib/netsuite/actions/get_all.rb +67 -0
- data/lib/netsuite/actions/get_list.rb +2 -1
- data/lib/netsuite/actions/get_select_value.rb +1 -0
- data/lib/netsuite/actions/initialize.rb +1 -0
- data/lib/netsuite/actions/login.rb +2 -0
- data/lib/netsuite/actions/search.rb +3 -2
- data/lib/netsuite/actions/update.rb +18 -0
- data/lib/netsuite/actions/upsert.rb +1 -0
- data/lib/netsuite/actions/upsert_list.rb +114 -0
- data/lib/netsuite/configuration.rb +5 -0
- data/lib/netsuite/namespaces/file_cabinet.rb +11 -0
- data/lib/netsuite/namespaces/list_emp.rb +12 -0
- data/lib/netsuite/namespaces/list_mkt.rb +12 -0
- data/lib/netsuite/namespaces/list_website.rb +11 -0
- data/lib/netsuite/namespaces/tran_invt.rb +11 -0
- data/lib/netsuite/records/accounting_period.rb +1 -1
- data/lib/netsuite/records/assembly_item.rb +10 -4
- data/lib/netsuite/records/billing_schedule.rb +33 -0
- data/lib/netsuite/records/billing_schedule_milestone.rb +28 -0
- data/lib/netsuite/records/billing_schedule_milestone_list.rb +33 -0
- data/lib/netsuite/records/billing_schedule_recurrence.rb +28 -0
- data/lib/netsuite/records/billing_schedule_recurrence_list.rb +33 -0
- data/lib/netsuite/records/bin.rb +22 -0
- data/lib/netsuite/records/campaign.rb +28 -0
- data/lib/netsuite/records/cash_refund.rb +1 -1
- data/lib/netsuite/records/classification.rb +1 -1
- data/lib/netsuite/records/contact.rb +1 -1
- data/lib/netsuite/records/contact_access_roles.rb +14 -0
- data/lib/netsuite/records/contact_access_roles_list.rb +9 -0
- data/lib/netsuite/records/custom_field.rb +2 -1
- data/lib/netsuite/records/custom_field_list.rb +23 -4
- data/lib/netsuite/records/custom_list.rb +27 -0
- data/lib/netsuite/records/custom_list_custom_value.rb +14 -0
- data/lib/netsuite/records/custom_list_custom_value_list.rb +13 -0
- data/lib/netsuite/records/custom_record.rb +1 -1
- data/lib/netsuite/records/custom_record_type.rb +1 -1
- data/lib/netsuite/records/customer.rb +4 -4
- data/lib/netsuite/records/customer_addressbook.rb +8 -5
- data/lib/netsuite/records/customer_addressbook_list.rb +13 -1
- data/lib/netsuite/records/customer_deposit.rb +3 -2
- data/lib/netsuite/records/customer_payment.rb +1 -1
- data/lib/netsuite/records/customer_refund.rb +1 -1
- data/lib/netsuite/records/department.rb +4 -2
- data/lib/netsuite/records/deposit.rb +1 -1
- data/lib/netsuite/records/deposit_cash_back.rb +2 -2
- data/lib/netsuite/records/deposit_other.rb +2 -2
- data/lib/netsuite/records/discount_item.rb +32 -0
- data/lib/netsuite/records/employee.rb +20 -0
- data/lib/netsuite/records/file.rb +28 -0
- data/lib/netsuite/records/inventory_assignment.rb +24 -0
- data/lib/netsuite/records/inventory_assignment_list.rb +32 -0
- data/lib/netsuite/records/inventory_detail.rb +18 -0
- data/lib/netsuite/records/inventory_transfer.rb +29 -0
- data/lib/netsuite/records/inventory_transfer_inventory.rb +21 -0
- data/lib/netsuite/records/inventory_transfer_inventory_list.rb +33 -0
- data/lib/netsuite/records/item_fulfillment.rb +1 -1
- data/lib/netsuite/records/item_fulfillment_item_list.rb +3 -21
- data/lib/netsuite/records/item_member.rb +21 -0
- data/lib/netsuite/records/journal_entry.rb +1 -1
- data/lib/netsuite/records/kit_item.rb +1 -1
- data/lib/netsuite/records/location.rb +3 -1
- data/lib/netsuite/records/member_list.rb +32 -0
- data/lib/netsuite/records/non_inventory_sale_item.rb +4 -1
- data/lib/netsuite/records/partner.rb +21 -0
- data/lib/netsuite/records/promotion_code.rb +38 -0
- data/lib/netsuite/records/record_ref_list.rb +40 -0
- data/lib/netsuite/records/role_list.rb +25 -0
- data/lib/netsuite/records/sales_order.rb +6 -2
- data/lib/netsuite/records/sales_tax_item.rb +32 -0
- data/lib/netsuite/records/site_category.rb +33 -0
- data/lib/netsuite/records/subsidiary.rb +38 -0
- data/lib/netsuite/records/tax_type.rb +22 -0
- data/lib/netsuite/records/term.rb +1 -1
- data/lib/netsuite/records/units_type.rb +25 -0
- data/lib/netsuite/records/units_type_uom.rb +20 -0
- data/lib/netsuite/records/units_type_uom_list.rb +33 -0
- data/lib/netsuite/records/work_order.rb +38 -0
- data/lib/netsuite/records/work_order_item.rb +31 -0
- data/lib/netsuite/records/work_order_item_list.rb +31 -0
- data/lib/netsuite/support/actions.rb +4 -0
- data/lib/netsuite/support/base.rb +21 -0
- data/lib/netsuite/support/country.rb +273 -0
- data/lib/netsuite/support/search_result.rb +4 -0
- data/lib/netsuite/support/sublist.rb +54 -0
- data/lib/netsuite/version.rb +1 -1
- data/spec/netsuite/actions/search_spec.rb +1 -1
- data/spec/netsuite/actions/update_spec.rb +62 -31
- data/spec/netsuite/actions/upsert_list_spec.rb +112 -0
- data/spec/netsuite/records/account_spec.rb +4 -4
- data/spec/netsuite/records/accounting_period_spec.rb +4 -4
- data/spec/netsuite/records/assembly_item_spec.rb +38 -0
- data/spec/netsuite/records/billing_schedule_milestone_list_spec.rb +24 -0
- data/spec/netsuite/records/billing_schedule_milestone_spec.rb +51 -0
- data/spec/netsuite/records/billing_schedule_recurrence_list_spec.rb +24 -0
- data/spec/netsuite/records/billing_schedule_recurrence_spec.rb +49 -0
- data/spec/netsuite/records/billing_schedule_spec.rb +164 -0
- data/spec/netsuite/records/campaign_spec.rb +43 -0
- data/spec/netsuite/records/cash_refund_spec.rb +1 -1
- data/spec/netsuite/records/classification_spec.rb +2 -2
- data/spec/netsuite/records/credit_memo_spec.rb +4 -4
- data/spec/netsuite/records/custom_field_list_spec.rb +10 -0
- data/spec/netsuite/records/custom_list_spec.rb +21 -0
- data/spec/netsuite/records/custom_record_spec.rb +5 -5
- data/spec/netsuite/records/custom_record_type_spec.rb +5 -5
- data/spec/netsuite/records/customer_addressbook_list_spec.rb +19 -1
- data/spec/netsuite/records/customer_addressbook_spec.rb +42 -13
- data/spec/netsuite/records/customer_payment_spec.rb +4 -4
- data/spec/netsuite/records/customer_refund_spec.rb +4 -4
- data/spec/netsuite/records/customer_spec.rb +80 -6
- data/spec/netsuite/records/department_spec.rb +4 -4
- data/spec/netsuite/records/deposit_spec.rb +22 -4
- data/spec/netsuite/records/discount_item_spec.rb +124 -0
- data/spec/netsuite/records/inventory_item_spec.rb +4 -4
- data/spec/netsuite/records/inventory_transfer_spec.rb +58 -0
- data/spec/netsuite/records/invoice_spec.rb +4 -4
- data/spec/netsuite/records/job_spec.rb +7 -7
- data/spec/netsuite/records/journal_entry_spec.rb +5 -5
- data/spec/netsuite/records/non_inventory_sale_item_spec.rb +4 -4
- data/spec/netsuite/records/payment_method_spec.rb +1 -1
- data/spec/netsuite/records/pomo_code_spec.rb +40 -0
- data/spec/netsuite/records/sales_order_spec.rb +18 -18
- data/spec/netsuite/records/sales_tax_item_spec.rb +30 -0
- data/spec/netsuite/records/service_sale_item_spec.rb +4 -4
- data/spec/netsuite/records/site_category_spec.rb +51 -0
- data/spec/netsuite/records/subsidiary_spec.rb +25 -0
- data/spec/netsuite/records/support_case_spec.rb +8 -8
- data/spec/netsuite/records/tax_type_spec.rb +11 -0
- data/spec/netsuite/records/term_spec.rb +4 -4
- data/spec/netsuite/records/units_type_spec.rb +33 -0
- data/spec/netsuite/records/units_type_uom_list_spec.rb +23 -0
- data/spec/netsuite/records/units_type_uom_spec.rb +14 -0
- data/spec/netsuite/records/work_order_item_list_spec.rb +26 -0
- data/spec/netsuite/records/work_order_item_spec.rb +45 -0
- data/spec/netsuite/records/work_order_spec.rb +92 -0
- data/spec/netsuite/support/record_refs_spec.rb +1 -1
- data/spec/netsuite/support/sublist_spec.rb +36 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/support/fixtures/update/update_customer_error.xml +21 -0
- data/spec/support/fixtures/update/update_customer_multiple_errors.xml +25 -0
- data/spec/support/fixtures/upsert_list/upsert_list_customers.xml +21 -0
- data/spec/support/fixtures/upsert_list/upsert_list_one_customer.xml +17 -0
- data/spec/support/fixtures/upsert_list/upsert_list_with_errors.xml +32 -0
- data/spec/support/read_only_field_matcher.rb +1 -1
- metadata +115 -5
- checksums.yaml +0 -15
|
@@ -10,10 +10,28 @@ describe NetSuite::Records::CustomerAddressbookList do
|
|
|
10
10
|
describe '#to_record' do
|
|
11
11
|
it 'can represent itself as a SOAP record' do
|
|
12
12
|
record = {
|
|
13
|
-
'listRel:addressbook' => []
|
|
13
|
+
'listRel:addressbook' => [],
|
|
14
|
+
'listRel:replaceAll' => true
|
|
14
15
|
}
|
|
15
16
|
list.to_record.should eql(record)
|
|
16
17
|
end
|
|
17
18
|
end
|
|
18
19
|
|
|
20
|
+
describe "#replace_all" do
|
|
21
|
+
it "returns true by default" do
|
|
22
|
+
list.replace_all.should eql(true)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "can be changed via accessor" do
|
|
26
|
+
list.replace_all = false
|
|
27
|
+
|
|
28
|
+
list.replace_all.should eql(false)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "coerces to a boolean" do
|
|
32
|
+
list.replace_all = "goober"
|
|
33
|
+
list.replace_all.should eql(true)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
19
37
|
end
|
|
@@ -24,24 +24,32 @@ describe NetSuite::Records::CustomerAddressbook do
|
|
|
24
24
|
it 'has all the right fields' do
|
|
25
25
|
[
|
|
26
26
|
:default_shipping, :default_billing, :is_residential, :label, :attention, :addressee,
|
|
27
|
-
:phone, :addr1, :addr2, :addr3, :city, :zip, :
|
|
27
|
+
:phone, :addr1, :addr2, :addr3, :city, :zip, :addr_text, :override, :state
|
|
28
28
|
].each do |field|
|
|
29
29
|
list.should have_field(field)
|
|
30
30
|
end
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
+
it 'has all the right read_only_fields' do
|
|
34
|
+
[
|
|
35
|
+
:addr_text
|
|
36
|
+
].each do |field|
|
|
37
|
+
NetSuite::Records::CustomerAddressbook.should have_read_only_field(field)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
33
41
|
describe '#initialize' do
|
|
34
42
|
context 'when taking in a hash of attributes' do
|
|
35
43
|
it 'sets the attributes for the object given the attributes hash' do
|
|
36
44
|
list.addr1.should eql('123 Happy Lane')
|
|
37
45
|
list.addr_text.should eql("123 Happy Lane\nLos Angeles CA 90007")
|
|
38
46
|
list.city.should eql('Los Angeles')
|
|
39
|
-
list.country.should eql('_unitedStates')
|
|
40
|
-
list.default_billing.should
|
|
41
|
-
list.default_shipping.should
|
|
42
|
-
list.is_residential.should
|
|
47
|
+
list.country.to_record.should eql('_unitedStates')
|
|
48
|
+
list.default_billing.should be_truthy
|
|
49
|
+
list.default_shipping.should be_truthy
|
|
50
|
+
list.is_residential.should be_falsey
|
|
43
51
|
list.label.should eql('123 Happy Lane')
|
|
44
|
-
list.override.should
|
|
52
|
+
list.override.should be_falsey
|
|
45
53
|
list.state.should eql('CA')
|
|
46
54
|
list.zip.should eql('90007')
|
|
47
55
|
list.internal_id.should eql('567')
|
|
@@ -55,12 +63,12 @@ describe NetSuite::Records::CustomerAddressbook do
|
|
|
55
63
|
list.addr1.should eql('123 Happy Lane')
|
|
56
64
|
list.addr_text.should eql("123 Happy Lane\nLos Angeles CA 90007")
|
|
57
65
|
list.city.should eql('Los Angeles')
|
|
58
|
-
list.country.should eql('_unitedStates')
|
|
59
|
-
list.default_billing.should
|
|
60
|
-
list.default_shipping.should
|
|
61
|
-
list.is_residential.should
|
|
66
|
+
list.country.to_record.should eql('_unitedStates')
|
|
67
|
+
list.default_billing.should be_truthy
|
|
68
|
+
list.default_shipping.should be_truthy
|
|
69
|
+
list.is_residential.should be_falsey
|
|
62
70
|
list.label.should eql('123 Happy Lane')
|
|
63
|
-
list.override.should
|
|
71
|
+
list.override.should be_falsey
|
|
64
72
|
list.state.should eql('CA')
|
|
65
73
|
list.zip.should eql('90007')
|
|
66
74
|
list.internal_id.should eql('567')
|
|
@@ -72,7 +80,6 @@ describe NetSuite::Records::CustomerAddressbook do
|
|
|
72
80
|
it 'can represent itself as a SOAP record' do
|
|
73
81
|
record = {
|
|
74
82
|
'listRel:addr1' => '123 Happy Lane',
|
|
75
|
-
'listRel:addrText' => "123 Happy Lane\nLos Angeles CA 90007",
|
|
76
83
|
'listRel:city' => 'Los Angeles',
|
|
77
84
|
'listRel:country' => '_unitedStates',
|
|
78
85
|
'listRel:defaultBilling' => true,
|
|
@@ -81,12 +88,34 @@ describe NetSuite::Records::CustomerAddressbook do
|
|
|
81
88
|
'listRel:label' => '123 Happy Lane',
|
|
82
89
|
'listRel:override' => false,
|
|
83
90
|
'listRel:state' => 'CA',
|
|
84
|
-
'listRel:zip' => '90007'
|
|
91
|
+
'listRel:zip' => '90007',
|
|
92
|
+
"listRel:internalId" => "567"
|
|
85
93
|
}
|
|
86
94
|
list.to_record.should eql(record)
|
|
87
95
|
end
|
|
88
96
|
end
|
|
89
97
|
|
|
98
|
+
describe "#country" do
|
|
99
|
+
context "when it's specified as a 2 character ISO code" do
|
|
100
|
+
it "is converted to the appropriate NetSuite enum value" do
|
|
101
|
+
addressbook = NetSuite::Records::CustomerAddressbook.new country: "US"
|
|
102
|
+
addressbook.to_record["listRel:country"].should eql "_unitedStates"
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
context "when the country code is a YAML reserved word (NO)" do
|
|
107
|
+
it "is converted to the appropriate NetSuite enum value" do
|
|
108
|
+
addressbook = NetSuite::Records::CustomerAddressbook.new country: "NO"
|
|
109
|
+
addressbook.to_record["listRel:country"].should eql "_norway"
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
it "can be specified as the NetSuite enum value" do
|
|
114
|
+
addressbook = NetSuite::Records::CustomerAddressbook.new country: "_unitedStates"
|
|
115
|
+
addressbook.to_record["listRel:country"].should eql "_unitedStates"
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
90
119
|
describe '#record_type' do
|
|
91
120
|
it 'returns a string of the record SOAP type' do
|
|
92
121
|
list.record_type.should eql('listRel:CustomerAddressbook')
|
|
@@ -109,7 +109,7 @@ describe NetSuite::Records::CustomerPayment do
|
|
|
109
109
|
NetSuite::Actions::Add.should_receive(:call).
|
|
110
110
|
with([payment], {}).
|
|
111
111
|
and_return(response)
|
|
112
|
-
payment.add.should
|
|
112
|
+
payment.add.should be_truthy
|
|
113
113
|
end
|
|
114
114
|
end
|
|
115
115
|
|
|
@@ -121,7 +121,7 @@ describe NetSuite::Records::CustomerPayment do
|
|
|
121
121
|
NetSuite::Actions::Add.should_receive(:call).
|
|
122
122
|
with([payment], {}).
|
|
123
123
|
and_return(response)
|
|
124
|
-
payment.add.should
|
|
124
|
+
payment.add.should be_falsey
|
|
125
125
|
end
|
|
126
126
|
end
|
|
127
127
|
end
|
|
@@ -134,7 +134,7 @@ describe NetSuite::Records::CustomerPayment do
|
|
|
134
134
|
NetSuite::Actions::Delete.should_receive(:call).
|
|
135
135
|
with([payment], {}).
|
|
136
136
|
and_return(response)
|
|
137
|
-
payment.delete.should
|
|
137
|
+
payment.delete.should be_truthy
|
|
138
138
|
end
|
|
139
139
|
end
|
|
140
140
|
|
|
@@ -145,7 +145,7 @@ describe NetSuite::Records::CustomerPayment do
|
|
|
145
145
|
NetSuite::Actions::Delete.should_receive(:call).
|
|
146
146
|
with([payment], {}).
|
|
147
147
|
and_return(response)
|
|
148
|
-
payment.delete.should
|
|
148
|
+
payment.delete.should be_falsey
|
|
149
149
|
end
|
|
150
150
|
end
|
|
151
151
|
end
|
|
@@ -131,7 +131,7 @@ describe NetSuite::Records::CustomerRefund do
|
|
|
131
131
|
NetSuite::Actions::Add.should_receive(:call).
|
|
132
132
|
with([refund], {}).
|
|
133
133
|
and_return(response)
|
|
134
|
-
refund.add.should
|
|
134
|
+
refund.add.should be_truthy
|
|
135
135
|
end
|
|
136
136
|
end
|
|
137
137
|
|
|
@@ -143,7 +143,7 @@ describe NetSuite::Records::CustomerRefund do
|
|
|
143
143
|
NetSuite::Actions::Add.should_receive(:call).
|
|
144
144
|
with([refund], {}).
|
|
145
145
|
and_return(response)
|
|
146
|
-
refund.add.should
|
|
146
|
+
refund.add.should be_falsey
|
|
147
147
|
end
|
|
148
148
|
end
|
|
149
149
|
end
|
|
@@ -157,7 +157,7 @@ describe NetSuite::Records::CustomerRefund do
|
|
|
157
157
|
NetSuite::Actions::Delete.should_receive(:call).
|
|
158
158
|
with([refund], {}).
|
|
159
159
|
and_return(response)
|
|
160
|
-
refund.delete.should
|
|
160
|
+
refund.delete.should be_truthy
|
|
161
161
|
end
|
|
162
162
|
end
|
|
163
163
|
|
|
@@ -169,7 +169,7 @@ describe NetSuite::Records::CustomerRefund do
|
|
|
169
169
|
NetSuite::Actions::Delete.should_receive(:call).
|
|
170
170
|
with([refund], {}).
|
|
171
171
|
and_return(response)
|
|
172
|
-
refund.delete.should
|
|
172
|
+
refund.delete.should be_falsey
|
|
173
173
|
end
|
|
174
174
|
end
|
|
175
175
|
end
|
|
@@ -8,7 +8,7 @@ describe NetSuite::Records::Customer do
|
|
|
8
8
|
:access_role, :account_number, :aging, :alt_email, :alt_name, :alt_phone, :balance, :bill_pay,
|
|
9
9
|
:buying_reason, :buying_time_frame, :campaign_category, :click_stream, :comments, :company_name,
|
|
10
10
|
:consol_aging, :consol_balance, :consol_days_overdue, :consol_deposit_balance, :consol_overdue_balance,
|
|
11
|
-
:consol_unbilled_orders, :
|
|
11
|
+
:consol_unbilled_orders, :contrib_pct, :credit_cards_list, :credit_hold_override, :credit_limit,
|
|
12
12
|
:currency, :currency_list, :date_created, :days_overdue, :default_address,
|
|
13
13
|
:deposit_balance, :download_list, :email, :email_preference, :email_transactions, :end_date, :entity_id,
|
|
14
14
|
:estimated_budget, :fax, :fax_transactions, :first_name, :first_visit, :give_access, :global_subscription_status,
|
|
@@ -34,6 +34,8 @@ describe NetSuite::Records::Customer do
|
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
+
# TODO test contact_roles_list
|
|
38
|
+
|
|
37
39
|
describe '#addressbook_list' do
|
|
38
40
|
it 'can be set from attributes' do
|
|
39
41
|
customer.addressbook_list = {
|
|
@@ -91,7 +93,7 @@ describe NetSuite::Records::Customer do
|
|
|
91
93
|
NetSuite::Actions::Get.should_receive(:call).with([NetSuite::Records::Customer, {:external_id => 1}], {}).and_return(response)
|
|
92
94
|
customer = NetSuite::Records::Customer.get(:external_id => 1)
|
|
93
95
|
customer.should be_kind_of(NetSuite::Records::Customer)
|
|
94
|
-
customer.is_person.should
|
|
96
|
+
customer.is_person.should be_truthy
|
|
95
97
|
end
|
|
96
98
|
end
|
|
97
99
|
|
|
@@ -118,7 +120,7 @@ describe NetSuite::Records::Customer do
|
|
|
118
120
|
NetSuite::Actions::Add.should_receive(:call).
|
|
119
121
|
with([customer], {}).
|
|
120
122
|
and_return(response)
|
|
121
|
-
customer.add.should
|
|
123
|
+
customer.add.should be_truthy
|
|
122
124
|
end
|
|
123
125
|
end
|
|
124
126
|
|
|
@@ -129,7 +131,7 @@ describe NetSuite::Records::Customer do
|
|
|
129
131
|
NetSuite::Actions::Add.should_receive(:call).
|
|
130
132
|
with([customer], {}).
|
|
131
133
|
and_return(response)
|
|
132
|
-
customer.add.should
|
|
134
|
+
customer.add.should be_falsey
|
|
133
135
|
end
|
|
134
136
|
end
|
|
135
137
|
end
|
|
@@ -142,7 +144,7 @@ describe NetSuite::Records::Customer do
|
|
|
142
144
|
NetSuite::Actions::Delete.should_receive(:call).
|
|
143
145
|
with([customer], {}).
|
|
144
146
|
and_return(response)
|
|
145
|
-
customer.delete.should
|
|
147
|
+
customer.delete.should be_truthy
|
|
146
148
|
end
|
|
147
149
|
end
|
|
148
150
|
|
|
@@ -153,7 +155,7 @@ describe NetSuite::Records::Customer do
|
|
|
153
155
|
NetSuite::Actions::Delete.should_receive(:call).
|
|
154
156
|
with([customer], {}).
|
|
155
157
|
and_return(response)
|
|
156
|
-
customer.delete.should
|
|
158
|
+
customer.delete.should be_falsey
|
|
157
159
|
end
|
|
158
160
|
end
|
|
159
161
|
end
|
|
@@ -175,4 +177,76 @@ describe NetSuite::Records::Customer do
|
|
|
175
177
|
end
|
|
176
178
|
end
|
|
177
179
|
|
|
180
|
+
describe '.upsert_list' do
|
|
181
|
+
before { savon.mock! }
|
|
182
|
+
after { savon.unmock! }
|
|
183
|
+
|
|
184
|
+
context 'with one customer' do
|
|
185
|
+
before do
|
|
186
|
+
savon.expects(:upsert_list).with(:message =>
|
|
187
|
+
{
|
|
188
|
+
'record' => [{
|
|
189
|
+
'listRel:entityId' => 'Target',
|
|
190
|
+
'listRel:companyName' => 'Target',
|
|
191
|
+
'@xsi:type' => 'listRel:Customer',
|
|
192
|
+
'@externalId' => 'ext2'
|
|
193
|
+
}]
|
|
194
|
+
}).returns(File.read('spec/support/fixtures/upsert_list/upsert_list_one_customer.xml'))
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
it 'returns collection with one Customer instances populated with the data from the response object' do
|
|
198
|
+
customers = NetSuite::Records::Customer.upsert_list([
|
|
199
|
+
{
|
|
200
|
+
external_id: 'ext2',
|
|
201
|
+
entity_id: 'Target',
|
|
202
|
+
company_name: 'Target'
|
|
203
|
+
}
|
|
204
|
+
])
|
|
205
|
+
shutter_fly = customers[0]
|
|
206
|
+
expect(shutter_fly).to be_kind_of(NetSuite::Records::Customer)
|
|
207
|
+
expect(shutter_fly.entity_id).to eq('Target')
|
|
208
|
+
expect(shutter_fly.internal_id).to eq('974')
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
context 'with two customers' do
|
|
213
|
+
before do
|
|
214
|
+
savon.expects(:upsert_list).with(:message =>
|
|
215
|
+
{
|
|
216
|
+
'record' => [{
|
|
217
|
+
'listRel:entityId' => 'Shutter Fly',
|
|
218
|
+
'listRel:companyName' => 'Shutter Fly, Inc.',
|
|
219
|
+
'@xsi:type' => 'listRel:Customer',
|
|
220
|
+
'@externalId' => 'ext1'
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
'listRel:entityId' => 'Target',
|
|
224
|
+
'listRel:companyName' => 'Target',
|
|
225
|
+
'@xsi:type' => 'listRel:Customer',
|
|
226
|
+
'@externalId' => 'ext2'
|
|
227
|
+
}
|
|
228
|
+
]
|
|
229
|
+
}).returns(File.read('spec/support/fixtures/upsert_list/upsert_list_customers.xml'))
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
it 'returns collection of Customer instances populated with the data from the response object' do
|
|
233
|
+
customers = NetSuite::Records::Customer.upsert_list([
|
|
234
|
+
{
|
|
235
|
+
external_id: 'ext1',
|
|
236
|
+
entity_id: 'Shutter Fly',
|
|
237
|
+
company_name: 'Shutter Fly, Inc.'
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
external_id: 'ext2',
|
|
241
|
+
entity_id: 'Target',
|
|
242
|
+
company_name: 'Target'
|
|
243
|
+
}
|
|
244
|
+
])
|
|
245
|
+
shutter_fly = customers[0]
|
|
246
|
+
expect(shutter_fly).to be_kind_of(NetSuite::Records::Customer)
|
|
247
|
+
expect(shutter_fly.entity_id).to eq('Shutter Fly')
|
|
248
|
+
expect(shutter_fly.internal_id).to eq('970')
|
|
249
|
+
end
|
|
250
|
+
end
|
|
251
|
+
end
|
|
178
252
|
end
|
|
@@ -55,7 +55,7 @@ describe NetSuite::Records::Department do
|
|
|
55
55
|
NetSuite::Actions::Add.should_receive(:call).
|
|
56
56
|
with([department], {}).
|
|
57
57
|
and_return(response)
|
|
58
|
-
department.add.should
|
|
58
|
+
department.add.should be_truthy
|
|
59
59
|
end
|
|
60
60
|
end
|
|
61
61
|
|
|
@@ -67,7 +67,7 @@ describe NetSuite::Records::Department do
|
|
|
67
67
|
NetSuite::Actions::Add.should_receive(:call).
|
|
68
68
|
with([department], {}).
|
|
69
69
|
and_return(response)
|
|
70
|
-
department.add.should
|
|
70
|
+
department.add.should be_falsey
|
|
71
71
|
end
|
|
72
72
|
end
|
|
73
73
|
end
|
|
@@ -83,7 +83,7 @@ describe NetSuite::Records::Department do
|
|
|
83
83
|
NetSuite::Actions::Delete.should_receive(:call).
|
|
84
84
|
with([department], {}).
|
|
85
85
|
and_return(response)
|
|
86
|
-
department.delete.should
|
|
86
|
+
department.delete.should be_truthy
|
|
87
87
|
end
|
|
88
88
|
end
|
|
89
89
|
|
|
@@ -95,7 +95,7 @@ describe NetSuite::Records::Department do
|
|
|
95
95
|
NetSuite::Actions::Delete.should_receive(:call).
|
|
96
96
|
with([department], {}).
|
|
97
97
|
and_return(response)
|
|
98
|
-
department.delete.should
|
|
98
|
+
department.delete.should be_falsey
|
|
99
99
|
end
|
|
100
100
|
end
|
|
101
101
|
end
|
|
@@ -42,6 +42,24 @@ describe NetSuite::Records::Deposit do
|
|
|
42
42
|
end
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
+
describe '#cash_back_list' do
|
|
46
|
+
it 'can be set from attributes' do
|
|
47
|
+
attributes = {
|
|
48
|
+
amount: 100,
|
|
49
|
+
memo: "test"
|
|
50
|
+
}
|
|
51
|
+
deposit.cash_back_list.cashback = attributes
|
|
52
|
+
deposit.cash_back_list.should be_kind_of(NetSuite::Records::DepositCashBackList)
|
|
53
|
+
deposit.cash_back_list.cashbacks.length.should eql(1)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'can be set from a DepositCashBackList object' do
|
|
57
|
+
item_list = NetSuite::Records::DepositCashBackList.new
|
|
58
|
+
deposit.cash_back_list = item_list
|
|
59
|
+
deposit.cash_back_list.should eql(item_list)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
45
63
|
describe '.get' do
|
|
46
64
|
context 'when the response is successful' do
|
|
47
65
|
let(:response) { NetSuite::Response.new(:success => true, :body => { :memo => 'transfer for subscriptions' }) }
|
|
@@ -78,7 +96,7 @@ describe NetSuite::Records::Deposit do
|
|
|
78
96
|
NetSuite::Actions::Add.should_receive(:call).
|
|
79
97
|
with([deposit], {}).
|
|
80
98
|
and_return(response)
|
|
81
|
-
deposit.add.should
|
|
99
|
+
deposit.add.should be_truthy
|
|
82
100
|
end
|
|
83
101
|
end
|
|
84
102
|
|
|
@@ -90,7 +108,7 @@ describe NetSuite::Records::Deposit do
|
|
|
90
108
|
NetSuite::Actions::Add.should_receive(:call).
|
|
91
109
|
with([deposit], {}).
|
|
92
110
|
and_return(response)
|
|
93
|
-
deposit.add.should
|
|
111
|
+
deposit.add.should be_falsey
|
|
94
112
|
end
|
|
95
113
|
end
|
|
96
114
|
end
|
|
@@ -106,7 +124,7 @@ describe NetSuite::Records::Deposit do
|
|
|
106
124
|
NetSuite::Actions::Delete.should_receive(:call).
|
|
107
125
|
with([deposit], {}).
|
|
108
126
|
and_return(response)
|
|
109
|
-
deposit.delete.should
|
|
127
|
+
deposit.delete.should be_truthy
|
|
110
128
|
end
|
|
111
129
|
end
|
|
112
130
|
|
|
@@ -118,7 +136,7 @@ describe NetSuite::Records::Deposit do
|
|
|
118
136
|
NetSuite::Actions::Delete.should_receive(:call).
|
|
119
137
|
with([deposit], {}).
|
|
120
138
|
and_return(response)
|
|
121
|
-
deposit.delete.should
|
|
139
|
+
deposit.delete.should be_falsey
|
|
122
140
|
end
|
|
123
141
|
end
|
|
124
142
|
end
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe NetSuite::Records::DiscountItem do
|
|
4
|
+
let(:item) { NetSuite::Records::DiscountItem.new }
|
|
5
|
+
|
|
6
|
+
it 'has the right fields' do
|
|
7
|
+
[
|
|
8
|
+
:available_to_partners, :created_date, :description, :display_name, :include_children, :is_inactive, :is_pretax,
|
|
9
|
+
:item_id, :last_modified_date, :non_posting, :rate, :upc_code, :vendor_name
|
|
10
|
+
].each do |field|
|
|
11
|
+
item.should have_field(field)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# TODO there is a probably a more robust way to test this
|
|
15
|
+
item.custom_field_list.class.should == NetSuite::Records::CustomFieldList
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'has the right record_refs' do
|
|
19
|
+
[
|
|
20
|
+
:account, :custom_form, :deferred_revenue_account, :department, :expense_account,
|
|
21
|
+
:income_account, :issue_product, :klass, :location, :parent, :rev_rec_schedule, :sales_tax_code,
|
|
22
|
+
:subsidiary_list, :tax_schedule
|
|
23
|
+
].each do |record_ref|
|
|
24
|
+
item.should have_record_ref(record_ref)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe '.get' do
|
|
29
|
+
context 'when the response is successful' do
|
|
30
|
+
let(:response) { NetSuite::Response.new(:success => true, :body => { :item_id => 'penguins' }) }
|
|
31
|
+
|
|
32
|
+
it 'returns a DiscountItem instance populated with the data from the response object' do
|
|
33
|
+
NetSuite::Actions::Get.should_receive(:call).with([NetSuite::Records::DiscountItem, :external_id => 20], {}).and_return(response)
|
|
34
|
+
customer = NetSuite::Records::DiscountItem.get(:external_id => 20)
|
|
35
|
+
customer.should be_kind_of(NetSuite::Records::DiscountItem)
|
|
36
|
+
customer.item_id.should eql('penguins')
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
context 'when the response is unsuccessful' do
|
|
41
|
+
let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
|
|
42
|
+
|
|
43
|
+
it 'raises a RecordNotFound exception' do
|
|
44
|
+
NetSuite::Actions::Get.should_receive(:call).with([NetSuite::Records::DiscountItem, :external_id => 20], {}).and_return(response)
|
|
45
|
+
lambda {
|
|
46
|
+
NetSuite::Records::DiscountItem.get(:external_id => 20)
|
|
47
|
+
}.should raise_error(NetSuite::RecordNotFound,
|
|
48
|
+
/NetSuite::Records::DiscountItem with OPTIONS=(.*) could not be found/)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
describe '#add' do
|
|
54
|
+
# let(:item) { NetSuite::Records::DiscountItem.new(:cost => 100, :is_inactive => false) }
|
|
55
|
+
|
|
56
|
+
context 'when the response is successful' do
|
|
57
|
+
let(:response) { NetSuite::Response.new(:success => true, :body => { :internal_id => '1' }) }
|
|
58
|
+
|
|
59
|
+
it 'returns true' do
|
|
60
|
+
NetSuite::Actions::Add.should_receive(:call).
|
|
61
|
+
with([item], {}).
|
|
62
|
+
and_return(response)
|
|
63
|
+
item.add.should be_truthy
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
context 'when the response is unsuccessful' do
|
|
68
|
+
let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
|
|
69
|
+
|
|
70
|
+
it 'returns false' do
|
|
71
|
+
NetSuite::Actions::Add.should_receive(:call).
|
|
72
|
+
with([item], {}).
|
|
73
|
+
and_return(response)
|
|
74
|
+
item.add.should be_falsey
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
describe '#delete' do
|
|
80
|
+
context 'when the response is successful' do
|
|
81
|
+
let(:response) { NetSuite::Response.new(:success => true, :body => { :internal_id => '1' }) }
|
|
82
|
+
|
|
83
|
+
it 'returns true' do
|
|
84
|
+
NetSuite::Actions::Delete.should_receive(:call).
|
|
85
|
+
with([item], {}).
|
|
86
|
+
and_return(response)
|
|
87
|
+
item.delete.should be_truthy
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
context 'when the response is unsuccessful' do
|
|
92
|
+
let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
|
|
93
|
+
|
|
94
|
+
it 'returns false' do
|
|
95
|
+
NetSuite::Actions::Delete.should_receive(:call).
|
|
96
|
+
with([item], {}).
|
|
97
|
+
and_return(response)
|
|
98
|
+
item.delete.should be_falsey
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
describe '#to_record' do
|
|
104
|
+
before do
|
|
105
|
+
item.item_id = 'penguins'
|
|
106
|
+
item.is_inactive = true
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it 'can represent itself as a SOAP record' do
|
|
110
|
+
record = {
|
|
111
|
+
'listAcct:itemId' => 'penguins',
|
|
112
|
+
'listAcct:isInactive' => true
|
|
113
|
+
}
|
|
114
|
+
item.to_record.should eql(record)
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
describe '#record_type' do
|
|
119
|
+
it 'returns a string of the SOAP type' do
|
|
120
|
+
item.record_type.should eql('listAcct:DiscountItem')
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
end
|