<!DOCTYPE html>
<meta charset="utf-8">
<title>WebAuthn navigator.credentials.get() user verification 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();

    // authenticatorSelection bad userVerification values
    new GetCredentialsTest("options.publicKey.userVerification", "")
        .addCredential(credPromise)
        .runTest("Bad userVerification: empty string", TypeError);
    new GetCredentialsTest("options.publicKey.userVerification", {})
        .addCredential(credPromise)
        .runTest("Bad userVerification: empty object", TypeError);
    new GetCredentialsTest("options.publicKey.userVerification", "requiredshirtshoestshirt")
        .addCredential(credPromise)
        .runTest("Bad userVerification: bad value", TypeError);
    new GetCredentialsTest("options.publicKey.userVerification", null)
        .addCredential(credPromise)
        .runTest("Bad userVerification: null", TypeError);
    // mock authenticator does not support user verification
    new GetCredentialsTest("options.publicKey.userVerification", "required")
        .addCredential(credPromise)
        .runTest("Bad userVerification: \"required\"", "NotAllowedError");
});

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