portainer/app/setup-tests/server-handlers.ts

95 lines
2.9 KiB
TypeScript

import { DefaultBodyType, PathParams, rest } from 'msw';
import {
Edition,
LicenseInfo,
LicenseType,
} from '@/react/portainer/licenses/types';
import { EnvironmentGroup } from '@/react/portainer/environments/environment-groups/types';
import { Tag } from '@/portainer/tags/types';
import { StatusResponse } from '@/react/portainer/system/useSystemStatus';
import { createMockTeams } from '@/react-tools/test-mocks';
import { PublicSettingsResponse } from '@/react/portainer/settings/types';
import { UserId } from '@/portainer/users/types';
import { azureHandlers } from './setup-handlers/azure';
import { dockerHandlers } from './setup-handlers/docker';
import { userHandlers } from './setup-handlers/users';
const tags: Tag[] = [
{ ID: 1, Name: 'tag1', Endpoints: {} },
{ ID: 2, Name: 'tag2', Endpoints: {} },
];
const licenseInfo: LicenseInfo = {
nodes: 1000,
type: LicenseType.Subscription,
company: 'company',
createdAt: 0,
email: 'email@company.com',
expiresAt: Number.MAX_SAFE_INTEGER,
productEdition: Edition.EE,
valid: true,
enforcedAt: 0,
enforced: false,
};
export const handlers = [
rest.get('/api/teams', async (req, res, ctx) =>
res(ctx.json(createMockTeams(10)))
),
rest.post<{ name: string }>('/api/teams', (req, res, ctx) =>
res(ctx.status(204))
),
rest.post<{ userId: UserId }>('/api/team_memberships', (req, res, ctx) =>
res(ctx.status(204))
),
...azureHandlers,
...dockerHandlers,
...userHandlers,
rest.get('/api/licenses/info', (req, res, ctx) => res(ctx.json(licenseInfo))),
rest.get('/api/status/nodes', (req, res, ctx) => res(ctx.json({ nodes: 3 }))),
rest.get('/api/backup/s3/status', (req, res, ctx) =>
res(ctx.json({ Failed: false }))
),
rest.get('/api/endpoint_groups', (req, res, ctx) => res(ctx.json([]))),
rest.get('/api/endpoint_groups/:groupId', (req, res, ctx) => {
if (req.params.groupId instanceof Array) {
throw new Error('should be string');
}
const id = parseInt(req.params.groupId, 10);
const group: Partial<EnvironmentGroup> = {
Id: id,
Name: `group${id}`,
};
return res(ctx.json(group));
}),
rest.get('/api/tags', (req, res, ctx) => res(ctx.json(tags))),
rest.post<{ name: string }>('/api/tags', (req, res, ctx) => {
const tagName = req.body.name;
const tag = { ID: tags.length + 1, Name: tagName, Endpoints: {} };
tags.push(tag);
return res(ctx.json(tag));
}),
rest.get<DefaultBodyType, PathParams, Partial<PublicSettingsResponse>>(
'/api/settings/public',
(req, res, ctx) =>
res(
ctx.json({
Edge: {
AsyncMode: false,
CheckinInterval: 60,
CommandInterval: 60,
PingInterval: 60,
SnapshotInterval: 60,
},
})
)
),
rest.get<DefaultBodyType, PathParams, Partial<StatusResponse>>(
'/api/status',
(req, res, ctx) => res(ctx.json({}))
),
];