implement single-item fetches to go by refs instead of filters
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-catalog-backend': patch
|
||||
---
|
||||
|
||||
Implement `/entities/by-name/:kind/:namespace/:name` using `getEntitiesByRefs`
|
||||
@@ -445,20 +445,15 @@ describe('createRouter readonly disabled', () => {
|
||||
namespace: 'ns',
|
||||
},
|
||||
};
|
||||
entitiesCatalog.entities.mockResolvedValue({
|
||||
entities: [entity],
|
||||
pageInfo: { hasNextPage: false },
|
||||
entitiesCatalog.entitiesBatch.mockResolvedValue({
|
||||
items: [entity],
|
||||
});
|
||||
|
||||
const response = await request(app).get('/entities/by-name/k/ns/n');
|
||||
|
||||
expect(entitiesCatalog.entities).toHaveBeenCalledTimes(1);
|
||||
expect(entitiesCatalog.entities).toHaveBeenCalledWith({
|
||||
filter: basicEntityFilter({
|
||||
kind: 'k',
|
||||
'metadata.namespace': 'ns',
|
||||
'metadata.name': 'n',
|
||||
}),
|
||||
expect(entitiesCatalog.entitiesBatch).toHaveBeenCalledTimes(1);
|
||||
expect(entitiesCatalog.entitiesBatch).toHaveBeenCalledWith({
|
||||
entityRefs: ['k:ns/n'],
|
||||
credentials: mockCredentials.user(),
|
||||
});
|
||||
expect(response.status).toEqual(200);
|
||||
@@ -466,20 +461,15 @@ describe('createRouter readonly disabled', () => {
|
||||
});
|
||||
|
||||
it('responds with a 404 for missing entities', async () => {
|
||||
entitiesCatalog.entities.mockResolvedValue({
|
||||
entities: [],
|
||||
pageInfo: { hasNextPage: false },
|
||||
entitiesCatalog.entitiesBatch.mockResolvedValue({
|
||||
items: [null],
|
||||
});
|
||||
|
||||
const response = await request(app).get('/entities/by-name/b/d/c');
|
||||
|
||||
expect(entitiesCatalog.entities).toHaveBeenCalledTimes(1);
|
||||
expect(entitiesCatalog.entities).toHaveBeenCalledWith({
|
||||
filter: basicEntityFilter({
|
||||
kind: 'b',
|
||||
'metadata.namespace': 'd',
|
||||
'metadata.name': 'c',
|
||||
}),
|
||||
expect(entitiesCatalog.entitiesBatch).toHaveBeenCalledTimes(1);
|
||||
expect(entitiesCatalog.entitiesBatch).toHaveBeenCalledWith({
|
||||
entityRefs: ['b:d/c'],
|
||||
credentials: mockCredentials.user(),
|
||||
});
|
||||
expect(response.status).toEqual(404);
|
||||
|
||||
@@ -274,20 +274,16 @@ export async function createRouter(
|
||||
})
|
||||
.get('/entities/by-name/:kind/:namespace/:name', async (req, res) => {
|
||||
const { kind, namespace, name } = req.params;
|
||||
const { entities } = await entitiesCatalog.entities({
|
||||
filter: basicEntityFilter({
|
||||
kind: kind,
|
||||
'metadata.namespace': namespace,
|
||||
'metadata.name': name,
|
||||
}),
|
||||
const { items } = await entitiesCatalog.entitiesBatch({
|
||||
entityRefs: [stringifyEntityRef({ kind, namespace, name })],
|
||||
credentials: await httpAuth.credentials(req),
|
||||
});
|
||||
if (!entities.length) {
|
||||
if (!items[0]) {
|
||||
throw new NotFoundError(
|
||||
`No entity named '${name}' found, with kind '${kind}' in namespace '${namespace}'`,
|
||||
);
|
||||
}
|
||||
res.status(200).json(entities[0]);
|
||||
res.status(200).json(items[0]);
|
||||
})
|
||||
.get(
|
||||
'/entities/by-name/:kind/:namespace/:name/ancestry',
|
||||
|
||||
Reference in New Issue
Block a user