Sha256: 8e35ad6ccfefbbe893f0cd1e204d95814b3424c616cc933208cba6551575b14e

Contents?: true

Size: 1.43 KB

Versions: 1

Compression:

Stored size: 1.43 KB

Contents

require 'spec_helper'
require 'ronin/db/model/has_unique_name'

describe Ronin::DB::Model::HasUniqueName do
  class TestModelHasUniqueName < ActiveRecord::Base
    include Ronin::DB::Model::HasUniqueName

    self.table_name = 'test_model_has_unique_name'
  end

  let(:model) { TestModelHasUniqueName }

  before(:all) do
    ActiveRecord::Base.connection.create_table :test_model_has_unique_name do |t|
      t.string :name
    end
  end

  describe ".included" do
    subject { model }

    it "should include Ronin::DB::Model" do
      expect(subject.ancestors).to include(Ronin::DB::Model)
    end

    it "should include Ronin::DB::Model::HasName::InstanceMethods" do
      expect(subject.ancestors).to include(Ronin::DB::Model::HasName::InstanceMethods)
    end

    it "should define a name attribute" do
      expect(subject.new).to respond_to(:name)
      expect(subject.new).to respond_to(:name=)
    end
  end

  describe "validations" do
    subject { model }

    it "should require a name" do
      record = subject.new
      expect(record).to_not be_valid

      record.name = 'foo'
      expect(record).to be_valid
    end

    context "when the given name already exists in the table" do
      let(:name) { 'foo' }

      before { model.create(name: name) }

      it "must require a unique name" do
        record = subject.new(name: name)

        expect(record).to_not be_valid
      end

      after { model.destroy_all }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ronin-db-activerecord-0.1.0.beta1 spec/model/has_unique_name_spec.rb