marty 2.5.2 → 2.5.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (181) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +4 -0
  3. data/.rubocop.yml +7 -0
  4. data/.rubocop_todo.yml +11 -589
  5. data/Gemfile +9 -9
  6. data/Gemfile.lock +1 -1
  7. data/Rakefile +1 -3
  8. data/app/components/marty/api_auth_view.rb +3 -3
  9. data/app/components/marty/api_config_view.rb +8 -8
  10. data/app/components/marty/api_log_view.rb +16 -20
  11. data/app/components/marty/auth_app.rb +6 -6
  12. data/app/components/marty/base_rule_view.rb +27 -19
  13. data/app/components/marty/config_view.rb +12 -9
  14. data/app/components/marty/data_grid_view.rb +26 -26
  15. data/app/components/marty/delorean_rule_view.rb +0 -1
  16. data/app/components/marty/event_view.rb +27 -27
  17. data/app/components/marty/extras/layout.rb +26 -26
  18. data/app/components/marty/extras/misc.rb +2 -2
  19. data/app/components/marty/grid.rb +13 -13
  20. data/app/components/marty/grid_append_only.rb +0 -1
  21. data/app/components/marty/import_type_view.rb +13 -13
  22. data/app/components/marty/import_view.rb +17 -16
  23. data/app/components/marty/log_view.rb +16 -14
  24. data/app/components/marty/main_auth_app.rb +59 -59
  25. data/app/components/marty/main_auth_app/client/main_auth_app.js +3 -3
  26. data/app/components/marty/mcfly_grid_panel.rb +10 -10
  27. data/app/components/marty/new_posting_form.rb +11 -11
  28. data/app/components/marty/new_posting_window.rb +0 -1
  29. data/app/components/marty/posting_grid.rb +12 -13
  30. data/app/components/marty/promise_view.rb +6 -6
  31. data/app/components/marty/report_form.rb +50 -53
  32. data/app/components/marty/report_select.rb +27 -27
  33. data/app/components/marty/reporting.rb +4 -4
  34. data/app/components/marty/script_form.rb +40 -42
  35. data/app/components/marty/script_grid.rb +24 -24
  36. data/app/components/marty/script_tester.rb +40 -42
  37. data/app/components/marty/scripting.rb +25 -27
  38. data/app/components/marty/simple_app.rb +24 -9
  39. data/app/components/marty/tag_grid.rb +12 -13
  40. data/app/components/marty/user_view.rb +35 -35
  41. data/app/controllers/marty/application_controller.rb +3 -4
  42. data/app/controllers/marty/components_controller.rb +1 -1
  43. data/app/controllers/marty/delayed_job_controller.rb +1 -0
  44. data/app/controllers/marty/diagnostic/controller.rb +4 -6
  45. data/app/controllers/marty/job_controller.rb +6 -6
  46. data/app/controllers/marty/report_controller.rb +11 -11
  47. data/app/controllers/marty/rpc_controller.rb +15 -16
  48. data/app/helpers/marty/script_set.rb +4 -4
  49. data/app/models/marty/api_auth.rb +4 -5
  50. data/app/models/marty/api_config.rb +1 -1
  51. data/app/models/marty/base.rb +9 -8
  52. data/app/models/marty/base_rule.rb +18 -13
  53. data/app/models/marty/config.rb +4 -5
  54. data/app/models/marty/data_grid.rb +157 -181
  55. data/app/models/marty/delorean_rule.rb +63 -62
  56. data/app/models/marty/enum.rb +1 -1
  57. data/app/models/marty/event.rb +56 -59
  58. data/app/models/marty/helper.rb +38 -6
  59. data/app/models/marty/import_type.rb +6 -6
  60. data/app/models/marty/log.rb +3 -2
  61. data/app/models/marty/name_validator.rb +3 -2
  62. data/app/models/marty/pg_enum.rb +3 -4
  63. data/app/models/marty/posting.rb +20 -24
  64. data/app/models/marty/promise.rb +28 -30
  65. data/app/models/marty/script.rb +30 -28
  66. data/app/models/marty/tag.rb +8 -8
  67. data/app/models/marty/token.rb +2 -2
  68. data/app/models/marty/user.rb +24 -23
  69. data/app/models/marty/vw_promise.rb +10 -11
  70. data/config/routes.rb +2 -2
  71. data/delorean/blame_report.dl +268 -0
  72. data/{spec/dummy/delorean/fields.dl → delorean/marty_fields.dl} +8 -0
  73. data/delorean/table_report.dl +34 -0
  74. data/docker-compose.dummy.yml +2 -3
  75. data/lib/marty/aws/base.rb +8 -8
  76. data/lib/marty/aws/request.rb +4 -4
  77. data/lib/marty/cache_adapters/mcfly_ruby_cache.rb +1 -0
  78. data/lib/marty/content_handler.rb +25 -25
  79. data/lib/marty/data_change.rb +49 -71
  80. data/lib/marty/data_conversion.rb +20 -28
  81. data/lib/marty/data_exporter.rb +25 -28
  82. data/lib/marty/data_importer.rb +25 -27
  83. data/lib/marty/engine.rb +1 -2
  84. data/lib/marty/json_schema.rb +22 -24
  85. data/lib/marty/logger.rb +6 -9
  86. data/lib/marty/mcfly_model.rb +20 -24
  87. data/lib/marty/migrations.rb +37 -35
  88. data/lib/marty/monkey.rb +33 -33
  89. data/lib/marty/permissions.rb +18 -18
  90. data/lib/marty/promise_job.rb +17 -17
  91. data/lib/marty/promise_proxy.rb +6 -6
  92. data/lib/marty/relation.rb +6 -7
  93. data/lib/marty/rpc_call.rb +13 -12
  94. data/lib/marty/rule_script_set.rb +32 -28
  95. data/lib/marty/schema_helper.rb +37 -51
  96. data/lib/marty/util.rb +25 -24
  97. data/lib/marty/version.rb +1 -1
  98. data/lib/marty/xl.rb +121 -115
  99. data/make-dummy.mk +3 -0
  100. data/marty.gemspec +21 -21
  101. data/other/marty/api/base.rb +34 -35
  102. data/other/marty/diagnostic/aws/ec2_instance.rb +8 -8
  103. data/other/marty/diagnostic/base.rb +13 -14
  104. data/other/marty/diagnostic/collection.rb +2 -1
  105. data/other/marty/diagnostic/connections.rb +8 -6
  106. data/other/marty/diagnostic/database.rb +1 -0
  107. data/other/marty/diagnostic/delayed_job_version.rb +7 -9
  108. data/other/marty/diagnostic/delayed_job_worker_total_count.rb +1 -1
  109. data/other/marty/diagnostic/delayed_job_workers.rb +1 -1
  110. data/other/marty/diagnostic/environment_variables.rb +17 -15
  111. data/other/marty/diagnostic/fatal.rb +1 -1
  112. data/other/marty/diagnostic/node.rb +5 -9
  113. data/other/marty/diagnostic/nodes.rb +7 -5
  114. data/other/marty/diagnostic/packer.rb +7 -7
  115. data/other/marty/diagnostic/reporter.rb +24 -27
  116. data/other/marty/diagnostic/version.rb +3 -5
  117. data/script/rails +2 -1
  118. data/spec/controllers/application_controller_spec.rb +6 -6
  119. data/spec/controllers/delayed_job_controller_spec.rb +4 -4
  120. data/spec/controllers/diagnostic/controller_spec.rb +59 -60
  121. data/spec/controllers/job_controller_spec.rb +68 -69
  122. data/spec/controllers/rpc_controller_spec.rb +353 -359
  123. data/spec/controllers/rpc_import_spec.rb +15 -16
  124. data/spec/dummy/delorean/blame_report.dl +110 -15
  125. data/spec/dummy/delorean/data_report.dl +4 -4
  126. data/spec/dummy/delorean/marty_fields.dl +63 -0
  127. data/spec/dummy/delorean/table_report.dl +34 -0
  128. data/spec/features/auth_app_spec.rb +1 -2
  129. data/spec/features/data_import_spec.rb +2 -3
  130. data/spec/features/enum_spec.rb +42 -46
  131. data/spec/features/jobs_dashboard_spec.rb +14 -8
  132. data/spec/features/log_view_spec.rb +40 -43
  133. data/spec/features/reporting_spec.rb +15 -15
  134. data/spec/features/rule_spec.rb +195 -190
  135. data/spec/features/scripting_spec.rb +17 -20
  136. data/spec/features/scripting_test_spec.rb +32 -33
  137. data/spec/features/user_view_spec.rb +15 -17
  138. data/spec/job_helper.rb +11 -11
  139. data/spec/lib/data_blame_spec.rb +82 -0
  140. data/spec/lib/data_exporter_spec.rb +31 -32
  141. data/spec/lib/data_importer_spec.rb +382 -395
  142. data/spec/lib/delorean_query_spec.rb +117 -119
  143. data/spec/lib/json_schema_spec.rb +382 -392
  144. data/spec/lib/logger_spec.rb +23 -24
  145. data/spec/lib/mcfly_model_spec.rb +112 -109
  146. data/spec/lib/migrations_spec.rb +10 -10
  147. data/spec/lib/struct_compare_spec.rb +6 -6
  148. data/spec/lib/table_report_spec.rb +90 -0
  149. data/spec/lib/xl_spec.rb +63 -65
  150. data/spec/lib/xl_styles_spec.rb +16 -19
  151. data/spec/models/api_auth_spec.rb +30 -30
  152. data/spec/models/config_spec.rb +32 -32
  153. data/spec/models/data_grid_spec.rb +642 -655
  154. data/spec/models/event_spec.rb +96 -88
  155. data/spec/models/import_type_spec.rb +20 -20
  156. data/spec/models/posting_spec.rb +35 -35
  157. data/spec/models/promise_spec.rb +5 -5
  158. data/spec/models/rule_spec.rb +280 -269
  159. data/spec/models/script_spec.rb +27 -18
  160. data/spec/models/user_spec.rb +9 -9
  161. data/spec/other/diagnostic/base_spec.rb +20 -19
  162. data/spec/other/diagnostic/collection_spec.rb +6 -5
  163. data/spec/other/diagnostic/delayed_job_version_spec.rb +1 -1
  164. data/spec/other/diagnostic/delayed_job_workers_spec.rb +8 -8
  165. data/spec/other/diagnostic/reporter_spec.rb +31 -33
  166. data/spec/spec_helper.rb +5 -5
  167. data/spec/support/chromedriver.rb +3 -5
  168. data/spec/support/components/netzke_combobox.rb +1 -1
  169. data/spec/support/components/netzke_grid.rb +17 -17
  170. data/spec/support/custom_matchers.rb +2 -2
  171. data/spec/support/download_helper.rb +1 -1
  172. data/spec/support/helper.rb +1 -2
  173. data/spec/support/netzke.rb +31 -31
  174. data/spec/support/performance_helper.rb +8 -8
  175. data/spec/support/post_run_logger.rb +1 -2
  176. data/spec/support/setup.rb +1 -4
  177. data/spec/support/shared_connection.rb +2 -2
  178. data/spec/support/structure_compare.rb +21 -22
  179. data/spec/support/suite.rb +1 -2
  180. data/spec/support/users.rb +5 -6
  181. 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("dev2") {
45
-
43
+ with_user('dev2') do
46
44
  Marty::Script.
47
45
  load_script_bodies({
48
- "A1" => "#1\n",
49
- "A2" => "#2\n",
50
- "A3" => "#3\n",
51
- "A4" => "#4\n",
52
- "A5" => "#5\n",
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 { |i|
57
- body = Marty::Script.find_by(name: "A5").body
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
- "A5" => body + "##{i}\n"
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({:name=>"Xyz", :tag=>"DEV"})
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 "1 #5 2 #1 3 #2 4 #3"
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 "1 #5 2 #1"
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 "1 #123 2 #456"
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 "1 #123 2 #456"
295
- expect(tag_grid.get_row_vals(2)).to netzke_include({:comment=>"ABCD"})
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("dev1") { |u|
48
+ with_user('dev1') do |u|
50
49
  Marty::Script.
51
50
  load_script_bodies({
52
- "M1" => sample_script,
53
- "M2" => sample_script.gsub(/a/, "aa").gsub(/b/, "bb"),
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: "M1")
58
- s.body = sample_script.gsub(/A/, "AA") + ' e =? "hello"'
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("dev1") { |u|
77
+ with_user('dev1') do |u|
79
78
  Marty::Script.
80
79
  load_script_bodies({
81
- "M3" => sample_script2,
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: "A.a; A.b; B.a; C.a")
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: "B.e")
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: "A.a")
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: "C.e")
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: "B.aa")
195
- fill_in('params', with: "aa = 111")
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: "A; y; >")
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: "A.a")
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: "A.new")
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: "C.p; B.p")
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: "p = 7")
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: "C.pc; B.pc")
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
- and_by 'use bad attr' do
328
- wait_for_ajax
329
- fill_in('attrs', with: "C.pc; B.pc; A.pc;")
330
- fill_in('params', with: "")
331
- press('Compute')
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: "C.pc; B.pc")
343
- fill_in('params', with: "p = 123.0")
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("/#userView")
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=>"new_login",
83
- :firstname=>"new_fname",
84
- :lastname=>"new_lname",
85
- :active=>true,
86
- :roles=>"User Manager,Viewer",
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("Delete")
93
- press("Yes")
94
- expect(find(:msg)).to have_content("Users cannot be deleted - set " +
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
- "account")
95
+ 'account')
97
96
  user_view.select_row(1)
98
- press("Delete")
99
- press("Yes")
100
- expect(find(:msg)).to have_content("You cannot delete your own account")
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
@@ -4,7 +4,7 @@ class StringIO
4
4
  end
5
5
  end
6
6
 
7
- NAME_A = "PromiseA2"
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 = "PromiseB"
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 = "PromiseC"
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 = "PromiseD"
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 = "PromiseE"
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 = "PromiseF"
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 = "PromiseG"
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 = "PromiseH"
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 = "PromiseI"
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 = "PromiseJ"
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 = "PromiseK"
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