test/unit/test_changesets.rb in spontaneous-0.2.0.alpha7 vs test/unit/test_changesets.rb in spontaneous-0.2.0.beta1

- old
+ new

@@ -14,21 +14,20 @@ teardown_site end context "Changes" do setup do - @revision = 1 stub_time(@now) + @revision = 1 - # DB.logger = Logger.new($stdout) Content.delete - class Page < Spontaneous::Page + class Page < ::Page field :title, :string, :default => "New Page" box :things end - class Piece < Spontaneous::Piece + class Piece < ::Piece box :things end end teardown do @@ -39,36 +38,48 @@ Content.delete DB.logger = nil end + should "flag if the site has never been published" do + root = Page.create(:title => "root") + 5.times { |i| root.things << Page.create(:title => "Page #{i+1}") } + result = S::Change.outstanding + assert result.key?(:published_revision) + result[:published_revision].should == 0 + result[:first_publish].should be_true + end + should "list all newly created pages" do root = Page.create(:title => "root") root[:first_published_at] = root[:last_published_at] = root.modified_at + 1000 root.save 5.times { |i| root.things << Page.create(:title => "Page #{i+1}") } - result = Change.outstanding - result.must_be_instance_of(Array) - result.length.should == 5 + result = S::Change.outstanding + result.must_be_instance_of(Hash) - result.map(&:class).should == [Change]*5 + pages = result[:changes] + pages.must_be_instance_of(Array) + pages.length.should == 5 - Set.new(result.map(&:page_id)).should == Set.new(root.things.map { |p| p.id }) + pages.map(&:class).should == [S::Change]*5 + + Set.new(pages.map(&:page_id)).should == Set.new(root.things.map { |p| p.id }) end should "not list new pieces as available for publish" do root = Page.create(:title => "root") Content.publish(@revision) # force root to appear in the modified lists -- need this because otherwise the changes happen # more quickly than the resolution of the timestamps can register root[:first_published_at] = root[:last_published_at] = root.modified_at - 1000 root.things << Piece.new root.save.reload - result = Change.outstanding + result = S::Change.outstanding[:changes] result.length.should == 1 result.first.page.should == root end should "not list pages that have been published" do @@ -79,11 +90,11 @@ 5.times { |i| root.things << Page.create(:title => "Page #{i+1}") } root.save Content.publish(@revision+1, [root.id, root.things.first.id]) - result = Change.outstanding + result = S::Change.outstanding[:changes] result.length.should == 4 Set.new(result.map(&:page_id).flatten).should == Set.new(root.things[1..-1].map(&:id)) end should "group unpublished parents with their children" do @@ -106,11 +117,11 @@ pages = [root, page1, new_child1, new_parent, new_child2, new_child3] pages.each(&:save) Content.publish(@revision+1, [root.id]) - result = Change.outstanding + result = S::Change.outstanding[:changes] result.length.should == 5 id_groups = result.map { |change| [change.page.id, change.dependent.map(&:id)] @@ -144,11 +155,11 @@ pages = [root, page1, new_child1, new_parent, new_child2, new_child3] pages.each(&:save) Content.publish(@revision+1, [root.id]) - result = Change.outstanding + result = S::Change.outstanding[:changes] e = nil begin pages = Spontaneous::Change.include_dependencies([new_child3]) Content.publish(@revision+2, pages) @@ -170,27 +181,29 @@ new_child1 = Page.new(:title => "New Child 1") page1.things << new_child1 root.save Content.publish(@revision+1, [root.id]) - result = Change.outstanding + result = S::Change.outstanding[:changes] change = result.detect { |change| change.page.id == new_child1.id } change.export.should == { :id => new_child1.id, :title => new_child1.title.value, :url => new_child1.path, :published_at => nil, :modified_at => new_child1.modified_at.httpdate, # :editor_login => "someone", :depth => new_child1.depth, :side_effects => {}, + :update_locks => [], :dependent => [{ :id => page1.id, :depth => page1.depth, :title => page1.title.value, :url => page1.path, :side_effects => {}, + :update_locks => [], :published_at => nil, :modified_at => page1.modified_at.httpdate, }] } end @@ -205,12 +218,12 @@ root.things << page1 new_child1 = Page.new(:title => "New Child 1") page1.things << new_child1 root.save last = Time.now + 100 - S::Content.filter(:id => new_child1.id).update(:modified_at => last) - result = Change.outstanding + ::Content.filter(:id => new_child1.id).update(:modified_at => last) + result = S::Change.outstanding[:changes] assert result.first.modified_at > result.last.modified_at, "Change list in incorrect order" end should "provide information on side effects of publishing page with path changes" do root = Page.create(:title => "root") @@ -223,18 +236,21 @@ page1.things << new_child1 root.save Content.publish(@revision) + later = @now + 10 + stub_time(later) old_slug = page1.slug page1.slug = "changed" page1.save - result = Change.outstanding + result = S::Change.outstanding[:changes] + change = result.detect { |change| change.page.id == page1.id } change.export[:side_effects].should == { - :slug => [{ :count => 1, :created_at => @now.httpdate, :old_value => old_slug, :new_value => "changed"}] + :slug => [{ :count => 1, :created_at => later.httpdate, :old_value => old_slug, :new_value => "changed"}] } end should "provide information on side effects of publishing page with visibility changes" do root = Page.create(:title => "root") @@ -247,15 +263,44 @@ page1.things << new_child1 root.save Content.publish(@revision) + later = @now + 10 + stub_time(later) page1.hide! - result = Change.outstanding + page1.reload + result = S::Change.outstanding[:changes] change = result.detect { |change| change.page.id == page1.id } change.export[:side_effects].should == { - :visibility => [{ :count => 1, :created_at => @now.httpdate, :old_value => false, :new_value => true}] + :visibility => [{ :count => 1, :created_at => later.httpdate, :old_value => false, :new_value => true}] } + end + + should "provide information about any update locks that exist on a page" do + Piece.field :async + page = Page.create(:title => "page") + + + piece = Piece.new + + page.things << piece + page.save + piece.save + + lock = Spontaneous::PageLock.create(:page_id => page.id, :content_id => piece.id, :field_id => piece.async.id, :description => "Update Lock") + page.locked_for_update?.should be_true + result = S::Change.outstanding[:changes] + change = result.detect { |change| change.page.id == page.id } + change.export[:update_locks].should == [{ + id: lock.id, + content_id: piece.id, + field_id: piece.async.id, + field_name: :async, + location: "Field ‘async’ of entry 1 in box ‘things’", + description: "Update Lock", + created_at: @now.httpdate + }] end end end