marty 2.3.14 → 2.3.15

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: da67a7b3a76528a69a24aa349d488d0675a0d9b3de9733c3b67abd5bd04428f8
4
- data.tar.gz: 915575d95227cd4c01a7d1b2b5ffb77b9846789a0d303462c8590a708aa0f83d
3
+ metadata.gz: a297a85d0d4cdfde6d667e399b64684900dba8e9b9faaffa355737c8c5c5678b
4
+ data.tar.gz: 46c85fe0f1c7de9d3fba4d55b216d3e7daa24cc6a9f76cf1d75befb15cdf5284
5
5
  SHA512:
6
- metadata.gz: ecba775e4ad650d2ef22a0d79ae33d7743864e3ebef3ab7597513c122048441226db7a44f3b55f5a0aa606d626836561f118c9db5f49df1e44adb9013620e6ae
7
- data.tar.gz: 13ce94510034f486dcff99496d7cba902b53f1ddc0d56ebcc99a2b639c5a040c084c2a45b3d83e2b187cc3ada48e9977c1fe92dbeccea003b5c46a13f847f7a4
6
+ metadata.gz: ac982f3abebddb0f92269d41eed6c100c297feac1a9726693abaeba7b93b3d0c281525f2df3ed7d94d43e67a12a95eb2782f65d8010ab94e4e4157b43bb5bbf6
7
+ data.tar.gz: f4816a56f8b3b61f72acb67faeffdd17f55010db418ab520f60f11c2058c123928c54e813c78e28c9b22a94b45620ea84568b091de90b41352735334da6658a7
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- marty (2.3.13)
4
+ marty (2.3.15)
5
5
  aws-sigv4 (~> 1.0, >= 1.0.2)
6
6
  axlsx (= 3.0.0pre)
7
7
  coderay
@@ -106,7 +106,7 @@ GEM
106
106
  i18n (0.9.5)
107
107
  concurrent-ruby (~> 1.0)
108
108
  io-like (0.3.0)
109
- json-schema (2.8.0)
109
+ json-schema (2.8.1)
110
110
  addressable (>= 2.4)
111
111
  loofah (2.2.2)
112
112
  crass (~> 1.0.2)
@@ -152,10 +152,9 @@ class Marty::DeloreanRule < Marty::BaseRule
152
152
  estack_full = resh.delete(:err_stack)
153
153
  estack = estack_full && {
154
154
  err_stack: estack_full.select{ |l| l.starts_with?('DELOREAN')}} || {}
155
+ detail = { input: params, dgparams: dgparams} + resh + estack
155
156
  Marty::Logger.info("Rule Log #{ruleh['name']}",
156
- { input: params,
157
- dgparams: dgparams } + resh + estack
158
- )
157
+ Marty::Util.scrub_obj(detail))
159
158
  end
160
159
  end
161
160
  end
@@ -132,4 +132,19 @@ module Marty::Util
132
132
  URI.encode("#{Marty::Util.marty_path}/report?data=#{data}"\
133
133
  "&reptitle=#{title}&format=#{format}")
134
134
  end
135
+
136
+ def self.scrub_obj(obj)
137
+ trav = lambda {|o|
138
+ if o.is_a?(Hash)
139
+ return o.each_with_object({}) {|(k, v), h| h[k] = trav.call(v)}
140
+ elsif o.is_a?(Array)
141
+ return o.map {|v| trav.call(v)}
142
+ elsif o.to_s.length > 10000
143
+ o.class.to_s
144
+ else
145
+ o
146
+ end
147
+ }
148
+ trav.call(obj)
149
+ end
135
150
  end
@@ -1,3 +1,3 @@
1
1
  module Marty
2
- VERSION = "2.3.14"
2
+ VERSION = "2.3.15"
3
3
  end
@@ -15,7 +15,7 @@ describe Marty::JobController, slow: true do
15
15
 
16
16
  # Needed here because shutting transactional fixtures off
17
17
  # means we lose the globally set uesr
18
- Mcfly.whodunnit = UserHelpers.system_user
18
+ Mcfly.whodunnit = system_user
19
19
 
20
20
  Marty::Script.load_script_bodies(promise_bodies, Date.today)
21
21
 
@@ -178,12 +178,12 @@ feature 'test netzke + pg_enum compatibility', js: true do
178
178
 
179
179
  and_by "filter form by state_enum ASCENDING" do
180
180
  press("Enum state")
181
- expect(lp_grid.col_values(:enum_state)).to eq(["AS","AZ","DC","WA"])
181
+ expect(lp_grid.get_col_vals(:enum_state)).to eq(["AS","AZ","DC","WA"])
182
182
  end
183
183
 
184
184
  and_by "filter form by state_enum DESCENDING" do
185
185
  press("Enum state")
186
- expect(lp_grid.col_values(:enum_state)).to eq(["WA","DC","AZ","AS"])
186
+ expect(lp_grid.get_col_vals(:enum_state)).to eq(["WA","DC","AZ","AS"])
187
187
  end
188
188
 
189
189
  end
@@ -45,7 +45,7 @@ feature 'logger view', js: true, capybara: true do
45
45
  press('System')
46
46
  show_submenu('Log Maintenance')
47
47
  press('View Log')
48
- wait_for_ready
48
+ wait_for_ajax
49
49
 
50
50
  exp_types = ["fatal", "error", "info", "debug", "warn"]
51
51
  exp_messages = ["fatal message", "error message",
@@ -72,11 +72,11 @@ feature 'logger view', js: true, capybara: true do
72
72
  wait_for_ajax
73
73
  cnt = logview.row_count()
74
74
  expect(cnt).to eq(exp_count)
75
- types = logview.col_values('message_type', cnt, 0)
76
- messages = logview.col_values('message', cnt, 0)
77
- details = logview.col_values('details', cnt, 0).
75
+ types = logview.get_col_vals('message_type', cnt, 0)
76
+ messages = logview.get_col_vals('message', cnt, 0)
77
+ details = logview.get_col_vals('details', cnt, 0).
78
78
  map { |d| CGI.unescapeHTML(d) }
79
- ts = logview.col_values('timestamp_custom', cnt, 0)
79
+ ts = logview.get_col_vals('timestamp_custom', cnt, 0)
80
80
  expect(ts).to eq(@ts.slice(0,exp_count))
81
81
  expect(types).to eq(exp_types.slice(0,exp_count))
82
82
  expect(messages).to eq(exp_messages.slice(0,exp_count))
@@ -200,7 +200,7 @@ feature 'rule view', js: true do
200
200
  exp = "Computed - Error in rule 'abc' field 'computed_guards': Syntax error on line 1"
201
201
  expect(page).to have_content(exp)
202
202
  sleep 2 # sleep needed for message to clear, otherwise failing tests could
203
- # pass due to prior messages
203
+ # pass due to prior messages
204
204
 
205
205
  # lhs is not identifier - BaseRuleView#simple_to_has will raise
206
206
  fill_in(:computed_guards, with: '0sadf = 123j')
@@ -307,7 +307,7 @@ computed_value = if paramb
307
307
  then param1 / (grid1_grid_result||1)
308
308
  else (grid2_grid_result||1) / param1
309
309
  EOL
310
- names = mrv.col_values(:name, 9, 0)
310
+ names = mrv.get_col_vals(:name, 9, 0)
311
311
  idx = names.index{|n|n=='Rule3'}+1
312
312
  mrv.select_row(idx)
313
313
  press("Edit")
@@ -326,9 +326,9 @@ EOL
326
326
  go_to_xyz_rules
327
327
  xrv = netzke_find("xyz_rule_view")
328
328
  expect(page).to have_content("Rule type")
329
- expect(xrv.col_values(:name, 5, 0)).to eq(["ZRule1", "ZRule2",
330
- "ZRule3", "ZRule4",
331
- "ZRule5"])
329
+ expect(xrv.get_col_vals(:name, 5, 0)).to eq(["ZRule1", "ZRule2",
330
+ "ZRule3", "ZRule4",
331
+ "ZRule5"])
332
332
  xrv.select_row(1)
333
333
  press("Edit")
334
334
  fill_in("Range Guard 1", with: "[100,200)")
@@ -359,37 +359,37 @@ EOL
359
359
  "bv"=>"base_value"}}
360
360
 
361
361
  expect(r.first.as_json).to include(exp)
362
- expect(xrv.col_values(:g_string, 8, 0)).to eq(["aaa", "bbb", "ccc", "ddd",
363
- "eee", "eee", "eee", "eee"])
362
+ expect(xrv.get_col_vals(:g_string, 8, 0)).to eq(["aaa", "bbb", "ccc", "ddd",
363
+ "eee", "eee", "eee", "eee"])
364
364
  click_column(xrv, "String list Guard")
365
- expect(xrv.col_values(:g_string, 8, 0)).to eq(["eee", "eee", "eee", "eee",
366
- "ddd", "ccc", "bbb", "aaa"])
365
+ expect(xrv.get_col_vals(:g_string, 8, 0)).to eq(["eee", "eee", "eee", "eee",
366
+ "ddd", "ccc", "bbb", "aaa"])
367
367
  column_filter(xrv, "String list Guard", "eee")
368
368
  rc = xrv.row_count
369
- expect(xrv.col_values(:g_string,rc,0)).to eq(["eee", "eee", "eee", "eee"])
369
+ expect(xrv.get_col_vals(:g_string,rc,0)).to eq(["eee", "eee", "eee", "eee"])
370
370
  column_filter_toggle(xrv, "String list Guard")
371
371
  rc = xrv.row_count
372
- expect(xrv.col_values(:g_string,rc,0)).to eq(["eee", "eee", "eee", "eee",
373
- "ddd", "ccc", "bbb", "aaa"])
372
+ expect(xrv.get_col_vals(:g_string,rc,0)).to eq(["eee", "eee", "eee", "eee",
373
+ "ddd", "ccc", "bbb", "aaa"])
374
374
  column_filter(xrv, "Grids", "Grid1")
375
375
  rc = xrv.row_count
376
- # netzke reports jsonb as string
377
- expect(xrv.col_values(:grids,rc,0)).to eq([%Q({"grid1":"DataGrid1"}),
378
- %Q({"grid1":"DataGrid1"})])
376
+ # netzke reports jsonb as string
377
+ expect(xrv.get_col_vals(:grids,rc,0)).to eq([%Q({"grid1":"DataGrid1"}),
378
+ %Q({"grid1":"DataGrid1"})])
379
379
  column_filter_toggle(xrv, "Grids")
380
380
  rc = xrv.row_count
381
- expect(xrv.col_values(:grids,rc,0)).to eq([%Q({"grid1":"DataGrid3"}),
382
- %Q({"grid1":"DataGrid3"}),
383
- %Q({"grid1":"DataGrid3"}),
384
- %Q({"grid1":"DataGrid3"}),
385
- %Q({"grid1":"DataGrid3"}),
386
- %Q({"grid1":"DataGrid2"}),
387
- %Q({"grid1":"DataGrid1"}),
388
- %Q({"grid1":"DataGrid1"})])
381
+ expect(xrv.get_col_vals(:grids,rc,0)).to eq([%Q({"grid1":"DataGrid3"}),
382
+ %Q({"grid1":"DataGrid3"}),
383
+ %Q({"grid1":"DataGrid3"}),
384
+ %Q({"grid1":"DataGrid3"}),
385
+ %Q({"grid1":"DataGrid3"}),
386
+ %Q({"grid1":"DataGrid2"}),
387
+ %Q({"grid1":"DataGrid1"}),
388
+ %Q({"grid1":"DataGrid1"})])
389
389
  press("Applications")
390
390
  press("Data Grids")
391
391
  dgv = netzke_find("data_grid_view")
392
- cvs = dgv.col_values(:name, 4, 0)
392
+ cvs = dgv.get_col_vals(:name, 4, 0)
393
393
  ind1 = cvs.index("DataGrid1")+1
394
394
  ind4 = cvs.index("DataGrid4")+1
395
395
  dgv.select_row(ind1)
@@ -406,8 +406,8 @@ EOL
406
406
  go_to_xyz_rules
407
407
  wait_for_ajax
408
408
 
409
- names = xrv.col_values(:name, 5, 0)
410
- gvs = xrv.col_values(:grids, 5, 0)
409
+ names = xrv.get_col_vals(:name, 5, 0)
410
+ gvs = xrv.get_col_vals(:grids, 5, 0)
411
411
  g1h = {"grid1"=>"DataGrid1 new"}
412
412
  expect(JSON.parse(gvs[names.index("ZRule1")])).to eq(g1h)
413
413
  expect(JSON.parse(gvs[names.index("ZRule2")])).to eq(g1h)
@@ -415,14 +415,14 @@ EOL
415
415
  go_to_my_rules
416
416
  wait_for_ajax
417
417
 
418
- names = mrv.col_values(:name, 9, 0)
419
- gvs = mrv.col_values(:grids, 9, 0)
420
- rvs = mrv.col_values(:results, 9, 0)
418
+ names = mrv.get_col_vals(:name, 9, 0)
419
+ gvs = mrv.get_col_vals(:grids, 9, 0)
420
+ rvs = mrv.get_col_vals(:results, 9, 0)
421
421
  expect(JSON.parse(gvs[names.index('abc')])).to eq(g1h)
422
422
  expect(JSON.parse(gvs[names.index('Rule2b')])).to eq(g1h +
423
423
  {"grid2"=>"DataGrid2"})
424
424
  expect(JSON.parse(rvs[names.index('Rule5')])["other_grid"]).to eq(
425
- '"DataGrid4 new"')
425
+ '"DataGrid4 new"')
426
426
 
427
427
  end
428
428
  end
@@ -33,6 +33,8 @@ feature 'under Sytem menu, User Management worflows', js: true do
33
33
 
34
34
  it 'marty user can add/edit but not delete users' do
35
35
  log_in_as('marty')
36
+ wait_for_ajax
37
+
36
38
  go_to_user_view
37
39
 
38
40
  user_view = netzke_find('user_view')
@@ -68,7 +68,7 @@ module Marty
68
68
 
69
69
  # Needed here because shutting transactional fixtures off
70
70
  # means we lose the globally set user
71
- Mcfly.whodunnit = UserHelpers.system_user
71
+ Mcfly.whodunnit = system_user
72
72
 
73
73
  Marty::Script.load_script_bodies(promise_bodies, Date.today)
74
74
  start_delayed_job
@@ -12,7 +12,7 @@ describe Marty::Event do
12
12
 
13
13
  # Needed here because shutting transactional fixtures off
14
14
  # means we lose the globally set user
15
- Mcfly.whodunnit = UserHelpers.system_user
15
+ Mcfly.whodunnit = system_user
16
16
 
17
17
  Marty::Script.load_script_bodies(promise_bodies, Date.today)
18
18
  start_delayed_job
@@ -10,7 +10,7 @@ describe Marty::Promise, slow: true do
10
10
 
11
11
  # Needed here because shutting transactional fixtures off
12
12
  # means we lose the globally set user
13
- Mcfly.whodunnit = UserHelpers.system_user
13
+ Mcfly.whodunnit = system_user
14
14
 
15
15
  Marty::Script.load_script_bodies(promise_bodies, Date.today)
16
16
 
@@ -4,11 +4,11 @@ module Marty
4
4
  describe User do
5
5
  before(:each) do
6
6
  Rails.configuration.marty.system_account =
7
- UserHelpers.system_user.login
7
+ system_user.login
8
8
  end
9
9
 
10
10
  let (:tuser) {
11
- UserHelpers.create_user('other_user')
11
+ create_user('other_user')
12
12
  }
13
13
 
14
14
  describe "validations" do
@@ -22,7 +22,7 @@ module Marty
22
22
 
23
23
  it "should require unique login" do
24
24
  expect(Mcfly.whodunnit).to_not be_nil
25
- user = UserHelpers.system_user.dup
25
+ user = system_user.dup
26
26
  expect(user).to_not be_valid
27
27
  expect(user.errors[:login].to_s).to include('already been taken')
28
28
  user.login = 'marty2'
@@ -30,7 +30,7 @@ module Marty
30
30
  end
31
31
 
32
32
  it "should not allow Gemini account to be de-activated" do
33
- user = UserHelpers.system_user
33
+ user = system_user
34
34
  user.active = false
35
35
  expect(user).to_not be_valid
36
36
  expect(user.errors[:base].to_s).
@@ -38,14 +38,14 @@ module Marty
38
38
  end
39
39
 
40
40
  it "should not allow accounts to be deleted" do
41
- user = UserHelpers.system_user
41
+ user = system_user
42
42
  user.destroy
43
43
  expect(user.destroyed?).to be false
44
44
  end
45
45
 
46
46
  it "should not allow user managers to edit the Gemini account" do
47
47
  Mcfly.whodunnit = tuser
48
- user = UserHelpers.system_user
48
+ user = system_user
49
49
  allow_any_instance_of(Marty::User).to receive(:user_manager_only).
50
50
  and_return(true)
51
51
  user.firstname = 'Testing'
@@ -3,67 +3,22 @@ ENV["RAILS_ENV"] ||= "test"
3
3
  require 'dummy/config/application'
4
4
  require 'rspec/rails'
5
5
  require 'database_cleaner'
6
- require 'marty_rspec'
6
+
7
+ support = Pathname.new(__FILE__).parent.to_s + '/support'
8
+ require "#{support}/suite"
9
+ require "#{support}/shared_connection"
7
10
 
8
11
  Dummy::Application.initialize! unless Dummy::Application.initialized?
9
12
 
10
13
  ActiveRecord::Migrator.migrate File.expand_path("../../db/migrate/", __FILE__)
11
14
  ActiveRecord::Migrator.migrate File.expand_path("../dummy/db/migrate/", __FILE__)
12
15
 
13
- Dir[Rails.root.join("../support/**/*.rb")].each { |f| require f }
14
-
15
- def register_chrome_driver driver = :chrome, options={}
16
- Capybara.register_driver driver do |app|
17
- caps = Selenium::WebDriver::Remote::Capabilities.
18
- chrome(options + {pageLoadStrategy: 'none'})
19
-
20
- Capybara::Selenium::Driver.new(app,
21
- browser: :chrome,
22
- desired_capabilities: caps)
23
- end
24
- end
25
-
26
- CLASSES_TO_EXCLUDE_FROM_SHARED = ["Marty::Log"]
27
- class ActiveRecord::Base
28
- mattr_accessor :shared_connection
29
- class << self
30
- alias_method :orig_connection, :connection
31
- end
32
- def self.clear_connection
33
- @@shared_connection = nil
34
- end
35
-
36
- clear_connection
37
-
38
- def self.connection
39
- CLASSES_TO_EXCLUDE_FROM_SHARED.include?(model_name) ? orig_connection :
40
- @@shared_connection ||
41
- ConnectionPool::Wrapper.new(:size => 1) {retrieve_connection}
42
- end
43
-
44
- def self.reset_shared_connection
45
- @@shared_connection = ConnectionPool::Wrapper.
46
- new(:size => 1) {retrieve_connection}
47
- end
48
- end
49
-
50
- register_chrome_driver(:chrome, chromeOptions: { args: %w[start-maximized]})
51
- register_chrome_driver(:headless,
52
- chromeOptions: {
53
- args: %w[headless disable-gpu window-size=3840,2160]
54
- })
55
-
56
- Capybara.javascript_driver = ENV['HEADLESS'] == 'true' ? :headless : :chrome
57
-
58
- ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection
59
-
60
16
  RSpec.configure do |config|
61
- config.include DelayedJobHelpers
62
- config.include CleanDbHelpers
63
- config.include SpecSetup
64
- config.include Marty::IntegrationHelpers
65
- config.include MartyRSpec::Util
17
+ config.include Marty::RSpec::Suite
18
+ config.include Marty::RSpec::SharedConnection
19
+ config.include Marty::RSpec::SharedConnectionDbHelpers
66
20
 
21
+ #RspecMarty::SharedConnection.classes_to_exclude_shared = ['Marty::Log']
67
22
  Capybara.default_max_wait_time = 3
68
23
 
69
24
  # TODO: Continue to remove should syntax from specs - remove this line to see
@@ -83,7 +38,7 @@ RSpec.configure do |config|
83
38
  end
84
39
 
85
40
  config.before(:each) do
86
- Mcfly.whodunnit = UserHelpers.system_user
41
+ marty_whodunnit
87
42
  end
88
43
 
89
44
  config.after(:each, :js => true) do |example|
@@ -102,19 +57,4 @@ RSpec.configure do |config|
102
57
  config.use_transactional_fixtures = true
103
58
 
104
59
  Netzke::Testing.rspec_init(config)
105
-
106
- # FIXME: temporary monkey patch to fix marty_rspec for new extjs/rails
107
- module MartyRSpec
108
- module Components
109
- class NetzkeGrid
110
- def get_row_vals row
111
- res = run_js <<-JS
112
- #{ext_var(grid, 'grid')}
113
- return Ext.encode(#{ext_row(row.to_i - 1, 'grid')}.data);
114
- JS
115
- JSON.parse(res)
116
- end
117
- end
118
- end
119
- end
120
60
  end
@@ -0,0 +1,41 @@
1
+ require 'selenium-webdriver'
2
+ require Pathname.new(__FILE__).parent.to_s + '/download_helper'
3
+
4
+ module Marty; module RSpec; module Chromedriver
5
+ def self.register_chrome_driver driver= :chrome, opts={}
6
+ Capybara.register_driver driver do |app|
7
+ copts = {
8
+ chromeOptions: opts.deep_merge(
9
+ prefs: {'download.default_directory' =>
10
+ Marty::RSpec::DownloadHelper::PATH.to_s}),
11
+ pageLoadStrategy: 'none',
12
+ }
13
+ caps = Selenium::WebDriver::Remote::Capabilities.chrome(copts)
14
+ driver = Capybara::Selenium::Driver.new(app,
15
+ browser: :chrome,
16
+ desired_capabilities: caps)
17
+ yield driver if block_given?
18
+ driver
19
+ end
20
+ end
21
+
22
+ register_chrome_driver
23
+
24
+ headless_args = %w[headless disable-gpu window-size=3840,2160]
25
+ register_chrome_driver(:headless_chrome, args: headless_args) do |driver|
26
+
27
+ # workaround to enable downloading with headless chrome
28
+ bridge = driver.browser.send(:bridge)
29
+ bridge.http.call(:post,
30
+ "/session/#{bridge.session_id}/chromium/send_command",
31
+ cmd: 'Page.setDownloadBehavior',
32
+ params: {
33
+ behavior: 'allow',
34
+ downloadPath: Marty::RSpec::DownloadHelper::PATH.to_s
35
+ })
36
+ end
37
+
38
+ Capybara.default_driver = :chrome
39
+ Capybara.javascript_driver = ENV['HEADLESS'] == 'true' ?
40
+ :headless_chrome : :chrome
41
+ end end end