chore: remediate CI blockers for production readiness
This commit is contained in:
69
e2e/api/user-admin-listing-flow.spec.ts
Normal file
69
e2e/api/user-admin-listing-flow.spec.ts
Normal file
@@ -0,0 +1,69 @@
|
||||
import { test, expect, registerUser, loginSeedAdmin } from '../fixtures';
|
||||
import { createListing } from '../fixtures/listings.fixture';
|
||||
|
||||
test.describe('User-to-admin listing moderation flow', () => {
|
||||
test('user creates listing, submits review, admin approves, and listing becomes active', async ({ request }) => {
|
||||
const { accessToken: userToken } = await registerUser(request);
|
||||
const title = `E2E User Admin Flow ${Date.now()}`;
|
||||
|
||||
const { listing } = await createListing(request, userToken, {
|
||||
title,
|
||||
address: `${Date.now()} Nguyễn Huệ`,
|
||||
});
|
||||
const listingId = listing.listingId as string;
|
||||
expect(listingId).toBeTruthy();
|
||||
expect(listing.status).toBe('DRAFT');
|
||||
|
||||
const submitRes = await request.patch(`listings/${listingId}/status`, {
|
||||
data: { status: 'PENDING_REVIEW' },
|
||||
headers: { Authorization: `Bearer ${userToken}` },
|
||||
});
|
||||
expect(submitRes.status()).toBe(200);
|
||||
const submitBody = await submitRes.json();
|
||||
expect(submitBody).toEqual(expect.objectContaining({ status: 'PENDING_REVIEW' }));
|
||||
|
||||
const { accessToken: adminToken } = await loginSeedAdmin(request);
|
||||
|
||||
const queueRes = await request.get('admin/moderation', {
|
||||
params: { page: 1, limit: 100 },
|
||||
headers: { Authorization: `Bearer ${adminToken}` },
|
||||
});
|
||||
expect(queueRes.status()).toBe(200);
|
||||
const queue = await queueRes.json();
|
||||
expect(queue.data).toEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({
|
||||
listingId,
|
||||
propertyTitle: title,
|
||||
}),
|
||||
]),
|
||||
);
|
||||
|
||||
const approveRes = await request.post('admin/moderation/approve', {
|
||||
data: {
|
||||
listingId,
|
||||
moderationNotes: 'E2E admin approval',
|
||||
},
|
||||
headers: { Authorization: `Bearer ${adminToken}` },
|
||||
});
|
||||
expect(approveRes.status()).toBe(201);
|
||||
const approveBody = await approveRes.json();
|
||||
expect(approveBody).toEqual(expect.objectContaining({ listingId, status: 'ACTIVE' }));
|
||||
|
||||
const detailRes = await request.get(`listings/${listingId}`);
|
||||
expect(detailRes.status()).toBe(200);
|
||||
const detail = await detailRes.json();
|
||||
expect(detail.id).toBe(listingId);
|
||||
expect(detail.status).toBe('ACTIVE');
|
||||
|
||||
const queueAfterApproveRes = await request.get('admin/moderation', {
|
||||
params: { page: 1, limit: 100 },
|
||||
headers: { Authorization: `Bearer ${adminToken}` },
|
||||
});
|
||||
expect(queueAfterApproveRes.status()).toBe(200);
|
||||
const queueAfterApprove = await queueAfterApproveRes.json();
|
||||
expect(queueAfterApprove.data).not.toEqual(
|
||||
expect.arrayContaining([expect.objectContaining({ listingId })]),
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user