test(dm): lock Deleted-User name resolution + updateUserEverywhere DM patch (C1)

This commit is contained in:
Jannis Braun
2026-07-02 16:02:44 +02:00
parent a380927e72
commit 2a0574ee6c
2 changed files with 71 additions and 0 deletions
@@ -0,0 +1,58 @@
import { describe, it, expect, beforeEach, vi } from 'vitest';
vi.mock('../audio/AudioManager', () => ({
AudioManager: {
getInstance: vi.fn().mockReturnValue({
setOutputDevice: vi.fn(),
setVolume: vi.fn(),
}),
},
}));
vi.mock('./instanceStore', () => ({
useInstanceStore: Object.assign(
(selector: (s: unknown) => unknown) => selector({ instances: [], _autoConnectDone: true }),
{
getState: () => ({ instances: [], _autoConnectDone: true }),
setState: vi.fn(),
subscribe: vi.fn(),
}
),
}));
vi.mock('./authStore', () => ({
useAuthStore: Object.assign(
(selector: (s: unknown) => unknown) => selector({ user: null, token: null }),
{
getState: () => ({ user: null, token: null }),
setState: vi.fn(),
subscribe: vi.fn(),
}
),
}));
import { useSpaceStore } from './spaceStore';
import type { DmChannel, User } from '@backspace/shared';
describe('updateUserEverywhere → DM member patch (drives the live Deleted-User update)', () => {
beforeEach(() => {
useSpaceStore.setState({
dmChannels: [{
id: 'd1', ownerId: null, createdAt: 0,
members: [
{ id: 'me', username: 'me' } as User,
{ id: 'partner', username: 'partner', displayName: 'Partner', isDeleted: false } as User,
],
} as DmChannel],
});
});
it('rewrites the matching member to the sanitized deleted user', () => {
const deleted = { id: 'partner', username: 'Deleted User', displayName: null, isDeleted: true } as User;
useSpaceStore.getState().updateUserEverywhere(deleted);
const member = useSpaceStore.getState().dmChannels[0].members.find(m => m.id === 'partner')!;
expect(member.username).toBe('Deleted User');
expect(member.isDeleted).toBe(true);
expect(member.displayName).toBeNull();
});
});
@@ -383,6 +383,19 @@ describe('formatDmInputLabel', () => {
});
});
describe('deleted 1-on-1 partner', () => {
const me: User = { id: 'me', username: 'me', displayName: 'Me' } as User;
const deleted: User = { id: 'x', username: 'Deleted User', displayName: null, isDeleted: true } as User;
const dm = { id: 'd', ownerId: null, members: [me, deleted], createdAt: 0 } as unknown as DmChannel;
it('header shows Deleted User', () => {
expect(formatDmHeaderName(dm, me)).toBe('Deleted User');
});
it('input label points at Deleted User', () => {
expect(formatDmInputLabel(dm, me)).toBe('@Deleted User');
});
});
describe('formatDmSidebarPreview — icon_changed system message', () => {
it('happy path → "<actor> updated the group icon"', () => {
const dm = makeGroupDm({