A music player that connects to your cloud/distributed storage.
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

test: search processor

+77 -2
+10 -2
src/testing/sample/tracks.js
··· 5 5 /** 6 6 * @type {Track} 7 7 */ 8 - const trackA = { 8 + export const trackA = { 9 9 $type: "sh.diffuse.output.tracks", 10 10 id: "sample-a", 11 11 uri: "http://example.com/audio-a.mp3", 12 + tags: { 13 + artist: "Artist", 14 + title: "Sample", 15 + }, 12 16 }; 13 17 14 18 /** 15 19 * @type {Track} 16 20 */ 17 - const trackB = { 21 + export const trackB = { 18 22 $type: "sh.diffuse.output.tracks", 19 23 id: "sample-b", 20 24 uri: "http://example.com/audio-b.mp3", 25 + tags: { 26 + album: "B-side", 27 + title: "Unknown", 28 + }, 21 29 }; 22 30 23 31 export const tracks = [
+67
tests/components/processor/search/test.ts
··· 1 + import { describe, it } from "@std/testing/bdd"; 2 + import { expect } from "@std/expect"; 3 + 4 + import { testWeb } from "@tests/common/index.ts"; 5 + import { trackA, trackB } from "@src/testing/sample/tracks.js"; 6 + 7 + describe("components/processor/search", () => { 8 + it("finds tracks by album", async () => { 9 + const results = await testWeb(async () => { 10 + const SearchProcessor = await import( 11 + "@components/processor/search/element.js" 12 + ); 13 + const processor = new SearchProcessor.CLASS(); 14 + 15 + document.body.append(processor); 16 + 17 + // Add sample tracks to the supply first 18 + const { tracks } = await import("@src/testing/sample/tracks.js"); 19 + await processor.supply({ tracks }); 20 + 21 + // Search for a specific term 22 + return processor.search({ term: tracks[1]?.tags?.album }); 23 + }); 24 + 25 + expect(results[0]?.id).toBe(trackB.id); 26 + }); 27 + 28 + it("finds tracks by artist", async () => { 29 + const results = await testWeb(async () => { 30 + const SearchProcessor = await import( 31 + "@components/processor/search/element.js" 32 + ); 33 + const processor = new SearchProcessor.CLASS(); 34 + 35 + document.body.append(processor); 36 + 37 + // Add sample tracks to the supply first 38 + const { tracks } = await import("@src/testing/sample/tracks.js"); 39 + await processor.supply({ tracks }); 40 + 41 + // Search for a specific term 42 + return processor.search({ term: tracks[0]?.tags?.artist }); 43 + }); 44 + 45 + expect(results[0]?.id).toBe(trackA.id); 46 + }); 47 + 48 + it("finds tracks by title", async () => { 49 + const results = await testWeb(async () => { 50 + const SearchProcessor = await import( 51 + "@components/processor/search/element.js" 52 + ); 53 + const processor = new SearchProcessor.CLASS(); 54 + 55 + document.body.append(processor); 56 + 57 + // Add sample tracks to the supply first 58 + const { tracks } = await import("@src/testing/sample/tracks.js"); 59 + await processor.supply({ tracks }); 60 + 61 + // Search for a specific term 62 + return processor.search({ term: tracks[1]?.tags?.title }); 63 + }); 64 + 65 + expect(results[0]?.id).toBe(trackB.id); 66 + }); 67 + });