forked from wangziqi/gongxue-base
feat: enforce student avatar presets
This commit is contained in:
@@ -9145,15 +9145,62 @@ async function testTenantStudentOperations() {
|
||||
name: 'Integration Bulk Missing Region',
|
||||
regionId: '00000000-0000-0000-0000-ffffffffffff',
|
||||
},
|
||||
{
|
||||
username: 'integration_bulk_student_avatar',
|
||||
phone: '13800000020',
|
||||
name: 'Integration Bulk Student Avatar',
|
||||
regionId: ids.region,
|
||||
avatarUrl: 'https://example.test/not-allowed-student-avatar.png',
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
assert.equal(bulk.total, 2, 'bulk student upsert should report total');
|
||||
assert.equal(bulk.total, 3, 'bulk student upsert should report total');
|
||||
assert.equal(bulk.successCount, 1, 'bulk student upsert should import valid student');
|
||||
assert.equal(bulk.errorCount, 1, 'bulk student upsert should report invalid rows');
|
||||
assert.equal(bulk.errorCount, 2, 'bulk student upsert should report invalid rows');
|
||||
bulkStudentUserId = bulk.items?.find(item => item.status === 'active')?.userId || '';
|
||||
assert.ok(bulkStudentUserId, 'bulk result should include created student id');
|
||||
assert.ok(bulk.errors?.some(item => item.code === 'REGION_NOT_FOUND'), 'bulk result should include row-level validation error');
|
||||
assert.ok(
|
||||
bulk.errors?.some(item => item.code === 'STUDENT_AVATAR_URL_UNSUPPORTED'),
|
||||
'bulk student upsert should reject row-level avatar URLs',
|
||||
);
|
||||
|
||||
const singleAvatarDenied = await request('/api/tenant-admin/students', {
|
||||
userId: TENANT_ADMIN_USER_ID,
|
||||
method: 'PUT',
|
||||
body: {
|
||||
username: 'integration_avatar_denied',
|
||||
phone: '13800000021',
|
||||
name: 'Integration Avatar Denied',
|
||||
regionId: ids.region,
|
||||
avatarUrl: 'https://example.test/direct-student-avatar.png',
|
||||
},
|
||||
expectStatus: 400,
|
||||
});
|
||||
assert.equal(
|
||||
singleAvatarDenied.code,
|
||||
'STUDENT_AVATAR_URL_UNSUPPORTED',
|
||||
'tenant student upsert must reject direct avatar URLs',
|
||||
);
|
||||
|
||||
const primaryRoleDenied = await request('/api/tenant-admin/students', {
|
||||
userId: TENANT_ADMIN_USER_ID,
|
||||
method: 'PUT',
|
||||
body: {
|
||||
username: 'integration_primary_role_denied',
|
||||
phone: '13800000022',
|
||||
name: 'Integration Primary Role Denied',
|
||||
regionId: ids.region,
|
||||
primaryRole: 'platform_admin',
|
||||
},
|
||||
expectStatus: 400,
|
||||
});
|
||||
assert.equal(
|
||||
primaryRoleDenied.code,
|
||||
'STUDENT_PRIMARY_ROLE_UNSUPPORTED',
|
||||
'tenant student upsert must not allow platform primary role changes',
|
||||
);
|
||||
|
||||
const bulkLimitDenied = await request('/api/tenant-admin/students/bulk-upsert', {
|
||||
userId: TENANT_ADMIN_USER_ID,
|
||||
|
||||
Reference in New Issue
Block a user