Skip to content

Instantly share code, notes, and snippets.

@bbonamin
Created July 20, 2020 20:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bbonamin/a32217152e1a0e2484d28231cd1630a2 to your computer and use it in GitHub Desktop.
Save bbonamin/a32217152e1a0e2484d28231cd1630a2 to your computer and use it in GitHub Desktop.
Rails Parent -> Child creation
require 'bundler/inline'
gemfile(true) do
source 'https://rubygems.org'
gem 'rails', '6.0.3'
gem 'pg'
gem 'pry'
end
require 'active_record'
require 'minitest/autorun'
require 'logger'
ActiveRecord::Base.establish_connection(adapter: 'postgresql', database: 'test_test_test')
ActiveRecord::Base.logger = Logger.new(STDOUT)
ActiveRecord::Schema.define do
create_table :sequences, force: true do |t|
t.string :name
# ...
end
create_table :frames, force: true do |t|
t.references :sequence, null: false
t.string :url
end
end
class Sequence < ActiveRecord::Base
has_many :frames, dependent: :destroy
end
class Frame < ActiveRecord::Base
belongs_to :sequence
validates_presence_of :url
end
class SequenceIsCreatedWithFrames < ActiveSupport::TestCase
def setup
@sequence = Sequence.new(name: 'Foo')
@frame = @sequence.frames.build(url: 'http://example.com')
@sequence.save!
end
def test_models_are_persisted
assert_equal true, @sequence.persisted?
assert_equal true, @frame.persisted?
end
def test_frame_belongs_to_sequence
assert_includes @sequence.frames, @frame
end
end
class SequenceWithErrorsInFramesIsNotSaved < ActiveSupport::TestCase
def setup
@sequence = Sequence.new(name: 'Foo')
@frame1 = @sequence.frames.build(url: 'http://example.com')
@frame2 = @sequence.frames.build
@sequence.save
end
def test_models_are_persisted
assert_equal false, @sequence.persisted?
end
def test_frames_have_errors
assert_includes @sequence.errors.full_messages, 'Frames is invalid'
# @sequence.frames.map(&:errors)
# => [#<ActiveModel::Errors:0x00007f90aaa06dc8 @base=#<Frame:0x00007f908aa89680 id: nil, sequence_id: nil, url: "http://example.com">, @details={}, @messages={}>,
#<ActiveModel::Errors:0x00007f90aaa05ae0 @base=#<Frame:0x00007f90aaa17768 id: nil, sequence_id: nil, url: nil>, @details={:url=>[{:error=>:blank}]}, @messages={:url=>["can't be blank"]}>]
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment