spec/mongoid/contextual/atomic_spec.rb in mongoid-7.0.13 vs spec/mongoid/contextual/atomic_spec.rb in mongoid-7.1.0.rc0

- old
+ new

@@ -1,5 +1,8 @@ +# frozen_string_literal: true +# encoding: utf-8 + require "spec_helper" describe Mongoid::Contextual::Atomic do describe "#add_to_set" do @@ -72,12 +75,11 @@ it "adds to non initialized fields" do expect(smiths.reload.members).to eq([ "Dave" ]) end end - context 'when the criteria has a collation' do - min_server_version '3.4' + context 'when the criteria has a collation', if: collation_supported? do let(:criteria) do Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2) end @@ -97,10 +99,106 @@ expect(depeche_mode.reload.genres).to eq([ "Electro" ]) end end end + describe "#add_each_to_set" do + + let!(:depeche_mode) do + Band.create(members: [ "Dave" ]) + end + + let!(:new_order) do + Band.create(members: [ "Peter" ]) + end + + let!(:smiths) do + Band.create + end + + context "when the criteria has no sorting" do + + let(:criteria) do + Band.all + end + + let(:context) do + Mongoid::Contextual::Mongo.new(criteria) + end + + before do + context.add_each_to_set(members: [ "Dave", "Joe" ]) + end + + it "does not add duplicates" do + expect(depeche_mode.reload.members).to eq([ "Dave", "Joe" ]) + end + + it "adds unique values" do + expect(new_order.reload.members).to eq([ "Peter", "Dave", "Joe" ]) + end + + it "adds to non initialized fields" do + expect(smiths.reload.members).to eq([ "Dave", "Joe" ]) + end + end + + context "when the criteria has sorting" do + + let(:criteria) do + Band.asc(:name) + end + + let(:context) do + Mongoid::Contextual::Mongo.new(criteria) + end + + before do + context.add_each_to_set(members: [ "Dave", "Joe" ], genres: "Electro") + end + + it "does not add duplicates" do + expect(depeche_mode.reload.members).to eq([ "Dave", "Joe" ]) + end + + it "adds multiple operations" do + expect(depeche_mode.reload.genres).to eq([ "Electro" ]) + end + + it "adds unique values" do + expect(new_order.reload.members).to eq([ "Peter", "Dave", "Joe" ]) + end + + it "adds to non initialized fields" do + expect(smiths.reload.members).to eq([ "Dave", "Joe" ]) + end + end + + context 'when the criteria has a collation', if: collation_supported? do + + let(:criteria) do + Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2) + end + + let(:context) do + Mongoid::Contextual::Mongo.new(criteria) + end + + before do + context.add_each_to_set(members: [ "Dave", "Joe" ], genres: "Electro") + end + + it "does not add duplicates" do + expect(depeche_mode.reload.members).to eq([ "Dave", "Joe" ]) + end + + it "adds multiple operations" do + expect(depeche_mode.reload.genres).to eq([ "Electro" ]) + end + end + end + describe "#bit" do let!(:depeche_mode) do Band.create(likes: 60) end @@ -144,12 +242,11 @@ it "performs the bitwise operation on initialized fields" do expect(depeche_mode.reload.likes).to eq(14) end end - context 'when the criteria has a collation' do - min_server_version '3.4' + context 'when the criteria has a collation', if: collation_supported? do let!(:depeche_mode) do Band.create(members: [ "Dave" ], likes: 60) end @@ -224,12 +321,11 @@ it "incs the value and read from field" do expect(beatles.reload.y).to eq(3) end end - context 'when the criteria has a collation' do - min_server_version '3.4' + context 'when the criteria has a collation', if: collation_supported? do let!(:depeche_mode) do Band.create(members: [ "Dave" ]) end @@ -297,12 +393,11 @@ it "does not error on uninitialized fields" do expect(smiths.reload.members).to be_nil end end - context 'when the criteria has a collation' do - min_server_version '3.4' + context 'when the criteria has a collation', if: collation_supported? do let!(:depeche_mode) do Band.create(members: [ "Dave" ]) end @@ -352,12 +447,11 @@ it "does not error on non existent fields" do expect(smiths.reload.members).to be_nil end - context 'when the criteria has a collation' do - min_server_version '3.4' + context 'when the criteria has a collation', if: collation_supported? do let!(:depeche_mode) do Band.create(members: [ "Dave" ]) end @@ -410,12 +504,11 @@ it "does not error on non existent fields" do expect(smiths.reload.members).to be_nil end end - context 'when the criteria has a collation' do - min_server_version '3.4' + context 'when the criteria has a collation', if: collation_supported? do let!(:depeche_mode) do Band.create(members: [ "Dave", "Alan", "Fletch" ]) end @@ -468,12 +561,11 @@ it "pushes to non existent fields" do expect(smiths.reload.members).to eq([ "Alan" ]) end end - context 'when the criteria has a collation' do - min_server_version '3.4' + context 'when the criteria has a collation', if: collation_supported? do let!(:depeche_mode) do Band.create(members: [ "Dave" ]) end @@ -534,12 +626,11 @@ it "pushes to non existent fields" do expect(smiths.reload.members).to eq([ "Alan", "Fletch" ]) end end - context 'when the criteria has a collation' do - min_server_version '3.4' + context 'when the criteria has a collation', if: collation_supported? do let!(:depeche_mode) do Band.create(members: [ "Dave" ]) end @@ -596,12 +687,11 @@ it "does not rename non existent fields" do expect(smiths.reload).to_not respond_to(:artists) end end - context 'when the criteria has a collation' do - min_server_version '3.4' + context 'when the criteria has a collation', if: collation_supported? do let!(:depeche_mode) do Band.create(members: [ "Dave" ]) end @@ -651,29 +741,16 @@ before do context.set(name: "Recoil") end - shared_examples 'writes as expected' do - it "sets existing fields" do - expect(depeche_mode.reload.name).to eq("Recoil") - end - - it "sets non existent fields" do - expect(smiths.reload.name).to eq("Recoil") - end + it "sets existing fields" do + expect(depeche_mode.reload.name).to eq("Recoil") end - include_examples 'writes as expected' - - context 'when fields being set have been projected out' do - - let(:criteria) do - Band.only(:genres) - end - - include_examples 'writes as expected' + it "sets non existent fields" do + expect(smiths.reload.name).to eq("Recoil") end end describe "#unset" do @@ -769,11 +846,10 @@ expect(new_order.reload.years).to be_nil end end end - context 'when the criteria has a collation' do - min_server_version '3.4' + context 'when the criteria has a collation', if: collation_supported? do let!(:depeche_mode) do Band.create(name: "Depeche Mode", years: 10) end