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,22 +1,21 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  module Marty
4
-
5
- groupings =<<EOF
4
+ groupings = <<EOF
6
5
  name
7
6
  g1
8
7
  g2
9
8
  g3
10
9
  EOF
11
10
 
12
- heads =<<EOF
11
+ heads = <<EOF
13
12
  name condition_text
14
13
  h1 foo
15
14
  h2 bar
16
15
  h3 baz
17
16
  EOF
18
17
 
19
- head_versions =<<EOF
18
+ head_versions = <<EOF
20
19
  head__name version result_text
21
20
  h1 base x=1
22
21
  h1 600 x=2
@@ -24,7 +23,7 @@ h2 base y=z
24
23
  h3 base z=4
25
24
  EOF
26
25
 
27
- grouping_head_versions =<<EOF
26
+ grouping_head_versions = <<EOF
28
27
  grouping__name head_version__head head_version__version
29
28
  g1 h1 base
30
29
  g1 h1 600
@@ -32,39 +31,39 @@ g2 h2 base
32
31
  g3 h3 base
33
32
  EOF
34
33
 
35
- describe DataExporter do
36
- it "be able to import and export nested keys" do
37
- res = Marty::DataImporter.do_import_summary(Gemini::Grouping, groupings)
38
- expect(res).to eq({create: 3})
39
- Gemini::Grouping.count.should == 3
34
+ describe DataExporter do
35
+ it 'be able to import and export nested keys' do
36
+ res = Marty::DataImporter.do_import_summary(Gemini::Grouping, groupings)
37
+ expect(res).to eq(create: 3)
38
+ Gemini::Grouping.count.should == 3
40
39
 
41
- res = Marty::DataImporter.do_import_summary(Gemini::Head, heads)
42
- expect(res).to eq({create: 3})
43
- Gemini::Head.count.should == 3
40
+ res = Marty::DataImporter.do_import_summary(Gemini::Head, heads)
41
+ expect(res).to eq(create: 3)
42
+ Gemini::Head.count.should == 3
44
43
 
45
- res = Marty::DataImporter.do_import_summary(Gemini::HeadVersion, head_versions)
46
- expect(res).to eq({create: 4})
47
- Gemini::HeadVersion.count.should == 4
44
+ res = Marty::DataImporter.do_import_summary(Gemini::HeadVersion, head_versions)
45
+ expect(res).to eq(create: 4)
46
+ Gemini::HeadVersion.count.should == 4
48
47
 
49
- res = Marty::DataImporter.do_import_summary(Gemini::GroupingHeadVersion, grouping_head_versions)
50
- expect(res).to eq({create: 4})
51
- Gemini::GroupingHeadVersion.count.should == 4
48
+ res = Marty::DataImporter.do_import_summary(Gemini::GroupingHeadVersion, grouping_head_versions)
49
+ expect(res).to eq(create: 4)
50
+ Gemini::GroupingHeadVersion.count.should == 4
52
51
 
53
- res = Marty::DataExporter.do_export('infinity', Gemini::GroupingHeadVersion)
52
+ res = Marty::DataExporter.do_export('infinity', Gemini::GroupingHeadVersion)
54
53
 
55
- expect(res).to eq [
56
- ["grouping", "head_version__head", "head_version__version"],
57
- ["g1", "h1", "base"],
58
- ["g1", "h1", "600"],
59
- ["g2", "h2", "base"],
60
- ["g3", "h3", "base"]
61
- ]
54
+ expect(res).to eq [
55
+ ['grouping', 'head_version__head', 'head_version__version'],
56
+ ['g1', 'h1', 'base'],
57
+ ['g1', 'h1', '600'],
58
+ ['g2', 'h2', 'base'],
59
+ ['g3', 'h3', 'base']
60
+ ]
62
61
 
63
- csv = Marty::DataExporter.to_csv(res, col_sep: "\t")
62
+ csv = Marty::DataExporter.to_csv(res, col_sep: "\t")
64
63
 
65
- res = Marty::DataImporter.do_import_summary(Gemini::GroupingHeadVersion, csv)
64
+ res = Marty::DataImporter.do_import_summary(Gemini::GroupingHeadVersion, csv)
66
65
 
67
- expect(res).to eq({same: 4})
68
- end
66
+ expect(res).to eq(same: 4)
69
67
  end
70
68
  end
69
+ end
@@ -1,19 +1,18 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  module Marty
4
-
5
- bud_cats =<<EOF
4
+ bud_cats = <<EOF
6
5
  name
7
6
  Conv Fixed 30
8
7
  Conv Fixed 20
9
8
  EOF
10
9
 
11
- bud_cats2 =<<EOF
10
+ bud_cats2 = <<EOF
12
11
  namex
13
12
  Conv Fixed 20
14
13
  EOF
15
14
 
16
- fannie_bup1 =<<EOF
15
+ fannie_bup1 = <<EOF
17
16
  bud_category note_rate buy_up buy_down settlement_mm settlement_yy
18
17
  Conv Fixed 30 2.250 4.42000 7.24000 12 2012
19
18
  Conv Fixed 30 2.375 4.42000 7.24000 12 2012
@@ -24,18 +23,18 @@ Conv Fixed 20 2.875 4.24800 6.95900 12 2012
24
23
  EOF
25
24
 
26
25
  fannie_bup1_export =
27
- [
28
- ["entity", "bud_category", "note_rate", "settlement_mm",
29
- "settlement_yy", "buy_up", "buy_down"],
30
- [nil, "Conv Fixed 30", 2.250, 12, 2012, 4.42, 7.24],
31
- [nil, "Conv Fixed 30", 2.375, 12, 2012, 4.42, 7.24],
32
- [nil, "Conv Fixed 30", 2.500, 12, 2012, 4.413, 7.228],
33
- [nil, "Conv Fixed 30", 2.625, 12, 2012, 4.375, 7.162],
34
- [nil, "Conv Fixed 30", 2.750, 12, 2012, 4.329, 7.093],
35
- [nil, "Conv Fixed 20", 2.875, 12, 2012, 4.248, 6.959],
36
- ]
37
-
38
- fannie_bup2 =<<EOF
26
+ [
27
+ ['entity', 'bud_category', 'note_rate', 'settlement_mm',
28
+ 'settlement_yy', 'buy_up', 'buy_down'],
29
+ [nil, 'Conv Fixed 30', 2.250, 12, 2012, 4.42, 7.24],
30
+ [nil, 'Conv Fixed 30', 2.375, 12, 2012, 4.42, 7.24],
31
+ [nil, 'Conv Fixed 30', 2.500, 12, 2012, 4.413, 7.228],
32
+ [nil, 'Conv Fixed 30', 2.625, 12, 2012, 4.375, 7.162],
33
+ [nil, 'Conv Fixed 30', 2.750, 12, 2012, 4.329, 7.093],
34
+ [nil, 'Conv Fixed 20', 2.875, 12, 2012, 4.248, 6.959],
35
+ ]
36
+
37
+ fannie_bup2 = <<EOF
39
38
  bud_category note_rate buy_up buy_down settlement_mm settlement_yy
40
39
  Conv Fixed 20 2.250 4.42000 7.24000 12 2012
41
40
  Conv Fixed 20 2.375 4.42000 7.24000 12 2012
@@ -47,12 +46,12 @@ Conv Fixed 30 2.750 4.32900 7.09300 12 2012
47
46
  Conv Fixed 20 2.875 3.333 4.444 12 2012
48
47
  EOF
49
48
 
50
- fannie_bup3 =<<EOF
49
+ fannie_bup3 = <<EOF
51
50
  bud_category note_rate buy_up buy_down settlement_mm settlement_yy
52
51
  Conv Fixed 30 2.250 1.123 2.345 12 2012
53
52
  EOF
54
53
 
55
- loan_programs =<<EOF
54
+ loan_programs = <<EOF
56
55
  name amortization_type mortgage_type streamline_type high_balance_indicator state_array test_int_array test_string_array
57
56
  Conv Fixed 30 Year Fixed Conventional Not Streamlined false [1] "[""foo""]"
58
57
  Conv Fixed 30 Year HB Fixed Conventional Not Streamlined true "[""TN""]" [1,2] "[""foo"",""bar""]"
@@ -60,13 +59,13 @@ Conv Fixed 30 Year DURP <=80 Fixed Conventional DURP false "[""TN"",""CT""]" [1,
60
59
  Conv Fixed 30 Year DURP <=80 HB Fixed Conventional DURP true "[""CA"",""NY""]" "[""foo"",""hi mom""]"
61
60
  EOF
62
61
 
63
- loan_programs_comma =<<EOF
62
+ loan_programs_comma = <<EOF
64
63
  name,amortization_type,mortgage_type,state_array,test_string_array,streamline_type,high_balance_indicator
65
64
  FHA Fixed 15 Year,Fixed,FHA,"[""FL"",""NV"",""ME""]","[""ABC"",""DEF""]",Not Streamlined,false
66
65
  FHA Fixed 100 Year,Fixed,FHA,"[""FL"",""NV"",""ME""]","[""XYZ,"",""hi mom""]",Not Streamlined,false
67
66
  EOF
68
67
 
69
- loan_programs_encoded =<<EOF
68
+ loan_programs_encoded = <<EOF
70
69
  name,amortization_type,mortgage_type,conforming,ltv_ratio_percent_range,high_balance_indicator,loan_amortization_period_count,streamline_type,extra_feature_type_id,arm_initial_reset_period_count,arm_initial_cap_percent,arm_periodic_cap_percent,arm_lifetime_cap_percent,arm_index_type_id,arm_margin_rate_percent,enum_state,state_array,test_int_array,test_string_array
71
70
  VA Fixed 30 Year,Fixed,VA,true,,false,360,Not Streamlined,,,,,,,,,,eJyLNowFAAHTAOo=,eJyLVkrLz1eKBQAI+AJB
72
71
  VA Fixed 30 Year HB,Fixed,VA,true,,true,360,Not Streamlined,,,,,,,,,eJyLVgrxU4oFAAWtAZ8=,eJyLNtQxigUAA9UBSA==,eJyLVkrLz1fSUUpKLFKKBQAbWAPm
@@ -74,24 +73,24 @@ VA Fixed 30 Year DURP <=80,Fixed,VA,true,,false,360,DURP,,,,,,,,,eJyLVgrxU9JRcg5
74
73
  VA Fixed 30 Year DURP <=80 HB,Fixed,VA,true,,true,360,DURP,,,,,,,,,eJyLVnJ2VNJR8otUigUADy8CmA==,,eJyLVkrLz1fSUcrIVMjNz1WKBQApLQTr
75
74
  EOF
76
75
 
77
- fannie_bup4 =<<EOF
76
+ fannie_bup4 = <<EOF
78
77
  loan_program bud_category note_rate buy_up buy_down settlement_mm settlement_yy
79
78
  Conv Fixed 30 Year Conv Fixed 30 2.250 1.123 2.345 12 2012
80
79
  EOF
81
80
 
82
- fannie_bup5 =<<EOF
81
+ fannie_bup5 = <<EOF
83
82
  bud_category note_rate buy_up buy_down settlement_mm settlement_yy
84
83
  Conv Fixed 20 2.250 1.123 2.345 12 2012
85
84
  Conv Fixed XX 2.250 1.123 2.345 12 2012
86
85
  EOF
87
86
 
88
- fannie_bup6 =<<EOF
87
+ fannie_bup6 = <<EOF
89
88
  bud_category note_rate buy_up buy_down settlement_mm settlement_yy
90
89
  Conv Fixed 30 2.250 4.42000 7.24000 12 2012
91
90
  Conv Fixed 30 2.375 a123 7.24000 12 2012
92
91
  EOF
93
92
 
94
- fannie_bup7 =<<EOF
93
+ fannie_bup7 = <<EOF
95
94
  bud_category note_rate buy_up buy_down settlement_mm settlement_yy
96
95
  Conv Fixed 30 $2.250 4.42% 7.24% 12 2012
97
96
  Conv Fixed 30 $2.375 4.42% 7.24% 12 2012
@@ -101,404 +100,392 @@ Conv Fixed 30 $2.750 4.32900 7.09300 12 2012
101
100
  Conv Fixed 20 $2.875 4.24800 6.95900 12 2012
102
101
  EOF
103
102
 
104
- describe DataImporter do
105
- it "should be able to import into classes with id as uniqueness" do
106
- pending("Fix data importer to handle at least group_id as mcfly_uniqueness")
103
+ describe DataImporter do
104
+ it 'should be able to import into classes with id as uniqueness' do
105
+ pending('Fix data importer to handle at least group_id as mcfly_uniqueness')
106
+
107
+ res = Marty::DataImporter.
108
+ do_import_summary(Gemini::Simple,
109
+ [{ 'some_name' => 'hello' }])
110
+ res.should == { create: 1 }
111
+ res = Marty::DataImporter.do_import_summary(
112
+ Gemini::Simple,
113
+ [{ 'group_id' => Gemini::Simple.first.group_id, 'some_name' => 'hello' }]
114
+ )
115
+ res.should == { same: 1 }
116
+ end
107
117
 
108
- res = Marty::DataImporter.
109
- do_import_summary(Gemini::Simple,
110
- [{"some_name" => "hello"}])
111
- res.should == {create: 1}
112
- res = Marty::DataImporter.
113
- do_import_summary(Gemini::Simple,
114
- [{"group_id" => Gemini::Simple.first.group_id, "some_name" => "hello"}])
115
- res.should == {same: 1}
116
- end
118
+ it 'should be able to import fannie buyups' do
119
+ res = Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
120
+ res.should == { create: 2 }
121
+ Gemini::BudCategory.count.should == 2
122
+
123
+ res = Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
124
+ res.should == { same: 2 }
125
+ Gemini::BudCategory.count.should == 2
126
+
127
+ res = Marty::DataImporter.do_import_summary(Gemini::FannieBup, fannie_bup1)
128
+ res.should == { create: 6 }
129
+ Gemini::FannieBup.count.should == 6
130
+
131
+ # spot-check the import
132
+ bc = Gemini::BudCategory.find_by_name('Conv Fixed 30')
133
+ fb = Gemini::FannieBup.where(bud_category_id: bc.id, note_rate: 2.50).first
134
+ fb.buy_up.should == 4.41300
135
+ fb.buy_down.should == 7.22800
136
+
137
+ res = Marty::DataImporter.do_import_summary(Gemini::FannieBup, fannie_bup1)
138
+ res.should == { same: 6 }
139
+ Gemini::FannieBup.count.should == 6
140
+
141
+ # dups should raise an error
142
+ dup = fannie_bup1.split("\n")[-1]
143
+ lambda {
144
+ Marty::DataImporter.do_import_summary(Gemini::FannieBup, fannie_bup1 + dup)
145
+ }.should raise_error(Marty::DataImporter::Error)
146
+ end
117
147
 
118
- it "should be able to import fannie buyups" do
119
- res = Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
120
- res.should == {create: 2}
121
- Gemini::BudCategory.count.should == 2
122
-
123
- res = Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
124
- res.should == {same: 2}
125
- Gemini::BudCategory.count.should == 2
126
-
127
- res = Marty::DataImporter.do_import_summary(Gemini::FannieBup, fannie_bup1)
128
- res.should == {create: 6}
129
- Gemini::FannieBup.count.should == 6
130
-
131
- # spot-check the import
132
- bc = Gemini::BudCategory.find_by_name("Conv Fixed 30")
133
- fb = Gemini::FannieBup.where(bud_category_id: bc.id, note_rate: 2.50).first
134
- fb.buy_up.should == 4.41300
135
- fb.buy_down.should == 7.22800
136
-
137
- res = Marty::DataImporter.do_import_summary(Gemini::FannieBup, fannie_bup1)
138
- res.should == {same: 6}
139
- Gemini::FannieBup.count.should == 6
140
-
141
- # dups should raise an error
142
- dup = fannie_bup1.split("\n")[-1]
143
- lambda {
144
- Marty::DataImporter.do_import_summary(Gemini::FannieBup, fannie_bup1+dup)
145
- }.should raise_error(Marty::DataImporter::Error)
146
- end
148
+ it 'should be able to use comma separated files' do
149
+ res = Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
150
+ res = Marty::DataImporter.
151
+ do_import_summary(Gemini::FannieBup,
152
+ fannie_bup1.gsub("\t", ','),
153
+ 'infinity',
154
+ nil,
155
+ nil,
156
+ ',',
157
+ )
158
+ res.should == { create: 6 }
159
+ Gemini::FannieBup.count.should == 6
160
+ end
147
161
 
148
- it "should be able to use comma separated files" do
149
- res = Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
150
- res = Marty::DataImporter.
151
- do_import_summary(Gemini::FannieBup,
152
- fannie_bup1.gsub("\t", ","),
153
- 'infinity',
154
- nil,
155
- nil,
156
- ",",
157
- )
158
- res.should == {create: 6}
159
- Gemini::FannieBup.count.should == 6
160
- end
162
+ it 'should be all-or-nothing' do
163
+ lambda {
164
+ Marty::DataImporter.
165
+ do_import_summary(Gemini::BudCategory,
166
+ bud_cats + bud_cats.sub(/name\n/, ''))
167
+ }.should raise_error(Marty::DataImporter::Error)
168
+ Gemini::BudCategory.count.should == 0
169
+ end
161
170
 
162
- it "should be all-or-nothing" do
163
- lambda {
164
- Marty::DataImporter.
165
- do_import_summary(Gemini::BudCategory,
166
- bud_cats+bud_cats.sub(/name\n/, ""))
167
- }.should raise_error(Marty::DataImporter::Error)
168
- Gemini::BudCategory.count.should == 0
169
- end
171
+ it 'should be able to perform updates mixed with inserts' do
172
+ res = Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
173
+ res = Marty::DataImporter.do_import_summary(Gemini::FannieBup, fannie_bup1)
170
174
 
171
- it "should be able to perform updates mixed with inserts" do
172
- res = Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
173
- res = Marty::DataImporter.do_import_summary(Gemini::FannieBup, fannie_bup1)
175
+ res = Marty::DataImporter.do_import_summary(Gemini::FannieBup, fannie_bup3)
176
+ res.should == { update: 1 }
174
177
 
175
- res = Marty::DataImporter.do_import_summary(Gemini::FannieBup, fannie_bup3)
176
- res.should == {update: 1}
178
+ res = Marty::DataImporter.do_import_summary(Gemini::FannieBup, fannie_bup2)
179
+ res.should == { same: 2, create: 2, update: 2, blank: 2 }
180
+ end
177
181
 
178
- res = Marty::DataImporter.do_import_summary(Gemini::FannieBup, fannie_bup2)
179
- res.should == {same: 2, create: 2, update: 2, blank: 2}
180
- end
182
+ it 'should be able to import with cleaner' do
183
+ res = Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
184
+ res = Marty::DataImporter.
185
+ do_import_summary(Gemini::FannieBup,
186
+ fannie_bup1,
187
+ 'infinity',
188
+ 'import_cleaner',
189
+ )
190
+ res.should == { create: 6 }
191
+
192
+ res = Marty::DataImporter.
193
+ do_import_summary(Gemini::FannieBup,
194
+ fannie_bup1,
195
+ 'infinity',
196
+ 'import_cleaner',
197
+ )
198
+ res.should == { same: 6 }
199
+
200
+ res = Marty::DataImporter.
201
+ do_import_summary(Gemini::FannieBup,
202
+ fannie_bup3,
203
+ 'infinity',
204
+ 'import_cleaner',
205
+ )
206
+ res.should == { update: 1, clean: 5 }
207
+
208
+ res = Marty::DataImporter.
209
+ do_import_summary(Gemini::FannieBup,
210
+ fannie_bup2,
211
+ 'infinity',
212
+ 'import_cleaner',
213
+ )
214
+ res.should == { create: 6, blank: 2, clean: 1 }
215
+ end
181
216
 
182
- it "should be able to import with cleaner" do
183
- res = Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
184
- res = Marty::DataImporter.
185
- do_import_summary(Gemini::FannieBup,
186
- fannie_bup1,
187
- 'infinity',
188
- 'import_cleaner',
189
- )
190
- res.should == {create: 6}
217
+ it 'should be able to import with validation' do
218
+ Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
219
+
220
+ # first load some old data
221
+ res = Marty::DataImporter.
222
+ do_import_summary(Gemini::FannieBup,
223
+ fannie_bup1,
224
+ 'infinity',
225
+ )
226
+ res.should == { create: 6 }
227
+
228
+ lambda {
229
+ Marty::DataImporter.
230
+ do_import_summary(Gemini::FannieBup,
231
+ fannie_bup1.sub('2012', '2100'), # change 1st row
232
+ 'infinity',
233
+ nil,
234
+ 'import_validation',
235
+ )
236
+ }.should raise_error(Marty::DataImporter::Error)
237
+
238
+ res = Marty::DataImporter.
239
+ do_import_summary(Gemini::FannieBup,
240
+ fannie_bup1.gsub('2012', '2100'),
241
+ 'infinity',
242
+ nil,
243
+ 'import_validation',
244
+ )
245
+
246
+ res.should == { create: 6 }
247
+
248
+ lambda {
249
+ Marty::DataImporter.
250
+ do_import_summary(Gemini::FannieBup,
251
+ fannie_bup3,
252
+ 'infinity',
253
+ 'import_cleaner',
254
+ 'import_validation',
255
+ )
256
+ }.should raise_error(Marty::DataImporter::Error)
257
+
258
+ res = Marty::DataImporter.
259
+ do_import_summary(Gemini::FannieBup,
260
+ fannie_bup3.gsub('2012', '2100'),
261
+ 'infinity',
262
+ 'import_cleaner',
263
+ 'import_validation',
264
+ )
265
+ res.should == { update: 1, clean: 11 }
266
+ end
191
267
 
192
- res = Marty::DataImporter.
193
- do_import_summary(Gemini::FannieBup,
194
- fannie_bup1,
195
- 'infinity',
196
- 'import_cleaner',
197
- )
198
- res.should == {same: 6}
268
+ it 'should be able to import with preprocess' do
269
+ res = Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
270
+ res = Marty::DataImporter.
271
+ do_import_summary(Gemini::FannieBup,
272
+ fannie_bup7,
273
+ 'infinity',
274
+ 'import_cleaner',
275
+ nil,
276
+ "\t",
277
+ false,
278
+ 'import_preprocess',
279
+ )
280
+ res.should == { create: 6 }
281
+ end
199
282
 
200
- res = Marty::DataImporter.
201
- do_import_summary(Gemini::FannieBup,
202
- fannie_bup3,
203
- 'infinity',
204
- 'import_cleaner',
205
- )
206
- res.should == {update: 1, clean: 5}
283
+ it 'should be able to import with validation - allow prior month' do
284
+ Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
285
+
286
+ # first load some data without any validation
287
+ res = Marty::DataImporter.
288
+ do_import_summary(Gemini::FannieBup, fannie_bup1, 'infinity')
289
+ res.should == { create: 6 }
290
+
291
+ now = DateTime.now
292
+ cm, cy = now.month, now.year
293
+ pm1, py1 = (now - 1.month).month, (now - 1.month).year
294
+ pm2, py2 = (now - 2.months).month, (now - 2.months).year
295
+
296
+ # Load data into current mm/yy
297
+ lambda {
298
+ Marty::DataImporter.
299
+ do_import_summary(Gemini::FannieBup,
300
+ fannie_bup1.gsub("12\t2012", "#{cm}\t#{cy}"),
301
+ 'infinity',
302
+ nil,
303
+ 'import_validation',
304
+ )
305
+ }.should_not raise_error
306
+
307
+ # Load data into prior mm/yy - should fail since import_validation
308
+ # only allows current or future months
309
+ lambda {
310
+ Marty::DataImporter.
311
+ do_import_summary(Gemini::FannieBup,
312
+ fannie_bup1.gsub("12\t2012", "#{pm1}\t#{py1}"),
313
+ 'infinity',
314
+ nil,
315
+ 'import_validation',
316
+ )
317
+ }.should raise_error(Marty::DataImporter::Error)
318
+
319
+ # Load data into prior mm/yy - should not fail since
320
+ # import_validation_allow_prior_month is specified
321
+ lambda {
322
+ Marty::DataImporter.
323
+ do_import_summary(Gemini::FannieBup,
324
+ fannie_bup1.gsub("12\t2012", "#{pm1}\t#{py1}"),
325
+ 'infinity',
326
+ nil,
327
+ 'import_validation_allow_prior_month',
328
+ )
329
+ }.should_not raise_error
330
+
331
+ # Load data into mm/yy more than 1 month prior - should fail even
332
+ # if import_validation_allow_prior_month is specified
333
+ lambda {
334
+ Marty::DataImporter.
335
+ do_import_summary(Gemini::FannieBup,
336
+ fannie_bup1.gsub("12\t2012", "#{pm2}\t#{py2}"),
337
+ 'infinity',
338
+ nil,
339
+ 'import_validation_allow_prior_month',
340
+ )
341
+ }.should raise_error(Marty::DataImporter::Error)
342
+ end
207
343
 
208
- res = Marty::DataImporter.
209
- do_import_summary(Gemini::FannieBup,
210
- fannie_bup2,
211
- 'infinity',
212
- 'import_cleaner',
213
- )
214
- res.should == {create: 6, blank: 2, clean: 1}
344
+ it 'should properly handle validation errors' do
345
+ res = Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
346
+ res = Marty::DataImporter.
347
+ do_import_summary(Gemini::LoanProgram, loan_programs)
348
+ res.should == { create: 4 }
349
+
350
+ begin
351
+ Marty::DataImporter.do_import_summary(Gemini::FannieBup, fannie_bup4)
352
+ rescue Marty::DataImporter::Error => exc
353
+ exc.lines.should == [0]
354
+ else
355
+ raise 'should have had an exception'
215
356
  end
357
+ end
216
358
 
217
- it "should be able to import with validation" do
218
- Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
219
-
220
- # first load some old data
221
- res = Marty::DataImporter.
222
- do_import_summary(Gemini::FannieBup,
223
- fannie_bup1,
224
- 'infinity',
225
- )
226
- res.should == {create: 6}
227
-
228
- lambda {
229
- Marty::DataImporter.
230
- do_import_summary(Gemini::FannieBup,
231
- fannie_bup1.sub("2012", "2100"), # change 1st row
232
- 'infinity',
233
- nil,
234
- 'import_validation',
235
- )
236
- }.should raise_error(Marty::DataImporter::Error)
359
+ it 'should load array types (incl encoded)' do
360
+ Marty::DataImporter.do_import(Gemini::LoanProgram, loan_programs)
361
+ Marty::DataImporter.do_import(Gemini::LoanProgram, loan_programs_comma,
362
+ 'infinity', nil, nil, ',')
363
+ Marty::DataImporter.do_import(Gemini::LoanProgram, loan_programs_encoded,
364
+ 'infinity', nil, nil, ',')
365
+ lpset = Gemini::LoanProgram.all.pluck(:name, :state_array,
366
+ :test_int_array,
367
+ :test_string_array).to_set
368
+ expect(lpset).to eq([['Conv Fixed 30 Year', nil, [1], ['foo']],
369
+ ['Conv Fixed 30 Year HB', ['TN'], [1, 2],
370
+ ['foo', 'bar']],
371
+ ['Conv Fixed 30 Year DURP <=80', ['TN', 'CT'],
372
+ [1, 2, 3], ['foo', 'bar']],
373
+ ['Conv Fixed 30 Year DURP <=80 HB', ['CA', 'NY'],
374
+ nil, ['foo', 'hi mom']],
375
+ ['FHA Fixed 15 Year', ['FL', 'NV', 'ME'], nil,
376
+ ['ABC', 'DEF']],
377
+ ['FHA Fixed 100 Year', ['FL', 'NV', 'ME'], nil,
378
+ ['XYZ,', 'hi mom']],
379
+ ['VA Fixed 30 Year', nil, [1], ['foo']],
380
+ ['VA Fixed 30 Year HB', ['TN'], [1, 2],
381
+ ['foo', 'bar']],
382
+ ['VA Fixed 30 Year DURP <=80', ['TN', 'CT'],
383
+ [1, 2, 3], ['foo', 'bar']],
384
+ ['VA Fixed 30 Year DURP <=80 HB', ['CA', 'NY'],
385
+ nil, ['foo', 'hi mom']],].to_set)
386
+ end
237
387
 
238
- res = Marty::DataImporter.
239
- do_import_summary(Gemini::FannieBup,
240
- fannie_bup1.gsub("2012", "2100"),
241
- 'infinity',
242
- nil,
243
- 'import_validation',
244
- )
245
-
246
- res.should == {create: 6}
247
-
248
- lambda {
249
- Marty::DataImporter.
250
- do_import_summary(Gemini::FannieBup,
251
- fannie_bup3,
252
- 'infinity',
253
- 'import_cleaner',
254
- 'import_validation',
255
- )
256
- }.should raise_error(Marty::DataImporter::Error)
388
+ it 'should properly handle cases where an association item is missing' do
389
+ res = Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
257
390
 
258
- res = Marty::DataImporter.
259
- do_import_summary(Gemini::FannieBup,
260
- fannie_bup3.gsub("2012", "2100"),
261
- 'infinity',
262
- 'import_cleaner',
263
- 'import_validation',
264
- )
265
- res.should == {update: 1, clean: 11}
391
+ begin
392
+ Marty::DataImporter.do_import_summary(Gemini::FannieBup, fannie_bup5)
393
+ rescue Marty::DataImporter::Error => exc
394
+ exc.lines.should == [1]
395
+ exc.message.should =~ /Conv Fixed XX/
396
+ else
397
+ raise 'should have had an exception'
266
398
  end
399
+ end
267
400
 
268
- it "should be able to import with preprocess" do
269
- res = Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
270
- res = Marty::DataImporter.
271
- do_import_summary(Gemini::FannieBup,
272
- fannie_bup7,
273
- 'infinity',
274
- 'import_cleaner',
275
- nil,
276
- "\t",
277
- false,
278
- 'import_preprocess',
279
- )
280
- res.should == {create: 6}
281
- end
282
-
283
- it "should be able to import with validation - allow prior month" do
284
- Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
285
-
286
- # first load some data without any validation
287
- res = Marty::DataImporter.
288
- do_import_summary(Gemini::FannieBup, fannie_bup1, 'infinity')
289
- res.should == {create: 6}
290
-
291
- now = DateTime.now
292
- cm, cy = now.month, now.year
293
- pm1, py1 = (now - 1.month).month, (now - 1.month).year
294
- pm2, py2 = (now - 2.months).month, (now - 2.months).year
295
-
296
- # Load data into current mm/yy
297
- lambda {
298
- Marty::DataImporter.
299
- do_import_summary(Gemini::FannieBup,
300
- fannie_bup1.gsub("12\t2012", "#{cm}\t#{cy}"),
301
- 'infinity',
302
- nil,
303
- 'import_validation',
304
- )
305
- }.should_not raise_error
306
-
307
- # Load data into prior mm/yy - should fail since import_validation
308
- # only allows current or future months
309
- lambda {
310
- Marty::DataImporter.
311
- do_import_summary(Gemini::FannieBup,
312
- fannie_bup1.gsub("12\t2012", "#{pm1}\t#{py1}"),
313
- 'infinity',
314
- nil,
315
- 'import_validation',
316
- )
317
- }.should raise_error(Marty::DataImporter::Error)
318
-
319
- # Load data into prior mm/yy - should not fail since
320
- # import_validation_allow_prior_month is specified
321
- lambda {
322
- Marty::DataImporter.
323
- do_import_summary(Gemini::FannieBup,
324
- fannie_bup1.gsub("12\t2012", "#{pm1}\t#{py1}"),
325
- 'infinity',
326
- nil,
327
- 'import_validation_allow_prior_month',
328
- )
329
- }.should_not raise_error
330
-
331
- # Load data into mm/yy more than 1 month prior - should fail even
332
- # if import_validation_allow_prior_month is specified
333
- lambda {
334
- Marty::DataImporter.
335
- do_import_summary(Gemini::FannieBup,
336
- fannie_bup1.gsub("12\t2012", "#{pm2}\t#{py2}"),
337
- 'infinity',
338
- nil,
339
- 'import_validation_allow_prior_month',
340
- )
341
- }.should raise_error(Marty::DataImporter::Error)
342
- end
401
+ it 'should check for bad header' do
402
+ lambda {
403
+ Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats2)
404
+ }.should raise_error(Marty::DataImporter::Error, /namex/)
405
+ end
343
406
 
344
- it "should properly handle validation errors" do
345
- res = Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
407
+ it 'should handle bad data' do
408
+ res = Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
409
+ begin
346
410
  res = Marty::DataImporter.
347
- do_import_summary(Gemini::LoanProgram, loan_programs)
348
- res.should == {create: 4}
349
-
350
- begin
351
- Marty::DataImporter.do_import_summary(Gemini::FannieBup, fannie_bup4)
352
- rescue Marty::DataImporter::Error => exc
353
- exc.lines.should == [0]
354
- else
355
- raise "should have had an exception"
356
- end
357
- end
358
-
359
- it "should load array types (incl encoded)" do
360
- Marty::DataImporter.do_import(Gemini::LoanProgram, loan_programs)
361
- Marty::DataImporter.do_import(Gemini::LoanProgram, loan_programs_comma,
362
- 'infinity', nil, nil, ',')
363
- Marty::DataImporter.do_import(Gemini::LoanProgram, loan_programs_encoded,
364
- 'infinity', nil, nil, ',')
365
- lpset = Gemini::LoanProgram.all.pluck(:name, :state_array,
366
- :test_int_array,
367
- :test_string_array).to_set
368
- expect(lpset).to eq([["Conv Fixed 30 Year", nil, [1], ['foo']],
369
- ["Conv Fixed 30 Year HB", ["TN"], [1, 2],
370
- ['foo', 'bar']],
371
- ["Conv Fixed 30 Year DURP <=80", ["TN", "CT"],
372
- [1, 2, 3], ['foo', 'bar']],
373
- ["Conv Fixed 30 Year DURP <=80 HB", ["CA", "NY"],
374
- nil, ['foo', 'hi mom']],
375
- ["FHA Fixed 15 Year", ["FL","NV","ME"], nil,
376
- ['ABC', 'DEF']],
377
- ["FHA Fixed 100 Year", ["FL","NV","ME"], nil,
378
- ['XYZ,', 'hi mom']],
379
- ["VA Fixed 30 Year", nil, [1], ['foo']],
380
- ["VA Fixed 30 Year HB", ["TN"], [1, 2],
381
- ['foo', 'bar']],
382
- ["VA Fixed 30 Year DURP <=80", ["TN", "CT"],
383
- [1, 2, 3], ['foo', 'bar']],
384
- ["VA Fixed 30 Year DURP <=80 HB", ["CA", "NY"],
385
- nil, ['foo', 'hi mom']],
386
- ].to_set)
387
-
388
- end
389
-
390
- it "should properly handle cases where an association item is missing" do
391
- res = Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
392
-
393
- begin
394
- Marty::DataImporter.do_import_summary(Gemini::FannieBup, fannie_bup5)
395
- rescue Marty::DataImporter::Error => exc
396
- exc.lines.should == [1]
397
- exc.message.should =~ /Conv Fixed XX/
398
- else
399
- raise "should have had an exception"
400
- end
401
- end
402
-
403
- it "should check for bad header" do
404
- lambda {
405
- Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats2)
406
- }.should raise_error(Marty::DataImporter::Error, /namex/)
407
- end
408
-
409
- it "should handle bad data" do
410
- res = Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
411
- begin
412
- res = Marty::DataImporter.
413
- do_import_summary(Gemini::FannieBup, fannie_bup6)
414
- rescue Marty::DataImporter::Error => exc
415
- exc.lines.should == [1]
416
- exc.message.should =~ /bad float/
417
- else
418
- raise "should have had an exception"
419
- end
420
- end
421
-
422
- it "should be able to export" do
423
- Marty::Script.load_scripts(nil, Date.today)
424
- Marty::ScriptSet.clear_cache
425
- Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
426
- Marty::DataImporter.do_import_summary(Gemini::FannieBup, fannie_bup1)
427
- p = Marty::Posting.do_create("BASE", DateTime.tomorrow, '?')
428
-
429
- engine = Marty::ScriptSet.new.get_engine("DataReport")
430
- res = engine.evaluate("TableReport",
431
- "result_raw",
432
- {
433
- "pt_name" => p.name,
434
- "class_name" => "Gemini::FannieBup",
435
- },
436
- )
437
- res[0].should == fannie_bup1_export[0]
438
- res[1..-1].sort.should == fannie_bup1_export[1..-1].sort
411
+ do_import_summary(Gemini::FannieBup, fannie_bup6)
412
+ rescue Marty::DataImporter::Error => exc
413
+ exc.lines.should == [1]
414
+ exc.message.should =~ /bad float/
415
+ else
416
+ raise 'should have had an exception'
439
417
  end
440
418
  end
441
419
 
442
- describe "Blame Report without yml translations" do
443
- before(:each) do
444
- I18n.backend.store_translations(:en, {
445
- attributes: {
446
- note_rate: nil
447
- }
448
- })
449
- Marty::Script.load_scripts(nil, Date.today)
450
- Marty::ScriptSet.clear_cache
451
- p = Marty::Posting.do_create("BASE", DateTime.yesterday, 'yesterday')
452
- Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
453
- Marty::DataImporter.do_import_summary(Gemini::FannieBup, fannie_bup1)
454
- p2 = Marty::Posting.do_create("BASE", DateTime.now, 'now is the time')
455
- engine = Marty::ScriptSet.new.get_engine("BlameReport")
456
- @res = engine.evaluate("DataBlameReport",
457
- "result",
458
- {
459
- "pt_name1" => p.name,
460
- "pt_name2" => p2.name
461
- },
462
- )
463
- end
420
+ it 'should be able to export' do
421
+ Marty::Script.load_scripts(nil, Date.today)
422
+ Marty::ScriptSet.clear_cache
423
+ Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
424
+ Marty::DataImporter.do_import_summary(Gemini::FannieBup, fannie_bup1)
425
+ p = Marty::Posting.do_create('BASE', DateTime.tomorrow, '?')
426
+
427
+ res = Marty::Script.evaluate(
428
+ nil, 'DataReport', 'TableReport', 'result_raw',
429
+ 'pt_name' => p.name,
430
+ 'class_name' => 'Gemini::FannieBup',
431
+ )
432
+ res[0].should == fannie_bup1_export[0]
433
+ res[1..-1].sort.should == fannie_bup1_export[1..-1].sort
434
+ end
435
+ end
464
436
 
465
- context 'when exporting' do
466
- it "exports the column_name" do
467
- expect(@res[0][1][0][1].length).to eq(12)
468
- expect(@res[0][1][0][1][7]).to eq("note_rate")
469
- end
470
- end
437
+ describe 'Blame Report without yml translations' do
438
+ before(:each) do
439
+ I18n.backend.store_translations(:en,
440
+ attributes: {
441
+ note_rate: nil
442
+ }
443
+ )
444
+ Marty::Script.load_scripts(nil, Date.today)
445
+ Marty::ScriptSet.clear_cache
446
+ p = Marty::Posting.do_create('BASE', DateTime.yesterday, 'yesterday')
447
+ Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
448
+ Marty::DataImporter.do_import_summary(Gemini::FannieBup, fannie_bup1)
449
+ p2 = Marty::Posting.do_create('BASE', DateTime.now, 'now is the time')
450
+
451
+ @res = Marty::Script.evaluate(
452
+ nil, 'BlameReport', 'DataBlameReport', 'result',
453
+ 'pt_name1' => p.name,
454
+ 'pt_name2' => p2.name
455
+ )
471
456
  end
472
457
 
473
- describe "Blame Report with yml translations" do
474
- before(:each) do
475
- I18n.backend.store_translations(:en, {
476
- attributes: {
477
- note_rate: "Note Rate"
478
- }
479
- })
480
- Marty::Script.load_scripts(nil, Date.today)
481
- Marty::ScriptSet.clear_cache
482
- p = Marty::Posting.do_create("BASE", DateTime.yesterday, 'yesterday')
483
- Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
484
- Marty::DataImporter.do_import_summary(Gemini::FannieBup, fannie_bup1)
485
- p2 = Marty::Posting.do_create("BASE", DateTime.now, 'now is the time')
486
- engine = Marty::ScriptSet.new.get_engine("BlameReport")
487
- @res = engine.evaluate("DataBlameReport",
488
- "result",
489
- {
490
- "pt_name1" => p.name,
491
- "pt_name2" => p2.name
492
- },
493
- )
458
+ context 'when exporting' do
459
+ it 'exports the column_name' do
460
+ expect(@res[0][1][0][1].length).to eq(12)
461
+ expect(@res[0][1][0][1][7]).to eq('note_rate')
494
462
  end
463
+ end
464
+ end
495
465
 
496
- context 'when exporting' do
497
- it "exports the locale value for the column header" do
466
+ describe 'Blame Report with yml translations' do
467
+ before(:each) do
468
+ I18n.backend.store_translations(:en, attributes: { note_rate: 'Note Rate' })
469
+
470
+ Marty::Script.load_scripts(nil, Date.today)
471
+ Marty::ScriptSet.clear_cache
472
+ p = Marty::Posting.do_create('BASE', DateTime.yesterday, 'yesterday')
473
+ Marty::DataImporter.do_import_summary(Gemini::BudCategory, bud_cats)
474
+ Marty::DataImporter.do_import_summary(Gemini::FannieBup, fannie_bup1)
475
+ p2 = Marty::Posting.do_create('BASE', DateTime.now, 'now is the time')
476
+
477
+ @res = Marty::Script.evaluate(
478
+ nil, 'BlameReport', 'DataBlameReport', 'result',
479
+ 'pt_name1' => p.name,
480
+ 'pt_name2' => p2.name,
481
+ )
482
+ end
498
483
 
499
- expect(@res[0][1][0][1].length).to eq(12)
500
- expect(@res[0][1][0][1][7]).to eq("Note Rate")
501
- end
484
+ context 'when exporting' do
485
+ it 'exports the locale value for the column header' do
486
+ expect(@res[0][1][0][1].length).to eq(12)
487
+ expect(@res[0][1][0][1][7]).to eq('Note Rate')
502
488
  end
503
489
  end
504
490
  end
491
+ end