kaui 2.0.0 → 2.0.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 87cb8b7da87b9a90782c29d1798aeaaf02e0373fb2b12479d6ea9e705052db28
4
- data.tar.gz: 1536ede11cba88fd15fd3a76109b7fe9c3277afb0040d98b8c9a9ab2e1198f04
3
+ metadata.gz: 435f5a3c43e225e631222f6342c14a00732cda14be90c36ea499a21a89d4f0dc
4
+ data.tar.gz: 733ba6cb910b17aaae7764811f1a2861ac0a6e4521fc856e777dcc055fba6e21
5
5
  SHA512:
6
- metadata.gz: 908f46db4f8461a2f799c3eb0135824b7827a90da6a4f1e2903106c28c38c62238b93eee95bd120ad56d55a060260dead1a7569dd82bc0af0386478b5c98ee4d
7
- data.tar.gz: 91f0d828ee558b7d2710440e3196c52a5fc080b54340569aa27538db0acf3545ccc506376ebfb54e7d786e62cd922ee6c8a3d1aab2c4a1d0a59536af7cbcb7eb
6
+ metadata.gz: 2db883f170a25e9996a7d2378aefe648b1807c2799a88e0bdbc2b5d495f4f926030ffdce7c414c6725ca7c9e0e54d0fb8ad981f3cedd90ec06bc532abd0ce346
7
+ data.tar.gz: 957b7d9f5e0b90d147ed20b6c14907402a30ef4f1bd29acb0d1a70016d0773212b375ef9d81aa7c56af2005ab45e777923a7689f3d53da697e1b4e3b7f2e8db8
@@ -81,12 +81,7 @@ class Kaui::AdminTenantsController < Kaui::EngineController
81
81
  fetch_overdue = promise { Kaui::Overdue::get_overdue_json(options) rescue @overdue = nil }
82
82
  fetch_overdue_xml = promise { Kaui::Overdue::get_tenant_overdue_config('xml', options) rescue @overdue_xml = nil }
83
83
 
84
- plugin_repository = Kaui::AdminTenant::get_plugin_repository
85
- # hack:: replace paypal key with paypal_express, to set configuration and allow the ui to find the right configuration inputs
86
- plugin_repository = plugin_repository.inject({}) { |p, (k,v)| p[k.to_s.sub(/\Apaypal/, 'paypal_express').to_sym] = v; p }
87
-
88
- fetch_plugin_config = promise { Kaui::AdminTenant::get_oss_plugin_info(plugin_repository) }
89
- fetch_tenant_plugin_config = promise { Kaui::AdminTenant::get_tenant_plugin_config(plugin_repository, options) }
84
+ fetch_tenant_plugin_config = promise { Kaui::AdminTenant::get_tenant_plugin_config(options) }
90
85
 
91
86
  @catalog_versions = []
92
87
  wait(fetch_catalog_versions).each_with_index do |effective_date, idx|
@@ -98,7 +93,6 @@ class Kaui::AdminTenantsController < Kaui::EngineController
98
93
 
99
94
  @overdue = wait(fetch_overdue)
100
95
  @overdue_xml = wait(fetch_overdue_xml)
101
- @plugin_config = wait(fetch_plugin_config) rescue ''
102
96
  @tenant_plugin_config = wait(fetch_tenant_plugin_config) rescue ''
103
97
 
104
98
  # When reloading page from the view, it sends the last tab that was active
@@ -307,6 +301,8 @@ class Kaui::AdminTenantsController < Kaui::EngineController
307
301
 
308
302
  if plugin_properties.blank?
309
303
  flash[:error] = 'Plugin properties cannot be blank'
304
+ elsif plugin_name.blank?
305
+ flash[:error] = 'Plugin name cannot be blank'
310
306
  else
311
307
  plugin_config = Kaui::AdminTenant.format_plugin_config(plugin_key, plugin_type, plugin_properties)
312
308
 
@@ -314,7 +310,7 @@ class Kaui::AdminTenantsController < Kaui::EngineController
314
310
  flash[:notice] = 'Config for plugin was successfully uploaded'
315
311
  end
316
312
 
317
- redirect_to admin_tenant_path(current_tenant.id)
313
+ redirect_to admin_tenant_path(current_tenant.id, :active_tab => 'PluginConfig')
318
314
  end
319
315
 
320
316
  def remove_allowed_user
@@ -406,28 +402,6 @@ class Kaui::AdminTenantsController < Kaui::EngineController
406
402
  end
407
403
  end
408
404
 
409
- def suggest_plugin_name
410
- json_response do
411
- message = nil
412
- entered_plugin_name = params.require(:plugin_name)
413
- plugin_repository = view_context.plugin_repository
414
-
415
- found_plugin, weights = fuzzy_match(entered_plugin_name, plugin_repository)
416
-
417
- if weights.size > 0
418
- plugin_anchor = view_context.link_to(weights[0][:plugin_name], '#', id: 'suggested',
419
- data: {
420
- plugin_name: weights[0][:plugin_name],
421
- plugin_key: weights[0][:plugin_key],
422
- plugin_type: weights[0][:plugin_type],
423
- })
424
- message = "Similar plugin already installed: '#{plugin_anchor}'" if weights[0][:worth_weight].to_f >= 1.0 && weights[0][:installed]
425
- message = "Did you mean '#{plugin_anchor}'?" if weights[0][:worth_weight].to_f < 1.0 || !weights[0][:installed]
426
- end
427
- { suggestion: message, plugin: found_plugin }
428
- end
429
- end
430
-
431
405
  def switch_tenant
432
406
  tenant = Kaui::Tenant.find_by_kb_tenant_id(params.require(:kb_tenant_id))
433
407
 
@@ -473,54 +447,6 @@ class Kaui::AdminTenantsController < Kaui::EngineController
473
447
  data.to_s.split(/(?=[A-Z])|(?=[_])|(?=[-])|(?=[ ])/).select {|member| !member.gsub(/[_-]/,'').strip.empty?}.map { |member| member.gsub(/[_-]/,'').strip.downcase }
474
448
  end
475
449
 
476
- def fuzzy_match(entered_plugin_name, plugin_repository)
477
- splitted_entered_plugin_name = split_camel_dash_underscore_space(entered_plugin_name)
478
- worth_of_non_words = 0.5 / splitted_entered_plugin_name.size.to_i
479
-
480
- weights = []
481
-
482
- plugin_repository.each do |plugin|
483
- return plugin, [] if plugin[:plugin_name] == entered_plugin_name || plugin[:plugin_key] == entered_plugin_name
484
- weight = { :plugin_name => plugin[:plugin_name], :plugin_key => plugin[:plugin_key],
485
- :plugin_type => plugin[:plugin_type], :installed => plugin[:installed], :worth_weight => 0.0 }
486
-
487
- splitted_plugin_name = split_camel_dash_underscore_space(plugin[:plugin_name])
488
- splitted_entered_plugin_name.each do |entered|
489
- if splitted_plugin_name.include?(entered)
490
- weight[:worth_weight] = weight[:worth_weight] + 1.0
491
- end
492
-
493
- splitted_plugin_name.each do |splitted|
494
- if entered.chars.all? { |ch| splitted.include?(ch) }
495
- weight[:worth_weight] = weight[:worth_weight] + worth_of_non_words
496
- break
497
- end
498
- end
499
-
500
- # perform a plugin key search, if weight is zero
501
- next unless weight[:worth_weight] == 0
502
- splitted_plugin_key = split_camel_dash_underscore_space(plugin[:plugin_key])
503
-
504
- if splitted_plugin_key.include?(entered)
505
- weight[:worth_weight] = weight[:worth_weight] + 1.0
506
- end
507
-
508
- splitted_plugin_key.each do |splitted|
509
- if entered.chars.all? { |ch| splitted.include?(ch) }
510
- weight[:worth_weight] = weight[:worth_weight] + worth_of_non_words
511
- break
512
- end
513
- end
514
- end
515
-
516
- weights << weight if weight[:worth_weight] > 0
517
-
518
- end
519
-
520
- weights.sort! { |a,b| b[:worth_weight] <=> a[:worth_weight] } if weights.size > 1
521
- return nil, weights
522
- end
523
-
524
450
  def fetch_catalog_xml(tenant_id, effective_date)
525
451
  current_tenant = safely_find_tenant_by_id(tenant_id)
526
452
 
@@ -1,9 +1,11 @@
1
1
  module Kaui
2
2
  module PaymentMethodHelper
3
3
 
4
- def is_json?(string)
5
- !string.blank? && !!JSON.parse(string) rescue false
4
+ def is_json?(value)
5
+ result = JSON.parse(value)
6
+ result.is_a?(Hash) || result.is_a?(Array)
7
+ rescue JSON::ParserError, TypeError
8
+ false
6
9
  end
7
-
8
10
  end
9
11
  end
@@ -1,46 +1,13 @@
1
1
  module Kaui
2
2
  module PluginHelper
3
- # including plugin that are installed
4
- def plugin_repository
5
- plugins = []
6
- plugin_repository = Kaui::AdminTenant.get_plugin_repository
7
- plugin_repository.each_pair do |key, info|
8
- plugins << {
9
- plugin_key: plugin_key(key.to_s, info),
10
- plugin_name: plugin_name(key.to_s, info),
11
- plugin_type: info[:type],
12
- installed: false
13
- }
14
- end
15
-
16
- installed_plugins = installed_plugins(plugins)
17
-
18
- plugins.sort! { |a, b| a[:plugin_key] <=> b[:plugin_key] }
19
- plugins.each { |plugin| installed_plugins << plugin }
20
3
 
4
+ def plugin_repository
21
5
  installed_plugins
22
6
  end
23
7
 
24
8
  private
25
9
 
26
- def plugin_name(key, info)
27
- if info[:artifact_id].nil?
28
- "killbill-#{key}"
29
- else
30
- "killbill-#{info[:artifact_id].gsub('killbill-','').gsub('-plugin','')}"
31
- end
32
- end
33
-
34
- def plugin_key(key, info)
35
- # hack:: replace paypal key with paypal_express, to set configuration and allow the ui to find the right configuration inputs
36
- if key.eql?('paypal')
37
- 'paypal_express'
38
- else
39
- "#{key}"
40
- end
41
- end
42
-
43
- def installed_plugins(plugins)
10
+ def installed_plugins
44
11
  installed_plugins = []
45
12
  nodes_info = KillBillClient::Model::NodesInfo.nodes_info(Kaui.current_tenant_user_options(current_user, session)) || []
46
13
  plugins_info = nodes_info.first.plugins_info || []
@@ -49,11 +16,15 @@ module Kaui
49
16
  next if plugin.version.nil?
50
17
  # do not allow duplicate
51
18
  next if installed_plugins.any? { |p| p[:plugin_name].eql?(plugin.plugin_name) }
52
- plugin_key = Kaui::AdminTenant.rewrite_plugin_key(plugin.plugin_key) unless plugin.plugin_key.nil?
19
+ plugin_key = plugin.plugin_key
53
20
  installed_plugins << {
21
+ # Unique identifier chosen by the user and used for kpm operations
54
22
  plugin_key: plugin_key,
55
- plugin_name: plugin.plugin_name,
56
- plugin_type: find_plugin_type(plugins, plugin_key),
23
+ # Notes:
24
+ # * plugin.plugin_name comes from kpm and is arbitrary (see Utils.get_plugin_name_from_file_path in the kpm codebase for instance)
25
+ # * plugin_name here is the plugin name as seen by Kill Bill and is typically defined in the Activator.java (this value is the one that matters for plugin configuration)
26
+ # * The mapping here is a convention we've used over the years and is no way enforced anywhere - it likely won't work for proprietary plugins (the user would need to specify it by toggling the input on the UI)
27
+ plugin_name: "killbill-#{plugin_key}",
57
28
  installed: true
58
29
  }
59
30
  end
@@ -61,15 +32,5 @@ module Kaui
61
32
  # to_s to handle nil
62
33
  installed_plugins.sort! { |a,b| a[:plugin_key].to_s <=> b[:plugin_key].to_s }
63
34
  end
64
-
65
- def find_plugin_type(plugins, plugin_key_to_search)
66
- plugins.each do |plugin|
67
- if plugin[:plugin_key] == plugin_key_to_search
68
- return plugin[:plugin_type]
69
- end
70
- end
71
-
72
- return nil
73
- end
74
35
  end
75
36
  end
@@ -26,81 +26,21 @@ class Kaui::AdminTenant < KillBillClient::Model::Tenant
26
26
  KillBillClient::Model::Tenant.upload_tenant_plugin_config(plugin_name, plugin_config, user, reason, comment, options)
27
27
  end
28
28
 
29
- def get_plugin_repository
30
- require 'open-uri'
31
- require 'yaml'
32
-
33
- source = URI.parse('https://raw.githubusercontent.com/killbill/killbill-cloud/master/kpm/lib/kpm/plugins_directory.yml').read
34
- YAML.load(source)
35
- rescue
36
- # Ignore gracefully
37
- {}
38
- end
39
-
40
- def get_oss_plugin_info(plugin_directory)
41
- # Serialize the plugin state for the view:
42
- # plugin_name#plugin_type:prop1,prop2,prop3;plugin_name#plugin_type:prop1,prop2,prop3;...
43
- #
44
- plugin_config = plugin_directory.inject({}) do |hsh, (k,v)|
45
- hsh["#{k}##{v[:type]}"] = v[:require] || []
46
- hsh
47
- end
48
- plugin_config.map { |e,v| "#{e}:#{v.join(",")}" }.join(";")
49
- end
50
-
51
- def get_tenant_plugin_config(plugin_directory, options)
52
- require 'yaml'
53
-
29
+ # Return a map of plugin_name => config
30
+ def get_tenant_plugin_config(options)
54
31
  raw_tenant_config = KillBillClient::Model::Tenant::search_tenant_config("PLUGIN_CONFIG_", options)
55
32
 
56
33
  tenant_config = raw_tenant_config.inject({}) do |hsh, e|
57
34
  # Strip prefix '/PLUGIN_CONFIG_'
58
- killbill_key = e.key.gsub!(/PLUGIN_CONFIG_/, '')
59
-
60
- # Extract killbill key for oss plugins based on convention 'killbill-KEY'
61
- plugin_key = killbill_key.gsub(/killbill-/, '') if killbill_key.start_with?('killbill-')
62
-
63
- # hack:: rewrite key, to allow the ui to find the right configuration inputs
64
- plugin_key = rewrite_plugin_key(plugin_key) unless plugin_key.nil?
65
- # If such key exists, lookup in plugin directory to see if is an official plugin
66
- is_an_official_plugin = !plugin_key.nil? && !plugin_directory[plugin_key.to_sym].blank?
67
- # Deserialize config based on string possible format, if exist in the official repository
68
- if is_an_official_plugin && is_yaml?(e.values[0])
69
- yml = YAML.load(e.values[0])
70
- # Hash of properties
71
- # is plugin key part of the yaml?
72
- if yml[plugin_key.to_sym].blank?
73
- # if not set it as raw
74
- hsh[plugin_key] = {:raw_config => e.values[0]}
75
- else
76
- hsh[plugin_key] = yml[plugin_key.to_sym]
77
- end
78
- hsh[plugin_key][:_raw] = e.values[0]
79
- elsif is_an_official_plugin && is_kv?(e.values[0])
80
- # Construct hash of properties based on java properties (k1=v1\nk2=v2\n...)
81
- hsh[plugin_key] = e.values[0].split("\n").inject({}) do |h, p0|
82
- k, v = p0.split('=');
83
- h[k] = v;
84
- h
85
- end
86
- hsh[plugin_key][:_raw] = e.values[0]
87
- else
88
- # Construct simple hash with one property :raw_config
89
- hsh[killbill_key] = {:raw_config => e.values[0], :_raw => e.values[0]}
90
- end
35
+ plugin_name = e.key.gsub!(/PLUGIN_CONFIG_/, '')
36
+
37
+ # Construct simple hash with one property (first value)
38
+ hsh[plugin_name] = e.values[0]
39
+
91
40
  hsh
92
41
  end
93
42
 
94
- # Serialize the whole thing a as string of the form:
95
- # plugin_key1::key1=value1|key2=value2|..;plugin_key2::...
96
- tenant_config.map do |plugin_key, props|
97
- serialized_props = props.inject("") do |s, (k, v)|
98
- e="#{k.to_s}=#{v.to_s}";
99
- s == "" ? s="#{e}" : s="#{s}|#{e}";
100
- s
101
- end
102
- "#{plugin_key}::#{serialized_props}"
103
- end.join(";")
43
+ tenant_config
104
44
  end
105
45
 
106
46
  def format_plugin_config(plugin_key, plugin_type, props)
@@ -142,22 +82,6 @@ class Kaui::AdminTenant < KillBillClient::Model::Tenant
142
82
  props
143
83
  end
144
84
 
145
- # hack when the plugin name after killbill is not the same as the plugin key, this mainly affects ruby plugin configuration,
146
- # as it use the key to retrieve the configuration.
147
- def rewrite_plugin_key(plugin_key)
148
- if plugin_key.start_with?('paypal')
149
- 'paypal_express'
150
- elsif plugin_key.start_with?('firstdata')
151
- 'firstdata_e4'
152
- elsif plugin_key.start_with?('bridge')
153
- 'payment_bridge'
154
- elsif plugin_key.start_with?('payu-latam')
155
- 'payu_latam'
156
- else
157
- "#{plugin_key}"
158
- end
159
- end
160
-
161
85
  # checks if string could be parse as yaml
162
86
  def is_yaml?(candidate_string)
163
87
  is_yaml = false
@@ -17,9 +17,10 @@
17
17
 
18
18
  <div id="plugin" class="form-group">
19
19
  <%= label_tag :entered_plugin_name, 'Plugin name', :class => 'col-sm-2 control-label' %>
20
+
20
21
  <div class="col-sm-4">
21
22
  <select class="form-control" id="select_plugin_name"></select>
22
- <%= text_field_tag :entered_plugin_name, nil, :class => 'form-control', :plugin_config => @plugin_config, :tenant_plugin_config => @tenant_plugin_config %>
23
+ <%= text_field_tag :entered_plugin_name, nil, :placeholder => 'as defined in the plugin Activator file', :class => 'form-control', :tenant_plugin_config => @tenant_plugin_config.to_json %>
23
24
  <div class="text plugin-suggestion text-danger"></div>
24
25
  </div>
25
26
  <div class="col-sm-1 spinner"><i class="fa fa-cog fa-2x fa-spin"></i></div>
@@ -29,7 +30,7 @@
29
30
  <span class="slider round"></span>
30
31
  </label>
31
32
  </label>
32
- <label class="col-sm-3 control-label toggle-label text-muted">or toggle plugin name input</label>
33
+ <label class="col-sm-3 control-label toggle-label text-muted">manual entry</label>
33
34
  </div>
34
35
 
35
36
  <div id="plugin_config_properties_header" class="form-group">
@@ -41,8 +42,11 @@
41
42
  </label>
42
43
  </label>
43
44
  </div>
44
- <!-- Anchor DIV that gets thrown away when switching plugins -->
45
- <div id="plugin_config_properties" plugin_name="" class="row">
45
+ <div class="form-group">
46
+ <%= label_tag :configuration, 'Configuration', :class => 'col-sm-2 control-label' %>
47
+ <div class="col-sm-4">
48
+ <textarea name="plugin_properties[raw_config]" id="raw_config" rows="10" class="form-control"></textarea>
49
+ </div>
46
50
  </div>
47
51
 
48
52
  <div class="form-group">
@@ -54,23 +58,6 @@
54
58
  </div>
55
59
  <% end %>
56
60
 
57
- <script id="plugin_config_properties_template" type="text/template">
58
- <input type="hidden" id="plugin_key_values" value="{{data_json}}" />
59
- {{#plugin_props_with_values}}
60
- <div class="form-group">
61
- <label class="col-sm-offset-1 col-sm-2 control-label" for="{{property}}">{{property_label}}</label>
62
- <div class="col-sm-6">
63
- {{#is_raw_config}}
64
- <textarea name="plugin_properties[raw_config]" id="raw_config" rows="10" class="form-control">{{value}}</textarea>
65
- {{/is_raw_config}}
66
- {{^is_raw_config}}
67
- <input type="text" name="plugin_properties[{{property}}]" id="{{property}}" class="form-control" value="{{value}}" />
68
- {{/is_raw_config}}
69
- </div>
70
- </div>
71
- {{/plugin_props_with_values}}
72
- </script>
73
-
74
61
  <script id="plugin_name_options_template" type="text/template">
75
62
  <option></option>
76
63
  {{#plugin_repository}}
@@ -101,48 +88,54 @@
101
88
  $('#plugin_config_properties').empty();
102
89
  $('#plugin_config_properties_header').hide();
103
90
  $(".plugin-suggestion").html('');
91
+ $("#raw_config").val('');
104
92
  });
105
93
 
106
- $("#toggle_raw").on('change', function(e) {
107
- if (isBlank($('#plugin_key_values').val())) {
108
- return;
94
+ /* Intercept TAB and potentially display known properties */
95
+ $('#entered_plugin_name').keydown(function (e) {
96
+ if (e.keyCode === 9) {
97
+ $("#plugin_name").val($('#entered_plugin_name').val());
98
+ $("#plugin_key").val('');
99
+ render_plugin_key_values();
109
100
  }
101
+ });
102
+ /* Intercept mouseleave and potentially display known properties */
103
+ $('#entered_plugin_name').on('mouseleave', function() {
104
+ $("#plugin_name").val($('#entered_plugin_name').val());
105
+ $("#plugin_key").val('');
106
+ render_plugin_key_values();
107
+ });
110
108
 
111
- var plugin_key_values = JSON.parse($('#plugin_key_values').val());
112
- if ($("#toggle_raw").prop("checked")) {
113
- var raw = [];
114
- raw.push({ is_raw_config: true, property: "raw_config", property_label: "Raw Config", value: ''});
115
-
116
- var plugin_name = $('#entered_plugin_name').val();
117
- var plugin_key = $("#plugin_key").val();
118
- var existing_props = get_tenant_plugin_properties(plugin_key, plugin_name);
119
- raw[0].value = existing_props['_raw'];
120
-
121
- render_plugin_key_values(raw, plugin_key_values);
122
- } else {
123
- render_plugin_key_values(plugin_key_values, plugin_key_values);
124
- }
109
+ $("#toggle_raw").on('change', function(e) {
110
+ $("#plugin_name").val($('#entered_plugin_name').val());
111
+ $("#plugin_key").val('');
112
+ render_plugin_key_values();
125
113
  });
126
114
 
127
115
  $('#select_plugin_name').on('change', function(e) {
116
+ // User has selected a plugin from the dropdown
128
117
  var selectedOption = e.target.selectedOptions;
129
118
 
130
119
  if (selectedOption.length > 0) {
131
120
  var plugin_name = selectedOption[0].value;
132
121
  var plugin_key = selectedOption[0].text;
122
+
133
123
  $("#plugin_name").val(plugin_name);
134
124
  $("#plugin_key").val(plugin_key);
135
- $("#plugin_type").val(selectedOption[0].dataset['pluginType']);
125
+ $("#plugin_type").val(selectedOption[0].dataset['pluginType']); // java or ruby
136
126
  $('#plugin_config_properties').attr('plugin_name', '');
137
127
  $('#plugin_config_properties_header').hide();
138
128
  $("#toggle_raw").prop('checked', false);
139
- add_properties_for_plugin(plugin_key, plugin_name);
129
+
130
+ render_plugin_key_values();
140
131
  }
141
132
  });
142
133
 
143
134
  populate_plugin_name_options();
144
135
  function populate_plugin_name_options(){
145
- var plugin_repository = JSON.parse($("#plugin_repository").val());
136
+ var all_plugins = JSON.parse($("#plugin_repository").val());
137
+ // We only list installed plugins as to not confuse the user
138
+ var plugin_repository = all_plugins.filter(plugin => plugin.installed);
146
139
  for (var idx = 0, size = plugin_repository.length; idx < size; idx++) {
147
140
  if (idx == 0 && plugin_repository[idx].installed) {
148
141
  plugin_repository[idx]['start_installed'] = true;
@@ -163,57 +156,14 @@
163
156
  }
164
157
 
165
158
  var template = $("#plugin_name_options_template").html();
166
- var options_html = Mustache.render( template , { plugin_repository: plugin_repository});
159
+ var options_html = Mustache.render( template , { plugin_repository: plugin_repository });
167
160
  $("#select_plugin_name").html(options_html);
168
161
  }
169
162
 
170
163
  function get_existing_tenant_plugin_properties(entered_plugin_name) {
171
164
  var tenant_plugin_properties = $('#entered_plugin_name').attr('tenant_plugin_config');
172
- var res = {};
173
- if (tenant_plugin_properties != undefined) {
174
- $.each(tenant_plugin_properties.split(';'), function(idx, el) {
175
- var el_parts = el.split('::');
176
- var el_plugin_name = el_parts[0];
177
- var el_props = el_parts[1];
178
- if (el_plugin_name === entered_plugin_name) {
179
- if (el_props.split('=')[0] == 'raw_config') {
180
- res['raw_config'] = el_props.replace("raw_config=", "");
181
- } else {
182
- $.map(el_props.split('|'), function(el) {
183
- var parts = el.split('=');
184
- res[parts[0]] = parts.slice(1).join('=');
185
- });
186
- }
187
- return false;
188
- }
189
- });
190
- }
191
- return res;
192
- }
193
-
194
- function get_selected_plugin_info(plugin_key) {
195
- var plugin_config_str = $('#entered_plugin_name').attr('plugin_config');
196
- var res = {}
197
- /* Deserialize plugin/properties (see AdminTenant model)*/
198
- $.each(plugin_config_str.split(';'), function(idx, el) {
199
- var el_parts = el.split(':');
200
- var el_parts_key = el_parts[0].split('#');
201
- var el_plugin_name = el_parts_key[0];
202
- var el_plugin_type = el_parts_key[1];
203
- var el_plugin_props = el_parts[1];
204
- if (el_plugin_name == plugin_key) {
205
- res['type'] = el_plugin_type;
206
- res['props'] = el_plugin_props == "" ? [] : (el_plugin_type == "" ? ['raw_config'] : el_plugin_props.split(','));
207
- return false;
208
- }
209
- });
210
-
211
- if (isBlank(res['props'])) {
212
- res['type'] = '';
213
- res['props'] = ['raw_config'];
214
- }
215
-
216
- return res;
165
+ var res = JSON.parse(tenant_plugin_properties);
166
+ return res[entered_plugin_name];
217
167
  }
218
168
 
219
169
  function get_tenant_plugin_properties(plugin_key, plugin_name) {
@@ -221,167 +171,25 @@
221
171
  var existing_props = get_existing_tenant_plugin_properties(plugin_key);
222
172
 
223
173
  // try by plugin name for proprietary plugins
224
- if (isBlank(existing_props)) {
174
+ if (isBlank(existing_props) && !isBlank(plugin_name)) {
225
175
  existing_props = get_existing_tenant_plugin_properties(plugin_name);
226
176
  }
227
177
 
228
178
  return existing_props;
229
179
  }
230
180
 
231
- function add_properties_for_plugin(plugin_key, plugin_name) {
232
- var plugin_info = get_selected_plugin_info(plugin_key);
233
-
234
- if (isBlank(plugin_name)) {
235
- $('#plugin_config_properties').empty();
236
- $('#plugin_config_properties').attr('plugin_name', '');
237
- return;
238
- }
239
-
240
- if ($('#plugin_config_properties').attr('plugin_name') == plugin_name) {
241
- /* Already set...*/
242
- return;
243
- }
244
-
245
- var existing_props = get_tenant_plugin_properties(plugin_key, plugin_name);
246
-
247
- var type = plugin_info['type'];
248
- var props = plugin_info['props']
249
-
250
- if (isBlank(type)) {
251
- $(".switch-half-container").hide();
252
- } else {
253
- $(".switch-half-container").show();
254
- }
255
-
256
- $('#plugin_type').val(type);
257
- /* Prune the tree to restart from scratch */
258
- $('#plugin_config_properties_header').show();
259
- $('#plugin_config_properties').empty();
260
- $('#plugin_config_properties').append('<div id="plugin_config_properties_anchor" class="col-sm-12"></div>');
261
-
262
- var merged_props_with_values = existing_props;
263
- if (props != undefined) {
264
- $.each(props, function(idx, p) {
265
- if (merged_props_with_values[p] == undefined) {
266
- merged_props_with_values[p] = '';
267
- }
268
- });
269
- }
270
-
271
- add_property_form_entry(merged_props_with_values);
272
-
273
- $('#plugin_config_properties').attr('plugin_name', plugin_name);
274
- }
275
-
276
- function format_label(input) {
277
- /* Keep latest piece of a system property to keep it short */
278
- var label_name = input.split('.').pop();
279
- /* Replace underscore with comma */
280
- label_name = label_name.replace(/_/g, ',');
281
- /* Replace uppercase with comma + uppercase */
282
- label_name = label_name.replace(/([A-Z]+)/g, ",$1");
283
- /* Split name make sure each word starts with Uppercase */
284
- var tmp1 = label_name.split(',');
285
- var label_name_array = [];
286
- $.map(tmp1, function(el) { label_name_array.push(el.charAt(0).toUpperCase() + el.slice(1)) });
287
- label_name = label_name_array.join(' ');
288
- return label_name;
289
- }
290
-
291
- function add_property_form_entry(merged_props_with_values) {
292
- var plugin_props_with_values = [];
293
-
294
- $.each(merged_props_with_values, function(p, v) {
295
- if (p != '_raw') {
296
- plugin_props_with_values.push({ property_label: format_label(p), property: p, value: v, is_raw_config: p == 'raw_config'});
297
- }
298
- });
299
-
300
- render_plugin_key_values(plugin_props_with_values, plugin_props_with_values);
301
- }
302
-
303
- function render_plugin_key_values(plugin_props_with_values, original) {
304
- var template = $("#plugin_config_properties_template").html();
305
- var plugin_props_with_values_html = Mustache.render( template ,{ plugin_props_with_values: plugin_props_with_values,
306
- data_json: JSON.stringify(original)});
307
- $("#plugin_config_properties_anchor").html(plugin_props_with_values_html);
308
- }
309
-
310
- // Free text related functions and handlers
311
- init_plugin_name_handlers();
312
- function init_plugin_name_handlers() {
313
- /* Intercept ENTER and potentially display property form if plugin is know */
314
- $('#entered_plugin_name').keyup(function (e) {
315
- e.preventDefault();
316
- if (e.keyCode === 13) {
317
- suggest_plugin_name();
318
- }
319
- });
320
-
321
- /* Intercept mouseleave and potentially display property form if plugin is know */
322
- $('#entered_plugin_name').on('mouseleave', function() {
323
- suggest_plugin_name();
324
- });
325
- }
326
-
327
- function suggested_response(response) {
328
- $(".spinner").hide();
329
- if (!isBlank(response.suggestion)) {
330
- $(".plugin-suggestion").html(response.suggestion);
331
-
332
- $("#suggested").click(function(e) {
333
- var plugin_name = e.currentTarget.dataset['pluginName'];
334
- var plugin_key = e.currentTarget.dataset['pluginKey'];
335
-
336
- $("#entered_plugin_name").val(plugin_name);
337
- $("#plugin_key").val(plugin_key);
338
- $("#plugin_type").val(e.currentTarget.dataset['pluginType']);
339
- $("#entered_plugin_name").data("last", plugin_name);
340
-
341
- $(".plugin-suggestion").html('');
342
- add_properties_for_plugin(isBlank(plugin_key) ? plugin_name : plugin_key, plugin_name);
343
- });
344
-
181
+ function render_plugin_key_values() {
182
+ var plugin_name = "";
183
+ var plugin_key = "";
184
+ if (isBlank($('#entered_plugin_name').val())) {
185
+ plugin_name = $("#plugin_name").val();
186
+ plugin_key = $("#plugin_key").val();
345
187
  } else {
346
- $(".plugin-suggestion").html('');
188
+ plugin_name = $("#entered_plugin_name").val();
347
189
  }
348
190
 
349
- var plugin_name = $('#entered_plugin_name').val();
350
- var plugin_key = $("#plugin_key").val();
351
- $("#plugin_name").val(plugin_name);
352
-
353
- add_properties_for_plugin(isBlank(plugin_key) ? plugin_name : plugin_key, plugin_name);
354
- }
355
-
356
- function suggest_plugin_name() {
357
- var plugin_name = $("#entered_plugin_name").val();
358
- var last_plugin_name = $("#entered_plugin_name").data("last");
359
- $("#plugin_key").val(plugin_name);
360
-
361
- if (isBlank(plugin_name)) {
362
- return;
363
- }
364
-
365
- // no change
366
- if ( plugin_name == last_plugin_name) {
367
- return;
368
- }
369
-
370
- $('#plugin_config_properties').attr('plugin_name', '');
371
- $('#plugin_config_properties').empty();
372
- $(".plugin-suggestion").html('');
373
- $("#entered_plugin_name").data("last", plugin_name);
374
- $(".spinner").show();
375
- $.ajax({
376
- url: '<%= suggest_plugin_name_path() %>',
377
- type: "GET",
378
- dataType: "json",
379
- data: {
380
- "plugin_name": plugin_name,
381
- },
382
- success: suggested_response
383
- });
191
+ var existing_props = get_tenant_plugin_properties(plugin_key, plugin_name);
192
+ $("#raw_config").val(existing_props);
384
193
  }
385
-
386
194
  });
387
- <% end %>
195
+ <% end %>
@@ -126,8 +126,8 @@
126
126
  <% end %>
127
127
  <% (transaction.properties || []).sort_by { |p| p.key }.each do |property| %>
128
128
  <% next if property.value.blank? %>
129
- <li><%= property.key %>
130
- : <%= is_json?(property.value) ? "<pre>#{JSON.pretty_generate(JSON.parse(property.value))}</pre>".html_safe : property.value %></li>
129
+ <li><strong><%= property.key %>:</strong>
130
+ <%= is_json?(property.value) ? "<pre>#{JSON.pretty_generate(JSON.parse(property.value))}</pre>".html_safe : property.value %></li>
131
131
  <% end %>
132
132
  </ul>
133
133
  </td>
@@ -186,7 +186,6 @@ Kaui::Engine.routes.draw do
186
186
  match '/add_allowed_user' => 'admin_tenants#add_allowed_user', :via => :put, :as => 'add_allowed_user'
187
187
  match '/allowed_users' => 'admin_tenants#allowed_users', :via => :get, :as => 'admin_tenant_allowed_users'
188
188
  match '/catalog_by_effective_date' => 'admin_tenants#catalog_by_effective_date', :via => :get, :as => 'catalog_by_effective_date'
189
- match '/suggest_plugin_name' => 'admin_tenants#suggest_plugin_name', :via => :get, :as => 'suggest_plugin_name'
190
189
  match '/switch' => 'admin_tenants#switch_tenant', :via => :get, :as => 'switch_tenant'
191
190
  match '/:id/download_catalog' => 'admin_tenants#download_catalog_xml', :via => :get, :as => 'download_catalog_xml'
192
191
  end
@@ -1,3 +1,3 @@
1
1
  module Kaui
2
- VERSION = '2.0.0'
2
+ VERSION = '2.0.1'
3
3
  end
@@ -94,7 +94,7 @@ class Kaui::AdminTenantsControllerTest < Kaui::FunctionalTestHelper
94
94
  stripe_yml.each { |k, v| stripe_yml[k] = v.to_s }
95
95
  post :upload_plugin_config, :id => tenant.id, :plugin_name => 'killbill-stripe', :plugin_key => 'stripe', :plugin_type => 'ruby', :plugin_properties => stripe_yml
96
96
 
97
- assert_redirected_to admin_tenant_path(tenant.id)
97
+ assert_redirected_to admin_tenant_path(tenant.id, :active_tab => 'PluginConfig')
98
98
  assert_equal 'Config for plugin was successfully uploaded', flash[:notice]
99
99
  end
100
100
 
@@ -284,26 +284,6 @@ class Kaui::AdminTenantsControllerTest < Kaui::FunctionalTestHelper
284
284
 
285
285
  end
286
286
 
287
- test 'should suggest a plugin name' do
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
301
-
302
- get :suggest_plugin_name, :plugin_name => 'pypl'
303
- assert_response :success
304
- assert_equal "Did you mean #{plugin_anchor}?", JSON[@response.body]['suggestion']
305
- end
306
-
307
287
  test 'should switch tenant' do
308
288
  other_tenant = setup_and_create_test_tenant(1)
309
289
  other_tenant_kaui = Kaui::Tenant.find_by_kb_tenant_id(other_tenant.tenant_id)
@@ -362,7 +342,7 @@ class Kaui::AdminTenantsControllerTest < Kaui::FunctionalTestHelper
362
342
  next if plugin.plugin_key.nil? || plugin.version.nil?
363
343
  next if installed_plugins.any? { |p| p[:plugin_name].eql?(plugin.plugin_name) }
364
344
  installed_plugins << {
365
- plugin_key: Kaui::AdminTenant.rewrite_plugin_key(plugin.plugin_key),
345
+ plugin_key: plugin.plugin_key,
366
346
  plugin_name: plugin.plugin_name
367
347
  }
368
348
  end
@@ -25,7 +25,7 @@ class Kaui::CreditsControllerTest < Kaui::FunctionalTestHelper
25
25
  :account_id => @account.account_id,
26
26
  :credit => {
27
27
  :invoice_id => invoice_id,
28
- :credit_amount => 5.34
28
+ :amount => 5.34
29
29
  }
30
30
  assert_redirected_to account_path(@account.account_id)
31
31
  assert_equal "Error while communicating with the Kill Bill server: Error 404: Object id=#{invoice_id} type=INVOICE doesn't exist!", flash[:error]
@@ -35,7 +35,7 @@ class Kaui::CreditsControllerTest < Kaui::FunctionalTestHelper
35
35
  post :create,
36
36
  :account_id => @account.account_id,
37
37
  :credit => {
38
- :credit_amount => 5.34
38
+ :amount => 5.34
39
39
  }
40
40
  assert_redirected_to account_path(@account.account_id)
41
41
  assert_equal 'Credit was successfully created', flash[:notice]
@@ -46,7 +46,7 @@ class Kaui::CreditsControllerTest < Kaui::FunctionalTestHelper
46
46
  :account_id => @account.account_id,
47
47
  :credit => {
48
48
  :invoice_id => @invoice_item.invoice_id,
49
- :credit_amount => 5.34
49
+ :amount => 5.34
50
50
  }
51
51
  assert_redirected_to account_invoice_path(@account.account_id, @invoice_item.invoice_id)
52
52
  assert_equal 'Credit was successfully created', flash[:notice]
@@ -188,7 +188,7 @@ class Kaui::HomeControllerTest < Kaui::FunctionalTestHelper
188
188
  dummy_uuid = SecureRandom.uuid.to_s
189
189
  credit = create_credit
190
190
  # search by ID
191
- get :search, :q => query_builder('CREDIT',credit.credit_id, 'ID')
191
+ get :search, :q => query_builder('CREDIT',credit.invoice_item_id, 'ID')
192
192
  assert_redirected_to account_invoice_path(credit.account_id, credit.invoice_id)
193
193
 
194
194
  # search by ID and fails
@@ -202,11 +202,11 @@ class Kaui::HomeControllerTest < Kaui::FunctionalTestHelper
202
202
  assert_equal "\"CREDIT\": Search by \"EXTERNAL KEY\" is not supported.", flash[:error]
203
203
 
204
204
  # search by BLANK only first
205
- get :search, :q => query_builder('CREDIT',credit.credit_id, nil, '1')
205
+ get :search, :q => query_builder('CREDIT',credit.invoice_item_id, nil, '1')
206
206
  assert_redirected_to account_invoice_path(credit.account_id, credit.invoice_id)
207
207
 
208
208
  # search by BLANK
209
- get :search, :q => query_builder('CREDIT',credit.credit_id)
209
+ get :search, :q => query_builder('CREDIT',credit.invoice_item_id)
210
210
  assert_redirected_to account_invoice_path(credit.account_id, credit.invoice_id)
211
211
 
212
212
  # search by BLANK and fails
@@ -376,9 +376,9 @@ class Kaui::HomeControllerTest < Kaui::FunctionalTestHelper
376
376
  end
377
377
 
378
378
  def create_credit
379
- credit = KillBillClient::Model::Credit.new(:invoice_id => nil, :account_id => @account.account_id, :credit_amount => 2.22)
379
+ credit = KillBillClient::Model::Credit.new(:invoice_id => nil, :account_id => @account.account_id, :amount => 2.22)
380
380
  credit = credit.create(true, 'kaui search test', nil, nil, build_options(@tenant, USERNAME, PASSWORD))
381
- credit
381
+ credit.first
382
382
  end
383
383
 
384
384
  def create_custom_field
@@ -96,7 +96,7 @@ class Kaui::SubscriptionsControllerTest < Kaui::FunctionalTestHelper
96
96
 
97
97
  post :update, :id => @bundle.subscriptions.first.subscription_id, :plan_name => 'not-exists'
98
98
  assert_redirected_to edit_subscription_path(@bundle.subscriptions.first.subscription_id)
99
- assert_equal "Error while changing subscription: Error 400: Could not find a plan matching spec: (plan: 'not-exists', product: 'undefined', billing period: 'undefined', pricelist 'undefined')", flash[:error]
99
+ assert_equal "Error while changing subscription: Error 400: Could not find any plans named 'not-exists'", flash[:error]
100
100
  end
101
101
 
102
102
  test 'should update' do
@@ -28,7 +28,7 @@ module Kaui
28
28
  @bundle = create_bundle(@account, @tenant)
29
29
  @invoice_item = create_charge(@account, @tenant)
30
30
  @paid_invoice_item = create_charge(@account, @tenant, true)
31
- @bundle_invoice = @account.invoices(true, build_options(@tenant)).first
31
+ @bundle_invoice = @account.invoices(build_options(@tenant)).first
32
32
  @payment_method = create_payment_method(true, @account, @tenant)
33
33
  @payment = create_payment(@paid_invoice_item, @account, @tenant)
34
34
 
@@ -159,15 +159,15 @@ module Kaui
159
159
  tenant = create_tenant(user, reason, comment) if tenant.nil?
160
160
  account = create_account(tenant, username, password, user, reason, comment) if account.nil?
161
161
 
162
- credit = KillBillClient::Model::Credit.new(:invoice_id => invoice_id, :account_id => account.account_id, :credit_amount => 23.22)
163
- credit = credit.create(true, user, reason, comment, build_options(tenant, username, password))
162
+ credit = KillBillClient::Model::Credit.new(:invoice_id => invoice_id, :account_id => account.account_id, :amount => 23.22)
163
+ credit = credit.create(true, user, reason, comment, build_options(tenant, username, password)).first
164
164
 
165
- invoice = KillBillClient::Model::Invoice.find_by_id(credit.invoice_id, true, 'NONE', build_options(tenant, username, password))
166
- invoice.items.find { |ii| ii.amount == -credit.credit_amount }
165
+ invoice = KillBillClient::Model::Invoice.find_by_id(credit.invoice_id, 'NONE', build_options(tenant, username, password))
166
+ invoice.items.find { |ii| ii.amount == -credit.amount }
167
167
  end
168
168
 
169
169
  def commit_invoice(invoice_id, tenant, username = USERNAME, password = PASSWORD, user = 'Kaui test', reason = nil, comment = nil)
170
- invoice = KillBillClient::Model::Invoice.find_by_id(invoice_id, false, 'NONE', build_options(tenant, username, password))
170
+ invoice = KillBillClient::Model::Invoice.find_by_id(invoice_id, 'NONE', build_options(tenant, username, password))
171
171
  invoice.commit(user, reason, comment, build_options(tenant, username, password))
172
172
  end
173
173
 
@@ -0,0 +1,17 @@
1
+ require 'test_helper'
2
+
3
+ class PaymentMethodHelperTest < ActionView::TestCase
4
+
5
+ include Kaui::PaymentMethodHelper
6
+
7
+ test 'is_json?' do
8
+ assert !is_json?(5)
9
+ assert !is_json?('true')
10
+ assert !is_json?(false)
11
+ assert !is_json?("")
12
+ assert !is_json?(nil)
13
+ assert is_json?('[1, 2, 3]')
14
+ assert is_json?('{"value": "New", "onclick": "CreateNewDoc()"}')
15
+ assert !is_json?('{"value" => "New", "onclick": "CreateNewDoc()"}')
16
+ end
17
+ end
@@ -62,40 +62,6 @@ class Kaui::AdminTenantTest < ActiveSupport::TestCase
62
62
  assert_split(splitted)
63
63
  end
64
64
 
65
- test 'can do a fuzzy match of a plugin to suggest a plugin' do
66
- plugins_info = plugins_repo
67
- adminTenantController = Kaui::AdminTenantsController.new
68
-
69
- %w(killbill-paypal express paypal pay).each do |plugin_name|
70
- found_plugin, weights = adminTenantController.send(:fuzzy_match, plugin_name, plugins_info)
71
- assert_nil(found_plugin)
72
- assert_equal weights[0][:plugin_name], 'killbill-paypal-express'
73
- end
74
-
75
- plugin_name = 'email'
76
- found_plugin, weights = adminTenantController.send(:fuzzy_match, plugin_name, plugins_info)
77
- assert_nil(found_plugin)
78
- assert_equal weights[0][:plugin_name], 'killbill-email-notifications'
79
-
80
- %w(first firstdata firstdata_e4).each do |plugin_name|
81
- found_plugin, weights = adminTenantController.send(:fuzzy_match, plugin_name, plugins_info)
82
- assert_nil(found_plugin)
83
- assert_equal weights[0][:plugin_name], 'killbill-firstdata-e4'
84
- end
85
-
86
- %w(braintree brain).each do |plugin_name|
87
- found_plugin, weights = adminTenantController.send(:fuzzy_match, plugin_name, plugins_info)
88
- assert_nil(found_plugin)
89
- assert_equal weights[0][:plugin_name], 'killbill-braintree_blue'
90
- end
91
-
92
- # if found weights should be empty
93
- plugin_name = 'avatax'
94
- found_plugin, weights = adminTenantController.send(:fuzzy_match, plugin_name, plugins_info)
95
- assert_equal weights.size, 0
96
- assert_equal found_plugin[:plugin_name], 'killbill-avatax'
97
- end
98
-
99
65
  test 'should fetch proprietary plugin config' do
100
66
  tenant = create_tenant()
101
67
  assert_not_nil(tenant)
@@ -106,12 +72,11 @@ class Kaui::AdminTenantTest < ActiveSupport::TestCase
106
72
  plugin_config = 'key=value'
107
73
  Kaui::AdminTenant.upload_tenant_plugin_config(plugin_name, plugin_config, options[:username], nil, nil, options)
108
74
 
109
- plugins_config = Kaui::AdminTenant.get_tenant_plugin_config({}, options)
75
+ plugins_config = Kaui::AdminTenant.get_tenant_plugin_config(options)
110
76
  assert_not_nil(plugins_config)
111
77
 
112
- plugin_info = plugins_config.split('::')
113
- assert_equal plugin_name, plugin_info[0]
114
- assert_equal 'key=value|_raw=key=value', plugin_info[1].gsub('raw_config=','')
78
+ assert_equal plugin_name, plugins_config.keys.first
79
+ assert_equal 'key=value', plugins_config[plugin_name]
115
80
  end
116
81
 
117
82
  test 'should fetch plugin config' do
@@ -130,15 +95,13 @@ class Kaui::AdminTenantTest < ActiveSupport::TestCase
130
95
  plugin_config = Kaui::AdminTenant.format_plugin_config(plugin_key, 'ruby', plugin_properties)
131
96
  Kaui::AdminTenant.upload_tenant_plugin_config(plugin_name, plugin_config, options[:username], nil, nil, options)
132
97
 
133
- plugins_config = Kaui::AdminTenant.get_tenant_plugin_config({ :paypal_express => { 'type' => 'ruby',
134
- 'artifact_id' => 'paypal-express-plugin'} }, options)
98
+ plugins_config = Kaui::AdminTenant.get_tenant_plugin_config(options)
135
99
  assert_not_nil(plugins_config)
136
- plugin_info = plugins_config.split('::')
137
- assert_equal plugin_key, plugin_info[0]
138
- response_plugin_properties = plugin_info[1].split('|')
139
- assert_equal plugin_properties[:signature], response_plugin_properties[0].split('=')[1]
140
- assert_equal plugin_properties[:login], response_plugin_properties[1].split('=')[1]
141
- assert_equal plugin_properties[:password], response_plugin_properties[2].split('=')[1]
100
+ assert_equal plugin_name, plugins_config.keys.first
101
+ response_plugin_properties = plugins_config[plugin_name].split
102
+ assert_equal plugin_properties[:signature], response_plugin_properties[3]
103
+ assert_equal plugin_properties[:login], response_plugin_properties[5]
104
+ assert_equal plugin_properties[:password], response_plugin_properties[7]
142
105
  end
143
106
 
144
107
  private
@@ -166,4 +129,4 @@ class Kaui::AdminTenantTest < ActiveSupport::TestCase
166
129
  assert_equal 'to', splitted[4]
167
130
  assert_equal 'split', splitted[5]
168
131
  end
169
- end
132
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kaui
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Killbill core team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-21 00:00:00.000000000 Z
11
+ date: 2020-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -128,14 +128,14 @@ dependencies:
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '3.0'
131
+ version: '3.2'
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '3.0'
138
+ version: '3.2'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: devise
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -198,14 +198,14 @@ dependencies:
198
198
  requirements:
199
199
  - - "~>"
200
200
  - !ruby/object:Gem::Version
201
- version: '1.0'
201
+ version: '2.0'
202
202
  type: :runtime
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
206
  - - "~>"
207
207
  - !ruby/object:Gem::Version
208
- version: '1.0'
208
+ version: '2.0'
209
209
  - !ruby/object:Gem::Dependency
210
210
  name: jquery-ui-rails
211
211
  requirement: !ruby/object:Gem::Requirement
@@ -844,6 +844,7 @@ files:
844
844
  - test/test_helper.rb
845
845
  - test/unit/helpers/kaui/admin_allowed_users_helper_test.rb
846
846
  - test/unit/helpers/kaui/admin_tenants_helper_test.rb
847
+ - test/unit/helpers/kaui/payment_method_helper_test.rb
847
848
  - test/unit/helpers/kaui/tenants_helper_test.rb
848
849
  - test/unit/helpers/kaui/uuid_helper_test.rb
849
850
  - test/unit/kaui/account_email_test.rb
@@ -904,6 +905,7 @@ test_files:
904
905
  - test/unit/kaui/tenant_test.rb
905
906
  - test/unit/kaui/money_helper_test.rb
906
907
  - test/unit/helpers/kaui/tenants_helper_test.rb
908
+ - test/unit/helpers/kaui/payment_method_helper_test.rb
907
909
  - test/unit/helpers/kaui/admin_tenants_helper_test.rb
908
910
  - test/unit/helpers/kaui/admin_allowed_users_helper_test.rb
909
911
  - test/unit/helpers/kaui/uuid_helper_test.rb