Skip to content

Commit

Permalink
chore: Add integ test for multi-page
Browse files Browse the repository at this point in the history
  • Loading branch information
michaeldowseza committed Oct 26, 2023
1 parent 733845a commit 52bbca4
Show file tree
Hide file tree
Showing 5 changed files with 557 additions and 17 deletions.
39 changes: 39 additions & 0 deletions pages/funnel-analytics/delayed-breadcrumbs.page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
import React, { useEffect, useState } from 'react';
import { BreadcrumbGroup, BreadcrumbGroupProps, Container, Form } from '~components';

import { setFunnelMetrics } from '~components/internal/analytics';
import { MockedFunnelMetrics } from './mock-funnel';

setFunnelMetrics(MockedFunnelMetrics);

export default function DelayedBreadcrumbsPage() {
const [items, setItems] = useState<BreadcrumbGroupProps['items']>([]);

useEffect(() => {
const timeout = setTimeout(() => {
setItems([
{ text: 'System', href: '#' },
{ text: 'Components', href: '#components' },
{
text: 'Create Resource',
href: '#components/breadcrumb-group',
},
]);
}, 150);

return () => {
clearTimeout(timeout);
};
}, []);

return (
<>
{items && <BreadcrumbGroup items={items} ariaLabel="Breadcrumbs" />}
<Form>
<Container />
</Form>
</>
);
}
32 changes: 16 additions & 16 deletions pages/funnel-analytics/mock-funnel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ const funnelMetricsLog: { action: string; resolvedProps?: any; props: any }[] =

export const MockedFunnelMetrics: IFunnelMetrics = {
funnelStart(props): string {
const funnelName = document.querySelector(props.funnelNameSelector)!.innerHTML;
const funnelName = document.querySelector(props.funnelNameSelector)?.innerHTML;
funnelMetricsLog.push({ action: 'funnelStart', props, resolvedProps: { funnelName } });
return 'mocked-funnel-id';
},
Expand All @@ -34,35 +34,35 @@ export const MockedFunnelMetrics: IFunnelMetrics = {
},

funnelStepStart(props): void {
const stepName = document.querySelector(props.stepNameSelector)!.innerHTML;
const stepName = document.querySelector(props.stepNameSelector)?.innerHTML;
funnelMetricsLog.push({ action: 'funnelStepStart', props, resolvedProps: { stepName } });
},

funnelStepComplete(props): void {
const stepName = document.querySelector(props.stepNameSelector)!.innerHTML;
const stepName = document.querySelector(props.stepNameSelector)?.innerHTML;
funnelMetricsLog.push({ action: 'funnelStepComplete', props, resolvedProps: { stepName } });
},

funnelStepNavigation(props): void {
const stepName = document.querySelector(props.stepNameSelector)!.innerHTML;
const stepName = document.querySelector(props.stepNameSelector)?.innerHTML;
// const subStepAllElements = document.querySelectorAll(props.subStepAllSelector); // TODO: Does not work

funnelMetricsLog.push({ action: 'funnelStepNavigation', props, resolvedProps: { stepName } });
},

funnelStepError(props): void {
const stepName = document.querySelector(props.stepNameSelector)!.innerHTML;
const stepName = document.querySelector(props.stepNameSelector)?.innerHTML;
funnelMetricsLog.push({ action: 'funnelStepError', props, resolvedProps: { stepName } });
},

funnelStepChange(props): void {
const stepName = document.querySelector(props.stepNameSelector)!.innerHTML;
const stepName = document.querySelector(props.stepNameSelector)?.innerHTML;
funnelMetricsLog.push({ action: 'funnelStepChange', props, resolvedProps: { stepName } });
},

funnelSubStepStart(props): void {
const stepName = document.querySelector(props.stepNameSelector)!.innerHTML;
const subStepName = document.querySelector(props.subStepNameSelector)!.innerHTML;
const stepName = document.querySelector(props.stepNameSelector)?.innerHTML;
const subStepName = document.querySelector(props.subStepNameSelector)?.innerHTML;
const subStepAllElements = document.querySelectorAll(props.subStepAllSelector);
const subStepElement = document.querySelector(props.subStepSelector);

Expand All @@ -87,10 +87,10 @@ export const MockedFunnelMetrics: IFunnelMetrics = {
},

funnelSubStepError(props): void {
const stepName = document.querySelector(props.stepNameSelector)!.innerHTML;
const subStepName = document.querySelector(props.subStepNameSelector)!.innerHTML;
const fieldLabel = document.querySelector(props.fieldLabelSelector!)!.innerHTML;
const fieldError = document.querySelector(props.fieldErrorSelector!)!.innerHTML;
const stepName = document.querySelector(props.stepNameSelector)?.innerHTML;
const subStepName = document.querySelector(props.subStepNameSelector)?.innerHTML;
const fieldLabel = document.querySelector(props.fieldLabelSelector!)?.innerHTML;
const fieldError = document.querySelector(props.fieldErrorSelector!)?.innerHTML;

funnelMetricsLog.push({
action: 'funnelSubStepError',
Expand All @@ -100,8 +100,8 @@ export const MockedFunnelMetrics: IFunnelMetrics = {
},

helpPanelInteracted(props): void {
const stepName = document.querySelector(props.stepNameSelector)!.innerHTML;
const subStepName = document.querySelector(props.subStepNameSelector)!.innerHTML;
const stepName = document.querySelector(props.stepNameSelector)?.innerHTML;
const subStepName = document.querySelector(props.subStepNameSelector)?.innerHTML;
const subStepElement = document.querySelectorAll(props.subStepSelector);
const subStepAllElements = document.querySelectorAll(props.subStepAllSelector);
const element = document.querySelector(props.elementSelector);
Expand All @@ -114,8 +114,8 @@ export const MockedFunnelMetrics: IFunnelMetrics = {
},

externalLinkInteracted(props): void {
const stepName = document.querySelector(props.stepNameSelector)!.innerHTML;
const subStepName = document.querySelector(props.subStepNameSelector)!.innerHTML;
const stepName = document.querySelector(props.stepNameSelector)?.innerHTML;
const subStepName = document.querySelector(props.subStepNameSelector)?.innerHTML;
const subStepElement = document.querySelectorAll(props.subStepSelector);
const subStepAllElements = document.querySelectorAll(props.subStepAllSelector);
const element = document.querySelector(props.elementSelector);
Expand Down
160 changes: 160 additions & 0 deletions pages/funnel-analytics/static-multi-page-flow.page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
import React, { useState } from 'react';
import {
BreadcrumbGroup,
Container,
Input,
Link,
FormField,
SpaceBetween,
Wizard,
WizardProps,
Header,
} from '~components';

import { i18nStrings } from '../wizard/common';
import styles from '../wizard/styles.scss';

import { setFunnelMetrics } from '~components/internal/analytics';
import { MockedFunnelMetrics } from './mock-funnel';

setFunnelMetrics(MockedFunnelMetrics);

export default function MultiPageCreate() {
const [mounted, setMounted] = useState(true);
const [value, setValue] = useState('');
const [value2, setValue2] = useState('');
const [value3, setValue3] = useState('');
const [value4, setValue4] = useState('');

const [errorText, setErrorText] = useState('');
const [activeStepIndex, setActiveStepIndex] = useState(0);

const steps: WizardProps.Step[] = [
{
title: 'Step 1',
errorText,
content: (
<SpaceBetween size="s">
<Container header={<Header>Container 1 - header</Header>}>
<SpaceBetween size="s">
<FormField
info={
<Link data-testid="external-link" external={true} href="#">
Learn more
</Link>
}
errorText={value === 'error' ? 'Trigger error' : ''}
label="Field 1"
>
<Input
data-testid="field1"
value={value}
onChange={event => {
setValue(event.detail.value);
}}
/>
</FormField>
<FormField label="Field 2">
<Input
data-testid="field2"
value={value2}
onChange={event => {
setValue2(event.detail.value);
}}
/>
</FormField>
</SpaceBetween>
</Container>
<Container header={<Header>Container 2 - header</Header>}>
<SpaceBetween size="s">
<FormField label="Field 3">
<Input
data-testid="field3"
value={value3}
onChange={event => {
setValue3(event.detail.value);
}}
/>
</FormField>
<FormField label="Field 4">
<Input
data-testid="field4"
value={value4}
onChange={event => {
setValue4(event.detail.value);
}}
/>
</FormField>
</SpaceBetween>
</Container>
</SpaceBetween>
),
},
{
title: 'Step 2',
isOptional: true,
errorText,
content: (
<div className={styles['step-content']}>
<div id="content-text">Content 2</div>
</div>
),
},
{
title: 'Step 3',
info: <Link variant="info">Info</Link>,
errorText,
content: (
<div className={styles['step-content']}>
{Array.from(Array(15).keys()).map(key => (
<div key={key} className={styles['content-item']}>
Item {key}
</div>
))}
</div>
),
},
];

return (
<>
<BreadcrumbGroup
items={[
{ text: 'System', href: '#' },
{ text: 'Components', href: '#components' },
{
text: 'Create Resource',
href: '#components/breadcrumb-group',
},
]}
ariaLabel="Breadcrumbs"
/>
<button data-testid="unmount" onClick={() => setMounted(false)}>
Unmount
</button>
{mounted && (
<Wizard
i18nStrings={i18nStrings}
steps={steps}
activeStepIndex={activeStepIndex}
onNavigate={e => {
if (value === 'error') {
setErrorText('There is an error');
} else {
setErrorText('');
setActiveStepIndex(e.detail.requestedStepIndex);
}
}}
onCancel={() => {
setMounted(false);
}}
onSubmit={() => {
setMounted(false);
}}
/>
)}
</>
);
}
Loading

0 comments on commit 52bbca4

Please sign in to comment.