import { load } from "pretty-text/oneboxer";
import { ajax } from "discourse/lib/ajax";
import { failedCache, localCache } from "pretty-text/oneboxer-cache";
import { stringToHTML } from "helpers/html-helper";

function loadOnebox(element) {
  return load({
    elem: element,
    refresh: false,
    ajax,
    synchronous: true,
    categoryId: 1,
    topicId: 1,
  });
}

QUnit.module("lib:oneboxer");

QUnit.test("load - failed onebox", async (assert) => {
  let element = document.createElement("A");
  element.setAttribute("href", "http://somebadurl.com");

  await loadOnebox(element);

  assert.equal(
    failedCache["http://somebadurl.com"],
    true,
    "stores the url as failed in a cache"
  );
  assert.equal(
    loadOnebox(element),
    undefined,
    "it returns early for a failed cache"
  );
});

QUnit.test("load - successful onebox", async (assert) => {
  const html = `
    <aside class="onebox allowlistedgeneric">
      <header class="source">
          <a href="http://test.com/somepage" target="_blank">test.com</a>
      </header>
      <article class="onebox-body">
      <div class="aspect-image" style="--aspect-ratio:690/362;"><img src="" class="thumbnail"></div>
      <h3><a href="http://test.com/somepage" target="_blank">Test Page</a></h3>
      <p>Yet another collaboration tool</p>
      </article>
      <div class="onebox-metadata"></div>
      <div style="clear: both"></div>
    </aside>
  `;

  let element = document.createElement("A");
  element.setAttribute("href", "http://somegoodurl.com");

  await loadOnebox(element);

  assert.equal(
    localCache["http://somegoodurl.com"].prop("outerHTML"),
    stringToHTML(html).outerHTML,
    "stores the html of the onebox in a local cache"
  );
  assert.equal(
    loadOnebox(element),
    html.trim(),
    "it returns the html from the cache"
  );
});