73 lines
2.3 KiB
TypeScript
73 lines
2.3 KiB
TypeScript
import { describe, expect, it, vi } from 'vitest';
|
|
|
|
import { resolvedMediaSchema, type ResolvedMedia } from '../../src/ha/types';
|
|
import { homeAssistantWSRequest } from '../../src/ha/ws-request';
|
|
import { createHASS } from '../test-utils';
|
|
|
|
describe('homeAssistantWSRequest', () => {
|
|
const request = {
|
|
type: 'foo',
|
|
};
|
|
const response: ResolvedMedia = {
|
|
url: 'https://example.com/media.mp4',
|
|
mime_type: 'video/mp4',
|
|
};
|
|
|
|
it('should return parsed data on successful call', async () => {
|
|
const hass = createHASS();
|
|
vi.mocked(hass.callWS).mockResolvedValueOnce(response);
|
|
|
|
expect(await homeAssistantWSRequest(hass, resolvedMediaSchema, request)).toEqual(
|
|
response,
|
|
);
|
|
});
|
|
|
|
it('should return parsed data on successful call with passthrough', async () => {
|
|
const hass = createHASS();
|
|
vi.mocked(hass.callWS).mockResolvedValueOnce(JSON.stringify(response));
|
|
|
|
expect(
|
|
await homeAssistantWSRequest(hass, resolvedMediaSchema, request, true),
|
|
).toEqual(response);
|
|
});
|
|
|
|
it('should throw on error', async () => {
|
|
const error = new Error('WS call failed');
|
|
const hass = createHASS();
|
|
vi.mocked(hass.callWS).mockRejectedValueOnce(error);
|
|
|
|
await expect(
|
|
homeAssistantWSRequest(hass, resolvedMediaSchema, request),
|
|
).rejects.toThrow(/Failed to receive response/);
|
|
});
|
|
|
|
it('should throw on empty response', async () => {
|
|
const hass = createHASS();
|
|
vi.mocked(hass.callWS).mockResolvedValueOnce(null);
|
|
|
|
await expect(
|
|
homeAssistantWSRequest(hass, resolvedMediaSchema, request),
|
|
).rejects.toThrow(/Received empty response/);
|
|
});
|
|
|
|
it('should throw error on parse failure', async () => {
|
|
const hass = createHASS();
|
|
vi.mocked(hass.callWS).mockResolvedValueOnce({});
|
|
|
|
await expect(
|
|
homeAssistantWSRequest(hass, resolvedMediaSchema, request),
|
|
).rejects.toThrow(/Received invalid response/);
|
|
});
|
|
|
|
it('should throw on JSON parse failure', async () => {
|
|
const malformedJSONResponse = "{ foo: 'test', bar: 123 "; // Malformed JSON
|
|
|
|
const hass = createHASS();
|
|
vi.mocked(hass.callWS).mockResolvedValueOnce(malformedJSONResponse);
|
|
|
|
await expect(
|
|
homeAssistantWSRequest(hass, resolvedMediaSchema, request, true),
|
|
).rejects.toThrow(/Received invalid response/);
|
|
});
|
|
});
|