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