settings = SettingsController::getInstance(); $referralDetector = new ReferralDetector(WPFunctions::get(), $this->settings); $featuresController = Stub::makeEmpty(FeaturesController::class); $populator = new Populator($this->settings, WPFunctions::get(), new Captcha, $referralDetector, $featuresController); $populator->up(); $this->url = new SubscriptionUrlFactory(WPFunctions::get(), $this->settings, new LinkTokens); } public function testItReturnsTheDefaultPageUrlIfNoPageIsSetInSettings() { $this->settings->delete('subscription'); $url = $this->url->getCaptchaUrl('abc'); expect($url)->notNull(); expect($url)->contains('action=captcha'); expect($url)->contains('endpoint=subscription'); $url = $this->url->getUnsubscribeUrl(null); expect($url)->notNull(); expect($url)->contains('action=unsubscribe'); expect($url)->contains('endpoint=subscription'); } public function testItReturnsTheCaptchaUrl() { $url = $this->url->getCaptchaUrl('abc'); expect($url)->notNull(); expect($url)->contains('action=captcha'); expect($url)->contains('endpoint=subscription'); } public function testItReturnsTheCaptchaImageUrl() { $url = $this->url->getCaptchaImageUrl(250, 100, 'abc'); expect($url)->notNull(); expect($url)->contains('action=captchaImage'); expect($url)->contains('endpoint=subscription'); } public function testItReturnsTheConfirmationUrl() { // preview $url = $this->url->getConfirmationUrl(null); expect($url)->notNull(); expect($url)->contains('action=confirm'); expect($url)->contains('endpoint=subscription'); // actual subscriber $subscriber = Subscriber::createOrUpdate([ 'email' => 'john@mailpoet.com', ]); $url = $this->url->getConfirmationUrl($subscriber); expect($url)->contains('action=confirm'); expect($url)->contains('endpoint=subscription'); $this->checkData($url); } public function testItReturnsTheManageSubscriptionUrl() { // preview $url = $this->url->getManageUrl(null); expect($url)->notNull(); expect($url)->contains('action=manage'); expect($url)->contains('endpoint=subscription'); // actual subscriber $subscriber = Subscriber::createOrUpdate([ 'email' => 'john@mailpoet.com', ]); $url = $this->url->getManageUrl($subscriber); expect($url)->contains('action=manage'); expect($url)->contains('endpoint=subscription'); $this->checkData($url); } public function testItReturnsTheUnsubscribeUrl() { // preview $url = $this->url->getUnsubscribeUrl(null); expect($url)->notNull(); expect($url)->contains('action=unsubscribe'); expect($url)->contains('endpoint=subscription'); // actual subscriber $subscriber = Subscriber::createOrUpdate([ 'email' => 'john@mailpoet.com', ]); $url = $this->url->getUnsubscribeUrl($subscriber); expect($url)->contains('action=unsubscribe'); expect($url)->contains('endpoint=subscription'); $this->checkData($url); } private function checkData($url) { // extract & decode data from url $urlParamsQuery = parse_url($url, PHP_URL_QUERY); parse_str((string)$urlParamsQuery, $params); $data = Router::decodeRequestData($params['data']); expect($data['email'])->contains('john@mailpoet.com'); expect($data['token'])->notEmpty(); } public function _after() { $this->diContainer->get(SettingsRepository::class)->truncate(); Subscriber::deleteMany(); } }