Files
Organization-Chart/tests/OrganizationChartCore.test.ts
Torsten Brendgen 18fee714b8 feat: Initialize organization chart web part with core functionality and configuration
- Added configuration files: config.json, copy-assets.json, package-solution.json, serve.json, write-manifests.json.
- Created gulpfile.js for build process.
- Implemented core logic in OrganizationChartCore.ts for account normalization and profile handling.
- Developed data service in OrganizationChartDataService.ts to fetch organization data from SharePoint User Profile Service.
- Defined types for user profiles and organization nodes in OrganizationChartTypes.ts.
- Created web part manifest for OrganizationChartWebPart.
- Built the main web part component with rendering logic and property pane configuration in OrganizationChartWebPart.ts.
- Developed React components for displaying the organization chart.
- Implemented styling for the organization chart in OrganizationChart.module.scss.
- Added localization support with English and German strings.
- Created unit tests for core functionalities in OrganizationChartCore.test.ts.
- Set up TypeScript and TSLint configurations for the project.
2026-08-24 13:48:32 +02:00

31 lines
1.7 KiB
TypeScript

import {
normalizeAccount,
normalizeCacheMinutes,
normalizeMaxDepth,
normalizeMaxPeople,
normalizeProfileUrl,
profileProperty,
uniqueAccounts
} from '../src/webparts/organizationChart/OrganizationChartCore';
import { IUserProfileProperty } from '../src/webparts/organizationChart/OrganizationChartTypes';
declare const console: { log(message: string): void };
let passed: number = 0;
function assert(condition: boolean, message: string): void { if (!condition) { throw new Error(message); } passed++; }
const properties: IUserProfileProperty[] = [
{ Key: 'Department', Value: 'IT' },
{ Key: 'Manager', Value: 'CONTOSO\\manager' }
];
assert(normalizeAccount(' CONTOSO\\user ') === 'CONTOSO\\user', 'Account must be trimmed.');
assert(profileProperty(properties, 'department') === 'IT', 'Profile-property lookup must ignore casing.');
assert(profileProperty(properties, 'Office') === '', 'Missing profile properties must be empty.');
assert(uniqueAccounts(['A', 'a', 'B', 'C'], 'B', 10).join(',') === 'A,C', 'Accounts must be unique and excludable.');
assert(normalizeMaxDepth(0) === 6 && normalizeMaxDepth(20) === 10, 'Tree depth must be constrained.');
assert(normalizeMaxPeople(1) === 10 && normalizeMaxPeople(900) === 500, 'Person count must be constrained.');
assert(normalizeCacheMinutes(-1) === 0 && normalizeCacheMinutes(300) === 120, 'Cache duration must be constrained.');
assert(normalizeProfileUrl('javascript:alert(1)', 'http://portal') === '', 'Unsafe profile URLs must be rejected.');
assert(normalizeProfileUrl('/my/person.aspx', 'http://portal') === '/my/person.aspx', 'Server-relative URLs must be retained.');
console.log('Organization chart core tests passed: ' + passed);