xref: /plugin/structpublish/_test/revision.test.php (revision b476f81d46066c318f7a5153cbfadaf4262a2998)
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