feat: Add profile images

This commit is contained in:
2026-04-17 03:05:47 +02:00
parent 35b616fb77
commit 17738ec484
49 changed files with 2622 additions and 89 deletions

View File

@@ -87,6 +87,61 @@ describe('users reducer - status', () => {
});
});
describe('avatar updates', () => {
it('updates current user avatar metadata', () => {
const state = usersReducer(baseState, UsersActions.updateCurrentUserAvatar({
avatar: {
avatarUrl: 'data:image/webp;base64,abc123',
avatarHash: 'hash-1',
avatarMime: 'image/webp',
avatarUpdatedAt: 1234
}
}));
expect(state.entities['user-1']?.avatarUrl).toBe('data:image/webp;base64,abc123');
expect(state.entities['user-1']?.avatarHash).toBe('hash-1');
expect(state.entities['user-1']?.avatarMime).toBe('image/webp');
expect(state.entities['user-1']?.avatarUpdatedAt).toBe(1234);
});
it('keeps newer remote avatar when stale update arrives later', () => {
const withRemote = usersReducer(
baseState,
UsersActions.upsertRemoteUserAvatar({
user: {
id: 'remote-1',
oderId: 'oder-remote-1',
username: 'remote',
displayName: 'Remote',
avatarUrl: 'data:image/webp;base64,newer',
avatarHash: 'hash-newer',
avatarMime: 'image/webp',
avatarUpdatedAt: 200
}
})
);
const state = usersReducer(
withRemote,
UsersActions.upsertRemoteUserAvatar({
user: {
id: 'remote-1',
oderId: 'oder-remote-1',
username: 'remote',
displayName: 'Remote',
avatarUrl: 'data:image/webp;base64,older',
avatarHash: 'hash-older',
avatarMime: 'image/webp',
avatarUpdatedAt: 100
}
})
);
expect(state.entities['remote-1']?.avatarUrl).toBe('data:image/webp;base64,newer');
expect(state.entities['remote-1']?.avatarHash).toBe('hash-newer');
expect(state.entities['remote-1']?.avatarUpdatedAt).toBe(200);
});
});
describe('presence-aware user with status', () => {
it('preserves incoming status on user join', () => {
const user = createUser({ id: 'away-user', oderId: 'oder-away', status: 'away', presenceServerIds: ['server-1'] });