Skip to content

Commit c3879fc

Browse files
committed
ATLAS-5342: Atlas React UI: Entity modification functionalities (Add Classifications, Terms, Labels, Business Metadata) remain active for DELETED entities
1 parent 6780c11 commit c3879fc

5 files changed

Lines changed: 35 additions & 32 deletions

File tree

dashboard/src/components/EntityDisplayImage.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import { useEffect, useState } from "react";
1919
import { Avatar, Skeleton } from "@mui/material";
2020
import { getEntityIconPath } from "../utils/Utils";
21+
import { fetchApi } from "../api/apiMethods/fetchApi";
2122

2223
const DisplayImage = ({
2324
entity,
@@ -36,10 +37,13 @@ const DisplayImage = ({
3637
let entityData = { ...entity, ...{ isProcess: isProcess } };
3738
let imagePath: any = getEntityIconPath({ entityData: entityData });
3839
try {
39-
const response = await fetch(imagePath);
40-
const contentType: any = response.headers.get("Content-Type");
40+
const response = await fetchApi(imagePath, {
41+
method: "GET",
42+
responseType: "blob"
43+
});
44+
const contentType: any = response.headers["content-type"];
4145

42-
if (contentType.startsWith("image/")) {
46+
if (contentType && contentType.startsWith("image/")) {
4347
let cache = { [entityData.guid]: imagePath };
4448
setCheckEntityImage(cache);
4549
setImageUrl(getEntityIconPath({ entityData: entityData }));

dashboard/src/views/DetailPage/EntityDetailTabs/PropertiesTab/Labels.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,8 @@ const Labels = ({ loading, labels, entity }: LabelsProps) => {
150150
return;
151151
}
152152
try {
153-
await getLabels(guid, payload);
154-
toast.dismiss(toastId.current);
153+
await getLabels(guid as string, payload);
154+
if (toastId.current) { toast.dismiss(toastId.current); }
155155
toastId.current = toast.success(
156156
"One or more labels were updated successfully"
157157
);
@@ -162,7 +162,7 @@ const Labels = ({ loading, labels, entity }: LabelsProps) => {
162162

163163
setAddLabel(true);
164164
} catch (error) {
165-
toast.dismiss(toastId.current);
165+
if (toastId.current) { toast.dismiss(toastId.current); }
166166
serverError(error, toastId);
167167
}
168168
};
@@ -291,7 +291,6 @@ const Labels = ({ loading, labels, entity }: LabelsProps) => {
291291
<>
292292
No labels have been created yet. To add a labels, click{" "}
293293
<Typography
294-
className="text-color-green cursor-pointer"
295294
component="span"
296295
onClick={(e: { stopPropagation: () => void }) => {
297296
e.stopPropagation();

dashboard/src/views/DetailPage/EntityDetailTabs/PropertiesTab/__tests__/BMAttributes.test.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*/
1717

1818
import React from 'react';
19-
import { render, screen, fireEvent, waitFor } from '@utils/test-utils';
19+
import { render, screen, fireEvent, waitFor, act } from '@utils/test-utils';
2020
import userEvent from '@testing-library/user-event';
2121
import '@testing-library/jest-dom';
2222
import BMAttributes from '../BMAttributes';
@@ -146,7 +146,7 @@ describe('BMAttributes Component', () => {
146146
it('switches to edit mode on Edit button click', () => {
147147
render(<TestWrapper><BMAttributes {...defaultProps} /></TestWrapper>);
148148

149-
const editBtn = screen.getAllByRole('button', { name: /edit/i })[0];
149+
const editBtn = screen.getByText('Edit').closest('button')!;
150150
fireEvent.click(editBtn);
151151

152152
expect(screen.getAllByTestId('bm-fields-mock')).toHaveLength(2);
@@ -157,9 +157,9 @@ describe('BMAttributes Component', () => {
157157
it('adds new attribute dynamically', async () => {
158158
render(<TestWrapper><BMAttributes {...defaultProps} /></TestWrapper>);
159159

160-
fireEvent.click(screen.getAllByRole('button', { name: /edit/i })[0]);
160+
fireEvent.click(screen.getByText('Edit').closest('button')!);
161161

162-
const addAttrBtn = screen.getByRole('button', { name: /Add New Attributes/i });
162+
const addAttrBtn = screen.getByRole('button', { name: /Add New Attribute/i });
163163
fireEvent.click(addAttrBtn);
164164

165165
// There should be 3 items now
@@ -172,10 +172,10 @@ describe('BMAttributes Component', () => {
172172

173173
render(<TestWrapper><BMAttributes {...defaultProps} /></TestWrapper>);
174174

175-
fireEvent.click(screen.getAllByRole('button', { name: /edit/i })[0]);
175+
fireEvent.click(screen.getByText('Edit').closest('button')!);
176176

177177
const saveBtn = screen.getAllByRole('button', { name: /save/i })[0];
178-
fireEvent.click(saveBtn);
178+
await act(async () => { fireEvent.submit(saveBtn.closest('form')!); });
179179

180180
await waitFor(() => {
181181
expect(mockGetEntityBusinessMetadata).toHaveBeenCalledWith('test-guid-123', expect.any(Object));
@@ -188,10 +188,10 @@ describe('BMAttributes Component', () => {
188188

189189
render(<TestWrapper><BMAttributes {...defaultProps} /></TestWrapper>);
190190

191-
fireEvent.click(screen.getAllByRole('button', { name: /edit/i })[0]);
191+
fireEvent.click(screen.getByText('Edit').closest('button')!);
192192

193193
const saveBtn = screen.getAllByRole('button', { name: /save/i })[0];
194-
fireEvent.click(saveBtn);
194+
await act(async () => { fireEvent.submit(saveBtn.closest('form')!); });
195195

196196
await waitFor(() => {
197197
expect(mockGetEntityBusinessMetadata).toHaveBeenCalled();

dashboard/src/views/DetailPage/EntityDetailTabs/PropertiesTab/__tests__/Labels.test.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*/
1717

1818
import React from 'react';
19-
import { render, screen, fireEvent, waitFor } from '@utils/test-utils';
19+
import { render, screen, fireEvent, waitFor, act } from '@utils/test-utils';
2020
import userEvent from '@testing-library/user-event';
2121
import '@testing-library/jest-dom';
2222
import Labels from '../Labels';
@@ -102,7 +102,7 @@ describe('Labels Component', () => {
102102
it('allows clicking edit to show autocomplete form', async () => {
103103
render(<TestWrapper><Labels {...defaultProps} /></TestWrapper>);
104104

105-
const editBtn = screen.getByTestId('edit-label');
105+
const editBtn = screen.getByText('Edit').closest('button')!;
106106
fireEvent.click(editBtn);
107107

108108
expect(await screen.findByPlaceholderText('Select Label')).toBeInTheDocument();
@@ -123,11 +123,11 @@ describe('Labels Component', () => {
123123
render(<TestWrapper><Labels {...defaultProps} /></TestWrapper>);
124124

125125
// Click Edit
126-
fireEvent.click(screen.getAllByRole('button', { name: /edit/i })[0]);
126+
fireEvent.click(screen.getByText('Edit').closest('button')!);
127127

128128
// Since autocomplete already has default value, let's just save
129129
const saveBtn = screen.getAllByRole('button', { name: /save/i })[0];
130-
fireEvent.click(saveBtn);
130+
await act(async () => { fireEvent.submit(saveBtn.closest('form')!); });
131131

132132
await waitFor(() => {
133133
expect(mockGetLabels).toHaveBeenCalledWith('test-guid-123', ['Label1', 'Label2']);
@@ -141,11 +141,11 @@ describe('Labels Component', () => {
141141
render(<TestWrapper><Labels {...defaultProps} /></TestWrapper>);
142142

143143
// Click Edit
144-
fireEvent.click(screen.getAllByRole('button', { name: /edit/i })[0]);
144+
fireEvent.click(screen.getByText('Edit').closest('button')!);
145145

146146
// Save
147147
const saveBtn = screen.getAllByRole('button', { name: /save/i })[0];
148-
fireEvent.click(saveBtn);
148+
await act(async () => { fireEvent.submit(saveBtn.closest('form')!); });
149149

150150
await waitFor(() => {
151151
expect(mockGetLabels).toHaveBeenCalled();
@@ -162,7 +162,7 @@ describe('Labels Component', () => {
162162
render(<TestWrapper><Labels {...defaultProps} /></TestWrapper>);
163163

164164
// Click Edit
165-
fireEvent.click(screen.getAllByRole('button', { name: /edit/i })[0]);
165+
fireEvent.click(screen.getByText('Edit').closest('button')!);
166166

167167
const input = await screen.findByPlaceholderText('Select Label');
168168
fireEvent.mouseDown(input);

dashboard/src/views/DetailPage/EntityDetailTabs/PropertiesTab/__tests__/UserDefinedProperties.test.tsx

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*/
1717

1818
import React from 'react';
19-
import { render, screen, fireEvent, waitFor } from '@utils/test-utils';
19+
import { render, screen, fireEvent, waitFor, act } from '@utils/test-utils';
2020
import userEvent from '@testing-library/user-event';
2121
import '@testing-library/jest-dom';
2222
import UserDefinedProperties from '../UserDefinedProperties';
@@ -103,7 +103,7 @@ describe('UserDefinedProperties Component', () => {
103103
it('switches to edit mode on Edit button click', () => {
104104
render(<TestWrapper><UserDefinedProperties {...defaultProps} /></TestWrapper>);
105105

106-
const editBtn = screen.getByRole('button', { name: /edit/i });
106+
const editBtn = screen.getByText('Edit').closest('button')!;
107107
fireEvent.click(editBtn);
108108

109109
expect(screen.getByDisplayValue('key1')).toBeInTheDocument();
@@ -114,7 +114,7 @@ describe('UserDefinedProperties Component', () => {
114114
render(<TestWrapper><UserDefinedProperties {...defaultProps} /></TestWrapper>);
115115

116116
// Edit mode
117-
fireEvent.click(screen.getAllByRole('button', { name: /edit/i })[0]);
117+
fireEvent.click(screen.getByText('Edit').closest('button')!);
118118

119119
// Should have 2 inputs initially for keys
120120
let keyInputs = screen.getAllByPlaceholderText('key');
@@ -138,18 +138,18 @@ describe('UserDefinedProperties Component', () => {
138138
it('validates unique keys', async () => {
139139
render(<TestWrapper><UserDefinedProperties {...defaultProps} /></TestWrapper>);
140140

141-
fireEvent.click(screen.getAllByRole('button', { name: /edit/i })[0]);
141+
fireEvent.click(screen.getByText('Edit').closest('button')!);
142142

143143
const keyInputs = screen.getAllByPlaceholderText('key');
144144
// Change second key to 'key1' to cause duplicate
145145
fireEvent.change(keyInputs[1], { target: { value: 'key1' } });
146146

147147
// Form submission
148148
const saveBtn = screen.getAllByRole('button', { name: /save/i })[0];
149-
fireEvent.click(saveBtn);
149+
await act(async () => { fireEvent.submit(saveBtn.closest('form')!); });
150150

151151
await waitFor(() => {
152-
expect(screen.getByText('Key must be unique')).toBeInTheDocument();
152+
expect(screen.getAllByText('Key must be unique')[0]).toBeInTheDocument();
153153
expect(mockCreateEntity).not.toHaveBeenCalled();
154154
});
155155
});
@@ -159,10 +159,10 @@ describe('UserDefinedProperties Component', () => {
159159

160160
render(<TestWrapper><UserDefinedProperties {...defaultProps} /></TestWrapper>);
161161

162-
fireEvent.click(screen.getAllByRole('button', { name: /edit/i })[0]);
162+
fireEvent.click(screen.getByText('Edit').closest('button')!);
163163

164164
const saveBtn = screen.getAllByRole('button', { name: /save/i })[0];
165-
fireEvent.click(saveBtn);
165+
await act(async () => { fireEvent.submit(saveBtn.closest('form')!); });
166166

167167
await waitFor(() => {
168168
expect(mockCreateEntity).toHaveBeenCalledWith({
@@ -179,10 +179,10 @@ describe('UserDefinedProperties Component', () => {
179179

180180
render(<TestWrapper><UserDefinedProperties {...defaultProps} /></TestWrapper>);
181181

182-
fireEvent.click(screen.getAllByRole('button', { name: /edit/i })[0]);
182+
fireEvent.click(screen.getByText('Edit').closest('button')!);
183183

184184
const saveBtn = screen.getAllByRole('button', { name: /save/i })[0];
185-
fireEvent.click(saveBtn);
185+
await act(async () => { fireEvent.submit(saveBtn.closest('form')!); });
186186

187187
await waitFor(() => {
188188
expect(mockCreateEntity).toHaveBeenCalled();

0 commit comments

Comments
 (0)