import { describe, expect, it } from 'vitest';
import {
  cacheDerivative,
  readCachedDerivative,
} from '../../src/app/derived-cache';

describe('application derivative cache', () => {
  it('reuses only an exact source and settings identity', async () => {
    const file = new File(['source'], 'preview-source.mp4', {
      type: 'video/mp4',
      lastModified: 123,
    });
    const settings = {
      maxDurationSeconds: 30,
      maxWidth: 960,
      includeAudio: true,
    };
    const derivative = new Blob(['proxy'], { type: 'video/mp4' });

    await cacheDerivative(
      file,
      'preview-proxy-test',
      'preview-proxy',
      'project-preview-cache-test',
      derivative,
      settings
    );

    expect(
      await readCachedDerivative(file, 'preview-proxy-test', settings)
    ).toEqual(derivative);
    expect(
      await readCachedDerivative(file, 'preview-proxy-test', {
        ...settings,
        maxWidth: 1280,
      })
    ).toBeUndefined();
    expect(
      await readCachedDerivative(
        new File(['other'], file.name, {
          type: file.type,
          lastModified: file.lastModified,
        }),
        'preview-proxy-test',
        settings
      )
    ).toBeUndefined();
  });
});
