<!DOCTYPE html>
<meta charset="utf-8">
<title>JavaScript: the Private Token API Fetch method correctly validates its parameters</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
  'use strict';

  test(() => {
    assert_throws_js(TypeError, () => {
      new Request('https://example.com', {
        privateToken: {
          version: 1,
          operation: "token-request",
          refreshPolicy: "not a member of the refreshPolicy enum",
        }
      });
    });
  }, 'Private Token fetches require valid `refreshPolicy:` values, if provided.');

  test(() => {
    assert_throws_js(TypeError, () => {
      new Request('https://example.com', {
        privateToken: {
          version: 1,
          operation: "send-redemption-record",
          issuers: []
        }
      });
    });
  }, 'Private Token signing operations require at least one issuer URL');

  test(() => {
    assert_throws_js(TypeError, () => {
      new Request('https://example.com', {
        privateToken: {
          version: 1,
          operation: "send-redemption-record",
          issuers: [3]
        }
      });
    });
  }, 'Private Token signing operations require string issuer URLs, if provided.');

  test(() => {
    assert_throws_js(TypeError, () => {
      new Request('https://example.com', {
        privateToken: {
          version: 1,
          operation: "send-redemption-record",
          issuers: ["not a valid URL"]
        }
      });
    });
  }, 'Private Token signing operations require valid issuer URLs, if provided.');

  test(() => {
    assert_throws_js(TypeError, () => {
      new Request('https://example.com', {
        privateToken: {
          version: 1,
          operation: "send-redemption-record",
          issuers: ["http://not-secure.com"]
        }
      });
    });
  }, 'Private Token fetches require secure issuer URLs, if provided.');

  test(() => {
    new Request('https://example.com', {
      privateToken: {
        version: 1,
        operation: "send-redemption-record",
        issuers: ["http://localhost"]
      }
    });
  }, 'Since localhost URLs are potentially trustworthy, setting an issuer to localhost should succeed.');
</script>
