mint_reporter 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Rakefile +34 -0
- data/app/controllers/admin/reports_controller.rb +3 -0
- data/app/models/report.rb +86 -0
- data/app/views/admin/reports/_form.html.erb +40 -0
- data/app/views/admin/reports/edit.html.erb +14 -0
- data/app/views/admin/reports/index.html.erb +96 -0
- data/app/views/admin/reports/new.html.erb +13 -0
- data/app/views/admin/reports/show.html.erb +51 -0
- data/app/workers/csv_generation_worker.rb +8 -0
- data/config/initializers/mime_types.rb +1 -0
- data/config/routes.rb +5 -0
- data/db/migrate/20140703143528_create_reports.rb +16 -0
- data/lib/generators/mint_report/USAGE +8 -0
- data/lib/generators/mint_report/mint_report_generator.rb +7 -0
- data/lib/generators/mint_report/templates/mint_report.rb +9 -0
- data/lib/mint_reporter.rb +17 -0
- data/lib/mint_reporter/engine.rb +4 -0
- data/lib/mint_reporter/version.rb +3 -0
- data/lib/tasks/mint_reporter_tasks.rake +4 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/admin.js +31 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/admin.scss +11 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/admin/admin_controller.rb +3 -0
- data/test/dummy/app/controllers/application_controller.rb +7 -0
- data/test/dummy/app/helpers/application_helper.rb +8 -0
- data/test/dummy/app/models/user.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +23 -0
- data/test/dummy/config/boot.rb +7 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +6 -0
- data/test/dummy/config/environments/development.rb +29 -0
- data/test/dummy/config/environments/production.rb +80 -0
- data/test/dummy/config/environments/test.rb +36 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +12 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +59 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20140716113109_create_users.rb +9 -0
- data/test/dummy/db/migrate/20140723162342_create_reports.mint_reporter_engine.rb +17 -0
- data/test/dummy/db/production.sqlite3 +0 -0
- data/test/dummy/db/schema.rb +35 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +293 -0
- data/test/dummy/log/test.log +17259 -0
- data/test/dummy/public/404.html +58 -0
- data/test/dummy/public/422.html +58 -0
- data/test/dummy/public/500.html +57 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/public/uploads/test/basic_reports/000/000/001/original.csv +3 -0
- data/test/dummy/test/factories/foos.rb +6 -0
- data/test/dummy/tmp/cache/assets/test/sass/051af4935d2ac60904721027c383dd9ffc9f7871/_admin-base.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sass/7f5568ada10d673b8a1d203ce8b8c1dba7fbaf83/admin.scssc +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/1935933f8fbe88236ef893016c1836bc +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/27184889e78dc5a556f3c7567afbef63 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/37c7a190e68a7e26cf450e38ec190534 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/468917569b5c6af93b42fda1a68e426c +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/638d4b299480bfa854367ae027ff66d0 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/6609ee9da4eaea9b8d8137fbcfce6fdd +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/9d087e6fe6cf75adc1ebe34710cb71bc +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/ac64f2f5da10d3fe34beec68afda56d4 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/b53da076920d68305d6582c3af250465 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/d875d477ab20a2e08531d775a5fea6f2 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/e017dd8f0cd2f98c7864918d2ba783b3 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/f8160f91b680b2f94df78cefd5abc06e +0 -0
- data/test/factories/reports.rb +8 -0
- data/test/factories/users.rb +5 -0
- data/test/fixtures/reports.yml +15 -0
- data/test/functional/reports_controller_test.rb +34 -0
- data/test/generators/mint_report_generator_test.rb +14 -0
- data/test/integration/configuration_test.rb +29 -0
- data/test/integration/create_report_test.rb +20 -0
- data/test/integration/mint_report_generator.rb +10 -0
- data/test/mint_reporter_test.rb +7 -0
- data/test/test_helper.rb +45 -0
- data/test/tmp/app/models/reports/foo_report.rb +9 -0
- data/test/unit/report_test.rb +69 -0
- metadata +330 -0
@@ -0,0 +1,58 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>The page you were looking for doesn't exist (404)</title>
|
5
|
+
<style>
|
6
|
+
body {
|
7
|
+
background-color: #EFEFEF;
|
8
|
+
color: #2E2F30;
|
9
|
+
text-align: center;
|
10
|
+
font-family: arial, sans-serif;
|
11
|
+
}
|
12
|
+
|
13
|
+
div.dialog {
|
14
|
+
width: 25em;
|
15
|
+
margin: 4em auto 0 auto;
|
16
|
+
border: 1px solid #CCC;
|
17
|
+
border-right-color: #999;
|
18
|
+
border-left-color: #999;
|
19
|
+
border-bottom-color: #BBB;
|
20
|
+
border-top: #B00100 solid 4px;
|
21
|
+
border-top-left-radius: 9px;
|
22
|
+
border-top-right-radius: 9px;
|
23
|
+
background-color: white;
|
24
|
+
padding: 7px 4em 0 4em;
|
25
|
+
}
|
26
|
+
|
27
|
+
h1 {
|
28
|
+
font-size: 100%;
|
29
|
+
color: #730E15;
|
30
|
+
line-height: 1.5em;
|
31
|
+
}
|
32
|
+
|
33
|
+
body > p {
|
34
|
+
width: 33em;
|
35
|
+
margin: 0 auto 1em;
|
36
|
+
padding: 1em 0;
|
37
|
+
background-color: #F7F7F7;
|
38
|
+
border: 1px solid #CCC;
|
39
|
+
border-right-color: #999;
|
40
|
+
border-bottom-color: #999;
|
41
|
+
border-bottom-left-radius: 4px;
|
42
|
+
border-bottom-right-radius: 4px;
|
43
|
+
border-top-color: #DADADA;
|
44
|
+
color: #666;
|
45
|
+
box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
|
46
|
+
}
|
47
|
+
</style>
|
48
|
+
</head>
|
49
|
+
|
50
|
+
<body>
|
51
|
+
<!-- This file lives in public/404.html -->
|
52
|
+
<div class="dialog">
|
53
|
+
<h1>The page you were looking for doesn't exist.</h1>
|
54
|
+
<p>You may have mistyped the address or the page may have moved.</p>
|
55
|
+
</div>
|
56
|
+
<p>If you are the application owner check the logs for more information.</p>
|
57
|
+
</body>
|
58
|
+
</html>
|
@@ -0,0 +1,58 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>The change you wanted was rejected (422)</title>
|
5
|
+
<style>
|
6
|
+
body {
|
7
|
+
background-color: #EFEFEF;
|
8
|
+
color: #2E2F30;
|
9
|
+
text-align: center;
|
10
|
+
font-family: arial, sans-serif;
|
11
|
+
}
|
12
|
+
|
13
|
+
div.dialog {
|
14
|
+
width: 25em;
|
15
|
+
margin: 4em auto 0 auto;
|
16
|
+
border: 1px solid #CCC;
|
17
|
+
border-right-color: #999;
|
18
|
+
border-left-color: #999;
|
19
|
+
border-bottom-color: #BBB;
|
20
|
+
border-top: #B00100 solid 4px;
|
21
|
+
border-top-left-radius: 9px;
|
22
|
+
border-top-right-radius: 9px;
|
23
|
+
background-color: white;
|
24
|
+
padding: 7px 4em 0 4em;
|
25
|
+
}
|
26
|
+
|
27
|
+
h1 {
|
28
|
+
font-size: 100%;
|
29
|
+
color: #730E15;
|
30
|
+
line-height: 1.5em;
|
31
|
+
}
|
32
|
+
|
33
|
+
body > p {
|
34
|
+
width: 33em;
|
35
|
+
margin: 0 auto 1em;
|
36
|
+
padding: 1em 0;
|
37
|
+
background-color: #F7F7F7;
|
38
|
+
border: 1px solid #CCC;
|
39
|
+
border-right-color: #999;
|
40
|
+
border-bottom-color: #999;
|
41
|
+
border-bottom-left-radius: 4px;
|
42
|
+
border-bottom-right-radius: 4px;
|
43
|
+
border-top-color: #DADADA;
|
44
|
+
color: #666;
|
45
|
+
box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
|
46
|
+
}
|
47
|
+
</style>
|
48
|
+
</head>
|
49
|
+
|
50
|
+
<body>
|
51
|
+
<!-- This file lives in public/422.html -->
|
52
|
+
<div class="dialog">
|
53
|
+
<h1>The change you wanted was rejected.</h1>
|
54
|
+
<p>Maybe you tried to change something you didn't have access to.</p>
|
55
|
+
</div>
|
56
|
+
<p>If you are the application owner check the logs for more information.</p>
|
57
|
+
</body>
|
58
|
+
</html>
|
@@ -0,0 +1,57 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>We're sorry, but something went wrong (500)</title>
|
5
|
+
<style>
|
6
|
+
body {
|
7
|
+
background-color: #EFEFEF;
|
8
|
+
color: #2E2F30;
|
9
|
+
text-align: center;
|
10
|
+
font-family: arial, sans-serif;
|
11
|
+
}
|
12
|
+
|
13
|
+
div.dialog {
|
14
|
+
width: 25em;
|
15
|
+
margin: 4em auto 0 auto;
|
16
|
+
border: 1px solid #CCC;
|
17
|
+
border-right-color: #999;
|
18
|
+
border-left-color: #999;
|
19
|
+
border-bottom-color: #BBB;
|
20
|
+
border-top: #B00100 solid 4px;
|
21
|
+
border-top-left-radius: 9px;
|
22
|
+
border-top-right-radius: 9px;
|
23
|
+
background-color: white;
|
24
|
+
padding: 7px 4em 0 4em;
|
25
|
+
}
|
26
|
+
|
27
|
+
h1 {
|
28
|
+
font-size: 100%;
|
29
|
+
color: #730E15;
|
30
|
+
line-height: 1.5em;
|
31
|
+
}
|
32
|
+
|
33
|
+
body > p {
|
34
|
+
width: 33em;
|
35
|
+
margin: 0 auto 1em;
|
36
|
+
padding: 1em 0;
|
37
|
+
background-color: #F7F7F7;
|
38
|
+
border: 1px solid #CCC;
|
39
|
+
border-right-color: #999;
|
40
|
+
border-bottom-color: #999;
|
41
|
+
border-bottom-left-radius: 4px;
|
42
|
+
border-bottom-right-radius: 4px;
|
43
|
+
border-top-color: #DADADA;
|
44
|
+
color: #666;
|
45
|
+
box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
|
46
|
+
}
|
47
|
+
</style>
|
48
|
+
</head>
|
49
|
+
|
50
|
+
<body>
|
51
|
+
<!-- This file lives in public/500.html -->
|
52
|
+
<div class="dialog">
|
53
|
+
<h1>We're sorry, but something went wrong.</h1>
|
54
|
+
</div>
|
55
|
+
<p>If you are the application owner check the logs for more information.</p>
|
56
|
+
</body>
|
57
|
+
</html>
|
File without changes
|
Binary file
|
data/test/dummy/tmp/cache/assets/test/sass/7f5568ada10d673b8a1d203ce8b8c1dba7fbaf83/admin.scssc
ADDED
Binary file
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
|
2
|
+
|
3
|
+
one:
|
4
|
+
from_date: 2014-07-03 15:35:28
|
5
|
+
to_date: 2014-07-03 15:35:28
|
6
|
+
state: MyString
|
7
|
+
timestamp_field: MyString
|
8
|
+
parameters: MyText
|
9
|
+
|
10
|
+
two:
|
11
|
+
from_date: 2014-07-03 15:35:28
|
12
|
+
to_date: 2014-07-03 15:35:28
|
13
|
+
state: MyString
|
14
|
+
timestamp_field: MyString
|
15
|
+
parameters: MyText
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Admin::ReportsControllerTest < ActionController::TestCase
|
4
|
+
tests Admin::ReportsController
|
5
|
+
|
6
|
+
should 'get to #index' do
|
7
|
+
get :index
|
8
|
+
assert_response :success
|
9
|
+
end
|
10
|
+
|
11
|
+
should 'get to #new with report type' do
|
12
|
+
get :new
|
13
|
+
assert_response :success
|
14
|
+
end
|
15
|
+
|
16
|
+
should 'post to create' do
|
17
|
+
assert_difference("Report.count") do
|
18
|
+
post :create, "report" => {
|
19
|
+
"type" => "BasicReport",
|
20
|
+
"from_date(1i)" => "2014",
|
21
|
+
"from_date(2i)" => "7",
|
22
|
+
"from_date(3i)" => "17",
|
23
|
+
"from_date(4i)" => "13",
|
24
|
+
"from_date(5i)" => "39",
|
25
|
+
"to_date(1i)" => "2014",
|
26
|
+
"to_date(2i)" => "7",
|
27
|
+
"to_date(3i)" => "17",
|
28
|
+
"to_date(4i)" => "13",
|
29
|
+
"to_date(5i)" => "39"
|
30
|
+
}
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
require "generators/mint_report/mint_report_generator"
|
3
|
+
|
4
|
+
class MintReportGeneratorTest < Rails::Generators::TestCase
|
5
|
+
tests MintReportGenerator
|
6
|
+
|
7
|
+
destination File.expand_path("../tmp", File.dirname(__FILE__))
|
8
|
+
setup :prepare_destination
|
9
|
+
|
10
|
+
test "generate Report" do
|
11
|
+
run_generator %w(foo_report)
|
12
|
+
assert_file 'app/models/reports/foo_report.rb'
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ConfigurationTest < ActionDispatch::IntegrationTest
|
4
|
+
class FooPresenter
|
5
|
+
THINGS = %w[thing1 thing2 thing3]
|
6
|
+
end
|
7
|
+
|
8
|
+
setup do
|
9
|
+
MintReporter.config do |c|
|
10
|
+
c.paperclip_storage_options = {
|
11
|
+
:url => "http://example.com/uploads/:style.:extension",
|
12
|
+
:path => ":rails_root/public/uploads/:style.:extension"
|
13
|
+
}
|
14
|
+
c.reports = {:foo_presenter => {:fields => FooPresenter::THINGS}}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
test "accepts paperclip config" do
|
19
|
+
paperclip_config = {}
|
20
|
+
paperclip_config[:url] = "http://example.com/uploads/:style.:extension"
|
21
|
+
paperclip_config[:path] = ":rails_root/public/uploads/:style.:extension"
|
22
|
+
assert_equal paperclip_config, MintReporter.config.paperclip_storage_options
|
23
|
+
end
|
24
|
+
|
25
|
+
test "accepts reports config" do
|
26
|
+
assert_equal FooPresenter::THINGS,
|
27
|
+
MintReporter.config.reports[:foo_presenter][:fields]
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class CreateReportTest < ActionDispatch::IntegrationTest
|
4
|
+
should "successfully create a report" do
|
5
|
+
records = [
|
6
|
+
OpenStruct.new(:one => 'one', :two => 'two'),
|
7
|
+
OpenStruct.new(:one => 'a', :two => 'b')
|
8
|
+
]
|
9
|
+
flexmock(records).should_receive(:where).and_return(records)
|
10
|
+
flexmock(records).should_receive(:order).once.and_return(records)
|
11
|
+
|
12
|
+
report = BasicReport.create
|
13
|
+
flexmock(report).should_receive(:records).once.and_return(records)
|
14
|
+
|
15
|
+
report.generate_csv!
|
16
|
+
assert report.reload.csv.present?
|
17
|
+
file = File.open report.csv.path
|
18
|
+
assert_equal "col1,col2\none,two\na,b\n", file.read
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class MintReportGeneratorTest < Rails::Generators::TestCase
|
2
|
+
tests MintReportGenerator
|
3
|
+
destination File.expand_path("../tmp", File.dirname(__FILE__))
|
4
|
+
|
5
|
+
setup :prepare_destination
|
6
|
+
|
7
|
+
should "create Foo report" do
|
8
|
+
run_generator(['FooReport'])
|
9
|
+
end
|
10
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# Configure Rails Environment
|
2
|
+
ENV["RAILS_ENV"] = "test"
|
3
|
+
|
4
|
+
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
5
|
+
require "rails/test_help"
|
6
|
+
require "rails/generators"
|
7
|
+
require "flexmock/test_unit"
|
8
|
+
require "factory_girl"
|
9
|
+
require "shoulda"
|
10
|
+
require "paperclip/matchers"
|
11
|
+
|
12
|
+
Rails.backtrace_cleaner.remove_silencers!
|
13
|
+
|
14
|
+
# Load support files
|
15
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
16
|
+
|
17
|
+
# Load factories
|
18
|
+
Dir["#{File.dirname(__FILE__)}/factories/*.rb"].each { |f| require f }
|
19
|
+
|
20
|
+
MintReporter.config do |c|
|
21
|
+
c.paperclip_storage_options = {
|
22
|
+
:url => "http://test.local/uploads/:class/:id_partition/:style.:extension",
|
23
|
+
:path => ":rails_root/public/uploads/test/:class/:id_partition/:style.:extension"
|
24
|
+
}
|
25
|
+
c.reports = %w[BasicReport BlankReport]
|
26
|
+
end
|
27
|
+
|
28
|
+
class BasicReport < Report
|
29
|
+
def csv_column_names
|
30
|
+
['col1', 'col2']
|
31
|
+
end
|
32
|
+
def csv_row(record)
|
33
|
+
[record.one, record.two]
|
34
|
+
end
|
35
|
+
def records
|
36
|
+
[
|
37
|
+
OpenStruct.new(:one => 'one', :two => 'two'),
|
38
|
+
OpenStruct.new(:one => 'a', :two => 'b')
|
39
|
+
]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
class ActiveSupport::TestCase
|
44
|
+
extend Paperclip::Shoulda::Matchers
|
45
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ReportTest < ActiveSupport::TestCase
|
4
|
+
should ensure_inclusion_of(:type).in_array(MintReporter.config.reports)
|
5
|
+
should have_attached_file(:csv)
|
6
|
+
|
7
|
+
context "with a basic report" do
|
8
|
+
setup { @report = BasicReport.create }
|
9
|
+
|
10
|
+
should "default to the pending state" do
|
11
|
+
assert_equal "pending", @report.state
|
12
|
+
end
|
13
|
+
|
14
|
+
should "add a task to the default queue after commit" do
|
15
|
+
flexmock(@report).should_receive(:generate_csv).once
|
16
|
+
@report.save
|
17
|
+
@report.run_callbacks(:commit)
|
18
|
+
end
|
19
|
+
|
20
|
+
should "enqueue CSV generation task" do
|
21
|
+
flexmock(CSVGenerationWorker).should_receive(:perform_async).
|
22
|
+
with(@report.id).once
|
23
|
+
@report.generate_csv
|
24
|
+
end
|
25
|
+
|
26
|
+
should "generate a csv" do
|
27
|
+
records = [
|
28
|
+
OpenStruct.new(:one => 'one', :two => 'two'),
|
29
|
+
OpenStruct.new(:one => 'a', :two => 'b')
|
30
|
+
]
|
31
|
+
flexmock(records).should_receive(:where).
|
32
|
+
with(:created_at => @report.from_date..@report.to_date).
|
33
|
+
and_return(records)
|
34
|
+
flexmock(records).should_receive(:order).once.and_return(records)
|
35
|
+
flexmock(@report).should_receive(:records).once.and_return(records)
|
36
|
+
|
37
|
+
flexmock(@report).should_receive(:csv=).once
|
38
|
+
@report.generate_csv!
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "with a blank report" do
|
43
|
+
setup { @report = FactoryGirl.create(:report, :blank) }
|
44
|
+
|
45
|
+
should "raise an error on asking for csv column names" do
|
46
|
+
e = assert_raises(MintReporter::Undefined) do
|
47
|
+
@report.csv_column_names
|
48
|
+
end
|
49
|
+
assert_equal "Subclasses of Report must implement csv_column_names",
|
50
|
+
e.message
|
51
|
+
end
|
52
|
+
|
53
|
+
should "raise an error on asking for csv row" do
|
54
|
+
e = assert_raises(MintReporter::Undefined) do
|
55
|
+
@report.csv_row(nil)
|
56
|
+
end
|
57
|
+
assert_equal "Subclasses of Report must implement csv_row",
|
58
|
+
e.message
|
59
|
+
end
|
60
|
+
|
61
|
+
should "raise an error on asking for records" do
|
62
|
+
e = assert_raises(MintReporter::Undefined) do
|
63
|
+
@report.records
|
64
|
+
end
|
65
|
+
assert_equal "Subclasses of Report must implement records",
|
66
|
+
e.message
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|