mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
72 lines
2.2 KiB
Ruby
72 lines
2.2 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
require "cases/helper"
|
||
|
require "models/post"
|
||
|
require "models/comment"
|
||
|
|
||
|
class ExcludingTest < ActiveRecord::TestCase
|
||
|
fixtures :posts, :comments
|
||
|
|
||
|
def test_result_set_does_not_include_single_excluded_record
|
||
|
post = posts(:welcome)
|
||
|
|
||
|
assert_not_includes Post.excluding(post).to_a, post
|
||
|
end
|
||
|
|
||
|
def test_result_set_does_not_include_collection_of_excluded_records
|
||
|
post_welcome = posts(:welcome)
|
||
|
post_thinking = posts(:thinking)
|
||
|
|
||
|
relation = Post.excluding(post_welcome, post_thinking)
|
||
|
|
||
|
assert_not_includes relation.to_a, post_welcome
|
||
|
assert_not_includes relation.to_a, post_thinking
|
||
|
end
|
||
|
|
||
|
def test_result_set_through_association_does_not_include_single_excluded_record
|
||
|
post = posts(:welcome)
|
||
|
comment_greetings = comments(:greetings)
|
||
|
comment_more_greetings = comments(:more_greetings)
|
||
|
|
||
|
relation = post.comments.excluding(comment_greetings)
|
||
|
|
||
|
assert_not_includes relation.to_a, comment_greetings
|
||
|
assert_includes relation.to_a, comment_more_greetings
|
||
|
end
|
||
|
|
||
|
def test_result_set_through_association_does_not_include_collection_of_excluded_records
|
||
|
post = posts(:welcome)
|
||
|
comment_greetings = comments(:greetings)
|
||
|
comment_more_greetings = comments(:more_greetings)
|
||
|
|
||
|
relation = post.comments.excluding([comment_greetings, comment_more_greetings])
|
||
|
|
||
|
assert_not_includes relation.to_a, comment_greetings
|
||
|
assert_not_includes relation.to_a, comment_more_greetings
|
||
|
end
|
||
|
|
||
|
def test_raises_on_no_arguments
|
||
|
exception = assert_raises ArgumentError do
|
||
|
Post.excluding()
|
||
|
end
|
||
|
assert_equal "You must pass at least one Post object to #excluding.", exception.message
|
||
|
end
|
||
|
|
||
|
def test_raises_on_empty_collection_argument
|
||
|
exception = assert_raises ArgumentError do
|
||
|
Post.excluding([])
|
||
|
end
|
||
|
assert_equal "You must pass at least one Post object to #excluding.", exception.message
|
||
|
end
|
||
|
|
||
|
def test_raises_on_record_from_different_class
|
||
|
post = posts(:welcome)
|
||
|
comment = comments(:greetings)
|
||
|
|
||
|
exception = assert_raises ArgumentError do
|
||
|
Post.excluding(post, comment)
|
||
|
end
|
||
|
assert_equal "You must only pass a single or collection of Post objects to #excluding.", exception.message
|
||
|
end
|
||
|
end
|