/** * Tests that multi-table dataobjects are correctly versioned */ public function testWriteToStage() { // Test subclass with versioned extension directly added $record = VersionedTest_Subclass::create(); $record->Title = "Test A"; $record->ExtraField = "Test A"; $record->writeToStage("Stage"); $this->assertRecordHasLatestVersion($record, 1); $record->publish("Stage", "Live"); $this->assertRecordHasLatestVersion($record, 1); $record->Title = "Test A2"; $record->ExtraField = "Test A2"; $record->writeToStage("Stage"); $this->assertRecordHasLatestVersion($record, 2); // Test subclass without changes to base class $record = VersionedTest_Subclass::create(); $record->ExtraField = "Test B"; $record->writeToStage("Stage"); $this->assertRecordHasLatestVersion($record, 1); $record->publish("Stage", "Live"); $this->assertRecordHasLatestVersion($record, 1); $record->ExtraField = "Test B2"; $record->writeToStage("Stage"); $this->assertRecordHasLatestVersion($record, 2); // Test subclass without changes to sub class $record = VersionedTest_Subclass::create(); $record->Title = "Test C"; $record->writeToStage("Stage"); $this->assertRecordHasLatestVersion($record, 1); $record->publish("Stage", "Live"); $this->assertRecordHasLatestVersion($record, 1); $record->Title = "Test C2"; $record->writeToStage("Stage"); $this->assertRecordHasLatestVersion($record, 2); // Test subclass with versioned extension only added to the base clases $record = VersionedTest_AnotherSubclass::create(); $record->Title = "Test A"; $record->AnotherField = "Test A"; $record->writeToStage("Stage"); $this->assertRecordHasLatestVersion($record, 1); $record->publish("Stage", "Live"); $this->assertRecordHasLatestVersion($record, 1); $record->Title = "Test A2"; $record->AnotherField = "Test A2"; $record->writeToStage("Stage"); $this->assertRecordHasLatestVersion($record, 2); // Test subclass without changes to base class $record = VersionedTest_AnotherSubclass::create(); $record->AnotherField = "Test B"; $record->writeToStage("Stage"); $this->assertRecordHasLatestVersion($record, 1); $record->publish("Stage", "Live"); $this->assertRecordHasLatestVersion($record, 1); $record->AnotherField = "Test B2"; $record->writeToStage("Stage"); $this->assertRecordHasLatestVersion($record, 2); // Test subclass without changes to sub class $record = VersionedTest_AnotherSubclass::create(); $record->Title = "Test C"; $record->writeToStage("Stage"); $this->assertRecordHasLatestVersion($record, 1); $record->publish("Stage", "Live"); $this->assertRecordHasLatestVersion($record, 1); $record->Title = "Test C2"; $record->writeToStage("Stage"); $this->assertRecordHasLatestVersion($record, 2); }
/** * Values that are overwritten with null are saved to the _versions table correctly. */ public function testWriteNullValueToVersion() { $record = VersionedTest_Subclass::create(); $record->Title = "Test A"; $record->write(); $version = Versioned::get_latest_version($record->ClassName, $record->ID); $this->assertEquals(1, $version->Version); $this->assertEquals($record->Title, $version->Title); $record->Title = null; $record->write(); $version = Versioned::get_latest_version($record->ClassName, $record->ID); $this->assertEquals(2, $version->Version); $this->assertEquals($record->Title, $version->Title); }