diff --git a/lib/Newsletter/Shortcodes/Categories/Link.php b/lib/Newsletter/Shortcodes/Categories/Link.php index c26f987ec4..d29ad09d76 100644 --- a/lib/Newsletter/Shortcodes/Categories/Link.php +++ b/lib/Newsletter/Shortcodes/Categories/Link.php @@ -126,7 +126,7 @@ class Link { // track unsubscribe event if((boolean) Setting::getValue('tracking.enabled')) { $unsubscribe = new Unsubscribes(); - $unsubscribe->track($subscriber['id'], $queue['id'], $newsletter['id']); + $unsubscribe->track($newsletter['id'], $subscriber['id'], $queue['id']); } $url = SubscriptionUrl::getUnsubscribeUrl($subscriber); break; diff --git a/lib/Statistics/Track/Unsubscribes.php b/lib/Statistics/Track/Unsubscribes.php index 572cb07d51..e5e36f3926 100644 --- a/lib/Statistics/Track/Unsubscribes.php +++ b/lib/Statistics/Track/Unsubscribes.php @@ -6,7 +6,7 @@ use MailPoet\Models\StatisticsUnsubscribes; if(!defined('ABSPATH')) exit; class Unsubscribes { - function track($subscriber_id, $queue_id, $newsletter_id) { + function track($newsletter_id, $subscriber_id, $queue_id) { $statistics = StatisticsUnsubscribes::where('subscriber_id', $subscriber_id) ->where('newsletter_id', $newsletter_id) ->where('queue_id', $queue_id) diff --git a/tests/unit/Statistics/Track/UnsubscribesTest.php b/tests/unit/Statistics/Track/UnsubscribesTest.php new file mode 100644 index 0000000000..0002c6fbfb --- /dev/null +++ b/tests/unit/Statistics/Track/UnsubscribesTest.php @@ -0,0 +1,54 @@ +type = 'type'; + $this->newsletter = $newsletter->save(); + // create subscriber + $subscriber = Subscriber::create(); + $subscriber->email = 'test@example.com'; + $this->subscriber = $subscriber->save(); + // create queue + $queue = SendingQueue::create(); + $queue->newsletter_id = $newsletter->id; + $this->queue = $queue->save(); + // instantiate class + $this->unsubscribes = new Unsubscribes(); + } + + function testItCanUniqueTrack() { + $unsubscribe_events = StatisticsUnsubscribes::findArray(); + expect(count($unsubscribe_events))->equals(0); + // only 1 unique unsubscribe event should be recorded + $unsubscribes = $this->unsubscribes->track( + $this->newsletter->id, + $this->subscriber->id, + $this->queue->id + ); + $unsubscribes = $this->unsubscribes->track( + $this->newsletter->id, + $this->subscriber->id, + $this->queue->id + ); + $unsubscribe_events = StatisticsUnsubscribes::findArray(); + expect(count($unsubscribe_events))->equals(1); + } + + function _after() { + ORM::raw_execute('TRUNCATE ' . Newsletter::$_table); + ORM::raw_execute('TRUNCATE ' . Subscriber::$_table); + ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table); + ORM::raw_execute('TRUNCATE ' . StatisticsUnsubscribes::$_table); + } +}