Skip to content

Commit 04aeb51

Browse files
committed
test: 회원의 상태 변경 테스트 추가
1 parent b7eb4fc commit 04aeb51

File tree

1 file changed

+103
-0
lines changed

1 file changed

+103
-0
lines changed
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
import { Socket } from 'socket.io-client';
2+
import {
3+
app,
4+
appInit,
5+
connectServer,
6+
createMember,
7+
createProject,
8+
memberFixture,
9+
projectPayload,
10+
getProjectLinkId,
11+
memberFixture2,
12+
joinProject,
13+
} from 'test/setup';
14+
import {
15+
emitJoinLanding,
16+
waitLandingAndStatusMsgAndReturnId,
17+
waitStatusMsg,
18+
} from './ws-common';
19+
20+
describe('WS update member status', () => {
21+
beforeEach(async () => {
22+
await app.close();
23+
await appInit();
24+
await app.listen(3000);
25+
});
26+
27+
it('should return updated member status', async () => {
28+
let socket1;
29+
let socket2;
30+
return new Promise<void>(async (resolve, reject) => {
31+
// 회원1 회원가입 + 프로젝트 생성
32+
const accessToken = (await createMember(memberFixture, app)).accessToken;
33+
const project = await createProject(accessToken, projectPayload, app);
34+
const projectLinkId = await getProjectLinkId(accessToken, project.id);
35+
36+
// 회원2 회원가입 + 프로젝트 참여
37+
const accessToken2 = (await createMember(memberFixture2, app))
38+
.accessToken;
39+
await joinProject(accessToken2, projectLinkId);
40+
41+
socket1 = connectServer(project.id, accessToken);
42+
await emitJoinLanding(socket1);
43+
const memberId = await waitLandingAndStatusMsgAndReturnId(
44+
socket1,
45+
false,
46+
false,
47+
);
48+
49+
socket2 = connectServer(project.id, accessToken2);
50+
51+
await emitJoinLanding(socket2);
52+
const memberId2 = await waitLandingAndStatusMsgAndReturnId(
53+
socket2,
54+
false,
55+
false,
56+
);
57+
await waitStatusMsg(socket1, memberId2);
58+
59+
const status = 'away';
60+
const requestData = {
61+
action: 'update',
62+
content: {
63+
id: memberId,
64+
status,
65+
},
66+
};
67+
68+
socket1.emit('member', requestData);
69+
socket1.on('error', (e) => {
70+
reject(e);
71+
});
72+
73+
await Promise.all([
74+
expectUpdatedMemberStatus(socket1, status, memberId),
75+
expectUpdatedMemberStatus(socket2, status, memberId),
76+
]);
77+
resolve();
78+
}).finally(() => {
79+
socket1.close();
80+
socket2.close();
81+
});
82+
});
83+
84+
const expectUpdatedMemberStatus = (socket, status, memberId) => {
85+
return new Promise<void>((resolve) => {
86+
socket.on('landing', async (data) => {
87+
const { content, action, domain } = data;
88+
if (domain === 'member' && action === 'update') {
89+
expect(domain).toBe('member');
90+
expect(action).toBe('update');
91+
expect(content).toBeDefined();
92+
expect(content.id).toBe(memberId);
93+
expect(content.status).toBe(status);
94+
socket.off('landing');
95+
resolve();
96+
}
97+
});
98+
});
99+
};
100+
101+
//이미 접속중인 경우 update를 하지 않고 무시함
102+
//데이터의 형식이 잘못됨
103+
});

0 commit comments

Comments
 (0)