<!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="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.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", TypeError);
    new CreateCredentialsTest("options.publicKey.pubKeyCredParams", "hi mom").runTest("Bad pubKeyCredParams: pubKeyCredParams is string", TypeError);
    new CreateCredentialsTest("options.publicKey.pubKeyCredParams", null).runTest("Bad pubKeyCredParams: pubKeyCredParams is null", TypeError);
    new CreateCredentialsTest("options.publicKey.pubKeyCredParams", [badType]).runTest("Bad pubKeyCredParams: first param has bad type (\"something-else\")", TypeError);
    new CreateCredentialsTest("options.publicKey.pubKeyCredParams", [badTypeEmptyString]).runTest("Bad pubKeyCredParams: first param has bad type (\"\")", TypeError);
    new CreateCredentialsTest("options.publicKey.pubKeyCredParams", [badTypeNull]).runTest("Bad pubKeyCredParams: first param has bad type (null)", TypeError);
    new CreateCredentialsTest("options.publicKey.pubKeyCredParams", [badTypeEmptyObj]).runTest("Bad pubKeyCredParams: first param has bad type (empty object)", TypeError);
    new CreateCredentialsTest("options.publicKey.pubKeyCredParams", [badAlg])
      .modify("options.publicKey.timeout", 300)
      .runTest("Bad pubKeyCredParams: first param has bad alg (42)", "NotAllowedError");
    new CreateCredentialsTest("options.publicKey.pubKeyCredParams", [badAlgZero])
      .modify("options.publicKey.timeout", 300)
      .runTest("Bad pubKeyCredParams: first param has bad alg (0)", "NotAllowedError");

    // 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>
