xref: /plugin/structpublish/_test/revision.test.php (revision 2cd86f5fad8f5947eca47fa65c1b02d66da62187)
1364fb00aSAnna Dabrowska<?php
2364fb00aSAnna Dabrowska
3*2cd86f5fSAnna 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 *
10*2cd86f5fSAnna 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';
31*2cd86f5fSAnna 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
40*2cd86f5fSAnna Dabrowska        $assignments = Assignments::getInstance(true);
41364fb00aSAnna Dabrowska        $this->sqlite = $assignments->getSqlite();
42*2cd86f5fSAnna Dabrowska        $assignments->addPattern('public:**', '@approver', 'approve');
43*2cd86f5fSAnna Dabrowska        $assignments->addPattern('public:**', '@publisher', 'publish');
44364fb00aSAnna Dabrowska    }
45364fb00aSAnna Dabrowska
46364fb00aSAnna Dabrowska    /**
47*2cd86f5fSAnna Dabrowska     * Test publish workflow
48364fb00aSAnna Dabrowska     *
49364fb00aSAnna Dabrowska     * @return void
50364fb00aSAnna Dabrowska     */
51*2cd86f5fSAnna Dabrowska    public function test_full_workflow()
52364fb00aSAnna Dabrowska    {
53*2cd86f5fSAnna Dabrowska        global $ID;
54*2cd86f5fSAnna Dabrowska        global $INFO;
55*2cd86f5fSAnna Dabrowska
56364fb00aSAnna Dabrowska        $pid = 'public:structpublish';
57*2cd86f5fSAnna Dabrowska        $ID = $pid;
58*2cd86f5fSAnna Dabrowska        $INFO['id'] = $pid;
59*2cd86f5fSAnna Dabrowska
60364fb00aSAnna Dabrowska        $text = 'lorem ipsum';
61*2cd86f5fSAnna Dabrowska
62364fb00aSAnna Dabrowska        saveWikiText($pid, $text, 'Save first draft');
63364fb00aSAnna Dabrowska
64*2cd86f5fSAnna Dabrowska        $currentrev = time();
65*2cd86f5fSAnna Dabrowska        $INFO['currentrev'] = $currentrev;
66*2cd86f5fSAnna Dabrowska
67*2cd86f5fSAnna Dabrowska        $revision = new Revision($this->sqlite, $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);
76*2cd86f5fSAnna Dabrowska
77*2cd86f5fSAnna Dabrowska        $helper = plugin_load('helper', 'structpublish_publish');
78*2cd86f5fSAnna Dabrowska
79*2cd86f5fSAnna Dabrowska        // approve
80*2cd86f5fSAnna Dabrowska        $helper->saveRevision(Constants::ACTION_APPROVE, $currentrev);
81*2cd86f5fSAnna Dabrowska
82*2cd86f5fSAnna Dabrowska        $revision = new Revision($this->sqlite, $ID, $currentrev);
83*2cd86f5fSAnna Dabrowska        $status = $revision->getStatus();
84*2cd86f5fSAnna Dabrowska        $this->assertEquals(Constants::STATUS_APPROVED, $status);
85*2cd86f5fSAnna Dabrowska
86*2cd86f5fSAnna Dabrowska        // publish
87*2cd86f5fSAnna Dabrowska        $helper->saveRevision(Constants::ACTION_PUBLISH, $currentrev);
88*2cd86f5fSAnna Dabrowska
89*2cd86f5fSAnna Dabrowska        $revision = new Revision($this->sqlite, $ID, $currentrev);
90*2cd86f5fSAnna Dabrowska        $status = $revision->getStatus();
91*2cd86f5fSAnna Dabrowska        $user = $revision->getUser();
92*2cd86f5fSAnna Dabrowska        $this->assertEquals(Constants::STATUS_PUBLISHED, $status);
93*2cd86f5fSAnna Dabrowska        $this->assertEquals('publisher', $user);
94364fb00aSAnna Dabrowska    }
95364fb00aSAnna Dabrowska}
96