xref: /dokuwiki/_test/tests/Subscriptions/SubscriberManagerTest.php (revision 98640fd3947e9ff996e1c9206b5f845465794486)
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