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.
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