/**
  * 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);
 }