Skip to content

Commit 80d45cc

Browse files
committed
Improve spec resiliency to resolve random failures
1 parent e351dbe commit 80d45cc

File tree

9 files changed

+32
-29
lines changed

9 files changed

+32
-29
lines changed

spec/acceptance/user_manages_triggers_spec.rb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
require "acceptance_helper"
22

33
RSpec.describe "User manages triggers" do
4+
before do
5+
connection = ActiveRecord::Base.connection
6+
connection.execute "DROP TABLE IF EXISTS users;"
7+
end
8+
49
it "handles simple triggers" do
510
successfully "rails generate model user name:string upper_name:string"
611
successfully "rails generate fx:function uppercase_users_name"
@@ -15,7 +20,7 @@
1520
EOS
1621
successfully "rails generate fx:trigger uppercase_users_name table_name:users"
1722
write_trigger_definition "uppercase_users_name_v01", <<~EOS
18-
CREATE TRIGGER uppercase_users_name
23+
CREATE OR REPLACE TRIGGER uppercase_users_name
1924
BEFORE INSERT ON users
2025
FOR EACH ROW
2126
EXECUTE FUNCTION uppercase_users_name();
@@ -33,7 +38,7 @@
3338

3439
successfully "rails generate fx:trigger uppercase_users_name table_name:users"
3540
write_trigger_definition "uppercase_users_name_v02", <<~EOS
36-
CREATE TRIGGER uppercase_users_name
41+
CREATE OR REPLACE TRIGGER uppercase_users_name
3742
BEFORE UPDATE ON users
3843
FOR EACH ROW
3944
EXECUTE FUNCTION uppercase_users_name();

spec/features/triggers/migrations_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
RSpec.describe "Trigger migrations", :db do
44
around do |example|
55
connection.execute <<~EOS
6-
CREATE TABLE users (
6+
CREATE TABLE IF NOT EXISTS users (
77
id int PRIMARY KEY,
88
name varchar(256),
99
upper_name varchar(256)
@@ -19,7 +19,7 @@
1919
$$ LANGUAGE plpgsql;
2020
EOS
2121
sql_definition = <<~EOS
22-
CREATE TRIGGER uppercase_users_name
22+
CREATE OR REPLACE TRIGGER uppercase_users_name
2323
BEFORE INSERT ON users
2424
FOR EACH ROW
2525
EXECUTE FUNCTION uppercase_users_name();

spec/features/triggers/revert_spec.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
RSpec.describe "Reverting migrations", :db do
44
around do |example|
55
connection.execute <<~EOS
6-
CREATE TABLE users (
6+
CREATE TABLE IF NOT EXISTS users (
77
id int PRIMARY KEY,
88
name varchar(256),
99
upper_name varchar(256)
@@ -19,7 +19,7 @@
1919
$$ LANGUAGE plpgsql;
2020
EOS
2121
sql_definition = <<~EOS
22-
CREATE TRIGGER uppercase_users_name
22+
CREATE OR REPLACE TRIGGER uppercase_users_name
2323
BEFORE INSERT ON users
2424
FOR EACH ROW
2525
EXECUTE FUNCTION uppercase_users_name();
@@ -68,7 +68,7 @@ def change
6868
connection.create_trigger(:uppercase_users_name)
6969

7070
sql_definition = <<~EOS
71-
CREATE TRIGGER uppercase_users_name
71+
CREATE OR REPLACE TRIGGER uppercase_users_name
7272
BEFORE UPDATE ON users
7373
FOR EACH ROW
7474
EXECUTE FUNCTION uppercase_users_name();

spec/fx/adapters/postgres/functions_spec.rb

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,8 @@
1515

1616
functions = Fx::Adapters::Postgres::Functions.new(connection).all
1717

18-
first = functions.first
19-
expect(functions.size).to eq(1)
20-
expect(first.name).to eq("test")
21-
expect(first.definition).to eq(<<~EOS)
18+
expect(functions.map(&:name)).to include("test")
19+
expect(functions.detect { |f| f.name == "test" }.definition).to eq(<<~EOS)
2220
CREATE OR REPLACE FUNCTION public.test()
2321
RETURNS text
2422
LANGUAGE plpgsql

spec/fx/adapters/postgres/triggers_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
it "returns `Trigger` objects" do
66
connection = ActiveRecord::Base.connection
77
connection.execute <<~EOS
8-
CREATE TABLE users (
8+
CREATE TABLE IF NOT EXISTS users (
99
id int PRIMARY KEY,
1010
name varchar(256),
1111
upper_name varchar(256)
@@ -21,7 +21,7 @@
2121
$$ LANGUAGE plpgsql;
2222
EOS
2323
connection.execute <<~EOS
24-
CREATE TRIGGER uppercase_users_name
24+
CREATE OR REPLACE TRIGGER uppercase_users_name
2525
BEFORE INSERT ON users
2626
FOR EACH ROW
2727
EXECUTE FUNCTION uppercase_users_name();

spec/fx/adapters/postgres_spec.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
describe "#create_trigger" do
2323
it "successfully creates a trigger" do
2424
connection.execute <<~EOS
25-
CREATE TABLE users (
25+
CREATE TABLE IF NOT EXISTS users (
2626
id int PRIMARY KEY,
2727
name varchar(256),
2828
upper_name varchar(256)
@@ -40,7 +40,7 @@
4040
EOS
4141
adapter.create_trigger(
4242
<<~EOS
43-
CREATE TRIGGER uppercase_users_name
43+
CREATE OR REPLACE TRIGGER uppercase_users_name
4444
BEFORE INSERT ON users
4545
FOR EACH ROW
4646
EXECUTE FUNCTION uppercase_users_name();
@@ -107,14 +107,14 @@
107107
EOS
108108
)
109109

110-
expect(adapter.functions.map(&:name)).to eq ["test"]
110+
expect(adapter.functions.map(&:name)).to include("test")
111111
end
112112
end
113113

114114
describe "#triggers" do
115115
it "finds triggers and builds Fx::Trigger objects" do
116116
connection.execute <<~EOS
117-
CREATE TABLE users (
117+
CREATE TABLE IF NOT EXISTS users (
118118
id int PRIMARY KEY,
119119
name varchar(256),
120120
upper_name varchar(256)
@@ -131,7 +131,7 @@
131131
$$ LANGUAGE plpgsql;
132132
EOS
133133
sql_definition = <<~EOS
134-
CREATE TRIGGER uppercase_users_name
134+
CREATE OR REPLACE TRIGGER uppercase_users_name
135135
BEFORE INSERT ON users
136136
FOR EACH ROW
137137
EXECUTE FUNCTION uppercase_users_name()

spec/fx/definition_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
context "representing a trigger definition" do
5959
it "returns the content of a trigger definition" do
6060
sql_definition = <<~EOS
61-
CREATE TRIGGER check_update
61+
CREATE OR REPLACE TRIGGER check_update
6262
BEFORE UPDATE ON accounts
6363
FOR EACH ROW
6464
EXECUTE FUNCTION check_account_update();

spec/fx/schema_dumper_spec.rb

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
$$ LANGUAGE plpgsql;
1212
EOS
1313
connection.create_function :my_function, sql_definition: sql_definition
14-
connection.create_table :my_table
14+
connection.create_table :my_table, if_not_exists: true
1515
stream = StringIO.new
1616
output = stream.string
1717

@@ -33,7 +33,7 @@
3333
$$ LANGUAGE plpgsql;
3434
EOS
3535
connection.create_function :my_function, sql_definition: sql_definition
36-
connection.create_table :my_table
36+
connection.create_table :my_table, if_not_exists: true
3737
stream = StringIO.new
3838
output = stream.string
3939

@@ -48,7 +48,7 @@
4848

4949
it "does not dump a create_function for aggregates in the database" do
5050
sql_definition = <<~EOS
51-
CREATE OR REPLACE FUNCTION test(text, text)
51+
CREATE OR REPLACE FUNCTION test_with_args(text, text)
5252
RETURNS text AS $$
5353
BEGIN
5454
RETURN 'test';
@@ -57,9 +57,9 @@
5757
EOS
5858

5959
aggregate_sql_definition = <<~EOS
60-
CREATE AGGREGATE aggregate_test(text)
60+
CREATE OR REPLACE AGGREGATE aggregate_test(text)
6161
(
62-
sfunc = test,
62+
sfunc = test_with_args,
6363
stype = text
6464
);
6565
EOS
@@ -71,14 +71,14 @@
7171
dump(connection: connection, stream: stream)
7272

7373
output = stream.string
74-
expect(output).to include("create_function :test, sql_definition: <<-'SQL'")
74+
expect(output).to include("create_function :test_with_args, sql_definition: <<-'SQL'")
7575
expect(output).to include("RETURN 'test';")
7676
expect(output).not_to include("aggregate_test")
7777
end
7878

7979
it "dumps a create_trigger for a trigger in the database" do
8080
connection.execute <<~EOS
81-
CREATE TABLE users (
81+
CREATE TABLE IF NOT EXISTS users (
8282
id int PRIMARY KEY,
8383
name varchar(256),
8484
upper_name varchar(256)
@@ -94,7 +94,7 @@
9494
$$ LANGUAGE plpgsql;
9595
EOS
9696
sql_definition = <<~EOS
97-
CREATE TRIGGER uppercase_users_name
97+
CREATE OR REPLACE TRIGGER uppercase_users_name
9898
BEFORE INSERT ON users
9999
FOR EACH ROW
100100
EXECUTE FUNCTION uppercase_users_name();

spec/fx/trigger_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@
3939
it "returns a schema compatible version of the trigger" do
4040
trigger = Fx::Trigger.new(
4141
"name" => "uppercase_users_name",
42-
"definition" => "CREATE TRIGGER uppercase_users_name ..."
42+
"definition" => "CREATE OR REPLACE TRIGGER uppercase_users_name ..."
4343
)
4444

4545
expect(trigger.to_schema).to eq(<<-EOS)
4646
create_trigger :uppercase_users_name, sql_definition: <<-\SQL
47-
CREATE TRIGGER uppercase_users_name ...
47+
CREATE OR REPLACE TRIGGER uppercase_users_name ...
4848
SQL
4949
EOS
5050
end

0 commit comments

Comments
 (0)