def test_explicit_etag(self):
        response = pretend.stub(
            last_modified=None,
            etag="foo",
            conditional_response=False,
            app_iter=iter([b"foo"]),
        )
        handler = pretend.call_recorder(lambda request: response)
        request = pretend.stub()

        tween = conditional_http_tween_factory(handler, pretend.stub())

        self.assertEqual(tween(request), response)
        self.assertListEqual(handler.calls, [pretend.call(request)])
        self.assertTrue(response.conditional_response)
    def test_implicit_etag_post(self):
        response = pretend.stub(
            last_modified=None,
            etag=None,
            conditional_response=False,
            md5_etag=pretend.call_recorder(lambda: None),
            app_iter=[b"foo"],
            status_code=201,
        )
        handler = pretend.call_recorder(lambda request: response)
        request = pretend.stub(method='POST')

        tween = conditional_http_tween_factory(handler, pretend.stub())

        self.assertEqual(tween(request), response)
        self.assertListEqual(handler.calls, [pretend.call(request)])
        self.assertFalse(response.conditional_response)
    def test_no_etag(self):
        response = pretend.stub(
            status_code=200,
            last_modified=None,
            etag=None,
            conditional_response=False,
            app_iter=iter([b"foo"]),
            content_length=None,
        )
        handler = pretend.call_recorder(lambda request: response)
        request = pretend.stub(method="GET")

        tween = conditional_http_tween_factory(handler, pretend.stub())

        self.assertEqual(tween(request), response)
        self.assertListEqual(handler.calls, [pretend.call(request)])
        self.assertFalse(response.conditional_response)