fix: 修复NapCat刷新会话二维码回填
This commit is contained in:
parent
4e386a5043
commit
b8527866af
@ -421,11 +421,12 @@ export class QqbotNapcatLoginService {
|
||||
session.errorMessage = status.loginError || undefined;
|
||||
if (
|
||||
status.qrcodeurl &&
|
||||
session.mode !== 'refresh' &&
|
||||
(session.mode !== 'refresh' || !session.qrcode) &&
|
||||
!this.toolsService.isNapcatExpiredQrcodeStatus(status)
|
||||
) {
|
||||
const qrcodeChanged = session.qrcode !== status.qrcodeurl;
|
||||
session.qrcode = status.qrcodeurl;
|
||||
session.errorMessage = undefined;
|
||||
if (qrcodeChanged) {
|
||||
this.publishScanResultEvent(
|
||||
session,
|
||||
|
||||
@ -3591,6 +3591,38 @@ describe('QqbotNapcatLoginService', () => {
|
||||
expect(result.errorMessage).toContain('正在重新生成二维码');
|
||||
});
|
||||
|
||||
it('accepts qrcode from login status for refresh session without stored qrcode', async () => {
|
||||
(service as any).sessions.set('session-status-qrcode', {
|
||||
accountId: 'account-1',
|
||||
containerId: 'container-status-qrcode',
|
||||
containerName: 'napcat-status-qrcode',
|
||||
createdAt: Date.now(),
|
||||
errorMessage: 'NapCat 正在重新生成二维码,请稍后',
|
||||
expiresAt: Date.now() + 60_000,
|
||||
id: 'session-status-qrcode',
|
||||
mode: 'refresh',
|
||||
status: 'pending',
|
||||
webuiPort: 6106,
|
||||
});
|
||||
jest
|
||||
.spyOn(service as any, 'getSessionContainer')
|
||||
.mockResolvedValue({ id: 'container-status-qrcode' });
|
||||
jest.spyOn(service as any, 'getLoginStatus').mockResolvedValue({
|
||||
isLogin: false,
|
||||
qrcodeurl: 'fresh-status-qrcode',
|
||||
});
|
||||
const getQrcode = jest
|
||||
.spyOn(service as any, 'getQrcode')
|
||||
.mockRejectedValue(new Error('NapCat 二维码仍未刷新'));
|
||||
|
||||
const result = await service.status('session-status-qrcode');
|
||||
|
||||
expect(result.status).toBe('pending');
|
||||
expect(result.qrcode).toBe('fresh-status-qrcode');
|
||||
expect(result.errorMessage).toBeUndefined();
|
||||
expect(getQrcode).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('normalizes login status to offline when login info reports offline', async () => {
|
||||
jest
|
||||
.spyOn(service as any, 'postNapcat')
|
||||
|
||||
Loading…
Reference in New Issue
Block a user