Skip to content

Commit 6eb700d

Browse files
committed
Improve spec resiliency to resolve random failures
1 parent e351dbe commit 6eb700d

File tree

9 files changed

+26
-23
lines changed

9 files changed

+26
-23
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: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@
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)