Rework subscriber count reporting after a code review [MAILPOET-804]

Move updateSubscriberCount() out of checkKey()
Move wp_remote_post() to request()
Simplify a response check
This commit is contained in:
Alexey Stoletniy
2017-02-01 21:04:11 +03:00
parent be0c9b71d8
commit dc371d76ca
5 changed files with 34 additions and 18 deletions

View File

@ -26,7 +26,8 @@ class Settings extends APIEndpoint {
&& Bridge::isMPSendingServiceEnabled() && Bridge::isMPSendingServiceEnabled()
) { ) {
$bridge = new Bridge(); $bridge = new Bridge();
$bridge->checkKey($settings['mta']['mailpoet_api_key']); $result = $bridge->checkKey($settings['mta']['mailpoet_api_key']);
$bridge->updateSubscriberCount($result);
} }
return $this->successResponse(Setting::getAll()); return $this->successResponse(Setting::getAll());
} }

View File

@ -88,6 +88,7 @@ class SendingServiceKeyCheck {
try { try {
$mailer_config = Mailer::getMailerConfig(); $mailer_config = Mailer::getMailerConfig();
$result = $this->bridge->checkKey($mailer_config['mailpoet_api_key']); $result = $this->bridge->checkKey($mailer_config['mailpoet_api_key']);
$this->bridge->updateSubscriberCount($result);
} catch (\Exception $e) { } catch (\Exception $e) {
$result = false; $result = false;
} }

View File

@ -42,9 +42,7 @@ class Bridge {
function checkKey($api_key) { function checkKey($api_key) {
$this->initApi($api_key); $this->initApi($api_key);
$result = $this->api->checkKey(); $result = $this->api->checkKey();
$result = $this->processResult($result); return $this->processResult($result);
$this->updateSubscriberCount($result);
return $result;
} }
function processResult(array $result) { function processResult(array $result) {

View File

@ -10,6 +10,8 @@ class API {
const RESPONSE_CODE_KEY_INVALID = 401; const RESPONSE_CODE_KEY_INVALID = 401;
const RESPONSE_CODE_STATS_SAVED = 204;
private $api_key; private $api_key;
public $url_me = 'https://bridge.mailpoet.com/api/v0/me'; public $url_me = 'https://bridge.mailpoet.com/api/v0/me';
@ -22,9 +24,9 @@ class API {
} }
function checkKey() { function checkKey() {
$result = wp_remote_post( $result = $this->request(
$this->url_me, $this->url_me,
$this->request(array('site' => home_url())) array('site' => home_url())
); );
$code = wp_remote_retrieve_response_code($result); $code = wp_remote_retrieve_response_code($result);
@ -45,9 +47,9 @@ class API {
} }
function sendMessages($message_body) { function sendMessages($message_body) {
$result = wp_remote_post( $result = $this->request(
$this->url_messages, $this->url_messages,
$this->request($message_body) $message_body
); );
if(is_wp_error($result)) { if(is_wp_error($result)) {
return array( return array(
@ -70,9 +72,9 @@ class API {
} }
function checkBounces(array $emails) { function checkBounces(array $emails) {
$result = wp_remote_post( $result = $this->request(
$this->url_bounces, $this->url_bounces,
$this->request($emails) $emails
); );
if(wp_remote_retrieve_response_code($result) === 200) { if(wp_remote_retrieve_response_code($result) === 200) {
return json_decode(wp_remote_retrieve_body($result), true); return json_decode(wp_remote_retrieve_body($result), true);
@ -81,14 +83,12 @@ class API {
} }
function updateSubscriberCount($count) { function updateSubscriberCount($count) {
$result = wp_remote_post( $result = $this->request(
$this->url_stats, $this->url_stats,
$this->request(array('subscriber_count' => (int)$count), 'PUT') array('subscriber_count' => (int)$count),
'PUT'
); );
if(wp_remote_retrieve_response_code($result) === 204) { return wp_remote_retrieve_response_code($result) === self::RESPONSE_CODE_STATS_SAVED;
return true;
}
return false;
} }
function setKey($api_key) { function setKey($api_key) {
@ -103,8 +103,8 @@ class API {
return 'Basic ' . base64_encode('api:' . $this->api_key); return 'Basic ' . base64_encode('api:' . $this->api_key);
} }
private function request($body, $method = 'POST') { private function request($url, $body, $method = 'POST') {
return array( $params = array(
'timeout' => 10, 'timeout' => 10,
'httpversion' => '1.0', 'httpversion' => '1.0',
'method' => $method, 'method' => $method,
@ -114,5 +114,6 @@ class API {
), ),
'body' => json_encode($body) 'body' => json_encode($body)
); );
return wp_remote_post($url, $params);
} }
} }

View File

@ -60,6 +60,21 @@ class BridgeTest extends MailPoetTest {
expect($result['state'])->equals(Bridge::MAILPOET_KEY_CHECK_ERROR); expect($result['state'])->equals(Bridge::MAILPOET_KEY_CHECK_ERROR);
} }
function testItUpdatesSubscriberCount() {
// it performs update if the key is valid or expiring
$result = array();
$result['state'] = Bridge::MAILPOET_KEY_VALID;
$updated = $this->bridge->updateSubscriberCount($result);
expect($updated)->true();
$result['state'] = Bridge::MAILPOET_KEY_EXPIRING;
$updated = $this->bridge->updateSubscriberCount($result);
expect($updated)->true();
// it does not perform update if the key is invalid
$result['state'] = Bridge::MAILPOET_KEY_INVALID;
$updated = $this->bridge->updateSubscriberCount($result);
expect($updated)->null();
}
function testItInvalidatesKey() { function testItInvalidatesKey() {
Setting::setValue( Setting::setValue(
Bridge::API_KEY_STATE_SETTING_NAME, Bridge::API_KEY_STATE_SETTING_NAME,