forked from rails/rails
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Generate getter and setter methods in mixin
Generated attachment getter and setter methods are created within the model's `GeneratedAssociationMethods` module to allow overriding and composition using `super`. Includes tests for new functionality. Co-authored-by: Josh Susser <josh@hasmanythrough.com> Co-authored-by: Jamon Douglas <terrildouglas@gmail.com>
- Loading branch information
1 parent
6c05728
commit fd0bd1b
Showing
3 changed files
with
62 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,54 @@ | |||
# frozen_string_literal: true | |||
|
|||
require "test_helper" | |||
require "database/setup" | |||
|
|||
class ActiveStorage::AttachmentsTest < ActiveSupport::TestCase | |||
include ActiveJob::TestHelper | |||
|
|||
setup do | |||
@user = User.create!(name: "Josh") | |||
end | |||
|
|||
teardown { ActiveStorage::Blob.all.each(&:purge) } | |||
|
|||
test "overriding has_one_attached methods works" do | |||
# attach blob before messing with getter, which breaks `#attach` | |||
@user.avatar.attach create_blob(filename: "funky.jpg") | |||
|
|||
# inherited only | |||
assert_equal "funky.jpg", @user.avatar.filename.to_s | |||
|
|||
User.class_eval do | |||
def avatar | |||
super.filename.to_s.reverse | |||
end | |||
end | |||
|
|||
# override with super | |||
assert_equal "funky.jpg".reverse, @user.avatar | |||
|
|||
User.send(:remove_method, :avatar) | |||
end | |||
|
|||
test "overriding has_many_attached methods works" do | |||
# attach blobs before messing with getter, which breaks `#attach` | |||
@user.highlights.attach create_blob(filename: "funky.jpg"), create_blob(filename: "wonky.jpg") | |||
|
|||
# inherited only | |||
assert_equal "funky.jpg", @user.highlights.first.filename.to_s | |||
assert_equal "wonky.jpg", @user.highlights.second.filename.to_s | |||
|
|||
User.class_eval do | |||
def highlights | |||
super.reverse | |||
end | |||
end | |||
|
|||
# override with super | |||
assert_equal "wonky.jpg", @user.highlights.first.filename.to_s | |||
assert_equal "funky.jpg", @user.highlights.second.filename.to_s | |||
|
|||
User.send(:remove_method, :highlights) | |||
end | |||
end |