aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Houston <robin.houston@gmail.com>2012-01-31 10:04:47 +0000
committerRobin Houston <robin.houston@gmail.com>2012-01-31 10:04:47 +0000
commit7c6eb09daf0ad55c0286995529a82076d29fdbc8 (patch)
treec873bc13a2b4e0641c7a059e8018947531498e3d
parent4df36f9f06132a926a211590c8e546a5086961d9 (diff)
Avoid need to be db superuser to run tests
Add a patch from louisecrow (https://github.com/mysociety/fixmytransport/blob/master/lib/patches/fixtures_constraint_disabling.rb) that makes it possible to run the tests without being a database superuser.
-rw-r--r--config/environments/test.rb2
-rw-r--r--lib/patches/fixtures_constraint_disabling.rb21
2 files changed, 23 insertions, 0 deletions
diff --git a/config/environments/test.rb b/config/environments/test.rb
index 8d6041ad9..be28c3df6 100644
--- a/config/environments/test.rb
+++ b/config/environments/test.rb
@@ -1,5 +1,7 @@
# Settings specified here will take precedence over those in config/environment.rb
+require 'lib/patches/fixtures_constraint_disabling'
+
# The test environment is used exclusively to run your application's
# test suite. You never need to work with it otherwise. Remember that
# your test database is "scratch space" for the test suite and is wiped
diff --git a/lib/patches/fixtures_constraint_disabling.rb b/lib/patches/fixtures_constraint_disabling.rb
new file mode 100644
index 000000000..7d97e81f7
--- /dev/null
+++ b/lib/patches/fixtures_constraint_disabling.rb
@@ -0,0 +1,21 @@
+# An alternative way of disabling foreign keys in fixture loading in Postgres and
+# does not require superuser permissions
+# http://kopongo.com/2008/7/25/postgres-ri_constrainttrigger-error
+require 'active_record/connection_adapters/postgresql_adapter'
+module ActiveRecord
+ module ConnectionAdapters
+ class PostgreSQLAdapter < AbstractAdapter
+ def disable_referential_integrity(&block)
+ transaction {
+ begin
+ execute "SET CONSTRAINTS ALL DEFERRED"
+ yield
+ ensure
+ execute "SET CONSTRAINTS ALL IMMEDIATE"
+ end
+ }
+ end
+ end
+ end
+end
+