public void TestCookieIsWrittenAndRemovedCorrectly(WriteCookieTestParameters parameters)
        {
            var response = new Mock <IResponse>();
            var cacheControlHeaderWriter = new Mock <ICacheControlHeaderWriter>();
            var request        = MockRequest(parameters);
            var sessionData    = parameters.HasSessionData ? NonEmptySessionData : EmptySessionData;
            var expectedCookie = ExpectedCookie(parameters);

            var cookieWriter = new CookieWriter(CookieSettings, cacheControlHeaderWriter.Object);

            cookieWriter.WriteCookie(
                request.Object,
                response.Object,
                new RawSession(parameters.State, sessionData),
                Expiration);

            if (expectedCookie is { } cookie)
            {
                response.Verify(r => r.SetCookie(cookie));
                cacheControlHeaderWriter.Verify(w => w.AddCacheControlHeaders(response.Object));
            }

            response.VerifyNoOtherCalls();
            cacheControlHeaderWriter.VerifyNoOtherCalls();
        }