xref: /plugin/acknowledge/_test/ApproveIntegrationTest.php (revision a8303a15174917903ee75b8529b2e46c08d79147)
1*a8303a15SAnna Dabrowska<?php
2*a8303a15SAnna Dabrowska
3*a8303a15SAnna Dabrowskanamespace dokuwiki\plugin\acknowledge\test;
4*a8303a15SAnna Dabrowska
5*a8303a15SAnna Dabrowskause DokuWikiTest;
6*a8303a15SAnna Dabrowska
7*a8303a15SAnna Dabrowska/**
8*a8303a15SAnna Dabrowska * Tests for the approve plugin integration (helper->isBlockedByApprove)
9*a8303a15SAnna Dabrowska *
10*a8303a15SAnna Dabrowska * The test drives the approve plugin exclusively through its public helper API
11*a8303a15SAnna Dabrowska * (addMaintainer / handlePageEdit / setApprovedStatus) rather than touching its
12*a8303a15SAnna Dabrowska * database directly, so it exercises the real integration path.
13*a8303a15SAnna Dabrowska *
14*a8303a15SAnna Dabrowska * @group plugin_acknowledge
15*a8303a15SAnna Dabrowska * @group plugins
16*a8303a15SAnna Dabrowska */
17*a8303a15SAnna Dabrowskaclass ApproveIntegrationTest extends DokuWikiTest
18*a8303a15SAnna Dabrowska{
19*a8303a15SAnna Dabrowska    /** @var array */
20*a8303a15SAnna Dabrowska    protected $pluginsEnabled = ['acknowledge', 'sqlite', 'approve'];
21*a8303a15SAnna Dabrowska
22*a8303a15SAnna Dabrowska    /** @var \helper_plugin_acknowledge */
23*a8303a15SAnna Dabrowska    protected $helper;
24*a8303a15SAnna Dabrowska
25*a8303a15SAnna Dabrowska    /** @var \helper_plugin_approve_db */
26*a8303a15SAnna Dabrowska    protected $approve;
27*a8303a15SAnna Dabrowska
28*a8303a15SAnna Dabrowska    public function setUp(): void
29*a8303a15SAnna Dabrowska    {
30*a8303a15SAnna Dabrowska        parent::setUp();
31*a8303a15SAnna Dabrowska
32*a8303a15SAnna Dabrowska        // setApprovedStatus() records the approving user from $INFO
33*a8303a15SAnna Dabrowska        global $INFO;
34*a8303a15SAnna Dabrowska        $INFO['client'] = 'someapprover';
35*a8303a15SAnna Dabrowska
36*a8303a15SAnna Dabrowska        $this->helper = plugin_load('helper', 'acknowledge');
37*a8303a15SAnna Dabrowska        $this->approve = plugin_load('helper', 'approve_db');
38*a8303a15SAnna Dabrowska
39*a8303a15SAnna Dabrowska        // track the whole "approved:" namespace
40*a8303a15SAnna Dabrowska        $this->approve->addMaintainer('approved:**', 'someapprover');
41*a8303a15SAnna Dabrowska    }
42*a8303a15SAnna Dabrowska
43*a8303a15SAnna Dabrowska    /**
44*a8303a15SAnna Dabrowska     * Create a wiki page and let approve record its current revision,
45*a8303a15SAnna Dabrowska     * just as the COMMON_WIKIPAGE_SAVE hook would.
46*a8303a15SAnna Dabrowska     *
47*a8303a15SAnna Dabrowska     * @param string $id page id
48*a8303a15SAnna Dabrowska     * @return void
49*a8303a15SAnna Dabrowska     */
50*a8303a15SAnna Dabrowska    protected function createPage($id)
51*a8303a15SAnna Dabrowska    {
52*a8303a15SAnna Dabrowska        saveWikiText($id, 'content', 'test');
53*a8303a15SAnna Dabrowska        $this->approve->handlePageEdit($id);
54*a8303a15SAnna Dabrowska    }
55*a8303a15SAnna Dabrowska
56*a8303a15SAnna Dabrowska    /**
57*a8303a15SAnna Dabrowska     * A page outside any approve-maintained namespace is never blocked.
58*a8303a15SAnna Dabrowska     */
59*a8303a15SAnna Dabrowska    public function testUntrackedPageNotBlocked()
60*a8303a15SAnna Dabrowska    {
61*a8303a15SAnna Dabrowska        $id = 'free:page';
62*a8303a15SAnna Dabrowska        $this->createPage($id);
63*a8303a15SAnna Dabrowska        self::assertFalse($this->helper->isBlockedByApprove($id));
64*a8303a15SAnna Dabrowska    }
65*a8303a15SAnna Dabrowska
66*a8303a15SAnna Dabrowska    /**
67*a8303a15SAnna Dabrowska     * A maintained page that is still a draft is blocked.
68*a8303a15SAnna Dabrowska     */
69*a8303a15SAnna Dabrowska    public function testDraftPageBlocked()
70*a8303a15SAnna Dabrowska    {
71*a8303a15SAnna Dabrowska        $id = 'approved:draft';
72*a8303a15SAnna Dabrowska        $this->createPage($id);
73*a8303a15SAnna Dabrowska        self::assertTrue($this->helper->isBlockedByApprove($id));
74*a8303a15SAnna Dabrowska    }
75*a8303a15SAnna Dabrowska
76*a8303a15SAnna Dabrowska    /**
77*a8303a15SAnna Dabrowska     * A maintained page whose current revision is approved is not blocked.
78*a8303a15SAnna Dabrowska     */
79*a8303a15SAnna Dabrowska    public function testApprovedPageNotBlocked()
80*a8303a15SAnna Dabrowska    {
81*a8303a15SAnna Dabrowska        $id = 'approved:done';
82*a8303a15SAnna Dabrowska        $this->createPage($id);
83*a8303a15SAnna Dabrowska        $this->approve->setApprovedStatus($id);
84*a8303a15SAnna Dabrowska        self::assertFalse($this->helper->isBlockedByApprove($id));
85*a8303a15SAnna Dabrowska    }
86*a8303a15SAnna Dabrowska
87*a8303a15SAnna Dabrowska    /**
88*a8303a15SAnna Dabrowska     * With the integration disabled, even a maintained draft is not blocked.
89*a8303a15SAnna Dabrowska     */
90*a8303a15SAnna Dabrowska    public function testDisabledIntegrationNeverBlocks()
91*a8303a15SAnna Dabrowska    {
92*a8303a15SAnna Dabrowska        global $conf;
93*a8303a15SAnna Dabrowska        $conf['plugin']['acknowledge']['approve_integration'] = 0;
94*a8303a15SAnna Dabrowska
95*a8303a15SAnna Dabrowska        $id = 'approved:ignored';
96*a8303a15SAnna Dabrowska        $this->createPage($id);
97*a8303a15SAnna Dabrowska        self::assertFalse($this->helper->isBlockedByApprove($id));
98*a8303a15SAnna Dabrowska    }
99*a8303a15SAnna Dabrowska}
100