Обходной лист #12
@@ -1,56 +0,0 @@
|
||||
import { AadHttpClient } from '@microsoft/sp-http';
|
||||
import { PortalDictionaryClient } from './portalDictionary';
|
||||
|
||||
// Мок-клиент вместо настоящего AadHttpClient — employees() дёргает только .get().
|
||||
function clientReturning(body: unknown): AadHttpClient {
|
||||
return {
|
||||
get: () =>
|
||||
Promise.resolve({
|
||||
ok: true,
|
||||
text: () => Promise.resolve(JSON.stringify(body))
|
||||
})
|
||||
} as unknown as AadHttpClient;
|
||||
}
|
||||
|
||||
describe('PortalDictionaryClient.employees', () => {
|
||||
// Регрессия: api.tnsu.kz отдаёт ОТДЕЛЬНУЮ строку на каждую компанию, где
|
||||
// числится сотрудник (совместители/бухгалтерия на несколько юрлиц — не
|
||||
// редкость). Раньше company у дедуплицированной записи оставалась только
|
||||
// первой попавшейся, а остальные компании терялись — сотрудник ошибочно
|
||||
// выглядел отсутствующим в них (см. forms/Clearance-подсказку в RouteStepFormModal).
|
||||
it('строки одного email по разным компаниям схлопываются в одного сотрудника, но все компании сохраняются', async () => {
|
||||
const client = clientReturning([
|
||||
{ fio: 'Тәжіғалиев Биғали', email: 'b@ct-global.kz', position: 'Главный бухгалтер', company: 'ТОО ГеоТрек' },
|
||||
{ fio: 'Тәжіғалиев Биғали', email: 'b@ct-global.kz', position: 'Главный бухгалтер', company: 'ТОО AFL Engineering' },
|
||||
{ fio: 'Тәжіғалиев Биғали', email: 'b@ct-global.kz', position: 'Главный бухгалтер', company: 'ТОО СТ Global' }
|
||||
]);
|
||||
|
||||
const employees = await new PortalDictionaryClient(client, 'https://api.tnsu.kz').employees();
|
||||
|
||||
expect(employees).toHaveLength(1);
|
||||
expect(employees[0].company).toBe('ТОО ГеоТрек'); // первая — для пикера/отображения
|
||||
expect(employees[0].companies).toEqual(['ТОО ГеоТрек', 'ТОО AFL Engineering', 'ТОО СТ Global']);
|
||||
});
|
||||
|
||||
it('разные email — разные сотрудники, дедупликация их не задевает', async () => {
|
||||
const client = clientReturning([
|
||||
{ fio: 'A', email: 'a@tnsu.kz', position: 'Инженер', company: 'Компания А' },
|
||||
{ fio: 'B', email: 'b@tnsu.kz', position: 'Инженер', company: 'Компания Б' }
|
||||
]);
|
||||
|
||||
const employees = await new PortalDictionaryClient(client, 'https://api.tnsu.kz').employees();
|
||||
|
||||
expect(employees.map(e => e.email)).toEqual(['a@tnsu.kz', 'b@tnsu.kz']);
|
||||
expect(employees.map(e => e.companies)).toEqual([['Компания А'], ['Компания Б']]);
|
||||
});
|
||||
|
||||
it('сотрудник без email в строке — пропускается (по нему нельзя резолвить исполнителя)', async () => {
|
||||
const client = clientReturning([
|
||||
{ fio: 'Без Email', email: null, position: 'Инженер', company: 'Компания А' }
|
||||
]);
|
||||
|
||||
const employees = await new PortalDictionaryClient(client, 'https://api.tnsu.kz').employees();
|
||||
|
||||
expect(employees).toEqual([]);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user