feat: Add proxying support for images (#2427)

- Closes #2418
This commit is contained in:
Dermot Duffy
2026-06-30 17:45:12 -07:00
committed by dermotduffy
parent 9384785d37
commit 1cd5520154
51 changed files with 2404 additions and 687 deletions
@@ -1,7 +1,7 @@
import { format } from 'date-fns';
import { afterEach, describe, expect, it, vi } from 'vitest';
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import { ViewItemManager } from '../../../src/card-controller/view/item-manager';
import { homeAssistantSignPath } from '../../../src/ha/sign-path.js';
import { homeAssistantGetSignedURLIfNecessary } from '../../../src/ha/sign-path.js';
import { downloadURL } from '../../../src/utils/download';
import { ViewFolder, ViewMediaType } from '../../../src/view/item';
import {
@@ -57,6 +57,12 @@ describe('ViewItemManager', () => {
});
describe('download', () => {
beforeEach(() => {
vi.mocked(homeAssistantGetSignedURLIfNecessary).mockImplementation(
async (_hass, endpoint) => endpoint.endpoint,
);
});
afterEach(() => {
vi.restoreAllMocks();
});
@@ -85,7 +91,7 @@ describe('ViewItemManager', () => {
});
const signError = new Error('sign-error');
vi.mocked(homeAssistantSignPath).mockRejectedValue(signError);
vi.mocked(homeAssistantGetSignedURLIfNecessary).mockRejectedValue(signError);
expect(await manager.download(item)).toBe(false);
expect(api.getMessageManager().setErrorIfHigherPriority).toHaveBeenCalledWith(
@@ -108,7 +114,9 @@ describe('ViewItemManager', () => {
endpoint: 'foo',
});
vi.mocked(homeAssistantSignPath).mockResolvedValue('http://foo/signed-url');
vi.mocked(homeAssistantGetSignedURLIfNecessary).mockResolvedValue(
'http://foo/signed-url',
);
expect(await manager.download(item)).toBe(true);
expect(downloadURL).toBeCalledWith(
@@ -129,7 +137,9 @@ describe('ViewItemManager', () => {
endpoint: 'foo',
});
vi.mocked(homeAssistantSignPath).mockResolvedValue('http://foo/signed-url');
vi.mocked(homeAssistantGetSignedURLIfNecessary).mockResolvedValue(
'http://foo/signed-url',
);
expect(await manager.download(item)).toBe(true);
expect(downloadURL).toBeCalledWith('http://foo/signed-url', 'media_id.mp4');
@@ -147,8 +157,6 @@ describe('ViewItemManager', () => {
endpoint: 'foo',
});
expect(homeAssistantSignPath).not.toBeCalled();
expect(await manager.download(item)).toBe(true);
expect(downloadURL).toBeCalledWith('foo', 'camera-office_id.mp4');
});