chore: remediate CI blockers for production readiness

This commit is contained in:
Ho Ngoc Hai
2026-05-07 13:08:20 +07:00
parent f82806e06d
commit b35ec55126
32 changed files with 401 additions and 113 deletions

View 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 })]),
);
});
});