diff --git a/bin/verifications/database/action_counts.js b/bin/verifications/database/action_counts.js index 133c1a2e3..2aa47a9a7 100644 --- a/bin/verifications/database/action_counts.js +++ b/bin/verifications/database/action_counts.js @@ -3,7 +3,6 @@ const CommentModel = require('../../../models/comment'); const ActionsService = require('../../../services/actions'); const {arrayJoinBy} = require('../../../graph/loaders/util'); const {get} = require('lodash'); -const sc = require('snake-case'); const debug = require('debug')('talk:cli:verify'); const MODELS = [ @@ -38,8 +37,8 @@ async function processBatch(Model, documents) { } // And we generate the group id. - const ACTION_TYPE = sc(actionSummary.action_type.toLowerCase()); - const GROUP_ID = sc(actionSummary.group_id.toLowerCase()); + const ACTION_TYPE = actionSummary.action_type.toLowerCase(); + const GROUP_ID = actionSummary.group_id.toLowerCase(); if (GROUP_ID.length <= 0) { continue; diff --git a/client/coral-embed-stream/src/actions/auth.js b/client/coral-embed-stream/src/actions/auth.js index a597d2467..31f6c4b17 100644 --- a/client/coral-embed-stream/src/actions/auth.js +++ b/client/coral-embed-stream/src/actions/auth.js @@ -5,6 +5,11 @@ import {notify} from 'coral-framework/actions/notification'; import t from 'coral-framework/services/i18n'; import get from 'lodash/get'; +export const updateStatus = (status) => ({ + type: actions.UPDATE_STATUS, + status, +}); + export const showSignInDialog = () => ({ type: actions.SHOW_SIGNIN_DIALOG, }); diff --git a/client/coral-embed-stream/src/constants/auth.js b/client/coral-embed-stream/src/constants/auth.js index bb2ea6c15..3187873fe 100644 --- a/client/coral-embed-stream/src/constants/auth.js +++ b/client/coral-embed-stream/src/constants/auth.js @@ -54,3 +54,4 @@ export const SET_REQUIRE_EMAIL_VERIFICATION = 'SET_REQUIRE_EMAIL_VERIFICATION'; export const SET_REDIRECT_URI = 'SET_REDIRECT_URI'; export const RESET_SIGNIN_DIALOG = 'RESET_SIGNIN_DIALOG'; +export const UPDATE_STATUS = 'UPDATE_STATUS'; diff --git a/client/coral-embed-stream/src/containers/Embed.js b/client/coral-embed-stream/src/containers/Embed.js index e0b144d62..6b51bb99a 100644 --- a/client/coral-embed-stream/src/containers/Embed.js +++ b/client/coral-embed-stream/src/containers/Embed.js @@ -21,7 +21,14 @@ import t from 'coral-framework/services/i18n'; import PropTypes from 'prop-types'; import {setActiveTab} from '../actions/embed'; -const {logout, checkLogin, focusSignInDialog, blurSignInDialog, hideSignInDialog} = authActions; +const { + logout, + checkLogin, + focusSignInDialog, + blurSignInDialog, + hideSignInDialog, + updateStatus, +} = authActions; const {fetchAssetSuccess} = assetActions; class EmbedContainer extends React.Component { @@ -35,20 +42,23 @@ class EmbedContainer extends React.Component { if (props.auth.loggedIn) { const newSubscriptions = [{ document: USER_BANNED_SUBSCRIPTION, - updateQuery: () => { + updateQuery: (_, {subscriptionData: {data: {userBanned: {state}}}}) => { notify('info', t('your_account_has_been_banned')); + props.updateStatus(state.status); }, }, { document: USER_SUSPENDED_SUBSCRIPTION, - updateQuery: () => { + updateQuery: (_, {subscriptionData: {data: {userSuspended: {state}}}}) => { notify('info', t('your_account_has_been_suspended')); + props.updateStatus(state.status); }, }, { document: USERNAME_REJECTED_SUBSCRIPTION, - updateQuery: () => { + updateQuery: (_, {subscriptionData: {data: {usernameRejected: {state}}}}) => { notify('info', t('your_username_has_been_rejected')); + props.updateStatus(state.status); }, }]; @@ -260,6 +270,7 @@ const mapDispatchToProps = (dispatch) => focusSignInDialog, blurSignInDialog, hideSignInDialog, + updateStatus, }, dispatch ); diff --git a/client/coral-embed-stream/src/reducers/auth.js b/client/coral-embed-stream/src/reducers/auth.js index 76be05d40..568137b8d 100644 --- a/client/coral-embed-stream/src/reducers/auth.js +++ b/client/coral-embed-stream/src/reducers/auth.js @@ -1,5 +1,6 @@ import * as actions from '../constants/auth'; import pym from 'coral-framework/services/pym'; +import merge from 'lodash/merge'; const initialState = { isLoading: false, @@ -228,38 +229,15 @@ export default function auth (state = initialState, action) { ...state, redirectUri: action.uri, }; - case 'APOLLO_SUBSCRIPTION_RESULT': - - // @TODO: These don't work anymore because apollo store has been decoupled - - if (action.operationName === 'UserBanned' && state.user.id === action.variables.user_id) { - return { - ...state, - user: { - ...state.user, - ...action.result.data.userBanned, - }, - }; - } - if (action.operationName === 'UserSuspended' && state.user.id === action.variables.user_id) { - return { - ...state, - user: { - ...state.user, - ...action.result.data.userSuspended, - }, - }; - } - if (action.operationName === 'UsernameRejected' && state.user.id === action.variables.user_id) { - return { - ...state, - user: { - ...state.user, - ...action.result.data.usernameRejected, - }, - }; - } - return state; + case actions.UPDATE_STATUS: { + return { + ...state, + user: { + ...state.user, + status: merge({}, state.user.status, action.status), + }, + }; + } default : return state; } diff --git a/docs/_docs/03-02-product-guide-commenter-features.md b/docs/_docs/03-02-product-guide-commenter-features.md index 7f56880db..144bdb634 100644 --- a/docs/_docs/03-02-product-guide-commenter-features.md +++ b/docs/_docs/03-02-product-guide-commenter-features.md @@ -197,4 +197,4 @@ will see a message at the top of their streams stating this. ### Ban When a commenter has been banned, they will see a message at the top of their -streams staging this. +streams stating this. diff --git a/test/e2e/page_objects/admin.js b/test/e2e/page_objects/admin.js index 1903ae7e8..3cb6bd4fd 100644 --- a/test/e2e/page_objects/admin.js +++ b/test/e2e/page_objects/admin.js @@ -54,21 +54,29 @@ module.exports = { moderateNav: '.talk-admin-nav-moderate', settingsButton: '.talk-admin-header-settings-button', signOutButton: '.talk-admin-header-sign-out', - suspendUserDialog: '.talk-admin-suspend-user-dialog', - suspendUserDialogStep0: '.talk-admin-suspend-user-dialog-step-0', - suspendUserDialogStep1: '.talk-admin-suspend-user-dialog-step-1', - suspendUserConfirmButton: '.talk-admin-suspend-user-dialog-confirm', - supendUserSendButton: '.talk-admin-suspend-user-dialog-send', - usernameDialog: '.talk-admin-reject-username-dialog', - usernameDialogStep0: '.talk-admin-reject-username-dialog-step-0', - usernameDialogStep1: '.talk-admin-reject-username-dialog-step-1', - usernameDialogButtons: '.talk-admin-reject-username-dialog-buttons', - usernameDialogSuspend: '.talk-admin-reject-username-dialog-button-k', - usernameDialogSuspensionMessage: '.talk-admin-reject-username-dialog-suspension-message', toast: '.toastify', toastClose: '.toastify__close', }, sections: { + suspendUserDialog: { + selector: '.talk-admin-suspend-user-dialog', + elements: { + step0: '.talk-admin-suspend-user-dialog-step-0', + step1: '.talk-admin-suspend-user-dialog-step-1', + confirmButton: '.talk-admin-suspend-user-dialog-confirm', + sendButton: '.talk-admin-suspend-user-dialog-send', + } + }, + usernameDialog: { + selector: '.talk-admin-reject-username-dialog', + elements: { + step0: '.talk-admin-reject-username-dialog-step-0', + step1: '.talk-admin-reject-username-dialog-step-1', + buttons: '.talk-admin-reject-username-dialog-buttons', + suspend: '.talk-admin-reject-username-dialog-button-k', + suspensionMessage: '.talk-admin-reject-username-dialog-suspension-message', + } + }, moderate: { selector: '.talk-admin-moderation-container', elements: { diff --git a/test/e2e/specs/04_userStatus.js b/test/e2e/specs/04_userStatus.js index ce9873f8c..c8c24eb78 100644 --- a/test/e2e/specs/04_userStatus.js +++ b/test/e2e/specs/04_userStatus.js @@ -63,18 +63,17 @@ module.exports = { .click('@flaggedUserRejectButton'); }, 'admin suspends the user': (client) => { - const adminPage = client.page.admin(); const community = client.page.admin().section.community; + const usernameDialog = client.page.admin().section.usernameDialog; - adminPage - .waitForElementVisible('@usernameDialog') - .waitForElementVisible('@usernameDialogButtons') - .waitForElementVisible('@usernameDialogStep0') - .waitForElementVisible('@usernameDialogSuspend') - .click('@usernameDialogSuspend') - .waitForElementVisible('@usernameDialogStep1') - .waitForElementVisible('@usernameDialogSuspend') - .click('@usernameDialogSuspend'); + usernameDialog + .waitForElementVisible('@buttons') + .waitForElementVisible('@step0') + .waitForElementVisible('@suspend') + .click('@suspend') + .waitForElementVisible('@step1') + .waitForElementVisible('@suspend') + .click('@suspend'); community .waitForElementNotPresent('@flaggedUser'); diff --git a/test/e2e/specs/06_suspendUser.js b/test/e2e/specs/06_suspendUser.js index b9491a6bb..dcba97a51 100644 --- a/test/e2e/specs/06_suspendUser.js +++ b/test/e2e/specs/06_suspendUser.js @@ -83,7 +83,7 @@ module.exports = { }, 'admin suspends user': (client) => { const adminPage = client.page.admin(); - const {moderate, userDetailDrawer} = adminPage.section; + const {moderate, userDetailDrawer, suspendUserDialog} = adminPage.section; adminPage .navigate() @@ -101,14 +101,13 @@ module.exports = { .waitForElementVisible('@actionItemSuspendUser') .click('@actionItemSuspendUser'); - adminPage - .waitForElementVisible('@suspendUserDialog') - .waitForElementVisible('@suspendUserDialogStep0') - .waitForElementVisible('@suspendUserConfirmButton') - .click('@suspendUserConfirmButton') - .waitForElementVisible('@suspendUserDialogStep1') - .waitForElementVisible('@supendUserSendButton') - .click('@supendUserSendButton'); + suspendUserDialog + .waitForElementVisible('@step0') + .waitForElementVisible('@confirmButton') + .click('@confirmButton') + .waitForElementVisible('@step1') + .waitForElementVisible('@sendButton') + .click('@sendButton'); adminPage .waitForElementVisible('@toast')