feat: Implement basic general folder support (#2051)

- Related: #1748
This commit is contained in:
Dermot Duffy
2025-05-21 19:59:21 -07:00
committed by GitHub
parent 2eb0d9e35e
commit c6a4c8aea2
350 changed files with 12837 additions and 4509 deletions
@@ -0,0 +1,50 @@
import { describe, expect, it } from 'vitest';
import {
BrowseMediaEventViewMedia,
BrowseMediaViewFolder,
} from '../../../src/ha/browse-media/item';
import { BrowseMediaViewItemFactory } from '../../../src/ha/browse-media/item-factory';
import {
MEDIA_CLASS_IMAGE,
MEDIA_CLASS_VIDEO,
} from '../../../src/ha/browse-media/types';
import { ViewMediaType } from '../../../src/view/item';
import { createBrowseMedia, createFolder } from '../../test-utils';
describe('BrowseMediaViewItemFactory', () => {
it('returns null if can_expand is true without options.folder', () => {
const browseMedia = createBrowseMedia({ can_expand: true });
expect(BrowseMediaViewItemFactory.create(browseMedia)).toBeNull();
});
it('returns a folder if can_expand is true with options.folder', () => {
const browseMedia = createBrowseMedia({ can_expand: true });
const result = BrowseMediaViewItemFactory.create(browseMedia, {
folder: createFolder(),
});
expect(result).toBeInstanceOf(BrowseMediaViewFolder);
});
it('returns BrowseMediaEventViewMedia for MEDIA_CLASS_VIDEO', () => {
const browseMedia = createBrowseMedia({ media_class: MEDIA_CLASS_VIDEO });
const result = BrowseMediaViewItemFactory.create(browseMedia);
expect(result).toBeInstanceOf(BrowseMediaEventViewMedia);
if (result instanceof BrowseMediaEventViewMedia) {
expect(result?.getMediaType()).toBe(ViewMediaType.Clip);
}
});
it('returns BrowseMediaEventViewMedia for MEDIA_CLASS_VIDEO', () => {
const browseMedia = createBrowseMedia({ media_class: MEDIA_CLASS_IMAGE });
const result = BrowseMediaViewItemFactory.create(browseMedia);
expect(result).toBeInstanceOf(BrowseMediaEventViewMedia);
if (result instanceof BrowseMediaEventViewMedia) {
expect(result?.getMediaType()).toBe(ViewMediaType.Snapshot);
}
});
it('returns null for unknown media_class', () => {
const browseMedia = createBrowseMedia({ media_class: 'UNKNOWN' });
expect(BrowseMediaViewItemFactory.create(browseMedia)).toBeNull();
});
});