kaui 1.0.0 → 1.1.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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/kaui/kaui.js +118 -11
- data/app/assets/stylesheets/kaui/common.less +91 -6
- data/app/assets/stylesheets/kaui/payment.less +1 -0
- data/app/controllers/kaui/account_children_controller.rb +1 -4
- data/app/controllers/kaui/accounts_controller.rb +4 -7
- data/app/controllers/kaui/admin_allowed_users_controller.rb +24 -7
- data/app/controllers/kaui/admin_tenants_controller.rb +59 -20
- data/app/controllers/kaui/audit_logs_controller.rb +3 -2
- data/app/controllers/kaui/charges_controller.rb +1 -1
- data/app/controllers/kaui/credits_controller.rb +1 -1
- data/app/controllers/kaui/home_controller.rb +273 -10
- data/app/controllers/kaui/invoice_items_controller.rb +1 -1
- data/app/controllers/kaui/invoices_controller.rb +3 -3
- data/app/controllers/kaui/payments_controller.rb +5 -3
- data/app/controllers/kaui/refunds_controller.rb +2 -2
- data/app/controllers/kaui/subscriptions_controller.rb +2 -1
- data/app/helpers/kaui/object_helper.rb +4 -0
- data/app/helpers/kaui/plugin_helper.rb +36 -20
- data/app/helpers/kaui/uuid_helper.rb +9 -0
- data/app/models/kaui/admin.rb +3 -1
- data/app/models/kaui/admin_tenant.rb +58 -10
- data/app/models/kaui/allowed_user.rb +1 -0
- data/app/models/kaui/catalog.rb +2 -2
- data/app/models/kaui/credit.rb +0 -2
- data/app/models/kaui/overdue.rb +5 -5
- data/app/views/kaui/account_children/index.html.erb +3 -3
- data/app/views/kaui/accounts/_account_info.html.erb +45 -91
- data/app/views/kaui/accounts/_billing_info.html.erb +12 -8
- data/app/views/kaui/accounts/_parent.html.erb +1 -1
- data/app/views/kaui/accounts/_payment_methods.html.erb +1 -1
- data/app/views/kaui/accounts/_personal_info.html.erb +74 -0
- data/app/views/kaui/accounts/index.html.erb +4 -4
- data/app/views/kaui/accounts/show.html.erb +9 -3
- data/app/views/kaui/admin_allowed_users/_form.html.erb +38 -10
- data/app/views/kaui/admin_tenants/_form_plugin_config.erb +82 -17
- data/app/views/kaui/admin_tenants/_show_catalog_simple.erb +11 -3
- data/app/views/kaui/admin_tenants/_show_overdue.erb +4 -4
- data/app/views/kaui/admin_tenants/_tenant_details.html.erb +7 -1
- data/app/views/kaui/admin_tenants/new_overdue_config.html.erb +1 -1
- data/app/views/kaui/audit_logs/_show_history_modal.html.erb +1 -1
- data/app/views/kaui/audit_logs/index.html.erb +4 -0
- data/app/views/kaui/home/_advanced_search_modal.html.erb +80 -0
- data/app/views/kaui/home/index.html.erb +18 -5
- data/app/views/kaui/invoices/show.html.erb +7 -1
- data/app/views/kaui/layouts/kaui_flash.html.erb +14 -3
- data/app/views/kaui/layouts/kaui_navbar.html.erb +11 -9
- data/app/views/kaui/payments/_form.html.erb +8 -10
- data/app/views/kaui/payments/_payment_table.html.erb +40 -37
- data/app/views/kaui/payments/index.html.erb +1 -0
- data/app/views/kaui/payments/show.html.erb +5 -7
- data/app/views/kaui/queues/index.html.erb +22 -4
- data/app/views/kaui/subscriptions/_subscriptions_table.html.erb +1 -1
- data/app/views/kaui/tag_definitions/index.html.erb +1 -1
- data/config/routes.rb +2 -0
- data/lib/kaui/version.rb +1 -1
- data/test/functional/kaui/accounts_controller_test.rb +35 -0
- data/test/functional/kaui/admin_allowed_users_controller_test.rb +55 -2
- data/test/functional/kaui/admin_tenants_controller_test.rb +67 -6
- data/test/functional/kaui/home_controller_test.rb +389 -15
- data/test/functional/kaui/subscriptions_controller_test.rb +1 -1
- data/test/killbill_test_helper.rb +2 -2
- data/test/unit/helpers/kaui/uuid_helper_test.rb +16 -0
- data/test/unit/kaui/admin_tenant_test.rb +49 -0
- metadata +6 -4
- data/test/unit/kaui/uuid_helper_test.rb +0 -10
@@ -43,7 +43,7 @@
|
|
43
43
|
</td>
|
44
44
|
<% end %>
|
45
45
|
<td>
|
46
|
-
<span
|
46
|
+
<span id="<%= sub.subscription_id %>-popover" class="object-id-popover" title="Subscription ID" data-id="<%= sub.subscription_id %>">
|
47
47
|
<%= humanized_subscription_product_category(sub) %>
|
48
48
|
</span>
|
49
49
|
</td>
|
@@ -22,7 +22,7 @@
|
|
22
22
|
<tbody>
|
23
23
|
<% @tag_definitions.each do |tag_definition| %>
|
24
24
|
<tr>
|
25
|
-
<td><%=
|
25
|
+
<td><%= object_id_popover(tag_definition.id) %></td>
|
26
26
|
<td><%= tag_definition.name %></td>
|
27
27
|
<td><%= tag_definition.description %></td>
|
28
28
|
<td><%= tag_definition.is_system_tag? %></td>
|
data/config/routes.rb
CHANGED
@@ -186,6 +186,8 @@ Kaui::Engine.routes.draw do
|
|
186
186
|
match '/allowed_users' => 'admin_tenants#allowed_users', :via => :get, :as => 'admin_tenant_allowed_users'
|
187
187
|
match '/catalog_by_effective_date' => 'admin_tenants#catalog_by_effective_date', :via => :get, :as => 'catalog_by_effective_date'
|
188
188
|
match '/suggest_plugin_name' => 'admin_tenants#suggest_plugin_name', :via => :get, :as => 'suggest_plugin_name'
|
189
|
+
match '/switch' => 'admin_tenants#switch_tenant', :via => :get, :as => 'switch_tenant'
|
190
|
+
match '/:id/download_catalog' => 'admin_tenants#download_catalog_xml', :via => :get, :as => 'download_catalog_xml'
|
189
191
|
end
|
190
192
|
resources :admin_tenants, :only => [ :index, :new, :create, :show ]
|
191
193
|
|
data/lib/kaui/version.rb
CHANGED
@@ -55,6 +55,41 @@ class Kaui::AccountsControllerTest < Kaui::FunctionalTestHelper
|
|
55
55
|
assert_not_nil assigns(:payment_methods)
|
56
56
|
end
|
57
57
|
|
58
|
+
test 'should check that overdue state is Good' do
|
59
|
+
get :show, :account_id => @account.account_id
|
60
|
+
assert_response 200
|
61
|
+
|
62
|
+
overdue_status_proc_count = 0
|
63
|
+
|
64
|
+
assert_select 'table' do |tables|
|
65
|
+
tables.each do |table|
|
66
|
+
assert_select table, 'tr' do |rows|
|
67
|
+
rows.each do |row|
|
68
|
+
# find overdue status in the response
|
69
|
+
is_overdue_state = false
|
70
|
+
assert_select row, 'th' do |col|
|
71
|
+
is_overdue_state = col[0].text.eql?('Overdue status')
|
72
|
+
end
|
73
|
+
|
74
|
+
# if found
|
75
|
+
if is_overdue_state
|
76
|
+
overdue_status_proc_count += 1
|
77
|
+
assert_select row, 'td' do |col|
|
78
|
+
assert_select col, 'span' do |content|
|
79
|
+
assert 'Good', content[0].text
|
80
|
+
overdue_status_proc_count += 1 if content[0].text.eql?('Good')
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
# assert that overdue state is found with result equal to Good
|
90
|
+
assert overdue_status_proc_count, 2
|
91
|
+
end
|
92
|
+
|
58
93
|
test 'should handle Kill Bill errors when creating account' do
|
59
94
|
post :create
|
60
95
|
assert_redirected_to home_path
|
@@ -10,10 +10,10 @@ module Kaui
|
|
10
10
|
|
11
11
|
test 'should get create local only' do
|
12
12
|
parameters = {
|
13
|
-
:allowed_user => {:kb_username => 'Albator', :description => 'My french super hero'},
|
13
|
+
:allowed_user => {:kb_username => 'Albator', :description => 'My french super hero' },
|
14
|
+
:external => '1' ,
|
14
15
|
:password => 'Albator',
|
15
16
|
:roles => nil,
|
16
|
-
:external => '1'
|
17
17
|
}
|
18
18
|
post :create, parameters
|
19
19
|
assert_equal 'User was successfully configured', flash[:notice]
|
@@ -156,6 +156,59 @@ module Kaui
|
|
156
156
|
assert response_path.include?(expected_response_path(au.id)), "#{response_path} is expected to contain #{expected_response_path(au.id)}"
|
157
157
|
end
|
158
158
|
|
159
|
+
test 'should detect if a user is managed externally' do
|
160
|
+
allowed_user = {:kb_username => 'Local', :description => 'adding only locally'}
|
161
|
+
|
162
|
+
# adding only locally will make the user managed externally
|
163
|
+
au = Kaui::AllowedUser.new
|
164
|
+
au.kb_username = allowed_user[:kb_username]
|
165
|
+
au.description = allowed_user[:description]
|
166
|
+
au.save!
|
167
|
+
|
168
|
+
# edit the added user and validate that the checkbox of managed externally is disabled
|
169
|
+
get :edit, :id => au.id
|
170
|
+
assert_response :success
|
171
|
+
assert_select 'form input#external' do |checkbox|
|
172
|
+
assert_equal checkbox[0]['disabled'], 'disabled'
|
173
|
+
end
|
174
|
+
|
175
|
+
# create a user that is managed externally
|
176
|
+
parameters = {
|
177
|
+
:allowed_user => {:kb_username => 'LDAP', :description => 'LDAP' },
|
178
|
+
:external => '1'
|
179
|
+
}
|
180
|
+
post :create, parameters
|
181
|
+
assert_equal 'User was successfully configured', flash[:notice]
|
182
|
+
assert_response 302
|
183
|
+
added_au_id = response_path.gsub('/kaui/admin_allowed_users/','')
|
184
|
+
|
185
|
+
# edit the added user and validate that the checkbox of managed externally is disabled
|
186
|
+
get :edit, :id => added_au_id
|
187
|
+
assert_response :success
|
188
|
+
assert_select 'form input#external' do |checkbox|
|
189
|
+
assert_equal checkbox[0]['disabled'], 'disabled'
|
190
|
+
end
|
191
|
+
|
192
|
+
# create a user that is not managed externally
|
193
|
+
parameters = {
|
194
|
+
:allowed_user => {:kb_username => 'JDBC', :description => 'Kill Bill JDBC Realm' },
|
195
|
+
:external => '0',
|
196
|
+
:password => 'jdbc',
|
197
|
+
:roles => nil
|
198
|
+
}
|
199
|
+
post :create, parameters
|
200
|
+
assert_equal 'User was successfully configured', flash[:notice]
|
201
|
+
assert_response 302
|
202
|
+
added_au_id = response_path.gsub('/kaui/admin_allowed_users/','')
|
203
|
+
|
204
|
+
# edit the added user and validate that the password is not disabled
|
205
|
+
get :edit, :id => added_au_id
|
206
|
+
assert_response :success
|
207
|
+
assert_select 'form input#password' do |input|
|
208
|
+
assert_nil input[0]['disabled']
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
159
212
|
private
|
160
213
|
def expected_response_path(id=nil)
|
161
214
|
"/kaui/admin_allowed_users#{id.nil? ? '' : "/#{id}" }"
|
@@ -192,7 +192,7 @@ class Kaui::AdminTenantsControllerTest < Kaui::FunctionalTestHelper
|
|
192
192
|
:states => { '0' => {
|
193
193
|
:name => 'Overdue_test',
|
194
194
|
:external_message => 'Overdue_Test_Ya',
|
195
|
-
:
|
195
|
+
:is_block_changes => true,
|
196
196
|
:subscription_cancellation_policy => 'NONE',
|
197
197
|
:condition => {
|
198
198
|
:time_since_earliest_unpaid_invoice_equals_or_exceeds => 1,
|
@@ -285,15 +285,60 @@ class Kaui::AdminTenantsControllerTest < Kaui::FunctionalTestHelper
|
|
285
285
|
end
|
286
286
|
|
287
287
|
test 'should suggest a plugin name' do
|
288
|
-
plugin_anchor = "'<a id=\"suggested\" data-plugin-name=\"killbill-paypal-express\" data-plugin-key=\"
|
288
|
+
plugin_anchor = "'<a id=\"suggested\" data-plugin-name=\"killbill-paypal-express\" data-plugin-key=\"paypal_express\" data-plugin-type=\"ruby\" href=\"#\">killbill-paypal-express</a>'"
|
289
|
+
|
290
|
+
# Similar plugin already installed test will run, if there are plugin installed
|
291
|
+
installed_plugins = installed_plugins()
|
292
|
+
unless installed_plugins.blank?
|
293
|
+
installed_plugins.each do |plugin|
|
294
|
+
installed_plugin_anchor = "'<a id=\"suggested\" data-plugin-name=\"#{plugin[:plugin_name]}\" data-plugin-key=\"#{plugin[:plugin_key]}\".*href=\"#\">#{plugin[:plugin_name]}</a>'"
|
295
|
+
|
296
|
+
get :suggest_plugin_name, :plugin_name => plugin[:plugin_name][0, plugin[:plugin_name].length - 1]
|
297
|
+
assert_response :success
|
298
|
+
assert_match /Similar plugin already installed: #{installed_plugin_anchor}/, JSON[@response.body]['suggestion']
|
299
|
+
end
|
300
|
+
end
|
289
301
|
|
290
|
-
get :
|
302
|
+
get :suggest_plugin_name, :plugin_name => 'pypl'
|
291
303
|
assert_response :success
|
292
|
-
assert_equal JSON[@response.body]['suggestion']
|
304
|
+
assert_equal "Did you mean #{plugin_anchor}?", JSON[@response.body]['suggestion']
|
305
|
+
end
|
306
|
+
|
307
|
+
test 'should switch tenant' do
|
308
|
+
other_tenant = setup_and_create_test_tenant(1)
|
309
|
+
other_tenant_kaui = Kaui::Tenant.find_by_kb_tenant_id(other_tenant.tenant_id)
|
310
|
+
|
311
|
+
get :switch_tenant, :kb_tenant_id => other_tenant.tenant_id
|
312
|
+
assert_redirected_to admin_tenant_path(other_tenant_kaui.id)
|
313
|
+
assert_equal flash[:notice], "Tenant was switched to #{other_tenant_kaui.name}"
|
314
|
+
|
315
|
+
# switch back
|
316
|
+
tenant_kaui = Kaui::Tenant.find_by_kb_tenant_id(@tenant.tenant_id)
|
317
|
+
get :switch_tenant, :kb_tenant_id => @tenant.tenant_id
|
318
|
+
assert_redirected_to admin_tenant_path(tenant_kaui.id)
|
319
|
+
assert_equal flash[:notice], "Tenant was switched to #{tenant_kaui.name}"
|
320
|
+
end
|
321
|
+
|
322
|
+
test 'should download a catalog' do
|
323
|
+
effective_date = '2013-02-08T00:00:00+00:00'
|
324
|
+
tenant = create_kaui_tenant
|
325
|
+
post :upload_catalog, :id => tenant.id, :catalog => fixture_file_upload('catalog-v1.xml')
|
326
|
+
|
327
|
+
assert_redirected_to admin_tenant_path(tenant.id)
|
328
|
+
assert_equal 'Catalog was successfully uploaded', flash[:notice]
|
293
329
|
|
294
|
-
get :
|
330
|
+
get :download_catalog_xml, :effective_date => effective_date, :id => tenant.id
|
295
331
|
assert_response :success
|
296
|
-
assert_equal
|
332
|
+
assert_equal 'application/xml', @response.header['Content-Type']
|
333
|
+
assert_equal "attachment; filename=\"catalog_#{effective_date}.xml\"", @response.header['Content-Disposition']
|
334
|
+
|
335
|
+
doc = nil
|
336
|
+
assert_nothing_raised { doc = Nokogiri::XML(@response.body) { |config| config.strict } }
|
337
|
+
|
338
|
+
catalog = doc.xpath("//catalog")
|
339
|
+
expected_effective_date = Date.parse(catalog[0].search("effectiveDate").text)
|
340
|
+
|
341
|
+
assert_equal Date.parse(effective_date), expected_effective_date
|
297
342
|
end
|
298
343
|
|
299
344
|
private
|
@@ -308,4 +353,20 @@ class Kaui::AdminTenantsControllerTest < Kaui::FunctionalTestHelper
|
|
308
353
|
assert_equal 'Tenant was successfully configured', flash[:notice]
|
309
354
|
tenant
|
310
355
|
end
|
356
|
+
|
357
|
+
def installed_plugins
|
358
|
+
installed_plugins = []
|
359
|
+
nodes_info = KillBillClient::Model::NodesInfo.nodes_info(build_options(@tenant, USERNAME, PASSWORD)) || []
|
360
|
+
plugins_info = nodes_info.first.plugins_info || []
|
361
|
+
plugins_info.each do |plugin|
|
362
|
+
next if plugin.version.nil?
|
363
|
+
next if installed_plugins.any? { |p| p[:plugin_name].eql?(plugin.plugin_name) }
|
364
|
+
installed_plugins << {
|
365
|
+
plugin_key: Kaui::AdminTenant.rewrite_plugin_key(plugin.plugin_key),
|
366
|
+
plugin_name: plugin.plugin_name
|
367
|
+
}
|
368
|
+
end
|
369
|
+
|
370
|
+
installed_plugins
|
371
|
+
end
|
311
372
|
end
|
@@ -7,27 +7,401 @@ class Kaui::HomeControllerTest < Kaui::FunctionalTestHelper
|
|
7
7
|
assert_response :success
|
8
8
|
end
|
9
9
|
|
10
|
-
test 'should understand search queries' do
|
11
|
-
|
12
|
-
|
10
|
+
test 'should understand account search queries' do
|
11
|
+
dummy_uuid = SecureRandom.uuid.to_s
|
12
|
+
# search defaults using a UUID
|
13
|
+
get :search, :q => @account.account_id
|
14
|
+
assert_redirected_to account_path(@account.account_id)
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
+
# search defaults using a String
|
17
|
+
get :search, :q => @account.name
|
18
|
+
assert_redirected_to accounts_path(:fast => 0, :q => @account.name)
|
16
19
|
|
17
|
-
|
18
|
-
|
20
|
+
# search by ID
|
21
|
+
get :search, :q => query_builder('ACCOUNT',@account.account_id, 'ID')
|
22
|
+
assert_redirected_to account_path(@account.account_id)
|
19
23
|
|
20
|
-
|
21
|
-
|
24
|
+
# search by ID and fails
|
25
|
+
get :search, :q => query_builder('ACCOUNT',dummy_uuid, 'ID')
|
26
|
+
assert_redirected_to home_path
|
27
|
+
assert_equal "No account matches \"#{dummy_uuid}\"", flash[:error]
|
22
28
|
|
23
|
-
|
24
|
-
|
29
|
+
# search by EXTERNAL_KEY
|
30
|
+
get :search, :q => query_builder('ACCOUNT',@account.external_key, 'EXTERNAL_KEY')
|
31
|
+
assert_redirected_to account_path(@account.account_id)
|
25
32
|
|
26
|
-
|
27
|
-
|
33
|
+
# search by EXTERNAL_KEY and fails
|
34
|
+
get :search, :q => query_builder('ACCOUNT',dummy_uuid, 'EXTERNAL_KEY')
|
35
|
+
assert_redirected_to home_path
|
36
|
+
assert_equal "No account matches \"#{dummy_uuid}\"", flash[:error]
|
28
37
|
|
29
|
-
|
30
|
-
|
38
|
+
# search by BLANK only first
|
39
|
+
get :search, :q => query_builder('ACCOUNT',@account.name, nil, '1')
|
40
|
+
assert_redirected_to account_path(@account.account_id)
|
31
41
|
|
42
|
+
# search by BLANK
|
43
|
+
get :search, :q => query_builder('ACCOUNT',@account.name)
|
44
|
+
assert_redirected_to accounts_path(:fast => 0, :q => @account.name)
|
45
|
+
|
46
|
+
# search by BLANK and fails
|
47
|
+
get :search, :q => query_builder('ACCOUNT',dummy_uuid)
|
48
|
+
assert_redirected_to home_path
|
49
|
+
assert_equal "No account matches \"#{dummy_uuid}\"", flash[:error]
|
50
|
+
end
|
51
|
+
|
52
|
+
test 'should understand invoice search queries' do
|
53
|
+
# search by ID
|
54
|
+
get :search, :q => query_builder('INVOICE',@invoice_item.invoice_id, 'ID')
|
55
|
+
assert_redirected_to account_invoice_path(@invoice_item.account_id, @invoice_item.invoice_id)
|
56
|
+
|
57
|
+
# search by ID and fails
|
58
|
+
get :search, :q => query_builder('INVOICE','112', 'ID')
|
59
|
+
assert_redirected_to home_path
|
60
|
+
assert_equal "No invoice matches \"112\"", flash[:error]
|
61
|
+
|
62
|
+
# search by EXTERNAL_KEY and fails
|
63
|
+
get :search, :q => query_builder('INVOICE','112', 'EXTERNAL_KEY')
|
64
|
+
assert_redirected_to home_path
|
65
|
+
assert_equal "\"INVOICE\": Search by \"EXTERNAL KEY\" is not supported.", flash[:error]
|
66
|
+
|
67
|
+
# search by BLANK only first
|
68
|
+
get :search, :q => query_builder('INVOICE',@bundle_invoice.invoice_number, nil, '1')
|
69
|
+
assert_redirected_to account_invoice_path(@bundle_invoice.account_id, @bundle_invoice.invoice_id)
|
70
|
+
|
71
|
+
# search by BLANK only first (invoice item)
|
72
|
+
get :search, :q => query_builder('INVOICE',@bundle_invoice.items[0].invoice_item_id, nil, '1')
|
73
|
+
assert_redirected_to account_invoice_path(@bundle_invoice.account_id, @bundle_invoice.invoice_id)
|
74
|
+
|
75
|
+
# search by BLANK
|
76
|
+
get :search, :q => query_builder('INVOICE',@bundle_invoice.invoice_number)
|
77
|
+
assert_redirected_to account_invoices_path(:account_id => @bundle_invoice.account_id, :q => @bundle_invoice.invoice_number, :fast => '0')
|
78
|
+
|
79
|
+
# search by BLANK and fails
|
80
|
+
get :search, :q => query_builder('INVOICE','112')
|
81
|
+
assert_redirected_to home_path
|
82
|
+
assert_equal "No invoice matches \"112\"", flash[:error]
|
83
|
+
end
|
84
|
+
|
85
|
+
test 'should understand payment search queries' do
|
86
|
+
dummy_uuid = SecureRandom.uuid.to_s
|
87
|
+
# search by ID
|
88
|
+
get :search, :q => query_builder('PAYMENT',@payment.payment_id, 'ID')
|
89
|
+
assert_redirected_to account_payment_path(@payment.account_id,@payment.payment_id)
|
90
|
+
|
91
|
+
# search by ID and fails
|
92
|
+
get :search, :q => query_builder('PAYMENT',dummy_uuid, 'ID')
|
93
|
+
assert_redirected_to home_path
|
94
|
+
assert_equal "No payment matches \"#{dummy_uuid}\"", flash[:error]
|
95
|
+
|
96
|
+
# search by EXTERNAL_KEY
|
97
|
+
get :search, :q => query_builder('PAYMENT',@payment.payment_external_key, 'EXTERNAL_KEY')
|
98
|
+
assert_redirected_to account_payment_path(@payment.account_id,@payment.payment_id)
|
99
|
+
|
100
|
+
# search by EXTERNAL_KEY and fails
|
101
|
+
get :search, :q => query_builder('PAYMENT',dummy_uuid, 'EXTERNAL_KEY')
|
102
|
+
assert_redirected_to home_path
|
103
|
+
assert_equal "No payment matches \"#{dummy_uuid}\"", flash[:error]
|
104
|
+
|
105
|
+
# search by BLANK only first
|
106
|
+
get :search, :q => query_builder('PAYMENT','SUCCESS', nil, '1')
|
107
|
+
assert_redirected_to account_payment_path(@payment.account_id,@payment.payment_id)
|
108
|
+
|
109
|
+
# search by BLANK
|
110
|
+
get :search, :q => query_builder('PAYMENT','SUCCESS')
|
111
|
+
assert_redirected_to account_payments_path(:account_id => @payment.account_id, :q => 'SUCCESS', :fast => '0')
|
112
|
+
|
113
|
+
# search by BLANK and fails
|
114
|
+
get :search, :q => query_builder('PAYMENT','FAILED')
|
115
|
+
assert_redirected_to home_path
|
116
|
+
assert_equal "No payment matches \"FAILED\"", flash[:error]
|
117
|
+
end
|
118
|
+
|
119
|
+
test 'should understand transaction search queries' do
|
120
|
+
dummy_uuid = SecureRandom.uuid.to_s
|
121
|
+
# search by ID
|
122
|
+
get :search, :q => query_builder('TRANSACTION',@payment.transactions[0].transaction_id, 'ID')
|
123
|
+
assert_redirected_to account_payment_path(@payment.account_id, @payment.payment_id)
|
124
|
+
|
125
|
+
# search by ID and fails
|
126
|
+
get :search, :q => query_builder('TRANSACTION',dummy_uuid, 'ID')
|
127
|
+
assert_redirected_to home_path
|
128
|
+
assert_equal "No transaction matches \"#{dummy_uuid}\"", flash[:error]
|
129
|
+
|
130
|
+
# search by EXTERNAL_KEY
|
131
|
+
get :search, :q => query_builder('TRANSACTION',@payment.transactions[0].transaction_external_key, 'EXTERNAL_KEY')
|
132
|
+
assert_redirected_to account_payment_path(@payment.account_id,@payment.payment_id)
|
133
|
+
|
134
|
+
# search by EXTERNAL_KEY and fails
|
135
|
+
get :search, :q => query_builder('TRANSACTION',dummy_uuid, 'EXTERNAL_KEY')
|
136
|
+
assert_redirected_to home_path
|
137
|
+
assert_equal "No transaction matches \"#{dummy_uuid}\"", flash[:error]
|
138
|
+
|
139
|
+
# search by BLANK only first
|
140
|
+
get :search, :q => query_builder('TRANSACTION',@payment.transactions[0].transaction_id, nil, '1')
|
141
|
+
assert_redirected_to account_payment_path(@payment.account_id, @payment.payment_id)
|
142
|
+
|
143
|
+
# search by BLANK
|
144
|
+
get :search, :q => query_builder('TRANSACTION',@payment.transactions[0].transaction_id)
|
145
|
+
assert_redirected_to account_payment_path(@payment.account_id, @payment.payment_id)
|
146
|
+
|
147
|
+
# search by BLANK and fails
|
148
|
+
get :search, :q => query_builder('TRANSACTION','112')
|
149
|
+
assert_redirected_to home_path
|
150
|
+
assert_equal "No transaction matches \"112\"", flash[:error]
|
151
|
+
end
|
152
|
+
|
153
|
+
test 'should understand bundle search queries' do
|
154
|
+
dummy_uuid = SecureRandom.uuid.to_s
|
155
|
+
# search by ID
|
156
|
+
get :search, :q => query_builder('BUNDLE',@bundle.bundle_id, 'ID')
|
157
|
+
assert_redirected_to account_bundles_path(@bundle.account_id)
|
158
|
+
|
159
|
+
# search by ID and fails
|
160
|
+
get :search, :q => query_builder('BUNDLE',dummy_uuid, 'ID')
|
161
|
+
assert_redirected_to home_path
|
162
|
+
assert_equal "No bundle matches \"#{dummy_uuid}\"", flash[:error]
|
163
|
+
|
164
|
+
# search by EXTERNAL_KEY
|
165
|
+
get :search, :q => query_builder('BUNDLE',@bundle.external_key, 'EXTERNAL_KEY')
|
166
|
+
assert_redirected_to account_bundles_path(@bundle.account_id)
|
167
|
+
|
168
|
+
# search by EXTERNAL_KEY and fails
|
169
|
+
get :search, :q => query_builder('BUNDLE',dummy_uuid, 'EXTERNAL_KEY')
|
170
|
+
assert_redirected_to home_path
|
171
|
+
assert_equal "No bundle matches \"#{dummy_uuid}\"", flash[:error]
|
172
|
+
|
173
|
+
# search by BLANK only first
|
174
|
+
get :search, :q => query_builder('BUNDLE',@bundle.account_id, nil, '1')
|
175
|
+
assert_redirected_to account_bundles_path(@bundle.account_id)
|
176
|
+
|
177
|
+
# search by BLANK
|
178
|
+
get :search, :q => query_builder('BUNDLE',@bundle.account_id)
|
179
|
+
assert_redirected_to account_bundles_path(@bundle.account_id)
|
180
|
+
|
181
|
+
# search by BLANK and fails
|
182
|
+
get :search, :q => query_builder('BUNDLE',dummy_uuid)
|
183
|
+
assert_redirected_to home_path
|
184
|
+
assert_equal "No bundle matches \"#{dummy_uuid}\"", flash[:error]
|
185
|
+
end
|
186
|
+
|
187
|
+
test 'should understand credit search queries' do
|
188
|
+
dummy_uuid = SecureRandom.uuid.to_s
|
189
|
+
credit = create_credit
|
190
|
+
# search by ID
|
191
|
+
get :search, :q => query_builder('CREDIT',credit.credit_id, 'ID')
|
192
|
+
assert_redirected_to account_invoice_path(credit.account_id, credit.invoice_id)
|
193
|
+
|
194
|
+
# search by ID and fails
|
195
|
+
get :search, :q => query_builder('CREDIT',dummy_uuid, 'ID')
|
196
|
+
assert_redirected_to home_path
|
197
|
+
assert_equal "No credit matches \"#{dummy_uuid}\"", flash[:error]
|
198
|
+
|
199
|
+
# search by EXTERNAL_KEY and fails
|
200
|
+
get :search, :q => query_builder('CREDIT',dummy_uuid, 'EXTERNAL_KEY')
|
201
|
+
assert_redirected_to home_path
|
202
|
+
assert_equal "\"CREDIT\": Search by \"EXTERNAL KEY\" is not supported.", flash[:error]
|
203
|
+
|
204
|
+
# search by BLANK only first
|
205
|
+
get :search, :q => query_builder('CREDIT',credit.credit_id, nil, '1')
|
206
|
+
assert_redirected_to account_invoice_path(credit.account_id, credit.invoice_id)
|
207
|
+
|
208
|
+
# search by BLANK
|
209
|
+
get :search, :q => query_builder('CREDIT',credit.credit_id)
|
210
|
+
assert_redirected_to account_invoice_path(credit.account_id, credit.invoice_id)
|
211
|
+
|
212
|
+
# search by BLANK and fails
|
213
|
+
get :search, :q => query_builder('CREDIT',dummy_uuid)
|
214
|
+
assert_redirected_to home_path
|
215
|
+
assert_equal "No credit matches \"#{dummy_uuid}\"", flash[:error]
|
216
|
+
end
|
217
|
+
|
218
|
+
test 'should understand custom field search queries' do
|
219
|
+
dummy_uuid = SecureRandom.uuid.to_s
|
220
|
+
custom_field = create_custom_field
|
221
|
+
# search by ID
|
222
|
+
get :search, :q => query_builder('CUSTOM_FIELD',custom_field[0].custom_field_id, 'ID')
|
223
|
+
assert_redirected_to custom_fields_path(:q => custom_field[0].custom_field_id, :fast => '0')
|
224
|
+
|
225
|
+
# search by ID and fails
|
226
|
+
get :search, :q => query_builder('CUSTOM_FIELD',dummy_uuid, 'ID')
|
227
|
+
assert_redirected_to home_path
|
228
|
+
assert_equal "No custom field matches \"#{dummy_uuid}\"", flash[:error]
|
229
|
+
|
230
|
+
# search by EXTERNAL_KEY and fails
|
231
|
+
get :search, :q => query_builder('CUSTOM_FIELD','test', 'EXTERNAL_KEY')
|
232
|
+
assert_redirected_to home_path
|
233
|
+
assert_equal "\"CUSTOM FIELD\": Search by \"EXTERNAL KEY\" is not supported.", flash[:error]
|
234
|
+
|
235
|
+
# search by BLANK only first
|
236
|
+
get :search, :q => query_builder('CUSTOM_FIELD','test', nil, '1')
|
237
|
+
assert_redirected_to custom_fields_path(:q => 'test', :fast => '1')
|
238
|
+
|
239
|
+
# search by BLANK
|
240
|
+
get :search, :q => query_builder('CUSTOM_FIELD','test')
|
241
|
+
assert_redirected_to custom_fields_path(:q => 'test', :fast => '0')
|
242
|
+
|
243
|
+
# search by BLANK and fails
|
244
|
+
get :search, :q => query_builder('CUSTOM_FIELD','test_uui')
|
245
|
+
assert_redirected_to home_path
|
246
|
+
assert_equal "No custom field matches \"test_uui\"", flash[:error]
|
247
|
+
end
|
248
|
+
|
249
|
+
test 'should understand invoice payment search queries' do
|
250
|
+
dummy_uuid = SecureRandom.uuid.to_s
|
251
|
+
# search by ID
|
252
|
+
get :search, :q => query_builder('INVOICE_PAYMENT', @payment.payment_id, 'ID')
|
253
|
+
assert_redirected_to account_payment_path(@payment.account_id, @payment.payment_id)
|
254
|
+
|
255
|
+
# search by ID and fails
|
256
|
+
get :search, :q => query_builder('INVOICE_PAYMENT',dummy_uuid, 'ID')
|
257
|
+
assert_redirected_to home_path
|
258
|
+
assert_equal "No invoice payment matches \"#{dummy_uuid}\"", flash[:error]
|
259
|
+
|
260
|
+
# search by EXTERNAL_KEY and fails
|
261
|
+
get :search, :q => query_builder('INVOICE_PAYMENT','test', 'EXTERNAL_KEY')
|
262
|
+
assert_redirected_to home_path
|
263
|
+
assert_equal "\"INVOICE PAYMENT\": Search by \"EXTERNAL KEY\" is not supported.", flash[:error]
|
264
|
+
|
265
|
+
# search by BLANK only first
|
266
|
+
get :search, :q => query_builder('INVOICE_PAYMENT',@payment.payment_id, nil, '1')
|
267
|
+
assert_redirected_to account_payment_path(@payment.account_id, @payment.payment_id)
|
268
|
+
|
269
|
+
# search by BLANK
|
270
|
+
get :search, :q => query_builder('INVOICE_PAYMENT',@payment.payment_id)
|
271
|
+
assert_redirected_to account_payment_path(@payment.account_id, @payment.payment_id)
|
272
|
+
|
273
|
+
# search by BLANK and fails
|
274
|
+
get :search, :q => query_builder('INVOICE_PAYMENT',dummy_uuid)
|
275
|
+
assert_redirected_to home_path
|
276
|
+
assert_equal "No invoice payment matches \"#{dummy_uuid}\"", flash[:error]
|
277
|
+
end
|
278
|
+
|
279
|
+
test 'should understand subscription search queries' do
|
280
|
+
dummy_uuid = SecureRandom.uuid.to_s
|
281
|
+
subscription = @bundle.subscriptions[0]
|
282
|
+
# search by ID
|
283
|
+
get :search, :q => query_builder('SUBSCRIPTION', subscription.subscription_id, 'ID')
|
284
|
+
assert_redirected_to account_bundles_path(subscription.account_id)
|
285
|
+
|
286
|
+
# search by ID and fails
|
287
|
+
get :search, :q => query_builder('SUBSCRIPTION',dummy_uuid, 'ID')
|
288
|
+
assert_redirected_to home_path
|
289
|
+
assert_equal "No subscription matches \"#{dummy_uuid}\"", flash[:error]
|
290
|
+
|
291
|
+
# search by EXTERNAL_KEY and fails
|
292
|
+
get :search, :q => query_builder('SUBSCRIPTION','test', 'EXTERNAL_KEY')
|
293
|
+
assert_redirected_to home_path
|
294
|
+
assert_equal "\"SUBSCRIPTION\": Search by \"EXTERNAL KEY\" is not supported.", flash[:error]
|
295
|
+
|
296
|
+
# search by BLANK only first
|
297
|
+
get :search, :q => query_builder('SUBSCRIPTION',subscription.subscription_id, nil, '1')
|
298
|
+
assert_redirected_to account_bundles_path(subscription.account_id)
|
299
|
+
|
300
|
+
# search by BLANK
|
301
|
+
get :search, :q => query_builder('SUBSCRIPTION',subscription.subscription_id)
|
302
|
+
assert_redirected_to account_bundles_path(subscription.account_id)
|
303
|
+
|
304
|
+
# search by BLANK and fails
|
305
|
+
get :search, :q => query_builder('SUBSCRIPTION',dummy_uuid)
|
306
|
+
assert_redirected_to home_path
|
307
|
+
assert_equal "No subscription matches \"#{dummy_uuid}\"", flash[:error]
|
308
|
+
end
|
309
|
+
|
310
|
+
test 'should understand tag search queries' do
|
311
|
+
dummy_uuid = SecureRandom.uuid.to_s
|
312
|
+
tag = create_tag
|
313
|
+
# search by ID
|
314
|
+
get :search, :q => query_builder('TAG', tag[0].tag_id, 'ID')
|
315
|
+
assert_redirected_to tags_path(:q => tag[0].tag_id, :fast => '0')
|
316
|
+
|
317
|
+
# search by ID and fails
|
318
|
+
get :search, :q => query_builder('TAG',dummy_uuid, 'ID')
|
319
|
+
assert_redirected_to home_path
|
320
|
+
assert_equal "No tag matches \"#{dummy_uuid}\"", flash[:error]
|
321
|
+
|
322
|
+
# search by EXTERNAL_KEY and fails
|
323
|
+
get :search, :q => query_builder('TAG','test', 'EXTERNAL_KEY')
|
324
|
+
assert_redirected_to home_path
|
325
|
+
assert_equal "\"TAG\": Search by \"EXTERNAL KEY\" is not supported.", flash[:error]
|
326
|
+
|
327
|
+
# search by BLANK only first
|
328
|
+
get :search, :q => query_builder('TAG','account', nil, '1')
|
329
|
+
assert_redirected_to tags_path(:q => 'account', :fast => '1')
|
330
|
+
|
331
|
+
# search by BLANK
|
332
|
+
get :search, :q => query_builder('TAG','account')
|
333
|
+
assert_redirected_to tags_path(:q => 'account', :fast => '0')
|
334
|
+
|
335
|
+
# search by BLANK and fails
|
336
|
+
get :search, :q => query_builder('TAG',dummy_uuid)
|
337
|
+
assert_redirected_to home_path
|
338
|
+
assert_equal "No tag matches \"#{dummy_uuid}\"", flash[:error]
|
339
|
+
end
|
340
|
+
|
341
|
+
test 'should understand tag definition search queries' do
|
342
|
+
dummy_uuid = SecureRandom.uuid.to_s
|
343
|
+
tag_definition = create_account_tag_definition
|
344
|
+
# search by ID
|
345
|
+
get :search, :q => query_builder('TAG_DEFINITION', tag_definition.id, 'ID')
|
346
|
+
assert_redirected_to tag_definitions_path(:q => tag_definition.id, :fast => '0')
|
347
|
+
|
348
|
+
# search by ID and fails
|
349
|
+
get :search, :q => query_builder('TAG_DEFINITION',dummy_uuid, 'ID')
|
350
|
+
assert_redirected_to home_path
|
351
|
+
assert_equal "No tag definition matches \"#{dummy_uuid}\"", flash[:error]
|
352
|
+
|
353
|
+
# search by EXTERNAL_KEY and fails
|
354
|
+
get :search, :q => query_builder('TAG_DEFINITION','test', 'EXTERNAL_KEY')
|
355
|
+
assert_redirected_to home_path
|
356
|
+
assert_equal "\"TAG DEFINITION\": Search by \"EXTERNAL KEY\" is not supported.", flash[:error]
|
357
|
+
|
358
|
+
# search by BLANK only first
|
359
|
+
get :search, :q => query_builder('TAG_DEFINITION','account', nil, '1')
|
360
|
+
assert_redirected_to tag_definitions_path(:q => 'account', :fast => '1')
|
361
|
+
|
362
|
+
# search by BLANK
|
363
|
+
get :search, :q => query_builder('TAG_DEFINITION','account')
|
364
|
+
assert_redirected_to tag_definitions_path(:q => 'account', :fast => '0')
|
365
|
+
|
366
|
+
# search by BLANK and fails
|
367
|
+
get :search, :q => query_builder('TAG_DEFINITION',dummy_uuid)
|
368
|
+
assert_redirected_to home_path
|
369
|
+
assert_equal "No tag definition matches \"#{dummy_uuid}\"", flash[:error]
|
370
|
+
end
|
371
|
+
|
372
|
+
private
|
373
|
+
|
374
|
+
def query_builder(object_type, search_for, search_by = nil, fast = nil)
|
375
|
+
"FIND:#{object_type} #{(search_by.nil? ? '' : "BY:#{search_by}")} FOR:#{search_for} #{(fast.nil? ? '' : "ONLY_FIRST:#{fast}")}"
|
376
|
+
end
|
377
|
+
|
378
|
+
def create_credit
|
379
|
+
credit = KillBillClient::Model::Credit.new(:invoice_id => nil, :account_id => @account.account_id, :credit_amount => 2.22)
|
380
|
+
credit = credit.create(true, 'kaui search test', nil, nil, build_options(@tenant, USERNAME, PASSWORD))
|
381
|
+
credit
|
382
|
+
end
|
383
|
+
|
384
|
+
def create_custom_field
|
385
|
+
custom_field = Kaui::CustomField.new({ object_id: @account.account_id,
|
386
|
+
objectType: 'ACCOUNT',
|
387
|
+
name: 'test',
|
388
|
+
value: 'test' })
|
389
|
+
@account.add_custom_field(custom_field, 'kaui search test', nil, nil, build_options(@tenant, USERNAME, PASSWORD))
|
390
|
+
end
|
391
|
+
|
392
|
+
def create_account_tag_definition(name = 'account', description = 'i am an account')
|
393
|
+
|
394
|
+
tag_definition = Kaui::TagDefinition.new({is_control_tag: false,
|
395
|
+
name: name,
|
396
|
+
description: description,
|
397
|
+
applicable_object_types: ['ACCOUNT']})
|
398
|
+
|
399
|
+
tag_definition.create('kaui search test', nil, nil, build_options(@tenant, USERNAME, PASSWORD))
|
400
|
+
end
|
401
|
+
|
402
|
+
def create_tag
|
403
|
+
tag_definition = create_account_tag_definition
|
404
|
+
tags = [tag_definition.id]
|
405
|
+
Kaui::Tag.set_for_account(@account.account_id, tags, 'kaui search test', nil, nil, build_options(@tenant, USERNAME, PASSWORD ))
|
32
406
|
end
|
33
407
|
end
|