diff --git a/.changeset/owner-column-cleanup.md b/.changeset/owner-column-cleanup.md
new file mode 100644
index 0000000000..709f74f781
--- /dev/null
+++ b/.changeset/owner-column-cleanup.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-scaffolder': patch
+---
+
+Simplified the `OwnerEntityColumn` in the task list to rely on `EntityRefLink` and the entity presentation API instead of manually fetching entities from the catalog.
diff --git a/plugins/scaffolder/src/components/ListTasksPage/ListTaskPage.test.tsx b/plugins/scaffolder/src/components/ListTasksPage/ListTaskPage.test.tsx
index 9843ebb5ee..ec144f4b51 100644
--- a/plugins/scaffolder/src/components/ListTasksPage/ListTaskPage.test.tsx
+++ b/plugins/scaffolder/src/components/ListTasksPage/ListTaskPage.test.tsx
@@ -14,7 +14,6 @@
* limitations under the License.
*/
-import { Entity } from '@backstage/catalog-model';
import {
renderInTestApp,
TestApiProvider,
@@ -46,20 +45,6 @@ describe('', () => {
const mockPermissionApi = { authorize: jest.fn() };
it('should render the page', async () => {
- const entity: Entity = {
- apiVersion: 'v1',
- kind: 'service',
- metadata: {
- name: 'test',
- },
- spec: {
- profile: {
- displayName: 'BackUser',
- },
- },
- };
- catalogApi.getEntityByRef.mockResolvedValue(entity);
-
scaffolderApiMock.listTasks.mockResolvedValue({ tasks: [], totalTasks: 0 });
const { getByText } = await renderInTestApp(
@@ -87,19 +72,6 @@ describe('', () => {
});
it('should render the task I am owner', async () => {
- const entity: Entity = {
- apiVersion: 'v1',
- kind: 'User',
- metadata: {
- name: 'foo',
- },
- spec: {
- profile: {
- displayName: 'BackUser',
- },
- },
- };
- catalogApi.getEntityByRef.mockResolvedValue(entity);
scaffolderApiMock.listTasks.mockResolvedValue({
tasks: [
{
@@ -151,34 +123,10 @@ describe('', () => {
expect(getByText('All tasks that have been started')).toBeInTheDocument();
expect(getByText('Tasks')).toBeInTheDocument();
expect(await findByText('One Template')).toBeInTheDocument();
- expect(await findByText('BackUser')).toBeInTheDocument();
+ expect(await findByText('foo')).toBeInTheDocument();
});
it('should render all tasks', async () => {
- const entity: Entity = {
- apiVersion: 'v1',
- kind: 'User',
- metadata: {
- name: 'foo',
- },
- spec: {
- profile: {
- displayName: 'BackUser',
- },
- },
- };
- catalogApi.getEntityByRef
- .mockResolvedValue(entity)
- .mockResolvedValue(entity)
- .mockResolvedValue({
- ...entity,
- spec: {
- profile: {
- displayName: 'OtherUser',
- },
- },
- });
-
scaffolderApiMock.listTasks
.mockResolvedValue({
tasks: [
@@ -252,6 +200,6 @@ describe('', () => {
offset: 0,
});
expect(await findByText('One Template')).toBeInTheDocument();
- expect(await findByText('OtherUser')).toBeInTheDocument();
+ expect(await findByText('boo')).toBeInTheDocument();
});
});
diff --git a/plugins/scaffolder/src/components/ListTasksPage/columns/OwnerEntityColumn.test.tsx b/plugins/scaffolder/src/components/ListTasksPage/columns/OwnerEntityColumn.test.tsx
index 2cc069af5d..5720bfd5b4 100644
--- a/plugins/scaffolder/src/components/ListTasksPage/columns/OwnerEntityColumn.test.tsx
+++ b/plugins/scaffolder/src/components/ListTasksPage/columns/OwnerEntityColumn.test.tsx
@@ -14,48 +14,15 @@
* limitations under the License.
*/
-import { Entity } from '@backstage/catalog-model';
-import {
- renderInTestApp,
- TestApiProvider,
- mockApis,
-} from '@backstage/test-utils';
-import { catalogApiRef, entityRouteRef } from '@backstage/plugin-catalog-react';
-import { catalogApiMock } from '@backstage/plugin-catalog-react/testUtils';
+import { renderInTestApp, TestApiProvider } from '@backstage/test-utils';
+import { entityRouteRef } from '@backstage/plugin-catalog-react';
import { OwnerEntityColumn } from './OwnerEntityColumn';
-import { identityApiRef } from '@backstage/core-plugin-api';
describe('', () => {
- const catalogApi = catalogApiMock.mock();
- const identityApi = mockApis.identity();
-
- it('should render the column with the user', async () => {
- const props = {
- entityRef: 'user:default/foo',
- };
-
- const entity: Entity = {
- apiVersion: 'v1',
- kind: 'User',
- metadata: {
- name: 'test',
- },
- spec: {
- profile: {
- displayName: 'BackUser',
- },
- },
- };
- catalogApi.getEntityByRef.mockResolvedValue(entity);
-
- const { getByText, getByRole } = await renderInTestApp(
-
-
+ it('should render a link to the user entity', async () => {
+ const { getByRole } = await renderInTestApp(
+
+
,
{
mountedRoutes: {
@@ -68,7 +35,20 @@ describe('', () => {
'href',
'/catalog/default/user/foo',
);
- const text = getByText('BackUser');
- expect(text).toBeDefined();
+ });
+
+ it('should render Unknown when entityRef is missing', async () => {
+ const { getByText } = await renderInTestApp(
+
+
+ ,
+ {
+ mountedRoutes: {
+ '/catalog/:namespace/:kind/:name': entityRouteRef,
+ },
+ },
+ );
+
+ expect(getByText('Unknown')).toBeInTheDocument();
});
});
diff --git a/plugins/scaffolder/src/components/ListTasksPage/columns/OwnerEntityColumn.tsx b/plugins/scaffolder/src/components/ListTasksPage/columns/OwnerEntityColumn.tsx
index a6d53d2ea1..6c1ca0bde9 100644
--- a/plugins/scaffolder/src/components/ListTasksPage/columns/OwnerEntityColumn.tsx
+++ b/plugins/scaffolder/src/components/ListTasksPage/columns/OwnerEntityColumn.tsx
@@ -13,37 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-import { useApi } from '@backstage/core-plugin-api';
-
-import useAsync from 'react-use/esm/useAsync';
-
-import { catalogApiRef, EntityRefLink } from '@backstage/plugin-catalog-react';
-import { parseEntityRef, UserEntity } from '@backstage/catalog-model';
+import { EntityRefLink } from '@backstage/plugin-catalog-react';
import Typography from '@material-ui/core/Typography';
export const OwnerEntityColumn = ({ entityRef }: { entityRef?: string }) => {
- const catalogApi = useApi(catalogApiRef);
-
- const { value, loading, error } = useAsync(
- () => catalogApi.getEntityByRef(entityRef || ''),
- [catalogApi, entityRef],
- );
-
if (!entityRef) {
- return Unknown;
+ return Unknown;
}
- if (loading || error) {
- return null;
- }
-
- return (
-
- );
+ return ;
};