Sha256: fc700a354065e374928230f467f7a82da336dc92e09ecf588a5b1ab5fb0720be

Contents?: true

Size: 1.97 KB

Versions: 1

Compression:

Stored size: 1.97 KB

Contents

require 'test_helper'

class Superstore::AttributesTest < Superstore::TestCase
  class TestIssue < Superstore::Base
    self.table_name = 'issues'

    attribute :enabled, type: :boolean
    attribute :rating, type: :float
    attribute :price, type: :integer
    attribute :orders, type: :json
    attribute :name, type: :string
    attribute :age_range, type: :integer_range
  end

  class TestChildIssue < TestIssue
    attribute :description, type: :string
  end

  test 'attributes not shared' do
    assert_nothing_raised { Issue.new.description }
    assert_raise(NoMethodError) { TestIssue.new.description }
    assert_nothing_raised { TestChildIssue.new.description }
  end

  test 'boolean attribute' do
    issue = TestIssue.create! enabled: '1'
    assert_equal true, issue.enabled

    issue = TestIssue.find issue.id
    assert_equal true, issue.enabled
  end

  test 'float attribute' do
    issue = TestIssue.create! rating: '4.5'
    assert_equal 4.5, issue.rating

    issue = TestIssue.find issue.id
    assert_equal(4.5, issue.rating)
  end

  test 'integer attribute' do
    issue = TestIssue.create! price: '101'
    assert_equal 101, issue.price

    issue = TestIssue.find issue.id
    assert_equal(101, issue.price)

    issue = TestIssue.new price: ''
    assert_nil issue.price
  end

  test 'json attribute' do
    issue = TestIssue.create! orders: {'a' => 'b'}
    assert_equal({'a' => 'b'}, issue.orders)

    issue = TestIssue.find issue.id
    assert_equal({'a' => 'b'}, issue.orders)
  end

  test 'string attribute' do
    issue = TestIssue.create! name: 'hola'
    assert_equal('hola', issue.name)

    issue = TestIssue.find issue.id
    assert_equal('hola', issue.name)

    issue = TestIssue.create! name: 42
    assert_equal '42', issue.name
  end

  test 'integer_range' do
    issue = TestIssue.create! age_range: ['70', nil]
    assert_equal 70..Float::INFINITY, issue.age_range

    issue = TestIssue.find issue.id
    assert_equal 70..Float::INFINITY, issue.age_range
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
superstore-2.5.0 test/unit/attributes_test.rb