70 lines
2.6 KiB
TypeScript
70 lines
2.6 KiB
TypeScript
import { describe, it } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import {
|
|
noteAccessWhere,
|
|
normalizeDataVisibility,
|
|
ownerWhere,
|
|
parseVisibilityScopes,
|
|
resolveOwnerId,
|
|
scopedOwnerIds,
|
|
seesAllRecords,
|
|
} from '../src/common/record-scope';
|
|
|
|
const sales = { userId: 'u1', role: 'sales' };
|
|
|
|
describe('سطح دسترسی به پروندهها', () => {
|
|
it('مدیر و مالک همه را میبینند', () => {
|
|
assert.ok(seesAllRecords({ role: 'owner' }));
|
|
assert.ok(seesAllRecords({ role: 'admin' }));
|
|
assert.deepEqual(ownerWhere({ userId: 'a', role: 'admin' }), {});
|
|
});
|
|
|
|
it('کارشناس فروش فقط پروندههای خودش را میبیند', () => {
|
|
assert.ok(!seesAllRecords(sales));
|
|
assert.deepEqual(scopedOwnerIds(sales), ['u1']);
|
|
assert.deepEqual(ownerWhere(sales), { ownerId: 'u1' });
|
|
});
|
|
|
|
it('دید تیمی', () => {
|
|
const actor = { ...sales, dataVisibility: 'team' as const, visibleUserIds: ['u1', 'u2', 'u2'] };
|
|
assert.deepEqual(ownerWhere(actor), { ownerId: { in: ['u1', 'u2'] } });
|
|
});
|
|
|
|
it('دید سازمانی یا visibleUserIds=null یعنی همه', () => {
|
|
assert.deepEqual(ownerWhere({ ...sales, dataVisibility: 'org' as const }), {});
|
|
assert.deepEqual(ownerWhere({ ...sales, visibleUserIds: null }), {});
|
|
});
|
|
|
|
it('سطح دید تفکیکی هر بخش بر پیشفرض اولویت دارد', () => {
|
|
const actor = {
|
|
...sales,
|
|
dataVisibility: 'org' as const,
|
|
scopes: { finance: { dataVisibility: 'own' as const, visibleUserIds: ['u1'] } },
|
|
};
|
|
assert.deepEqual(ownerWhere(actor, 'contacts'), {});
|
|
assert.deepEqual(ownerWhere(actor, 'finance'), { ownerId: 'u1' });
|
|
});
|
|
|
|
it('یادداشت شخصی فقط برای نویسنده', () => {
|
|
const where = noteAccessWhere({ userId: 'a', role: 'admin' });
|
|
assert.deepEqual(where, {
|
|
OR: [
|
|
{ visibility: { not: 'personal' } },
|
|
{ visibility: 'personal', authorId: 'a' },
|
|
],
|
|
});
|
|
});
|
|
|
|
it('فقط مدیر میتواند مالک را عوض کند', () => {
|
|
assert.equal(resolveOwnerId(sales, 'u9'), 'u1');
|
|
assert.equal(resolveOwnerId({ userId: 'a', role: 'admin' }, ' u9 '), 'u9');
|
|
assert.equal(resolveOwnerId({ userId: 'a', role: 'admin' }, ''), 'a');
|
|
});
|
|
|
|
it('پارس تنظیمات دید', () => {
|
|
assert.deepEqual(parseVisibilityScopes({ contacts: 'team', finance: 'bad' }), { contacts: 'team' });
|
|
assert.deepEqual(parseVisibilityScopes(null), {});
|
|
assert.equal(normalizeDataVisibility('weird'), 'own');
|
|
});
|
|
});
|