https://github.com/web-platform-tests/wpt
Raw File
Tip revision: eb73cd1561ab74868ba71e128a237dafeecd36fa authored by Marcos Cáceres on 21 March 2018, 02:45:39 UTC
Edge doesn't do object spread yet
Tip revision: eb73cd1
createcredential-badargs-authnrselection.https.html
<!DOCTYPE html>
<meta charset="utf-8">
<title>WebAuthn navigator.credentials.create() authenticator selection 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 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>
back to top