<!DOCTYPE html>
<meta charset="utf-8">
<title>WebAuthn navigator.credentials.create() pubKeyCredParams 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 badType = {
        type: "something-else",
        alg: cose_alg_ECDSA_w_SHA512
    };
    var badTypeEmptyString = cloneObject(badType);
    badTypeEmptyString.type = "";
    var badTypeNull = cloneObject(badType);
    badTypeNull.type = null;
    var badTypeEmptyObj = cloneObject(badType);
    badTypeEmptyObj.type = {};

    var badAlg = {
        type: "public-key",
        alg: 42
    };
    var badAlgZero = cloneObject(badAlg);
    badAlgZero.alg = 0;

    // bad pubKeyCredParams values
    new CreateCredentialsTest({path: "options.publicKey.pubKeyCredParams", value: undefined}).runTest("Bad pubKeyCredParams: pubKeyCredParams is undefined", new TypeError());
    new CreateCredentialsTest("options.publicKey.pubKeyCredParams", "hi mom").runTest("Bad pubKeyCredParams: pubKeyCredParams is string", new TypeError());
    new CreateCredentialsTest("options.publicKey.pubKeyCredParams", null).runTest("Bad pubKeyCredParams: pubKeyCredParams is null", new TypeError());
    new CreateCredentialsTest("options.publicKey.pubKeyCredParams", [badType]).runTest("Bad pubKeyCredParams: first param has bad type (\"something-else\")", new TypeError());
    new CreateCredentialsTest("options.publicKey.pubKeyCredParams", [badTypeEmptyString]).runTest("Bad pubKeyCredParams: first param has bad type (\"\")", new TypeError());
    new CreateCredentialsTest("options.publicKey.pubKeyCredParams", [badTypeNull]).runTest("Bad pubKeyCredParams: first param has bad type (null)", new TypeError());
    new CreateCredentialsTest("options.publicKey.pubKeyCredParams", [badTypeEmptyObj]).runTest("Bad pubKeyCredParams: first param has bad type (empty object)", new TypeError());
    new CreateCredentialsTest("options.publicKey.pubKeyCredParams", [badAlg]).runTest("Bad pubKeyCredParams: first param has bad alg (42)", "NotSupportedError");
    new CreateCredentialsTest("options.publicKey.pubKeyCredParams", [badAlgZero]).runTest("Bad pubKeyCredParams: first param has bad alg (0)", "NotSupportedError");

    // TODO: come back to this when mock authenticators support multiple cryptos so that we can test the preference ranking
    // function verifyEC256(res) {
    //     debug ("verifyEC256 got", res);
    //     debug ("client data JSON", ab2str(res.response.clientDataJSON));
    //     parseAuthenticatorData(res.response.attestationObject);
    // }
    // new CreateCredentialsTest("options.publicKey.pubKeyCredParams", [pkParamEC256, pkParamEC512])
    //     .afterTest(verifyEC256)
    //     .runTest("EC256, EC512 pubKeyCredParams");
    // function verifyEC512(res) {
    //     debug ("verifyEC512 got", res);
    //     debug ("client data JSON", ab2str(res.response.clientDataJSON));
    //     // parseAuthenticatorData(res.response.attestationObject);
    //     printHex ("clientDataJSON", res.response.clientDataJSON);
    //     printHex ("attestationObject", res.response.attestationObject);
    // }
    // new CreateCredentialsTest("options.publicKey.pubKeyCredParams", [pkParamEC512, pkParamEC256])
    //     .afterTest(verifyEC512)
    //     .runTest("EC512, EC256 pubKeyCredParams");
});

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