diff --git a/lib/cms/behaviors/versioning.rb b/lib/cms/behaviors/versioning.rb index 63bcb8b1e..f8ac3bd7b 100644 --- a/lib/cms/behaviors/versioning.rb +++ b/lib/cms/behaviors/versioning.rb @@ -220,8 +220,13 @@ def create_or_update self.skip_callbacks = false unless different_from_last_draft? logger.debug { "No difference between this version and last. Skipping save" } - self.skip_callbacks = true - return true + if !published && publish_on_save + logger.debug { "Publishing current draft version" } + return publish + else + self.skip_callbacks = true + return true + end end logger.debug { "Saving #{self.class} #{self.attributes}" } if new_record? diff --git a/test/unit/behaviors/publishing_mini_test.rb b/test/unit/behaviors/publishing_mini_test.rb index bd09c2bcd..3ff318cc4 100644 --- a/test/unit/behaviors/publishing_mini_test.rb +++ b/test/unit/behaviors/publishing_mini_test.rb @@ -64,6 +64,12 @@ draft_block.versions.size.must_equal 1 end + it "should publish a draft block, without creating a version, when saving 1st draft version as published" do + draft_block.save.must_equal true + draft_block.must_be_published + draft_block.versions.size.must_equal 1 + end + it "should return false if there was no draft copy to publish" do block.publish.must_equal false block.must_be_published