Add missing MSS not activated message & activation button

[MAILPOET-2431]
This commit is contained in:
Jan Jakeš
2019-12-18 11:39:09 +01:00
committed by Jack Kitterhing
parent 8cde305a34
commit 10689f7a3c
6 changed files with 90 additions and 21 deletions

View File

@@ -2,9 +2,15 @@ import PropTypes from 'prop-types';
import React from 'react'; import React from 'react';
import MailPoet from 'mailpoet'; import MailPoet from 'mailpoet';
const validMessage = () => ( const MssStatus = {
KEY_INVALID: 0,
KEY_VALID_MSS_NOT_ACTIVE: 1,
KEY_VALID_MSS_ACTIVE: 2,
};
const activeMessage = () => (
<div className="mailpoet_success mailpoet_mss_key_valid"> <div className="mailpoet_success mailpoet_mss_key_valid">
{MailPoet.I18n.t('premiumTabMssValidMessage')} {MailPoet.I18n.t('premiumTabMssActiveMessage')}
</div> </div>
); );
@@ -14,20 +20,38 @@ const notValidMessage = (message) => (
</div> </div>
); );
const mssNotActiveMessage = (activationCallback) => (
<div className="mailpoet_error">
{MailPoet.I18n.t('premiumTabMssNotActiveMessage')}
{' '}
<button type="button" className="button-link" onClick={activationCallback}>
{MailPoet.I18n.t('premiumTabMssActivateMessage')}
</button>
</div>
);
const MssMessages = (props) => { const MssMessages = (props) => {
if (props.keyValid) { switch (props.keyStatus) {
return validMessage(); case MssStatus.KEY_VALID_MSS_ACTIVE:
} return activeMessage();
case MssStatus.KEY_VALID_MSS_NOT_ACTIVE:
return mssNotActiveMessage(props.activationCallback);
case MssStatus.KEY_INVALID:
return props.keyMessage ? notValidMessage(props.keyMessage) : null; return props.keyMessage ? notValidMessage(props.keyMessage) : null;
default:
return null;
}
}; };
MssMessages.propTypes = { MssMessages.propTypes = {
keyValid: PropTypes.bool.isRequired, keyStatus: PropTypes.number.isRequired,
keyMessage: PropTypes.string, keyMessage: PropTypes.string,
activationCallback: PropTypes.func.isRequired,
}; };
MssMessages.defaultProps = { MssMessages.defaultProps = {
keyMessage: null, keyMessage: null,
}; };
export default MssMessages; export { MssStatus, MssMessages };

View File

@@ -3,7 +3,7 @@ import React, { useMemo, useState } from 'react';
import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom';
import MailPoet from 'mailpoet'; import MailPoet from 'mailpoet';
import KeyMessages from 'settings/premium_tab/messages/key_messages.jsx'; import KeyMessages from 'settings/premium_tab/messages/key_messages.jsx';
import MssMessages from 'settings/premium_tab/messages/mss_messages.jsx'; import { MssStatus, MssMessages } from 'settings/premium_tab/messages/mss_messages.jsx';
import { PremiumStatus, PremiumMessages } from 'settings/premium_tab/messages/premium_messages.jsx'; import { PremiumStatus, PremiumMessages } from 'settings/premium_tab/messages/premium_messages.jsx';
import { PremiumInstallationStatus } from 'settings/premium_tab/messages/premium_installation_messages.jsx'; import { PremiumInstallationStatus } from 'settings/premium_tab/messages/premium_installation_messages.jsx';
@@ -41,16 +41,16 @@ const PremiumTab = (props) => {
const [premiumStatus, setPremiumStatus] = useState(key ? props.premiumStatus : null); const [premiumStatus, setPremiumStatus] = useState(key ? props.premiumStatus : null);
const [premiumMessage, setPremiumMessage] = useState(null); const [premiumMessage, setPremiumMessage] = useState(null);
const [premiumInstallationStatus, setPremiumInstallationStatus] = useState(null); const [premiumInstallationStatus, setPremiumInstallationStatus] = useState(null);
const [mssKeyValid, setMssKeyValid] = useState(key ? props.mssKeyValid : null); const [mssStatus, setMssStatus] = useState(key ? props.mssStatus : null);
const [mssKeyMessage, setMssKeyMessage] = useState(null); const [mssKeyMessage, setMssKeyMessage] = useState(null);
// key is considered valid if either Premium or MSS check passes // key is considered valid if either Premium or MSS check passes
const keyValid = useMemo(() => { const keyValid = useMemo(() => {
if (premiumStatus > PremiumStatus.KEY_INVALID || mssKeyValid) { if (premiumStatus > PremiumStatus.KEY_INVALID || mssStatus > MssStatus.KEY_INVALID) {
return true; return true;
} }
return (premiumStatus === null || mssKeyValid === null) ? null : false; return (premiumStatus === null || mssStatus === null) ? null : false;
}, [premiumStatus, mssKeyValid]); }, [premiumStatus, mssStatus]);
const activatePremiumPlugin = async (isAfterInstall = false) => { const activatePremiumPlugin = async (isAfterInstall = false) => {
const status = PremiumInstallationStatus; const status = PremiumInstallationStatus;
@@ -120,14 +120,15 @@ const PremiumTab = (props) => {
async function verifyMailPoetSendingServiceKey(activateMssIfKeyValid) { async function verifyMailPoetSendingServiceKey(activateMssIfKeyValid) {
try { try {
const response = await requestServicesApi(key, 'checkMSSKey'); const response = await requestServicesApi(key, 'checkMSSKey');
setMssKeyValid(true); setMssStatus(MssStatus.KEY_VALID_MSS_NOT_ACTIVE);
setMssKeyMessage(response.data.message || null); setMssKeyMessage(response.data.message || null);
if (activateMssIfKeyValid) { if (activateMssIfKeyValid) {
await activateMss(key); await activateMss(key);
setMssStatus(MssStatus.KEY_VALID_MSS_ACTIVE);
} }
} catch (error) { } catch (error) {
setMssKeyValid(false); setMssStatus(MssStatus.KEY_INVALID);
setMssKeyMessage(error.errors.map((e) => e.message).join(' ') || null); setMssKeyMessage(error.errors.map((e) => e.message).join(' ') || null);
} }
window.updateMSSActivationUI(); window.updateMSSActivationUI();
@@ -157,7 +158,7 @@ const PremiumTab = (props) => {
setKey(event.target.value.trim() || null); setKey(event.target.value.trim() || null);
setPremiumStatus(null); setPremiumStatus(null);
setPremiumInstallationStatus(null); setPremiumInstallationStatus(null);
setMssKeyValid(null); setMssStatus(null);
}} }}
/> />
<button <button
@@ -175,7 +176,7 @@ const PremiumTab = (props) => {
setPremiumStatus(null); setPremiumStatus(null);
setPremiumInstallationStatus(null); setPremiumInstallationStatus(null);
setMssKeyValid(null); setMssStatus(null);
MailPoet.Modal.loading(true); MailPoet.Modal.loading(true);
const isUserTriggered = event.isTrusted; const isUserTriggered = event.isTrusted;
@@ -190,10 +191,11 @@ const PremiumTab = (props) => {
{keyValid !== null && ( {keyValid !== null && (
<div className="key-activation-messages"> <div className="key-activation-messages">
<KeyMessages keyValid={keyValid} /> <KeyMessages keyValid={keyValid} />
{mssKeyValid !== null && ( {mssStatus !== null && (
<MssMessages <MssMessages
keyValid={mssKeyValid} keyStatus={mssStatus}
keyMessage={mssKeyMessage} keyMessage={mssKeyMessage}
activationCallback={() => verifyMailPoetSendingServiceKey(true)}
/> />
)} )}
{premiumStatus !== null && ( {premiumStatus !== null && (
@@ -217,7 +219,7 @@ const PremiumTab = (props) => {
PremiumTab.propTypes = { PremiumTab.propTypes = {
activationKey: PropTypes.string, activationKey: PropTypes.string,
premiumStatus: PropTypes.number.isRequired, premiumStatus: PropTypes.number.isRequired,
mssKeyValid: PropTypes.bool.isRequired, mssStatus: PropTypes.number.isRequired,
premiumPluginActive: PropTypes.bool.isRequired, premiumPluginActive: PropTypes.bool.isRequired,
}; };
@@ -242,11 +244,20 @@ if (container) {
: PremiumStatus.KEY_VALID_PREMIUM_PLUGIN_NOT_INSTALLED; : PremiumStatus.KEY_VALID_PREMIUM_PLUGIN_NOT_INSTALLED;
}; };
const getMssStatus = () => {
const keyValid = window.mailpoet_mss_key_valid;
const mssActive = window.mailpoet_mss_active;
if (!keyValid) {
return MssStatus.KEY_INVALID;
}
return mssActive ? MssStatus.KEY_VALID_MSS_ACTIVE : MssStatus.KEY_VALID_MSS_NOT_ACTIVE;
};
ReactDOM.render( ReactDOM.render(
<PremiumTab <PremiumTab
activationKey={window.mailpoet_activation_key} activationKey={window.mailpoet_activation_key}
premiumStatus={getPremiumStatus()} premiumStatus={getPremiumStatus()}
mssKeyValid={window.mailpoet_mss_key_valid} mssStatus={getMssStatus()}
premiumPluginActive={!!window.mailpoet_premium_version} premiumPluginActive={!!window.mailpoet_premium_version}
/>, />,
container container

View File

@@ -109,6 +109,12 @@ class Settings {
return $this; return $this;
} }
public function withValidMssKey($key) {
$this->settings->set(Bridge::API_KEY_SETTING_NAME, $key);
$this->settings->set(Bridge::API_KEY_STATE_SETTING_NAME, ['state' => Bridge::KEY_VALID]);
return $this;
}
public function withSendingMethodSmtpMailhog() { public function withSendingMethodSmtpMailhog() {
$this->settings->set('mta_group', 'smtp'); $this->settings->set('mta_group', 'smtp');
$this->settings->set('mta.method', Mailer::METHOD_SMTP); $this->settings->set('mta.method', Mailer::METHOD_SMTP);

View File

@@ -83,4 +83,29 @@ class AddSendingKeyCest {
$i->waitForText('MailPoet Premium is active!'); $i->waitForText('MailPoet Premium is active!');
$i->dontSee('downloading MailPoet Premium…'); $i->dontSee('downloading MailPoet Premium…');
} }
public function activateMss(\AcceptanceTester $i, Scenario $scenario) {
$i->wantTo('Activate MSS');
$mailPoetSendingKey = getenv('WP_TEST_MAILER_MAILPOET_API');
if (!$mailPoetSendingKey) {
$scenario->skip("Skipping, 'WP_TEST_MAILER_MAILPOET_API' not set.");
}
$settings = new Settings();
$settings->withValidMssKey($mailPoetSendingKey);
$keyActivationTab = '[data-automation-id="activation_settings_tab"]';
$i->login();
$i->amOnMailPoetPage('Settings');
$i->click($keyActivationTab);
// MSS not activated
$i->waitForText('Your key is valid');
$i->waitForText('MailPoet Sending Service is not active. Activate MailPoet Sending Service');
// activate MSS
$i->click('Activate MailPoet Sending Service');
$i->waitForText('MailPoet Sending Service is active');
}
} }

View File

@@ -315,6 +315,8 @@
'premiumTabPremiumInstallationActivatingMessage': __('activating MailPoet Premium…', 'mailpoet'), 'premiumTabPremiumInstallationActivatingMessage': __('activating MailPoet Premium…', 'mailpoet'),
'premiumTabPremiumInstallationActiveMessage': __('MailPoet Premium is active!', 'mailpoet'), 'premiumTabPremiumInstallationActiveMessage': __('MailPoet Premium is active!', 'mailpoet'),
'premiumTabPremiumInstallationErrorMessage': __('Something went wrong. Please [link]download the Premium plugin from your account[/link] and [link]contact our support team[/link].', 'mailpoet'), 'premiumTabPremiumInstallationErrorMessage': __('Something went wrong. Please [link]download the Premium plugin from your account[/link] and [link]contact our support team[/link].', 'mailpoet'),
'premiumTabMssValidMessage': __('MailPoet Sending Service is active', 'mailpoet'), 'premiumTabMssActiveMessage': __('MailPoet Sending Service is active', 'mailpoet'),
'premiumTabMssNotActiveMessage': __('MailPoet Sending Service is not active.', 'mailpoet'),
'premiumTabMssActivateMessage': __('Activate MailPoet Sending Service', 'mailpoet'),
}) %> }) %>
<% endblock %> <% endblock %>

View File

@@ -4,6 +4,7 @@
var mailpoet_premium_key_valid = <%= json_encode(premium_key_valid) %>; var mailpoet_premium_key_valid = <%= json_encode(premium_key_valid) %>;
var mailpoet_premium_plugin_installed = <%= json_encode(premium_plugin_installed) %>; var mailpoet_premium_plugin_installed = <%= json_encode(premium_plugin_installed) %>;
var mailpoet_mss_key_valid = <%= json_encode(mss_key_valid) %>; var mailpoet_mss_key_valid = <%= json_encode(mss_key_valid) %>;
var mailpoet_mss_active = <%= json_encode(mss_active) %>;
<% endautoescape %> <% endautoescape %>
</script> </script>