Skip to content

Commit

Permalink
Default scope no longer breaks versioning!
Browse files Browse the repository at this point in the history
Described and solved here: #1623.
  • Loading branch information
hanshasselberg authored and durran committed Jan 23, 2012
1 parent 8c1f0a5 commit e88df20
Show file tree
Hide file tree
Showing 2 changed files with 119 additions and 34 deletions.
2 changes: 1 addition & 1 deletion lib/mongoid/versioning.rb
Expand Up @@ -131,7 +131,7 @@ def versionless
# @since 2.0.0
def previous_revision
_loading_revision do
self.class.
self.class.unscoped.
where(:_id => id).
any_of({ :version => version }, { :version => nil }).first
end
Expand Down
151 changes: 118 additions & 33 deletions spec/functional/mongoid/versioning_spec.rb
Expand Up @@ -8,73 +8,158 @@

describe "#version" do

context "when the document is new" do
context "when there is no default scope" do

it "returns 1" do
WikiPage.new.version.should eq(1)
context "when the document is new" do

it "returns 1" do
WikiPage.new.version.should eq(1)
end
end
end

context "when the document is persisted once" do
context "when the document is persisted once" do

let(:page) do
WikiPage.create(:title => "1")
end

it "returns 1" do
page.version.should eq(1)
end
end

context "when the document is persisted more than once" do

let(:page) do
WikiPage.create(:title => "1")
end

before do
3.times { |n| page.update_attribute(:title, "#{n}") }
end

let(:page) do
WikiPage.create(:title => "1")
it "returns the number of versions" do
page.version.should eq(4)
end
end

it "returns 1" do
page.version.should eq(1)
context "when maximum versions is defined" do

let(:page) do
WikiPage.create(:title => "1")
end

context "when saving over the max versions limit" do

before do
10.times { |n| page.update_attribute(:title, "#{n}") }
end

it "returns the number of versions" do
page.version.should eq(11)
end
end
end

context "when performing versionless saves" do

let(:page) do
WikiPage.create(:title => "1")
end

before do
10.times do |n|
page.versionless { |doc| doc.update_attribute(:title, "#{n}") }
end
end

it "does not increment the version number" do
page.version.should eq(1)
end
end
end

context "when the document is persisted more than once" do
context "when there is a default scope" do

let(:page) do
WikiPage.create(:title => "1")
before :all do
class WikiPage
default_scope where(:author => "Jim")
end
end

before do
3.times { |n| page.update_attribute(:title, "#{n}") }
after :all do
WikiPage.default_scoping.clear
end

it "returns the number of versions" do
page.version.should eq(4)
context "when the document is new" do

it "returns 1" do
WikiPage.new.version.should eq(1)
end
end
end

context "when maximum versions is defined" do
context "when the document is persisted once" do

let(:page) do
WikiPage.create(:title => "1")
let(:page) do
WikiPage.create(:title => "1")
end

it "returns 1" do
page.version.should eq(1)
end
end

context "when saving over the max versions limit" do
context "when the document is persisted more than once" do

let(:page) do
WikiPage.create(:title => "1")
end

before do
10.times { |n| page.update_attribute(:title, "#{n}") }
3.times { |n| page.update_attribute(:title, "#{n}") }
end

it "returns the number of versions" do
page.version.should eq(11)
page.version.should eq(4)
end
end
end

context "when performing versionless saves" do
context "when maximum versions is defined" do

let(:page) do
WikiPage.create(:title => "1")
end
let(:page) do
WikiPage.create(:title => "1")
end

before do
10.times do |n|
page.versionless { |doc| doc.update_attribute(:title, "#{n}") }
context "when saving over the max versions limit" do

before do
10.times { |n| page.update_attribute(:title, "#{n}") }
end

it "returns the number of versions" do
page.version.should eq(11)
end
end
end

it "does not increment the version number" do
page.version.should eq(1)
context "when performing versionless saves" do

let(:page) do
WikiPage.create(:title => "1")
end

before do
10.times do |n|
page.versionless { |doc| doc.update_attribute(:title, "#{n}") }
end
end

it "does not increment the version number" do
page.version.should eq(1)
end
end
end

end

describe "#versions" do
Expand Down

0 comments on commit e88df20

Please sign in to comment.