Обходной лист #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