@@ -66,6 +66,66 @@ describe "Repository(Postgres)#query" do
6666 user.referrer.not_nil!.uuid.should be_a(UUID )
6767 end
6868 end
69+
70+ context " in a transaction" do
71+ db = repo.db
72+ query = User
73+ .update
74+ .set(favorite_numbers: [17 ])
75+ .where(uuid: user.uuid.not_nil!)
76+ .returning(:favorite_numbers )
77+
78+ repo.db.transaction do |tx |
79+ repo.db = tx
80+ repo.query(query)
81+ ensure
82+ repo.db = db
83+ end
84+
85+ it " updates the user" do
86+ query = User .query
87+ .select(:favorite_numbers , :uuid )
88+ .where(uuid: user.uuid.not_nil!)
89+
90+ updated_user = repo.query(query).first
91+ updated_user.favorite_numbers.should eq([17 ])
92+ end
93+
94+ context " raising an error" do
95+ error_was_raised = false
96+
97+ query = User
98+ .update
99+ .set(favorite_numbers: [13 ])
100+ .where(uuid: user.uuid.not_nil!)
101+ .returning(:favorite_numbers )
102+
103+ begin
104+ repo.db.transaction do |tx |
105+ repo.db = tx
106+ repo.query(query)
107+ raise " error"
108+ ensure
109+ repo.db = db
110+ end
111+ rescue
112+ error_was_raised = true
113+ end
114+
115+ it " raises the error" do
116+ error_was_raised.should be_truthy
117+ end
118+
119+ it " rolls back the transaction" do
120+ query = User .query
121+ .select(:favorite_numbers , :uuid )
122+ .where(uuid: user.uuid.not_nil!)
123+
124+ updated_user = repo.query(query).first
125+ updated_user.favorite_numbers.should_not eq([13 ])
126+ end
127+ end
128+ end
69129 end
70130
71131 describe " where" do
0 commit comments