70 lines
2.5 KiB
TypeScript
70 lines
2.5 KiB
TypeScript
import { html, stubNetwork } from "../../helpers.ts";
|
|
import { assert, assertEquals, assertFalse } from "@std/assert";
|
|
import { fetchRichContent } from "../../../services/rich-content-service.ts";
|
|
import { soundcloudProvider } from "../../../remote/providers/soundcloud.ts";
|
|
|
|
const embedOf = (url: string) =>
|
|
`https://w.soundcloud.com/player/?url=${
|
|
encodeURIComponent(url)
|
|
}&visual=true&auto_play=false`;
|
|
|
|
Deno.test("soundcloud provider", async () => {
|
|
using _ = stubNetwork(() =>
|
|
html(`<meta property="og:title" content="Track">
|
|
<meta property="og:image" content="https://i1.sndcdn.com/a.jpg">
|
|
<meta name="description" content="Listen to Track">`)
|
|
);
|
|
const sc = await fetchRichContent("https://soundcloud.com/artist/track");
|
|
assertEquals(sc?.type, "soundcloud");
|
|
assertEquals(sc?.siteName, "SoundCloud");
|
|
assertEquals(sc?.title, "Track");
|
|
assertEquals(sc?.description, "Listen to Track");
|
|
assertEquals(sc?.embedUrl, embedOf("https://soundcloud.com/artist/track"));
|
|
});
|
|
|
|
Deno.test("soundcloud provider: a short link embeds the page it leads to", async () => {
|
|
using _ = stubNetwork((url) =>
|
|
url.hostname === "on.soundcloud.com"
|
|
? new Response(null, {
|
|
status: 302,
|
|
headers: {
|
|
location: "https://m.soundcloud.com/artist/track?si=abc&utm_source=x",
|
|
},
|
|
})
|
|
: html(`<meta property="og:title" content="Track">`)
|
|
);
|
|
const sc = await fetchRichContent("https://on.soundcloud.com/AbCd");
|
|
assertEquals(sc?.type, "soundcloud");
|
|
assertEquals(sc?.url, "https://on.soundcloud.com/AbCd");
|
|
assertEquals(sc?.embedUrl, embedOf("https://soundcloud.com/artist/track"));
|
|
});
|
|
|
|
Deno.test("soundcloud provider: the page's og:url names what is embedded", async () => {
|
|
using _ = stubNetwork(() =>
|
|
html(
|
|
`<meta property="og:url" content="https://soundcloud.com/artist/real">`,
|
|
)
|
|
);
|
|
const sc = await fetchRichContent("https://soundcloud.com/artist/real?in=x");
|
|
assertEquals(sc?.embedUrl, embedOf("https://soundcloud.com/artist/real"));
|
|
});
|
|
|
|
Deno.test("soundcloud provider: SoundCloud's hosts only", () => {
|
|
for (
|
|
const url of [
|
|
"https://soundcloud.com/a/t",
|
|
"https://www.soundcloud.com/a/t",
|
|
"https://m.soundcloud.com/a/t",
|
|
"https://on.soundcloud.com/AbCd",
|
|
]
|
|
) {
|
|
assert(soundcloudProvider.matches(url), url);
|
|
}
|
|
assertFalse(
|
|
soundcloudProvider.matches("https://soundcloud.com.evil.example/"),
|
|
);
|
|
assertFalse(
|
|
soundcloudProvider.matches("https://api.soundcloud.com/tracks/1"),
|
|
);
|
|
});
|