File tree Expand file tree Collapse file tree 9 files changed +26
-23
lines changed
Expand file tree Collapse file tree 9 files changed +26
-23
lines changed Original file line number Diff line number Diff line change 11require "acceptance_helper"
22
33RSpec . 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"
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();
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();
Original file line number Diff line number Diff line change 33RSpec . 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)
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();
Original file line number Diff line number Diff line change 33RSpec . 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)
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();
Original file line number Diff line number Diff line change 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
Original file line number Diff line number Diff line change 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)
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();
Original file line number Diff line number Diff line change 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)
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();
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)
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()
Original file line number Diff line number Diff line change 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();
Original file line number Diff line number Diff line change 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)
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();
Original file line number Diff line number Diff line change 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: <<-\S QL
47- CREATE TRIGGER uppercase_users_name ...
47+ CREATE OR REPLACE TRIGGER uppercase_users_name ...
4848 SQL
4949 EOS
5050 end
You can’t perform that action at this time.
0 commit comments