1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
require 'spec_helper'
describe Virtus::Attribute, '#set_default_value' do
let(:object) { described_class.build(String, options.merge(:name => name, :default => default)) }
let(:model) { Class.new { def name; 'model'; end; attr_reader :test } }
let(:name) { :test }
let(:instance) { model.new }
let(:options) { {} }
before { object.set_default_value(instance) }
context 'with a nil' do
subject { instance }
let(:default) { nil }
describe '#test' do
subject { super().test }
it { is_expected.to be(nil) }
end
describe '#instance_variables' do
subject { super().instance_variables }
it { is_expected.to include(:'@test') }
end
end
context 'with a non-clonable object' do
subject { instance }
let(:object) { described_class.build('Boolean', options.merge(:name => name, :default => default)) }
let(:default) { true }
describe '#test' do
subject { super().test }
it { is_expected.to be(true) }
end
describe '#instance_variables' do
subject { super().instance_variables }
it { is_expected.to include(:'@test') }
end
end
context 'with a clonable' do
subject { instance }
let(:default) { [] }
describe '#test' do
subject { super().test }
it { is_expected.to eq(default) }
end
describe '#test' do
subject { super().test }
it { is_expected.not_to be(default) }
end
end
context 'with a callable' do
subject { instance }
let(:default) { lambda { |model, attribute| "#{model.name}-#{attribute.name}" } }
describe '#test' do
subject { super().test }
it { is_expected.to eq('model-test') }
end
end
context 'with a symbol' do
subject { instance }
context 'when it is a method name' do
let(:default) { :set_test }
context 'when method is public' do
let(:model) { Class.new { attr_reader :test; def set_test; @test = 'hello world'; end } }
describe '#test' do
subject { super().test }
it { is_expected.to eq('hello world') }
end
end
context 'when method is private' do
let(:model) { Class.new { attr_reader :test; private; def set_test; @test = 'hello world'; end } }
describe '#test' do
subject { super().test }
it { is_expected.to eq('hello world') }
end
end
end
context 'when it is not a method name' do
let(:default) { :hello_world }
describe '#test' do
subject { super().test }
it { is_expected.to eq('hello_world') }
end
end
end
end
|