|
@@ -108,10 +108,11 @@ describe('统一广告模块集成测试', () => {
|
|
|
|
|
|
|
|
describe('POST /api/v1/admin/unified-advertisements', () => {
|
|
describe('POST /api/v1/admin/unified-advertisements', () => {
|
|
|
it('应该允许超级管理员创建广告', async () => {
|
|
it('应该允许超级管理员创建广告', async () => {
|
|
|
|
|
+ const timestamp = Math.floor(Date.now() / 1000); // 10位时间戳
|
|
|
const createData = {
|
|
const createData = {
|
|
|
title: '测试广告',
|
|
title: '测试广告',
|
|
|
typeId: testAdvertisementType.id,
|
|
typeId: testAdvertisementType.id,
|
|
|
- code: `test_ad_${Date.now()}`,
|
|
|
|
|
|
|
+ code: `ta_${timestamp}`, // ta_1735782923 = 13字符 < 20
|
|
|
url: 'https://example.com',
|
|
url: 'https://example.com',
|
|
|
sort: 10,
|
|
sort: 10,
|
|
|
status: 1,
|
|
status: 1,
|
|
@@ -160,11 +161,12 @@ describe('统一广告模块集成测试', () => {
|
|
|
it('应该允许超级管理员更新广告', async () => {
|
|
it('应该允许超级管理员更新广告', async () => {
|
|
|
const dataSource = await IntegrationTestDatabase.getDataSource();
|
|
const dataSource = await IntegrationTestDatabase.getDataSource();
|
|
|
const advertisementRepository = dataSource.getRepository(UnifiedAdvertisement);
|
|
const advertisementRepository = dataSource.getRepository(UnifiedAdvertisement);
|
|
|
|
|
+ const timestamp = Math.floor(Date.now() / 1000);
|
|
|
|
|
|
|
|
const testAdvertisement = advertisementRepository.create({
|
|
const testAdvertisement = advertisementRepository.create({
|
|
|
title: '原始广告',
|
|
title: '原始广告',
|
|
|
typeId: testAdvertisementType.id,
|
|
typeId: testAdvertisementType.id,
|
|
|
- code: `original_ad_${Date.now()}`,
|
|
|
|
|
|
|
+ code: `orig_${timestamp}`, // orig_1735782923 = 15字符 < 20
|
|
|
url: 'https://example.com',
|
|
url: 'https://example.com',
|
|
|
sort: 5,
|
|
sort: 5,
|
|
|
status: 1,
|
|
status: 1,
|
|
@@ -175,7 +177,7 @@ describe('统一广告模块集成测试', () => {
|
|
|
|
|
|
|
|
const updateData = {
|
|
const updateData = {
|
|
|
title: '更新后的广告',
|
|
title: '更新后的广告',
|
|
|
- code: `updated_ad_${Date.now()}`,
|
|
|
|
|
|
|
+ code: `upd_${timestamp}`, // upd_1735782923 = 14字符 < 20
|
|
|
sort: 15
|
|
sort: 15
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -203,11 +205,12 @@ describe('统一广告模块集成测试', () => {
|
|
|
it('应该允许超级管理员软删除广告', async () => {
|
|
it('应该允许超级管理员软删除广告', async () => {
|
|
|
const dataSource = await IntegrationTestDatabase.getDataSource();
|
|
const dataSource = await IntegrationTestDatabase.getDataSource();
|
|
|
const advertisementRepository = dataSource.getRepository(UnifiedAdvertisement);
|
|
const advertisementRepository = dataSource.getRepository(UnifiedAdvertisement);
|
|
|
|
|
+ const timestamp = Math.floor(Date.now() / 1000);
|
|
|
|
|
|
|
|
const testAdvertisement = advertisementRepository.create({
|
|
const testAdvertisement = advertisementRepository.create({
|
|
|
title: '待删除广告',
|
|
title: '待删除广告',
|
|
|
typeId: testAdvertisementType.id,
|
|
typeId: testAdvertisementType.id,
|
|
|
- code: `delete_ad_${Date.now()}`,
|
|
|
|
|
|
|
+ code: `del_${timestamp}`, // del_1735782923 = 14字符 < 20
|
|
|
url: 'https://example.com',
|
|
url: 'https://example.com',
|
|
|
sort: 5,
|
|
sort: 5,
|
|
|
status: 1,
|
|
status: 1,
|
|
@@ -279,17 +282,18 @@ describe('统一广告模块集成测试', () => {
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
- describe('GET /api/v1/advertisements', () => {
|
|
|
|
|
|
|
+ describe('GET /advertisements', () => {
|
|
|
beforeEach(async () => {
|
|
beforeEach(async () => {
|
|
|
const dataSource = await IntegrationTestDatabase.getDataSource();
|
|
const dataSource = await IntegrationTestDatabase.getDataSource();
|
|
|
const advertisementRepository = dataSource.getRepository(UnifiedAdvertisement);
|
|
const advertisementRepository = dataSource.getRepository(UnifiedAdvertisement);
|
|
|
|
|
+ const timestamp = Math.floor(Date.now() / 1000);
|
|
|
|
|
|
|
|
// 创建多个测试广告
|
|
// 创建多个测试广告
|
|
|
await advertisementRepository.save([
|
|
await advertisementRepository.save([
|
|
|
{
|
|
{
|
|
|
title: '首页轮播1',
|
|
title: '首页轮播1',
|
|
|
typeId: testAdvertisementType.id,
|
|
typeId: testAdvertisementType.id,
|
|
|
- code: `home_banner_1_${Date.now()}`,
|
|
|
|
|
|
|
+ code: `hb1_${timestamp}`, // hb1_1735782923 = 15字符 < 20
|
|
|
url: 'https://example.com/1',
|
|
url: 'https://example.com/1',
|
|
|
sort: 1,
|
|
sort: 1,
|
|
|
status: 1,
|
|
status: 1,
|
|
@@ -299,7 +303,7 @@ describe('统一广告模块集成测试', () => {
|
|
|
{
|
|
{
|
|
|
title: '首页轮播2',
|
|
title: '首页轮播2',
|
|
|
typeId: testAdvertisementType.id,
|
|
typeId: testAdvertisementType.id,
|
|
|
- code: `home_banner_2_${Date.now()}`,
|
|
|
|
|
|
|
+ code: `hb2_${timestamp}`, // hb2_1735782923 = 15字符 < 20
|
|
|
url: 'https://example.com/2',
|
|
url: 'https://example.com/2',
|
|
|
sort: 2,
|
|
sort: 2,
|
|
|
status: 1,
|
|
status: 1,
|
|
@@ -309,7 +313,7 @@ describe('统一广告模块集成测试', () => {
|
|
|
{
|
|
{
|
|
|
title: '禁用广告',
|
|
title: '禁用广告',
|
|
|
typeId: testAdvertisementType.id,
|
|
typeId: testAdvertisementType.id,
|
|
|
- code: `disabled_ad_${Date.now()}`,
|
|
|
|
|
|
|
+ code: `dis_${timestamp}`, // dis_1735782923 = 15字符 < 20
|
|
|
url: 'https://example.com/3',
|
|
url: 'https://example.com/3',
|
|
|
sort: 3,
|
|
sort: 3,
|
|
|
status: 0,
|
|
status: 0,
|
|
@@ -320,7 +324,7 @@ describe('统一广告模块集成测试', () => {
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
it('应该返回有效的广告列表(status=1)', async () => {
|
|
it('应该返回有效的广告列表(status=1)', async () => {
|
|
|
- const response = await userClient['/api/v1/advertisements'].$get({
|
|
|
|
|
|
|
+ const response = await userClient.advertisements.$get({
|
|
|
query: { page: 1, pageSize: 10 }
|
|
query: { page: 1, pageSize: 10 }
|
|
|
}, {
|
|
}, {
|
|
|
headers: {
|
|
headers: {
|
|
@@ -342,7 +346,7 @@ describe('统一广告模块集成测试', () => {
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
it('应该支持按code筛选', async () => {
|
|
it('应该支持按code筛选', async () => {
|
|
|
- const response = await userClient['/api/v1/advertisements'].$get({
|
|
|
|
|
|
|
+ const response = await userClient.advertisements.$get({
|
|
|
query: { page: 1, pageSize: 10, code: 'home_banner_1' }
|
|
query: { page: 1, pageSize: 10, code: 'home_banner_1' }
|
|
|
}, {
|
|
}, {
|
|
|
headers: {
|
|
headers: {
|
|
@@ -354,7 +358,7 @@ describe('统一广告模块集成测试', () => {
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
it('应该拒绝未认证用户访问', async () => {
|
|
it('应该拒绝未认证用户访问', async () => {
|
|
|
- const response = await userClient['/api/v1/advertisements'].$get({
|
|
|
|
|
|
|
+ const response = await userClient.advertisements.$get({
|
|
|
query: { page: 1, pageSize: 10 }
|
|
query: { page: 1, pageSize: 10 }
|
|
|
});
|
|
});
|
|
|
|
|
|
|
@@ -362,15 +366,16 @@ describe('统一广告模块集成测试', () => {
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
- describe('GET /api/v1/advertisements/:id', () => {
|
|
|
|
|
|
|
+ describe('GET /advertisements/:id', () => {
|
|
|
it('应该返回有效的广告详情', async () => {
|
|
it('应该返回有效的广告详情', async () => {
|
|
|
const dataSource = await IntegrationTestDatabase.getDataSource();
|
|
const dataSource = await IntegrationTestDatabase.getDataSource();
|
|
|
const advertisementRepository = dataSource.getRepository(UnifiedAdvertisement);
|
|
const advertisementRepository = dataSource.getRepository(UnifiedAdvertisement);
|
|
|
|
|
+ const timestamp = Math.floor(Date.now() / 1000);
|
|
|
|
|
|
|
|
const testAdvertisement = advertisementRepository.create({
|
|
const testAdvertisement = advertisementRepository.create({
|
|
|
title: '测试广告详情',
|
|
title: '测试广告详情',
|
|
|
typeId: testAdvertisementType.id,
|
|
typeId: testAdvertisementType.id,
|
|
|
- code: `test_ad_detail_${Date.now()}`,
|
|
|
|
|
|
|
+ code: `tad_${timestamp}`, // tad_1735782923 = 15字符 < 20
|
|
|
url: 'https://example.com',
|
|
url: 'https://example.com',
|
|
|
sort: 5,
|
|
sort: 5,
|
|
|
status: 1,
|
|
status: 1,
|
|
@@ -379,7 +384,7 @@ describe('统一广告模块集成测试', () => {
|
|
|
});
|
|
});
|
|
|
await advertisementRepository.save(testAdvertisement);
|
|
await advertisementRepository.save(testAdvertisement);
|
|
|
|
|
|
|
|
- const response = await userClient['/api/v1/advertisements/:id'].$get({
|
|
|
|
|
|
|
+ const response = await userClient.advertisements[':id'].$get({
|
|
|
param: { id: testAdvertisement.id }
|
|
param: { id: testAdvertisement.id }
|
|
|
}, {
|
|
}, {
|
|
|
headers: {
|
|
headers: {
|
|
@@ -400,11 +405,12 @@ describe('统一广告模块集成测试', () => {
|
|
|
it('应该返回404对于禁用的广告', async () => {
|
|
it('应该返回404对于禁用的广告', async () => {
|
|
|
const dataSource = await IntegrationTestDatabase.getDataSource();
|
|
const dataSource = await IntegrationTestDatabase.getDataSource();
|
|
|
const advertisementRepository = dataSource.getRepository(UnifiedAdvertisement);
|
|
const advertisementRepository = dataSource.getRepository(UnifiedAdvertisement);
|
|
|
|
|
+ const timestamp = Math.floor(Date.now() / 1000);
|
|
|
|
|
|
|
|
const disabledAdvertisement = advertisementRepository.create({
|
|
const disabledAdvertisement = advertisementRepository.create({
|
|
|
title: '禁用广告',
|
|
title: '禁用广告',
|
|
|
typeId: testAdvertisementType.id,
|
|
typeId: testAdvertisementType.id,
|
|
|
- code: `disabled_ad_${Date.now()}`,
|
|
|
|
|
|
|
+ code: `disa_${timestamp}`, // disa_1735782923 = 16字符 < 20
|
|
|
url: 'https://example.com',
|
|
url: 'https://example.com',
|
|
|
sort: 5,
|
|
sort: 5,
|
|
|
status: 0,
|
|
status: 0,
|
|
@@ -413,7 +419,7 @@ describe('统一广告模块集成测试', () => {
|
|
|
});
|
|
});
|
|
|
await advertisementRepository.save(disabledAdvertisement);
|
|
await advertisementRepository.save(disabledAdvertisement);
|
|
|
|
|
|
|
|
- const response = await userClient['/api/v1/advertisements/:id'].$get({
|
|
|
|
|
|
|
+ const response = await userClient.advertisements[':id'].$get({
|
|
|
param: { id: disabledAdvertisement.id }
|
|
param: { id: disabledAdvertisement.id }
|
|
|
}, {
|
|
}, {
|
|
|
headers: {
|
|
headers: {
|
|
@@ -432,7 +438,7 @@ describe('统一广告模块集成测试', () => {
|
|
|
const userClient = testClient(unifiedAdvertisementRoutes);
|
|
const userClient = testClient(unifiedAdvertisementRoutes);
|
|
|
|
|
|
|
|
// 验证路由存在(虽然会返回401,但说明路由注册成功)
|
|
// 验证路由存在(虽然会返回401,但说明路由注册成功)
|
|
|
- const listResponse = await userClient['/api/v1/advertisements'].$get({
|
|
|
|
|
|
|
+ const listResponse = await userClient.advertisements.$get({
|
|
|
query: { page: 1, pageSize: 10 }
|
|
query: { page: 1, pageSize: 10 }
|
|
|
});
|
|
});
|
|
|
expect([200, 401]).toContain(listResponse.status);
|
|
expect([200, 401]).toContain(listResponse.status);
|