marty 2.5.2 → 2.5.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +4 -0
- data/.rubocop.yml +7 -0
- data/.rubocop_todo.yml +11 -589
- data/Gemfile +9 -9
- data/Gemfile.lock +1 -1
- data/Rakefile +1 -3
- data/app/components/marty/api_auth_view.rb +3 -3
- data/app/components/marty/api_config_view.rb +8 -8
- data/app/components/marty/api_log_view.rb +16 -20
- data/app/components/marty/auth_app.rb +6 -6
- data/app/components/marty/base_rule_view.rb +27 -19
- data/app/components/marty/config_view.rb +12 -9
- data/app/components/marty/data_grid_view.rb +26 -26
- data/app/components/marty/delorean_rule_view.rb +0 -1
- data/app/components/marty/event_view.rb +27 -27
- data/app/components/marty/extras/layout.rb +26 -26
- data/app/components/marty/extras/misc.rb +2 -2
- data/app/components/marty/grid.rb +13 -13
- data/app/components/marty/grid_append_only.rb +0 -1
- data/app/components/marty/import_type_view.rb +13 -13
- data/app/components/marty/import_view.rb +17 -16
- data/app/components/marty/log_view.rb +16 -14
- data/app/components/marty/main_auth_app.rb +59 -59
- data/app/components/marty/main_auth_app/client/main_auth_app.js +3 -3
- data/app/components/marty/mcfly_grid_panel.rb +10 -10
- data/app/components/marty/new_posting_form.rb +11 -11
- data/app/components/marty/new_posting_window.rb +0 -1
- data/app/components/marty/posting_grid.rb +12 -13
- data/app/components/marty/promise_view.rb +6 -6
- data/app/components/marty/report_form.rb +50 -53
- data/app/components/marty/report_select.rb +27 -27
- data/app/components/marty/reporting.rb +4 -4
- data/app/components/marty/script_form.rb +40 -42
- data/app/components/marty/script_grid.rb +24 -24
- data/app/components/marty/script_tester.rb +40 -42
- data/app/components/marty/scripting.rb +25 -27
- data/app/components/marty/simple_app.rb +24 -9
- data/app/components/marty/tag_grid.rb +12 -13
- data/app/components/marty/user_view.rb +35 -35
- data/app/controllers/marty/application_controller.rb +3 -4
- data/app/controllers/marty/components_controller.rb +1 -1
- data/app/controllers/marty/delayed_job_controller.rb +1 -0
- data/app/controllers/marty/diagnostic/controller.rb +4 -6
- data/app/controllers/marty/job_controller.rb +6 -6
- data/app/controllers/marty/report_controller.rb +11 -11
- data/app/controllers/marty/rpc_controller.rb +15 -16
- data/app/helpers/marty/script_set.rb +4 -4
- data/app/models/marty/api_auth.rb +4 -5
- data/app/models/marty/api_config.rb +1 -1
- data/app/models/marty/base.rb +9 -8
- data/app/models/marty/base_rule.rb +18 -13
- data/app/models/marty/config.rb +4 -5
- data/app/models/marty/data_grid.rb +157 -181
- data/app/models/marty/delorean_rule.rb +63 -62
- data/app/models/marty/enum.rb +1 -1
- data/app/models/marty/event.rb +56 -59
- data/app/models/marty/helper.rb +38 -6
- data/app/models/marty/import_type.rb +6 -6
- data/app/models/marty/log.rb +3 -2
- data/app/models/marty/name_validator.rb +3 -2
- data/app/models/marty/pg_enum.rb +3 -4
- data/app/models/marty/posting.rb +20 -24
- data/app/models/marty/promise.rb +28 -30
- data/app/models/marty/script.rb +30 -28
- data/app/models/marty/tag.rb +8 -8
- data/app/models/marty/token.rb +2 -2
- data/app/models/marty/user.rb +24 -23
- data/app/models/marty/vw_promise.rb +10 -11
- data/config/routes.rb +2 -2
- data/delorean/blame_report.dl +268 -0
- data/{spec/dummy/delorean/fields.dl → delorean/marty_fields.dl} +8 -0
- data/delorean/table_report.dl +34 -0
- data/docker-compose.dummy.yml +2 -3
- data/lib/marty/aws/base.rb +8 -8
- data/lib/marty/aws/request.rb +4 -4
- data/lib/marty/cache_adapters/mcfly_ruby_cache.rb +1 -0
- data/lib/marty/content_handler.rb +25 -25
- data/lib/marty/data_change.rb +49 -71
- data/lib/marty/data_conversion.rb +20 -28
- data/lib/marty/data_exporter.rb +25 -28
- data/lib/marty/data_importer.rb +25 -27
- data/lib/marty/engine.rb +1 -2
- data/lib/marty/json_schema.rb +22 -24
- data/lib/marty/logger.rb +6 -9
- data/lib/marty/mcfly_model.rb +20 -24
- data/lib/marty/migrations.rb +37 -35
- data/lib/marty/monkey.rb +33 -33
- data/lib/marty/permissions.rb +18 -18
- data/lib/marty/promise_job.rb +17 -17
- data/lib/marty/promise_proxy.rb +6 -6
- data/lib/marty/relation.rb +6 -7
- data/lib/marty/rpc_call.rb +13 -12
- data/lib/marty/rule_script_set.rb +32 -28
- data/lib/marty/schema_helper.rb +37 -51
- data/lib/marty/util.rb +25 -24
- data/lib/marty/version.rb +1 -1
- data/lib/marty/xl.rb +121 -115
- data/make-dummy.mk +3 -0
- data/marty.gemspec +21 -21
- data/other/marty/api/base.rb +34 -35
- data/other/marty/diagnostic/aws/ec2_instance.rb +8 -8
- data/other/marty/diagnostic/base.rb +13 -14
- data/other/marty/diagnostic/collection.rb +2 -1
- data/other/marty/diagnostic/connections.rb +8 -6
- data/other/marty/diagnostic/database.rb +1 -0
- data/other/marty/diagnostic/delayed_job_version.rb +7 -9
- data/other/marty/diagnostic/delayed_job_worker_total_count.rb +1 -1
- data/other/marty/diagnostic/delayed_job_workers.rb +1 -1
- data/other/marty/diagnostic/environment_variables.rb +17 -15
- data/other/marty/diagnostic/fatal.rb +1 -1
- data/other/marty/diagnostic/node.rb +5 -9
- data/other/marty/diagnostic/nodes.rb +7 -5
- data/other/marty/diagnostic/packer.rb +7 -7
- data/other/marty/diagnostic/reporter.rb +24 -27
- data/other/marty/diagnostic/version.rb +3 -5
- data/script/rails +2 -1
- data/spec/controllers/application_controller_spec.rb +6 -6
- data/spec/controllers/delayed_job_controller_spec.rb +4 -4
- data/spec/controllers/diagnostic/controller_spec.rb +59 -60
- data/spec/controllers/job_controller_spec.rb +68 -69
- data/spec/controllers/rpc_controller_spec.rb +353 -359
- data/spec/controllers/rpc_import_spec.rb +15 -16
- data/spec/dummy/delorean/blame_report.dl +110 -15
- data/spec/dummy/delorean/data_report.dl +4 -4
- data/spec/dummy/delorean/marty_fields.dl +63 -0
- data/spec/dummy/delorean/table_report.dl +34 -0
- data/spec/features/auth_app_spec.rb +1 -2
- data/spec/features/data_import_spec.rb +2 -3
- data/spec/features/enum_spec.rb +42 -46
- data/spec/features/jobs_dashboard_spec.rb +14 -8
- data/spec/features/log_view_spec.rb +40 -43
- data/spec/features/reporting_spec.rb +15 -15
- data/spec/features/rule_spec.rb +195 -190
- data/spec/features/scripting_spec.rb +17 -20
- data/spec/features/scripting_test_spec.rb +32 -33
- data/spec/features/user_view_spec.rb +15 -17
- data/spec/job_helper.rb +11 -11
- data/spec/lib/data_blame_spec.rb +82 -0
- data/spec/lib/data_exporter_spec.rb +31 -32
- data/spec/lib/data_importer_spec.rb +382 -395
- data/spec/lib/delorean_query_spec.rb +117 -119
- data/spec/lib/json_schema_spec.rb +382 -392
- data/spec/lib/logger_spec.rb +23 -24
- data/spec/lib/mcfly_model_spec.rb +112 -109
- data/spec/lib/migrations_spec.rb +10 -10
- data/spec/lib/struct_compare_spec.rb +6 -6
- data/spec/lib/table_report_spec.rb +90 -0
- data/spec/lib/xl_spec.rb +63 -65
- data/spec/lib/xl_styles_spec.rb +16 -19
- data/spec/models/api_auth_spec.rb +30 -30
- data/spec/models/config_spec.rb +32 -32
- data/spec/models/data_grid_spec.rb +642 -655
- data/spec/models/event_spec.rb +96 -88
- data/spec/models/import_type_spec.rb +20 -20
- data/spec/models/posting_spec.rb +35 -35
- data/spec/models/promise_spec.rb +5 -5
- data/spec/models/rule_spec.rb +280 -269
- data/spec/models/script_spec.rb +27 -18
- data/spec/models/user_spec.rb +9 -9
- data/spec/other/diagnostic/base_spec.rb +20 -19
- data/spec/other/diagnostic/collection_spec.rb +6 -5
- data/spec/other/diagnostic/delayed_job_version_spec.rb +1 -1
- data/spec/other/diagnostic/delayed_job_workers_spec.rb +8 -8
- data/spec/other/diagnostic/reporter_spec.rb +31 -33
- data/spec/spec_helper.rb +5 -5
- data/spec/support/chromedriver.rb +3 -5
- data/spec/support/components/netzke_combobox.rb +1 -1
- data/spec/support/components/netzke_grid.rb +17 -17
- data/spec/support/custom_matchers.rb +2 -2
- data/spec/support/download_helper.rb +1 -1
- data/spec/support/helper.rb +1 -2
- data/spec/support/netzke.rb +31 -31
- data/spec/support/performance_helper.rb +8 -8
- data/spec/support/post_run_logger.rb +1 -2
- data/spec/support/setup.rb +1 -4
- data/spec/support/shared_connection.rb +2 -2
- data/spec/support/structure_compare.rb +21 -22
- data/spec/support/suite.rb +1 -2
- data/spec/support/users.rb +5 -6
- metadata +32 -26
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
feature 'under Applications menu, Scripting workflows', js: true do
|
4
|
-
|
5
4
|
before(:all) do
|
6
5
|
self.use_transactional_tests = false
|
7
6
|
|
@@ -41,27 +40,26 @@ feature 'under Applications menu, Scripting workflows', js: true do
|
|
41
40
|
def populate_test_scripts
|
42
41
|
lastid = nil
|
43
42
|
|
44
|
-
with_user(
|
45
|
-
|
43
|
+
with_user('dev2') do
|
46
44
|
Marty::Script.
|
47
45
|
load_script_bodies({
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
46
|
+
'A1' => "#1\n",
|
47
|
+
'A2' => "#2\n",
|
48
|
+
'A3' => "#3\n",
|
49
|
+
'A4' => "#4\n",
|
50
|
+
'A5' => "#5\n",
|
53
51
|
}, Date.today)
|
54
52
|
|
55
53
|
# create 3 additional tags and modify A5 in the process
|
56
|
-
(1..3).each
|
57
|
-
body = Marty::Script.find_by(name:
|
54
|
+
(1..3).each do |i|
|
55
|
+
body = Marty::Script.find_by(name: 'A5').body
|
58
56
|
|
59
57
|
Marty::Script.
|
60
58
|
load_script_bodies({
|
61
|
-
|
59
|
+
'A5' => body + "##{i}\n"
|
62
60
|
}, Date.today + i.minute)
|
63
|
-
|
64
|
-
|
61
|
+
end
|
62
|
+
end
|
65
63
|
end
|
66
64
|
|
67
65
|
it 'adding scripts and tags & ensure proper validations' do
|
@@ -87,7 +85,7 @@ feature 'under Applications menu, Scripting workflows', js: true do
|
|
87
85
|
and_by 'select the new script' do
|
88
86
|
wait_for_ajax
|
89
87
|
within(:gridpanel, 'script_grid', match: :first) do
|
90
|
-
expect(script_grid.get_row_vals(6)).to netzke_include(
|
88
|
+
expect(script_grid.get_row_vals(6)).to netzke_include(:name => 'Xyz', :tag => 'DEV')
|
91
89
|
script_grid.select_row(6)
|
92
90
|
end
|
93
91
|
end
|
@@ -211,7 +209,6 @@ feature 'under Applications menu, Scripting workflows', js: true do
|
|
211
209
|
script_grid = netzke_find('script_grid')
|
212
210
|
tag_grid = netzke_find('tag_grid')
|
213
211
|
|
214
|
-
|
215
212
|
by 'select tag row 2' do
|
216
213
|
wait_for_ajax
|
217
214
|
tag_grid.select_row(2)
|
@@ -224,7 +221,7 @@ feature 'under Applications menu, Scripting workflows', js: true do
|
|
224
221
|
|
225
222
|
and_by 'form displays correct body' do
|
226
223
|
wait_for_ajax
|
227
|
-
expect(page).to have_content
|
224
|
+
expect(page).to have_content '1 #5 2 #1 3 #2 4 #3'
|
228
225
|
end
|
229
226
|
|
230
227
|
and_by 'select different tag' do
|
@@ -238,7 +235,7 @@ feature 'under Applications menu, Scripting workflows', js: true do
|
|
238
235
|
|
239
236
|
and_by 'form displays updated body' do
|
240
237
|
wait_for_ajax
|
241
|
-
expect(page).to have_content
|
238
|
+
expect(page).to have_content '1 #5 2 #1'
|
242
239
|
end
|
243
240
|
end
|
244
241
|
|
@@ -274,7 +271,7 @@ feature 'under Applications menu, Scripting workflows', js: true do
|
|
274
271
|
script_grid.select_row(1)
|
275
272
|
script_grid.select_row(5)
|
276
273
|
wait_for_ajax
|
277
|
-
expect(page).not_to have_content
|
274
|
+
expect(page).not_to have_content '1 #123 2 #456'
|
278
275
|
script_grid.select_row(1)
|
279
276
|
end
|
280
277
|
|
@@ -291,8 +288,8 @@ feature 'under Applications menu, Scripting workflows', js: true do
|
|
291
288
|
tag_grid.select_row(2)
|
292
289
|
wait_for_ajax
|
293
290
|
script_grid.select_row(5)
|
294
|
-
expect(page).to have_content
|
295
|
-
expect(tag_grid.get_row_vals(2)).to netzke_include(
|
291
|
+
expect(page).to have_content '1 #123 2 #456'
|
292
|
+
expect(tag_grid.get_row_vals(2)).to netzke_include(:comment => 'ABCD')
|
296
293
|
end
|
297
294
|
end
|
298
295
|
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
feature 'under Applications menu, Scripting (debug) workflows', js: true do
|
4
|
-
|
5
4
|
before(:all) do
|
6
5
|
@clean_file = "/tmp/clean_#{Process.pid}.psql"
|
7
6
|
save_clean_db(@clean_file)
|
@@ -46,18 +45,18 @@ C:
|
|
46
45
|
a = 456.0 + p0
|
47
46
|
DELOREAN
|
48
47
|
|
49
|
-
with_user(
|
48
|
+
with_user('dev1') do |u|
|
50
49
|
Marty::Script.
|
51
50
|
load_script_bodies({
|
52
|
-
|
53
|
-
|
51
|
+
'M1' => sample_script,
|
52
|
+
'M2' => sample_script.gsub(/a/, 'aa').gsub(/b/, 'bb'),
|
54
53
|
}, Date.today)
|
55
54
|
|
56
55
|
# add a DEV version of M1.
|
57
|
-
s = Marty::Script.find_by(obsoleted_dt: 'infinity', name:
|
58
|
-
s.body = sample_script.gsub(/A/,
|
56
|
+
s = Marty::Script.find_by(obsoleted_dt: 'infinity', name: 'M1')
|
57
|
+
s.body = sample_script.gsub(/A/, 'AA') + ' e =? "hello"'
|
59
58
|
s.save!
|
60
|
-
|
59
|
+
end
|
61
60
|
end
|
62
61
|
|
63
62
|
def populate_sample_scripts2
|
@@ -75,16 +74,16 @@ B: A
|
|
75
74
|
p =? 5
|
76
75
|
DELOREAN
|
77
76
|
|
78
|
-
with_user(
|
77
|
+
with_user('dev1') do |u|
|
79
78
|
Marty::Script.
|
80
79
|
load_script_bodies({
|
81
|
-
|
80
|
+
'M3' => sample_script2,
|
82
81
|
}, Date.today + 2.minute)
|
83
|
-
|
82
|
+
end
|
84
83
|
end
|
85
84
|
|
86
85
|
def tab_press tab_text
|
87
|
-
#we need a separate method for tab clicks
|
86
|
+
# we need a separate method for tab clicks
|
88
87
|
wait_for_element do
|
89
88
|
find_by_id(ext_button_id(tab_text), visible: :all).click
|
90
89
|
true
|
@@ -108,7 +107,7 @@ DELOREAN
|
|
108
107
|
and_by 'compute attrs with bad params' do
|
109
108
|
wait_for_ajax
|
110
109
|
wait_for_element do
|
111
|
-
fill_in('attrs', with:
|
110
|
+
fill_in('attrs', with: 'A.a; A.b; B.a; C.a')
|
112
111
|
true
|
113
112
|
end
|
114
113
|
fill_in('params', with: "a = 1.1\nc = 2.2")
|
@@ -135,7 +134,7 @@ DELOREAN
|
|
135
134
|
end
|
136
135
|
|
137
136
|
and_by 'compute new attrs & bad params (div by 0)' do
|
138
|
-
fill_in('attrs', with:
|
137
|
+
fill_in('attrs', with: 'B.e')
|
139
138
|
fill_in('params', with: "a = 0\n")
|
140
139
|
press('Compute')
|
141
140
|
end
|
@@ -160,8 +159,8 @@ DELOREAN
|
|
160
159
|
|
161
160
|
and_by 'compute attrs with empty params' do
|
162
161
|
wait_for_ajax
|
163
|
-
fill_in('attrs', with:
|
164
|
-
fill_in('params', with:
|
162
|
+
fill_in('attrs', with: 'A.a')
|
163
|
+
fill_in('params', with: '')
|
165
164
|
press('Compute')
|
166
165
|
end
|
167
166
|
|
@@ -172,7 +171,7 @@ DELOREAN
|
|
172
171
|
end
|
173
172
|
|
174
173
|
and_by 'compute attrs that without necessary params' do
|
175
|
-
fill_in('attrs', with:
|
174
|
+
fill_in('attrs', with: 'C.e')
|
176
175
|
press('Compute')
|
177
176
|
end
|
178
177
|
|
@@ -191,8 +190,8 @@ DELOREAN
|
|
191
190
|
|
192
191
|
and_by 'compute attrs with good params' do
|
193
192
|
wait_for_ajax
|
194
|
-
fill_in('attrs', with:
|
195
|
-
fill_in('params', with:
|
193
|
+
fill_in('attrs', with: 'B.aa')
|
194
|
+
fill_in('params', with: 'aa = 111')
|
196
195
|
press('Compute')
|
197
196
|
end
|
198
197
|
|
@@ -219,7 +218,7 @@ DELOREAN
|
|
219
218
|
and_by 'use bad attributes' do
|
220
219
|
wait_for_ajax
|
221
220
|
wait_for_element do
|
222
|
-
fill_in('attrs', with:
|
221
|
+
fill_in('attrs', with: 'A; y; >')
|
223
222
|
true
|
224
223
|
end
|
225
224
|
press('Compute')
|
@@ -233,7 +232,7 @@ DELOREAN
|
|
233
232
|
|
234
233
|
and_by 'use bad node' do
|
235
234
|
wait_for_ajax
|
236
|
-
fill_in('attrs', with:
|
235
|
+
fill_in('attrs', with: '>.<')
|
237
236
|
press('Compute')
|
238
237
|
end
|
239
238
|
|
@@ -245,7 +244,7 @@ DELOREAN
|
|
245
244
|
|
246
245
|
and_by 'use good attr' do
|
247
246
|
wait_for_ajax
|
248
|
-
fill_in('attrs', with:
|
247
|
+
fill_in('attrs', with: 'A.a')
|
249
248
|
press('Compute')
|
250
249
|
end
|
251
250
|
|
@@ -257,7 +256,7 @@ DELOREAN
|
|
257
256
|
|
258
257
|
and_by 'use undefined attr' do
|
259
258
|
wait_for_ajax
|
260
|
-
fill_in('attrs', with:
|
259
|
+
fill_in('attrs', with: 'A.new')
|
261
260
|
press('Compute')
|
262
261
|
end
|
263
262
|
|
@@ -284,7 +283,7 @@ DELOREAN
|
|
284
283
|
and_by 'use good attr' do
|
285
284
|
wait_for_ajax
|
286
285
|
wait_for_element do
|
287
|
-
fill_in('attrs', with:
|
286
|
+
fill_in('attrs', with: 'C.p; B.p')
|
288
287
|
true
|
289
288
|
end
|
290
289
|
press('Compute')
|
@@ -299,7 +298,7 @@ DELOREAN
|
|
299
298
|
|
300
299
|
and_by 'add a good param' do
|
301
300
|
wait_for_ajax
|
302
|
-
fill_in('params', with:
|
301
|
+
fill_in('params', with: 'p = 7')
|
303
302
|
press('Compute')
|
304
303
|
end
|
305
304
|
|
@@ -312,8 +311,8 @@ DELOREAN
|
|
312
311
|
|
313
312
|
and_by 'use good attr' do
|
314
313
|
wait_for_ajax
|
315
|
-
fill_in('attrs', with:
|
316
|
-
fill_in('params', with:
|
314
|
+
fill_in('attrs', with: 'C.pc; B.pc')
|
315
|
+
fill_in('params', with: '')
|
317
316
|
press('Compute')
|
318
317
|
end
|
319
318
|
|
@@ -324,11 +323,11 @@ DELOREAN
|
|
324
323
|
expect(result).to have_content 'B.pc = 9'
|
325
324
|
end
|
326
325
|
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
326
|
+
and_by 'use bad attr' do
|
327
|
+
wait_for_ajax
|
328
|
+
fill_in('attrs', with: 'C.pc; B.pc; A.pc;')
|
329
|
+
fill_in('params', with: '')
|
330
|
+
press('Compute')
|
332
331
|
end
|
333
332
|
|
334
333
|
and_by 'see error' do
|
@@ -339,8 +338,8 @@ DELOREAN
|
|
339
338
|
|
340
339
|
and_by 'use good attr & params' do
|
341
340
|
wait_for_ajax
|
342
|
-
fill_in('attrs', with:
|
343
|
-
fill_in('params', with:
|
341
|
+
fill_in('attrs', with: 'C.pc; B.pc')
|
342
|
+
fill_in('params', with: 'p = 123.0')
|
344
343
|
press('Compute')
|
345
344
|
end
|
346
345
|
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
feature 'under Sytem menu, User Management worflows', js: true do
|
4
|
-
|
5
4
|
def go_to_user_view
|
6
5
|
press('System')
|
7
6
|
press('User Management')
|
@@ -15,7 +14,7 @@ feature 'under Sytem menu, User Management worflows', js: true do
|
|
15
14
|
expect(page).not_to have_content 'User Management'
|
16
15
|
end
|
17
16
|
|
18
|
-
ensure_on(
|
17
|
+
ensure_on('/#userView')
|
19
18
|
end
|
20
19
|
|
21
20
|
# Checkbox Helpers
|
@@ -78,33 +77,32 @@ feature 'under Sytem menu, User Management worflows', js: true do
|
|
78
77
|
|
79
78
|
and_by 'check row got edited' do
|
80
79
|
wait_for_ajax
|
81
|
-
expect(user_view.get_row_vals(2)).to netzke_include(
|
82
|
-
:login=>
|
83
|
-
:firstname=>
|
84
|
-
:lastname=>
|
85
|
-
:active=>true,
|
86
|
-
:roles=>
|
87
|
-
|
80
|
+
expect(user_view.get_row_vals(2)).to netzke_include(
|
81
|
+
:login => 'new_login',
|
82
|
+
:firstname => 'new_fname',
|
83
|
+
:lastname => 'new_lname',
|
84
|
+
:active => true,
|
85
|
+
:roles => 'User Manager,Viewer',
|
86
|
+
)
|
88
87
|
end
|
89
88
|
|
90
89
|
and_by 'delete user fails' do
|
91
90
|
user_view.select_row(2)
|
92
|
-
press(
|
93
|
-
press(
|
94
|
-
expect(find(:msg)).to have_content(
|
91
|
+
press('Delete')
|
92
|
+
press('Yes')
|
93
|
+
expect(find(:msg)).to have_content('Users cannot be deleted - set ' +
|
95
94
|
"'Active' to false to disable the " +
|
96
|
-
|
95
|
+
'account')
|
97
96
|
user_view.select_row(1)
|
98
|
-
press(
|
99
|
-
press(
|
100
|
-
expect(find(:msg)).to have_content(
|
97
|
+
press('Delete')
|
98
|
+
press('Yes')
|
99
|
+
expect(find(:msg)).to have_content('You cannot delete your own account')
|
101
100
|
|
102
101
|
expect(user_view.row_count).to eq 2
|
103
102
|
end
|
104
103
|
end
|
105
104
|
|
106
105
|
describe 'check user permissions & what buttons appear' do
|
107
|
-
|
108
106
|
before(:all) do
|
109
107
|
populate_test_users
|
110
108
|
end
|
data/spec/job_helper.rb
CHANGED
@@ -4,7 +4,7 @@ class StringIO
|
|
4
4
|
end
|
5
5
|
end
|
6
6
|
|
7
|
-
NAME_A =
|
7
|
+
NAME_A = 'PromiseA2'
|
8
8
|
SCRIPT_A = <<EOS
|
9
9
|
Y:
|
10
10
|
q =? nil
|
@@ -18,7 +18,7 @@ Y:
|
|
18
18
|
f = Y(s=s) | ["d"]
|
19
19
|
EOS
|
20
20
|
|
21
|
-
NAME_B =
|
21
|
+
NAME_B = 'PromiseB'
|
22
22
|
SCRIPT_B = <<EOS
|
23
23
|
Y:
|
24
24
|
result = [{"a": i, "b": i*i} for i in [1,2,3]]
|
@@ -30,7 +30,7 @@ Z:
|
|
30
30
|
title = "Root#{NAME_B}"
|
31
31
|
EOS
|
32
32
|
|
33
|
-
NAME_C =
|
33
|
+
NAME_C = 'PromiseC'
|
34
34
|
SCRIPT_C = <<EOS
|
35
35
|
Y:
|
36
36
|
node =?
|
@@ -40,7 +40,7 @@ Z:
|
|
40
40
|
title = "#{NAME_C}"
|
41
41
|
EOS
|
42
42
|
|
43
|
-
NAME_D =
|
43
|
+
NAME_D = 'PromiseD'
|
44
44
|
SCRIPT_D = <<EOS
|
45
45
|
Y:
|
46
46
|
arg =?
|
@@ -52,7 +52,7 @@ Z:
|
|
52
52
|
title = "#{NAME_D}"
|
53
53
|
EOS
|
54
54
|
|
55
|
-
NAME_E =
|
55
|
+
NAME_E = 'PromiseE'
|
56
56
|
SCRIPT_E = <<EOS
|
57
57
|
X:
|
58
58
|
x = 'x'*10
|
@@ -60,14 +60,14 @@ Z:
|
|
60
60
|
result = [X() | "x" for i in [1,2,3,4,5,6]]
|
61
61
|
EOS
|
62
62
|
|
63
|
-
NAME_F =
|
63
|
+
NAME_F = 'PromiseF'
|
64
64
|
SCRIPT_F = <<EOS
|
65
65
|
import #{NAME_E}
|
66
66
|
Z:
|
67
67
|
result = #{NAME_E}::X() | "x"
|
68
68
|
EOS
|
69
69
|
|
70
|
-
NAME_G =
|
70
|
+
NAME_G = 'PromiseG'
|
71
71
|
SCRIPT_G = <<EOS
|
72
72
|
U:
|
73
73
|
result = [123]
|
@@ -79,7 +79,7 @@ V:
|
|
79
79
|
result = A(p_title="#{NAME_G}") | "result"
|
80
80
|
EOS
|
81
81
|
|
82
|
-
NAME_H =
|
82
|
+
NAME_H = 'PromiseH'
|
83
83
|
SCRIPT_H = <<EOS
|
84
84
|
Y:
|
85
85
|
q =? nil
|
@@ -87,21 +87,21 @@ Y:
|
|
87
87
|
d = [Y(q=i) | ['a'] for i in [1, 2]]
|
88
88
|
EOS
|
89
89
|
|
90
|
-
NAME_I =
|
90
|
+
NAME_I = 'PromiseI'
|
91
91
|
SCRIPT_I = <<EOS
|
92
92
|
SLEEPER:
|
93
93
|
secs =? nil
|
94
94
|
a = Gemini::Helper.sleep(secs) && secs
|
95
95
|
EOS
|
96
96
|
|
97
|
-
NAME_J =
|
97
|
+
NAME_J = 'PromiseJ'
|
98
98
|
SCRIPT_J = <<EOS
|
99
99
|
FAILER:
|
100
100
|
dummy =? nil
|
101
101
|
a = ERR('I had an error')
|
102
102
|
EOS
|
103
103
|
|
104
|
-
NAME_K =
|
104
|
+
NAME_K = 'PromiseK'
|
105
105
|
SCRIPT_K = <<EOS
|
106
106
|
LOGGER:
|
107
107
|
msgid =? nil
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Blame Report', slow: true do
|
4
|
+
U = 'marty marty'
|
5
|
+
BC = 'Conv Fixed 30'
|
6
|
+
|
7
|
+
before do
|
8
|
+
marty_whodunnit
|
9
|
+
|
10
|
+
Marty::Script.load_scripts(nil, Time.zone.now)
|
11
|
+
|
12
|
+
time1 = Time.zone.parse '2019-01-23 05:14:50 -0800'
|
13
|
+
time2 = Time.zone.parse '2019-01-24 05:14:50 -0800'
|
14
|
+
time3 = Time.zone.parse '2019-01-25 05:14:50 -0800'
|
15
|
+
time4 = Time.zone.parse '2019-01-26 05:14:50 -0800'
|
16
|
+
time5 = Time.zone.parse '2019-01-27 05:14:50 -0800'
|
17
|
+
|
18
|
+
posting = Marty::Posting.do_create('BASE', time3 - 2.hours, 'base posting')
|
19
|
+
@pt_name = Marty::Posting.find_by_name(posting.name).name
|
20
|
+
|
21
|
+
bc = Gemini::BudCategory.create(name: 'Conv Fixed 30', created_dt: time1)
|
22
|
+
bc2 = Gemini::BudCategory.create(name: 'Govt Fixed 30', created_dt: time1)
|
23
|
+
|
24
|
+
fannie_bup1 = Gemini::FannieBup.create(bud_category: bc,
|
25
|
+
note_rate: 2.250,
|
26
|
+
buy_up: 1.123,
|
27
|
+
buy_down: 2.345,
|
28
|
+
settlement_mm: 12,
|
29
|
+
settlement_yy: 2012,
|
30
|
+
created_dt: time1
|
31
|
+
)
|
32
|
+
|
33
|
+
fannie_bup2 = Gemini::FannieBup.create(bud_category: bc2,
|
34
|
+
note_rate: 2.250,
|
35
|
+
buy_up: 2.123,
|
36
|
+
buy_down: 3.345,
|
37
|
+
settlement_mm: 22,
|
38
|
+
settlement_yy: 2014,
|
39
|
+
created_dt: time4
|
40
|
+
)
|
41
|
+
|
42
|
+
fannie_bup2.destroy!
|
43
|
+
fannie_bup2.reload
|
44
|
+
o_dt = fannie_bup2.obsoleted_dt.to_s
|
45
|
+
|
46
|
+
fannie_bup1.update!(buy_up: 1.125, created_dt: time2)
|
47
|
+
fannie_bup1.update!(buy_up: 1.126, created_dt: time4)
|
48
|
+
fannie_bup1.update!(buy_up: 1.127, created_dt: time5)
|
49
|
+
|
50
|
+
@res0 = [
|
51
|
+
[time2.to_s, U, '', '', nil, BC, 2.25, 12, 2012, 1.125, 2.345],
|
52
|
+
[time4.to_s, U, '', '', nil, BC, 2.25, 12, 2012, 1.126, 2.345],
|
53
|
+
[time5.to_s, U, '', '', nil, BC, 2.25, 12, 2012, 1.127, 2.345],
|
54
|
+
[time4.to_s, U, o_dt, U, nil, 'Govt Fixed 30', 2.25, 22, 2014,
|
55
|
+
2.123, 3.345]
|
56
|
+
].freeze
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should generate Data Blame report' do
|
60
|
+
ws = Marty::Script.evaluate(
|
61
|
+
nil, 'BlameReport', 'DataBlameReport', 'result',
|
62
|
+
# "class_list" param, defaults to all
|
63
|
+
'pt_name1' => @pt_name,
|
64
|
+
'pt_name2' => 'NOW',
|
65
|
+
)
|
66
|
+
|
67
|
+
sp = Marty::Xl.spreadsheet(ws)
|
68
|
+
file = Tempfile.new('file.xlsx')
|
69
|
+
expect { sp.serialize(file) }.to_not raise_error
|
70
|
+
|
71
|
+
expect(sp.workbook.worksheets.map(&:name)).
|
72
|
+
to eq(['GeminiFannieBup'])
|
73
|
+
|
74
|
+
expect(sp.workbook.worksheets.count).to eq 1
|
75
|
+
expect(sp.workbook.worksheets[0].rows.count).to eq 5
|
76
|
+
|
77
|
+
@res0.each_with_index do |rec, i|
|
78
|
+
cells = sp.workbook.worksheets[0].rows[i + 1].cells.map(&:value)
|
79
|
+
expect(Set.new(cells[1..-1])).to eq Set.new(rec)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|