fix(FEAT-MO-001): 校验TDX交易日期语义
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { describe, expect, it, vi } from 'vitest';
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
|
||||
import { MarketOverviewService } from './market-overview.service';
|
||||
|
||||
@@ -77,6 +77,15 @@ const turnoverResult = {
|
||||
};
|
||||
|
||||
describe('市场概览服务', () => {
|
||||
beforeEach(() => {
|
||||
vi.useFakeTimers();
|
||||
vi.setSystemTime(new Date('2026-08-18T03:00:00.000Z'));
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
vi.useRealTimers();
|
||||
});
|
||||
|
||||
it('读取指数并返回统一快照元数据', async () => {
|
||||
const client = { request: vi.fn().mockResolvedValue(indexResult) };
|
||||
const service = new MarketOverviewService(client);
|
||||
@@ -96,19 +105,14 @@ describe('市场概览服务', () => {
|
||||
});
|
||||
|
||||
it('核心指数交易日旧于上海当前日期时标记 delayed', async () => {
|
||||
vi.useFakeTimers();
|
||||
vi.setSystemTime(new Date('2026-08-19T03:00:00.000Z'));
|
||||
try {
|
||||
const client = { request: vi.fn().mockResolvedValue(indexResult) };
|
||||
const service = new MarketOverviewService(client);
|
||||
const client = { request: vi.fn().mockResolvedValue(indexResult) };
|
||||
const service = new MarketOverviewService(client);
|
||||
|
||||
const response = await service.getIndices();
|
||||
const response = await service.getIndices();
|
||||
|
||||
expect(response.status).toBe('delayed');
|
||||
expect(response.warnings).toEqual(['核心指数交易日期为 20260818,非当前日期']);
|
||||
} finally {
|
||||
vi.useRealTimers();
|
||||
}
|
||||
expect(response.status).toBe('delayed');
|
||||
expect(response.warnings).toEqual(['核心指数交易日期为 20260818,非当前日期']);
|
||||
});
|
||||
|
||||
it('汇总三个市场指数的上涨和下跌家数并保留未知平盘数', async () => {
|
||||
@@ -157,28 +161,22 @@ describe('市场概览服务', () => {
|
||||
});
|
||||
|
||||
it('市场宽度使用核心指数交易日识别 delayed,不把旧快照标为 fresh', async () => {
|
||||
vi.useFakeTimers();
|
||||
vi.setSystemTime(new Date('2026-08-18T03:00:00.000Z'));
|
||||
try {
|
||||
const staleIndexResult = structuredClone(indexResult);
|
||||
staleIndexResult.Value['000001.SH'].Date = ['20260816', '20260817'];
|
||||
const client = {
|
||||
request: vi
|
||||
.fn()
|
||||
.mockResolvedValueOnce(breadthSnapshot('10', '5'))
|
||||
.mockResolvedValueOnce(breadthSnapshot('20', '15'))
|
||||
.mockResolvedValueOnce(breadthSnapshot('3', '2'))
|
||||
.mockResolvedValueOnce(staleIndexResult),
|
||||
};
|
||||
const service = new MarketOverviewService(client);
|
||||
const staleIndexResult = structuredClone(indexResult);
|
||||
staleIndexResult.Value['000001.SH'].Date = ['20260816', '20260817'];
|
||||
const client = {
|
||||
request: vi
|
||||
.fn()
|
||||
.mockResolvedValueOnce(breadthSnapshot('10', '5'))
|
||||
.mockResolvedValueOnce(breadthSnapshot('20', '15'))
|
||||
.mockResolvedValueOnce(breadthSnapshot('3', '2'))
|
||||
.mockResolvedValueOnce(staleIndexResult),
|
||||
};
|
||||
const service = new MarketOverviewService(client);
|
||||
|
||||
const response = await service.getBreadth();
|
||||
const response = await service.getBreadth();
|
||||
|
||||
expect(response.status).toBe('delayed');
|
||||
expect(response.warnings).toEqual(['市场宽度交易日期为 20260817,非当前日期']);
|
||||
} finally {
|
||||
vi.useRealTimers();
|
||||
}
|
||||
expect(response.status).toBe('delayed');
|
||||
expect(response.warnings).toEqual(['市场宽度交易日期为 20260817,非当前日期']);
|
||||
});
|
||||
|
||||
it('按一级行业涨跌幅排序板块并保留 TDX 代码', async () => {
|
||||
@@ -263,24 +261,16 @@ describe('市场概览服务', () => {
|
||||
});
|
||||
|
||||
it('一级行业交易日旧于上海当前日期时标记 delayed', async () => {
|
||||
vi.useFakeTimers();
|
||||
vi.setSystemTime(new Date('2026-08-19T03:00:00.000Z'));
|
||||
try {
|
||||
const client = {
|
||||
request: vi
|
||||
.fn()
|
||||
.mockResolvedValueOnce(sectorResult)
|
||||
.mockResolvedValueOnce(sectorKlineResult),
|
||||
};
|
||||
const service = new MarketOverviewService(client);
|
||||
const client = {
|
||||
request: vi.fn().mockResolvedValueOnce(sectorResult).mockResolvedValueOnce(sectorKlineResult),
|
||||
};
|
||||
const service = new MarketOverviewService(client);
|
||||
|
||||
const response = await service.getSectors();
|
||||
const response = await service.getSectors();
|
||||
|
||||
expect(response.status).toBe('delayed');
|
||||
expect(response.warnings).toEqual(['一级行业交易日期为 20260818,非当前日期']);
|
||||
} finally {
|
||||
vi.useRealTimers();
|
||||
}
|
||||
expect(response.status).toBe('delayed');
|
||||
expect(response.warnings).toEqual(['一级行业交易日期为 20260818,非当前日期']);
|
||||
});
|
||||
|
||||
it('按交易所指数成交额计算亿元级趋势而不宣称主力净流入', async () => {
|
||||
@@ -321,18 +311,13 @@ describe('市场概览服务', () => {
|
||||
});
|
||||
|
||||
it('成交额交易日旧于上海当前日期时标记 delayed', async () => {
|
||||
vi.useFakeTimers();
|
||||
vi.setSystemTime(new Date('2026-08-19T03:00:00.000Z'));
|
||||
try {
|
||||
const client = { request: vi.fn().mockResolvedValue(turnoverResult) };
|
||||
const service = new MarketOverviewService(client);
|
||||
const client = { request: vi.fn().mockResolvedValue(turnoverResult) };
|
||||
const service = new MarketOverviewService(client);
|
||||
|
||||
const response = await service.getFunds();
|
||||
const response = await service.getFunds();
|
||||
|
||||
expect(response.status).toBe('delayed');
|
||||
expect(response.warnings).toEqual(['成交额交易日期为 20260818,非当前日期']);
|
||||
} finally {
|
||||
vi.useRealTimers();
|
||||
}
|
||||
expect(response.status).toBe('delayed');
|
||||
expect(response.warnings).toEqual(['成交额交易日期为 20260818,非当前日期']);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user