Skip to content

Instantly share code, notes, and snippets.

@MarcosSantosDev
Created February 28, 2024 00:16
Show Gist options
  • Save MarcosSantosDev/2e74c0951a50262da79a0153f6c2c767 to your computer and use it in GitHub Desktop.
Save MarcosSantosDev/2e74c0951a50262da79a0153f6c2c767 to your computer and use it in GitHub Desktop.
msw with fake data
import { factory } from '@mswjs/data';
import { http, HttpResponse } from 'msw';
import { faker } from '@faker-js/faker';
import { primaryKey } from '@mswjs/data';
type User = {
id: string;
firstName: string;
};
const UserModel = {
id: primaryKey(() => faker.string.uuid()),
firstName: () => faker.person.firstName()
};
const db = factory({
user: UserModel
});
for (let index = 0; index < 10; index++) {
db.user.create();
}
const handlers = [
// GET /users
http.get<never, never, User[]>('/users', () => {
const users = db.user.getAll();
return HttpResponse.json(users, { status: 200 });
}),
// PUT /users/:id
http.put<never, never, User>('/users/:id', async ({ request, params }) => {
const { id } = params;
const { firstName } = await request.json();
const updatedUser = db.user.update({
where: {
id: {
equals: id
}
},
data: {
firstName
}
});
return HttpResponse.json(updatedUser, { status: 201 });
}),
// POST /users
http.post<never, never, User>('/users', async ({ request }) => {
const { firstName } = await request.json();
const newUser = db.user.create({ firstName });
return HttpResponse.json(newUser, { status: 201 });
}),
// DELETE /users/:id
http.delete<{ id: string }, never, User>('/users/:id', ({ params }) => {
const { id } = params;
const deletedUser = db.user.delete({
where: {
id: {
equals: id
}
}
});
return HttpResponse.json(deletedUser, { status: 201 });
})
];
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment