function testVersionedFieldsAdded() { $obj = new VersionedTest_DataObject(); // Check that the Version column is added as a full-fledged column $this->assertType('Int', $obj->dbObject('Version')); $obj2 = new VersionedTest_Subclass(); // Check that the Version column is added as a full-fledged column $this->assertType('Int', $obj2->dbObject('Version')); }
/** * Tests DataObject::hasOwnTableDatabaseField */ public function testHasOwnTableDatabaseFieldWithVersioned() { $noversion = new DataObject(); $versioned = new VersionedTest_DataObject(); $versionedSub = new VersionedTest_Subclass(); $versionField = new VersionedTest_UnversionedWithField(); $this->assertFalse((bool) $noversion->hasOwnTableDatabaseField('Version'), 'Plain models have no version field.'); $this->assertEquals('Int', $versioned->hasOwnTableDatabaseField('Version'), 'The versioned ext adds an Int version field.'); $this->assertEquals('Int', $versionedSub->hasOwnTableDatabaseField('Version'), 'Sub-classes of a versioned model have a Version field.'); $this->assertEquals('Varchar', $versionField->hasOwnTableDatabaseField('Version'), 'Models w/o Versioned can have their own Version field.'); }
public function testArchiveRelatedDataWithoutVersioned() { SS_Datetime::set_mock_now('2009-01-01 00:00:00'); $relatedData = new VersionedTest_RelatedWithoutVersion(); $relatedData->Name = 'Related Data'; $relatedDataId = $relatedData->write(); $testData = new VersionedTest_DataObject(); $testData->Title = 'Test'; $testData->Content = 'Before Content'; $testData->Related()->add($relatedData); $id = $testData->write(); SS_Datetime::set_mock_now('2010-01-01 00:00:00'); $testData->Content = 'After Content'; $testData->write(); Versioned::reading_archived_date('2009-01-01 19:00:00'); $fetchedData = VersionedTest_DataObject::get()->byId($id); $this->assertEquals('Before Content', $fetchedData->Content, 'We see the correct content of the older version'); $relatedData = VersionedTest_RelatedWithoutVersion::get()->byId($relatedDataId); $this->assertEquals(1, $relatedData->Related()->count(), 'We have a relation, with no version table, querying it still works'); }
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); }
public function testLazyLoadFieldsRetrieval() { // Set reading mode to Stage Versioned::set_stage(Versioned::DRAFT); // Create object only in reading stage $original = new VersionedTest_Subclass(); $original->ExtraField = 'Foo'; $original->write(); // Query for object using base class $query = VersionedTest_DataObject::get()->filter('ID', $original->ID); // Set reading mode to Live Versioned::set_stage(Versioned::LIVE); $fetched = $query->first(); $this->assertTrue($fetched instanceof VersionedTest_Subclass); $this->assertEquals($original->ID, $fetched->ID); // Eager loaded $this->assertEquals($original->ExtraField, $fetched->ExtraField); // Lazy loaded }
public function testStageStates() { // newly created page $createdPage = new VersionedTest_DataObject(); $createdPage->write(); $this->assertTrue($createdPage->isOnDraft()); $this->assertFalse($createdPage->isPublished()); $this->assertTrue($createdPage->isOnDraftOnly()); $this->assertTrue($createdPage->isModifiedOnDraft()); // published page $publishedPage = new VersionedTest_DataObject(); $publishedPage->write(); $publishedPage->copyVersionToStage('Stage', 'Live'); $this->assertTrue($publishedPage->isOnDraft()); $this->assertTrue($publishedPage->isPublished()); $this->assertFalse($publishedPage->isOnDraftOnly()); $this->assertFalse($publishedPage->isOnLiveOnly()); $this->assertFalse($publishedPage->isModifiedOnDraft()); // published page, deleted from stage $deletedFromDraftPage = new VersionedTest_DataObject(); $deletedFromDraftPage->write(); $deletedFromDraftPage->copyVersionToStage('Stage', 'Live'); $deletedFromDraftPage->deleteFromStage('Stage'); $this->assertFalse($deletedFromDraftPage->isArchived()); $this->assertFalse($deletedFromDraftPage->isOnDraft()); $this->assertTrue($deletedFromDraftPage->isPublished()); $this->assertFalse($deletedFromDraftPage->isOnDraftOnly()); $this->assertTrue($deletedFromDraftPage->isOnLiveOnly()); $this->assertFalse($deletedFromDraftPage->isModifiedOnDraft()); // published page, deleted from live $deletedFromLivePage = new VersionedTest_DataObject(); $deletedFromLivePage->write(); $deletedFromLivePage->copyVersionToStage('Stage', 'Live'); $deletedFromLivePage->deleteFromStage('Live'); $this->assertFalse($deletedFromLivePage->isArchived()); $this->assertTrue($deletedFromLivePage->isOnDraft()); $this->assertFalse($deletedFromLivePage->isPublished()); $this->assertTrue($deletedFromLivePage->isOnDraftOnly()); $this->assertFalse($deletedFromLivePage->isOnLiveOnly()); $this->assertTrue($deletedFromLivePage->isModifiedOnDraft()); // published page, deleted from both stages $deletedFromAllStagesPage = new VersionedTest_DataObject(); $deletedFromAllStagesPage->write(); $deletedFromAllStagesPage->copyVersionToStage('Stage', 'Live'); $deletedFromAllStagesPage->doArchive(); $this->assertTrue($deletedFromAllStagesPage->isArchived()); $this->assertFalse($deletedFromAllStagesPage->isOnDraft()); $this->assertFalse($deletedFromAllStagesPage->isPublished()); $this->assertFalse($deletedFromAllStagesPage->isOnDraftOnly()); $this->assertFalse($deletedFromAllStagesPage->isOnLiveOnly()); $this->assertFalse($deletedFromAllStagesPage->isModifiedOnDraft()); // published page, modified $modifiedOnDraftPage = new VersionedTest_DataObject(); $modifiedOnDraftPage->write(); $modifiedOnDraftPage->copyVersionToStage('Stage', 'Live'); $modifiedOnDraftPage->Content = 'modified'; $modifiedOnDraftPage->write(); $this->assertFalse($modifiedOnDraftPage->isArchived()); $this->assertTrue($modifiedOnDraftPage->isOnDraft()); $this->assertTrue($modifiedOnDraftPage->isPublished()); $this->assertFalse($modifiedOnDraftPage->isOnDraftOnly()); $this->assertFalse($modifiedOnDraftPage->isOnLiveOnly()); $this->assertTrue($modifiedOnDraftPage->isModifiedOnDraft()); }