Files
immich/server/test/medium/specs/exif/audio-video.spec.ts
T
Mert 01712cf0a7 fix(server): av typing (#28223)
* fix av typing, move fixtures to stub file

* fix tests
2026-05-04 09:04:29 -04:00

43 lines
1.8 KiB
TypeScript

import { Kysely } from 'kysely';
import { resolve } from 'node:path';
import { AssetType } from 'src/enum';
import { DB } from 'src/schema';
import { withAudioStream, withVideoFormat, withVideoPackets, withVideoStream } from 'src/utils/database';
import { eiffelTower, train, waterfall } from 'test/fixtures/media.stub';
import { ExifTestContext, testAssetsDir } from 'test/medium.factory';
import { getKyselyDB } from 'test/utils';
let database: Kysely<DB>;
beforeAll(async () => {
database = await getKyselyDB();
});
const fixtures = [eiffelTower, waterfall, train];
describe('video metadata extraction', () => {
it.each(fixtures)('$originalPath', async ({ originalPath: path, videoStream, audioStream, packets, format }) => {
const ctx = new ExifTestContext(database);
const { user } = await ctx.newUser();
const originalPath = resolve(testAssetsDir, 'videos', path);
const { asset } = await ctx.newAsset({ ownerId: user.id, originalPath, type: AssetType.Video });
await ctx.sut.handleMetadataExtraction({ id: asset.id });
const result = await database
.selectFrom('asset')
.innerJoin('asset_exif', 'asset.id', 'asset_exif.assetId')
.innerJoin('asset_video', 'asset.id', 'asset_video.assetId')
.innerJoin('asset_keyframe', 'asset.id', 'asset_keyframe.assetId')
.leftJoin('asset_audio', 'asset.id', 'asset_audio.assetId')
.where('asset.id', '=', asset.id)
.select((eb) => withVideoStream(eb).$notNull().as('videoStream'))
.select((eb) => withAudioStream(eb).as('audioStream'))
.select((eb) => withVideoPackets(eb).$notNull().as('packets'))
.select((eb) => withVideoFormat(eb).$notNull().as('format'))
.executeTakeFirst();
expect(result).toEqual({ videoStream, audioStream, packets, format });
});
});