Permalink
Browse files

Merge pull request #583 from sminnee/version-latest-fix

BUGFIX: Allow Versioned::get_latest_version() and Version::get_version()to return results if the classname has changed.
  • Loading branch information...
2 parents 0b31234 + b654b95 commit fc98c682f86c3bddd069fed6e1cae71267d0391c @halkyon halkyon committed Jun 28, 2012
Showing with 26 additions and 2 deletions.
  1. +2 −2 model/Versioned.php
  2. +24 −0 tests/model/VersionedTest.php
View
@@ -991,7 +991,7 @@ function doRollbackTo($version) {
*/
static function get_latest_version($class, $id) {
$baseClass = ClassInfo::baseDataClass($class);
- $list = DataList::create($class)->where("\"$baseClass\".\"RecordID\" = $id");
+ $list = DataList::create($baseClass)->where("\"$baseClass\".\"RecordID\" = $id");
$list->dataQuery()->setQueryParam("Versioned.mode", "latest_versions");
return $list->First();
}
@@ -1033,7 +1033,7 @@ static function get_including_deleted($class, $filter = "", $sort = "") {
*/
static function get_version($class, $id, $version) {
$baseClass = ClassInfo::baseDataClass($class);
- $list = DataList::create($class)->where("\"$baseClass\".\"RecordID\" = $id")->where("\"$baseClass\".\"Version\" = " . (int)$version);
+ $list = DataList::create($baseClass)->where("\"$baseClass\".\"RecordID\" = $id")->where("\"$baseClass\".\"Version\" = " . (int)$version);
$list->dataQuery()->setQueryParam('Versioned.mode', 'all_versions');
return $list->First();
}
@@ -242,6 +242,30 @@ public function testQueriedTables() {
'VersionedTest_Subclass_Live',
), DataObject::get('VersionedTest_Subclass')->dataQuery()->query()->queriedTables());
}
+
+ public function testGetVersionWhenClassnameChanged() {
+ $obj = new VersionedTest_DataObject;
+ $obj->Name = "test";
+ $obj->write();
+ $obj->Name = "test2";
+ $obj->ClassName = "VersionedTest_Subclass";
+ $obj->write();
+ $subclassVersion = $obj->Version;
+
+ $obj->Name = "test3";
+ $obj->ClassName = "VersionedTest_DataObject";
+ $obj->write();
+
+ // We should be able to pass the subclass and still get the correct class back
+ $obj2 = Versioned::get_version("VersionedTest_Subclass", $obj->ID, $subclassVersion);
+ $this->assertInstanceOf("VersionedTest_Subclass", $obj2);
+ $this->assertEquals("test2", $obj2->Name);
+
+ $obj3 = Versioned::get_latest_version("VersionedTest_Subclass", $obj->ID);
+ $this->assertEquals("test3", $obj3->Name);
+ $this->assertInstanceOf("VersionedTest_DataObject", $obj3);
+
+ }
}
class VersionedTest_DataObject extends DataObject implements TestOnly {

0 comments on commit fc98c68

Please sign in to comment.