1364fb00aSAnna Dabrowska<?php 2364fb00aSAnna Dabrowska 32cd86f5fSAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Assignments; 4364fb00aSAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Constants; 5364fb00aSAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Revision; 6364fb00aSAnna Dabrowska 7364fb00aSAnna Dabrowska/** 8364fb00aSAnna Dabrowska * Revision tests for the structpublish plugin 9364fb00aSAnna Dabrowska * 102cd86f5fSAnna Dabrowska * @group plugin_structpublish 11364fb00aSAnna Dabrowska * @group plugins 12364fb00aSAnna Dabrowska */ 13364fb00aSAnna Dabrowskaclass revision_plugin_structpublish_test extends DokuWikiTest 14364fb00aSAnna Dabrowska{ 15364fb00aSAnna Dabrowska /** @inheritdoc **/ 16364fb00aSAnna Dabrowska protected $pluginsEnabled = ['sqlite', 'struct', 'structpublish']; 17364fb00aSAnna Dabrowska 18364fb00aSAnna Dabrowska /** 19364fb00aSAnna Dabrowska * @var \helper_plugin_sqlite 20364fb00aSAnna Dabrowska */ 21364fb00aSAnna Dabrowska protected $sqlite; 22364fb00aSAnna Dabrowska 23364fb00aSAnna Dabrowska public function setUp(): void 24364fb00aSAnna Dabrowska { 25364fb00aSAnna Dabrowska parent::setUp(); 26364fb00aSAnna Dabrowska 27364fb00aSAnna Dabrowska global $USERINFO; 28364fb00aSAnna Dabrowska 29364fb00aSAnna Dabrowska // user 30364fb00aSAnna Dabrowska $_SERVER['REMOTE_USER'] = 'publisher'; 312cd86f5fSAnna Dabrowska $USERINFO['grps'] = ['user', 'approver', 'publisher']; 32364fb00aSAnna Dabrowska 33364fb00aSAnna Dabrowska // our database migrations 34364fb00aSAnna Dabrowska /** @var action_plugin_structpublish_migration $migration */ 35364fb00aSAnna Dabrowska $migration = plugin_load('action', 'structpublish_migration'); 36364fb00aSAnna Dabrowska $data = ''; 37364fb00aSAnna Dabrowska $migration->handleMigrations(new Doku_Event('DUMMY_EVENT', $data)); 38364fb00aSAnna Dabrowska 39364fb00aSAnna Dabrowska // assignments 402cd86f5fSAnna Dabrowska $assignments = Assignments::getInstance(true); 41364fb00aSAnna Dabrowska $this->sqlite = $assignments->getSqlite(); 422cd86f5fSAnna Dabrowska $assignments->addPattern('public:**', '@approver', 'approve'); 432cd86f5fSAnna Dabrowska $assignments->addPattern('public:**', '@publisher', 'publish'); 44364fb00aSAnna Dabrowska } 45364fb00aSAnna Dabrowska 46364fb00aSAnna Dabrowska /** 472cd86f5fSAnna Dabrowska * Test publish workflow 48364fb00aSAnna Dabrowska * 49364fb00aSAnna Dabrowska * @return void 50364fb00aSAnna Dabrowska */ 512cd86f5fSAnna Dabrowska public function test_full_workflow() 52364fb00aSAnna Dabrowska { 532cd86f5fSAnna Dabrowska global $ID; 542cd86f5fSAnna Dabrowska global $INFO; 552cd86f5fSAnna Dabrowska 56364fb00aSAnna Dabrowska $pid = 'public:structpublish'; 572cd86f5fSAnna Dabrowska $ID = $pid; 582cd86f5fSAnna Dabrowska $INFO['id'] = $pid; 592cd86f5fSAnna Dabrowska 60364fb00aSAnna Dabrowska $text = 'lorem ipsum'; 612cd86f5fSAnna Dabrowska 62364fb00aSAnna Dabrowska saveWikiText($pid, $text, 'Save first draft'); 63364fb00aSAnna Dabrowska 642cd86f5fSAnna Dabrowska $currentrev = time(); 652cd86f5fSAnna Dabrowska $INFO['currentrev'] = $currentrev; 662cd86f5fSAnna Dabrowska 67*b476f81dSAnna Dabrowska $revision = new Revision($pid, $currentrev); 68364fb00aSAnna Dabrowska 69364fb00aSAnna Dabrowska $user = $revision->getUser(); 70364fb00aSAnna Dabrowska $status = $revision->getStatus(); 71364fb00aSAnna Dabrowska $version = $revision->getVersion(); 72364fb00aSAnna Dabrowska 73364fb00aSAnna Dabrowska $this->assertEquals('', $user); 74364fb00aSAnna Dabrowska $this->assertEquals(Constants::STATUS_DRAFT, $status); 75364fb00aSAnna Dabrowska $this->assertEquals('', $version); 762cd86f5fSAnna Dabrowska 772cd86f5fSAnna Dabrowska $helper = plugin_load('helper', 'structpublish_publish'); 782cd86f5fSAnna Dabrowska 792cd86f5fSAnna Dabrowska // approve 8078b0af08SAnna Dabrowska $helper->saveRevision(Constants::ACTION_APPROVE); 812cd86f5fSAnna Dabrowska 82*b476f81dSAnna Dabrowska $revision = new Revision($ID, $currentrev); 832cd86f5fSAnna Dabrowska $status = $revision->getStatus(); 842cd86f5fSAnna Dabrowska $this->assertEquals(Constants::STATUS_APPROVED, $status); 852cd86f5fSAnna Dabrowska 862cd86f5fSAnna Dabrowska // publish 8778b0af08SAnna Dabrowska $helper->saveRevision(Constants::ACTION_PUBLISH, '1'); 882cd86f5fSAnna Dabrowska 89*b476f81dSAnna Dabrowska $revision = new Revision($ID, $currentrev); 902cd86f5fSAnna Dabrowska $status = $revision->getStatus(); 912cd86f5fSAnna Dabrowska $user = $revision->getUser(); 922cd86f5fSAnna Dabrowska $this->assertEquals(Constants::STATUS_PUBLISHED, $status); 932cd86f5fSAnna Dabrowska $this->assertEquals('publisher', $user); 9478b0af08SAnna Dabrowska 9578b0af08SAnna Dabrowska sleep(3); 9678b0af08SAnna Dabrowska 9778b0af08SAnna Dabrowska saveWikiText($pid, "$text $text", 'Save second draft'); 9878b0af08SAnna Dabrowska 9978b0af08SAnna Dabrowska $currentrev = time(); 10078b0af08SAnna Dabrowska $INFO['currentrev'] = $currentrev; 10178b0af08SAnna Dabrowska 10278b0af08SAnna Dabrowska $helper->saveRevision(Constants::ACTION_PUBLISH, '2'); 10378b0af08SAnna Dabrowska 104*b476f81dSAnna Dabrowska $revision = new Revision($ID, $currentrev); 10578b0af08SAnna Dabrowska $previous = $revision->getLatestPublishedRevision($currentrev); 10678b0af08SAnna Dabrowska $this->assertEquals('2', $revision->getVersion()); 10778b0af08SAnna Dabrowska $this->assertEquals('1', $previous->getVersion()); 108364fb00aSAnna Dabrowska } 109364fb00aSAnna Dabrowska} 110