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

    // bad excludeCredentials values
    new CreateCredentialsTest("options.publicKey.excludeCredentials", "hi mom").runTest("Bad excludeCredentials: string", new TypeError());
    new CreateCredentialsTest("options.publicKey.excludeCredentials", {}).runTest("Bad excludeCredentials: empty object", new TypeError());
    // TODO: bad excludeCredentials with [{.type}] or [{.id}] or [{.transports}] wrong

    // good excludeCredentials values
    new CreateCredentialsTest({path: "options.publicKey.excludeCredentials", value: undefined}).runTest("excludeCredentials missing");
    new CreateCredentialsTest("options.publicKey.excludeCredentials", []).runTest("excludeCredentials empty array");

    // proper excludeCredentials behavior
    // should error on excluding existing credential
    promise_test((t) => {
        var cred1;
        return Promise.resolve()
            .then(() => {
                return createCredential();
            })
            .then((cred) => {
                cred1 = cred;
                var excludeCred = {
                    id: cred.rawId,
                    type: "public-key"
                };
                var args = {
                    options: {
                        publicKey: {
                            excludeCredentials: [excludeCred]
                        }
                    }
                };
                var p = createCredential(args);
                return promise_rejects (t, "NotAllowedError", p, "expected to fail on excluded credenetial");
            });
    }, "exclude existing credential");

    // should not error on excluding random credential
    promise_test(() => {
        return Promise.resolve()
            .then(() => {
                return createCredential();
            })
            .then(() => {
                var randomCredId = new Uint8Array(162);
                window.crypto.getRandomValues(randomCredId);

                var excludeCred = {
                    id: randomCredId,
                    type: "public-key"
                };
                var args = {
                    options: {
                        publicKey: {
                            excludeCredentials: [excludeCred]
                        }
                    }
                };
                return createCredential(args);
            });
    }, "exclude random (non-existing) credential");

    // TODO: exclude including transport type (USB, BLE, NFC)
});

/* JSHINT */
/* globals standardSetup, CreateCredentialsTest, createCredential, promise_test, promise_rejects */
</script>