admin) User management admin page (#35)
All checks were successful
Build and Push Image / docker-build-and-push (push) Successful in 2m20s
All checks were successful
Build and Push Image / docker-build-and-push (push) Successful in 2m20s
Reviewed-on: #35 Reviewed-by: shaun <shaun@campbellwireless.net> Co-authored-by: AI Agent <ai-agent@campbellwireless.net> Co-committed-by: AI Agent <ai-agent@campbellwireless.net>
This commit was merged in pull request #35.
This commit is contained in:
102
src/lib/server/users.test.ts
Normal file
102
src/lib/server/users.test.ts
Normal file
@@ -0,0 +1,102 @@
|
||||
import { beforeEach, afterEach, describe, expect, it } from 'vitest';
|
||||
import { setupTestDb } from '../../tests/helpers.js';
|
||||
import type { Database } from './db/types.js';
|
||||
import {
|
||||
deleteUser,
|
||||
listUsers,
|
||||
updateUser,
|
||||
upsertUserFromAuth,
|
||||
upsertUserProfile
|
||||
} from './users.js';
|
||||
|
||||
let database: Database;
|
||||
beforeEach(() => {
|
||||
database = setupTestDb();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
database.close();
|
||||
});
|
||||
|
||||
describe('upsertUserFromAuth', () => {
|
||||
it('creates a new user with profile data', () => {
|
||||
const created = upsertUserFromAuth({
|
||||
id: 'u1',
|
||||
username: 'jdoe',
|
||||
fullName: 'Jane Doe',
|
||||
email: 'jane@example.com',
|
||||
authSource: 'OIDC - Synology'
|
||||
});
|
||||
expect(created.id).toBe('u1');
|
||||
expect(created.username).toBe('jdoe');
|
||||
expect(created.full_name).toBe('Jane Doe');
|
||||
expect(created.email).toBe('jane@example.com');
|
||||
expect(created.auth_source).toBe('OIDC - Synology');
|
||||
expect(listUsers()).toHaveLength(1);
|
||||
});
|
||||
|
||||
it('updates existing users with new auth data', () => {
|
||||
upsertUserFromAuth({
|
||||
id: 'u1',
|
||||
username: 'jdoe',
|
||||
fullName: 'Jane Doe',
|
||||
email: 'jane@example.com',
|
||||
authSource: 'OIDC - Synology'
|
||||
});
|
||||
const updated = upsertUserFromAuth({
|
||||
id: 'u1',
|
||||
username: 'janed',
|
||||
email: 'jane.doe@example.com'
|
||||
});
|
||||
expect(updated.username).toBe('janed');
|
||||
expect(updated.email).toBe('jane.doe@example.com');
|
||||
});
|
||||
});
|
||||
|
||||
describe('upsertUserProfile', () => {
|
||||
it('creates a user from profile details', () => {
|
||||
const created = upsertUserProfile('u2', 'Sam Sample', 'sam@example.com');
|
||||
expect(created.id).toBe('u2');
|
||||
expect(created.full_name).toBe('Sam Sample');
|
||||
expect(created.email).toBe('sam@example.com');
|
||||
});
|
||||
});
|
||||
|
||||
describe('updateUser', () => {
|
||||
it('updates user fields and syncs self profile when present', () => {
|
||||
upsertUserFromAuth({
|
||||
id: 'u3',
|
||||
username: 'sarah',
|
||||
fullName: 'Sarah Lee',
|
||||
email: 'sarah@example.com'
|
||||
});
|
||||
database.run(
|
||||
`INSERT INTO people (id, user_id, first_name, last_name, email, is_self)
|
||||
VALUES (?, ?, ?, ?, ?, 1)`,
|
||||
['p1', 'u3', 'Sarah', 'Lee', 'sarah@example.com']
|
||||
);
|
||||
|
||||
updateUser({ id: 'u3', username: 'slee', fullName: 'Sarah Smith', email: 'ss@example.com' });
|
||||
|
||||
const user = listUsers().find((item) => item.id === 'u3');
|
||||
expect(user?.username).toBe('slee');
|
||||
expect(user?.full_name).toBe('Sarah Smith');
|
||||
expect(user?.email).toBe('ss@example.com');
|
||||
|
||||
const profile = database.get<{ first_name: string; last_name: string; email: string | null }>(
|
||||
'SELECT first_name, last_name, email FROM people WHERE user_id = ? AND is_self = 1',
|
||||
['u3']
|
||||
);
|
||||
expect(profile?.first_name).toBe('Sarah');
|
||||
expect(profile?.last_name).toBe('Smith');
|
||||
expect(profile?.email).toBe('ss@example.com');
|
||||
});
|
||||
});
|
||||
|
||||
describe('deleteUser', () => {
|
||||
it('removes the user record', () => {
|
||||
upsertUserFromAuth({ id: 'u4', username: 'delete-me', fullName: 'Delete Me' });
|
||||
deleteUser('u4');
|
||||
expect(listUsers().find((item) => item.id === 'u4')).toBeUndefined();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user