41 lines
2.1 KiB
TypeScript
41 lines
2.1 KiB
TypeScript
import { ChannelSensitiveWordsService, validateChannelWord } from './channel-sensitive-words.service';
|
|
import { PrismaService } from '../prisma/prisma.service';
|
|
const valid = { channelId: 'a', word: ' 贷 款 ', status: 'active', remark: '' };
|
|
describe('channel word administration', () => {
|
|
it('trims only outer whitespace and requires a version for editing', () => {
|
|
expect(validateChannelWord(valid).word).toBe('贷 款');
|
|
expect(() => validateChannelWord(valid, true)).toThrow('版本');
|
|
expect(validateChannelWord({ ...valid, version: 3 }, true).version).toBe(3);
|
|
});
|
|
it.each([
|
|
null,
|
|
[],
|
|
{ ...valid, word: ' ' },
|
|
{ ...valid, word: 'a'.repeat(201) },
|
|
{ ...valid, channelId: '' },
|
|
{ ...valid, status: 'deleted' },
|
|
{ ...valid, remark: 'a'.repeat(501) },
|
|
{ ...valid, operatorId: 'spoof' },
|
|
])('rejects invalid runtime data %#', (data) => expect(() => validateChannelWord(data)).toThrow());
|
|
it('checks active platform admin permission before data access', async () => {
|
|
const prisma = {
|
|
user: { findFirst: jest.fn().mockResolvedValue(null) },
|
|
channelSensitiveWord: { findMany: jest.fn() },
|
|
};
|
|
const service = new ChannelSensitiveWordsService(prisma as unknown as PrismaService);
|
|
await expect(service.list('client-user', {})).rejects.toMatchObject({ status: 403 });
|
|
expect(prisma.channelSensitiveWord.findMany).not.toHaveBeenCalled();
|
|
expect(prisma.user.findFirst).toHaveBeenCalledWith(
|
|
expect.objectContaining({
|
|
where: expect.objectContaining({ deletedAt: null, roles: { some: { role: { code: 'platform_admin' } } } }),
|
|
}),
|
|
);
|
|
});
|
|
it('rejects invalid pagination before querying rules', async () => {
|
|
const prisma = { user: { findFirst: jest.fn().mockResolvedValue({ id: 'admin' }) } };
|
|
const service = new ChannelSensitiveWordsService(prisma as unknown as PrismaService);
|
|
for (const query of [{ page: '0' }, { pageSize: '101' }, { page: '1.5' }, { status: 'deleted' }])
|
|
await expect(service.list('admin', query)).rejects.toMatchObject({ status: 400 });
|
|
});
|
|
});
|