1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/activerecord/test/cases/excluding_test.rb
Glen Crawford 690fdbb2b9 Implemented ActiveRecord::Relation#excluding method.
This method excludes the specified record (or collection of records) from the resulting relation.

For example: `Post.excluding(post)`, `Post.excluding(post_one, post_two)`, and `post.comments.excluding(comment)`.

This is short-hand for `Post.where.not(id: post.id)` (for a single record) and `Post.where.not(id: [post_one.id, post_two.id])` (for a collection).
2021-02-17 00:16:09 +11:00

71 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