Skip to content

Commit

Permalink
Added a test with active_storage (issue ActsAsParanoid#103)
Browse files Browse the repository at this point in the history
  • Loading branch information
aymeric-ledorze committed Nov 23, 2020
1 parent 15bebc4 commit 2035b63
Show file tree
Hide file tree
Showing 8 changed files with 100 additions and 1 deletion.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ gemfiles/*.lock
.idea/
.ruby-version
coverage/
test/tmp
2 changes: 2 additions & 0 deletions gemfiles/active_record_52.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

source "https://rubygems.org"

gem "activejob", "~> 5.2.0", require: "active_job"
gem "activerecord", "~> 5.2.0", require: "active_record"
gem "activesupport", "~> 5.2.0", require: "active_support"
gem "activestorage", "~> 5.2.0"

# Development dependencies
group :development do
Expand Down
2 changes: 2 additions & 0 deletions gemfiles/active_record_60.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

source "https://rubygems.org"

gem "activejob", "~> 6.0.0", require: "active_job"
gem "activerecord", "~> 6.0.0", require: "active_record"
gem "activesupport", "~> 6.0.0", require: "active_support"
gem "activestorage", "~> 6.0.0"

# Development dependencies
group :development do
Expand Down
2 changes: 2 additions & 0 deletions gemfiles/active_record_edge.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
source "https://rubygems.org"

github "rails/rails" do
gem "activejob", require: "active_job"
gem "activerecord", require: "active_record"
gem "activesupport", require: "active_support"
gem "activestorage"
end

# Development dependencies
Expand Down
1 change: 1 addition & 0 deletions test/fixtures/hello.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Hello, world!
15 changes: 15 additions & 0 deletions test/test_active_storage.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
require "test_helper"

class ParanoidActiveStorageTest < ParanoidBaseTest
def create_file_blob(filename: "hello.txt", content_type: "text/plain", metadata: nil)
ActiveStorage::Blob.create_after_upload! io: file_fixture(filename).open, filename: filename, content_type: content_type, metadata: metadata
end

def test_paranoid_active_storage
unless ENABLE_ACTIVE_STORAGE
skip "ActiveStorage is only available for Rails >= 5.2"
end
pt = ParanoidTime.create(main_file: create_file_blob, files: [create_file_blob, create_file_blob], undependent_main_file: create_file_blob, undependent_files: [create_file_blob, create_file_blob])
pt.destroy
end
end
2 changes: 1 addition & 1 deletion test/test_core.rb
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,7 @@ def test_paranoid_destroy_with_update_callbacks
@paranoid_with_callback.destroy
end
ParanoidWithCallback.transaction do
@paranoid_with_callback.update_attributes(:name => "still paranoid")
@paranoid_with_callback.update(:name => "still paranoid")
end

assert_equal 1, @paranoid_with_callback.called_before_destroy
Expand Down
76 changes: 76 additions & 0 deletions test/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,43 @@
require "acts_as_paranoid"
require "minitest/autorun"

ENABLE_ACTIVE_STORAGE = ActiveRecord::VERSION::MAJOR > 5 || (ActiveRecord::VERSION::MAJOR == 5 && ActiveRecord::VERSION::MINOR >= 2)
if ENABLE_ACTIVE_STORAGE
# load ActiveStorage
require "global_id"
ActiveRecord::Base.include(GlobalID::Identification)
GlobalID.app = "ActsAsParanoid"

require "active_job"
ActiveJob::Base.queue_adapter = :test

require "active_support/cache"

require "active_storage"
require "active_storage/attached"
require "active_storage/service/disk_service"
if ActiveRecord::VERSION::MAJOR >= 6
require "active_storage/reflection"
ActiveRecord::Base.include(ActiveStorage::Reflection::ActiveRecordExtensions)
ActiveRecord::Reflection.singleton_class.prepend(ActiveStorage::Reflection::ReflectionExtension)
ActiveRecord::Base.include(ActiveStorage::Attached::Model)

if ActiveRecord::VERSION::MINOR == 0
module Rails
def self.autoloaders
Object.new.tap{|o| def o.zeitwerk_enabled?; false; end}
end
end
end
else
ActiveRecord::Base.extend(ActiveStorage::Attached::Macros)
end
$: << "#{Gem.loaded_specs["activestorage"].full_gem_path}/app/models/"
Dir.glob("#{Gem.loaded_specs["activestorage"].full_gem_path}/app/models/active_storage/*").each{|f| require f}
Dir.glob("#{Gem.loaded_specs["activestorage"].full_gem_path}/app/jobs/active_storage/*").each{|f| require f}
ActiveStorage::Blob.service = ActiveStorage::Service::DiskService.new(root: "test/tmp")
end

# Silence deprecation halfway through the test
I18n.enforce_available_locales = true

Expand Down Expand Up @@ -231,6 +268,29 @@ def setup_db

timestamps t
end

if ENABLE_ACTIVE_STORAGE
create_table :active_storage_attachments do |t|
t.string :name, null: false
t.string :record_type, null: false
t.bigint :record_id, null: false
t.bigint :blob_id, null: false
t.datetime :created_at, null: false
t.index [:blob_id], name: "index_active_storage_attachments_on_blob_id"
t.index [:record_type, :record_id, :name, :blob_id], name: "index_active_storage_attachments_uniqueness", unique: true
end

create_table :active_storage_blobs do |t|
t.string :key, null: false
t.string :filename, null: false
t.string :content_type
t.text :metadata
t.bigint :byte_size, null: false
t.string :checksum, null: false
t.datetime :created_at, null: false
t.index [:key], name: "index_active_storage_blobs_on_key", unique: true
end
end
end
end
# rubocop:enable Metrics/AbcSize
Expand All @@ -247,6 +307,10 @@ def teardown_db
end
end

def clean_active_storage_attachments
Dir.glob("test/tmp/*").each{|f| FileUtils.rm_r(f)}
end

class ParanoidTime < ActiveRecord::Base
acts_as_paranoid

Expand All @@ -260,6 +324,13 @@ class ParanoidTime < ActiveRecord::Base
has_one :has_one_not_paranoid, dependent: :destroy

belongs_to :not_paranoid, dependent: :destroy

if ENABLE_ACTIVE_STORAGE
has_one_attached :main_file
has_many_attached :files
has_one_attached :undependent_main_file, dependent: false
has_many_attached :undependent_files, dependent: false
end
end

class ParanoidBoolean < ActiveRecord::Base
Expand Down Expand Up @@ -458,6 +529,10 @@ class ParanoidHasManyAsParent < ActiveRecord::Base
end

class ParanoidBaseTest < ActiveSupport::TestCase
if ENABLE_ACTIVE_STORAGE
self.file_fixture_path = 'test/fixtures'
end

def setup
setup_db

Expand All @@ -473,6 +548,7 @@ def setup

def teardown
teardown_db
clean_active_storage_attachments
end

def assert_empty(collection)
Expand Down

0 comments on commit 2035b63

Please sign in to comment.