<!DOCTYPE html>
<meta charset="utf-8">
<title>DBSC create a basic session</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="helper.js" type="module"></script>

<script type="module">
  import { expireCookie, documentHasCookie, waitForCookie, addCookieAndSessionCleanup, setupShardedServerState } from "./helper.js";

  promise_test(async t => {
    await setupShardedServerState();
    const expectedCookieAndValue = "auth_cookie=abcdef0123";
    const expectedCookieAndAttributes = `${expectedCookieAndValue};Domain=${location.hostname};Path=/device-bound-session-credentials`;
    addCookieAndSessionCleanup(t);

    // Prompt starting a session, and wait until registration completes.
    const loginResponse = await fetch('login.py');
    assert_equals(loginResponse.status, 200);
    await waitForCookie(expectedCookieAndValue, /*expectCookie=*/true);

    // Confirm that a request has the cookie set.
    const authResponse = await fetch('verify_authenticated.py');
    assert_equals(authResponse.status, 200);

    // Confirm that expiring the cookie still leads to a request with the cookie set (refresh occurs).
    expireCookie(expectedCookieAndAttributes);
    assert_false(documentHasCookie(expectedCookieAndValue));
    const authResponseAfterExpiry = await fetch('verify_authenticated.py');
    assert_equals(authResponseAfterExpiry.status, 200);
    assert_true(documentHasCookie(expectedCookieAndValue));
  }, "An established session can refresh a cookie");
</script>