class ClientTest(unittest.TestCase): def setUp(self): self.session = mock.MagicMock() self.client = Client(session=self.session) mock_response(self.session) def test_server_info(self): self.client.server_info() self.session.request.assert_called_with('get', '/') def test_context_manager_works_as_expected(self): settings = {"batch_max_requests": 25} self.session.request.side_effect = [({"settings": settings}, []), ({"responses": []}, [])] with self.client.batch(bucket='mozilla', collection='test') as batch: batch.create_record(id=1234, data={'foo': 'bar'}) batch.create_record(id=5678, data={'bar': 'baz'}) batch.patch_record(id=5678, data={'bar': 'biz'}) changes = JSONPatch([{'op': 'add', 'location': 'foo', 'value': 'bar'}]) batch.patch_record(id=5678, changes=changes) self.session.request.assert_called_with( method='POST', endpoint='/batch', payload={'requests': [ {'body': {'data': {'foo': 'bar'}}, 'path': '/buckets/mozilla/collections/test/records/1234', 'method': 'PUT', 'headers': {'If-None-Match': '*'}}, {'body': {'data': {'bar': 'baz'}}, 'path': '/buckets/mozilla/collections/test/records/5678', 'method': 'PUT', 'headers': {'If-None-Match': '*'}}, {'body': {'data': {'bar': 'biz'}}, 'path': '/buckets/mozilla/collections/test/records/5678', 'method': 'PATCH', 'headers': {'Content-Type': 'application/json'}}, {'body': [{'op': 'add', 'location': 'foo', 'value': 'bar'}], 'path': '/buckets/mozilla/collections/test/records/5678', 'method': 'PATCH', 'headers': {'Content-Type': 'application/json-patch+json'}}]}) def test_batch_raises_exception(self): # Make the next call to sess.request raise a 403. exception = KintoException() exception.response = mock.MagicMock() exception.response.status_code = 403 exception.request = mock.sentinel.request self.session.request.side_effect = exception with self.assertRaises(KintoException): with self.client.batch(bucket='moz', collection='test') as batch: batch.create_record(id=1234, data={'foo': 'bar'}) def test_batch_raises_exception_if_subrequest_failed_with_code_5xx(self): error = { "errno": 121, "message": "This user cannot access this resource.", "code": 500, "error": "Server Internal Error" } self.session.request.side_effect = [ ({"settings": {"batch_max_requests": 25}}, []), ({"responses": [ {"status": 200, "path": "/url1", "body": {}, "headers": {}}, {"status": 500, "path": "/url2", "body": error, "headers": {}} ]}, [])] with self.assertRaises(KintoException): with self.client.batch(bucket='moz', collection='test') as batch: batch.create_record(id=1234, data={'foo': 'bar'}) batch.create_record(id=5678, data={'tutu': 'toto'}) def test_batch_raises_exception_if_subrequest_failed_with_code_4xx(self): error_403 = { "errno": 121, "message": "Forbidden", "code": 403, "error": "This user cannot access this resource." } error_400 = { "code": 400, "errno": 104, "error": "Invalid parameters", "message": "Bad Request", } self.session.request.side_effect = [ ({"settings": {"batch_max_requests": 25}}, []), ({"responses": [ {"status": 200, "path": "/url1", "body": {}, "headers": {}}, {"status": 403, "path": "/url2", "body": error_403, "headers": {}}, {"status": 200, "path": "/url1", "body": {}, "headers": {}}, {"status": 400, "path": "/url2", "body": error_400, "headers": {}}, ]}, [])] with self.assertRaises(KintoBatchException) as cm: with self.client.batch(bucket='moz', collection='test') as batch: batch.create_record(id=1234, data={'foo': 'bar'}) batch.create_record(id=1987, data={'maz': 'miz'}) batch.create_record(id=1982, data={'plop': 'plip'}) batch.create_record(id=5678, data={'tutu': 'toto'}) raised = cm.exception assert "403" in str(raised) assert "400" in str(raised) assert isinstance(raised.exceptions[0], KintoException) assert raised.exceptions[0].response.status_code == 403 assert raised.exceptions[1].response.status_code == 400 resp, headers = raised.results[0] assert len(resp["responses"]) == 4 assert resp["responses"][0]["status"] == 200 def test_batch_does_not_raise_exception_if_batch_4xx_errors_are_ignored(self): error = { "errno": 121, "message": "Forbidden", "code": 403, "error": "This user cannot access this resource." } self.session.request.side_effect = [ ({"settings": {"batch_max_requests": 25}}, []), ({"responses": [ {"status": 200, "path": "/url1", "body": {}, "headers": {}}, {"status": 403, "path": "/url2", "body": error, "headers": {}} ]}, [])] client = Client(session=self.session, ignore_batch_4xx=True) with client.batch(bucket='moz', collection='test') as batch: # Do not raise batch.create_record(id=1234, data={'foo': 'bar'}) batch.create_record(id=5678, data={'tutu': 'toto'}) def test_batch_options_are_transmitted(self): settings = {"batch_max_requests": 25} self.session.request.side_effect = [({"settings": settings}, [])] with mock.patch('kinto_http.create_session') as create_session: with self.client.batch(bucket='moz', collection='test', retry=12, retry_after=20): _, last_call_kwargs = create_session.call_args_list[-1] self.assertEqual(last_call_kwargs['retry'], 12) self.assertEqual(last_call_kwargs['retry_after'], 20) def test_client_is_represented_properly_with_bucket_and_collection(self): client = Client( server_url="https://kinto.notmyidea.org/v1", bucket="homebrewing", collection="recipes" ) expected_repr = ("<KintoClient https://kinto.notmyidea.org/v1/" "buckets/homebrewing/collections/recipes>") assert str(client) == expected_repr def test_client_is_represented_properly_with_bucket(self): client = Client( server_url="https://kinto.notmyidea.org/v1", bucket="homebrewing", ) expected_repr = ("<KintoClient https://kinto.notmyidea.org/v1/" "buckets/homebrewing>") assert str(client) == expected_repr def test_client_is_represented_properly_without_bucket(self): client = Client( server_url="https://kinto.notmyidea.org/v1", bucket=None ) expected_repr = ("<KintoClient https://kinto.notmyidea.org/v1/>") assert str(client) == expected_repr def test_client_uses_default_bucket_if_not_specified(self): mock_response(self.session) client = Client(session=self.session) client.get_bucket() self.session.request.assert_called_with('get', '/buckets/default') def test_client_uses_passed_bucket_if_specified(self): client = Client( server_url="https://kinto.notmyidea.org/v1", bucket="buck") assert client._bucket_name == "buck" def test_client_clone_with_auth(self): client_clone = self.client.clone(auth=("reviewer", "")) assert client_clone.session.auth == ("reviewer", "") assert self.client.session != client_clone.session assert self.client.session.server_url == client_clone.session.server_url assert self.client.session.auth != client_clone.session.auth assert self.client.session.nb_retry == client_clone.session.nb_retry assert self.client.session.retry_after == client_clone.session.retry_after assert self.client._bucket_name == client_clone._bucket_name assert self.client._collection_name == client_clone._collection_name def test_client_clone_with_server_url(self): client_clone = self.client.clone(server_url="https://kinto.notmyidea.org/v1") assert client_clone.session.server_url == "https://kinto.notmyidea.org/v1" assert self.client.session != client_clone.session assert self.client.session.server_url != client_clone.session.server_url assert self.client.session.auth == client_clone.session.auth assert self.client.session.nb_retry == client_clone.session.nb_retry assert self.client.session.retry_after == client_clone.session.retry_after assert self.client._bucket_name == client_clone._bucket_name assert self.client._collection_name == client_clone._collection_name def test_client_clone_with_new_session(self): session = create_session(auth=("reviewer", ""), server_url="https://kinto.notmyidea.org/v1") client_clone = self.client.clone(session=session) assert client_clone.session == session assert self.client.session != client_clone.session assert self.client.session.server_url != client_clone.session.server_url assert self.client.session.auth != client_clone.session.auth assert self.client._bucket_name == client_clone._bucket_name assert self.client._collection_name == client_clone._collection_name def test_client_clone_with_auth_and_server_url(self): client_clone = self.client.clone(auth=("reviewer", ""), server_url="https://kinto.notmyidea.org/v1") assert client_clone.session.auth == ("reviewer", "") assert client_clone.session.server_url == "https://kinto.notmyidea.org/v1" assert self.client.session != client_clone.session assert self.client.session.server_url != client_clone.session.server_url assert self.client.session.auth != client_clone.session.auth assert self.client.session.nb_retry == client_clone.session.nb_retry assert self.client.session.retry_after == client_clone.session.retry_after assert self.client._bucket_name == client_clone._bucket_name assert self.client._collection_name == client_clone._collection_name def test_client_clone_with_existing_session(self): client_clone = self.client.clone(session=self.client.session) assert self.client.session == client_clone.session assert self.client.session.server_url == client_clone.session.server_url assert self.client.session.auth == client_clone.session.auth assert self.client._bucket_name == client_clone._bucket_name assert self.client._collection_name == client_clone._collection_name def test_client_clone_with_new_bucket_and_collection(self): client_clone = self.client.clone(bucket="bucket_blah", collection="coll_blah") assert self.client.session == client_clone.session assert self.client.session.server_url == client_clone.session.server_url assert self.client.session.auth == client_clone.session.auth assert self.client.session.nb_retry == client_clone.session.nb_retry assert self.client.session.retry_after == client_clone.session.retry_after assert self.client._bucket_name != client_clone._bucket_name assert self.client._collection_name != client_clone._collection_name assert client_clone._bucket_name == "bucket_blah" assert client_clone._collection_name == "coll_blah" def test_client_clone_with_auth_and_server_url_bucket_and_collection(self): client_clone = self.client.clone(auth=("reviewer", ""), server_url="https://kinto.notmyidea.org/v1", bucket="bucket_blah", collection="coll_blah") assert self.client.session != client_clone.session assert self.client.session.server_url != client_clone.session.server_url assert self.client.session.auth != client_clone.session.auth assert self.client._bucket_name != client_clone._bucket_name assert self.client._collection_name != client_clone._collection_name assert client_clone.session.auth == ("reviewer", "") assert client_clone.session.server_url == "https://kinto.notmyidea.org/v1" assert client_clone._bucket_name == "bucket_blah" assert client_clone._collection_name == "coll_blah"
class ClientTest(unittest.TestCase): def setUp(self): self.session = mock.MagicMock() self.client = Client(session=self.session) mock_response(self.session) def test_server_info(self): self.client.server_info() self.session.request.assert_called_with('get', '/') def test_context_manager_works_as_expected(self): settings = {"batch_max_requests": 25} self.session.request.side_effect = [({"settings": settings}, []), ({"responses": []}, [])] with self.client.batch(bucket='mozilla', collection='test') as batch: batch.create_record(id=1234, data={'foo': 'bar'}) batch.create_record(id=5678, data={'bar': 'baz'}) self.session.request.assert_called_with( method='POST', endpoint='/batch', payload={'requests': [ {'body': {'data': {'foo': 'bar'}}, 'path': '/buckets/mozilla/collections/test/records/1234', 'method': 'PUT', 'headers': {'If-None-Match': '*'}}, {'body': {'data': {'bar': 'baz'}}, 'path': '/buckets/mozilla/collections/test/records/5678', 'method': 'PUT', 'headers': {'If-None-Match': '*'}}]}) def test_batch_raises_exception(self): # Make the next call to sess.request raise a 403. exception = KintoException() exception.response = mock.MagicMock() exception.response.status_code = 403 exception.request = mock.sentinel.request self.session.request.side_effect = exception with self.assertRaises(KintoException): with self.client.batch(bucket='moz', collection='test') as batch: batch.create_record(id=1234, data={'foo': 'bar'}) def test_batch_raises_exception_if_subrequest_failed(self): error = { "errno": 121, "message": "This user cannot access this resource.", "code": 403, "error": "Forbidden" } self.session.request.side_effect = [ ({"settings": {"batch_max_requests": 25}}, []), ({"responses": [ {"status": 200, "path": "/url1", "body": {}, "headers": {}}, {"status": 404, "path": "/url2", "body": error, "headers": {}} ]}, [])] with self.assertRaises(KintoException): with self.client.batch(bucket='moz', collection='test') as batch: batch.create_record(id=1234, data={'foo': 'bar'}) batch.create_record(id=5678, data={'tutu': 'toto'}) def test_batch_options_are_transmitted(self): settings = {"batch_max_requests": 25} self.session.request.side_effect = [({"settings": settings}, [])] with mock.patch('kinto_http.create_session') as create_session: with self.client.batch(bucket='moz', collection='test', retry=12, retry_after=20): _, last_call_kwargs = create_session.call_args_list[-1] self.assertEqual(last_call_kwargs['retry'], 12) self.assertEqual(last_call_kwargs['retry_after'], 20) def test_client_is_represented_properly(self): client = Client( server_url="https://kinto.notmyidea.org/v1", bucket="homebrewing", collection="recipes" ) expected_repr = ("<KintoClient https://kinto.notmyidea.org/v1/" "buckets/homebrewing/collections/recipes>") assert str(client) == expected_repr def test_client_uses_default_bucket_if_not_specified(self): mock_response(self.session) client = Client(session=self.session) client.get_bucket() self.session.request.assert_called_with('get', '/buckets/default') def test_client_uses_passed_bucket_if_specified(self): client = Client( server_url="https://kinto.notmyidea.org/v1", bucket="buck") assert client._bucket_name == "buck" def test_client_clone_with_auth(self): client_clone = self.client.clone(auth=("reviewer", "")) assert client_clone.session.auth == ("reviewer", "") assert self.client.session != client_clone.session assert self.client.session.server_url == client_clone.session.server_url assert self.client.session.auth != client_clone.session.auth assert self.client.session.nb_retry == client_clone.session.nb_retry assert self.client.session.retry_after == client_clone.session.retry_after assert self.client._bucket_name == client_clone._bucket_name assert self.client._collection_name == client_clone._collection_name def test_client_clone_with_server_url(self): client_clone = self.client.clone(server_url="https://kinto.notmyidea.org/v1") assert client_clone.session.server_url == "https://kinto.notmyidea.org/v1" assert self.client.session != client_clone.session assert self.client.session.server_url != client_clone.session.server_url assert self.client.session.auth == client_clone.session.auth assert self.client.session.nb_retry == client_clone.session.nb_retry assert self.client.session.retry_after == client_clone.session.retry_after assert self.client._bucket_name == client_clone._bucket_name assert self.client._collection_name == client_clone._collection_name def test_client_clone_with_new_session(self): session = create_session(auth=("reviewer", ""), server_url="https://kinto.notmyidea.org/v1") client_clone = self.client.clone(session=session) assert client_clone.session == session assert self.client.session != client_clone.session assert self.client.session.server_url != client_clone.session.server_url assert self.client.session.auth != client_clone.session.auth assert self.client._bucket_name == client_clone._bucket_name assert self.client._collection_name == client_clone._collection_name def test_client_clone_with_auth_and_server_url(self): client_clone = self.client.clone(auth=("reviewer", ""), server_url="https://kinto.notmyidea.org/v1") assert client_clone.session.auth == ("reviewer", "") assert client_clone.session.server_url == "https://kinto.notmyidea.org/v1" assert self.client.session != client_clone.session assert self.client.session.server_url != client_clone.session.server_url assert self.client.session.auth != client_clone.session.auth assert self.client.session.nb_retry == client_clone.session.nb_retry assert self.client.session.retry_after == client_clone.session.retry_after assert self.client._bucket_name == client_clone._bucket_name assert self.client._collection_name == client_clone._collection_name def test_client_clone_with_existing_session(self): client_clone = self.client.clone(session=self.client.session) assert self.client.session == client_clone.session assert self.client.session.server_url == client_clone.session.server_url assert self.client.session.auth == client_clone.session.auth assert self.client._bucket_name == client_clone._bucket_name assert self.client._collection_name == client_clone._collection_name def test_client_clone_with_new_bucket_and_collection(self): client_clone = self.client.clone(bucket="bucket_blah", collection="coll_blah") assert self.client.session == client_clone.session assert self.client.session.server_url == client_clone.session.server_url assert self.client.session.auth == client_clone.session.auth assert self.client.session.nb_retry == client_clone.session.nb_retry assert self.client.session.retry_after == client_clone.session.retry_after assert self.client._bucket_name != client_clone._bucket_name assert self.client._collection_name != client_clone._collection_name assert client_clone._bucket_name == "bucket_blah" assert client_clone._collection_name == "coll_blah" def test_client_clone_with_auth_and_server_url_bucket_and_collection(self): client_clone = self.client.clone(auth=("reviewer", ""), server_url="https://kinto.notmyidea.org/v1", bucket="bucket_blah", collection="coll_blah") assert self.client.session != client_clone.session assert self.client.session.server_url != client_clone.session.server_url assert self.client.session.auth != client_clone.session.auth assert self.client._bucket_name != client_clone._bucket_name assert self.client._collection_name != client_clone._collection_name assert client_clone.session.auth == ("reviewer", "") assert client_clone.session.server_url == "https://kinto.notmyidea.org/v1" assert client_clone._bucket_name == "bucket_blah" assert client_clone._collection_name == "coll_blah"
class ClientTest(unittest.TestCase): def setUp(self): self.session = mock.MagicMock() self.client = Client(session=self.session) mock_response(self.session) def test_server_info(self): self.client.server_info() self.session.request.assert_called_with('get', '/') def test_context_manager_works_as_expected(self): settings = {"batch_max_requests": 25} self.session.request.side_effect = [({ "settings": settings }, []), ({ "responses": [] }, [])] with self.client.batch(bucket='mozilla', collection='test') as batch: batch.create_record(id=1234, data={'foo': 'bar'}) batch.create_record(id=5678, data={'bar': 'baz'}) self.session.request.assert_called_with( method='POST', endpoint='/batch', payload={ 'requests': [{ 'body': { 'data': { 'foo': 'bar' } }, 'path': '/buckets/mozilla/collections/test/records/1234', 'method': 'PUT', 'headers': { 'If-None-Match': '*', 'User-Agent': USER_AGENT } }, { 'body': { 'data': { 'bar': 'baz' } }, 'path': '/buckets/mozilla/collections/test/records/5678', 'method': 'PUT', 'headers': { 'If-None-Match': '*', 'User-Agent': USER_AGENT } }] }) def test_batch_raises_exception(self): # Make the next call to sess.request raise a 403. exception = KintoException() exception.response = mock.MagicMock() exception.response.status_code = 403 exception.request = mock.sentinel.request self.session.request.side_effect = exception with self.assertRaises(KintoException): with self.client.batch(bucket='moz', collection='test') as batch: batch.create_record(id=1234, data={'foo': 'bar'}) def test_batch_raises_exception_if_subrequest_failed_with_code_5xx(self): error = { "errno": 121, "message": "This user cannot access this resource.", "code": 500, "error": "Server Internal Error" } self.session.request.side_effect = [({ "settings": { "batch_max_requests": 25 } }, []), ({ "responses": [{ "status": 200, "path": "/url1", "body": {}, "headers": {} }, { "status": 500, "path": "/url2", "body": error, "headers": {} }] }, [])] with self.assertRaises(KintoException): with self.client.batch(bucket='moz', collection='test') as batch: batch.create_record(id=1234, data={'foo': 'bar'}) batch.create_record(id=5678, data={'tutu': 'toto'}) def test_batch_dont_raise_exception_if_subrequest_failed_with_code_4xx( self): error = { "errno": 121, "message": "Forbidden", "code": 403, "error": "This user cannot access this resource." } self.session.request.side_effect = [({ "settings": { "batch_max_requests": 25 } }, []), ({ "responses": [{ "status": 200, "path": "/url1", "body": {}, "headers": {} }, { "status": 403, "path": "/url2", "body": error, "headers": {} }] }, [])] with self.client.batch(bucket='moz', collection='test') as batch: # Do not raise batch.create_record(id=1234, data={'foo': 'bar'}) batch.create_record(id=5678, data={'tutu': 'toto'}) def test_batch_options_are_transmitted(self): settings = {"batch_max_requests": 25} self.session.request.side_effect = [({"settings": settings}, [])] with mock.patch('kinto_http.create_session') as create_session: with self.client.batch(bucket='moz', collection='test', retry=12, retry_after=20): _, last_call_kwargs = create_session.call_args_list[-1] self.assertEqual(last_call_kwargs['retry'], 12) self.assertEqual(last_call_kwargs['retry_after'], 20) def test_client_is_represented_properly_with_bucket_and_collection(self): client = Client(server_url="https://kinto.notmyidea.org/v1", bucket="homebrewing", collection="recipes") expected_repr = ("<KintoClient https://kinto.notmyidea.org/v1/" "buckets/homebrewing/collections/recipes>") assert str(client) == expected_repr def test_client_is_represented_properly_with_bucket(self): client = Client( server_url="https://kinto.notmyidea.org/v1", bucket="homebrewing", ) expected_repr = ("<KintoClient https://kinto.notmyidea.org/v1/" "buckets/homebrewing>") assert str(client) == expected_repr def test_client_is_represented_properly_without_bucket(self): client = Client(server_url="https://kinto.notmyidea.org/v1", bucket=None) expected_repr = ("<KintoClient https://kinto.notmyidea.org/v1/>") assert str(client) == expected_repr def test_client_uses_default_bucket_if_not_specified(self): mock_response(self.session) client = Client(session=self.session) client.get_bucket() self.session.request.assert_called_with('get', '/buckets/default') def test_client_uses_passed_bucket_if_specified(self): client = Client(server_url="https://kinto.notmyidea.org/v1", bucket="buck") assert client._bucket_name == "buck" def test_client_clone_with_auth(self): client_clone = self.client.clone(auth=("reviewer", "")) assert client_clone.session.auth == ("reviewer", "") assert self.client.session != client_clone.session assert self.client.session.server_url == client_clone.session.server_url assert self.client.session.auth != client_clone.session.auth assert self.client.session.nb_retry == client_clone.session.nb_retry assert self.client.session.retry_after == client_clone.session.retry_after assert self.client._bucket_name == client_clone._bucket_name assert self.client._collection_name == client_clone._collection_name def test_client_clone_with_server_url(self): client_clone = self.client.clone( server_url="https://kinto.notmyidea.org/v1") assert client_clone.session.server_url == "https://kinto.notmyidea.org/v1" assert self.client.session != client_clone.session assert self.client.session.server_url != client_clone.session.server_url assert self.client.session.auth == client_clone.session.auth assert self.client.session.nb_retry == client_clone.session.nb_retry assert self.client.session.retry_after == client_clone.session.retry_after assert self.client._bucket_name == client_clone._bucket_name assert self.client._collection_name == client_clone._collection_name def test_client_clone_with_new_session(self): session = create_session(auth=("reviewer", ""), server_url="https://kinto.notmyidea.org/v1") client_clone = self.client.clone(session=session) assert client_clone.session == session assert self.client.session != client_clone.session assert self.client.session.server_url != client_clone.session.server_url assert self.client.session.auth != client_clone.session.auth assert self.client._bucket_name == client_clone._bucket_name assert self.client._collection_name == client_clone._collection_name def test_client_clone_with_auth_and_server_url(self): client_clone = self.client.clone( auth=("reviewer", ""), server_url="https://kinto.notmyidea.org/v1") assert client_clone.session.auth == ("reviewer", "") assert client_clone.session.server_url == "https://kinto.notmyidea.org/v1" assert self.client.session != client_clone.session assert self.client.session.server_url != client_clone.session.server_url assert self.client.session.auth != client_clone.session.auth assert self.client.session.nb_retry == client_clone.session.nb_retry assert self.client.session.retry_after == client_clone.session.retry_after assert self.client._bucket_name == client_clone._bucket_name assert self.client._collection_name == client_clone._collection_name def test_client_clone_with_existing_session(self): client_clone = self.client.clone(session=self.client.session) assert self.client.session == client_clone.session assert self.client.session.server_url == client_clone.session.server_url assert self.client.session.auth == client_clone.session.auth assert self.client._bucket_name == client_clone._bucket_name assert self.client._collection_name == client_clone._collection_name def test_client_clone_with_new_bucket_and_collection(self): client_clone = self.client.clone(bucket="bucket_blah", collection="coll_blah") assert self.client.session == client_clone.session assert self.client.session.server_url == client_clone.session.server_url assert self.client.session.auth == client_clone.session.auth assert self.client.session.nb_retry == client_clone.session.nb_retry assert self.client.session.retry_after == client_clone.session.retry_after assert self.client._bucket_name != client_clone._bucket_name assert self.client._collection_name != client_clone._collection_name assert client_clone._bucket_name == "bucket_blah" assert client_clone._collection_name == "coll_blah" def test_client_clone_with_auth_and_server_url_bucket_and_collection(self): client_clone = self.client.clone( auth=("reviewer", ""), server_url="https://kinto.notmyidea.org/v1", bucket="bucket_blah", collection="coll_blah") assert self.client.session != client_clone.session assert self.client.session.server_url != client_clone.session.server_url assert self.client.session.auth != client_clone.session.auth assert self.client._bucket_name != client_clone._bucket_name assert self.client._collection_name != client_clone._collection_name assert client_clone.session.auth == ("reviewer", "") assert client_clone.session.server_url == "https://kinto.notmyidea.org/v1" assert client_clone._bucket_name == "bucket_blah" assert client_clone._collection_name == "coll_blah"