test: разбор автора вынесен в модуль без SharePoint
Тест parseAuthorOwsUser падал: он импортировал myRequests.service, а тот тянет PnPjs (ESM), который Jest проекта не разбирает. Функция вынесена в parseAuthorOwsUser.ts без SharePoint-импортов, сервис берёт её оттуда. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -25,6 +25,7 @@ import {
|
||||
import { effectiveUserEmail } from '../../shared/impersonation';
|
||||
import { DATA_SITE_URL } from '../../shared/config';
|
||||
import { IAssignee, IMyRequest } from './models/IMyRequest';
|
||||
import { parseAuthorOwsUser } from './parseAuthorOwsUser';
|
||||
import { IMyRequestsTypeDebug } from './models/IMyRequestsDebug';
|
||||
import { traceLinkedTypes, traceResultRows, traceSearchHits } from './searchTrace';
|
||||
import { perfScope, traced } from '../../shared/perfTrace';
|
||||
@@ -106,22 +107,6 @@ const MP_CODE = 'RequestUniqueCodeOWSTEXT';
|
||||
// создатель (см. toMyRequestFromSearch); основной — MP_AUTHOR/parseAuthorOwsUser.
|
||||
const OWN_SELECT_PROPERTIES = ['ListItemID', 'Path', 'Title', 'Created', 'Author', MP_AUTHOR, MP_REQUEST_STATUS, MP_CODE];
|
||||
|
||||
/**
|
||||
* Managed property Person-поля хранит несколько значений одной строкой через
|
||||
* " | ": «<почта> | <ФИО> | <служебный id> <claims-логин>» (первые два —
|
||||
* проверено вручную, tools/sp props, 2026-08-20; хвост вылез в UI 2026-09-29,
|
||||
* когда ФИО стали брать отсюда). Поэтому ФИО — ровно ВТОРОЙ кусок, а не «всё
|
||||
* после первого разделителя».
|
||||
*
|
||||
* Разделитель — именно " | " С ПРОБЕЛАМИ: claims-логин
|
||||
* `i:0#.f|membership|user@domain` содержит "|" без пробелов вокруг, и деление по
|
||||
* голому "|" порезало бы его на части.
|
||||
*/
|
||||
export function parseAuthorOwsUser(value: unknown): { email: string; name: string } {
|
||||
const parts = (typeof value === 'string' ? value : '').split(' | ').map((p) => p.trim());
|
||||
return { email: parts[0] ?? '', name: parts[1] ?? '' };
|
||||
}
|
||||
|
||||
// effectiveUserEmail, а не pageContext напрямую: при отладочной подмене личности
|
||||
// (см. shared/impersonation.ts) «мои заявки» и очереди согласования должны
|
||||
// отбираться по подменённому сотруднику — иначе подмена показывала бы чужой
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { parseAuthorOwsUser } from './myRequests.service';
|
||||
import { parseAuthorOwsUser } from './parseAuthorOwsUser';
|
||||
|
||||
describe('parseAuthorOwsUser', () => {
|
||||
it('ФИО — ровно второй кусок, служебный хвост отбрасывается', () => {
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
/**
|
||||
* Managed property Person-поля хранит несколько значений одной строкой через
|
||||
* " | ": «<почта> | <ФИО> | <служебный id> <claims-логин>» (первые два —
|
||||
* проверено вручную, tools/sp props, 2026-08-20; хвост вылез в UI 2026-09-29,
|
||||
* когда ФИО стали брать отсюда). Поэтому ФИО — ровно ВТОРОЙ кусок, а не «всё
|
||||
* после первого разделителя».
|
||||
*
|
||||
* Разделитель — именно " | " С ПРОБЕЛАМИ: claims-логин
|
||||
* `i:0#.f|membership|user@domain` содержит "|" без пробелов вокруг, и деление по
|
||||
* голому "|" порезало бы его на части.
|
||||
*
|
||||
* Отдельным модулем, без SharePoint-импортов: myRequests.service тянет PnPjs,
|
||||
* который Jest проекта не разбирает (ESM), — так функцию можно тестировать.
|
||||
*/
|
||||
export function parseAuthorOwsUser(value: unknown): { email: string; name: string } {
|
||||
const parts = (typeof value === 'string' ? value : '').split(' | ').map((p) => p.trim());
|
||||
return { email: parts[0] ?? '', name: parts[1] ?? '' };
|
||||
}
|
||||
Reference in New Issue
Block a user