Source of file DNDataArchiveTest.php
Size: 8,446 Bytes - Last Modified: 2021-12-23T10:29:15+00:00
/var/www/docs.ssmods.com/process/src/tests/DNDataArchiveTest.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 | <?php class DNDataArchiveTest extends DeploynautTest { protected static $fixture_file = 'DNDataArchiveTest.yml'; /** * We check a number of different conditionals here (see DNDataArchiveTest.yml for relationships): * - Samantha can upload to & download from project1:uat, but not project1:live * - Sarah can upload to but not download from project1:uat, and can't do anything with project1:live * - Neither Samantha nor Sarah can do anything with project2:uat or project2:live */ public function testArchivePermissions() { $project1 = $this->objFromFixture('DNProject', 'project1'); $project2 = $this->objFromFixture('DNProject', 'project2'); $samantha = $this->objFromFixture('Member', 'project1-samantha'); $sarah = $this->objFromFixture('Member', 'project1-sarah'); // Samantha can upload to & download from project1:uat, but not project1:live $this->assertTrue($project1->Environments()->filter('Name', 'uat')->First()->canUploadArchive($samantha)); $this->assertTrue($project1->Environments()->filter('Name', 'uat')->First()->canDownloadArchive($samantha)); $this->assertFalse($project1->Environments()->filter('Name', 'uat')->First()->canDeleteArchive($samantha)); $this->assertFalse($project1->Environments()->filter('Name', 'live')->First()->canUploadArchive($samantha)); $this->assertFalse($project1->Environments()->filter('Name', 'live')->First()->canDownloadArchive($samantha)); $this->assertFalse($project1->Environments()->filter('Name', 'live')->First()->canDeleteArchive($samantha)); // Sarah can upload to but not download from project1:uat, and can't do anything with project1:live $this->assertTrue($project1->Environments()->filter('Name', 'uat')->First()->canUploadArchive($sarah)); $this->assertFalse($project1->Environments()->filter('Name', 'uat')->First()->canDownloadArchive($sarah)); $this->assertTrue($project1->Environments()->filter('Name', 'uat')->First()->canDeleteArchive($sarah)); $this->assertTrue($project1->Environments()->filter('Name', 'live')->First()->canUploadArchive($sarah)); $this->assertFalse($project1->Environments()->filter('Name', 'live')->First()->canDownloadArchive($sarah)); $this->assertFalse($project1->Environments()->filter('Name', 'live')->First()->canDeleteArchive($sarah)); // Neither Samantha nor Sarah can do anything with project2:uat or project2:live $this->assertFalse($project2->Environments()->filter('Name', 'uat')->First()->canUploadArchive($samantha)); $this->assertFalse($project2->Environments()->filter('Name', 'uat')->First()->canDownloadArchive($samantha)); $this->assertFalse($project2->Environments()->filter('Name', 'uat')->First()->canDeleteArchive($samantha)); $this->assertFalse($project2->Environments()->filter('Name', 'live')->First()->canUploadArchive($samantha)); $this->assertFalse($project2->Environments()->filter('Name', 'live')->First()->canDownloadArchive($samantha)); $this->assertFalse($project2->Environments()->filter('Name', 'live')->First()->canDeleteArchive($samantha)); $this->assertFalse($project2->Environments()->filter('Name', 'uat')->First()->canUploadArchive($sarah)); $this->assertFalse($project2->Environments()->filter('Name', 'uat')->First()->canDownloadArchive($sarah)); $this->assertFalse($project2->Environments()->filter('Name', 'uat')->First()->canDeleteArchive($sarah)); $this->assertFalse($project2->Environments()->filter('Name', 'live')->First()->canUploadArchive($sarah)); $this->assertFalse($project2->Environments()->filter('Name', 'live')->First()->canDownloadArchive($sarah)); $this->assertFalse($project2->Environments()->filter('Name', 'live')->First()->canDeleteArchive($sarah)); } public function testGenerateFilePath() { // SS_Datetime::mock_now('2010-01-01 23:23:23'); $project1 = $this->objFromFixture('DNProject', 'project1'); $project1uatEnv = $this->objFromFixture('DNEnvironment', 'project1-uat'); $dataTransfer = DNDataTransfer::create(); $dataTransfer->Direction = 'get'; $dataTransfer->Mode = 'all'; $dataTransfer->write(); $archive = DNDataArchive::create(); $archive->OriginalEnvironmentID = $project1uatEnv->ID; $archive->write(); $filepath1 = $archive->generateFilepath($dataTransfer); $this->assertNotNull($filepath1); $this->assertContains('project-1', $filepath1); $this->assertContains('uat', $filepath1); $this->assertContains('transfer-' . $dataTransfer->ID, $filepath1); } public function testGenerateFileName() { $project1 = $this->objFromFixture('DNProject', 'project1'); $project1uatEnv = $this->objFromFixture('DNEnvironment', 'project1-uat'); $dataTransfer = DNDataTransfer::create(); $dataTransfer->Direction = 'get'; $dataTransfer->Mode = 'all'; $dataTransfer->write(); $archive = DNDataArchive::create(); $archive->OriginalEnvironmentID = $project1uatEnv->ID; $archive->write(); $filename = $archive->generateFilename($dataTransfer); $this->assertNotNull($filename); $this->assertContains('project-1', $filename); $this->assertContains('uat', $filename); $this->assertContains('all', $filename); } public function testCanMoveTo() { $samantha = $this->objFromFixture('Member', 'project1-samantha'); $sarah = $this->objFromFixture('Member', 'project1-sarah'); $eva = $this->objFromFixture('Member', 'eva'); $uat1 = $this->objFromFixture('DNEnvironment', 'project1-uat'); $live1 = $this->objFromFixture('DNEnvironment', 'project1-live'); $uat2 = $this->objFromFixture('DNEnvironment', 'project2-uat'); $live2 = $this->objFromFixture('DNEnvironment', 'project2-live'); $archive = DNDataArchive::create(); $archive->EnvironmentID = $uat1->ID; $archive->write(); // Samantha doesn't have upload permission to live1. $this->assertFalse($archive->canMoveTo($live1, $samantha)); // Cross-project moves are forbidden. $this->assertFalse($archive->canMoveTo($uat2, $samantha)); // Eva has upload permission to live1. $this->assertTrue($archive->canMoveTo($live1, $eva)); // Cross-project moves are forbidden. $this->assertFalse($archive->canMoveTo($uat2, $eva)); // Sarah has upload permission to live1, but not download to uat1. $this->assertFalse($archive->canMoveTo($live1, $sarah)); } public function testValidateArchiveContentsAll() { $archive = DNDataArchive::create(); $archive->ArchiveFile()->Filename = __DIR__.'/sspaks/all.sspak'; $result = $archive->validateArchiveContents('all'); $this->assertTrue($result->valid()); } public function testValidateArchiveContentsDB() { $archive = DNDataArchive::create(); $archive->ArchiveFile()->Filename = __DIR__.'/sspaks/all.sspak'; $result = $archive->validateArchiveContents('db'); $this->assertTrue($result->valid()); $archive->ArchiveFile()->Filename = __DIR__.'/sspaks/db.sspak'; $result = $archive->validateArchiveContents('db'); $this->assertTrue($result->valid()); } public function testValidateArchiveContentsDBFails() { $archive = DNDataArchive::create(); $archive->ArchiveFile()->Filename = __DIR__.'/sspaks/assets.sspak'; $result = $archive->validateArchiveContents('db'); $this->assertFalse($result->valid()); $this->assertEquals('The snapshot is missing the database.', current($result->messageList())); } public function testValidateArchiveContentsAssets() { $archive = DNDataArchive::create(); $archive->ArchiveFile()->Filename = __DIR__.'/sspaks/all.sspak'; $result = $archive->validateArchiveContents('assets'); $this->assertTrue($result->valid()); $archive->ArchiveFile()->Filename = __DIR__.'/sspaks/assets.sspak'; $result = $archive->validateArchiveContents('assets'); $this->assertTrue($result->valid()); } public function testValidateArchiveContentsAssetsFails() { $archive = DNDataArchive::create(); $archive->ArchiveFile()->Filename = __DIR__.'/sspaks/db.sspak'; $result = $archive->validateArchiveContents('assets'); $this->assertFalse($result->valid()); $this->assertEquals('The snapshot is missing assets.', current($result->messageList())); } public function testValidateArchiveContentsFileMissingFails() { $archive = DNDataArchive::create(); $filename = __DIR__.'/sspaks/not.found.sspak'; $archive->ArchiveFile()->Filename = $filename; $result = $archive->validateArchiveContents('all'); $this->assertFalse($result->valid()); $this->assertEquals('SSPak file "'.$filename.'" cannot be read.', current($result->messageList())); } } |