chore: reworking the api to wrap up in an object

Signed-off-by: blam <ben@blam.sh>
This commit is contained in:
blam
2022-05-30 14:53:54 +02:00
parent 61d31317a1
commit 1cd1c184ee
5 changed files with 26 additions and 12 deletions
+2 -2
View File
@@ -347,7 +347,7 @@ describe('api', () => {
}),
);
const result = await apiClient.listTasks('all');
const result = await apiClient.listTasks({ createdBy: 'all' });
expect(result).toHaveLength(2);
});
it('should list task using the current user as owner', async () => {
@@ -382,7 +382,7 @@ describe('api', () => {
userEntityRef: 'user:default/foo',
});
const result = await apiClient.listTasks('owned');
const result = await apiClient.listTasks({ createdBy: 'owned' });
expect(identityApi.getBackstageIdentity).toBeCalled();
expect(result).toHaveLength(1);
});
+4 -2
View File
@@ -76,12 +76,14 @@ export class ScaffolderClient implements ScaffolderApi {
this.identityApi = options.identityApi;
}
async listTasks(createdBy: TasksOwnerFilterKind): Promise<ScaffolderTask[]> {
async listTasks(options: {
createdBy: TasksOwnerFilterKind;
}): Promise<ScaffolderTask[]> {
const baseUrl = await this.discoveryApi.getBaseUrl('scaffolder');
const { userEntityRef } = await this.identityApi.getBackstageIdentity();
const query = queryString.stringify(
createdBy === 'owned' ? { createdBy: userEntityRef } : {},
options.createdBy === 'owned' ? { createdBy: userEntityRef } : {},
);
const url = `${baseUrl}/v2/tasks?${query}`;
@@ -41,7 +41,7 @@ describe('<ListTasksPage />', () => {
signOut: jest.fn(),
};
const scaffolderApiMock: jest.Mocked<ScaffolderApi> = {
const scaffolderApiMock: jest.Mocked<Required<ScaffolderApi>> = {
scaffold: jest.fn(),
getTemplateParameterSchema: jest.fn(),
listTasks: jest.fn(),
@@ -139,7 +139,7 @@ describe('<ListTasksPage />', () => {
},
);
expect(scaffolderApiMock.listTasks).toBeCalledWith('owned');
expect(scaffolderApiMock.listTasks).toBeCalledWith({ createdBy: 'owned' });
expect(getByText('List template tasks')).toBeInTheDocument();
expect(getByText('All tasks that have been started')).toBeInTheDocument();
expect(getByText('Tasks')).toBeInTheDocument();
@@ -171,6 +171,7 @@ describe('<ListTasksPage />', () => {
},
},
});
scaffolderApiMock.listTasks
.mockResolvedValue([
{
@@ -231,7 +232,7 @@ describe('<ListTasksPage />', () => {
fireEvent.click(allButton);
});
expect(scaffolderApiMock.listTasks).toBeCalledWith('all');
expect(scaffolderApiMock.listTasks).toBeCalledWith({ createdBy: 'all' });
expect(await findByText('One Template')).toBeInTheDocument();
expect(await findByText('OtherUser')).toBeInTheDocument();
});
@@ -50,10 +50,17 @@ const ListTaskPageContent = (props: MyTaskPageProps) => {
const rootLink = useRouteRef(rootRouteRef);
const [ownerFilter, setOwnerFilter] = useState(initiallySelectedFilter);
const { value, loading, error } = useAsync(
() => scaffolderApi.listTasks(ownerFilter),
[scaffolderApi, ownerFilter],
);
const { value, loading, error } = useAsync(() => {
if (scaffolderApi.listTasks) {
return scaffolderApi.listTasks?.({ createdBy: ownerFilter });
}
// eslint-disable-next-line no-console
console.warn(
'listTasks is not implemented in the scaffolderApi, please make sure to implement this method.',
);
return Promise.resolve([]);
}, [scaffolderApi, ownerFilter]);
if (loading) {
return <Progress />;
+5 -1
View File
@@ -178,7 +178,11 @@ export interface ScaffolderApi {
getTask(taskId: string): Promise<ScaffolderTask>;
listTasks?(createdBy: TasksOwnerFilterKind): Promise<ScaffolderTask[]>;
listTasks?({
createdBy,
}: {
createdBy: TasksOwnerFilterKind;
}): Promise<ScaffolderTask[]>;
getIntegrationsList(
options: ScaffolderGetIntegrationsListOptions,