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