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) # => [#, @details={}, @messages={}>, #, @details={:url=>[{:error=>:blank}]}, @messages={:url=>["can't be blank"]}>] end end