<!DOCTYPE html>
<title>Web Authentication API: CTAP HID success cases with a mock hid authenticator.</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="./resources/util.js"></script>
<script>
    const defaultOptions = {
        publicKey: {
            rp: {
                name: "example.com"
            },
            user: {
                name: "John Appleseed",
                id: asciiToUint8Array("123456"),
                displayName: "John",
            },
            challenge: asciiToUint8Array("123456"),
            pubKeyCredParams: [{ type: "public-key", alg: -7 }],
        }
    };

    promise_test(function(t) {
        if (window.internals)
            internals.setMockWebAuthenticationConfiguration({ hid: { stage: "request", subStage: "msg", error: "success", payloadBase64: [testCreationMessageBase64], keepAlive: true } });
        return navigator.credentials.create(defaultOptions).then(credential => {
            assert_not_equals(credential, undefined);
            assert_not_equals(credential, null);
        });
    }, "CTAP HID with keep alive message in a mock hid authenticator.");

    promise_test(function(t) {
        if (window.internals)
            internals.setMockWebAuthenticationConfiguration({ hid: { stage: "request", subStage: "msg", error: "success", payloadBase64: [testCreationMessageBase64], fastDataArrival: true } });
        return navigator.credentials.create(defaultOptions).then(credential => {
            assert_not_equals(credential, undefined);
            assert_not_equals(credential, null);
        });
    }, "CTAP HID with fast data arrival in a mock hid authenticator.");

    promise_test(function(t) {
        if (window.internals)
            internals.setMockWebAuthenticationConfiguration({ hid: { stage: "info", subStage: "init", error: "empty-report", payloadBase64: [testCreationMessageBase64], continueAfterErrorData: true } });
        return navigator.credentials.create(defaultOptions).then(credential => {
            assert_not_equals(credential, undefined);
            assert_not_equals(credential, null);
        });
    }, "CTAP HID with continue after empty report in a mock hid authenticator.");

    promise_test(function(t) {
        if (window.internals)
            internals.setMockWebAuthenticationConfiguration({ hid: { stage: "info", subStage: "init", error: "wrong-channel-id", payloadBase64: [testCreationMessageBase64], continueAfterErrorData: true } });
        return navigator.credentials.create(defaultOptions).then(credential => {
            assert_not_equals(credential, undefined);
            assert_not_equals(credential, null);
        });
    }, "CTAP HID with continue after wrong channel id in a mock hid authenticator.");

    promise_test(function(t) {
        if (window.internals)
            internals.setMockWebAuthenticationConfiguration({ hid: { stage: "info", subStage: "init", error: "wrong-nonce", payloadBase64: [testCreationMessageBase64], continueAfterErrorData: true } });
        return navigator.credentials.create(defaultOptions).then(credential => {
            assert_not_equals(credential, undefined);
            assert_not_equals(credential, null);
        });
    }, "CTAP HID with continue after wrong nonce error in a mock hid authenticator.");
</script>
