<!DOCTYPE html>
<meta charset="utf-8">
<title>WebAuthn navigator.credentials.get() extensions Tests</title>
<meta name="timeout" content="long">
<link rel="author" title="Adam Powers" href="mailto:adam@fidoalliance.org">
<link rel="help" href="https://w3c.github.io/webauthn/#iface-credential">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src=helpers.js></script>
<body></body>
<script>
standardSetup(function() {
    "use strict";

    var credPromise = createCredential();
    var dummyExtension = {
        foo: true,
        bar: "yup"
    };
    var badExtId = {};
    badExtId[createRandomString(65)] = dummyExtension;

    // bad extension values
    new GetCredentialsTest("options.publicKey.extensions", "hi mom")
        .addCredential(credPromise)
        .runTest("Bad extensions: extensions is string", TypeError);

    // empty extensions
    new GetCredentialsTest("options.publicKey.extensions", null)
        .addCredential(credPromise)
        .runTest("extensions is null");
    new GetCredentialsTest("options.publicKey.extensions", [])
        .addCredential(credPromise)
        .runTest("extensions is empty Array");
    new GetCredentialsTest("options.publicKey.extensions", new ArrayBuffer(0))
        .addCredential(credPromise)
        .runTest("extensions is empty ArrayBuffer");

    // unknown extensions should be ignored
    new GetCredentialsTest("options.publicKey.extensions", {foo: dummyExtension})
        .addCredential(credPromise)
        .runTest("ignored extension");
    new GetCredentialsTest("options.publicKey.extensions", {badExtId: dummyExtension})
        .addCredential(credPromise)
        .runTest("extension ID too long");

    new GetCredentialsTest("options.publicKey.extensions", {credProps: true})
        .addCredential(credPromise)
        .runTest("credProps is only supported at registration", "NotSupportedError");

    new GetCredentialsTest("options.publicKey.extensions", {payment: {isPayment:true}})
        .addCredential(credPromise)
        .runTest("Payment extension is only supported at registration", "NotAllowedError");
});

/* JSHINT */
/* globals standardSetup, GetCredentialsTest, createRandomString, createCredential */
</script>
