后台
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
|
||||
import request from 'supertest';
|
||||
import { setupApp, teardown, resetDb } from './setup.js';
|
||||
import { makePayload } from './fixtures.js';
|
||||
|
||||
const TOKEN = 'Bearer dev-ingest-token-1234';
|
||||
|
||||
let app: any;
|
||||
|
||||
beforeAll(async () => {
|
||||
({ app } = await setupApp());
|
||||
}, 90000);
|
||||
afterAll(async () => {
|
||||
await teardown();
|
||||
});
|
||||
|
||||
describe('ingest auth/validation', () => {
|
||||
it('401 without token', async () => {
|
||||
const res = await request(app).post('/api/ingest').send(makePayload());
|
||||
expect(res.status).toBe(401);
|
||||
});
|
||||
|
||||
it('400 bad payload', async () => {
|
||||
const res = await request(app)
|
||||
.post('/api/ingest')
|
||||
.set('Authorization', 'Bearer dev-ingest-token-1234')
|
||||
.send({ inquiry: {} });
|
||||
expect(res.status).toBe(400);
|
||||
});
|
||||
});
|
||||
|
||||
describe('ingest basic insert', () => {
|
||||
it('accepts valid payload, inserts 2 messages', async () => {
|
||||
await resetDb();
|
||||
const res = await request(app).post('/api/ingest')
|
||||
.set('Authorization', 'Bearer dev-ingest-token-1234').send(makePayload());
|
||||
expect(res.status).toBe(200);
|
||||
expect(res.body.inserted).toBe(2);
|
||||
expect(res.body.earlyReturn).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('ingest idempotency + increment', () => {
|
||||
it('push N → push N again early-returns', async () => {
|
||||
await resetDb();
|
||||
const p = makePayload();
|
||||
const r1 = await request(app).post('/api/ingest').set('Authorization', TOKEN).send(p);
|
||||
expect(r1.status).toBe(200);
|
||||
expect(r1.body.inserted).toBe(2);
|
||||
expect(r1.body.earlyReturn).toBe(false);
|
||||
const r2 = await request(app).post('/api/ingest').set('Authorization', TOKEN).send(p);
|
||||
expect(r2.body.earlyReturn).toBe(true);
|
||||
});
|
||||
|
||||
it('push N → push N+1 → push N+1 again early-returns (messagesCount=total regression)', async () => {
|
||||
await resetDb();
|
||||
const base = makePayload();
|
||||
await request(app).post('/api/ingest').set('Authorization', TOKEN).send(base);
|
||||
const withOneMore = makePayload({
|
||||
messages: [
|
||||
...base.messages,
|
||||
{ messageId: 'm3', sendTime: '2026-07-13T02:13:00Z', sender: 'x', direction: 'incoming', content: 'c3', translation: '' },
|
||||
],
|
||||
});
|
||||
const r3 = await request(app).post('/api/ingest').set('Authorization', TOKEN).send(withOneMore);
|
||||
expect(r3.body.inserted).toBe(3); // 总量 3,不是 delta 1
|
||||
expect(r3.body.earlyReturn).toBe(false);
|
||||
// 再推同样 3 条 → 早返回(若 messagesCount 退化成 delta,这里 earlyReturn 会是 false)
|
||||
const r4 = await request(app).post('/api/ingest').set('Authorization', TOKEN).send(withOneMore);
|
||||
expect(r4.body.earlyReturn).toBe(true);
|
||||
expect(r4.body.inserted).toBe(3);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user