marty 2.5.2 → 2.5.4
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 +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
|