Skip to content

Instantly share code, notes, and snippets.

@bbonamin
Created July 20, 2020 20:43
Show Gist options
  • Select an option

  • Save bbonamin/a32217152e1a0e2484d28231cd1630a2 to your computer and use it in GitHub Desktop.

Select an option

Save bbonamin/a32217152e1a0e2484d28231cd1630a2 to your computer and use it in GitHub Desktop.

Revisions

  1. bbonamin created this gist Jul 20, 2020.
    77 changes: 77 additions & 0 deletions rails_inline.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,77 @@
    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