Skip to content

Commit 6a4eede

Browse files
authored
Addition test cases added to improve code coverage (PalisadoesFoundation#3407)
1 parent a8f2b25 commit 6a4eede

File tree

2 files changed

+28
-25
lines changed

2 files changed

+28
-25
lines changed

src/screens/MemberDetail/MemberDetail.spec.tsx

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -104,19 +104,13 @@ describe('MemberDetail', () => {
104104

105105
test('should render the elements', async () => {
106106
renderMemberDetailScreen(link1);
107-
108107
await wait();
109108

110109
expect(screen.queryByText('Loading data...')).not.toBeInTheDocument();
111110
expect(screen.getAllByText(/Email/i)).toBeTruthy();
112111
expect(screen.getAllByText(/First name/i)).toBeTruthy();
113112
expect(screen.getAllByText(/Last name/i)).toBeTruthy();
114-
// expect(screen.getAllByText(/Language/i)).toBeTruthy();
115-
// expect(screen.getByText(/Plugin creation allowed/i)).toBeInTheDocument();
116-
// expect(screen.getAllByText(/Joined on/i)).toBeTruthy();
117-
// expect(screen.getAllByText(/Joined On/i)).toHaveLength(1);
118113
expect(screen.getAllByText(/Profile Details/i)).toHaveLength(1);
119-
// expect(screen.getAllByText(/Actions/i)).toHaveLength(1);
120114
expect(screen.getAllByText(/Contact Information/i)).toHaveLength(1);
121115
expect(screen.getAllByText(/Events Attended/i)).toHaveLength(2);
122116
});
@@ -255,6 +249,25 @@ describe('MemberDetail', () => {
255249
expect(userImage.getAttribute('src')).toBe(user?.image);
256250
});
257251

252+
test('image upload and display works correctly', async () => {
253+
renderMemberDetailScreen(link2);
254+
255+
await waitFor(() => {
256+
expect(screen.getByTestId('organisationImage')).toBeInTheDocument();
257+
});
258+
const file = new File(['hello'], 'hello.png', { type: 'image/png' });
259+
const fileInput = screen.getByTestId(
260+
'organisationImage',
261+
) as HTMLInputElement;
262+
fireEvent.change(fileInput, { target: { files: [file] } });
263+
264+
await waitFor(() => {
265+
const userImage = screen.getByTestId('userImagePresent');
266+
expect(userImage).toBeInTheDocument();
267+
expect(userImage.getAttribute('src')).toContain('data:image/png;base64');
268+
});
269+
});
270+
258271
test('resetChangesBtn works properly', async () => {
259272
renderMemberDetailScreen(link1);
260273

src/screens/MemberDetail/MemberDetail.tsx

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,7 @@ type MemberDetailProps = {
4242
/**
4343
* MemberDetail component is used to display the details of a user.
4444
* It also allows the user to update the details. It uses the UPDATE_USER_MUTATION to update the user details.
45-
* It uses the USER_DETAILS query to get the user details. It uses the useLocalStorage hook to store the user
46-
* details in the local storage.
45+
* It uses the USER_DETAILS query to get the user details. It uses the useLocalStorage hook to store the user details in the local storage.
4746
* @param id - The id of the user whose details are to be displayed.
4847
* @returns React component
4948
*
@@ -87,6 +86,7 @@ const MemberDetail: React.FC<MemberDetailProps> = ({ id }): JSX.Element => {
8786
});
8887
const handleDateChange = (date: Dayjs | null): void => {
8988
if (date) {
89+
console.log('formated', dayjs(date).format('YYYY-MM-DD'));
9090
setisUpdated(true);
9191
setFormState((prevState) => ({
9292
...prevState,
@@ -95,7 +95,6 @@ const MemberDetail: React.FC<MemberDetailProps> = ({ id }): JSX.Element => {
9595
}
9696
};
9797

98-
/*istanbul ignore next*/
9998
const handleEditIconClick = (): void => {
10099
fileInputRef.current?.click();
101100
};
@@ -143,19 +142,16 @@ const MemberDetail: React.FC<MemberDetailProps> = ({ id }): JSX.Element => {
143142
const tagsAssigned =
144143
userData?.user?.tagsAssignedWith.edges.map(
145144
(edge: { node: InterfaceTagData; cursor: string }) => edge.node,
146-
) ?? /* istanbul ignore next */ [];
145+
) ?? [];
147146

148147
const loadMoreAssignedTags = (): void => {
149148
fetchMoreAssignedTags({
150149
variables: {
151150
first: TAGS_QUERY_DATA_CHUNK_SIZE,
152-
after:
153-
user?.user?.user?.tagsAssignedWith?.pageInfo?.endCursor ??
154-
/* istanbul ignore next */
155-
null,
151+
after: user?.user?.user?.tagsAssignedWith?.pageInfo?.endCursor ?? null,
156152
},
157153
updateQuery: (prevResult, { fetchMoreResult }) => {
158-
if (!fetchMoreResult) /* istanbul ignore next */ return prevResult;
154+
if (!fetchMoreResult) return prevResult;
159155

160156
return {
161157
user: {
@@ -193,7 +189,6 @@ const MemberDetail: React.FC<MemberDetailProps> = ({ id }): JSX.Element => {
193189
toggleUnassignUserTagModal();
194190
toast.success(t('successfullyUnassigned'));
195191
} catch (error: unknown) {
196-
/* istanbul ignore next */
197192
if (error instanceof Error) {
198193
toast.error(error.message);
199194
}
@@ -211,7 +206,6 @@ const MemberDetail: React.FC<MemberDetailProps> = ({ id }): JSX.Element => {
211206
e: React.ChangeEvent<HTMLInputElement | HTMLSelectElement>,
212207
): Promise<void> => {
213208
const { name, value } = e.target;
214-
/*istanbul ignore next*/
215209
if (
216210
name === 'photo' &&
217211
'files' in e.target &&
@@ -251,7 +245,6 @@ const MemberDetail: React.FC<MemberDetailProps> = ({ id }): JSX.Element => {
251245
...formState,
252246
},
253247
});
254-
/* istanbul ignore next */
255248
if (data) {
256249
setisUpdated(false);
257250
if (getItem('id') === currentUrl) {
@@ -264,18 +257,17 @@ const MemberDetail: React.FC<MemberDetailProps> = ({ id }): JSX.Element => {
264257
}
265258
} catch (error: unknown) {
266259
if (error instanceof Error) {
260+
console.log('the error is ', error.message);
267261
errorHandler(t, error);
268262
}
269263
}
270264
} catch (error: unknown) {
271-
/* istanbul ignore next */
272265
if (error instanceof Error) {
273266
errorHandler(t, error);
274267
}
275268
}
276269
};
277270
const resetChanges = (): void => {
278-
/*istanbul ignore next*/
279271
setFormState({
280272
firstName: userData?.user?.firstName || '',
281273
lastName: userData?.user?.lastName || '',
@@ -351,9 +343,8 @@ const MemberDetail: React.FC<MemberDetailProps> = ({ id }): JSX.Element => {
351343
role="button"
352344
aria-label="Edit profile picture"
353345
tabIndex={0}
354-
onKeyDown={
355-
/*istanbul ignore next*/
356-
(e) => e.key === 'Enter' && handleEditIconClick()
346+
onKeyDown={(e) =>
347+
e.key === 'Enter' && handleEditIconClick()
357348
}
358349
/>
359350
</div>
@@ -416,7 +407,7 @@ const MemberDetail: React.FC<MemberDetailProps> = ({ id }): JSX.Element => {
416407
placeholder={tCommon('lastName')}
417408
/>
418409
</Col>
419-
<Col md={6}>
410+
<Col md={6} data-testid="gender">
420411
<label htmlFor="gender" className="form-label">
421412
{t('gender')}
422413
</label>
@@ -633,7 +624,6 @@ const MemberDetail: React.FC<MemberDetailProps> = ({ id }): JSX.Element => {
633624
next={loadMoreAssignedTags}
634625
hasMore={
635626
userData?.user?.tagsAssignedWith.pageInfo.hasNextPage ??
636-
/* istanbul ignore next */
637627
false
638628
}
639629
loader={<InfiniteScrollLoader />}

0 commit comments

Comments
 (0)