spec/unit/attributes/destroy_spec.rb in mongoid-history-0.8.3 vs spec/unit/attributes/destroy_spec.rb in mongoid-history-0.8.5

- old
+ new

@@ -1,228 +1,228 @@ -require 'spec_helper' - -describe Mongoid::History::Attributes::Destroy do - before :each do - class ModelOne - include Mongoid::Document - include Mongoid::History::Trackable - - store_in collection: :model_ones - - field :foo - field :b, as: :bar - - track_history on: :foo, modifier_field_optional: true - end - end - - after :each do - Object.send(:remove_const, :ModelOne) - end - - let(:obj_one) { ModelOne.new } - let(:base) { described_class.new(obj_one) } - subject { base } - - describe '#attributes' do - subject { base.attributes } - - describe '#fields' do - before :each do - obj_one.save! - end - - let(:obj_one) { ModelOne.new(foo: 'Foo', bar: 'Bar') } - it { is_expected.to eq('_id' => [obj_one._id, nil], 'foo' => ['Foo', nil], 'version' => [1, nil]) } - end - - describe '#insert_embeds_one_changes' do - before :each do - class ModelTwo - include Mongoid::Document - include Mongoid::History::Trackable - - store_in collection: :model_twos - - embeds_one :emb_two - - track_history on: :fields, modifier_field_optional: true - end - - class EmbTwo - include Mongoid::Document - - field :em_foo - field :em_bar - - embedded_in :model_two - end - end - - after :each do - Object.send(:remove_const, :ModelTwo) - Object.send(:remove_const, :EmbTwo) - end - - let(:obj_two) { ModelTwo.new(emb_two: emb_obj_two) } - let(:emb_obj_two) { EmbTwo.new(em_foo: 'Em-Foo', em_bar: 'Em-Bar') } - let(:base) { described_class.new(obj_two) } - - context 'when relation tracked' do - before :each do - ModelTwo.track_history on: :emb_two, modifier_field_optional: true - obj_two.save! - end - it { expect(subject['emb_two']).to eq [{ '_id' => emb_obj_two._id, 'em_foo' => 'Em-Foo', 'em_bar' => 'Em-Bar' }, nil] } - end - - context 'when relation not tracked' do - before :each do - ModelTwo.track_history on: :fields, modifier_field_optional: true - allow(ModelTwo).to receive(:dynamic_enabled?) { false } - obj_two.save! - end - it { expect(subject['emb_two']).to be_nil } - end - - context 'when relation with alias' do - before :each do - class ModelThree - include Mongoid::Document - include Mongoid::History::Trackable - - store_in collection: :model_threes - embeds_one :emb_three, store_as: :emtr - - track_history on: :emb_three, modifier_field_optional: true - end - - class EmbThree - include Mongoid::Document - - field :em_foo - embedded_in :model_three - end - end - - after :each do - Object.send(:remove_const, :ModelThree) - Object.send(:remove_const, :EmbThree) - end - - before :each do - obj_three.save! - end - - let(:obj_three) { ModelThree.new(emb_three: emb_obj_three) } - let(:emb_obj_three) { EmbThree.new(em_foo: 'Em-Foo') } - let(:base) { described_class.new(obj_three) } - - it { expect(subject['emb_three']).to eq [{ '_id' => emb_obj_three._id, 'em_foo' => 'Em-Foo' }, nil] } - end - - context 'relation with permitted attributes' do - before :each do - ModelTwo.track_history on: [{ emb_two: :em_foo }], modifier_field_optional: true - obj_two.save! - end - - it { expect(subject['emb_two']).to eq [{ '_id' => emb_obj_two._id, 'em_foo' => 'Em-Foo' }, nil] } - end - - context 'when relation object not built' do - before :each do - ModelTwo.track_history on: :emb_two, modifier_field_optional: true - obj_two.save! - end - - let(:obj_two) { ModelTwo.new } - it { expect(subject['emb_two']).to be_nil } - end - end - - describe '#insert_embeds_many_changes' do - context 'Case 1:' do - before :each do - class ModelTwo - include Mongoid::Document - include Mongoid::History::Trackable - - embeds_many :em_twos - track_history on: :fields - end - - class EmTwo - include Mongoid::Document - - field :em_foo - field :em_bar - - embedded_in :model_two - end - end - - after :each do - Object.send(:remove_const, :ModelTwo) - Object.send(:remove_const, :EmTwo) - end - - let(:obj_two) { ModelTwo.new(em_twos: [em_obj_two]) } - let(:em_obj_two) { EmTwo.new(em_foo: 'Em-Foo', em_bar: 'Em-Bar') } - let(:base) { described_class.new(obj_two) } - - context 'when relation tracked' do - before :each do - ModelTwo.track_history on: :em_twos - end - it { expect(subject['em_twos']).to eq [[{ '_id' => em_obj_two._id, 'em_foo' => 'Em-Foo', 'em_bar' => 'Em-Bar' }], nil] } - end - - context 'when relation not tracked' do - before :each do - ModelTwo.track_history on: :fields - end - it { expect(subject['em_twos']).to be_nil } - end - - context 'when relation with permitted attributes for tracking' do - before :each do - ModelTwo.track_history on: { em_twos: :em_foo } - end - it { expect(subject['em_twos']).to eq [[{ '_id' => em_obj_two._id, 'em_foo' => 'Em-Foo' }], nil] } - end - end - - context 'when relation with alias' do - before :each do - class ModelTwo - include Mongoid::Document - include Mongoid::History::Trackable - - embeds_many :em_twos, store_as: :emws - track_history on: :fields - - track_history on: :em_twos - end - - class EmTwo - include Mongoid::Document - - field :em_foo - embedded_in :model_two - end - end - - after :each do - Object.send(:remove_const, :ModelTwo) - Object.send(:remove_const, :EmTwo) - end - - let(:obj_two) { ModelTwo.new(em_twos: [em_obj_two]) } - let(:em_obj_two) { EmTwo.new(em_foo: 'Em-Foo') } - let(:base) { described_class.new(obj_two) } - - it { expect(subject['em_twos']).to eq [[{ '_id' => em_obj_two._id, 'em_foo' => 'Em-Foo' }], nil] } - end - end - end -end +require 'spec_helper' + +describe Mongoid::History::Attributes::Destroy do + before :each do + class ModelOne + include Mongoid::Document + include Mongoid::History::Trackable + + store_in collection: :model_ones + + field :foo + field :b, as: :bar + + track_history on: :foo, modifier_field_optional: true + end + end + + after :each do + Object.send(:remove_const, :ModelOne) + end + + let(:obj_one) { ModelOne.new } + let(:base) { described_class.new(obj_one) } + subject { base } + + describe '#attributes' do + subject { base.attributes } + + describe '#fields' do + before :each do + obj_one.save! + end + + let(:obj_one) { ModelOne.new(foo: 'Foo', bar: 'Bar') } + it { is_expected.to eq('_id' => [obj_one._id, nil], 'foo' => ['Foo', nil], 'version' => [1, nil]) } + end + + describe '#insert_embeds_one_changes' do + before :each do + class ModelTwo + include Mongoid::Document + include Mongoid::History::Trackable + + store_in collection: :model_twos + + embeds_one :emb_two + + track_history on: :fields, modifier_field_optional: true + end + + class EmbTwo + include Mongoid::Document + + field :em_foo + field :em_bar + + embedded_in :model_two + end + end + + after :each do + Object.send(:remove_const, :ModelTwo) + Object.send(:remove_const, :EmbTwo) + end + + let(:obj_two) { ModelTwo.new(emb_two: emb_obj_two) } + let(:emb_obj_two) { EmbTwo.new(em_foo: 'Em-Foo', em_bar: 'Em-Bar') } + let(:base) { described_class.new(obj_two) } + + context 'when relation tracked' do + before :each do + ModelTwo.track_history on: :emb_two, modifier_field_optional: true + obj_two.save! + end + it { expect(subject['emb_two']).to eq [{ '_id' => emb_obj_two._id, 'em_foo' => 'Em-Foo', 'em_bar' => 'Em-Bar' }, nil] } + end + + context 'when relation not tracked' do + before :each do + ModelTwo.track_history on: :fields, modifier_field_optional: true + allow(ModelTwo).to receive(:dynamic_enabled?) { false } + obj_two.save! + end + it { expect(subject['emb_two']).to be_nil } + end + + context 'when relation with alias' do + before :each do + class ModelThree + include Mongoid::Document + include Mongoid::History::Trackable + + store_in collection: :model_threes + embeds_one :emb_three, store_as: :emtr + + track_history on: :emb_three, modifier_field_optional: true + end + + class EmbThree + include Mongoid::Document + + field :em_foo + embedded_in :model_three + end + end + + after :each do + Object.send(:remove_const, :ModelThree) + Object.send(:remove_const, :EmbThree) + end + + before :each do + obj_three.save! + end + + let(:obj_three) { ModelThree.new(emb_three: emb_obj_three) } + let(:emb_obj_three) { EmbThree.new(em_foo: 'Em-Foo') } + let(:base) { described_class.new(obj_three) } + + it { expect(subject['emb_three']).to eq [{ '_id' => emb_obj_three._id, 'em_foo' => 'Em-Foo' }, nil] } + end + + context 'relation with permitted attributes' do + before :each do + ModelTwo.track_history on: [{ emb_two: :em_foo }], modifier_field_optional: true + obj_two.save! + end + + it { expect(subject['emb_two']).to eq [{ '_id' => emb_obj_two._id, 'em_foo' => 'Em-Foo' }, nil] } + end + + context 'when relation object not built' do + before :each do + ModelTwo.track_history on: :emb_two, modifier_field_optional: true + obj_two.save! + end + + let(:obj_two) { ModelTwo.new } + it { expect(subject['emb_two']).to be_nil } + end + end + + describe '#insert_embeds_many_changes' do + context 'Case 1:' do + before :each do + class ModelTwo + include Mongoid::Document + include Mongoid::History::Trackable + + embeds_many :em_twos + track_history on: :fields + end + + class EmTwo + include Mongoid::Document + + field :em_foo + field :em_bar + + embedded_in :model_two + end + end + + after :each do + Object.send(:remove_const, :ModelTwo) + Object.send(:remove_const, :EmTwo) + end + + let(:obj_two) { ModelTwo.new(em_twos: [em_obj_two]) } + let(:em_obj_two) { EmTwo.new(em_foo: 'Em-Foo', em_bar: 'Em-Bar') } + let(:base) { described_class.new(obj_two) } + + context 'when relation tracked' do + before :each do + ModelTwo.track_history on: :em_twos + end + it { expect(subject['em_twos']).to eq [[{ '_id' => em_obj_two._id, 'em_foo' => 'Em-Foo', 'em_bar' => 'Em-Bar' }], nil] } + end + + context 'when relation not tracked' do + before :each do + ModelTwo.track_history on: :fields + end + it { expect(subject['em_twos']).to be_nil } + end + + context 'when relation with permitted attributes for tracking' do + before :each do + ModelTwo.track_history on: { em_twos: :em_foo } + end + it { expect(subject['em_twos']).to eq [[{ '_id' => em_obj_two._id, 'em_foo' => 'Em-Foo' }], nil] } + end + end + + context 'when relation with alias' do + before :each do + class ModelTwo + include Mongoid::Document + include Mongoid::History::Trackable + + embeds_many :em_twos, store_as: :emws + track_history on: :fields + + track_history on: :em_twos + end + + class EmTwo + include Mongoid::Document + + field :em_foo + embedded_in :model_two + end + end + + after :each do + Object.send(:remove_const, :ModelTwo) + Object.send(:remove_const, :EmTwo) + end + + let(:obj_two) { ModelTwo.new(em_twos: [em_obj_two]) } + let(:em_obj_two) { EmTwo.new(em_foo: 'Em-Foo') } + let(:base) { described_class.new(obj_two) } + + it { expect(subject['em_twos']).to eq [[{ '_id' => em_obj_two._id, 'em_foo' => 'Em-Foo' }], nil] } + end + end + end +end