Skip to content

Commit 3cae4d2

Browse files
authored
Replace ammeter (#172)
1 parent 9540473 commit 3cae4d2

File tree

4 files changed

+85
-30
lines changed

4 files changed

+85
-30
lines changed

Gemfile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ source "https://rubygems.org"
22

33
gemspec
44

5-
gem "ammeter", ">= 1.1.3"
65
gem "bundler", ">= 1.5"
76
gem "database_cleaner"
87
gem "pg"

spec/generators/fx/function/function_generator_spec.rb

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,22 @@
66
migration = file("db/migrate/create_function_test.rb")
77
function_definition = file("db/functions/test_v01.sql")
88

9-
run_generator ["test"]
9+
run_generator(described_class, ["test"])
1010

1111
expect(function_definition).to exist
12-
expect(migration).to be_a_migration
13-
expect(migration_file(migration)).to contain("CreateFunctionTest")
12+
expect_to_be_a_migration(migration)
13+
expect(migration_content(migration)).to include("CreateFunctionTest")
1414
end
1515

1616
context "when passed --no-migration" do
1717
it "creates a only function definition file" do
1818
migration = file("db/migrate/create_function_test.rb")
1919
function_definition = file("db/functions/test_v01.sql")
2020

21-
run_generator ["test", "--no-migration"]
21+
run_generator(described_class, ["test"], {migration: false})
2222

2323
expect(function_definition).to exist
24-
expect(Pathname.new(migration_file(migration))).not_to exist
24+
expect(migration).not_to exist
2525
end
2626
end
2727

@@ -35,12 +35,11 @@
3535
migration = file("db/migrate/update_function_test_to_version_2.rb")
3636
function_definition = file("db/functions/test_v02.sql")
3737

38-
run_generator ["test"]
38+
run_generator(described_class, ["test"])
3939

4040
expect(function_definition).to exist
41-
expect(migration).to be_a_migration
42-
expect(migration_file(migration))
43-
.to contain("UpdateFunctionTestToVersion2")
41+
expect_to_be_a_migration(migration)
42+
expect(migration_content(migration)).to include("UpdateFunctionTestToVersion2")
4443
end
4544
end
4645
end

spec/generators/fx/trigger/trigger_generator_spec.rb

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,41 +6,54 @@
66
migration = file("db/migrate/create_trigger_test.rb")
77
trigger_definition = file("db/triggers/test_v01.sql")
88

9-
run_generator ["test", "table_name" => "some_table"]
9+
run_generator(
10+
described_class,
11+
["test", {"table_name" => "some_table"}]
12+
)
1013

1114
expect(trigger_definition).to exist
12-
expect(migration).to be_a_migration
13-
expect(migration_file(migration)).to contain("CreateTriggerTest")
14-
expect(migration_file(migration)).to contain("on: :some_table")
15+
expect_to_be_a_migration(migration)
16+
expect(migration_content(migration)).to include("CreateTriggerTest")
17+
expect(migration_content(migration)).to include("on: :some_table")
1518
end
1619

1720
context "when passed --no-migration" do
1821
it "creates a only trigger definition file" do
1922
migration = file("db/migrate/create_trigger_test.rb")
2023
trigger_definition = file("db/triggers/test_v01.sql")
2124

22-
run_generator ["test", {"table_name" => "some_table"}, "--no-migration"]
25+
run_generator(
26+
described_class,
27+
["test", {"table_name" => "some_table"}],
28+
{migration: false}
29+
)
2330

2431
expect(trigger_definition).to exist
25-
expect(Pathname.new(migration_file(migration))).not_to exist
32+
expect(migration).not_to exist
2633
end
2734
end
2835

2936
it "supports naming the table as `on` aswell as `table_name`" do
3037
migration = file("db/migrate/create_trigger_test.rb")
3138
trigger_definition = file("db/triggers/test_v01.sql")
3239

33-
run_generator ["test", "on" => "some_table"]
40+
run_generator(
41+
described_class,
42+
["test", {"on" => "some_table"}]
43+
)
3444

3545
expect(trigger_definition).to exist
36-
expect(migration).to be_a_migration
37-
expect(migration_file(migration)).to contain("CreateTriggerTest")
38-
expect(migration_file(migration)).to contain("on: :some_table")
46+
expect_to_be_a_migration(migration)
47+
expect(migration_content(migration)).to include("CreateTriggerTest")
48+
expect(migration_content(migration)).to include("on: :some_table")
3949
end
4050

4151
it "requires `table_name` or `on` to be specified" do
4252
expect do
43-
run_generator ["test", "foo" => "some_table"]
53+
run_generator(
54+
described_class,
55+
["test", {"foo" => "some_table"}]
56+
)
4457
end.to raise_error(ArgumentError)
4558
end
4659

@@ -49,11 +62,14 @@
4962
migration = file("db/migrate/update_trigger_test_to_version_2.rb")
5063
trigger_definition = file("db/triggers/test_v02.sql")
5164

52-
run_generator ["test", "table_name" => "some_table"]
65+
run_generator(
66+
described_class,
67+
["test", {"table_name" => "some_table"}]
68+
)
5369

5470
expect(trigger_definition).to exist
55-
expect(migration).to be_a_migration
56-
expect(migration_file(migration)).to contain("UpdateTriggerTestToVersion2")
57-
expect(migration_file(migration)).to contain("on: :some_table")
71+
expect_to_be_a_migration(migration)
72+
expect(migration_content(migration)).to include("UpdateTriggerTestToVersion2")
73+
expect(migration_content(migration)).to include("on: :some_table")
5874
end
5975
end

spec/support/generator_setup.rb

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,52 @@
1-
require "ammeter/init"
1+
module GeneratorSetup
2+
RAILS_ROOT = Pathname.new(File.expand_path("../../../tmp/dummy", __dir__)).freeze
3+
MIGRATION_TIMESTAMP_PATTERN = /\A\d{14}_/
4+
5+
def run_generator(generator_class, args = [], options = {})
6+
allow(Rails).to receive(:root).and_return(RAILS_ROOT)
7+
generator = generator_class.new(args, options, destination_root: RAILS_ROOT)
8+
9+
silence_stream($stdout) do
10+
generator.invoke_all
11+
end
12+
end
13+
14+
def file(relative_path)
15+
RAILS_ROOT.join(relative_path)
16+
end
17+
18+
def migration_content(file_path)
19+
migration_path = find_migration_files(file_path).first
20+
return if migration_path.nil?
21+
22+
Pathname.new(migration_path).read
23+
end
24+
25+
def find_migration_files(file_path)
26+
directory = File.dirname(file_path)
27+
basename = File.basename(file_path, ".rb")
28+
Dir.glob(File.join(directory, "*#{basename}.rb"))
29+
end
30+
31+
def expect_to_be_a_migration(pathname)
32+
migration_files = find_migration_files(pathname)
33+
34+
expect(migration_files).to be_present,
35+
"expected #{pathname} to be a migration file"
36+
first_migration = migration_files.first
37+
migration_basename = File.basename(first_migration)
38+
expect(migration_basename).to match(MIGRATION_TIMESTAMP_PATTERN),
39+
"expected #{migration_basename} to have timestamp prefix (format: YYYYMMDDHHMMSS_)"
40+
end
41+
end
242

343
RSpec.configure do |config|
44+
config.include GeneratorSetup, :generator
45+
446
config.before(:each, :generator) do
5-
fake_rails_root = File.expand_path("../../../tmp/dummy", __FILE__)
6-
allow(Rails).to receive(:root).and_return(Pathname.new(fake_rails_root))
47+
FileUtils.rm_rf(GeneratorSetup::RAILS_ROOT) if File.exist?(GeneratorSetup::RAILS_ROOT)
48+
FileUtils.mkdir_p(GeneratorSetup::RAILS_ROOT)
749

8-
destination fake_rails_root
9-
prepare_destination
50+
allow(Rails).to receive(:root).and_return(Pathname.new(GeneratorSetup::RAILS_ROOT))
1051
end
1152
end

0 commit comments

Comments
 (0)