mirror of
https://github.com/Shik3i/KoalaSync.git
synced 2026-07-26 12:08:15 +00:00
149 lines
6.8 KiB
JavaScript
149 lines
6.8 KiB
JavaScript
import { describe, expect, it, vi } from 'vitest';
|
|
import {
|
|
GOOGLE_DRIVE_PLAYER_ACCESS_REQUIRED,
|
|
GOOGLE_DRIVE_PLAYER_AMBIGUOUS,
|
|
isGoogleDriveUrl,
|
|
resolveMediaScriptTarget,
|
|
selectGoogleDrivePlayerFrame
|
|
} from './media-frame-target.js';
|
|
|
|
const drivePlayerUrl = 'https://youtube.googleapis.com/embed/?enablejsapi=1&origin=https%3A%2F%2Fdrive.google.com';
|
|
|
|
describe('Google Drive media-frame targeting', () => {
|
|
it('recognizes Drive tabs without treating other Google pages as Drive', () => {
|
|
expect(isGoogleDriveUrl('https://drive.google.com/drive/u/1/search?q=mp4')).toBe(true);
|
|
expect(isGoogleDriveUrl('https://docs.google.com/document/d/1/edit')).toBe(false);
|
|
});
|
|
|
|
it('selects the visible frame containing the real video', () => {
|
|
const selected = selectGoogleDrivePlayerFrame([
|
|
{ frameId: 0, result: { href: 'https://drive.google.com/drive/u/1/search?q=mp4', videoCount: 0, videoScore: 0, frameArea: 900000 } },
|
|
{ frameId: 4, result: { href: drivePlayerUrl, videoCount: 1, videoScore: 1900000, frameArea: 900000, parentFrameVisible: true } },
|
|
{ frameId: 5, result: { href: drivePlayerUrl, videoCount: 0, videoScore: 0, frameArea: 0, parentFrameVisible: false } }
|
|
]);
|
|
|
|
expect(selected.frameId).toBe(4);
|
|
});
|
|
|
|
it('never lets a hidden loaded player outrank the visible Drive player', () => {
|
|
const selected = selectGoogleDrivePlayerFrame([
|
|
{ frameId: 4, result: { href: drivePlayerUrl, videoCount: 1, videoScore: 927600, frameArea: 900000, parentFrameVisible: true, parentFrameArea: 900000 } },
|
|
{ frameId: 5, result: { href: drivePlayerUrl, videoCount: 1, videoScore: 1281600, frameArea: 900000, parentFrameVisible: false, parentFrameArea: 900000 } }
|
|
]);
|
|
|
|
expect(selected.frameId).toBe(4);
|
|
});
|
|
|
|
it('refuses to guess when parent visibility is unavailable', () => {
|
|
const selected = selectGoogleDrivePlayerFrame([
|
|
{ frameId: 4, result: { href: drivePlayerUrl, videoCount: 1, videoScore: 927600, frameArea: 900000 } },
|
|
{ frameId: 5, result: { href: drivePlayerUrl, videoCount: 1, videoScore: 1281600, frameArea: 900000 } }
|
|
]);
|
|
|
|
expect(selected).toBeNull();
|
|
});
|
|
|
|
it('ignores unrelated video frames inside a Drive tab', () => {
|
|
const selected = selectGoogleDrivePlayerFrame([
|
|
{ frameId: 3, result: { href: 'https://example.com/embed', videoCount: 1, videoScore: 3000000, frameArea: 1200000 } },
|
|
{ frameId: 4, result: { href: drivePlayerUrl, videoCount: 1, videoScore: 927600, frameArea: 900000 } }
|
|
]);
|
|
|
|
expect(selected.frameId).toBe(4);
|
|
});
|
|
|
|
it('falls back to the visible Drive player frame while its video is loading', () => {
|
|
const selected = selectGoogleDrivePlayerFrame([
|
|
{ frameId: 4, result: { href: drivePlayerUrl, videoCount: 0, videoScore: 0, frameArea: 900000, parentFrameVisible: true } },
|
|
{ frameId: 5, result: { href: drivePlayerUrl, videoCount: 0, videoScore: 0, frameArea: 0, parentFrameVisible: false } }
|
|
]);
|
|
|
|
expect(selected.frameId).toBe(4);
|
|
});
|
|
|
|
it('reports ambiguity instead of selecting a stale frame after retries', async () => {
|
|
const ambiguousResults = [
|
|
{ frameId: 4, result: { href: drivePlayerUrl, videoCount: 1, videoScore: 927600, frameArea: 900000 } },
|
|
{ frameId: 5, result: { href: drivePlayerUrl, videoCount: 1, videoScore: 1281600, frameArea: 900000 } }
|
|
];
|
|
const executeScript = vi.fn().mockResolvedValue(ambiguousResults);
|
|
|
|
await expect(resolveMediaScriptTarget(
|
|
{ scripting: { executeScript } },
|
|
42,
|
|
'https://drive.google.com/drive/u/1/search?q=mp4',
|
|
{ attempts: 1, retryDelayMs: 0 }
|
|
)).rejects.toMatchObject({ code: GOOGLE_DRIVE_PLAYER_AMBIGUOUS });
|
|
});
|
|
|
|
it('probes all frames and returns only the frame with the Drive video', async () => {
|
|
const executeScript = vi.fn()
|
|
.mockResolvedValueOnce([
|
|
{ frameId: 0, result: { href: 'https://drive.google.com/drive/u/1/search?q=mp4', videoCount: 0, videoScore: 0, frameArea: 900000 } },
|
|
{ frameId: 4, result: { href: drivePlayerUrl, videoCount: 0, videoScore: 0, frameArea: 900000 } }
|
|
])
|
|
.mockResolvedValueOnce([
|
|
{ frameId: 0, result: { href: 'https://drive.google.com/drive/u/1/search?q=mp4', videoCount: 0, videoScore: 0, frameArea: 900000 } },
|
|
{ frameId: 4, result: { href: drivePlayerUrl, videoCount: 1, videoScore: 1900000, frameArea: 900000 } }
|
|
]);
|
|
|
|
await expect(resolveMediaScriptTarget(
|
|
{ scripting: { executeScript } },
|
|
42,
|
|
'https://drive.google.com/drive/u/1/search?q=mp4',
|
|
{ retryDelayMs: 0 }
|
|
)).resolves.toEqual({ tabId: 42, frameIds: [4] });
|
|
|
|
expect(executeScript).toHaveBeenCalledWith({
|
|
target: { tabId: 42, allFrames: true },
|
|
func: expect.any(Function)
|
|
});
|
|
});
|
|
|
|
it('reports missing access when Drive exposes a player iframe but the frame cannot be inspected', async () => {
|
|
const executeScript = vi.fn().mockResolvedValue([
|
|
{
|
|
frameId: 0,
|
|
result: {
|
|
href: 'https://drive.google.com/drive/u/1/search?q=mp4',
|
|
videoCount: 0,
|
|
videoScore: 0,
|
|
frameArea: 900000,
|
|
drivePlayerIframeCount: 1
|
|
}
|
|
}
|
|
]);
|
|
|
|
await expect(resolveMediaScriptTarget(
|
|
{ scripting: { executeScript } },
|
|
42,
|
|
'https://drive.google.com/drive/u/1/search?q=mp4',
|
|
{ attempts: 1, retryDelayMs: 0 }
|
|
)).rejects.toMatchObject({ code: GOOGLE_DRIVE_PLAYER_ACCESS_REQUIRED });
|
|
});
|
|
|
|
it('reports missing access when the all-frame probe itself is rejected', async () => {
|
|
const executeScript = vi.fn()
|
|
.mockRejectedValueOnce(new Error('Cannot access contents of the frame'))
|
|
.mockResolvedValueOnce([
|
|
{
|
|
frameId: 0,
|
|
result: {
|
|
href: 'https://drive.google.com/drive/u/1/search?q=mp4',
|
|
videoCount: 0,
|
|
videoScore: 0,
|
|
frameArea: 900000,
|
|
drivePlayerIframeCount: 1
|
|
}
|
|
}
|
|
]);
|
|
|
|
await expect(resolveMediaScriptTarget(
|
|
{ scripting: { executeScript } },
|
|
42,
|
|
'https://drive.google.com/drive/u/1/search?q=mp4',
|
|
{ attempts: 1, retryDelayMs: 0 }
|
|
)).rejects.toMatchObject({ code: GOOGLE_DRIVE_PLAYER_ACCESS_REQUIRED });
|
|
});
|
|
});
|