Description
Issue
Using Minitest and fixtures I will get an error ActiveRecord::StatementInvalid: TinyTds::Error: Cannot truncate table 'active_storage_blobs' because it is being referenced by a FOREIGN KEY constraint.
when I try to run any tests.
Expected behavior
Tests should run without an error.
Actual behavior
When I have in my test helper parallelize(workers: :number_of_processors)
it will give the above error. Changing it to parallelize(workers: 1)
makes it work. I think it has something to do with the timing of disabling the referential integrity but I'm not sure.
How to reproduce
Set up a clean Rails app, add something like ActiveStorage, create a couple of models like User and Post. Create a test for the user and run it.
I've created a demo repo here where this error occurs: https://github.com/erlingur/sqlserver_test
You should be able to clone it, point it at an SQL server and run rails test
to make it blow up (possibly have to run it twice).
I created the app by literally doing the following:
rails new sqlserver_test
bundle add activerecord-sqlserver-adapter
# Change database.yml
rails db:create
rails g model User name
rails g model Post title user:belongs_to
rails active_storage:install
rails db:migrate
# Create the single User test
rails test
Details
- Rails version:
6.1.4.1
- SQL Server adapter version:
6.1.2.1
- TinyTDS version:
2.1.5
- FreeTDS details:
Compile-time settings (established with the "configure" script)
Version: freetds v1.3.3
freetds.conf directory: /opt/homebrew/etc
MS db-lib source compatibility: no
Sybase binary compatibility: yes
Thread safety: yes
iconv library: yes
TDS version: 7.3
iODBC: no
unixodbc: yes
SSPI "trusted" logins: no
Kerberos: yes
OpenSSL: yes
GnuTLS: no
MARS: yes