diff options
Diffstat (limited to 'tests/server/test_shared_db.py')
-rw-r--r-- | tests/server/test_shared_db.py | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/tests/server/test_shared_db.py b/tests/server/test_shared_db.py new file mode 100644 index 00000000..96af6dff --- /dev/null +++ b/tests/server/test_shared_db.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +# test_shared_db.py +# Copyright (C) 2017 LEAP +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +""" +Tests for the shared db on server side. +""" + + +import pytest + +from twisted.trial import unittest + +from leap.soledad.client.shared_db import SoledadSharedDatabase +from leap.soledad.common.document import SoledadDocument +from leap.soledad.common.l2db.errors import RevisionConflict + + +@pytest.mark.needs_couch +class SharedDbTests(unittest.TestCase): + """ + """ + + URL = 'http://127.0.0.1:2424/shared' + CREDS = {'token': {'uuid': 'an-uuid', 'token': 'an-auth-token'}} + + @pytest.fixture(autouse=True) + def soledad_client(self, soledad_server, soledad_dbs): + soledad_dbs('an-uuid') + self._db = SoledadSharedDatabase.open_database(self.URL, self.CREDS) + + @pytest.mark.thisone + def test_doc_update_succeeds(self): + doc_id = 'some-random-doc' + self.assertIsNone(self._db.get_doc(doc_id)) + # create a document in shared db + doc = SoledadDocument(doc_id=doc_id) + self._db.put_doc(doc) + # update that document + expected = {'new': 'content'} + doc.content = expected + self._db.put_doc(doc) + # ensure expected content was saved + doc = self._db.get_doc(doc_id) + self.assertEqual(expected, doc.content) + + @pytest.mark.thisone + def test_doc_update_fails_with_wrong_rev(self): + # create a document in shared db + doc_id = 'some-random-doc' + self.assertIsNone(self._db.get_doc(doc_id)) + # create a document in shared db + doc = SoledadDocument(doc_id=doc_id) + self._db.put_doc(doc) + # try to update document without including revision of old version + doc.rev = 'wrong-rev' + self.assertRaises(RevisionConflict, self._db.put_doc, doc) |