Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Test case for rails/rails #28536
# frozen_string_literal: true
begin
require "bundler/inline"
rescue LoadError => e
$stderr.puts "Bundler version 1.10 or later is required. Please update your Bundler"
raise e
end
gemfile(true) do
source "https://rubygems.org"
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
gem "rails", github: "rails/rails"
gem "arel", github: "rails/arel"
gem "sqlite3"
end
require "active_record"
require "minitest/autorun"
require "logger"
# This connection will do for database-independent bug reports.
ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
ActiveRecord::Base.logger = Logger.new(STDOUT)
ActiveRecord::Schema.define do
create_table :posts, force: true do |t|
end
create_table :comments, force: true do |t|
t.integer :post_id
end
end
class Post < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :post
before_create do
throw(:abort)
end
end
class BugTest < Minitest::Test
def setup
Post.delete_all
Comment.delete_all
end
def test_saving_on_an_existing_record
post = Post.create!
comment = post.comments.build
post.save
assert_equal 0, Comment.count
assert_equal 0, Post.count # fails
end
def test_saving_on_a_new_record
post = Post.new
comment = post.comments.build
post.save
assert_equal 0, Comment.count
assert_equal 0, Post.count # fails
end
def test_saving_bang_on_a_new_record
post = Post.new
comment = post.comments.build
post.save!
assert_equal 0, Comment.count
assert_equal 0, Post.count # fails
end
def test_saving_bang_on_comment_with_a_new_post
post = Post.new
comment = post.comments.build
assert_raises ActiveRecord::RecordNotSaved do
comment.save!
end
assert_equal 0, Comment.count
assert_equal 0, Post.count
end
def test_saving_bang_with_transaction
assert_raises ActiveRecord::RecordNotSaved do
ActiveRecord::Base.transaction do
post = Post.create!
comment = post.comments.build
comment.save!
end
end
assert_equal 0, Comment.count
assert_equal 0, Post.count
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.