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
@@ -3,43 +3,42 @@ require 'spec_helper'
3
3
  describe Marty::RpcController do
4
4
  before(:each) { @routes = Marty::Engine.routes }
5
5
 
6
- before(:each) {
6
+ before(:each) do
7
7
  @tags = []
8
8
  @tags << Marty::Script.load_script_bodies({
9
- "A" => "A:\n a = 1\n",
10
- "B" => "B:\n b = 0\n",
9
+ 'A' => "A:\n a = 1\n",
10
+ 'B' => "B:\n b = 0\n",
11
11
  }, Date.today)
12
12
 
13
13
  @tags << Marty::Script.load_script_bodies({
14
- "B" => "import A\nB:\n b = A::A().a\n",
14
+ 'B' => "import A\nB:\n b = A::A().a\n",
15
15
  }, Date.today + 1.minute)
16
16
 
17
17
  @tags << Marty::Script.load_script_bodies({
18
- "A" => "A:\n a = 2\n",
18
+ 'A' => "A:\n a = 2\n",
19
19
  }, Date.today + 2.minute)
20
20
 
21
-
22
21
  # create an untagged version for DEV
23
- s = Marty::Script.find_by(obsoleted_dt: 'infinity', name: "A")
22
+ s = Marty::Script.find_by(obsoleted_dt: 'infinity', name: 'A')
24
23
  s.body = "A:\n a = 3\n"
25
24
  s.save!
26
- }
25
+ end
27
26
 
28
27
  let(:tags) { @tags }
29
28
 
30
- it "should properly import different versions of a script" do
29
+ it 'should properly import different versions of a script' do
31
30
  # try the test 3 times for fun
32
- (0..2).each {
33
- tags.each_with_index { |t, i|
31
+ (0..2).each do
32
+ tags.each_with_index do |t, i|
34
33
  get 'evaluate', params: {
35
34
  format: :json,
36
- script: "B",
37
- node: "B",
38
- attrs: "b",
35
+ script: 'B',
36
+ node: 'B',
37
+ attrs: 'b',
39
38
  tag: t.name,
40
39
  }
41
40
  response.body.should == i.to_json
42
- }
43
- }
41
+ end
42
+ end
44
43
  end
45
44
  end
@@ -1,10 +1,10 @@
1
- import Fields
1
+ import MartyFields
2
2
  import Styles
3
3
 
4
- PostingField2: Fields::PostingField2
5
- store = ["NOW"] + Marty::Posting.
6
- where("created_dt <> 'infinity'").
7
- order("created_dt DESC").limit(10).pluck("name")
4
+ PostingField2: MartyFields::PostingField2
5
+ store = [ ["NOW", "NOW"] ] + [ [ lp.name, lp.name + ' (' + lp.comment + ')']
6
+ for lp in Marty::Posting.get_latest_by_type(
7
+ 20, ['BASE', 'INTRA', 'CLOSE'])]
8
8
 
9
9
  StyleRow:
10
10
  profile =?
@@ -59,8 +59,9 @@ ModelRows:
59
59
  klass =?
60
60
  t1 =?
61
61
  t2 =?
62
+ ids =?
62
63
 
63
- groups = Marty::DataChange.changes(t1, t2, klass)
64
+ groups = Marty::DataChange.changes(t1, t2, klass, ids)
64
65
 
65
66
  headers = ["Group ID", "Created", "By", "Deleted", "By"] +
66
67
  Marty::DataChange.class_headers(klass)
@@ -83,6 +84,10 @@ ModelRows:
83
84
  count = row_groups.length
84
85
  ws = if count > 0 then [klass, rows] else nil
85
86
 
87
+ OptionalIDsField: MartyFields::TextField
88
+ field_label = "Group IDs (optional)"
89
+ name = "restrict_to_ids"
90
+
86
91
  DataBlameReport:
87
92
  title = "Data Blame Report"
88
93
 
@@ -95,16 +100,18 @@ DataBlameReport:
95
100
  t2 = posting2.created_dt
96
101
 
97
102
  class_list =? false
103
+ restrict_to_ids =? nil
98
104
 
99
105
  form = [
100
- Fields::PostingField1,
106
+ MartyFields::PostingField1,
101
107
  PostingField2,
102
- Fields::ClassListField,
108
+ MartyFields::ClassListField,
109
+ OptionalIDsField
103
110
  ]
104
111
 
105
- ts = if Gemini::Helper.infinity_dt(t1)
112
+ ts = if Marty::Helper.infinity_dt(t1)
106
113
  then [t2, t1]
107
- else if Gemini::Helper.infinity_dt(t2)
114
+ else if Marty::Helper.infinity_dt(t2)
108
115
  then [t1, t2]
109
116
  else [t1, t2].sort
110
117
 
@@ -112,8 +119,17 @@ DataBlameReport:
112
119
  then Marty::DataChange.sanitize_classes(class_list)
113
120
  else Marty::DataChange.class_list
114
121
 
115
- result = [
116
- ModelRows(t1 = ts[0], t2 = ts[1], klass = klass).ws
122
+ ids = if restrict_to_ids
123
+ then [ idstr.to_i for idstr in restrict_to_ids.split(',') ]
124
+ else nil
125
+
126
+ ids_check = if ids && ids.length > 0 && sanitized.length > 1
127
+ then ERR("Can't specify Group IDs if more than one class selected")
128
+ else true
129
+
130
+ result = ids_check && [
131
+ ModelRows(t1 = ts[0], t2 = ts[1], klass = klass,
132
+ ids = ids).ws
117
133
  for klass in sanitized
118
134
  ].compact
119
135
 
@@ -143,7 +159,7 @@ DataBlameReportSummary:
143
159
  t2 = posting2.created_dt
144
160
 
145
161
  form = [
146
- Fields::PostingField1,
162
+ MartyFields::PostingField1,
147
163
  PostingField2,
148
164
  ]
149
165
 
@@ -157,9 +173,9 @@ DataBlameReportSummary:
157
173
  Styles::Style.m_hdr_style0,
158
174
  ]
159
175
 
160
- ts = if Gemini::Helper.infinity_dt(t1)
176
+ ts = if Marty::Helper.infinity_dt(t1)
161
177
  then [t2, t1]
162
- else if Gemini::Helper.infinity_dt(t2)
178
+ else if Marty::Helper.infinity_dt(t2)
163
179
  then [t1, t2]
164
180
  else [t1, t2].sort
165
181
 
@@ -171,3 +187,82 @@ DataBlameReportSummary:
171
187
  header = [["row", r, {"style" : [Styles::Style.s_hdr]}] for r in postings]
172
188
  result = [[title,[hrow] + rows, {"widths" : [30]}], ["Parameters", header]]
173
189
  format = "xlsx"
190
+
191
+ DeadReferenceReport:
192
+ title = "Dead Reference Report"
193
+
194
+ class_list =? false
195
+ pt_name =?
196
+ posting =? Marty::Posting.lookup(pt_name)
197
+
198
+ sanitized = if class_list
199
+ then Marty::DataChange.sanitize_classes(class_list)
200
+ else Marty::DataChange.class_list
201
+
202
+ form = [
203
+ MartyFields::PostingField,
204
+ MartyFields::ClassListField,
205
+ ]
206
+
207
+ result = [
208
+ [[[klass, attr, obj].flatten for obj in list]
209
+ for attr, list in Marty::DataChange.dead_refs(posting.created_dt,
210
+ klass)].flatten(1)
211
+ for klass in sanitized
212
+ ].flatten(1)
213
+
214
+ format = "csv"
215
+
216
+ ######################################################################
217
+
218
+ DataImportParam:
219
+ field_label = "Input Rows"
220
+ name = "data_import_field"
221
+ xtype = ":textareafield"
222
+ scrollable = true
223
+ field_style = {
224
+ "font_family": 'courier new',
225
+ "font_size": '12px',
226
+ }
227
+ height = 600
228
+
229
+ CommaSepField: MartyFields::CheckboxField
230
+ name = "comma_sep"
231
+ field_label = "Comma Separated"
232
+
233
+ DiffReport:
234
+ title = "Diff Report"
235
+
236
+ class_name =? false
237
+ data_import_field =?
238
+ comma_sep =? false
239
+
240
+ klass = Marty::Helper.constantize(class_name)
241
+
242
+ col_types = Marty::Helper.get_column_types(klass)
243
+ data = Marty::Helper.parse_csv_to_hash(
244
+ data_import_field, comma_sep, col_types)
245
+
246
+ diff = Marty::DataChange.diff(klass, data)
247
+
248
+ result = [{"title" : "different",
249
+ "format" : "csv",
250
+ "result" : diff["different"].flatten},
251
+ {"title" : "same",
252
+ "format" : "csv",
253
+ "result" : diff["same"]},
254
+ {"title" : "only_input",
255
+ "format" : "csv",
256
+ "result" : diff["only_input"]},
257
+ {"title" : "only_source",
258
+ "format" : "csv",
259
+ "result" : diff["only_source"]},
260
+ ]
261
+
262
+ form = [
263
+ MartyFields::ClassField,
264
+ DataImportParam,
265
+ CommaSepField,
266
+ ]
267
+
268
+ format = "zip"
@@ -1,4 +1,4 @@
1
- import Fields
1
+ import MartyFields
2
2
  import Styles
3
3
 
4
4
  ######################################################################
@@ -23,8 +23,8 @@ TableReport:
23
23
  row_count = result_raw.length
24
24
  result = Gemini::Helper.to_csv(result_raw)
25
25
  form = [
26
- Fields::PostingField,
27
- Fields::ClassField,
26
+ MartyFields::PostingField,
27
+ MartyFields::ClassField,
28
28
  ]
29
29
  format = "csv"
30
30
 
@@ -61,7 +61,7 @@ EnumReport:
61
61
 
62
62
  #####################################################################
63
63
 
64
- DataImportParam: Fields::CsvField
64
+ DataImportParam: MartyFields::CsvField
65
65
  field_label = "Import Text"
66
66
  name = "data_import_field"
67
67
  height = 600
@@ -0,0 +1,63 @@
1
+ PostingField:
2
+ field_label = "Posting"
3
+ xtype = ":combo"
4
+ name = "pt_name"
5
+ store = Marty::Posting.
6
+ where("created_dt <> 'infinity'").
7
+ order("created_dt DESC").limit(10).pluck("name")
8
+ value = store[0]
9
+
10
+ ######################################################################
11
+
12
+ PostingField1: PostingField
13
+ field_label = "Posting 1"
14
+ name = "pt_name1"
15
+
16
+ PostingField2: PostingField
17
+ field_label = "Posting 2"
18
+ name = "pt_name2"
19
+
20
+ ######################################################################
21
+
22
+ ClassListField:
23
+ field_label = "Tables"
24
+ xtype = ":multiselectcombo"
25
+ name = "class_list"
26
+ store = Marty::DataChange.class_list
27
+
28
+ ClassField: ClassListField
29
+ xtype = ":combo"
30
+ name = "class_name"
31
+ store = Marty::DataChange.class_list
32
+
33
+ ######################################################################
34
+
35
+
36
+ CheckboxField:
37
+ xtype = ":checkboxfield"
38
+ checked = false
39
+ input_value = true
40
+ unchecked_value = false
41
+
42
+ ######################################################################
43
+
44
+ JsonField:
45
+ xtype = ":textareafield"
46
+ name = "json_field"
47
+ field_label = "JSON"
48
+ auto_scroll = true
49
+ spellcheck = false
50
+ field_style = {
51
+ "font_family": 'courier new',
52
+ "font_size": '12px'
53
+ }
54
+ height = 400
55
+
56
+ CsvField: JsonField
57
+ field_label = "CSV"
58
+ name = "csv_field"
59
+
60
+ TextField:
61
+ xtype = ":textfield"
62
+ field_label = "Text"
63
+ name = "text_field"
@@ -0,0 +1,34 @@
1
+ import MartyFields
2
+ import Styles
3
+
4
+ ReadableField: MartyFields::CheckboxField
5
+ name = "readable"
6
+ field_label = "Disable Encoding"
7
+
8
+ TableReport:
9
+ readable =? nil
10
+ pt_name =? nil
11
+ posting = Marty::Posting.lookup(pt_name)
12
+ pt = posting.created_dt
13
+ module_name =? nil
14
+ class_name =? nil
15
+ title =? (class_name || "Table Report") + (
16
+ if pt_name then "_" + pt_name else "")
17
+ sort_field =? nil
18
+ exclude_attrs =? nil
19
+
20
+ result_raw = Marty::DataChange.do_export(
21
+ pt,
22
+ if module_name then module_name + '::' + class_name else class_name,
23
+ sort_field,
24
+ exclude_attrs || [],
25
+ )
26
+ row_count = result_raw.length
27
+ result = Marty::Helper.to_csv(result_raw, {'readable' : readable})
28
+ form = [
29
+ MartyFields::PostingField,
30
+ MartyFields::ClassField,
31
+ ReadableField,
32
+ ]
33
+ format = "csv"
34
+
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  feature 'Posting 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)
@@ -56,7 +55,7 @@ feature 'Posting workflows', js: true do
56
55
  end
57
56
 
58
57
  and_by 'can see that we are time warped' do
59
- expect(page).to have_content "TIME WARPED"
58
+ expect(page).to have_content 'TIME WARPED'
60
59
  end
61
60
  end
62
61
 
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  feature 'under Applications menu, Reports using Data Import', js: true do
4
-
5
4
  before(:all) do
6
5
  marty_whodunnit
7
6
  @clean_file = "/tmp/clean_#{Process.pid}.psql"
@@ -67,7 +66,7 @@ feature 'under Applications menu, Reports using Data Import', js: true do
67
66
  and_by 'select Data Import node' do
68
67
  wait_for_ajax
69
68
 
70
- #hacky: assumes only 1 combobox without label
69
+ # hacky: assumes only 1 combobox without label
71
70
  within(:gridpanel, 'report_select', match: :first, wait: 5) do
72
71
  # hacky, hardcoding netzkecombobox dropdown arrow name
73
72
  arrow = find(:input, 'nodename')['data-componentid'] + '-trigger-picker'
@@ -136,7 +135,7 @@ feature 'under Applications menu, Reports using Data Import', js: true do
136
135
  and_by 'select Data Import node' do
137
136
  wait_for_ajax
138
137
 
139
- #hacky: assumes only 1 combobox without label
138
+ # hacky: assumes only 1 combobox without label
140
139
  within(:gridpanel, 'report_select', match: :first) do
141
140
  # hacky, hardcoding netzkecombobox dropdown arrow name
142
141
  arrow = find(:input, 'nodename')['data-componentid'] + '-trigger-picker'
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  feature 'test netzke + pg_enum compatibility', 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)
@@ -14,7 +13,6 @@ feature 'test netzke + pg_enum compatibility', js: true do
14
13
  end
15
14
 
16
15
  it 'shows netzke grid combobox works w pg_enums' do
17
-
18
16
  lp_grid = netzke_find('loan_program_view')
19
17
  @amort_combo = netzke_find('amortization_type__name', 'combobox')
20
18
  @mortgage_combo = netzke_find('mortgage_type__name', 'combobox')
@@ -42,14 +40,13 @@ feature 'test netzke + pg_enum compatibility', js: true do
42
40
  press('Loan Programs')
43
41
  end
44
42
 
45
-
46
43
  and_by 'bring up new window' do
47
44
  press('Add')
48
45
  end
49
46
 
50
47
  and_by 'fill form minus enum value' do
51
48
  within(:gridpanel, 'add_window', match: :first) do
52
- fill_in("Name", with: 'a_l_p')
49
+ fill_in('Name', with: 'a_l_p')
53
50
 
54
51
  @amort_combo.click
55
52
  @amort_combo.select_values('Fixed')
@@ -73,20 +70,20 @@ feature 'test netzke + pg_enum compatibility', js: true do
73
70
 
74
71
  and_by 'fill form w enum value & duplicated name (error), then fix' do
75
72
  within(:gridpanel, 'add_window', match: :first) do
76
- fill_in("Name", with: 'a_l_p')
77
- setup_enum_form("CA")
73
+ fill_in('Name', with: 'a_l_p')
74
+ setup_enum_form('CA')
78
75
  press('OK')
79
76
 
80
77
  expect(find(:msg)).to have_content 'Name - record must be unique'
81
78
 
82
- fill_in("Name", with: 'a_l_p_2')
79
+ fill_in('Name', with: 'a_l_p_2')
83
80
  press('OK')
84
81
  end
85
82
 
86
83
  wait_for_ajax
87
84
  aggregate_failures do
88
85
  expect(lp_grid.row_count).to eq(2)
89
- expect(lp_grid.get_row_vals(2)).to netzke_include({enum_state: 'CA'})
86
+ expect(lp_grid.get_row_vals(2)).to netzke_include(enum_state: 'CA')
90
87
  end
91
88
  end
92
89
 
@@ -104,15 +101,15 @@ feature 'test netzke + pg_enum compatibility', js: true do
104
101
 
105
102
  and_by 'fill form w --- for enum value' do
106
103
  within(:gridpanel, 'add_window', match: :first) do
107
- fill_in("Name", with: 'a_l_p')
108
- setup_enum_form("---")
104
+ fill_in('Name', with: 'a_l_p')
105
+ setup_enum_form('---')
109
106
  press('OK')
110
107
  end
111
108
 
112
109
  wait_for_ajax
113
110
  aggregate_failures do
114
111
  expect(lp_grid.row_count).to eq(2)
115
- expect(lp_grid.get_row_vals(1)).to netzke_include({enum_state: nil})
112
+ expect(lp_grid.get_row_vals(1)).to netzke_include(enum_state: nil)
116
113
  end
117
114
  end
118
115
 
@@ -128,63 +125,62 @@ feature 'test netzke + pg_enum compatibility', js: true do
128
125
  expect(lp_grid.row_count).to eq(0)
129
126
  end
130
127
 
131
- and_by "bring up new window" do
132
- press("Add")
128
+ and_by 'bring up new window' do
129
+ press('Add')
133
130
  end
134
131
 
135
- and_by "fill form with state_enum DC" do
136
- within(:gridpanel, "add_window", match: :first) do
137
- fill_in("Name", with: "DC Row")
138
- setup_enum_form("DC")
139
- press("OK")
132
+ and_by 'fill form with state_enum DC' do
133
+ within(:gridpanel, 'add_window', match: :first) do
134
+ fill_in('Name', with: 'DC Row')
135
+ setup_enum_form('DC')
136
+ press('OK')
140
137
  end
141
138
  end
142
139
 
143
- and_by "bring up new window" do
144
- press("Add")
140
+ and_by 'bring up new window' do
141
+ press('Add')
145
142
  end
146
143
 
147
- and_by "fill form with state_enum AS" do
148
- within(:gridpanel, "add_window", match: :first) do
149
- fill_in("Name", with: "AS Row")
150
- setup_enum_form("AS")
151
- press("OK")
144
+ and_by 'fill form with state_enum AS' do
145
+ within(:gridpanel, 'add_window', match: :first) do
146
+ fill_in('Name', with: 'AS Row')
147
+ setup_enum_form('AS')
148
+ press('OK')
152
149
  end
153
150
  end
154
151
 
155
- and_by "bring up new window" do
156
- press("Add")
152
+ and_by 'bring up new window' do
153
+ press('Add')
157
154
  end
158
155
 
159
- and_by "fill form with state_enum WA" do
160
- within(:gridpanel, "add_window", match: :first) do
161
- fill_in("Name", with: "WA Row")
162
- setup_enum_form("WA")
163
- press("OK")
156
+ and_by 'fill form with state_enum WA' do
157
+ within(:gridpanel, 'add_window', match: :first) do
158
+ fill_in('Name', with: 'WA Row')
159
+ setup_enum_form('WA')
160
+ press('OK')
164
161
  end
165
162
  end
166
163
 
167
- and_by "bring up new window" do
168
- press("Add")
164
+ and_by 'bring up new window' do
165
+ press('Add')
169
166
  end
170
167
 
171
- and_by "fill form with state_enum AZ" do
172
- within(:gridpanel, "add_window", match: :first) do
173
- fill_in("Name", with: "AZ Row")
174
- setup_enum_form("AZ")
175
- press("OK")
168
+ and_by 'fill form with state_enum AZ' do
169
+ within(:gridpanel, 'add_window', match: :first) do
170
+ fill_in('Name', with: 'AZ Row')
171
+ setup_enum_form('AZ')
172
+ press('OK')
176
173
  end
177
174
  end
178
175
 
179
- and_by "filter form by state_enum ASCENDING" do
180
- press("Enum state")
181
- expect(lp_grid.get_col_vals(:enum_state)).to eq(["AS","AZ","DC","WA"])
176
+ and_by 'filter form by state_enum ASCENDING' do
177
+ press('Enum state')
178
+ expect(lp_grid.get_col_vals(:enum_state)).to eq(['AS', 'AZ', 'DC', 'WA'])
182
179
  end
183
180
 
184
- and_by "filter form by state_enum DESCENDING" do
185
- press("Enum state")
186
- expect(lp_grid.get_col_vals(:enum_state)).to eq(["WA","DC","AZ","AS"])
181
+ and_by 'filter form by state_enum DESCENDING' do
182
+ press('Enum state')
183
+ expect(lp_grid.get_col_vals(:enum_state)).to eq(['WA', 'DC', 'AZ', 'AS'])
187
184
  end
188
-
189
185
  end
190
186
  end