Skip to content

Commit 13d952d

Browse files
committed
tests fixes
1 parent 6be2b6e commit 13d952d

File tree

7 files changed

+67
-34
lines changed

7 files changed

+67
-34
lines changed

cypress/support/component.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { ThemeProvider } from '@ui5/webcomponents-react';
2020
import { mount } from 'cypress/react';
2121
// Import commands.js using ES2015 syntax:
2222
import './commands';
23+
import {FrontendConfigProvider, Landscape} from "../../src/context/FrontendConfigContext";
2324

2425
// Augment the Cypress namespace to include type definitions for
2526
// your custom command.
@@ -34,7 +35,13 @@ declare global {
3435
}
3536
}
3637

38+
39+
3740
Cypress.Commands.add('mount', (component, options) => {
38-
return mount(<ThemeProvider>{component} </ThemeProvider>, options);
41+
return mount(<ThemeProvider><FrontendConfigProvider config={{
42+
"backendUrl": "http://localhost:3000",
43+
"landscape": "DEV" as Landscape,
44+
"documentationBaseUrl": "http://localhost:3000"
45+
}}>{component} </FrontendConfigProvider></ThemeProvider>, options);
3946
});
4047

src/components/Dialogs/CreateProjectDialog.test.tsx

Lines changed: 48 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,48 @@
11
import React, {useState, useRef} from 'react';
22
import {CreateProjectWorkspaceDialog, onCreatePayload} from './CreateProjectWorkspaceDialog';
3-
import {Member, MemberRoles} from '../../lib/api/types/shared/members';
3+
import { MemberRoles} from '../../lib/api/types/shared/members';
44
import {ErrorDialogHandle} from '../Shared/ErrorMessageBox';
5-
import {InputDomRef} from '@ui5/webcomponents-react';
5+
6+
import {useForm} from "react-hook-form";
7+
import {zodResolver} from "@hookform/resolvers/zod";
8+
import {validationSchemaProjectWorkspace} from "../../lib/api/validations/schemas.ts";
9+
import {CreateDialogProps} from "./CreateWorkspaceDialogContainer.tsx";
610

711

812

913

1014
export const CreateProjectWorkspaceDialogWrapper: React.FC<{ spyFormBody?: (data: any) => {} }> = ({spyFormBody}) => {
1115
const [isOpen, setIsOpen] = useState(true);
12-
const [members, setMembers] = useState<Member[]>([{
13-
14-
roles: [MemberRoles.admin],
15-
kind: "User"
16-
}]);
16+
1717
const errorDialogRef = useRef<ErrorDialogHandle>(null);
18-
const nameInputRef = useRef<InputDomRef>(null);
19-
const displayNameInputRef = useRef<InputDomRef>(null);
20-
const chargingTargetInputRef = useRef<InputDomRef>(null); const handleCreate = async () => {
18+
19+
const {
20+
register,
21+
handleSubmit,
22+
setValue,
23+
formState: { errors },
24+
watch
25+
} = useForm<CreateDialogProps>({
26+
// @ts-ignore
27+
resolver: zodResolver(validationSchemaProjectWorkspace),
28+
defaultValues: {
29+
name: "",
30+
displayName: "",
31+
chargingTarget: "",
32+
members: [{ name: '[email protected]', roles: [MemberRoles.admin], kind: "User"}],
33+
}
34+
});
35+
36+
const handleCreate = async ({
37+
name,
38+
displayName,
39+
chargingTarget,
40+
members,
41+
}: onCreatePayload) => {
2142
const payload: onCreatePayload = {
22-
name: nameInputRef.current?.value || '',
23-
displayName: displayNameInputRef.current?.value || '',
24-
chargingTarget: chargingTargetInputRef.current?.value || '',
43+
name: name,
44+
displayName: displayName,
45+
chargingTarget: chargingTarget,
2546
members: members
2647
};
2748

@@ -33,13 +54,12 @@ export const CreateProjectWorkspaceDialogWrapper: React.FC<{ spyFormBody?: (data
3354
isOpen={isOpen}
3455
setIsOpen={setIsOpen}
3556
titleText="Create Project Workspace"
36-
onCreate={handleCreate}
57+
onCreate={handleSubmit(handleCreate)}
3758
errorDialogRef={errorDialogRef}
38-
members={members}
39-
setMembers={setMembers}
40-
nameInputRef={nameInputRef}
41-
displayNameInputRef={displayNameInputRef}
42-
chargingTargetInputRef={chargingTargetInputRef}
59+
members={watch('members')}
60+
register={register}
61+
errors={errors}
62+
setValue={setValue}
4363
/>
4464
);
4565
};
@@ -55,9 +75,9 @@ describe('CreateProjectWorkspaceDialog', () => {
5575
.contains('[email protected]')
5676
.should('be.visible');
5777
cy.get('ui5-button[icon="delete"]').find('button').click({ force: true });
58-
cy.get('div[data-component-name="AnalyticalTableContainerWithScrollbar"]')
59-
.contains('[email protected]')
60-
.should('not.exist');
78+
cy.get('span[id="members-error"]')
79+
.contains('You need to have at least one member assigned.')
80+
.should('be.visible');
6181
});
6282

6383
it('should add a new member and display it in the table', () => {
@@ -75,21 +95,21 @@ describe('CreateProjectWorkspaceDialog', () => {
7595
const stubFn = cy.stub().as('stubFn');
7696
cy.mount(<CreateProjectWorkspaceDialogWrapper spyFormBody={stubFn} />, {});
7797

78-
cy.get('ui5-input[id*="project-name-input"]').find('input[id*="inner"]')
79-
.type('brand-new-workspace-test-01', { force: true });
80-
cy.get('ui5-input[id*="project-displayname-input"]').find('input[id*="inner"]')
98+
cy.get('ui5-input[id*="name"]').find('input[id*="inner"]')
99+
.type('brand--01', { force: true });
100+
cy.get('ui5-input[id*="displayName"]').find('input[id*="inner"]')
81101
.type('Brand new workspace number one', { force: true });
82-
cy.get('ui5-input[id*="project-chargingtarget-input"]').find('input[id*="inner"]')
102+
cy.get('ui5-input[id*="chargingTarget"]').find('input[id*="inner"]')
83103
.type('Charging target 1000', { force: true });
84-
cy.get('ui5-input[id*="member-email-input"]').find('input[id*="inner"]')
104+
cy.get('ui5-input[id*="email"]').find('input[id*="inner"]')
85105
.type('[email protected]', { force: true });
86106
cy.get('ui5-button:contains("Add")')
87107
.click({ force: true });
88108
cy.get('ui5-button:contains("Create")')
89109
.click({ force: true });
90110

91111
cy.get('@stubFn').should('have.been.calledWith', {
92-
name: 'brand-new-workspace-test-01',
112+
name: 'brand--01',
93113
displayName: 'Brand new workspace number one',
94114
chargingTarget: 'Charging target 1000',
95115
members: [

src/components/Dialogs/CreateWorkspaceDialogContainer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ export function CreateWorkspaceDialogContainer({
115115
setIsOpen={setIsOpen}
116116
onCreate={handleSubmit(handleWorkspaceCreate)}
117117
errorDialogRef={errorDialogRef}
118-
titleText="Create Workspace"
118+
titleText="Create Project Workspace"
119119
members={watch('members')}
120120
register={register}
121121
errors={errors}

src/components/Members/MemberTable.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export const MemberTable: FC<MemberTableProps> = ({members, onDeleteMember, isVa
4141
},)
4242
}
4343
if (members.length === 0) {
44-
return (<Infobox variant={isValidationError ? 'danger' : 'normal'}> You need to have at least one member assigned</Infobox>)
44+
return (<Infobox size={'sm'} variant={isValidationError ? 'danger' : 'normal'} id={'members-error'}>You need to have at least one member assigned.</Infobox>)
4545
}
4646
return (
4747
<AnalyticalTable

src/components/Ui/Infobox/Infobox.module.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
.infobox {
22
display: inline-block;
33
border: 1px solid;
4-
margin-bottom: 1rem;
4+
margin: 1rem 0;
55

66
&.size-sm {
77
padding: 0.5rem 0.75rem;

src/components/Ui/Infobox/Infobox.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { ReactNode } from 'react';
1+
import React, {ReactNode} from 'react';
22
import cx from 'clsx';
33

44
import styles from './Infobox.module.scss';
@@ -8,13 +8,15 @@ interface LabelProps {
88
size?: 'sm' | 'md' | 'lg';
99
variant?: 'normal' | 'success' | 'warning' | 'danger';
1010
children: ReactNode;
11+
className?: string;
1112
}
1213

1314
export const Infobox: React.FC<LabelProps> = ({
1415
id,
1516
size = 'md', // Default to medium size
1617
variant = 'normal', // Default to normal variant
1718
children,
19+
className
1820
}) => {
1921
const infoboxClasses = cx(styles.infobox, {
2022
[styles['size-sm']]: size === 'sm',
@@ -24,7 +26,7 @@ export const Infobox: React.FC<LabelProps> = ({
2426
[styles['variant-success']]: variant === 'success',
2527
[styles['variant-warning']]: variant === 'warning',
2628
[styles['variant-danger']]: variant === 'danger',
27-
});
29+
}, className);
2830

2931
return (
3032
<span

src/index.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,4 +103,8 @@ body {
103103
#root {
104104
height: 100%;
105105
background-color: var(--sapBackgroundColor);
106+
}
107+
108+
ui5-form-item {
109+
margin-bottom: 24px;
106110
}

0 commit comments

Comments
 (0)