SnowLuma v2.4.2 source snapshot
Dev Build / cleanup (push) Waiting to run
Dev Build / typecheck (push) Waiting to run
Publish MCP to npm / Build, test, and publish MCP (push) Waiting to run
Publish SDK to npm / Build, test, and publish SDK (push) Waiting to run
Sync action catalog to docs / sync (push) Waiting to run
Publish UI to npm / Build and publish UI (push) Waiting to run
Build and Release / preflight (push) Waiting to run
Dev Build / cleanup (push) Waiting to run
Dev Build / typecheck (push) Waiting to run
Publish MCP to npm / Build, test, and publish MCP (push) Waiting to run
Publish SDK to npm / Build, test, and publish SDK (push) Waiting to run
Sync action catalog to docs / sync (push) Waiting to run
Publish UI to npm / Build and publish UI (push) Waiting to run
Build and Release / preflight (push) Waiting to run
This commit is contained in:
commit
fa9c73363d
1367 files changed
+355735
No files matched your search
@@ -0,0 +1,93 @@
|
||||
import { describe, expect, it, vi } from 'vitest';
|
||||
import { protobuf_decode, protobuf_encode } from '@snowluma/proton';
|
||||
import type { OidbBase } from '@snowluma/proto-defs/oidb';
|
||||
import type {
|
||||
EncodableMediaMsgInfo,
|
||||
HighwayMsgInfoBody,
|
||||
NTV2UploadRichMediaResp,
|
||||
} from '@snowluma/proto-defs/highway';
|
||||
import type { BridgeContext } from '../../src/bridge-context';
|
||||
import type { MessageElement } from '../../src/events';
|
||||
import { uploadImageMsgInfo } from '../../src/highway/image-upload';
|
||||
|
||||
const webp = 'base64://UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA';
|
||||
|
||||
function bridge(body: HighwayMsgInfoBody): BridgeContext {
|
||||
return {
|
||||
identity: { uin: '10001' },
|
||||
sendRawPacket: vi.fn(async () => ({
|
||||
success: true,
|
||||
gotResponse: true,
|
||||
errorCode: 0,
|
||||
responseData: protobuf_encode<OidbBase<NTV2UploadRichMediaResp>>({
|
||||
body: { upload: { msgInfo: { msgInfoBody: [body] } } },
|
||||
}),
|
||||
})),
|
||||
} as unknown as BridgeContext;
|
||||
}
|
||||
|
||||
describe('uploaded image download references (#659)', () => {
|
||||
it.each([false, true])(
|
||||
'retains the returned host, original parameters and WebP filename (group=%s)',
|
||||
async (isGroup) => {
|
||||
const picture = {
|
||||
domain: 'image.example',
|
||||
urlPath: '/download?fileid=server-resource',
|
||||
ext: { originalParameter: '&spec=0', thumbParameter: '&spec=small' },
|
||||
};
|
||||
const element: MessageElement = { type: 'image', url: webp };
|
||||
const encoded = await uploadImageMsgInfo(
|
||||
bridge({ index: { fileUuid: 'resource' }, picture }),
|
||||
isGroup,
|
||||
isGroup ? 20002 : 'u_peer',
|
||||
element,
|
||||
);
|
||||
expect(element).toMatchObject({
|
||||
imageUrl: 'https://image.example/download?fileid=server-resource&spec=0',
|
||||
picFormat: 1002,
|
||||
width: 1,
|
||||
height: 1,
|
||||
});
|
||||
expect(element.fileName).toBe(`${element.md5Hex}.webp`);
|
||||
expect(element.fileId).toBe(element.fileName);
|
||||
expect(
|
||||
protobuf_decode<EncodableMediaMsgInfo>(encoded).msgInfoBody?.[0]?.picture,
|
||||
).toMatchObject(picture);
|
||||
},
|
||||
);
|
||||
|
||||
it.each([false, true])(
|
||||
'uses an encoded upload resource id when the server omits the URL (group=%s)',
|
||||
async (isGroup) => {
|
||||
const element: MessageElement = { type: 'image', url: webp };
|
||||
await uploadImageMsgInfo(
|
||||
bridge({ index: { fileUuid: 'resource/+=' } }),
|
||||
isGroup,
|
||||
isGroup ? 20002 : 'u_peer',
|
||||
element,
|
||||
);
|
||||
expect(element.imageUrl).toBe(
|
||||
`https://multimedia.nt.qq.com.cn/download?appid=${isGroup ? 1407 : 1406}&fileid=resource%2F%2B%3D`,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
it('uses the standard image host when a wire response omits the domain', async () => {
|
||||
const element: MessageElement = { type: 'image', url: webp };
|
||||
await uploadImageMsgInfo(
|
||||
bridge({ picture: { urlPath: '/download?fileid=resource' } }),
|
||||
false,
|
||||
'u_peer',
|
||||
element,
|
||||
);
|
||||
expect(element.imageUrl).toBe('https://multimedia.nt.qq.com.cn/download?fileid=resource');
|
||||
});
|
||||
|
||||
it('rejects an unusable upload receipt before publishing incomplete send metadata', async () => {
|
||||
const element: MessageElement = { type: 'image', url: webp };
|
||||
await expect(uploadImageMsgInfo(bridge({}), false, 'u_peer', element)).rejects.toThrow(
|
||||
'missing a download reference',
|
||||
);
|
||||
expect(element).toEqual({ type: 'image', url: webp });
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user