search.spec.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import { randomBytes } from "crypto";
  2. import { XMLParser } from "fast-xml-parser";
  3. import { checkSongProps, sendReq } from "./hooks";
  4. describe("Search routes", () => {
  5. //#region /search/top
  6. it("Top search yields expected props", async () => {
  7. const { res, status } = await sendReq("/search/top?q=Lil Nas X - LIGHT AGAIN!");
  8. const body = await res.json();
  9. expect(status).toBe(200);
  10. expect(body?.error).toEqual(false);
  11. expect(body?.matches).toEqual(1);
  12. checkSongProps(body);
  13. });
  14. //#region /search/top xml
  15. it("Top search with format=xml yields valid XML", async () => {
  16. const { res, status } = await sendReq("/search/top?format=xml&q=Lil Nas X - LIGHT AGAIN!");
  17. const body = await res.text();
  18. expect(status).toBe(200);
  19. const parsed = new XMLParser().parse(body);
  20. expect(typeof parsed?.data).toBe("object");
  21. expect(parsed?.data?.error).toEqual(false);
  22. expect(parsed?.data?.matches).toEqual(1);
  23. checkSongProps(parsed?.data);
  24. });
  25. //#region /search
  26. it("Regular search yields <=10 results", async () => {
  27. const { res, status } = await sendReq("/search?q=Lil Nas X");
  28. const body = await res.json();
  29. expect(status).toBe(200);
  30. expect(body?.error).toEqual(false);
  31. expect(body?.matches).toBeLessThanOrEqual(10);
  32. checkSongProps(body?.top);
  33. expect(Array.isArray(body?.all)).toBe(true);
  34. body?.all?.forEach((hit: unknown) => checkSongProps(hit));
  35. expect(body?.all?.length).toEqual(body?.matches ?? -1);
  36. });
  37. //#region inv /search
  38. it("Invalid search yields error", async () => {
  39. const randText = randomBytes(32).toString("hex");
  40. const { res, status } = await sendReq(`/search?q=${randText}`);
  41. const body = await res.json();
  42. expect(status).toBe(400);
  43. expect(body?.error).toEqual(true);
  44. expect(body?.matches).toEqual(0);
  45. expect(body?.message).toBeDefined();
  46. });
  47. });