add data-testid for leftpane sections and edit profile dialog

pull/2039/head
Audric Ackermann 4 years ago
parent c1471426ac
commit 4ce1b7813a
No known key found for this signature in database
GPG Key ID: 999F434D76324AD4

@ -23,6 +23,7 @@ type Props = {
base64Data?: string; // if this is not empty, it will be used to render the avatar with base64 encoded data base64Data?: string; // if this is not empty, it will be used to render the avatar with base64 encoded data
memberAvatars?: Array<ConversationAvatar>; // this is added by usingClosedConversationDetails memberAvatars?: Array<ConversationAvatar>; // this is added by usingClosedConversationDetails
onAvatarClick?: () => void; onAvatarClick?: () => void;
dataTestId?: string;
}; };
const Identicon = (props: Props) => { const Identicon = (props: Props) => {
@ -92,7 +93,7 @@ const AvatarImage = (props: {
}; };
const AvatarInner = (props: Props) => { const AvatarInner = (props: Props) => {
const { avatarPath, base64Data, size, memberAvatars, name } = props; const { avatarPath, base64Data, size, memberAvatars, name, dataTestId } = props;
const [imageBroken, setImageBroken] = useState(false); const [imageBroken, setImageBroken] = useState(false);
// contentType is not important // contentType is not important
const { urlToLoad } = useEncryptedFileFetch(avatarPath || '', ''); const { urlToLoad } = useEncryptedFileFetch(avatarPath || '', '');
@ -122,6 +123,7 @@ const AvatarInner = (props: Props) => {
props.onAvatarClick?.(); props.onAvatarClick?.();
}} }}
role="button" role="button"
data-testid={dataTestId}
> >
{hasImage ? ( {hasImage ? (
<AvatarImage <AvatarImage

@ -107,7 +107,7 @@ const SelectionOverlay = () => {
return ( return (
<div className="message-selection-overlay"> <div className="message-selection-overlay">
<div className="close-button"> <div className="close-button">
<SessionIconButton iconType="exit" iconSize={'medium'} onClick={onCloseOverlay} /> <SessionIconButton iconType="exit" iconSize="medium" onClick={onCloseOverlay} />
</div> </div>
<div className="button-group"> <div className="button-group">
@ -145,7 +145,7 @@ const TripleDotsMenu = (props: { triggerId: string; showBackButton: boolean }) =
}); });
}} }}
> >
<SessionIconButton iconType="ellipses" iconSize={'medium'} /> <SessionIconButton iconType="ellipses" iconSize="medium" />
</div> </div>
); );
}; };

@ -45,7 +45,7 @@ const Sections = (props: Props & { selectedTab: TabType }) => {
const label = const label =
type === 'media' ? window.i18n('mediaEmptyState') : window.i18n('documentsEmptyState'); type === 'media' ? window.i18n('mediaEmptyState') : window.i18n('documentsEmptyState');
return <EmptyState data-test="EmptyState" label={label} />; return <EmptyState data-testid="EmptyState" label={label} />;
} }
return ( return (

@ -82,7 +82,7 @@ export class EditProfileDialog extends React.Component<{}, State> {
: undefined; : undefined;
return ( return (
<div className="edit-profile-dialog"> <div className="edit-profile-dialog" data-testid="edit-profile-dialog">
<SessionWrapperModal <SessionWrapperModal
title={i18n('editProfileModalTitle')} title={i18n('editProfileModalTitle')}
onClose={this.closeDialog} onClose={this.closeDialog}
@ -97,7 +97,10 @@ export class EditProfileDialog extends React.Component<{}, State> {
<div className="session-id-section"> <div className="session-id-section">
<PillDivider text={window.i18n('yourSessionID')} /> <PillDivider text={window.i18n('yourSessionID')} />
<p className={classNames('text-selectable', 'session-id-section-display')}> <p
className={classNames('text-selectable', 'session-id-section-display')}
data-testid="your-session-id"
>
{sessionID} {sessionID}
</p> </p>
@ -182,10 +185,10 @@ export class EditProfileDialog extends React.Component<{}, State> {
{this.renderProfileHeader()} {this.renderProfileHeader()}
<div className="profile-name-uneditable"> <div className="profile-name-uneditable">
<p>{name}</p> <p data-testid="your-profile-name">{name}</p>
<SessionIconButton <SessionIconButton
iconType="pencil" iconType="pencil"
iconSize={'medium'} iconSize="medium"
onClick={() => { onClick={() => {
this.setState({ mode: 'edit' }); this.setState({ mode: 'edit' });
}} }}

@ -150,8 +150,9 @@ export const ModalStatusLight = (props: StatusLightType) => {
export const ActionPanelOnionStatusLight = (props: { export const ActionPanelOnionStatusLight = (props: {
isSelected: boolean; isSelected: boolean;
handleClick: () => void; handleClick: () => void;
dataTestId?: string;
}) => { }) => {
const { isSelected, handleClick } = props; const { isSelected, handleClick, dataTestId } = props;
const onionPathsCount = useSelector(getOnionPathsCount); const onionPathsCount = useSelector(getOnionPathsCount);
const firstPathLength = useSelector(getFirstOnionPathLength); const firstPathLength = useSelector(getFirstOnionPathLength);
@ -179,6 +180,7 @@ export const ActionPanelOnionStatusLight = (props: {
glowStartDelay={0} glowStartDelay={0}
noScale={true} noScale={true}
isSelected={isSelected} isSelected={isSelected}
dataTestId={dataTestId}
/> />
); );
}; };

@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { SessionIconButton, SessionIconType } from './icon'; import { SessionIconButton } from './icon';
import { Avatar, AvatarSize } from '../Avatar'; import { Avatar, AvatarSize } from '../Avatar';
import { SessionToastContainer } from './SessionToastContainer'; import { SessionToastContainer } from './SessionToastContainer';
import { getConversationController } from '../../session/conversations'; import { getConversationController } from '../../session/conversations';
@ -96,47 +96,71 @@ const Section = (props: { type: SectionType; avatarPath?: string | null }) => {
onAvatarClick={handleClick} onAvatarClick={handleClick}
name={userName} name={userName}
pubkey={ourNumber} pubkey={ourNumber}
dataTestId="leftpane-primary-avatar"
/> />
); );
} }
const unreadToShow = type === SectionType.Message ? unreadMessageCount : undefined; const unreadToShow = type === SectionType.Message ? unreadMessageCount : undefined;
let iconType: SessionIconType;
switch (type) { switch (type) {
case SectionType.Message: case SectionType.Message:
iconType = 'chatBubble'; return (
break; <SessionIconButton
iconSize="medium"
dataTestId="message-section"
iconType={'chatBubble'}
iconColor={undefined}
notificationCount={unreadToShow}
onClick={handleClick}
isSelected={isSelected}
/>
);
case SectionType.Contact: case SectionType.Contact:
iconType = 'users'; return (
break; <SessionIconButton
iconSize="medium"
dataTestId="contact-section"
iconType={'users'}
iconColor={undefined}
notificationCount={unreadToShow}
onClick={handleClick}
isSelected={isSelected}
/>
);
case SectionType.Settings: case SectionType.Settings:
iconType = 'gear'; return (
break; <SessionIconButton
case SectionType.Moon: iconSize="medium"
iconType = 'moon'; dataTestId="settings-section"
break; iconType={'gear'}
iconColor={undefined}
notificationCount={unreadToShow}
onClick={handleClick}
isSelected={isSelected}
/>
);
case SectionType.PathIndicator:
return (
<ActionPanelOnionStatusLight
dataTestId="onion-status-section"
handleClick={handleClick}
isSelected={isSelected}
/>
);
default: default:
iconType = 'moon'; return (
}
const iconColor = undefined;
return (
<>
{type === SectionType.PathIndicator ? (
<ActionPanelOnionStatusLight handleClick={handleClick} isSelected={isSelected} />
) : (
<SessionIconButton <SessionIconButton
iconSize={'medium'} iconSize="medium"
iconType={iconType} iconType={'moon'}
iconColor={iconColor} dataTestId="theme-section"
iconColor={undefined}
notificationCount={unreadToShow} notificationCount={unreadToShow}
onClick={handleClick} onClick={handleClick}
isSelected={isSelected} isSelected={isSelected}
/> />
)} );
</> }
);
}; };
const cleanUpMediasInterval = DURATION.MINUTES * 30; const cleanUpMediasInterval = DURATION.MINUTES * 30;
@ -300,7 +324,10 @@ export const ActionsPanel = () => {
<ModalContainer /> <ModalContainer />
<CallContainer /> <CallContainer />
<div className="module-left-pane__sections-container"> <div
className="module-left-pane__sections-container"
data-testid="leftpane-section-container"
>
<Section type={SectionType.Profile} avatarPath={ourPrimaryConversation.avatarPath} /> <Section type={SectionType.Profile} avatarPath={ourPrimaryConversation.avatarPath} />
<Section type={SectionType.Message} /> <Section type={SectionType.Message} />
<Section type={SectionType.Contact} /> <Section type={SectionType.Contact} />

@ -58,7 +58,7 @@ const LeftPaneSettingsCategoryRow = (props: { item: any }) => {
<div> <div>
{item.id === focusedSettingsSection && ( {item.id === focusedSettingsSection && (
<SessionIcon iconSize={'medium'} iconType="chevron" iconRotation={270} /> <SessionIcon iconSize="medium" iconType="chevron" iconRotation={270} />
)} )}
</div> </div>
</div> </div>

@ -108,7 +108,7 @@ export class SessionInput extends React.PureComponent<Props, State> {
return ( return (
<SessionIconButton <SessionIconButton
iconType="eye" iconType="eye"
iconSize={'medium'} iconSize="medium"
onClick={() => { onClick={() => {
this.setState({ this.setState({
forceShow: !this.state.forceShow, forceShow: !this.state.forceShow,

@ -72,7 +72,7 @@ export const SessionMemberListItem = (props: Props) => {
<span className="session-member-item__name">{name}</span> <span className="session-member-item__name">{name}</span>
</div> </div>
<span className={classNames('session-member-item__checkmark', isSelected && 'selected')}> <span className={classNames('session-member-item__checkmark', isSelected && 'selected')}>
<SessionIcon iconType="check" iconSize={'medium'} iconColor={Constants.UI.COLORS.GREEN} /> <SessionIcon iconType="check" iconSize="medium" iconColor={Constants.UI.COLORS.GREEN} />
</span> </span>
</div> </div>
); );

@ -21,7 +21,7 @@ export const SessionSearchInput = (props: Props) => {
return ( return (
<div className="session-search-input"> <div className="session-search-input">
<SessionIconButton iconSize={'medium'} iconType="search" /> <SessionIconButton iconSize="medium" iconType="search" />
<input <input
value={searchString} value={searchString}
onChange={e => onChange(e.target.value)} onChange={e => onChange(e.target.value)}

@ -125,16 +125,16 @@ export class SessionRecording extends React.Component<Props, State> {
{isRecording && ( {isRecording && (
<SessionIconButton <SessionIconButton
iconType="pause" iconType="pause"
iconSize={'medium'} iconSize="medium"
iconColor={Constants.UI.COLORS.DANGER_ALT} iconColor={Constants.UI.COLORS.DANGER_ALT}
onClick={actionPauseFn} onClick={actionPauseFn}
/> />
)} )}
{actionPauseAudio && ( {actionPauseAudio && (
<SessionIconButton iconType="pause" iconSize={'medium'} onClick={actionPauseFn} /> <SessionIconButton iconType="pause" iconSize="medium" onClick={actionPauseFn} />
)} )}
{hasRecordingAndPaused && ( {hasRecordingAndPaused && (
<SessionIconButton iconType="play" iconSize={'medium'} onClick={this.playAudio} /> <SessionIconButton iconType="play" iconSize="medium" onClick={this.playAudio} />
)} )}
{hasRecording && ( {hasRecording && (
<SessionIconButton <SessionIconButton

@ -133,7 +133,7 @@ const HeaderItem = () => {
<div className="group-settings-header"> <div className="group-settings-header">
<SessionIconButton <SessionIconButton
iconType="chevron" iconType="chevron"
iconSize={'medium'} iconSize="medium"
iconRotation={270} iconRotation={270}
onClick={() => { onClick={() => {
dispatch(closeRightPanel()); dispatch(closeRightPanel());

@ -10,6 +10,7 @@ interface SProps extends SessionIconProps {
isSelected?: boolean; isSelected?: boolean;
isHidden?: boolean; isHidden?: boolean;
margin?: string; margin?: string;
dataTestId?: string;
} }
const SessionIconButtonInner = React.forwardRef<HTMLDivElement, SProps>((props, ref) => { const SessionIconButtonInner = React.forwardRef<HTMLDivElement, SProps>((props, ref) => {
@ -43,6 +44,7 @@ const SessionIconButtonInner = React.forwardRef<HTMLDivElement, SProps>((props,
ref={ref} ref={ref}
onClick={clickHandler} onClick={clickHandler}
style={{ display: isHidden ? 'none' : 'flex', margin: margin ? margin : '' }} style={{ display: isHidden ? 'none' : 'flex', margin: margin ? margin : '' }}
data-testid={props.dataTestId}
> >
<SessionIcon <SessionIcon
iconType={iconType} iconType={iconType}

@ -48,7 +48,7 @@ const SessionInfo = () => {
<div className="session-settings__version-info"> <div className="session-settings__version-info">
<span className="text-selectable">v{window.versionInfo.version}</span> <span className="text-selectable">v{window.versionInfo.version}</span>
<span> <span>
<SessionIconButton iconSize={'medium'} iconType="oxen" onClick={openOxenWebsite} /> <SessionIconButton iconSize="medium" iconType="oxen" onClick={openOxenWebsite} />
</span> </span>
<span className="text-selectable">{window.versionInfo.commitHash}</span> <span className="text-selectable">{window.versionInfo.commitHash}</span>
</div> </div>

Loading…
Cancel
Save