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

    var defaultAuthnrSel = {
        authenticatorAttachment: "cross-platform",
        requireResidentKey: false,
        userVerification: "preferred"
    };
    // attachment
    var authnrSelAttachPlatform = cloneObject(defaultAuthnrSel);
    authnrSelAttachPlatform.authenticatorAttachment = "platform";
    var authnrSelBadAttachEmptyStr = cloneObject(defaultAuthnrSel);
    authnrSelBadAttachEmptyStr.authenticatorAttachment = "";
    var authnrSelBadAttachEmptyObj = cloneObject(defaultAuthnrSel);
    authnrSelBadAttachEmptyObj.authenticatorAttachment = {};
    var authnrSelBadAttachNull = cloneObject(defaultAuthnrSel);
    authnrSelBadAttachNull.authenticatorAttachment = null;
    // resident key
    var authnrSelRkTrue = cloneObject(defaultAuthnrSel);
    authnrSelRkTrue.requireResidentKey = true;
    var authnrSelRkBadString = cloneObject(defaultAuthnrSel);
    authnrSelRkBadString.requireResidentKey = "foo";
    // user verification
    var authnrSelUvRequired = cloneObject(defaultAuthnrSel);
    authnrSelUvRequired.userVerification = "required";
    var authnrSelBadUvEmptyStr = cloneObject(defaultAuthnrSel);
    authnrSelBadUvEmptyStr.userVerification = "";
    var authnrSelBadUvEmptyObj = cloneObject(defaultAuthnrSel);
    authnrSelBadUvEmptyObj.userVerification = {};
    var authnrSelBadUvStr = cloneObject(defaultAuthnrSel);
    authnrSelBadUvStr.userVerification = "requiredshirtshoestshirt";
    var authnrSelBadUvNull = cloneObject(defaultAuthnrSel);
    authnrSelBadUvNull.userVerification = null;

    // authenticatorSelection bad values
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", []).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection is empty array", new TypeError());
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", null).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection is null", new TypeError());
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", "").runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection is empty string", new TypeError());
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", "none").runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection is string", new TypeError());

    // authenticatorSelection bad attachment values
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", authnrSelBadAttachEmptyStr).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection attachment is empty string", new TypeError());
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", authnrSelBadAttachEmptyObj).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection attachment is empty object", new TypeError());
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", authnrSelBadAttachNull).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection attachment is null", new TypeError());
    // XXX: assumes authnr is behaving like most U2F authnrs; really depends on the authnr or mock configuration
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", authnrSelAttachPlatform).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection attachment platform", "NotAllowedError");

    // authenticatorSelection bad requireResidentKey values
   // XXX: assumes authnr is behaving like most U2F authnrs; really depends on the authnr or mock configuration
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", authnrSelRkTrue).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection residentKey true", "NotAllowedError");
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", authnrSelRkBadString).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection residentKey is string", new TypeError());
    // TODO: not sure if rk is "boolean" or "truthy"; add test cases if it should only accept boolean values

    // authenticatorSelection bad userVerification values
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", authnrSelBadUvEmptyStr).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection userVerification empty string", new TypeError());
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", authnrSelBadUvEmptyObj).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection userVerification empty object", new TypeError());
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", authnrSelBadUvStr).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection userVerification bad value", new TypeError());
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", authnrSelBadUvNull).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection userVerification null", new TypeError());
    // XXX: assumes this is a mock authenticator the properly reports that it is not doing userVerfication
    new CreateCredentialsTest("options.publicKey.authenticatorSelection", authnrSelUvRequired).runTest("Bad AuthenticatorSelectionCriteria: authenticatorSelection userVerification required", "NotAllowedError");
});

/* JSHINT */
/* globals standardSetup, CreateCredentialsTest, cloneObject */
</script>