diff options
| author | Oskar Nyberg <oskar@mullvad.net> | 2023-03-27 10:18:51 +0200 |
|---|---|---|
| committer | Oskar Nyberg <oskar@mullvad.net> | 2023-03-27 10:18:51 +0200 |
| commit | 29b31e9702e6a88f98e0f328c369da9bb1eb2f8d (patch) | |
| tree | d6ae2c20818a1e6deabc504c5ebc8a356fd3faaf /gui/src | |
| parent | f0c2c90698175db6ffa61de962cc677c9a52dbb2 (diff) | |
| parent | 50dc0f9025b5b97539841b3c2b58c5f4c0c41909 (diff) | |
| download | mullvadvpn-29b31e9702e6a88f98e0f328c369da9bb1eb2f8d.tar.xz mullvadvpn-29b31e9702e6a88f98e0f328c369da9bb1eb2f8d.zip | |
Merge branch 'create-automated-tests-for-login-des-60'
Diffstat (limited to 'gui/src')
| -rw-r--r-- | gui/src/renderer/components/AccountTokenLabel.tsx | 1 | ||||
| -rw-r--r-- | gui/src/renderer/components/ClipboardLabel.tsx | 18 | ||||
| -rw-r--r-- | gui/src/renderer/components/ExpiredAccountErrorView.tsx | 8 | ||||
| -rw-r--r-- | gui/src/renderer/components/Login.tsx | 2 | ||||
| -rw-r--r-- | gui/src/renderer/components/MainView.tsx | 1 |
5 files changed, 18 insertions, 12 deletions
diff --git a/gui/src/renderer/components/AccountTokenLabel.tsx b/gui/src/renderer/components/AccountTokenLabel.tsx index 704f41af10..479beed9a1 100644 --- a/gui/src/renderer/components/AccountTokenLabel.tsx +++ b/gui/src/renderer/components/AccountTokenLabel.tsx @@ -14,6 +14,7 @@ export default function AccountTokenLabel(props: IAccountTokenLabelProps) { displayValue={formatAccountToken(props.accountToken)} obscureValue={props.obscureValue} className={props.className} + data-testid="account-number" /> ); } diff --git a/gui/src/renderer/components/ClipboardLabel.tsx b/gui/src/renderer/components/ClipboardLabel.tsx index 98fcede85e..582e03b02d 100644 --- a/gui/src/renderer/components/ClipboardLabel.tsx +++ b/gui/src/renderer/components/ClipboardLabel.tsx @@ -10,12 +10,11 @@ import ImageView from './ImageView'; const COPIED_ICON_DURATION = 2000; -interface IProps { +interface IProps extends React.HTMLAttributes<HTMLElement> { value: string; displayValue?: string; obscureValue?: boolean; message?: string; - className?: string; } const StyledLabelContainer = styled.div({ @@ -42,29 +41,30 @@ const StyledCopyButton = styled(StyledButton)({ }); export default function ClipboardLabel(props: IProps) { - const [obscured, , , toggleObscured] = useBoolean(props.obscureValue ?? true); + const { value, obscureValue, displayValue, message, ...otherProps } = props; + + const [obscured, , , toggleObscured] = useBoolean(obscureValue ?? true); const [justCopied, setJustCopied, resetJustCopied] = useBoolean(false); const copiedScheduler = useScheduler(); const onCopy = useCallback(async () => { try { - await navigator.clipboard.writeText(props.value); + await navigator.clipboard.writeText(value); copiedScheduler.schedule(resetJustCopied, COPIED_ICON_DURATION); setJustCopied(); } catch (e) { const error = e as Error; log.error(`Failed to copy to clipboard: ${error.message}`); } - }, [props.value, copiedScheduler, setJustCopied, resetJustCopied]); + }, [value, copiedScheduler, setJustCopied, resetJustCopied]); - const value = props.displayValue ?? props.value; return ( <StyledLabelContainer> - <StyledLabel className={props.className} aria-hidden={obscured}> - {obscured ? '●●●● ●●●● ●●●● ●●●●' : value} + <StyledLabel aria-hidden={obscured} {...otherProps}> + {obscured ? '●●●● ●●●● ●●●● ●●●●' : displayValue ?? value} </StyledLabel> - {props.obscureValue !== false && ( + {obscureValue !== false && ( <StyledButton onClick={toggleObscured} aria-label={ diff --git a/gui/src/renderer/components/ExpiredAccountErrorView.tsx b/gui/src/renderer/components/ExpiredAccountErrorView.tsx index 8cfcdb1d46..d5af378cca 100644 --- a/gui/src/renderer/components/ExpiredAccountErrorView.tsx +++ b/gui/src/renderer/components/ExpiredAccountErrorView.tsx @@ -107,7 +107,9 @@ function WelcomeView() { return ( <> - <StyledTitle>{messages.pgettext('connect-view', 'Congrats!')}</StyledTitle> + <StyledTitle data-testid="title"> + {messages.pgettext('connect-view', 'Congrats!')} + </StyledTitle> <StyledAccountTokenMessage> {messages.pgettext('connect-view', 'Here’s your account number. Save it!')} <StyledAccountTokenContainer> @@ -136,7 +138,9 @@ function Content() { <StyledStatusIcon> <ImageView source="icon-fail" height={60} width={60} /> </StyledStatusIcon> - <StyledTitle>{messages.pgettext('connect-view', 'Out of time')}</StyledTitle> + <StyledTitle data-testid="title"> + {messages.pgettext('connect-view', 'Out of time')} + </StyledTitle> <StyledMessage> {sprintf('%(introduction)s %(recoveryMessage)s', { introduction: messages.pgettext( diff --git a/gui/src/renderer/components/Login.tsx b/gui/src/renderer/components/Login.tsx index b1d2a1392b..4219c0572f 100644 --- a/gui/src/renderer/components/Login.tsx +++ b/gui/src/renderer/components/Login.tsx @@ -274,7 +274,7 @@ export default class Login extends React.Component<IProps, IState> { return ( <> - <StyledSubtitle>{this.formSubtitle()}</StyledSubtitle> + <StyledSubtitle data-testid="subtitle">{this.formSubtitle()}</StyledSubtitle> <StyledAccountInputGroup active={allowInteraction && this.state.isActive} editable={allowInteraction} diff --git a/gui/src/renderer/components/MainView.tsx b/gui/src/renderer/components/MainView.tsx index 983a33d376..5a252c4d8b 100644 --- a/gui/src/renderer/components/MainView.tsx +++ b/gui/src/renderer/components/MainView.tsx @@ -34,6 +34,7 @@ export default function MainView() { setShowAccountExpired({ show: true, expiry: accountExpiry }); } else if ( showAccountExpired.show && + accountExpiry && accountExpiry !== showAccountExpired.expiry && !accountHasExpired ) { |
