<!DOCTYPE html>
<meta charset="utf-8">
<title>WebAuthn navigator.credentials.get() user verification Tests</title>
<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=helpers.js></script>
<body></body>
<script>
standardSetup(function() {
    "use strict";

    var credPromise = createCredential();

    // authenticatorSelection bad userVerification values
    new GetCredentialsTest("options.publicKey.userVerification", "")
        .addCredential(credPromise)
        .runTest("Bad userVerification: empty string", new TypeError());
    new GetCredentialsTest("options.publicKey.userVerification", {})
        .addCredential(credPromise)
        .runTest("Bad userVerification: empty object", new TypeError());
    new GetCredentialsTest("options.publicKey.userVerification", "requiredshirtshoestshirt")
        .addCredential(credPromise)
        .runTest("Bad userVerification: bad value", new TypeError());
    new GetCredentialsTest("options.publicKey.userVerification", null)
        .addCredential(credPromise)
        .runTest("Bad userVerification: null", new TypeError());
    // XXX: assumes this is a mock authenticator the properly reports that it is not doing userVerfication
    new GetCredentialsTest("options.publicKey.userVerification", "required")
        .addCredential(credPromise)
        .runTest("Bad userVerification: \"required\"", "NotAllowedError");
});

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