/**
 * Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/
 *
 * All images in schema_15_profile.zip are from https://github.com/mdn/sw-test/
 * and are CC licensed by https://www.flickr.com/photos/legofenris/.
 */

function run_test() {
  do_test_pending();
  create_test_profile("schema_15_profile.zip");

  var cache;
  caches
    .open("xpcshell-test")
    .then(function(c) {
      cache = c;
      ok(cache, "cache exists");
      return cache.keys();
    })
    .then(function(requestList) {
      ok(requestList.length > 0, "should have at least one request in cache");
      requestList.forEach(function(request) {
        ok(request, "each request in list should be non-null");
        ok(
          request.redirect === "follow",
          'request.redirect should default to "follow"'
        );
        ok(
          request.cache === "default",
          'request.cache should have been updated to "default"' + request.cache
        );
        ok(
          request.mode === "navigate",
          'request.mode should have been updated to "navigate"'
        );
        ok(
          request.referrerPolicy === "no-referrer-when-downgrade",
          'request.referrerPolicy should have been updated to "no-referrer-when-downgrade"'
        );
      });
      return Promise.all(
        requestList.map(function(request) {
          return cache.match(request);
        })
      );
    })
    .then(function(responseList) {
      ok(responseList.length > 0, "should have at least one response in cache");
      responseList.forEach(function(response) {
        ok(response, "each response in list should be non-null");
        // reponse.url is a empty string in current test file. It should test for
        // not being a empty string once thet test file is updated.
        ok(
          typeof response.url === "string",
          "each response.url in list should be a string"
        );
        // reponse.redirected may be changed once test file is updated. It should
        // be false since current reponse.url is a empty string.
        ok(
          response.redirected === false,
          "each response.redirected in list should be false"
        );
        Assert.equal(
          response.headers.get("Content-Type"),
          "text/plain;charset=UTF-8",
          "the response should have the correct header"
        );
      });
    })
    .then(function() {
      do_test_finished();
    })
    .catch(function(e) {
      ok(false, "caught exception " + e);
      do_test_finished();
    });
}
