summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--_test/tests/inc/subscription_set.test.php20
-rw-r--r--inc/subscription.php2
2 files changed, 21 insertions, 1 deletions
diff --git a/_test/tests/inc/subscription_set.test.php b/_test/tests/inc/subscription_set.test.php
new file mode 100644
index 000000000..5c0a6c816
--- /dev/null
+++ b/_test/tests/inc/subscription_set.test.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Tests the subscription set function
+ */
+class subscription_set_test extends DokuWikiTest {
+ /**
+ * Tests, if overwriting subscriptions works even when subscriptions for the same
+ * user exist for two nested namespaces, this is a test for the bug described in FS#2580
+ */
+ function test_overwrite() {
+ subscription_set('admin', ':', 'digest', '123456789');
+ subscription_set('admin', ':wiki:', 'digest', '123456789');
+ subscription_set('admin', ':', 'digest', '1234', true);
+ subscription_set('admin', ':wiki:', 'digest', '1234', true);
+ $subscriptions = subscription_find(':wiki:', array('user' => 'admin'));
+ $this->assertCount(1, $subscriptions[':'], 'More than one subscription saved for the root namespace even though the old one should have been overwritten.');
+ $this->assertCount(1, $subscriptions[':wiki:'], 'More than one subscription saved for the wiki namespace even though the old one should have been overwritten.');
+ $this->assertCount(2, $subscriptions, 'Didn\'t find the expected two subscriptions');
+ }
+}
diff --git a/inc/subscription.php b/inc/subscription.php
index 1bee1152e..029d93e66 100644
--- a/inc/subscription.php
+++ b/inc/subscription.php
@@ -132,7 +132,7 @@ function subscription_set($user, $page, $style, $data = null,
// Delete subscription if one exists and $overwrite is true. If $overwrite
// is false, fail.
$subs = subscription_find($page, array('user' => $user));
- if (count($subs) > 0 && array_pop(array_keys($subs)) === $page) {
+ if (count($subs) > 0 && isset($subs[$page])) {
if (!$overwrite) {
msg(sprintf($lang['subscr_already_subscribed'], $user,
prettyprint_id($page)), -1);