netsuite 0.6.9 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -23,6 +23,7 @@ module NetSuite
23
23
  autoload :TranCust, 'netsuite/namespaces/tran_cust'
24
24
  autoload :TranEmp, 'netsuite/namespaces/tran_emp'
25
25
  autoload :TranGeneral, 'netsuite/namespaces/tran_general'
26
+ autoload :CommGeneral, 'netsuite/namespaces/comm_general'
26
27
  autoload :TranInvt, 'netsuite/namespaces/tran_invt'
27
28
  autoload :TranSales, 'netsuite/namespaces/tran_sales'
28
29
  autoload :TranPurch, 'netsuite/namespaces/tran_purch'
@@ -125,6 +126,7 @@ module NetSuite
125
126
  autoload :DepositOtherList, 'netsuite/records/deposit_other_list'
126
127
  autoload :DepositCashBack, 'netsuite/records/deposit_cash_back'
127
128
  autoload :DepositCashBackList, 'netsuite/records/deposit_cash_back_list'
129
+ autoload :DescriptionItem, 'netsuite/records/description_item'
128
130
  autoload :DiscountItem, 'netsuite/records/discount_item'
129
131
  autoload :Duration, 'netsuite/records/duration'
130
132
  autoload :Employee, 'netsuite/records/employee'
@@ -154,6 +156,8 @@ module NetSuite
154
156
  autoload :ItemReceipt, 'netsuite/records/item_receipt'
155
157
  autoload :ItemReceiptItemList, 'netsuite/records/item_receipt_item_list'
156
158
  autoload :ItemReceiptItem, 'netsuite/records/item_receipt_item'
159
+ autoload :ItemVendor, 'netsuite/records/item_vendor'
160
+ autoload :ItemVendorList, 'netsuite/records/item_vendor_list'
157
161
  autoload :Job, 'netsuite/records/job'
158
162
  autoload :JobStatus, 'netsuite/records/job_status'
159
163
  autoload :JournalEntry, 'netsuite/records/journal_entry'
@@ -167,6 +171,8 @@ module NetSuite
167
171
  autoload :NonInventorySaleItem, 'netsuite/records/non_inventory_sale_item'
168
172
  autoload :NonInventoryPurchaseItem, 'netsuite/records/non_inventory_purchase_item'
169
173
  autoload :NonInventoryResaleItem, 'netsuite/records/non_inventory_resale_item'
174
+ autoload :Note, 'netsuite/records/note'
175
+ autoload :NoteType, 'netsuite/records/note_type'
170
176
  autoload :Opportunity, 'netsuite/records/opportunity'
171
177
  autoload :OpportunityItem, 'netsuite/records/opportunity_item'
172
178
  autoload :OpportunityItemList, 'netsuite/records/opportunity_item_list'
@@ -195,6 +201,7 @@ module NetSuite
195
201
  autoload :ShipAddress, 'netsuite/records/ship_address'
196
202
  autoload :SiteCategory, 'netsuite/records/site_category'
197
203
  autoload :Subsidiary, 'netsuite/records/subsidiary'
204
+ autoload :SubtotalItem, 'netsuite/records/subtotal_item'
198
205
  autoload :SupportCase, 'netsuite/records/support_case'
199
206
  autoload :TaxType, 'netsuite/records/tax_type'
200
207
  autoload :TaxGroup, 'netsuite/records/tax_group'
@@ -166,6 +166,7 @@ module NetSuite
166
166
  'xmlns:tranInvt' => "urn:inventory_#{api_version}.transactions.webservices.netsuite.com",
167
167
  'xmlns:listSupport' => "urn:support_#{api_version}.lists.webservices.netsuite.com",
168
168
  'xmlns:tranGeneral' => "urn:general_#{api_version}.transactions.webservices.netsuite.com",
169
+ 'xmlns:commGeneral' => "urn:communication_#{api_version}.general.webservices.netsuite.com",
169
170
  'xmlns:listMkt' => "urn:marketing_#{api_version}.lists.webservices.netsuite.com",
170
171
  'xmlns:listWebsite' => "urn:website_#{api_version}.lists.webservices.netsuite.com",
171
172
  'xmlns:fileCabinet' => "urn:filecabinet_#{api_version}.documents.webservices.netsuite.com",
@@ -0,0 +1,11 @@
1
+ module NetSuite
2
+ module Namespaces
3
+ module CommGeneral
4
+
5
+ def record_namespace
6
+ 'commGeneral'
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -43,6 +43,7 @@ module NetSuite
43
43
  field :custom_field_list, CustomFieldList
44
44
  field :bin_number_list, BinNumberList
45
45
  field :locations_list, LocationsList
46
+ field :item_vendor_list, ItemVendorList
46
47
  field :pricing_matrix, PricingMatrix
47
48
  field :member_list, MemberList
48
49
  field :subsidiary_list, RecordRefList
@@ -0,0 +1,34 @@
1
+ module NetSuite
2
+ module Records
3
+ class SubtotalItem
4
+ include Support::Fields
5
+ include Support::RecordRefs
6
+ include Support::Records
7
+ include Support::Actions
8
+ include Namespaces::ListAcct
9
+
10
+ actions :get, :get_list, :add, :delete, :search, :update, :upsert
11
+
12
+ fields :available_to_partners, :created_date, :description, :display_name, :include_children, :is_inactive, :item_id, :last_modified_date
13
+
14
+ record_refs :custom_form, :department, :issue_product, :klass, :location
15
+
16
+ field :custom_field_list, CustomFieldList
17
+ field :subsidiary_list, RecordRefList
18
+ # TODO field :translations_list, TranslationList
19
+
20
+ attr_reader :internal_id
21
+ attr_accessor :external_id
22
+
23
+ def initialize(attributes = {})
24
+ @internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
25
+ @external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
26
+ initialize_from_attributes_hash(attributes)
27
+ end
28
+
29
+ def self.search_class_name
30
+ "Item"
31
+ end
32
+ end
33
+ end
34
+ end
@@ -13,10 +13,7 @@ module NetSuite
13
13
 
14
14
  record_refs :auth_code
15
15
 
16
- attr_reader :internal_id
17
-
18
16
  def initialize(attributes = {})
19
- @internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
20
17
  initialize_from_attributes_hash(attributes)
21
18
  end
22
19
 
@@ -57,12 +57,13 @@ module NetSuite
57
57
  field :custom_field_list, CustomFieldList
58
58
  field :bin_number_list, BinNumberList
59
59
  field :locations_list, LocationsList
60
+ field :item_vendor_list, ItemVendorList
60
61
  field :matrix_option_list, MatrixOptionList
61
62
  field :subsidiary_list, RecordRefList
62
63
 
63
64
  # for Assembly/Kit
64
65
  field :member_list, MemberList
65
-
66
+
66
67
  attr_reader :internal_id
67
68
  attr_accessor :external_id
68
69
 
@@ -36,6 +36,8 @@ module NetSuite
36
36
  field :transaction_ship_address, ShipAddress
37
37
  field :item_list, InvoiceItemList
38
38
  field :custom_field_list, CustomFieldList
39
+ field :shipping_address, Address
40
+ field :billing_address, Address
39
41
 
40
42
  read_only_fields :sub_total, :discount_total, :total, :recognized_revenue, :amount_remaining, :amount_paid,
41
43
  :alt_shipping_cost, :gift_cert_applied, :handling_cost, :alt_handling_cost
@@ -46,6 +48,7 @@ module NetSuite
46
48
 
47
49
  attr_reader :internal_id
48
50
  attr_accessor :external_id
51
+ attr_accessor :search_joins
49
52
 
50
53
  def initialize(attributes = {})
51
54
  @internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
@@ -0,0 +1,15 @@
1
+ module NetSuite
2
+ module Records
3
+ class ItemVendor
4
+ include Support::Fields
5
+ include Support::Records
6
+ include Namespaces::ListAcct
7
+
8
+ fields :vendor, :purchase_price, :preferred_vendor
9
+
10
+ def initialize(attributes = {})
11
+ initialize_from_attributes_hash(attributes)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ module NetSuite
2
+ module Records
3
+ class ItemVendorList < Support::Sublist
4
+ include Namespaces::ListAcct
5
+
6
+ sublist :item_vendor, ItemVendor
7
+
8
+ alias :item_vendors :item_vendor
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,33 @@
1
+ module NetSuite
2
+ module Records
3
+ class Note
4
+ include Support::Records
5
+ include Support::Fields
6
+
7
+ include Support::Actions
8
+ include Support::RecordRefs
9
+ include Namespaces::CommGeneral
10
+
11
+ # https://system.netsuite.com/help/helpcenter/en_US/srbrowser/Browser2016_1/schema/record/note.html
12
+
13
+ actions :get, :get_list, :add, :update, :upsert, :upsert_list, :delete, :delete_list, :search
14
+
15
+ fields :direction, :lastModifiedDate, :note, :noteDate, :title, :topic
16
+
17
+ record_refs :noteType, :activity, :author, :customForm, :entity, :folder, :item, :media, :record, :recordType, :transaction
18
+
19
+ field :custom_field_list, CustomFieldList
20
+
21
+ attr_reader :internal_id
22
+ attr_accessor :external_id
23
+
24
+ def initialize(attributes = {})
25
+ @internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
26
+ @external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
27
+
28
+ initialize_from_attributes_hash(attributes)
29
+ end
30
+ end
31
+ end
32
+ end
33
+
@@ -0,0 +1,27 @@
1
+ module NetSuite
2
+ module Records
3
+ class NoteType
4
+ include Support::Records
5
+ include Support::Fields
6
+ include Support::Actions
7
+ include Namespaces::ListAcct
8
+
9
+ # https://system.netsuite.com/help/helpcenter/en_US/srbrowser/Browser2016_1/schema/record/notetype.html
10
+
11
+ actions :get, :search
12
+
13
+ fields :name, :description, :is_inactive
14
+
15
+ attr_reader :internal_id
16
+ attr_accessor :external_id
17
+
18
+ def initialize(attributes = {})
19
+ @internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
20
+ @external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
21
+
22
+ initialize_from_attributes_hash(attributes)
23
+ end
24
+ end
25
+ end
26
+ end
27
+
@@ -0,0 +1,35 @@
1
+ module NetSuite
2
+ module Records
3
+ class DescriptionItem
4
+ include Support::Fields
5
+ include Support::RecordRefs
6
+ include Support::Records
7
+ include Support::Actions
8
+ include Namespaces::ListAcct
9
+
10
+ actions :get, :get_list, :add, :delete, :search, :update, :upsert
11
+
12
+ fields :available_to_partners, :created_date, :description, :include_children, :is_inactive, :item_id, :last_modified_date
13
+
14
+ record_refs :custom_form, :department, :issue_product, :klass, :location
15
+
16
+ field :custom_field_list, CustomFieldList
17
+ field :subsidiary_list, RecordRefList
18
+ # TODO field :translations_list, TranslationList
19
+
20
+ attr_reader :internal_id
21
+ attr_accessor :external_id
22
+
23
+ def initialize(attributes = {})
24
+ @internal_id = attributes.delete(:internal_id) || attributes.delete(:@internal_id)
25
+ @external_id = attributes.delete(:external_id) || attributes.delete(:@external_id)
26
+ initialize_from_attributes_hash(attributes)
27
+ end
28
+
29
+ def self.search_class_name
30
+ "Item"
31
+ end
32
+ end
33
+ end
34
+ end
35
+
@@ -3,6 +3,7 @@ module NetSuite
3
3
  class Term
4
4
  include Support::Fields
5
5
  include Support::RecordRefs
6
+ include Support::Records
6
7
  include Support::Actions
7
8
  include Namespaces::ListAcct
8
9
 
@@ -1,3 +1,3 @@
1
1
  module Netsuite
2
- VERSION = '0.6.9'
2
+ VERSION = '0.7.0'
3
3
  end
@@ -35,4 +35,30 @@ describe NetSuite::Records::AssemblyItem do
35
35
  expect(item.subsidiary_list.record_ref[1].internal_id).to eq(2)
36
36
  end
37
37
  end
38
+
39
+ describe '#item_vendor_list' do
40
+ it 'can be set from attributes' do
41
+ attributes = {
42
+ :item_vendor => {
43
+ :vendor=>{
44
+ :name=>"Spring Water",
45
+ :"@xmlns:platform_core"=>"urn:core_2016_1.platform.webservices.netsuite.com",
46
+ :@internal_id=>"20"
47
+ },
48
+ :purchase_price=>"16.14",
49
+ :preferred_vendor=>true
50
+ }
51
+ }
52
+
53
+ item.item_vendor_list = attributes
54
+ expect(item.item_vendor_list).to be_kind_of(NetSuite::Records::ItemVendorList)
55
+ expect(item.item_vendor_list.item_vendors.length).to eql(1)
56
+ end
57
+
58
+ it 'can be set from a ItemVendorList object' do
59
+ item_vendor_list = NetSuite::Records::ItemVendorList.new
60
+ item.item_vendor_list = item_vendor_list
61
+ expect(item.item_vendor_list).to eql(item_vendor_list)
62
+ end
63
+ end
38
64
  end
@@ -34,7 +34,11 @@ describe 'basic records' do
34
34
  NetSuite::Records::ContactRole,
35
35
  NetSuite::Records::PaymentItem,
36
36
  NetSuite::Records::CreditMemo,
37
- NetSuite::Records::GiftCertRedemption,
37
+ NetSuite::Records::InventoryItem,
38
+ NetSuite::Records::DescriptionItem,
39
+ NetSuite::Records::SubtotalItem,
40
+ NetSuite::Records::Term,
41
+ NetSuite::Records::Note,
38
42
  ]
39
43
  }
40
44
 
@@ -60,8 +60,29 @@ describe NetSuite::Records::InventoryItem do
60
60
  end
61
61
 
62
62
  describe '#item_vendor_list' do
63
- it 'can be set from attributes'
64
- it 'can be set from an ItemVendorList object'
63
+ it 'can be set from attributes' do
64
+ attributes = {
65
+ :item_vendor => {
66
+ :vendor=>{
67
+ :name=>"Spring Water",
68
+ :"@xmlns:platform_core"=>"urn:core_2016_1.platform.webservices.netsuite.com",
69
+ :@internal_id=>"20"
70
+ },
71
+ :purchase_price=>"16.14",
72
+ :preferred_vendor=>true
73
+ }
74
+ }
75
+
76
+ item.item_vendor_list = attributes
77
+ expect(item.item_vendor_list).to be_kind_of(NetSuite::Records::ItemVendorList)
78
+ expect(item.item_vendor_list.item_vendors.length).to eql(1)
79
+ end
80
+
81
+ it 'can be set from a ItemVendorList object' do
82
+ item_vendor_list = NetSuite::Records::ItemVendorList.new
83
+ item.item_vendor_list = item_vendor_list
84
+ expect(item.item_vendor_list).to eql(item_vendor_list)
85
+ end
65
86
  end
66
87
 
67
88
  describe '#site_category_list' do
@@ -80,8 +101,24 @@ describe NetSuite::Records::InventoryItem do
80
101
  end
81
102
 
82
103
  describe '#locations_list' do
104
+ let(:response) {
105
+ NetSuite::Response.new(
106
+ :success => true,
107
+ :body => {
108
+ :locations_list => {:locations => %w(loc1 loc2) }
109
+ }
110
+ )
111
+ }
112
+
83
113
  it 'can be set from attributes'
84
- it 'can be set from an InventoryItemLocationsList object'
114
+ it 'can be set from an InventoryItemLocationsList object' do
115
+ expect(NetSuite::Actions::Get).to receive(:call)
116
+ .with([NetSuite::Records::InventoryItem, :internal_id => 20], {})
117
+ .and_return(response)
118
+ item = NetSuite::Records::InventoryItem.get(20)
119
+ expect(item).to be_kind_of(NetSuite::Records::InventoryItem)
120
+ expect(item.locations_list.locations).to eql(%w(loc1 loc2))
121
+ end
85
122
  end
86
123
 
87
124
  describe '#matrix_option_list' do
@@ -132,6 +132,62 @@ describe NetSuite::Records::Invoice do
132
132
  end
133
133
  end
134
134
 
135
+ describe '#shipping_address' do
136
+ it 'can be set from attributes' do
137
+ attributes = {
138
+ :country => "_unitedStates",
139
+ :attention => "William Sanders",
140
+ :addressee => "William Sanders",
141
+ :addr1 => "test1",
142
+ :addr2 => "test2",
143
+ :city => "San Francisco",
144
+ :state => "CA",
145
+ :zip => "94131",
146
+ :addr_text => "William Sanders<br>William Sanders<br>test1<br>test2<br>San Francisco CA 94131",
147
+ :override => false,
148
+ :"@xmlns:platform_common" => "urn:common_2016_1.platform.webservices.netsuite.com"
149
+ }
150
+
151
+ invoice.shipping_address = attributes
152
+ expect(invoice.shipping_address).to be_kind_of(NetSuite::Records::Address)
153
+ expect(invoice.shipping_address.addressee).to eql("William Sanders")
154
+ end
155
+
156
+ it 'can be set from a ItemVendorList object' do
157
+ shipping_address = NetSuite::Records::Address.new
158
+ invoice.shipping_address = shipping_address
159
+ expect(invoice.shipping_address).to eql(shipping_address)
160
+ end
161
+ end
162
+
163
+ describe '#billing_address' do
164
+ it 'can be set from attributes' do
165
+ attributes = {
166
+ :country => "_unitedStates",
167
+ :attention => "William Sanders",
168
+ :addressee => "William Sanders",
169
+ :addr1 => "test1",
170
+ :addr2 => "test2",
171
+ :city => "San Francisco",
172
+ :state => "CA",
173
+ :zip => "94131",
174
+ :addr_text => "William Sanders<br>William Sanders<br>test1<br>test2<br>San Francisco CA 94131",
175
+ :override => false,
176
+ :"@xmlns:platform_common" => "urn:common_2016_1.platform.webservices.netsuite.com"
177
+ }
178
+
179
+ invoice.billing_address = attributes
180
+ expect(invoice.billing_address).to be_kind_of(NetSuite::Records::Address)
181
+ expect(invoice.billing_address.addressee).to eql("William Sanders")
182
+ end
183
+
184
+ it 'can be set from a ItemVendorList object' do
185
+ billing_address = NetSuite::Records::Address.new
186
+ invoice.billing_address = billing_address
187
+ expect(invoice.billing_address).to eql(billing_address)
188
+ end
189
+ end
190
+
135
191
  describe '.get' do
136
192
  context 'when the response is successful' do
137
193
  let(:response) { NetSuite::Response.new(:success => true, :body => { :is_person => true }) }
@@ -156,6 +212,51 @@ describe NetSuite::Records::Invoice do
156
212
  end
157
213
  end
158
214
 
215
+ describe '.search' do
216
+ context 'when the response is successful' do
217
+ let(:response) do
218
+ NetSuite::Response.new(
219
+ :success => true,
220
+ :body => {
221
+ :status => { :@is_success => 'true' },
222
+ :total_records => '1',
223
+ :search_row_list => {
224
+ :search_row => {
225
+ :basic => {
226
+ :alt_name => {:search_value=>'A Awesome Name'},
227
+ :"@xmlns:platform_common"=>'urn:common_2012_1.platform.webservices.netsuite.com'},
228
+ :"@xsi:type" => 'listRel:ItemSearchRow'
229
+ }
230
+ }
231
+ }
232
+ )
233
+ end
234
+
235
+ it 'returns an Invoice instance populated with the data from the response object' do
236
+ allow(NetSuite::Actions::Search).to receive(:call).and_return(response)
237
+
238
+ invoice = NetSuite::Records::Invoice.search(
239
+ criteria: {
240
+ basic: [
241
+ {
242
+ field: 'type',
243
+ operator: 'anyOf',
244
+ type: 'SearchEnumMultiSelectField',
245
+ value: ['_invoice']
246
+ }
247
+ ]
248
+ },
249
+ columns: {
250
+ 'tranSales:basic' => [
251
+ 'platformCommon:internalId/' => {}
252
+ ]
253
+ }
254
+ ).results[0]
255
+ expect(invoice).to be_kind_of(NetSuite::Records::Invoice)
256
+ end
257
+ end
258
+ end
259
+
159
260
  describe '.initialize' do
160
261
  context 'when the request is successful' do
161
262
  it 'returns an initialized invoice from the customer entity' do
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Records::ItemVendorList do
4
+ let(:list) { NetSuite::Records::ItemVendorList.new }
5
+
6
+ it 'has a item_vendors attribute' do
7
+ expect(list.item_vendors).to be_kind_of(Array)
8
+ end
9
+
10
+ describe '#to_record' do
11
+ before do
12
+ list.item_vendors << NetSuite::Records::ItemVendor.new(
13
+ :vendor => {:name => 'Spring Water'}
14
+ )
15
+ end
16
+
17
+ it 'can represent itself as a SOAP record' do
18
+ record = {
19
+ "listAcct:itemVendor"=>[
20
+ {"listAcct:vendor"=>{
21
+ :name=>"Spring Water"
22
+ }
23
+ }
24
+ ]
25
+ }
26
+
27
+ expect(list.to_record).to eql(record)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Records::ItemVendor do
4
+ let(:vendor) { NetSuite::Records::ItemVendor.new }
5
+
6
+ it 'has all the right fields' do
7
+ [
8
+ :vendor, :purchase_price, :preferred_vendor
9
+ ].each do |field|
10
+ expect(vendor).to have_field(field)
11
+ end
12
+ end
13
+
14
+ it 'has all the right record refs'
15
+ end
@@ -0,0 +1,134 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Records::Note do
4
+ let(:note) { NetSuite::Records::Note.new }
5
+
6
+ it 'has all the right fields' do
7
+ [
8
+ :direction, :lastModifiedDate, :note, :noteDate, :title, :topic
9
+ ].each do |field|
10
+ expect(note).to have_field(field)
11
+ end
12
+ end
13
+
14
+ it 'has the right record_refs' do
15
+ [
16
+ :noteType, :activity, :author, :customForm, :entity, :folder, :item, :media, :record, :recordType, :transaction
17
+ ].each do |record_ref|
18
+ expect(note).to have_record_ref(record_ref)
19
+ end
20
+ end
21
+
22
+ describe '#custom_field_list' do
23
+ it 'can be set from attributes' do
24
+ attributes = {
25
+ :custom_field => {
26
+ :value => 10,
27
+ :internal_id => 'custfield_something'
28
+ }
29
+ }
30
+ note.custom_field_list = attributes
31
+ expect(note.custom_field_list).to be_kind_of(NetSuite::Records::CustomFieldList)
32
+ expect(note.custom_field_list.custom_fields.length).to eql(1)
33
+ end
34
+
35
+ it 'can be set from a CustomFieldList object' do
36
+ custom_field_list = NetSuite::Records::CustomFieldList.new
37
+ note.custom_field_list = custom_field_list
38
+ expect(note.custom_field_list).to eql(custom_field_list)
39
+ end
40
+ end
41
+
42
+ describe '.get' do
43
+ context 'when the response is successful' do
44
+ let(:response) { NetSuite::Response.new(:success => true, :body => { :note => 'Test Note', :direction => '_outgoing' }) }
45
+
46
+ it 'returns a note instance populated with the data from the response object' do
47
+ expect(NetSuite::Actions::Get).to receive(:call).with([NetSuite::Records::Note, {:internal_id => 1}], {}).and_return(response)
48
+ note = NetSuite::Records::Note.get(:internal_id => 1)
49
+ expect(note).to be_kind_of(NetSuite::Records::Note)
50
+ expect(note.note).to eq 'Test Note'
51
+ expect(note.direction).to eq '_outgoing'
52
+ end
53
+ end
54
+
55
+ context 'when the response is unsuccessful' do
56
+ let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
57
+
58
+ it 'raises a RecordNotFound exception' do
59
+ expect(NetSuite::Actions::Get).to receive(:call).with([NetSuite::Records::Note, {:internal_id => 1}], {}).and_return(response)
60
+ expect {
61
+ NetSuite::Records::Note.get(:internal_id => 1)
62
+ }.to raise_error(NetSuite::RecordNotFound,
63
+ /NetSuite::Records::Note with OPTIONS=(.*) could not be found/)
64
+ end
65
+ end
66
+ end
67
+
68
+ describe '#add' do
69
+ let(:note) { NetSuite::Records::Note.new(:note => 'TEST note', :entity => NetSuite::Records::RecordRef.new(internalId: 1, type: 'Customer') ) }
70
+
71
+ context 'when the response is successful' do
72
+ let(:response) { NetSuite::Response.new(:success => true, :body => { :internal_id => '1' }) }
73
+
74
+ it 'returns true' do
75
+ expect(NetSuite::Actions::Add).to receive(:call).
76
+ with([note], {}).
77
+ and_return(response)
78
+ expect(note.add).to be_truthy
79
+ end
80
+ end
81
+
82
+ context 'when the response is unsuccessful' do
83
+ let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
84
+
85
+ it 'returns false' do
86
+ expect(NetSuite::Actions::Add).to receive(:call).
87
+ with([note], {}).
88
+ and_return(response)
89
+ expect(note.add).to be_falsey
90
+ end
91
+ end
92
+ end
93
+
94
+ describe '#delete' do
95
+ context 'when the response is successful' do
96
+ let(:response) { NetSuite::Response.new(:success => true, :body => { :internal_id => '1' }) }
97
+
98
+ it 'returns true' do
99
+ expect(NetSuite::Actions::Delete).to receive(:call).
100
+ with([note], {}).
101
+ and_return(response)
102
+ expect(note.delete).to be_truthy
103
+ end
104
+ end
105
+
106
+ context 'when the response is unsuccessful' do
107
+ let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
108
+
109
+ it 'returns false' do
110
+ expect(NetSuite::Actions::Delete).to receive(:call).
111
+ with([note], {}).
112
+ and_return(response)
113
+ expect(note.delete).to be_falsey
114
+ end
115
+ end
116
+ end
117
+
118
+ describe '#to_record' do
119
+ let(:note) { NetSuite::Records::Note.new(:note => 'TEST note', :direction => '_outgoing' ) }
120
+
121
+ it 'returns a hash of attributes that can be used in a SOAP request' do
122
+ expect(note.to_record).to eql({
123
+ 'commGeneral:note' => 'TEST note',
124
+ 'commGeneral:direction' => '_outgoing',
125
+ })
126
+ end
127
+ end
128
+
129
+ describe '#record_type' do
130
+ it 'returns a string type for the record to be used in a SOAP request' do
131
+ expect(note.record_type).to eql('commGeneral:Note')
132
+ end
133
+ end
134
+ end
@@ -0,0 +1,88 @@
1
+ require 'spec_helper'
2
+
3
+ describe NetSuite::Records::NoteType do
4
+ let(:note_type) { NetSuite::Records::NoteType.new }
5
+
6
+ it 'has all the right fields' do
7
+ [
8
+ :name, :description, :is_inactive
9
+ ].each do |field|
10
+ expect(note_type).to have_field(field)
11
+ end
12
+ end
13
+
14
+ describe '.get' do
15
+ context 'when the response is successful' do
16
+ let(:response) { NetSuite::Response.new(:success => true, :body => { :name => 'E-mail', :is_inactive => false }) }
17
+
18
+ it 'returns a note_type instance populated with the data from the response object' do
19
+ expect(NetSuite::Actions::Get).to receive(:call).with([NetSuite::Records::NoteType, {:internal_id => 1}], {}).and_return(response)
20
+ note_type = NetSuite::Records::NoteType.get(:internal_id => 1)
21
+ expect(note_type).to be_kind_of(NetSuite::Records::NoteType)
22
+ expect(note_type.name).to eq 'E-mail'
23
+ expect(note_type.is_inactive).to be_falsy
24
+ end
25
+ end
26
+
27
+ context 'when the response is unsuccessful' do
28
+ let(:response) { NetSuite::Response.new(:success => false, :body => {}) }
29
+
30
+ it 'raises a RecordNotFound exception' do
31
+ expect(NetSuite::Actions::Get).to receive(:call).with([NetSuite::Records::NoteType, {:internal_id => 1}], {}).and_return(response)
32
+ expect {
33
+ NetSuite::Records::NoteType.get(:internal_id => 1)
34
+ }.to raise_error(NetSuite::RecordNotFound,
35
+ /NetSuite::Records::NoteType with OPTIONS=(.*) could not be found/)
36
+ end
37
+ end
38
+ end
39
+
40
+ describe '.search' do
41
+ context 'when the response is successful' do
42
+
43
+ it 'returns a NoteType instance populated with the data from the response object' do
44
+ body = {
45
+ total_records: 1,
46
+ record_list: {
47
+ record: [
48
+ {name: 'E-mail', :is_inactive => false },
49
+ ]
50
+ }
51
+ }
52
+
53
+ allow(NetSuite::Actions::Search).to receive(:call).with(
54
+ [NetSuite::Records::NoteType, {:is_inactive => false}], {}
55
+ ).and_return(
56
+ NetSuite::Response.new(:success => true, :body => body)
57
+ )
58
+
59
+ search_result = NetSuite::Records::NoteType.search(:is_inactive => false)
60
+
61
+ expect(search_result).to be_a NetSuite::Support::SearchResult
62
+ expect(search_result.total_records).to eq 1
63
+
64
+ period1 = search_result.results.first
65
+
66
+ expect(period1).to be_a NetSuite::Records::NoteType
67
+ expect(period1.name).to eq 'E-mail'
68
+ end
69
+ end
70
+ end
71
+
72
+ describe '#to_record' do
73
+ let(:note_type) { NetSuite::Records::NoteType.new(:name => 'E-mail', :is_inactive => false) }
74
+
75
+ it 'returns a hash of attributes that can be used in a SOAP request' do
76
+ expect(note_type.to_record).to eql({
77
+ 'listAcct:name' => 'E-mail',
78
+ 'listAcct:isInactive' => false,
79
+ })
80
+ end
81
+ end
82
+
83
+ describe '#record_type' do
84
+ it 'returns a string type for the record to be used in a SOAP request' do
85
+ expect(note_type.record_type).to eql('listAcct:NoteType')
86
+ end
87
+ end
88
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: netsuite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.9
4
+ version: 0.7.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-07-25 00:00:00.000000000 Z
13
+ date: 2016-08-10 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: savon
@@ -78,6 +78,7 @@ files:
78
78
  - lib/netsuite/core_ext/string/lower_camelcase.rb
79
79
  - lib/netsuite/errors.rb
80
80
  - lib/netsuite/namespaces/act_sched.rb
81
+ - lib/netsuite/namespaces/comm_general.rb
81
82
  - lib/netsuite/namespaces/file_cabinet.rb
82
83
  - lib/netsuite/namespaces/list_acct.rb
83
84
  - lib/netsuite/namespaces/list_emp.rb
@@ -163,6 +164,7 @@ files:
163
164
  - lib/netsuite/records/deposit_other_list.rb
164
165
  - lib/netsuite/records/deposit_payment.rb
165
166
  - lib/netsuite/records/deposit_payment_list.rb
167
+ - lib/netsuite/records/description_item.rb
166
168
  - lib/netsuite/records/discount_item.rb
167
169
  - lib/netsuite/records/duration.rb
168
170
  - lib/netsuite/records/employee.rb
@@ -192,6 +194,8 @@ files:
192
194
  - lib/netsuite/records/item_receipt.rb
193
195
  - lib/netsuite/records/item_receipt_item.rb
194
196
  - lib/netsuite/records/item_receipt_item_list.rb
197
+ - lib/netsuite/records/item_vendor.rb
198
+ - lib/netsuite/records/item_vendor_list.rb
195
199
  - lib/netsuite/records/job.rb
196
200
  - lib/netsuite/records/job_status.rb
197
201
  - lib/netsuite/records/journal_entry.rb
@@ -205,6 +209,8 @@ files:
205
209
  - lib/netsuite/records/non_inventory_purchase_item.rb
206
210
  - lib/netsuite/records/non_inventory_resale_item.rb
207
211
  - lib/netsuite/records/non_inventory_sale_item.rb
212
+ - lib/netsuite/records/note.rb
213
+ - lib/netsuite/records/note_type.rb
208
214
  - lib/netsuite/records/opportunity.rb
209
215
  - lib/netsuite/records/opportunity_item.rb
210
216
  - lib/netsuite/records/opportunity_item_list.rb
@@ -233,6 +239,7 @@ files:
233
239
  - lib/netsuite/records/ship_address.rb
234
240
  - lib/netsuite/records/site_category.rb
235
241
  - lib/netsuite/records/subsidiary.rb
242
+ - lib/netsuite/records/subtotal_item.rb
236
243
  - lib/netsuite/records/support_case.rb
237
244
  - lib/netsuite/records/task.rb
238
245
  - lib/netsuite/records/tax_group.rb
@@ -346,6 +353,8 @@ files:
346
353
  - spec/netsuite/records/item_fulfillment_spec.rb
347
354
  - spec/netsuite/records/item_group_spec.rb
348
355
  - spec/netsuite/records/item_member_list_spec.rb
356
+ - spec/netsuite/records/item_vendor_list_spec.rb
357
+ - spec/netsuite/records/item_vendor_spec.rb
349
358
  - spec/netsuite/records/job_spec.rb
350
359
  - spec/netsuite/records/journal_entry_line_list_spec.rb
351
360
  - spec/netsuite/records/journal_entry_line_spec.rb
@@ -354,6 +363,8 @@ files:
354
363
  - spec/netsuite/records/location_spec.rb
355
364
  - spec/netsuite/records/matrix_option_list_spec.rb
356
365
  - spec/netsuite/records/non_inventory_sale_item_spec.rb
366
+ - spec/netsuite/records/note_spec.rb
367
+ - spec/netsuite/records/note_type_spec.rb
357
368
  - spec/netsuite/records/payment_item_spec.rb
358
369
  - spec/netsuite/records/payment_method_spec.rb
359
370
  - spec/netsuite/records/phone_call_spec.rb
@@ -530,6 +541,8 @@ test_files:
530
541
  - spec/netsuite/records/item_fulfillment_spec.rb
531
542
  - spec/netsuite/records/item_group_spec.rb
532
543
  - spec/netsuite/records/item_member_list_spec.rb
544
+ - spec/netsuite/records/item_vendor_list_spec.rb
545
+ - spec/netsuite/records/item_vendor_spec.rb
533
546
  - spec/netsuite/records/job_spec.rb
534
547
  - spec/netsuite/records/journal_entry_line_list_spec.rb
535
548
  - spec/netsuite/records/journal_entry_line_spec.rb
@@ -538,6 +551,8 @@ test_files:
538
551
  - spec/netsuite/records/location_spec.rb
539
552
  - spec/netsuite/records/matrix_option_list_spec.rb
540
553
  - spec/netsuite/records/non_inventory_sale_item_spec.rb
554
+ - spec/netsuite/records/note_spec.rb
555
+ - spec/netsuite/records/note_type_spec.rb
541
556
  - spec/netsuite/records/payment_item_spec.rb
542
557
  - spec/netsuite/records/payment_method_spec.rb
543
558
  - spec/netsuite/records/phone_call_spec.rb