1*98640fd3SAndreas Gohr<?php 2*98640fd3SAndreas Gohr 3*98640fd3SAndreas Gohrnamespace dokuwiki\test\Subscriptions; 4*98640fd3SAndreas Gohr 5*98640fd3SAndreas Gohruse dokuwiki\Subscriptions\SubscriberManager; 6*98640fd3SAndreas Gohruse DokuWikiTest; 7*98640fd3SAndreas Gohr 8*98640fd3SAndreas Gohrclass SubscriberManagerTest extends DokuWikiTest 9*98640fd3SAndreas Gohr{ 10*98640fd3SAndreas Gohr private $originalSubscriptionConfig; 11*98640fd3SAndreas Gohr 12*98640fd3SAndreas Gohr public function setUp() : void 13*98640fd3SAndreas Gohr { 14*98640fd3SAndreas Gohr parent::setUp(); 15*98640fd3SAndreas Gohr global $conf; 16*98640fd3SAndreas Gohr $this->originalSubscriptionConfig = $conf['subscribers']; 17*98640fd3SAndreas Gohr $conf['subscribers'] = true; 18*98640fd3SAndreas Gohr } 19*98640fd3SAndreas Gohr 20*98640fd3SAndreas Gohr protected function tearDown() : void 21*98640fd3SAndreas Gohr { 22*98640fd3SAndreas Gohr global $conf; 23*98640fd3SAndreas Gohr $conf['subscribers'] = $this->originalSubscriptionConfig; 24*98640fd3SAndreas Gohr parent::tearDown(); 25*98640fd3SAndreas Gohr } 26*98640fd3SAndreas Gohr 27*98640fd3SAndreas Gohr public function testAddremove() 28*98640fd3SAndreas Gohr { 29*98640fd3SAndreas Gohr $sub = new SubscriberManager(); 30*98640fd3SAndreas Gohr 31*98640fd3SAndreas Gohr // no subscriptions 32*98640fd3SAndreas Gohr $this->assertArrayNotHasKey( 33*98640fd3SAndreas Gohr 'wiki:dokuwiki', 34*98640fd3SAndreas Gohr $sub->subscribers('wiki:dokuwiki', null, ['every', 'list', 'digest']) 35*98640fd3SAndreas Gohr ); 36*98640fd3SAndreas Gohr 37*98640fd3SAndreas Gohr // add page subscription 38*98640fd3SAndreas Gohr $sub->add('wiki:dokuwiki', 'testuser', 'every'); 39*98640fd3SAndreas Gohr 40*98640fd3SAndreas Gohr // one subscription 41*98640fd3SAndreas Gohr $this->assertArrayHasKey( 42*98640fd3SAndreas Gohr 'wiki:dokuwiki', 43*98640fd3SAndreas Gohr $sub->subscribers('wiki:dokuwiki', null, ['every', 'list', 'digest']) 44*98640fd3SAndreas Gohr ); 45*98640fd3SAndreas Gohr 46*98640fd3SAndreas Gohr // remove page subscription 47*98640fd3SAndreas Gohr $sub->remove('wiki:dokuwiki', 'testuser'); 48*98640fd3SAndreas Gohr 49*98640fd3SAndreas Gohr // no subscription 50*98640fd3SAndreas Gohr $this->assertArrayNotHasKey( 51*98640fd3SAndreas Gohr 'wiki:dokuwiki', 52*98640fd3SAndreas Gohr $sub->subscribers('wiki:dokuwiki', null, ['every', 'list', 'digest']) 53*98640fd3SAndreas Gohr ); 54*98640fd3SAndreas Gohr 55*98640fd3SAndreas Gohr // add namespace subscription 56*98640fd3SAndreas Gohr $sub->add('wiki:', 'testuser', 'every'); 57*98640fd3SAndreas Gohr 58*98640fd3SAndreas Gohr // one subscription 59*98640fd3SAndreas Gohr $this->assertArrayHasKey( 60*98640fd3SAndreas Gohr 'wiki:', 61*98640fd3SAndreas Gohr $sub->subscribers('wiki:dokuwiki', null, ['every', 'list', 'digest']) 62*98640fd3SAndreas Gohr ); 63*98640fd3SAndreas Gohr 64*98640fd3SAndreas Gohr // remove (non existing) page subscription 65*98640fd3SAndreas Gohr $sub->remove('wiki:dokuwiki', 'testuser'); 66*98640fd3SAndreas Gohr 67*98640fd3SAndreas Gohr // still one subscription 68*98640fd3SAndreas Gohr $this->assertArrayHasKey( 69*98640fd3SAndreas Gohr 'wiki:', 70*98640fd3SAndreas Gohr $sub->subscribers('wiki:dokuwiki', null, ['every', 'list', 'digest']) 71*98640fd3SAndreas Gohr ); 72*98640fd3SAndreas Gohr 73*98640fd3SAndreas Gohr // change namespace subscription 74*98640fd3SAndreas Gohr $sub->add('wiki:', 'testuser', 'digest', '1234567'); 75*98640fd3SAndreas Gohr 76*98640fd3SAndreas Gohr // still one subscription 77*98640fd3SAndreas Gohr $this->assertArrayHasKey( 78*98640fd3SAndreas Gohr 'wiki:', 79*98640fd3SAndreas Gohr $sub->subscribers('wiki:dokuwiki', null, ['every', 'list', 'digest']) 80*98640fd3SAndreas Gohr ); 81*98640fd3SAndreas Gohr 82*98640fd3SAndreas Gohr // check contents 83*98640fd3SAndreas Gohr $this->assertEquals( 84*98640fd3SAndreas Gohr ['wiki:' => ['testuser' => ['digest', '1234567']]], 85*98640fd3SAndreas Gohr $sub->subscribers('wiki:dokuwiki', null, ['every', 'list', 'digest']) 86*98640fd3SAndreas Gohr ); 87*98640fd3SAndreas Gohr 88*98640fd3SAndreas Gohr // change subscription data 89*98640fd3SAndreas Gohr $sub->add('wiki:', 'testuser', 'digest', '7654321'); 90*98640fd3SAndreas Gohr 91*98640fd3SAndreas Gohr // still one subscription 92*98640fd3SAndreas Gohr $this->assertArrayHasKey( 93*98640fd3SAndreas Gohr 'wiki:', 94*98640fd3SAndreas Gohr $sub->subscribers('wiki:dokuwiki', null, ['every', 'list', 'digest']) 95*98640fd3SAndreas Gohr ); 96*98640fd3SAndreas Gohr 97*98640fd3SAndreas Gohr // check contents 98*98640fd3SAndreas Gohr $this->assertEquals( 99*98640fd3SAndreas Gohr ['wiki:' => ['testuser' => ['digest', '7654321']]], 100*98640fd3SAndreas Gohr $sub->subscribers('wiki:dokuwiki', null, ['every', 'list', 'digest']) 101*98640fd3SAndreas Gohr ); 102*98640fd3SAndreas Gohr } 103*98640fd3SAndreas Gohr 104*98640fd3SAndreas Gohr /** 105*98640fd3SAndreas Gohr * Tests, if overwriting subscriptions works even when subscriptions for the same 106*98640fd3SAndreas Gohr * user exist for two nested namespaces, this is a test for the bug described in FS#2580 107*98640fd3SAndreas Gohr */ 108*98640fd3SAndreas Gohr public function testOverwrite() 109*98640fd3SAndreas Gohr { 110*98640fd3SAndreas Gohr $sub = new SubscriberManager(); 111*98640fd3SAndreas Gohr 112*98640fd3SAndreas Gohr $sub->add(':', 'admin', 'digest', '123456789'); 113*98640fd3SAndreas Gohr $sub->add(':wiki:', 'admin', 'digest', '123456789'); 114*98640fd3SAndreas Gohr $sub->add(':', 'admin', 'digest', '1234'); 115*98640fd3SAndreas Gohr $sub->add(':wiki:', 'admin', 'digest', '1234'); 116*98640fd3SAndreas Gohr 117*98640fd3SAndreas Gohr $subscriptions = $sub->subscribers(':wiki:', 'admin'); 118*98640fd3SAndreas Gohr 119*98640fd3SAndreas Gohr $this->assertCount( 120*98640fd3SAndreas Gohr 1, 121*98640fd3SAndreas Gohr $subscriptions[':'], 122*98640fd3SAndreas Gohr 'More than one subscription saved for the root namespace even though the old one should have been overwritten.' 123*98640fd3SAndreas Gohr ); 124*98640fd3SAndreas Gohr $this->assertCount( 125*98640fd3SAndreas Gohr 1, 126*98640fd3SAndreas Gohr $subscriptions[':wiki:'], 127*98640fd3SAndreas Gohr 'More than one subscription saved for the wiki namespace even though the old one should have been overwritten.' 128*98640fd3SAndreas Gohr ); 129*98640fd3SAndreas Gohr $this->assertCount(2, $subscriptions, 'Didn\'t find the expected two subscriptions'); 130*98640fd3SAndreas Gohr } 131*98640fd3SAndreas Gohr} 132