Fix joining deleted call links leaving call active

Co-authored-by: ayumi-signal <143036029+ayumi-signal@users.noreply.github.com>
This commit is contained in:
automated-signal 2024-10-07 19:47:00 -05:00 committed by GitHub
parent b86663b1b7
commit a099c402ff
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 68 additions and 24 deletions

View file

@ -2252,6 +2252,7 @@ const _startCallLinkLobby = async ({
return;
}
let success = false;
try {
dispatch({
type: WAITING_FOR_CALL_LINK_LOBBY,
@ -2342,9 +2343,11 @@ const _startCallLinkLobby = async ({
isConversationTooBigToRing: false,
},
});
success = true;
} catch (error) {
log.error(`${logId}: Failed to start lobby`, Errors.toLogFormat(error));
} finally {
if (!success) {
try {
calling.stopCallingLobby(roomId);
} catch (innerError) {
@ -2359,6 +2362,7 @@ const _startCallLinkLobby = async ({
payload: { conversationId: roomId },
});
}
}
};
function leaveCurrentCallAndStartCallingLobby(
@ -2437,6 +2441,7 @@ function startCallingLobby({
return;
}
let success = false;
try {
dispatch({
type: WAITING_FOR_CALLING_LOBBY,
@ -2473,9 +2478,11 @@ function startCallingLobby({
isConversationTooBigToRing: isConversationTooBigToRing(conversation),
},
});
success = true;
} catch (error) {
log.error(`${logId}: Failed to start lobby`, Errors.toLogFormat(error));
} finally {
if (!success) {
try {
calling.stopCallingLobby(conversationId);
} catch (innerError) {
@ -2490,6 +2497,7 @@ function startCallingLobby({
payload: { conversationId },
});
}
}
};
}

View file

@ -1579,6 +1579,42 @@ describe('calling duck', () => {
});
});
describe('startCallLinkLobby for deleted links', () => {
beforeEach(function (this: Mocha.Context) {
this.callingServiceReadCallLink = this.sandbox
.stub(callingService, 'readCallLink')
.resolves(null);
});
const doAction = async (
payload: StartCallLinkLobbyType
): Promise<{ dispatch: sinon.SinonSpy }> => {
const { startCallLinkLobby } = actions;
const dispatch = sinon.spy();
await startCallLinkLobby(payload)(dispatch, getEmptyRootState, null);
return { dispatch };
};
it('fails', async function (this: Mocha.Context) {
const { roomId, rootKey } = FAKE_CALL_LINK;
const { dispatch } = await doAction({ rootKey });
sinon.assert.calledTwice(dispatch);
sinon.assert.calledWith(dispatch, {
type: 'calling/WAITING_FOR_CALL_LINK_LOBBY',
payload: {
roomId,
},
});
sinon.assert.calledWith(dispatch, {
type: 'calling/CALL_LOBBY_FAILED',
payload: {
conversationId: roomId,
},
});
});
});
describe('peekNotConnectedGroupCall', () => {
const { peekNotConnectedGroupCall } = actions;