spec/unit/modules/enum_spec.rb in ably-0.8.15 vs spec/unit/modules/enum_spec.rb in ably-1.0.0

- old
+ new

@@ -39,10 +39,45 @@ it 'converts integer index' do expect(subject.ENUMEXAMPLE(0)).to eql(enum.get(:value_zero)) end end + context 'using include? to compare Enum values' do + subject { enum } + + it 'allows same type comparison' do + expect([subject.ValueZero].include?(subject.ValueZero)).to eql(true) + end + + it 'allows different type comparison 1' do + expect([subject.ValueZero].include?(:value_zero)).to eql(true) + end + + it 'allows different type comparison 2' do + skip 'Unless we monkeypath Symbols, the == operator is never invoked' + expect([:value_zero].include?(subject.ValueZero)).to eql(true) + end + + context '#match_any? replacement for include?' do + it 'matches any value in the arguments provided' do + expect(subject.ValueZero.match_any?(:value_foo, :value_zero)).to eql(true) + end + + it 'returns false if there are no matches in any value in the arguments provided' do + expect(subject.ValueZero.match_any?(:value_x, :value_y)).to eql(false) + end + end + end + + context 'class method #to_sym_arr' do + subject { enum } + + it 'returns all keys as symbols' do + expect(enum.to_sym_arr).to contain_exactly(:value_zero, :value_1, :value_snake_case_2, :sentence_case) + end + end + context 'defined Enum from Array class' do subject { enum } it 'provides a MixedCase const for each provided value' do expect(subject.ValueZero).to be_a(subject) @@ -207,9 +242,43 @@ subject { ExampleOtherEnum::ENUMEXAMPLE } it 'provides a MixedCase const for each provided value' do expect(subject.One).to be_a(subject) expect(subject.SecondEnum).to be_a(subject) + end + end + + context 'two similar Enums with shared symbol values' do + class ExampleEnumOne + extend Ably::Modules::Enum + ENUMEXAMPLE = ruby_enum('ENUMEXAMPLE', :pear, :orange, :litchi, :apple) + end + + class ExampleEnumTwo + extend Ably::Modules::Enum + ENUMEXAMPLE = ruby_enum('ENUMEXAMPLE', :pear, :grape, :apple) + end + + let(:enum_one) { ExampleEnumOne::ENUMEXAMPLE } + let(:enum_two) { ExampleEnumTwo::ENUMEXAMPLE } + + it 'provides compatability for the equivalent symbol values' do + expect(enum_one.Pear).to eq(enum_two.Pear) + expect(enum_two.Pear).to eq(enum_one.Pear) + expect(enum_one.Apple).to eq(enum_two.Apple) + expect(enum_two.Apple).to eq(enum_one.Apple) + end + + it 'does not consider different symbol values the same' do + expect(enum_one.Orange).to_not eq(enum_two.Grape) + end + + it 'matches symbols when used with a converter method' do + expect(ExampleEnumOne::ENUMEXAMPLE(enum_two.Pear)).to eq(:pear) + end + + it 'fails to match when using an incompatible method with a converter method' do + expect { ExampleEnumOne::ENUMEXAMPLE(enum_two.Grape) }.to raise_error KeyError end end context 'Enum instance' do context '#==' do