diff --git a/.docker/tester_pycaosdb.ini b/.docker/tester_pycaosdb.ini index 38247085d7c6ba681f7ed9b1553d76818109711a..2159dec250b3dcb2f16043d12bdbe73675e4d75c 100644 --- a/.docker/tester_pycaosdb.ini +++ b/.docker/tester_pycaosdb.ini @@ -25,7 +25,7 @@ username = admin cacert = /cert/caosdb.cert.pem debug = 0 -passwordmethod = plain +password_method = plain password = caosdb timeout = 500 diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f22064aa509b1d5d4a8f1cd673ceef6d2e79543..0682590eca1a575646eeed6084849e88c27a0b68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added (for new features) * Tests for entity state [caosdb-server!62](https://gitlab.com/caosdb/caosdb-server/-/merge_requests/62) +* Tests for version history * Tests for inheritance bug (caosdb/caosdb-server!54) * Tests for versioning * Tests for deeply nested SELECT queries diff --git a/Makefile b/Makefile index c7c2b77dc1b0697f34aa00ab0a09c2cf35036c63..9689f1e3b68d0bd7f501879bcb6c854c0153a88e 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,7 @@ # Just a collection of scripts -.PHONY: all autopep8 test +.PHONY: all autopep8 test help # Do the integration tests. # Accepts freestyle arguments like so: @@ -29,6 +29,22 @@ test: cd tests && pytest $(test_opts) + +# Just print the help. +define HELP +The most common targets: + +make test :: Do the integration tests. Accepts freestyle arguments like so: + `make test test_opts=test_foo.py -k test_function` +Prepare everything for running. +make autopep8 :: Autoformatting for all tests +make all :: Run autopep8 and test +endef +export HELP +help: + @echo "$$HELP" + + # Run the tests through autopep8. autopep8: autopep8 -ri tests diff --git a/pycaosdb.ini.template b/pycaosdb.ini.template index 8f1d9d40f7af1fc0d2a515fbde6138c9b63e618d..369b33f6f63d15b737d6a558422ab1bfe6c30f15 100644 --- a/pycaosdb.ini.template +++ b/pycaosdb.ini.template @@ -1,23 +1,28 @@ # -*- mode:conf; -*- ## This sections needs to exist in addition to the usual section [IntegrationTests] -test_server_side_scripting.bin_dir=/scripting-bin/ +test_server_side_scripting.bin_dir.local=/path/to/scripting/bin +test_server_side_scripting.bin_dir.server=/opt/caosdb/git/caosdb-server/scritping/bin # location of the files from the pyinttest perspective test_files.test_insert_files_in_dir.local=/extroot/test_insert_files_in_dir/ # location of the files from the caosdb_servers perspective test_files.test_insert_files_in_dir.server=/opt/caosdb/mnt/extroot/test_insert_files_in_dir/ +# location of the one-time tokens from the pyinttest's perspective +test_authentication.admin_token_crud = /authtoken/admin_token_crud.txt +test_authentication.admin_token_expired = /authtoken/admin_token_expired.txt +test_authentication.admin_token_3_attempts = /authtoken/admin_token_3_attempts.txt ## Insert your usual settings here [Connection] #url=https://caosdb-server:10443/ #username=admin -#cacert=/cert/caosdb.cert.pem +#cacert=/path/to/cert/caosdb.cert.pem #cacert=/etc/ssl/cert.pem #debug=0 -#passwordmethod=plain +#password_method=plain #password=caosdb #ssl_insecure=True diff --git a/tests/test_administration.py b/tests/test_administration.py index 768214e05a10845be405d014294e6af69471ea48..9ca57c659079f7f3b6cbd39a4b83a89f53621f20 100644 --- a/tests/test_administration.py +++ b/tests/test_administration.py @@ -26,11 +26,13 @@ @author: tf """ -from caosdb import (administration as admin, get_config) -from nose.tools import assert_true, assert_equal, assert_is_not_none, assert_raises -from caosdb.exceptions import (ClientErrorException, TransactionError, - AuthorizationException, LoginFailedException) -from caosdb.connection.connection import get_connection, configure_connection +from caosdb import administration as admin +from caosdb import get_config +from caosdb.connection.connection import configure_connection, get_connection +from caosdb.exceptions import (AuthorizationException, ClientErrorException, + LoginFailedException, TransactionError) +from nose.tools import (assert_equal, assert_is_not_none, assert_raises, + assert_true) test_role = "test_role" test_user = "test_user" @@ -246,6 +248,7 @@ def test_get_roles_success(): test_insert_role_success() r = admin._get_roles(username=test_user) assert_is_not_none(r) + return r @@ -571,6 +574,7 @@ def test_login_with_inactive_user_failure(): status="INACTIVE", email="email@example.com", entity=None)) - configure_connection(username=test_user + "2", password="secret1P!") + configure_connection(username=test_user + "2", password="secret1P!", + password_method="plain") with assert_raises(LoginFailedException): get_connection()._login() diff --git a/tests/test_datetime.py b/tests/test_datetime.py index 815db5181d1b8bba97af3d18326c478a346789e9..cda35a1f013833744f314fda6a5bd87547cda5b9 100644 --- a/tests/test_datetime.py +++ b/tests/test_datetime.py @@ -1418,3 +1418,510 @@ def test_greater_operator(): h.execute_query("FIND Simple*").delete() except BaseException: pass + + +def test_greater_equal_operator(): + try: + rec = set_up_rec() + # query with > Date YYYY-MM-ddThh:mm:ss + d = "2015-05-05T20:15:30" + assert_true(query_assertion(rec, d, ">=", d)) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:15:30.123")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:15:30")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:15")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05")) + assert_true(query_assertion(rec, d, ">=", "2015-05")) + assert_true(query_assertion(rec, d, ">=", "2015")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:15:30.122")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:15:30.124")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:15:29.123")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:15:29")) + assert_false(query_assertion(rec, d, ">=", "2015-05-05T20:15:31.123")) + assert_false(query_assertion(rec, d, ">=", "2015-05-05T20:15:31")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:14:30.123")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:14:30")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:14")) + assert_false(query_assertion(rec, d, ">=", "2015-05-05T20:16:30.123")) + assert_false(query_assertion(rec, d, ">=", "2015-05-05T20:16:30")) + assert_false(query_assertion(rec, d, ">=", "2015-05-05T20:16")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T19:15:30.123")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T19:15:30")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T19:15")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T19")) + assert_false(query_assertion(rec, d, ">=", "2015-05-05T21:15:30.123")) + assert_false(query_assertion(rec, d, ">=", "2015-05-05T21:15:30")) + assert_false(query_assertion(rec, d, ">=", "2015-05-05T21:15")) + assert_false(query_assertion(rec, d, ">=", "2015-05-05T21")) + assert_true(query_assertion(rec, d, ">=", "2015-05-04T20:15:30.123")) + assert_true(query_assertion(rec, d, ">=", "2015-05-04T20:15:30")) + assert_true(query_assertion(rec, d, ">=", "2015-05-04T20:15")) + assert_true(query_assertion(rec, d, ">=", "2015-05-04T20")) + assert_true(query_assertion(rec, d, ">=", "2015-05-04")) + assert_false(query_assertion(rec, d, ">=", "2015-05-06T20:15:30.123")) + assert_false(query_assertion(rec, d, ">=", "2015-05-06T20:15:30")) + assert_false(query_assertion(rec, d, ">=", "2015-05-06T20:15")) + assert_false(query_assertion(rec, d, ">=", "2015-05-06T20")) + assert_false(query_assertion(rec, d, ">=", "2015-05-06")) + assert_true(query_assertion(rec, d, ">=", "2015-04-05T20:15:30.123")) + assert_true(query_assertion(rec, d, ">=", "2015-04-05T20:15:30")) + assert_true(query_assertion(rec, d, ">=", "2015-04-05T20:15")) + assert_true(query_assertion(rec, d, ">=", "2015-04-05T20")) + assert_true(query_assertion(rec, d, ">=", "2015-04-05")) + assert_true(query_assertion(rec, d, ">=", "2015-04")) + assert_false(query_assertion(rec, d, ">=", "2015-06-05T20:15:30.123")) + assert_false(query_assertion(rec, d, ">=", "2015-06-05T20:15:30")) + assert_false(query_assertion(rec, d, ">=", "2015-06-05T20:15")) + assert_false(query_assertion(rec, d, ">=", "2015-06-05T20")) + assert_false(query_assertion(rec, d, ">=", "2015-06-05")) + assert_false(query_assertion(rec, d, ">=", "2015-06")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05T20:15:30.123")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05T20:15:30")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05T20:15")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05T20")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05")) + assert_true(query_assertion(rec, d, ">=", "2014-05")) + assert_true(query_assertion(rec, d, ">=", "2014")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05T20:15:30.123")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05T20:15:30")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05T20:15")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05T20")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05")) + assert_false(query_assertion(rec, d, ">=", "2016-05")) + assert_false(query_assertion(rec, d, ">=", "2016")) + + # Date YYYY-MM-ddThh:mm:ss.ns + d = "2015-05-05T20:15:30.123" + assert_true(query_assertion(rec, d, ">=", d)) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:15:30.123")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:15:30")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:15")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05")) + assert_true(query_assertion(rec, d, ">=", "2015-05")) + assert_true(query_assertion(rec, d, ">=", "2015")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:15:30.122")) + assert_false(query_assertion(rec, d, ">=", "2015-05-05T20:15:30.124")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:15:29.123")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:15:29")) + assert_false(query_assertion(rec, d, ">=", "2015-05-05T20:15:31.123")) + assert_false(query_assertion(rec, d, ">=", "2015-05-05T20:15:31")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:14:30.123")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:14:30")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:14")) + assert_false(query_assertion(rec, d, ">=", "2015-05-05T20:16:30.123")) + assert_false(query_assertion(rec, d, ">=", "2015-05-05T20:16:30")) + assert_false(query_assertion(rec, d, ">=", "2015-05-05T20:16")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T19:15:30.123")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T19:15:30")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T19:15")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T19")) + assert_false(query_assertion(rec, d, ">=", "2015-05-05T21:15:30.123")) + assert_false(query_assertion(rec, d, ">=", "2015-05-05T21:15:30")) + assert_false(query_assertion(rec, d, ">=", "2015-05-05T21:15")) + assert_false(query_assertion(rec, d, ">=", "2015-05-05T21")) + assert_true(query_assertion(rec, d, ">=", "2015-05-04T20:15:30.123")) + assert_true(query_assertion(rec, d, ">=", "2015-05-04T20:15:30")) + assert_true(query_assertion(rec, d, ">=", "2015-05-04T20:15")) + assert_true(query_assertion(rec, d, ">=", "2015-05-04T20")) + assert_true(query_assertion(rec, d, ">=", "2015-05-04")) + assert_false(query_assertion(rec, d, ">=", "2015-05-06T20:15:30.123")) + assert_false(query_assertion(rec, d, ">=", "2015-05-06T20:15:30")) + assert_false(query_assertion(rec, d, ">=", "2015-05-06T20:15")) + assert_false(query_assertion(rec, d, ">=", "2015-05-06T20")) + assert_false(query_assertion(rec, d, ">=", "2015-05-06")) + assert_true(query_assertion(rec, d, ">=", "2015-04-05T20:15:30.123")) + assert_true(query_assertion(rec, d, ">=", "2015-04-05T20:15:30")) + assert_true(query_assertion(rec, d, ">=", "2015-04-05T20:15")) + assert_true(query_assertion(rec, d, ">=", "2015-04-05T20")) + assert_true(query_assertion(rec, d, ">=", "2015-04-05")) + assert_true(query_assertion(rec, d, ">=", "2015-04")) + assert_false(query_assertion(rec, d, ">=", "2015-06-05T20:15:30.123")) + assert_false(query_assertion(rec, d, ">=", "2015-06-05T20:15:30")) + assert_false(query_assertion(rec, d, ">=", "2015-06-05T20:15")) + assert_false(query_assertion(rec, d, ">=", "2015-06-05T20")) + assert_false(query_assertion(rec, d, ">=", "2015-06-05")) + assert_false(query_assertion(rec, d, ">=", "2015-06")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05T20:15:30.123")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05T20:15:30")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05T20:15")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05T20")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05")) + assert_true(query_assertion(rec, d, ">=", "2014-05")) + assert_true(query_assertion(rec, d, ">=", "2014")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05T20:15:30.123")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05T20:15:30")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05T20:15")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05T20")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05")) + assert_false(query_assertion(rec, d, ">=", "2016-05")) + assert_false(query_assertion(rec, d, ">=", "2016")) + + # Date YYYY-MM-dd + d = "2015-05-05" + assert_true(query_assertion(rec, d, ">=", d)) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:15:30.123")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:15:30")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:15")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05")) + assert_true(query_assertion(rec, d, ">=", "2015-05")) + assert_true(query_assertion(rec, d, ">=", "2015")) + assert_false(query_assertion(rec, d, ">=", "2015-05-06T20:15:30.123")) + assert_false(query_assertion(rec, d, ">=", "2015-05-06T20:15:30")) + assert_false(query_assertion(rec, d, ">=", "2015-05-06T20:15")) + assert_false(query_assertion(rec, d, ">=", "2015-05-06T20")) + assert_false(query_assertion(rec, d, ">=", "2015-05-06")) + assert_true(query_assertion(rec, d, ">=", "2015-05-04T20:15:30.123")) + assert_true(query_assertion(rec, d, ">=", "2015-05-04T20:15:30")) + assert_true(query_assertion(rec, d, ">=", "2015-05-04T20:15")) + assert_true(query_assertion(rec, d, ">=", "2015-05-04T20")) + assert_true(query_assertion(rec, d, ">=", "2015-05-04")) + assert_false(query_assertion(rec, d, ">=", "2015-06-05T20:15:30.123")) + assert_false(query_assertion(rec, d, ">=", "2015-06-05T20:15:30")) + assert_false(query_assertion(rec, d, ">=", "2015-06-05T20:15")) + assert_false(query_assertion(rec, d, ">=", "2015-06-05T20")) + assert_false(query_assertion(rec, d, ">=", "2015-06-05")) + assert_false(query_assertion(rec, d, ">=", "2015-06")) + assert_true(query_assertion(rec, d, ">=", "2015-04-05T20:15:30.123")) + assert_true(query_assertion(rec, d, ">=", "2015-04-05T20:15:30")) + assert_true(query_assertion(rec, d, ">=", "2015-04-05T20:15")) + assert_true(query_assertion(rec, d, ">=", "2015-04-05T20")) + assert_true(query_assertion(rec, d, ">=", "2015-04-05")) + assert_true(query_assertion(rec, d, ">=", "2015-04")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05T20:15:30.123")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05T20:15:30")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05T20:15")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05T20")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05")) + assert_false(query_assertion(rec, d, ">=", "2016-05")) + assert_false(query_assertion(rec, d, ">=", "2016")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05T20:15:30.123")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05T20:15:30")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05T20:15")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05T20")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05")) + assert_true(query_assertion(rec, d, ">=", "2014-05")) + assert_true(query_assertion(rec, d, ">=", "2014")) + + # Date YYYY-MM + d = "2015-05" + assert_true(query_assertion(rec, d, ">=", d)) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:15:30.123")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:15:30")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:15")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05")) + assert_true(query_assertion(rec, d, ">=", "2015-05")) + assert_true(query_assertion(rec, d, ">=", "2015")) + assert_false(query_assertion(rec, d, ">=", "2015-06-05T20:15:30.123")) + assert_false(query_assertion(rec, d, ">=", "2015-06-05T20:15:30")) + assert_false(query_assertion(rec, d, ">=", "2015-06-05T20:15")) + assert_false(query_assertion(rec, d, ">=", "2015-06-05T20")) + assert_false(query_assertion(rec, d, ">=", "2015-06-05")) + assert_false(query_assertion(rec, d, ">=", "2015-06")) + assert_true(query_assertion(rec, d, ">=", "2015-04-05T20:15:30.123")) + assert_true(query_assertion(rec, d, ">=", "2015-04-05T20:15:30")) + assert_true(query_assertion(rec, d, ">=", "2015-04-05T20:15")) + assert_true(query_assertion(rec, d, ">=", "2015-04-05T20")) + assert_true(query_assertion(rec, d, ">=", "2015-04-05")) + assert_true(query_assertion(rec, d, ">=", "2015-04")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05T20:15:30.123")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05T20:15:30")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05T20:15")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05T20")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05")) + assert_false(query_assertion(rec, d, ">=", "2016-05")) + assert_false(query_assertion(rec, d, ">=", "2016")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05T20:15:30.123")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05T20:15:30")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05T20:15")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05T20")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05")) + assert_true(query_assertion(rec, d, ">=", "2014-05")) + assert_true(query_assertion(rec, d, ">=", "2014")) + + # Date YYYY + d = "2015" + assert_true(query_assertion(rec, d, ">=", d)) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:15:30.123")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:15:30")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20:15")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05T20")) + assert_true(query_assertion(rec, d, ">=", "2015-05-05")) + assert_true(query_assertion(rec, d, ">=", "2015-05")) + assert_true(query_assertion(rec, d, ">=", "2015")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05T20:15:30.123")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05T20:15:30")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05T20:15")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05T20")) + assert_false(query_assertion(rec, d, ">=", "2016-05-05")) + assert_false(query_assertion(rec, d, ">=", "2016-05")) + assert_false(query_assertion(rec, d, ">=", "2016")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05T20:15:30.123")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05T20:15:30")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05T20:15")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05T20")) + assert_true(query_assertion(rec, d, ">=", "2014-05-05")) + assert_true(query_assertion(rec, d, ">=", "2014-05")) + assert_true(query_assertion(rec, d, ">=", "2014")) + + finally: + try: + h.execute_query("FIND Simple*").delete() + except BaseException: + pass + + +def test_smaller_equal_operator(): + try: + rec = set_up_rec() + + # Date YYYY-MM-ddThh:mm:ss + d = "2015-05-05T20:15:30" + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:15:30.123")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:15:30.122")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:15:30.124")) + assert_true(query_assertion(rec, d, "<=", d)) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:15:30")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:15")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05")) + assert_true(query_assertion(rec, d, "<=", "2015-05")) + assert_true(query_assertion(rec, d, "<=", "2015")) + assert_false(query_assertion(rec, d, "<=", "2015-05-05T20:15:29.123")) + assert_false(query_assertion(rec, d, "<=", "2015-05-05T20:15:29")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:15:31.123")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:15:31")) + assert_false(query_assertion(rec, d, "<=", "2015-05-05T20:14:30.123")) + assert_false(query_assertion(rec, d, "<=", "2015-05-05T20:14:30")) + assert_false(query_assertion(rec, d, "<=", "2015-05-05T20:14")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:16:30.123")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:16:30")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:16")) + assert_false(query_assertion(rec, d, "<=", "2015-05-05T19:15:30.123")) + assert_false(query_assertion(rec, d, "<=", "2015-05-05T19:15:30")) + assert_false(query_assertion(rec, d, "<=", "2015-05-05T19:15")) + assert_false(query_assertion(rec, d, "<=", "2015-05-05T19")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T21:15:30.123")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T21:15:30")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T21:15")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T21")) + assert_false(query_assertion(rec, d, "<=", "2015-05-04T20:15:30.123")) + assert_false(query_assertion(rec, d, "<=", "2015-05-04T20:15:30")) + assert_false(query_assertion(rec, d, "<=", "2015-05-04T20:15")) + assert_false(query_assertion(rec, d, "<=", "2015-05-04T20")) + assert_false(query_assertion(rec, d, "<=", "2015-05-04")) + assert_true(query_assertion(rec, d, "<=", "2015-05-06T20:15:30.123")) + assert_true(query_assertion(rec, d, "<=", "2015-05-06T20:15:30")) + assert_true(query_assertion(rec, d, "<=", "2015-05-06T20:15")) + assert_true(query_assertion(rec, d, "<=", "2015-05-06T20")) + assert_true(query_assertion(rec, d, "<=", "2015-05-06")) + assert_false(query_assertion(rec, d, "<=", "2015-04-05T20:15:30.123")) + assert_false(query_assertion(rec, d, "<=", "2015-04-05T20:15:30")) + assert_false(query_assertion(rec, d, "<=", "2015-04-05T20:15")) + assert_false(query_assertion(rec, d, "<=", "2015-04-05T20")) + assert_false(query_assertion(rec, d, "<=", "2015-04-05")) + assert_false(query_assertion(rec, d, "<=", "2015-04")) + assert_true(query_assertion(rec, d, "<=", "2015-06-05T20:15:30.123")) + assert_true(query_assertion(rec, d, "<=", "2015-06-05T20:15:30")) + assert_true(query_assertion(rec, d, "<=", "2015-06-05T20:15")) + assert_true(query_assertion(rec, d, "<=", "2015-06-05T20")) + assert_true(query_assertion(rec, d, "<=", "2015-06-05")) + assert_true(query_assertion(rec, d, "<=", "2015-06")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05T20:15:30.123")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05T20:15:30")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05T20:15")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05T20")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05")) + assert_false(query_assertion(rec, d, "<=", "2014-05")) + assert_false(query_assertion(rec, d, "<=", "2014")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05T20:15:30.123")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05T20:15:30")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05T20:15")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05T20")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05")) + assert_true(query_assertion(rec, d, "<=", "2016-05")) + assert_true(query_assertion(rec, d, "<=", "2016")) + + # Date YYYY-MM-ddThh:mm:ss.ns + d = "2015-05-05T20:15:30.123" + assert_true(query_assertion(rec, d, "<=", d)) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:15:30.123")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:15:30")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:15")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05")) + assert_true(query_assertion(rec, d, "<=", "2015-05")) + assert_true(query_assertion(rec, d, "<=", "2015")) + assert_false(query_assertion(rec, d, "<=", "2015-05-05T20:15:30.122")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:15:30.124")) + assert_false(query_assertion(rec, d, "<=", "2015-05-05T20:15:29.123")) + assert_false(query_assertion(rec, d, "<=", "2015-05-05T20:15:29")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:15:31.123")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:15:31")) + assert_false(query_assertion(rec, d, "<=", "2015-05-05T20:14:30.123")) + assert_false(query_assertion(rec, d, "<=", "2015-05-05T20:14:30")) + assert_false(query_assertion(rec, d, "<=", "2015-05-05T20:14")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:16:30.123")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:16:30")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:16")) + assert_false(query_assertion(rec, d, "<=", "2015-05-05T19:15:30.123")) + assert_false(query_assertion(rec, d, "<=", "2015-05-05T19:15:30")) + assert_false(query_assertion(rec, d, "<=", "2015-05-05T19:15")) + assert_false(query_assertion(rec, d, "<=", "2015-05-05T19")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T21:15:30.123")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T21:15:30")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T21:15")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T21")) + assert_false(query_assertion(rec, d, "<=", "2015-05-04T20:15:30.123")) + assert_false(query_assertion(rec, d, "<=", "2015-05-04T20:15:30")) + assert_false(query_assertion(rec, d, "<=", "2015-05-04T20:15")) + assert_false(query_assertion(rec, d, "<=", "2015-05-04T20")) + assert_false(query_assertion(rec, d, "<=", "2015-05-04")) + assert_true(query_assertion(rec, d, "<=", "2015-05-06T20:15:30.123")) + assert_true(query_assertion(rec, d, "<=", "2015-05-06T20:15:30")) + assert_true(query_assertion(rec, d, "<=", "2015-05-06T20:15")) + assert_true(query_assertion(rec, d, "<=", "2015-05-06T20")) + assert_true(query_assertion(rec, d, "<=", "2015-05-06")) + assert_false(query_assertion(rec, d, "<=", "2015-04-05T20:15:30.123")) + assert_false(query_assertion(rec, d, "<=", "2015-04-05T20:15:30")) + assert_false(query_assertion(rec, d, "<=", "2015-04-05T20:15")) + assert_false(query_assertion(rec, d, "<=", "2015-04-05T20")) + assert_false(query_assertion(rec, d, "<=", "2015-04-05")) + assert_false(query_assertion(rec, d, "<=", "2015-04")) + assert_true(query_assertion(rec, d, "<=", "2015-06-05T20:15:30.123")) + assert_true(query_assertion(rec, d, "<=", "2015-06-05T20:15:30")) + assert_true(query_assertion(rec, d, "<=", "2015-06-05T20:15")) + assert_true(query_assertion(rec, d, "<=", "2015-06-05T20")) + assert_true(query_assertion(rec, d, "<=", "2015-06-05")) + assert_true(query_assertion(rec, d, "<=", "2015-06")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05T20:15:30.123")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05T20:15:30")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05T20:15")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05T20")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05")) + assert_false(query_assertion(rec, d, "<=", "2014-05")) + assert_false(query_assertion(rec, d, "<=", "2014")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05T20:15:30.123")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05T20:15:30")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05T20:15")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05T20")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05")) + assert_true(query_assertion(rec, d, "<=", "2016-05")) + assert_true(query_assertion(rec, d, "<=", "2016")) + + # Date YYYY-MM-dd + d = "2015-05-05" + assert_true(query_assertion(rec, d, "<=", d)) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:15:30.123")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:15:30")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:15")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05")) + assert_true(query_assertion(rec, d, "<=", "2015-05")) + assert_true(query_assertion(rec, d, "<=", "2015")) + assert_false(query_assertion(rec, d, "<=", "2015-05-04T20:15:30.123")) + assert_false(query_assertion(rec, d, "<=", "2015-05-04T20:15:30")) + assert_false(query_assertion(rec, d, "<=", "2015-05-04T20:15")) + assert_false(query_assertion(rec, d, "<=", "2015-05-04T20")) + assert_false(query_assertion(rec, d, "<=", "2015-05-04")) + assert_true(query_assertion(rec, d, "<=", "2015-05-06T20:15:30.123")) + assert_true(query_assertion(rec, d, "<=", "2015-05-06T20:15:30")) + assert_true(query_assertion(rec, d, "<=", "2015-05-06T20:15")) + assert_true(query_assertion(rec, d, "<=", "2015-05-06T20")) + assert_true(query_assertion(rec, d, "<=", "2015-05-06")) + assert_false(query_assertion(rec, d, "<=", "2015-04-05T20:15:30.123")) + assert_false(query_assertion(rec, d, "<=", "2015-04-05T20:15:30")) + assert_false(query_assertion(rec, d, "<=", "2015-04-05T20:15")) + assert_false(query_assertion(rec, d, "<=", "2015-04-05T20")) + assert_false(query_assertion(rec, d, "<=", "2015-04-05")) + assert_false(query_assertion(rec, d, "<=", "2015-04")) + assert_true(query_assertion(rec, d, "<=", "2015-06-05T20:15:30.123")) + assert_true(query_assertion(rec, d, "<=", "2015-06-05T20:15:30")) + assert_true(query_assertion(rec, d, "<=", "2015-06-05T20:15")) + assert_true(query_assertion(rec, d, "<=", "2015-06-05T20")) + assert_true(query_assertion(rec, d, "<=", "2015-06-05")) + assert_true(query_assertion(rec, d, "<=", "2015-06")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05T20:15:30.123")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05T20:15:30")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05T20:15")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05T20")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05")) + assert_false(query_assertion(rec, d, "<=", "2014-05")) + assert_false(query_assertion(rec, d, "<=", "2014")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05T20:15:30.123")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05T20:15:30")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05T20:15")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05T20")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05")) + assert_true(query_assertion(rec, d, "<=", "2016-05")) + assert_true(query_assertion(rec, d, "<=", "2016")) + + # Date YYYY-MM + d = "2015-05" + assert_true(query_assertion(rec, d, "<=", d)) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:15:30.123")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:15:30")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:15")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05")) + assert_true(query_assertion(rec, d, "<=", "2015-05")) + assert_true(query_assertion(rec, d, "<=", "2015")) + assert_false(query_assertion(rec, d, "<=", "2015-04-05T20:15:30.123")) + assert_false(query_assertion(rec, d, "<=", "2015-04-05T20:15:30")) + assert_false(query_assertion(rec, d, "<=", "2015-04-05T20:15")) + assert_false(query_assertion(rec, d, "<=", "2015-04-05T20")) + assert_false(query_assertion(rec, d, "<=", "2015-04-05")) + assert_false(query_assertion(rec, d, "<=", "2015-04")) + assert_true(query_assertion(rec, d, "<=", "2015-06-05T20:15:30.123")) + assert_true(query_assertion(rec, d, "<=", "2015-06-05T20:15:30")) + assert_true(query_assertion(rec, d, "<=", "2015-06-05T20:15")) + assert_true(query_assertion(rec, d, "<=", "2015-06-05T20")) + assert_true(query_assertion(rec, d, "<=", "2015-06-05")) + assert_true(query_assertion(rec, d, "<=", "2015-06")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05T20:15:30.123")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05T20:15:30")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05T20:15")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05T20")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05")) + assert_false(query_assertion(rec, d, "<=", "2014-05")) + assert_false(query_assertion(rec, d, "<=", "2014")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05T20:15:30.123")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05T20:15:30")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05T20:15")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05T20")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05")) + assert_true(query_assertion(rec, d, "<=", "2016-05")) + assert_true(query_assertion(rec, d, "<=", "2016")) + + # Date YYYY + d = "2015" + assert_true(query_assertion(rec, d, "<=", d)) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:15:30.123")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:15:30")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20:15")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05T20")) + assert_true(query_assertion(rec, d, "<=", "2015-05-05")) + assert_true(query_assertion(rec, d, "<=", "2015-05")) + assert_true(query_assertion(rec, d, "<=", "2015")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05T20:15:30.123")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05T20:15:30")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05T20:15")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05T20")) + assert_false(query_assertion(rec, d, "<=", "2014-05-05")) + assert_false(query_assertion(rec, d, "<=", "2014-05")) + assert_false(query_assertion(rec, d, "<=", "2014")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05T20:15:30.123")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05T20:15:30")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05T20:15")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05T20")) + assert_true(query_assertion(rec, d, "<=", "2016-05-05")) + assert_true(query_assertion(rec, d, "<=", "2016-05")) + assert_true(query_assertion(rec, d, "<=", "2016")) + + finally: + try: + h.execute_query("FIND Simple*").delete() + except BaseException: + pass diff --git a/tests/test_issues_server.py b/tests/test_issues_server.py index 9022e7dcbe5456128a7994e187ab9d675cff5cbb..bb3a3490837687483bfc564d9f255feb7a1b4478 100644 --- a/tests/test_issues_server.py +++ b/tests/test_issues_server.py @@ -169,3 +169,32 @@ def test_issue_99(): time.sleep(0.1) dbfile.retrieve() assert dbfile.checksum is not None + + +def test_issue_110(): + """query ignores ID: FIND MusicalInstrument which is referenced by Analysis with ID=124 """ + cont = db.Container() + A = db.RecordType(name="TypeA") + B = db.RecordType(name="TypeB") + prop = db.Property(name="prop_ba", datatype=db.REFERENCE) + + # Referenced Records + a1 = db.Record().add_parent(A) + a2 = db.Record().add_parent(A) + + # Referencing Records + b1 = db.Record().add_parent(B).add_property(prop, value=a1) + b2 = db.Record().add_parent(B).add_property(prop, value=a2) + + cont.extend([A, B, prop, a1, a2, b1, b2]) + cont.insert() + + id_b1 = b1.id + query = "FIND TypeA WHICH IS REFERENCED BY TypeB WITH ID={}".format(id_b1) + print(query) + result = db.execute_query(query) + print(result) + assert len(result) == 1 + print(result[0]) + print(a1) + assert result[0].id == a1.id diff --git a/tests/test_manual.py b/tests/test_manual.py index edfa08b101fef708d7b8d7540596dc1ed0b5bcbb..1ba0b50dfb8d68c6c32ae82a4fe94b5e79f2d32a 100644 --- a/tests/test_manual.py +++ b/tests/test_manual.py @@ -66,7 +66,7 @@ def test_references(): '''define conductor''' conductor = Property( name="TestConductor", - description="The guy who conducted an experiment.", + description="The person who conducted an experiment.", datatype=person) '''define experiment''' diff --git a/tests/test_misc.py b/tests/test_misc.py index 1e107a6db48a8f5c82df613930871d0514b37852..1d0b6b9ded8854d500cb71481d309801f61c5c67 100644 --- a/tests/test_misc.py +++ b/tests/test_misc.py @@ -262,18 +262,6 @@ def test_annotation(): rt = execute_query("FIND AnnotationTest*").delete() -def test_history(): - try: - rt = RecordType(name="SimpleTestProperty").insert() - rt.retrieve(flags={"H": None}) - assert_equal(rt.messages["History"], ('Insert', None)) - finally: - try: - rt.delete() - except BaseException: - pass - - def test_info(): i = Info() assert_is_not_none(i.messages["Flags"]) diff --git a/tests/test_permissions.py b/tests/test_permissions.py index 11cd7986846bbccfb31be0f60e90dc0d7c276af8..3528a63eb8a16bc28938ae4b4d0074cc241f89f0 100644 --- a/tests/test_permissions.py +++ b/tests/test_permissions.py @@ -46,6 +46,7 @@ easy_pw = "1234" def setup_module(): + switch_to_admin_user() insert_test_user() @@ -937,25 +938,26 @@ def test_retrieve_acl(): assert_equal(e.msg, "You are not allowed to do this.") -@with_setup(setup, teardown) def test_retrieve_history(): p = db.Property(name="TestProperty", datatype=db.TEXT).insert() assert_true(p.is_valid()) grant_permission(p, "RETRIEVE:ENTITY") + p.retrieve() + assert p.version is not None + assert p.version.username is None, "username belongs to history" '''Failure''' - try: + with raises(db.TransactionError) as exc: p.retrieve(flags={"H": None}) - assert_true(False) - except db.TransactionError as e: - assert_equal(e.msg, "You are not allowed to do this.") + assert "You are not allowed to do this." in str(exc.value) '''Success''' grant_permission(p, "RETRIEVE:HISTORY") p.retrieve(flags={"H": None}) - assert_equal(p.messages["History"], ('Insert', None)) + assert p.version is not None + assert p.version.username == db.get_config().get("Connection", "username") @with_setup(setup, teardown) diff --git a/tests/test_query_template.py b/tests/test_query_template.py index 00aead470721f82631ece76c502f257cdb8b3769..e2b1c77a3b815419e45f24ad5b4a2131fdab331a 100644 --- a/tests/test_query_template.py +++ b/tests/test_query_template.py @@ -26,10 +26,13 @@ @author: tf """ import caosdb as db -from nose.tools import with_setup, assert_true, assert_is_none, assert_equal, assert_is_not_none, nottest, assert_raises # @UnresolvedImport +from nose.tools import (assert_equal, assert_is_none, # @UnresolvedImport + assert_is_not_none, assert_raises, assert_true, + nottest, with_setup) def setup_module(): + db.configure_connection() try: db.administration._delete_user(name="test_user") except Exception as e: @@ -81,12 +84,7 @@ def setup(): def teardown(): - try: - db.get_connection()._logout() - db.configure_connection() - db.get_connection()._login() - except Exception as e: - print(e) + db.configure_connection() try: db.execute_query("FIND QUERYTEMPLATE Test*").delete() except Exception as e: @@ -338,9 +336,7 @@ def test_query_without_permission(): r = db.execute_query("FIND TestPigExperiment", unique=True) assert_equal(r.name, "TestRecord") - db.get_connection()._logout() db.configure_connection() - db.get_connection()._login() e = db.Entity(id=qt.id) e.retrieve_acl() diff --git a/tests/test_query_version.py b/tests/test_query_version.py index c951fa3c4fa57dea30b22627746760575229c03c..0b152ee0f3015c08be7d46f680e1694eaeeaa8ca 100644 --- a/tests/test_query_version.py +++ b/tests/test_query_version.py @@ -21,10 +21,11 @@ # # ** end header # -import pytest import caosdb as db +import pytest from caosdb import execute_query as query +db.configure_connection() CONTAINER = db.Container() NAME_PROPERTY = db.Property("name").retrieve() TEST_PROP_TEXT = db.Property("TestPropertyText", datatype=db.TEXT) diff --git a/tests/test_version.py b/tests/test_version.py index 4a02b7df4a70446b3956d9bc77c22cff01faac04..784c23b0754ad4f9710ced3930a776af7a2747ee 100644 --- a/tests/test_version.py +++ b/tests/test_version.py @@ -47,7 +47,7 @@ def insertion(name="TestRT", parents=[]): rt.insert() assert rt.version is not None assert rt.version.id is not None - assert rt.version.date is not None + assert rt.version.is_head is True assert len(rt.version.predecessors) == 0 assert len(rt.version.successors) == 0 return rt @@ -58,7 +58,6 @@ def test_retrieve(): version = rt.version rt2 = c.execute_query("FIND RecordType TestRT", unique=True) - assert parse(rt2.version.date) == parse(version.date) assert rt2.version == version @@ -72,10 +71,8 @@ def test_update_description(): assert rt.description == new_desc assert rt.version is not None assert rt.version.id is not None - assert rt.version.date is not None assert rt.version != old_version - assert rt.version.date != old_version.date - assert parse(rt.version.date) > parse(old_version.date) + assert rt.version.is_head is True rt2 = c.execute_query("FIND RecordType TestRT", unique=True) assert rt2.version.id == rt.version.id @@ -92,6 +89,7 @@ def test_update_description(): "@" + old_version.id, sync=False)[0] assert rt_old.version.id == old_version.id assert rt_old.description == old_desc + assert rt_old.version.is_head is False def test_update_parent(): @@ -740,10 +738,7 @@ def test_update_name(): assert rt.name == new_name assert rt.version is not None assert rt.version.id is not None - assert rt.version.date is not None assert rt.version != old_version - assert rt.version.date != old_version.date - assert parse(rt.version.date) > parse(old_version.date) assert len(c.execute_query("FIND RecordType {}".format(old_name))) == 0 rt2 = c.execute_query("FIND RecordType {}".format(new_name), unique=True) @@ -819,3 +814,36 @@ def test_delete_referenced_entity(): rec_v2 = c.Container().retrieve(query=str(rec.id) + "@HEAD", flags={"cache": "false"}, sync=False)[0] assert rec_v2.get_property(ref_rt) is None + + +def test_retrieve_history(): + rt = insertion() + versions = [] + desc = dict() + + versions.append(rt.version) + desc[rt.version.id] = rt.description + v5_version = None + + for i in range(10): + rt.description = rt.description + str(i) + rt.update() + versions.append(rt.version) + desc[rt.version.id] = rt.description + if i == 5: + v5_version = rt.version + + # retrieve history + rt_v5 = c.Container().retrieve(query=str(rt.id) + "@HEAD~4", + flags={"H": None}, + sync=False)[0] + assert rt_v5.version.is_complete_history is True + assert rt_v5.version.id == v5_version.id + history = rt_v5.version.get_history() + assert len(history) == len(versions) + # Compare actual and expected version + for act, exp in zip(history, versions): + assert act.id == exp.id + tst = c.Container().retrieve(query=str(rt.id) + "@" + act.id, + sync=False)[0] + assert tst.description == desc[act.id]