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