diff --git a/.docker/Dockerfile b/.docker/Dockerfile index eb4f65b7f96170850b61b318f777cf80caee7d91..a24df7ac66f145f3038365d2bbb28638e8ceb01f 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -1,5 +1,4 @@ -FROM debian:latest -ARG PYLIB=main +FROM debian:bullseye RUN apt-get update && \ apt-get install \ curl \ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5dcda53da4e1d550bbcfd03592c06e76a29499c5..880d352f64a068f705ee5c1d53c76891e26aeb06 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -44,8 +44,8 @@ stages: # | +-(caosdb-server)-------------------+ | # | | | | # | | /opt/caosdb | | -# | .------->| + /git/caosdb-server/scripting/ | | -# | | .----->| + /git/caosdb-server/authtoken/ | | +# | .------->| + /git/caosdb-server/authtoken/ | | +# | | .----->| + /git/caosdb-server/scripting/ | | # | | | .--->| + /mnt/extroot | | # | | | | .->| + /cert | | # | | | | | | | | @@ -158,7 +158,7 @@ test: - cat hash_pylib # Run the actual tests. This starts a new docker container within which # the tests run. The return value is stored in .docker/result - - /bin/sh ./run.sh + - /bin/sh ./run.sh | tee ../tox_output.log # Save logs - docker logs docker-caosdb-server-1 &> ../caosdb_log.txt @@ -177,6 +177,9 @@ test: # the pyinttest docker writes the return value of the tests into the # file result - rc=`cat .docker/result` + - if [ "$r" != "0" ]; then + awk '/=+ FAILURES/, /=+ / && ! /=+ FAILURES/' tox_output.log; + fi; - exit $rc dependencies: [cert] timeout: 3h diff --git a/.gitlab/issue_templates/Default.md b/.gitlab/issue_templates/Default.md new file mode 100644 index 0000000000000000000000000000000000000000..aa1a65aca363b87aff50280e1a86824009d2098b --- /dev/null +++ b/.gitlab/issue_templates/Default.md @@ -0,0 +1,28 @@ +## Summary + +*Please give a short summary of what the issue is.* + +## Expected Behavior + +*What did you expect how the software should behave?* + +## Actual Behavior + +*What did the software actually do?* + +## Steps to Reproduce the Problem + +*Please describe, step by step, how others can reproduce the problem. Please try these steps for yourself on a clean system.* + +1. +2. +3. + +## Specifications + +- Version: *Which version of this software?* +- Platform: *Which operating system, which other relevant software versions?* + +## Possible fixes + +*Do you have ideas how the issue can be resolved?* diff --git a/.gitlab/merge_request_templates/Default.md b/.gitlab/merge_request_templates/Default.md new file mode 100644 index 0000000000000000000000000000000000000000..3629e0ca3695000863d8c254516f64bf59a7bf60 --- /dev/null +++ b/.gitlab/merge_request_templates/Default.md @@ -0,0 +1,56 @@ +# Summary + +*Insert a meaningful description for this merge request here: What is the new/changed behavior? +Which bug has been fixed? Are there related issues?* + + +# Focus + +*Point the reviewer to the core of the code change. Where should they start reading? What should +they focus on (e.g. security, performance, maintainability, user-friendliness, compliance with the +specs, finding more corner cases, concrete questions)?* + + +# Test Environment + +*How to set up a test environment for manual testing?* + + +# Check List for the Author + +Please, prepare your MR for a review. Be sure to write a summary and a focus and create gitlab +comments for the reviewer. They should guide the reviewer through the changes, explain your changes +and also point out open questions. For further good practices have a look at [our review +guidelines](https://gitlab.com/caosdb/caosdb/-/blob/dev/REVIEW_GUIDELINES.md) + +- [ ] All automated tests pass +- [ ] Reference related issues +- [ ] Up-to-date CHANGELOG.md (or not necessary) +- [ ] Up-to-date JSON schema (or not necessary) +- [ ] Appropriate user and developer documentation (or not necessary) + - Update / write published documentation (`make doc`). + - How do I use the software? Assume "stupid" users. + - How do I develop or debug the software? Assume novice developers. +- [ ] Annotations in code (Gitlab comments) + - Intent of new code + - Problems with old code + - Why this implementation? + + +# Check List for the Reviewer + +- [ ] I understand the intent of this MR +- [ ] All automated tests pass +- [ ] Up-to-date CHANGELOG.md (or not necessary) +- [ ] Appropriate user and developer documentation (or not necessary), also in published + documentation. +- [ ] The test environment setup works and the intended behavior is reproducible in the test + environment +- [ ] In-code documentation and comments are up-to-date. +- [ ] Check: Are there specifications? Are they satisfied? + +For further good practices have a look at [our review guidelines](https://gitlab.com/caosdb/caosdb/-/blob/dev/REVIEW_GUIDELINES.md). + + +/assign me +/target_branch dev diff --git a/CHANGELOG.md b/CHANGELOG.md index e3de2cbf85eaede8621f616d3d6d878acce0275b..63beaa9f434b80d3e05513724e7113168fd3566c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * Test for [caosdb-server#136](https://gitlab.com/caosdb/caosdb-server/-/issues/136) * Test for [caosdb-server#141](https://gitlab.com/caosdb/caosdb-server/-/issues/141) * Test for [caosdb-server#145](https://gitlab.com/caosdb/caosdb-server/-/issues/145) +* Tests for [caosdb-pylib#90](https://gitlab.com/caosdb/caosdb-pylib/-/issues/90): `Entity.get_parents_recursively()` did not work for unretrieved + parents. +* Test for [caosdb-server#192](https://gitlab.com/caosdb/caosdb-server/-/issues/192) +* Test for miscellaneous *-too-long errors. ### Changed (for changes in existing functionality) @@ -51,6 +55,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 xfail until [caosdb-pylib#34](https://gitlab.com/caosdb/caosdb-pylib/-/issues/34) is fixed. +* Test for [caosdb-server#197](https://gitlab.com/caosdb/caosdb-server/-/issues/197). ### Deprecated (for soon-to-be removed features) @@ -63,5 +68,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * Tests for NaN Double Values (see https://gitlab.com/caosdb/caosdb-server/issues/41) * Tests for name queries. [caosdb-server#51](https://gitlab.com/caosdb/caosdb-server/-/issues/51) +* Server-side scripting is more tolerant to Pandas warnings now. (https://gitlab.indiscale.com/caosdb/src/caosdb-pyinttest/-/issues/21) ### Security (in case of vulnerabilities) diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 0000000000000000000000000000000000000000..d6e80aaa203bf09b085514ff25aa5927b7965f32 --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,28 @@ +cff-version: 1.2.0 +message: "If you use this software, please cite it as below." +authors: + - family-names: Fitschen + given-names: Timm + orcid: https://orcid.org/0000-0002-4022-432X + - family-names: Schlemmer + given-names: Alexander + orcid: https://orcid.org/0000-0003-4124-9649 + - family-names: Hornung + given-names: Daniel + orcid: https://orcid.org/0000-0002-7846-6375 + - family-names: tom Wörden + given-names: Henrik + orcid: https://orcid.org/0000-0002-5549-578X + - family-names: Spreckelsen + given-names: Florian + orcid: https://orcid.org/0000-0002-6856-2910 + - family-names: Parlitz + given-names: Ulrich + orcid: https://orcid.org/0000-0003-3058-1435 + - family-names: Luther + given-names: Stefan + orcid: https://orcid.org/0000-0001-7214-8125 +title: "CaosDB - Server" +version: 0.8.1 +doi: 10.3390/data4020083 +date-released: 2022-11-07 diff --git a/README.md b/README.md index 0e37866c8c402e1ae3a5b20a4601202692ec5e58..8ba5ca8d295f6ee3e594f1faa130cdd25f65d5e2 100644 --- a/README.md +++ b/README.md @@ -13,12 +13,23 @@ CaosDB project. be found elsewhere): - The CaosDB server must have debugging enabled. - The database should be empty. + - There should be a symlink named `debug-scripting-bin` inside the `custom` profile directory, + which points to the `resources` directory here in the pyinttest repository. You can create a + symlink like that with the following command (adapt paths to match your setting): + `custom$ ln -s ../../../../caosdb-pyinttest/resources debug-scripting-bin` - Modify `pycaosdb.ini.template` and save it as `pycaosdb.ini`, taking care of the following points: - Certificates must be valid and be specified in `pycaosdb.ini`. - Server-side scripting paths must be given, otherwise server-side scripting will be omitted. + - The local path `test_server_side_scripting.bin_dir.local` should point to a + `linkahead-server/scripting/bin` somwhere. + - The remote path `test_server_side_scripting.bin_dir.server` should probably be something like + `/opt/caosdb/git/caosdb-server/scripting/bin-debug`. + - Paths for the file tests must exist, or be creatable by the testing script and the server. - Run the tests with `pytest` or `pytest-3` (depending on your system). - If you want to run just a single test, you can also select a single test file: - `pytest-3 tests/test_issues.py` + `pytest-3 tests/test_issues.py` + or a test matching a regular expression: + `pytest-3 tests/test_issues.py -k issue_123` ## Requirements ## @@ -63,7 +74,7 @@ when creating the merge request. This allows our team to work with you on your r * Copyright (C) 2018 Research Group Biomedical Physics, Max Planck Institute for Dynamics and Self-Organization Göttingen. -* Copyright (C) 2020-2021 Indiscale GmbH <info@indiscale.com> +* Copyright (C) 2020-2023 Indiscale GmbH <info@indiscale.com> All files in this repository are licensed under the [GNU Affero General Public License](LICENCE.md) (version 3 or later). diff --git a/tests/test_affiliation.py b/tests/test_affiliation.py index 6c7bef617396a738cfa34cba6816578d951b60ec..153e9db31f6ee74da4bb7fd3527638334404957b 100644 --- a/tests/test_affiliation.py +++ b/tests/test_affiliation.py @@ -59,7 +59,7 @@ def setup_function(function): def teardown_function(function): - db.execute_query("FIND Test*").delete() + db.execute_query("FIND ENTITY Test*").delete() def test_affiliation_there(): diff --git a/tests/test_authentication.py b/tests/test_authentication.py index c885523a8ac52b2f2d84a55e92c3351a39edae47..88ef80133ddd793f6c9009621b54da5fab593bfc 100644 --- a/tests/test_authentication.py +++ b/tests/test_authentication.py @@ -46,7 +46,7 @@ def setup_function(function): # deactivate anonymous user db.administration.set_server_property("AUTH_OPTIONAL", "FALSE") - d = db.execute_query("FIND Test*") + d = db.execute_query("FIND ENTITY Test*") if len(d) > 0: d.delete() @@ -307,18 +307,18 @@ def test_crud_with_one_time_token(): # CREATE rt = db.RecordType(name="TestRT") rt.insert() - assert rt.id == db.execute_query("FIND TestRT", unique=True).id + assert rt.id == db.execute_query("FIND ENTITY TestRT", unique=True).id # UPDATE - assert db.execute_query("FIND TestRT", unique=True).description is None + assert db.execute_query("FIND ENTITY TestRT", unique=True).description is None rt.description = "new desc" rt.update() assert rt.description == db.execute_query( - "FIND TestRT", unique=True).description + "FIND ENTITY TestRT", unique=True).description # RETRIEVE rt.retrieve() - assert rt.id == db.execute_query("FIND TestRT", unique=True).id + assert rt.id == db.execute_query("FIND ENTITY TestRT", unique=True).id rt.delete() - assert len(db.execute_query("FIND TestRT")) == 0 + assert len(db.execute_query("FIND ENTITY TestRT")) == 0 diff --git a/tests/test_boolean.py b/tests/test_boolean.py index eb9b359a9d2a62dc4ce761b6461415f30774af85..ef8f317ce5f75a264bdb33d101c2b7e18510b1e5 100644 --- a/tests/test_boolean.py +++ b/tests/test_boolean.py @@ -27,134 +27,86 @@ """ import caosdb as h -# @UnresolvedImport -from nose.tools import assert_true, assert_equal, assert_false from caosdb.exceptions import TransactionError from pytest import raises -def test_property(): +def teardown_module(): try: - try: - h.execute_query("FIND Simple*").delete() - except BaseException: - pass - p = h.Property( - name="SimpleBooleanProperty", - datatype=h.BOOLEAN).insert() - assert_true(p.is_valid()) - assert_equal(p.datatype, h.BOOLEAN) - - p2 = h.Property(id=p.id).retrieve() - assert_true(p2.is_valid) - assert_equal(p2.datatype, h.BOOLEAN) - finally: - try: - p.delete() - except BaseException: - pass + h.execute_query("FIND ENTITY").delete() + except BaseException: + pass + + +def setup_function(function): + teardown_module() + + +def test_property(): + p = h.Property( + name="SimpleBooleanProperty", + datatype=h.BOOLEAN).insert() + assert p.is_valid() + assert p.datatype == h.BOOLEAN + + p2 = h.Property(id=p.id).retrieve() + assert p2.is_valid + assert p2.datatype == h.BOOLEAN def test_recordType(): - try: - p = h.Property( - name="SimpleBooleanProperty", - datatype=h.BOOLEAN).insert() - assert_true(p.is_valid()) - - rt = h.RecordType(name="SimpleRecordType").add_property(p).insert() - assert_true(rt.is_valid()) - assert_equal( - rt.get_property("SimpleBooleanProperty").datatype, - h.BOOLEAN) - - rt2 = h.RecordType(id=rt.id).retrieve() - assert_true(rt2.is_valid()) - assert_equal( - rt2.get_property("SimpleBooleanProperty").datatype, - h.BOOLEAN) - finally: - try: - rt.delete() - except BaseException: - pass - try: - p.delete() - except BaseException: - pass + p = h.Property( + name="SimpleBooleanProperty", + datatype=h.BOOLEAN).insert() + assert p.is_valid() + + rt = h.RecordType(name="SimpleRecordType").add_property(p).insert() + assert rt.is_valid() + assert rt.get_property("SimpleBooleanProperty").datatype == h.BOOLEAN + + rt2 = h.RecordType(id=rt.id).retrieve() + assert rt2.is_valid() + assert rt2.get_property("SimpleBooleanProperty").datatype == h.BOOLEAN def test_record(): - try: - p = h.Property( - name="SimpleBooleanProperty", - datatype=h.BOOLEAN).insert() - assert_true(p.is_valid()) - - rt = h.RecordType(name="SimpleRecordType").add_property(p).insert() - assert_true(rt.is_valid()) - - rec1 = h.Record(name="SimpleRecord1").add_parent( - rt).add_property(p, value="TRUE").insert() - assert_true(rec1.is_valid()) - assert_equal( - rec1.get_property("SimpleBooleanProperty").datatype, - h.BOOLEAN) - assert_equal(rec1.get_property("SimpleBooleanProperty").value, True) - - rec1c = h.Record(id=rec1.id).retrieve() - assert_true(rec1c.is_valid()) - assert_equal(rec1c.get_property( - "SimpleBooleanProperty").datatype, h.BOOLEAN) - assert_equal(rec1c.get_property( - "SimpleBooleanProperty").value, True) - - rec2 = h.Record(name="SimpleRecord2").add_parent( - rt).add_property(p, value=True).insert() - assert_true(rec2.is_valid()) - assert_equal( - rec2.get_property("SimpleBooleanProperty").datatype, - h.BOOLEAN) - assert_equal(rec2.get_property("SimpleBooleanProperty").value, True) - - rec2c = h.Record(id=rec2.id).retrieve() - assert_true(rec2c.is_valid()) - assert_equal(rec2c.get_property( - "SimpleBooleanProperty").datatype, h.BOOLEAN) - assert_equal(rec2c.get_property( - "SimpleBooleanProperty").value, True) - - rec3 = h.Record( - name="SimpleRecord3").add_parent(rt).add_property( - p.name, value="BLABLA") - with raises(TransactionError): - rec3.insert() - - assert_false(rec3.is_valid()) - assert_equal( - rec3.get_property( - "SimpleBooleanProperty").get_errors()[0].description, - "Cannot parse value to boolean (either 'true' or 'false', " - "case insensitive).") - - finally: - try: - rec3.delete() - except BaseException: - pass - try: - rec2.delete() - except BaseException: - pass - try: - rec1.delete() - except BaseException: - pass - try: - rt.delete() - except BaseException: - pass - try: - p.delete() - except BaseException: - pass + p = h.Property( + name="SimpleBooleanProperty", + datatype=h.BOOLEAN).insert() + assert p.is_valid() + + rt = h.RecordType(name="SimpleRecordType").add_property(p).insert() + assert rt.is_valid() + + rec1 = h.Record(name="SimpleRecord1").add_parent( + rt).add_property(p, value="TRUE").insert() + assert rec1.is_valid() + assert rec1.get_property("SimpleBooleanProperty").datatype == h.BOOLEAN + assert rec1.get_property("SimpleBooleanProperty").value is True + + rec1c = h.Record(id=rec1.id).retrieve() + assert rec1c.is_valid() + assert rec1c.get_property("SimpleBooleanProperty").datatype == h.BOOLEAN + assert rec1c.get_property("SimpleBooleanProperty").value is True + + rec2 = h.Record(name="SimpleRecord2").add_parent( + rt).add_property(p, value=True).insert() + assert rec2.is_valid() + assert rec2.get_property("SimpleBooleanProperty").datatype == h.BOOLEAN + assert rec2.get_property("SimpleBooleanProperty").value is True + + rec2c = h.Record(id=rec2.id).retrieve() + assert rec2c.is_valid() + assert rec2c.get_property("SimpleBooleanProperty").datatype == h.BOOLEAN + assert rec2c.get_property("SimpleBooleanProperty").value is True + + rec3 = h.Record( + name="SimpleRecord3").add_parent(rt).add_property( + p.name, value="BLABLA") + with raises(TransactionError): + rec3.insert() + + assert not rec3.is_valid() + assert rec3.get_property("SimpleBooleanProperty").get_errors()[ + 0].description, ("Cannot parse value to boolean " + "(either 'true' or 'false' == " "case insensitive).") diff --git a/tests/test_datatype.py b/tests/test_datatype.py index 46c52108e9bb1aed097c109ea30f675f6efc20a2..a536d50ccbeb0e620c0f5c0d6046f770a15e116d 100644 --- a/tests/test_datatype.py +++ b/tests/test_datatype.py @@ -31,16 +31,13 @@ from pytest import raises def setup_function(function): try: - db.execute_query("FIND Test*").delete() + db.execute_query("FIND ENTITY").delete() except BaseException: pass def teardown_function(function): - try: - db.execute_query("FIND Test*").delete() - except BaseException: - pass + setup_function(function) def test_override_with_non_existing_ref(): @@ -83,7 +80,7 @@ def test_reference_datatype_sequencial(): assert p.is_valid() is True - dt = db.execute_query("FIND TestProp", unique=True).datatype + dt = db.execute_query("FIND ENTITY TestProp", unique=True).datatype assert dt == "TestRT" rt2 = db.RecordType( diff --git a/tests/test_datatype_inheritance.py b/tests/test_datatype_inheritance.py index 119f72869612f636346da098630ff8715d888a44..4ab7311ac56baebadd24fb05e967c29fd769c281 100644 --- a/tests/test_datatype_inheritance.py +++ b/tests/test_datatype_inheritance.py @@ -25,7 +25,6 @@ from caosdb import Container, Property, RecordType, Record, execute_query import caosdb import caosdb as db from caosdb.connection.connection import get_connection -from nose.tools import assert_is_not_none, assert_true, assert_equal from caosdb.exceptions import TransactionError from pytest import raises @@ -37,11 +36,7 @@ def setup_function(function): def teardown_function(function): try: - db.execute_query("FIND test_*").delete() - except BaseException: - pass - try: - db.execute_query("FIND Test*").delete() + db.execute_query("FIND ENTITY").delete() except BaseException: pass @@ -49,179 +44,134 @@ def teardown_function(function): def test_default_datatype_for_recordtypes(): rt1 = db.RecordType(name="TestRT1").insert() rt2 = db.RecordType(name="TestRT2").add_property(name="TestRT1").insert() - p = db.execute_query("FIND TestRT2", unique=True).get_properties()[0] - assert_equal(p.id, rt1.id) - assert_equal(p.name, rt1.name) - assert_equal(p.datatype, rt1.name) + p = db.execute_query("FIND ENTITY TestRT2", unique=True).get_properties()[0] + assert p.id == rt1.id + assert p.name == rt1.name + assert p.datatype == rt1.name p = rt2.get_properties()[0] - assert_equal(p.id, rt1.id) - assert_equal(p.name, rt1.name) - assert_equal(p.datatype, rt1.name) + assert p.id == rt1.id + assert p.name == rt1.name + assert p.datatype == rt1.name def test_datatype_inheritance(): insert = '<Insert><Property id="-1" name="test_property" description="bla" datatype="Text"/><RecordType name="test_rt" description="bla"> <Property id="-1" importance="obligatory" /></RecordType></Insert>' - print(insert) con = get_connection() http_response = con.insert( entity_uri_segment=["Entity"], body=insert) c = Container._response_to_entities(http_response) - print(c) for e in c: - assert_true(e.is_valid()) - assert_is_not_none(e.id) - assert_true(int(e.id) >= 100) - - c.delete() + assert e.is_valid() + assert e.id is not None + assert int(e.id) >= 100 def test_datatype_overriding(): - try: - p = Property( - name="DatatypeOverridingDoubleProperty", - description="DoubleDesc", - datatype="DOUBLE").insert() - assert_true(p.is_valid()) - - rt = RecordType( - name="DatatypeOverridingRT").add_property( - p, datatype="TEXT") - rt.insert() - assert_true(rt.is_valid()) - assert_is_not_none(rt.get_properties()) - assert_equal(1, len(rt.get_properties())) - assert_equal( - "DatatypeOverridingDoubleProperty", - rt.get_properties()[0].name) - assert_equal("DoubleDesc", rt.get_properties()[0].description) - assert_equal( - str("TEXT").lower(), - rt.get_properties()[0].datatype.lower()) - - # retrieve again: - rt = execute_query("FIND DatatypeOverridingRT", unique=True) - assert_true(rt.is_valid()) - assert_is_not_none(rt.get_properties()) - assert_equal(1, len(rt.get_properties())) - assert_equal( - "DatatypeOverridingDoubleProperty", - rt.get_properties()[0].name) - assert_equal("DoubleDesc", rt.get_properties()[0].description) - assert_equal( - str("TEXT").lower(), - rt.get_properties()[0].datatype.lower()) - finally: - try: - execute_query("FIND DatatypeOverriding*").delete() - except BaseException: - pass + p = Property( + name="DatatypeOverridingDoubleProperty", + description="DoubleDesc", + datatype="DOUBLE").insert() + assert p.is_valid() + + rt = RecordType( + name="DatatypeOverridingRT").add_property( + p, datatype="TEXT") + rt.insert() + assert rt.is_valid() + assert rt.get_properties() is not None + assert 1 == len(rt.get_properties()) + assert "DatatypeOverridingDoubleProperty" == rt.get_properties()[0].name + assert "DoubleDesc" == rt.get_properties()[0].description + assert str("TEXT").lower() == rt.get_properties()[0].datatype.lower() + + # retrieve again: + rt = execute_query("FIND ENTITY DatatypeOverridingRT", unique=True) + assert rt.is_valid() + assert rt.get_properties() is not None + assert 1 == len(rt.get_properties()) + assert "DatatypeOverridingDoubleProperty" == rt.get_properties()[0].name + assert "DoubleDesc" == rt.get_properties()[0].description + assert str("TEXT").lower() == rt.get_properties()[0].datatype.lower() def test_datatype_overriding_update(): - try: - p = Property(name="DoubleProperty", datatype="DOUBLE").insert() - assert_true(p.is_valid()) - - rt = RecordType( - name="DatatypeOverridingRT").add_property( - p, datatype="TEXT") - rt.insert() - assert_true(rt.is_valid()) - assert_is_not_none(rt.get_properties()) - assert_equal(1, len(rt.get_properties())) - assert_equal("DoubleProperty", rt.get_properties()[0].name) - assert_equal( - str("TEXT").lower(), - rt.get_properties()[0].datatype.lower()) - - # retrieve again: - rt = execute_query("FIND DatatypeOverridingRT", unique=True) - assert_true(rt.is_valid()) - assert_is_not_none(rt.get_properties()) - assert_equal(1, len(rt.get_properties())) - assert_equal("DoubleProperty", rt.get_properties()[0].name) - assert_equal( - str("TEXT").lower(), - rt.get_properties()[0].datatype.lower()) - - with raises(TransactionError) as te: - p.datatype = "INT" - p.update() - - assert "Unknown data type." == te.value.errors[0].msg - - p.datatype = "INTEGER" + p = Property(name="DoubleProperty", datatype="DOUBLE").insert() + assert p.is_valid() + + rt = RecordType( + name="DatatypeOverridingRT").add_property( + p, datatype="TEXT") + rt.insert() + assert rt.is_valid() + assert rt.get_properties() is not None + assert 1 == len(rt.get_properties()) + assert "DoubleProperty" == rt.get_properties()[0].name + assert str("TEXT").lower() == rt.get_properties()[0].datatype.lower() + + # retrieve again: + rt = execute_query("FIND ENTITY DatatypeOverridingRT", unique=True) + assert rt.is_valid() + assert rt.get_properties() is not None + assert 1 == len(rt.get_properties()) + assert "DoubleProperty" == rt.get_properties()[0].name + assert str("TEXT").lower() == rt.get_properties()[0].datatype.lower() + + with raises(TransactionError) as te: + p.datatype = "INT" p.update() - assert_true(p.is_valid()) - assert_equal(str("INTEGER").lower(), p.datatype.lower()) - - # retrieve again: - p = execute_query("FIND DoubleProperty", unique=True) - assert_true(p.is_valid()) - assert_equal(str("INTEGER").lower(), p.datatype.lower()) - - # retrieve rt again: - rt = execute_query("FIND DatatypeOverridingRT", unique=True) - assert_true(rt.is_valid()) - assert_is_not_none(rt.get_properties()) - assert_equal(1, len(rt.get_properties())) - assert_equal("DoubleProperty", rt.get_properties()[0].name) - # overriding still ok? - assert_equal( - str("TEXT").lower(), - rt.get_properties()[0].datatype.lower()) - - rt.get_properties()[0].datatype = "DATETIME" - rt.update() - assert_true(rt.is_valid()) - assert_is_not_none(rt.get_properties()) - assert_equal(1, len(rt.get_properties())) - assert_equal("DoubleProperty", rt.get_properties()[0].name) - assert_equal( - str("DATETIME").lower(), - rt.get_properties()[0].datatype.lower()) - - finally: - try: - if len(execute_query("FIND DatatypeOverridingRT")) > 0: - rt.delete() - except BaseException: - pass - try: - p.delete() - except BaseException: - pass + + assert "Unknown data type." == te.value.errors[0].msg + + p.datatype = "INTEGER" + p.update() + assert p.is_valid() + assert str("INTEGER").lower() == p.datatype.lower() + + # retrieve again: + p = execute_query("FIND ENTITY DoubleProperty", unique=True) + assert p.is_valid() + assert str("INTEGER").lower() == p.datatype.lower() + + # retrieve rt again: + rt = execute_query("FIND ENTITY DatatypeOverridingRT", unique=True) + assert rt.is_valid() + assert rt.get_properties() is not None + assert 1 == len(rt.get_properties()) + assert "DoubleProperty" == rt.get_properties()[0].name + # overriding still ok? + assert str("TEXT").lower() == rt.get_properties()[0].datatype.lower() + + rt.get_properties()[0].datatype = "DATETIME" + rt.update() + assert rt.is_valid() + assert rt.get_properties() is not None + assert 1 == len(rt.get_properties()) + assert "DoubleProperty" == rt.get_properties()[0].name + assert str("DATETIME").lower() == rt.get_properties()[0].datatype.lower() def test_recordtype_to_record(): - try: - rt = RecordType(name="SimpleTextRecordType") - rt.datatype = "TEXT" - rt.insert() - assert_true(rt.is_valid()) - assert_is_not_none(rt.datatype) - assert_equal(str("TEXT").lower(), rt.datatype.lower()) - - rt = RecordType(id=rt.id).retrieve() - assert_true(rt.is_valid()) - assert_is_not_none(rt.datatype) - assert_equal(str("TEXT").lower(), rt.datatype.lower()) - - rec = Record().add_parent(name="SimpleTextRecordType").insert() - assert_true(rec.is_valid()) - # TODO - # assert_is_not_none(rec.datatype) - # assert_equal(str("TEXT").lower(),rec.datatype.lower()) - - finally: - try: - rt = execute_query("FIND SimpleTextRecordType").delete() - except BaseException: - pass + rt = RecordType(name="SimpleTextRecordType") + rt.datatype = "TEXT" + rt.insert() + assert rt.is_valid() + assert rt.datatype is not None + assert str("TEXT").lower() == rt.datatype.lower() + + rt = RecordType(id=rt.id).retrieve() + assert rt.is_valid() + assert rt.datatype is not None + assert str("TEXT").lower() == rt.datatype.lower() + + rec = Record().add_parent(name="SimpleTextRecordType").insert() + assert rec.is_valid() + # TODO + # assert rec.datatype is not None + # assert str("TEXT").lower() == rec.datatype.lower() def test_concrete_property(): @@ -230,11 +180,11 @@ def test_concrete_property(): p = Property( name="DataTypeTestDoubleProperty", datatype=datatype.upper()).insert() - assert_true(p.is_valid()) - assert_equal(p.datatype.upper(), datatype.upper()) + assert p.is_valid() + assert p.datatype.upper() == datatype.upper() p2 = Property(id=p.id).retrieve() - assert_equal(p.datatype, p2.datatype) + assert p.datatype == p2.datatype return p finally: @@ -242,98 +192,34 @@ def test_concrete_property(): p.delete() except BaseException: pass - try: - p_double = test("DOUBLE") - p_datetime = test("DATETIME") - p_integer = test("INTEGER") - p_timespan = test("TIMESPAN") - p_text = test("TEXT") - p_file = test("FILE") - p_reference = test("REFERENCE") - - finally: - try: - p_reference.delete() - except BaseException: - pass - try: - p_file.delete() - except BaseException: - pass - try: - p_text.delete() - except BaseException: - pass - try: - p_timespan.delete() - except BaseException: - pass - try: - p_integer.delete() - except BaseException: - pass - try: - p_datetime.delete() - except BaseException: - pass - try: - p_double.delete() - except BaseException: - pass + p_double = test("DOUBLE") + p_datetime = test("DATETIME") + p_integer = test("INTEGER") + p_timespan = test("TIMESPAN") + p_text = test("TEXT") + p_file = test("FILE") + p_reference = test("REFERENCE") def test_reference_with_null_value(): - try: - try: - execute_query("FIND RT2").delete() - except BaseException: - pass - try: - execute_query("FIND RT1").delete() - except BaseException: - pass - RT1 = RecordType(name="RT1").insert() - assert_true(RT1.is_valid()) + RT1 = RecordType(name="RT1").insert() + assert RT1.is_valid() - RT2 = RecordType(name="RT2").add_property(RT1).insert() - assert_true(RT2.is_valid()) - assert_equal(RT2.get_property("RT1").datatype, "RT1") + RT2 = RecordType(name="RT2").add_property(RT1).insert() + assert RT2.is_valid() + assert RT2.get_property("RT1").datatype == "RT1" - RT2c = RecordType(name="RT2").retrieve() - assert_true(RT2c.is_valid()) - assert_equal(RT2c.get_property("RT1").datatype, "RT1") - - finally: - try: - RT2.delete() - except BaseException: - pass - try: - RT1.delete() - except BaseException: - pass + RT2c = RecordType(name="RT2").retrieve() + assert RT2c.is_valid() + assert RT2c.get_property("RT1").datatype == "RT1" def test_duplicate_properties(): - try: - p = Property( - name="SimpleTestProperty", - datatype=caosdb.DOUBLE).insert() - assert_true(p.is_valid()) - - rt = RecordType( - name="SimpleTestRecordType").add_property( - p, - datatype=caosdb.TEXT).add_property( - p, - datatype=caosdb.INTEGER).insert() - assert_true(rt.is_valid()) - finally: - try: - rt.delete() - except BaseException: - pass - try: - p.delete() - except BaseException: - pass + p = Property( + name="SimpleTestProperty", + datatype=caosdb.DOUBLE).insert() + assert p.is_valid() + + rt = RecordType( + name="SimpleTestRecordType").add_property(p, datatype=caosdb.TEXT).add_property(p, datatype=caosdb.INTEGER).insert() + assert rt.is_valid() diff --git a/tests/test_datetime.py b/tests/test_datetime.py index b6254d5d5930e2cce0f659a6013c9e499406e59d..3925370a8ca7c8a3bee1da8810c0d15e655cdd25 100644 --- a/tests/test_datetime.py +++ b/tests/test_datetime.py @@ -27,13 +27,19 @@ """ import pytest -from nose.tools import assert_true, assert_false # @UnresolvedImport import caosdb as h ''' some helpful functions ''' old_stored = None +def setup_function(function): + try: + h.execute_query("FIND ENTITY").delete() + except BaseException: + pass + + def update_rec(rec, datetime): global old_stored if old_stored == datetime: @@ -45,7 +51,7 @@ def update_rec(rec, datetime): def store(rec, datetime): update_rec(rec, datetime) - assert_true(rec.is_valid()) + assert rec.is_valid() return h.Record(id=rec.id).retrieve().get_property( "SimpleDateProperty").value @@ -54,22 +60,22 @@ def set_up_rec(): global old_stored old_stored = None p = h.Property(name="SimpleDateProperty", datatype="DATETIME").insert() - assert_true(p.is_valid()) + assert p.is_valid() rt = h.RecordType( name="SimpleRecordType").add_property( p, importance="OBLIGATORY").insert() - assert_true(rt.is_valid()) + assert rt.is_valid() rec = h.Record(name="SimpleRecord").add_parent(rt).add_property(p).insert() - assert_true(rec.is_valid()) + assert rec.is_valid() return rec def query_assertion(rec, stored, op, queried): update_rec(rec, stored) - assert_true(rec.is_valid()) + assert rec.is_valid() q = h.execute_query( "FIND RECORD SimpleRecord WHICH HAS A SimpleDateProperty" + @@ -82,1855 +88,1501 @@ def query_assertion(rec, stored, op, queried): def test_utcdatetime_storage(): - try: - rec = set_up_rec() - - utcs = [ - "2015-12-24T20:15:30", - "2015-12-24T20:15:30.123", - "-9999-01-01T00:00:00", - "-9999-01-01T00:00:00.0", - "9999-12-31T23:59:59", - "9999-12-31T23:59:59.999999999", - "0001-01-01T00:00:00", - "0001-01-01T00:00:00.0", - "-0001-12-31T23:59:59", - "-0001-12-31T23:59:59.999999"] - for d in utcs: - assert_true(d in store(rec, d)) - - finally: - try: - h.execute_query("FIND Simple*").delete() - except BaseException: - pass + rec = set_up_rec() + + utcs = [ + "2015-12-24T20:15:30", + "2015-12-24T20:15:30.123", + "-9999-01-01T00:00:00", + "-9999-01-01T00:00:00.0", + "9999-12-31T23:59:59", + "9999-12-31T23:59:59.999999999", + "0001-01-01T00:00:00", + "0001-01-01T00:00:00.0", + "-0001-12-31T23:59:59", + "-0001-12-31T23:59:59.999999"] + for d in utcs: + assert d in store(rec, d) def test_date_storage(): - try: - rec = set_up_rec() - - dates = [ - "2015-12-24", - "2015", - "2015-12", - "9999-12-31", - "9999-12", - "9999", - "-9999-01-01", - "-9999-01", - "-9999", - "0001-01-01", - "0001-01", - "0001", - "-0001-12-31", - "-0001-12", - "-0001"] - for d in dates: - print(d) - assert_true(d in store(rec, d)) - - finally: - try: - h.execute_query("FIND Simple*").delete() - except BaseException: - pass + rec = set_up_rec() + + dates = [ + "2015-12-24", + "2015", + "2015-12", + "9999-12-31", + "9999-12", + "9999", + "-9999-01-01", + "-9999-01", + "-9999", + "0001-01-01", + "0001-01", + "0001", + "-0001-12-31", + "-0001-12", + "-0001"] + for d in dates: + assert d in store(rec, d) @pytest.mark.slow def test_in_operator(): - try: - rec = set_up_rec() - - # Date YYYY-MM-ddThh:mm:ss - d = "2015-05-05T20:15:30" - assert_true(query_assertion(rec, d, " IN ", d)) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2015-05-05T20:15:30.123")) - assert_true(query_assertion(rec, d, " IN ", "2015-05-05T20:15:30")) - assert_true(query_assertion(rec, d, " IN ", "2015-05-05T20:15")) - assert_true(query_assertion(rec, d, " IN ", "2015-05-05T20")) - assert_true(query_assertion(rec, d, " IN ", "2015-05-05")) - assert_true(query_assertion(rec, d, " IN ", "2015-05")) - assert_true(query_assertion(rec, d, " IN ", "2015")) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2015-05-05T20:15:30.124")) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2015-05-05T20:15:31.123")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-05T20:15:31")) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2015-05-05T20:16:30.123")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-05T20:16:30")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-05T20:16")) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2015-05-05T21:15:30.123")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-05T21:15:30")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-05T21:15")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-05T21")) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2015-05-04T20:15:30.123")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-04T20:15:30")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-04T20:15")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-04T20")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-04")) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2015-04-05T20:15:30.123")) - assert_false(query_assertion(rec, d, " IN ", "2015-04-05T20:15:30")) - assert_false(query_assertion(rec, d, " IN ", "2015-04-05T20:15")) - assert_false(query_assertion(rec, d, " IN ", "2015-04-05T20")) - assert_false(query_assertion(rec, d, " IN ", "2015-04-05")) - assert_false(query_assertion(rec, d, " IN ", "2015-04")) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2014-05-05T20:15:30.123")) - assert_false(query_assertion(rec, d, " IN ", "2014-05-05T20:15:30")) - assert_false(query_assertion(rec, d, " IN ", "2014-05-05T20:15")) - assert_false(query_assertion(rec, d, " IN ", "2014-05-05T20")) - assert_false(query_assertion(rec, d, " IN ", "2014-05-05")) - assert_false(query_assertion(rec, d, " IN ", "2014-05")) - assert_false(query_assertion(rec, d, " IN ", "2014")) - - # Date YYYY-MM-ddThh:mm:ss.ns - d = "2015-05-05T20:15:30.123" - assert_true(query_assertion(rec, d, " IN ", d)) - assert_true(query_assertion(rec, d, " IN ", "2015-05-05T20:15:30.123")) - assert_true(query_assertion(rec, d, " IN ", "2015-05-05T20:15:30")) - assert_true(query_assertion(rec, d, " IN ", "2015-05-05T20:15")) - assert_true(query_assertion(rec, d, " IN ", "2015-05-05T20")) - assert_true(query_assertion(rec, d, " IN ", "2015-05-05")) - assert_true(query_assertion(rec, d, " IN ", "2015-05")) - assert_true(query_assertion(rec, d, " IN ", "2015")) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2015-05-05T20:15:30.124")) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2015-05-05T20:15:31.123")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-05T20:15:31")) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2015-05-05T20:16:30.123")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-05T20:16:30")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-05T20:16")) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2015-05-05T21:15:30.123")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-05T21:15:30")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-05T21:15")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-05T21")) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2015-05-04T20:15:30.123")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-04T20:15:30")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-04T20:15")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-04T20")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-04")) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2015-04-05T20:15:30.123")) - assert_false(query_assertion(rec, d, " IN ", "2015-04-05T20:15:30")) - assert_false(query_assertion(rec, d, " IN ", "2015-04-05T20:15")) - assert_false(query_assertion(rec, d, " IN ", "2015-04-05T20")) - assert_false(query_assertion(rec, d, " IN ", "2015-04-05")) - assert_false(query_assertion(rec, d, " IN ", "2015-04")) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2014-05-05T20:15:30.123")) - assert_false(query_assertion(rec, d, " IN ", "2014-05-05T20:15:30")) - assert_false(query_assertion(rec, d, " IN ", "2014-05-05T20:15")) - assert_false(query_assertion(rec, d, " IN ", "2014-05-05T20")) - assert_false(query_assertion(rec, d, " IN ", "2014-05-05")) - assert_false(query_assertion(rec, d, " IN ", "2014-05")) - assert_false(query_assertion(rec, d, " IN ", "2014")) - - # Date YYYY-MM-dd - d = "2015-01-01" - assert_true(query_assertion(rec, d, " IN ", d)) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2015-01-01T20:15:30.123")) - assert_false(query_assertion(rec, d, " IN ", "2015-01-01T20:15:30")) - assert_false(query_assertion(rec, d, " IN ", "2015-01-01T20:15")) - assert_false(query_assertion(rec, d, " IN ", "2015-01-01T20")) - assert_true(query_assertion(rec, d, " IN ", "2015-01-01")) - assert_true(query_assertion(rec, d, " IN ", "2015-01")) - assert_true(query_assertion(rec, d, " IN ", "2015")) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2015-02-01T20:15:30.123")) - assert_false(query_assertion(rec, d, " IN ", "2015-02-01T20:15:30")) - assert_false(query_assertion(rec, d, " IN ", "2015-02-01T20:15")) - assert_false(query_assertion(rec, d, " IN ", "2015-02-01T20")) - assert_false(query_assertion(rec, d, " IN ", "2015-02-01")) - assert_false(query_assertion(rec, d, " IN ", "2015-02")) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2016-01-01T20:15:30.123")) - assert_false(query_assertion(rec, d, " IN ", "2016-01-01T20:15:30")) - assert_false(query_assertion(rec, d, " IN ", "2016-01-01T20:15")) - assert_false(query_assertion(rec, d, " IN ", "2016-01-01T20")) - assert_false(query_assertion(rec, d, " IN ", "2016-01-01")) - assert_false(query_assertion(rec, d, " IN ", "2016-01")) - assert_false(query_assertion(rec, d, " IN ", "2016")) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2014-01-01T20:15:30.123")) - assert_false(query_assertion(rec, d, " IN ", "2014-01-01T20:15:30")) - assert_false(query_assertion(rec, d, " IN ", "2014-01-01T20:15")) - assert_false(query_assertion(rec, d, " IN ", "2014-01-01T20")) - assert_false(query_assertion(rec, d, " IN ", "2014-01-01")) - assert_false(query_assertion(rec, d, " IN ", "2014-01")) - assert_false(query_assertion(rec, d, " IN ", "2014")) - - # Date YYYY-MM - d = "2015-05" - assert_true(query_assertion(rec, d, " IN ", d)) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2015-05-01T20:15:30.123")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-01T20:15:30")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-01T20:15")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-01T20")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-01")) - assert_true(query_assertion(rec, d, " IN ", "2015")) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2015-06-01T20:15:30.123")) - assert_false(query_assertion(rec, d, " IN ", "2015-06-01T20:15:30")) - assert_false(query_assertion(rec, d, " IN ", "2015-06-01T20:15")) - assert_false(query_assertion(rec, d, " IN ", "2015-06-01T20")) - assert_false(query_assertion(rec, d, " IN ", "2015-06-01")) - assert_false(query_assertion(rec, d, " IN ", "2015-06")) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2015-04-01T20:15:30.123")) - assert_false(query_assertion(rec, d, " IN ", "2015-04-01T20:15:30")) - assert_false(query_assertion(rec, d, " IN ", "2015-04-01T20:15")) - assert_false(query_assertion(rec, d, " IN ", "2015-04-01T20")) - assert_false(query_assertion(rec, d, " IN ", "2015-04-01")) - assert_false(query_assertion(rec, d, " IN ", "2015-04")) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2016-05-01T20:15:30.123")) - assert_false(query_assertion(rec, d, " IN ", "2016-05-01T20:15:30")) - assert_false(query_assertion(rec, d, " IN ", "2016-05-01T20:15")) - assert_false(query_assertion(rec, d, " IN ", "2016-05-01T20")) - assert_false(query_assertion(rec, d, " IN ", "2016-05-01")) - assert_false(query_assertion(rec, d, " IN ", "2016-05")) - assert_false(query_assertion(rec, d, " IN ", "2016")) - - # Date YYYY - d = "2015" - assert_true(query_assertion(rec, d, " IN ", d)) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2015-05-01T20:15:30.123")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-01T20:15:30")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-01T20:15")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-01T20")) - assert_false(query_assertion(rec, d, " IN ", "2015-05-01")) - assert_false(query_assertion(rec, d, " IN ", "2015-05")) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2016-05-01T20:15:30.123")) - assert_false(query_assertion(rec, d, " IN ", "2016-05-01T20:15:30")) - assert_false(query_assertion(rec, d, " IN ", "2016-05-01T20:15")) - assert_false(query_assertion(rec, d, " IN ", "2016-05-01T20")) - assert_false(query_assertion(rec, d, " IN ", "2016-05-01")) - assert_false(query_assertion(rec, d, " IN ", "2016-05")) - assert_false(query_assertion(rec, d, " IN ", "2016")) - assert_false( - query_assertion( - rec, - d, - " IN ", - "2014-05-01T20:15:30.123")) - assert_false(query_assertion(rec, d, " IN ", "2014-05-01T20:15:30")) - assert_false(query_assertion(rec, d, " IN ", "2014-05-01T20:15")) - assert_false(query_assertion(rec, d, " IN ", "2014-05-01T20")) - assert_false(query_assertion(rec, d, " IN ", "2014-05-01")) - assert_false(query_assertion(rec, d, " IN ", "2014-05")) - assert_false(query_assertion(rec, d, " IN ", "2014")) - finally: - try: - h.execute_query("FIND Simple*").delete() - except BaseException: - pass + rec = set_up_rec() + + # Date YYYY-MM-ddThh:mm:ss + d = "2015-05-05T20:15:30" + assert query_assertion(rec, d, " IN ", d) + assert not query_assertion(rec, d, " IN ", "2015-05-05T20:15:30.123") + assert query_assertion(rec, d, " IN ", "2015-05-05T20:15:30") + assert query_assertion(rec, d, " IN ", "2015-05-05T20:15") + assert query_assertion(rec, d, " IN ", "2015-05-05T20") + assert query_assertion(rec, d, " IN ", "2015-05-05") + assert query_assertion(rec, d, " IN ", "2015-05") + assert query_assertion(rec, d, " IN ", "2015") + assert not query_assertion(rec, d, " IN ", "2015-05-05T20:15:30.124") + assert not query_assertion(rec, d, " IN ", "2015-05-05T20:15:31.123") + assert not query_assertion(rec, d, " IN ", "2015-05-05T20:15:31") + assert not query_assertion(rec, d, " IN ", "2015-05-05T20:16:30.123") + assert not query_assertion(rec, d, " IN ", "2015-05-05T20:16:30") + assert not query_assertion(rec, d, " IN ", "2015-05-05T20:16") + assert not query_assertion(rec, d, " IN ", "2015-05-05T21:15:30.123") + assert not query_assertion(rec, d, " IN ", "2015-05-05T21:15:30") + assert not query_assertion(rec, d, " IN ", "2015-05-05T21:15") + assert not query_assertion(rec, d, " IN ", "2015-05-05T21") + assert not query_assertion(rec, d, " IN ", "2015-05-04T20:15:30.123") + assert not query_assertion(rec, d, " IN ", "2015-05-04T20:15:30") + assert not query_assertion(rec, d, " IN ", "2015-05-04T20:15") + assert not query_assertion(rec, d, " IN ", "2015-05-04T20") + assert not query_assertion(rec, d, " IN ", "2015-05-04") + assert not query_assertion(rec, d, " IN ", "2015-04-05T20:15:30.123") + assert not query_assertion(rec, d, " IN ", "2015-04-05T20:15:30") + assert not query_assertion(rec, d, " IN ", "2015-04-05T20:15") + assert not query_assertion(rec, d, " IN ", "2015-04-05T20") + assert not query_assertion(rec, d, " IN ", "2015-04-05") + assert not query_assertion(rec, d, " IN ", "2015-04") + assert not query_assertion(rec, d, " IN ", "2014-05-05T20:15:30.123") + assert not query_assertion(rec, d, " IN ", "2014-05-05T20:15:30") + assert not query_assertion(rec, d, " IN ", "2014-05-05T20:15") + assert not query_assertion(rec, d, " IN ", "2014-05-05T20") + assert not query_assertion(rec, d, " IN ", "2014-05-05") + assert not query_assertion(rec, d, " IN ", "2014-05") + assert not query_assertion(rec, d, " IN ", "2014") + + # Date YYYY-MM-ddThh:mm:ss.ns + d = "2015-05-05T20:15:30.123" + assert query_assertion(rec, d, " IN ", d) + assert query_assertion(rec, d, " IN ", "2015-05-05T20:15:30.123") + assert query_assertion(rec, d, " IN ", "2015-05-05T20:15:30") + assert query_assertion(rec, d, " IN ", "2015-05-05T20:15") + assert query_assertion(rec, d, " IN ", "2015-05-05T20") + assert query_assertion(rec, d, " IN ", "2015-05-05") + assert query_assertion(rec, d, " IN ", "2015-05") + assert query_assertion(rec, d, " IN ", "2015") + assert not query_assertion(rec, d, " IN ", "2015-05-05T20:15:30.124") + assert not query_assertion(rec, d, " IN ", "2015-05-05T20:15:31.123") + assert not query_assertion(rec, d, " IN ", "2015-05-05T20:15:31") + assert not query_assertion(rec, d, " IN ", "2015-05-05T20:16:30.123") + assert not query_assertion(rec, d, " IN ", "2015-05-05T20:16:30") + assert not query_assertion(rec, d, " IN ", "2015-05-05T20:16") + assert not query_assertion(rec, d, " IN ", "2015-05-05T21:15:30.123") + assert not query_assertion(rec, d, " IN ", "2015-05-05T21:15:30") + assert not query_assertion(rec, d, " IN ", "2015-05-05T21:15") + assert not query_assertion(rec, d, " IN ", "2015-05-05T21") + assert not query_assertion(rec, d, " IN ", "2015-05-04T20:15:30.123") + assert not query_assertion(rec, d, " IN ", "2015-05-04T20:15:30") + assert not query_assertion(rec, d, " IN ", "2015-05-04T20:15") + assert not query_assertion(rec, d, " IN ", "2015-05-04T20") + assert not query_assertion(rec, d, " IN ", "2015-05-04") + assert not query_assertion(rec, d, " IN ", "2015-04-05T20:15:30.123") + assert not query_assertion(rec, d, " IN ", "2015-04-05T20:15:30") + assert not query_assertion(rec, d, " IN ", "2015-04-05T20:15") + assert not query_assertion(rec, d, " IN ", "2015-04-05T20") + assert not query_assertion(rec, d, " IN ", "2015-04-05") + assert not query_assertion(rec, d, " IN ", "2015-04") + assert not query_assertion(rec, d, " IN ", "2014-05-05T20:15:30.123") + assert not query_assertion(rec, d, " IN ", "2014-05-05T20:15:30") + assert not query_assertion(rec, d, " IN ", "2014-05-05T20:15") + assert not query_assertion(rec, d, " IN ", "2014-05-05T20") + assert not query_assertion(rec, d, " IN ", "2014-05-05") + assert not query_assertion(rec, d, " IN ", "2014-05") + assert not query_assertion(rec, d, " IN ", "2014") + + # Date YYYY-MM-dd + d = "2015-01-01" + assert query_assertion(rec, d, " IN ", d) + assert not query_assertion(rec, d, " IN ", "2015-01-01T20:15:30.123") + assert not query_assertion(rec, d, " IN ", "2015-01-01T20:15:30") + assert not query_assertion(rec, d, " IN ", "2015-01-01T20:15") + assert not query_assertion(rec, d, " IN ", "2015-01-01T20") + assert query_assertion(rec, d, " IN ", "2015-01-01") + assert query_assertion(rec, d, " IN ", "2015-01") + assert query_assertion(rec, d, " IN ", "2015") + assert not query_assertion(rec, d, " IN ", "2015-02-01T20:15:30.123") + assert not query_assertion(rec, d, " IN ", "2015-02-01T20:15:30") + assert not query_assertion(rec, d, " IN ", "2015-02-01T20:15") + assert not query_assertion(rec, d, " IN ", "2015-02-01T20") + assert not query_assertion(rec, d, " IN ", "2015-02-01") + assert not query_assertion(rec, d, " IN ", "2015-02") + assert not query_assertion(rec, d, " IN ", "2016-01-01T20:15:30.123") + assert not query_assertion(rec, d, " IN ", "2016-01-01T20:15:30") + assert not query_assertion(rec, d, " IN ", "2016-01-01T20:15") + assert not query_assertion(rec, d, " IN ", "2016-01-01T20") + assert not query_assertion(rec, d, " IN ", "2016-01-01") + assert not query_assertion(rec, d, " IN ", "2016-01") + assert not query_assertion(rec, d, " IN ", "2016") + assert not query_assertion(rec, d, " IN ", "2014-01-01T20:15:30.123") + assert not query_assertion(rec, d, " IN ", "2014-01-01T20:15:30") + assert not query_assertion(rec, d, " IN ", "2014-01-01T20:15") + assert not query_assertion(rec, d, " IN ", "2014-01-01T20") + assert not query_assertion(rec, d, " IN ", "2014-01-01") + assert not query_assertion(rec, d, " IN ", "2014-01") + assert not query_assertion(rec, d, " IN ", "2014") + + # Date YYYY-MM + d = "2015-05" + assert query_assertion(rec, d, " IN ", d) + assert not query_assertion(rec, d, " IN ", "2015-05-01T20:15:30.123") + assert not query_assertion(rec, d, " IN ", "2015-05-01T20:15:30") + assert not query_assertion(rec, d, " IN ", "2015-05-01T20:15") + assert not query_assertion(rec, d, " IN ", "2015-05-01T20") + assert not query_assertion(rec, d, " IN ", "2015-05-01") + assert query_assertion(rec, d, " IN ", "2015") + assert not query_assertion(rec, d, " IN ", "2015-06-01T20:15:30.123") + assert not query_assertion(rec, d, " IN ", "2015-06-01T20:15:30") + assert not query_assertion(rec, d, " IN ", "2015-06-01T20:15") + assert not query_assertion(rec, d, " IN ", "2015-06-01T20") + assert not query_assertion(rec, d, " IN ", "2015-06-01") + assert not query_assertion(rec, d, " IN ", "2015-06") + assert not query_assertion(rec, d, " IN ", "2015-04-01T20:15:30.123") + assert not query_assertion(rec, d, " IN ", "2015-04-01T20:15:30") + assert not query_assertion(rec, d, " IN ", "2015-04-01T20:15") + assert not query_assertion(rec, d, " IN ", "2015-04-01T20") + assert not query_assertion(rec, d, " IN ", "2015-04-01") + assert not query_assertion(rec, d, " IN ", "2015-04") + assert not query_assertion(rec, d, " IN ", "2016-05-01T20:15:30.123") + assert not query_assertion(rec, d, " IN ", "2016-05-01T20:15:30") + assert not query_assertion(rec, d, " IN ", "2016-05-01T20:15") + assert not query_assertion(rec, d, " IN ", "2016-05-01T20") + assert not query_assertion(rec, d, " IN ", "2016-05-01") + assert not query_assertion(rec, d, " IN ", "2016-05") + assert not query_assertion(rec, d, " IN ", "2016") + + # Date YYYY + d = "2015" + assert query_assertion(rec, d, " IN ", d) + assert not query_assertion(rec, d, " IN ", "2015-05-01T20:15:30.123") + assert not query_assertion(rec, d, " IN ", "2015-05-01T20:15:30") + assert not query_assertion(rec, d, " IN ", "2015-05-01T20:15") + assert not query_assertion(rec, d, " IN ", "2015-05-01T20") + assert not query_assertion(rec, d, " IN ", "2015-05-01") + assert not query_assertion(rec, d, " IN ", "2015-05") + assert not query_assertion(rec, d, " IN ", "2016-05-01T20:15:30.123") + assert not query_assertion(rec, d, " IN ", "2016-05-01T20:15:30") + assert not query_assertion(rec, d, " IN ", "2016-05-01T20:15") + assert not query_assertion(rec, d, " IN ", "2016-05-01T20") + assert not query_assertion(rec, d, " IN ", "2016-05-01") + assert not query_assertion(rec, d, " IN ", "2016-05") + assert not query_assertion(rec, d, " IN ", "2016") + assert not query_assertion(rec, d, " IN ", "2014-05-01T20:15:30.123") + assert not query_assertion(rec, d, " IN ", "2014-05-01T20:15:30") + assert not query_assertion(rec, d, " IN ", "2014-05-01T20:15") + assert not query_assertion(rec, d, " IN ", "2014-05-01T20") + assert not query_assertion(rec, d, " IN ", "2014-05-01") + assert not query_assertion(rec, d, " IN ", "2014-05") + assert not query_assertion(rec, d, " IN ", "2014") @pytest.mark.slow def test_not_in_operator(): - try: - rec = set_up_rec() - - # Date YYYY-MM-ddThh:mm:ss - d = "2015-05-05T20:15:30" - assert_false(query_assertion(rec, d, " NOT IN ", d)) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2015-05-05T20:15:30.123")) - assert_false( - query_assertion( - rec, - d, - " NOT IN ", - "2015-05-05T20:15:30")) - assert_false(query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15")) - assert_false(query_assertion(rec, d, " NOT IN ", "2015-05-05T20")) - assert_false(query_assertion(rec, d, " NOT IN ", "2015-05-05")) - assert_false(query_assertion(rec, d, " NOT IN ", "2015-05")) - assert_false(query_assertion(rec, d, " NOT IN ", "2015")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2015-05-05T20:15:30.124")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2015-05-05T20:15:31.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15:31")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2015-05-05T20:16:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-05T20:16:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-05T20:16")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2015-05-05T21:15:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-05T21:15:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-05T21:15")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2015-05-06T20:15:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-06T20:15:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-06T20:15")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-06T20")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-06")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2015-06-05T20:15:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-06-05T20:15:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-06-05T20:15")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-06-05T20")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-06-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-06")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2016-05-05T20:15:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05-05T20")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016")) - - # Date YYYY-MM-ddThh:mm:ss.ns - d = "2015-05-05T20:15:30.123" - assert_false(query_assertion(rec, d, " NOT IN ", d)) - assert_false( - query_assertion( - rec, - d, - " NOT IN ", - "2015-05-05T20:15:30.123")) - assert_false( - query_assertion( - rec, - d, - " NOT IN ", - "2015-05-05T20:15:30")) - assert_false(query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15")) - assert_false(query_assertion(rec, d, " NOT IN ", "2015-05-05T20")) - assert_false(query_assertion(rec, d, " NOT IN ", "2015-05-05")) - assert_false(query_assertion(rec, d, " NOT IN ", "2015-05")) - assert_false(query_assertion(rec, d, " NOT IN ", "2015")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2015-05-05T20:15:30.124")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2015-05-05T20:15:31.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15:31")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2015-05-05T20:16:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-05T20:16:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-05T20:16")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2015-05-05T21:15:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-05T21:15:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-05T21:15")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2015-05-06T20:15:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-06T20:15:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-06T20:15")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-06T20")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-06")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2015-06-05T20:15:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-06-05T20:15:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-06-05T20:15")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-06-05T20")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-06-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-06")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2016-05-05T20:15:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05-05T20")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016")) - - # Date YYYY-MM-dd - d = "2015-05-05" - assert_false(query_assertion(rec, d, " NOT IN ", d)) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2015-05-05T20:15:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-05T20")) - assert_false(query_assertion(rec, d, " NOT IN ", "2015-05-05")) - assert_false(query_assertion(rec, d, " NOT IN ", "2015-05")) - assert_false(query_assertion(rec, d, " NOT IN ", "2015")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2015-06-05T20:15:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-06-05T20:15:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-06-05T20:15")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-06-05T20")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-06-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-06")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2015-04-05T20:15:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-04-05T20:15:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-04-05T20:15")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-04-05T20")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-04-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-04")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2016-05-05T20:15:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05-05T20")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2014-05-05T20:15:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2014-05-05T20:15:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2014-05-05T20:15")) - assert_true(query_assertion(rec, d, " NOT IN ", "2014-05-05T20")) - assert_true(query_assertion(rec, d, " NOT IN ", "2014-05-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2014-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2014")) - - # Date YYYY-MM - d = "2015-05" - assert_false(query_assertion(rec, d, " NOT IN ", d)) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2015-05-05T20:15:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-05T20")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-05")) - assert_false(query_assertion(rec, d, " NOT IN ", "2015-05")) - assert_false(query_assertion(rec, d, " NOT IN ", "2015")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2015-06-05T20:15:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-06-05T20:15:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-06-05T20:15")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-06-05T20")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-06-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-06")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2015-04-05T20:15:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-04-05T20:15:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-04-05T20:15")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-04-05T20")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-04-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-04")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2016-05-05T20:15:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05-05T20")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2014-05-05T20:15:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2014-05-05T20:15:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2014-05-05T20:15")) - assert_true(query_assertion(rec, d, " NOT IN ", "2014-05-05T20")) - assert_true(query_assertion(rec, d, " NOT IN ", "2014-05-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2014-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2014")) - - # Date YYYY - d = "2015" - assert_false(query_assertion(rec, d, " NOT IN ", d)) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2015-05-05T20:15:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-05T20")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2015-05")) - assert_false(query_assertion(rec, d, " NOT IN ", "2015")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2016-05-05T20:15:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05-05T20")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2016")) - assert_true( - query_assertion( - rec, - d, - " NOT IN ", - "2014-05-05T20:15:30.123")) - assert_true(query_assertion(rec, d, " NOT IN ", "2014-05-05T20:15:30")) - assert_true(query_assertion(rec, d, " NOT IN ", "2014-05-05T20:15")) - assert_true(query_assertion(rec, d, " NOT IN ", "2014-05-05T20")) - assert_true(query_assertion(rec, d, " NOT IN ", "2014-05-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2014-05")) - assert_true(query_assertion(rec, d, " NOT IN ", "2014")) - finally: - try: - h.execute_query("FIND Simple*").delete() - except BaseException: - pass + rec = set_up_rec() + + # Date YYYY-MM-ddThh:mm:ss + d = "2015-05-05T20:15:30" + assert not query_assertion(rec, d, " NOT IN ", d) + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15:30.123") + assert not query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15:30") + assert not query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15") + assert not query_assertion(rec, d, " NOT IN ", "2015-05-05T20") + assert not query_assertion(rec, d, " NOT IN ", "2015-05-05") + assert not query_assertion(rec, d, " NOT IN ", "2015-05") + assert not query_assertion(rec, d, " NOT IN ", "2015") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15:30.124") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15:31.123") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15:31") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20:16:30.123") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20:16:30") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20:16") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T21:15:30.123") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T21:15:30") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T21:15") + assert query_assertion(rec, d, " NOT IN ", "2015-05-06T20:15:30.123") + assert query_assertion(rec, d, " NOT IN ", "2015-05-06T20:15:30") + assert query_assertion(rec, d, " NOT IN ", "2015-05-06T20:15") + assert query_assertion(rec, d, " NOT IN ", "2015-05-06T20") + assert query_assertion(rec, d, " NOT IN ", "2015-05-06") + assert query_assertion(rec, d, " NOT IN ", "2015-06-05T20:15:30.123") + assert query_assertion(rec, d, " NOT IN ", "2015-06-05T20:15:30") + assert query_assertion(rec, d, " NOT IN ", "2015-06-05T20:15") + assert query_assertion(rec, d, " NOT IN ", "2015-06-05T20") + assert query_assertion(rec, d, " NOT IN ", "2015-06-05") + assert query_assertion(rec, d, " NOT IN ", "2015-06") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15:30.123") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15:30") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05T20") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05") + assert query_assertion(rec, d, " NOT IN ", "2016-05") + assert query_assertion(rec, d, " NOT IN ", "2016") + + # Date YYYY-MM-ddThh:mm:ss.ns + d = "2015-05-05T20:15:30.123" + assert not query_assertion(rec, d, " NOT IN ", d) + assert not query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15:30.123") + assert not query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15:30") + assert not query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15") + assert not query_assertion(rec, d, " NOT IN ", "2015-05-05T20") + assert not query_assertion(rec, d, " NOT IN ", "2015-05-05") + assert not query_assertion(rec, d, " NOT IN ", "2015-05") + assert not query_assertion(rec, d, " NOT IN ", "2015") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15:30.124") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15:31.123") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15:31") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20:16:30.123") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20:16:30") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20:16") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T21:15:30.123") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T21:15:30") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T21:15") + assert query_assertion(rec, d, " NOT IN ", "2015-05-06T20:15:30.123") + assert query_assertion(rec, d, " NOT IN ", "2015-05-06T20:15:30") + assert query_assertion(rec, d, " NOT IN ", "2015-05-06T20:15") + assert query_assertion(rec, d, " NOT IN ", "2015-05-06T20") + assert query_assertion(rec, d, " NOT IN ", "2015-05-06") + assert query_assertion(rec, d, " NOT IN ", "2015-06-05T20:15:30.123") + assert query_assertion(rec, d, " NOT IN ", "2015-06-05T20:15:30") + assert query_assertion(rec, d, " NOT IN ", "2015-06-05T20:15") + assert query_assertion(rec, d, " NOT IN ", "2015-06-05T20") + assert query_assertion(rec, d, " NOT IN ", "2015-06-05") + assert query_assertion(rec, d, " NOT IN ", "2015-06") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15:30.123") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15:30") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05T20") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05") + assert query_assertion(rec, d, " NOT IN ", "2016-05") + assert query_assertion(rec, d, " NOT IN ", "2016") + + # Date YYYY-MM-dd + d = "2015-05-05" + assert not query_assertion(rec, d, " NOT IN ", d) + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15:30.123") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15:30") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20") + assert not query_assertion(rec, d, " NOT IN ", "2015-05-05") + assert not query_assertion(rec, d, " NOT IN ", "2015-05") + assert not query_assertion(rec, d, " NOT IN ", "2015") + assert query_assertion(rec, d, " NOT IN ", "2015-06-05T20:15:30.123") + assert query_assertion(rec, d, " NOT IN ", "2015-06-05T20:15:30") + assert query_assertion(rec, d, " NOT IN ", "2015-06-05T20:15") + assert query_assertion(rec, d, " NOT IN ", "2015-06-05T20") + assert query_assertion(rec, d, " NOT IN ", "2015-06-05") + assert query_assertion(rec, d, " NOT IN ", "2015-06") + assert query_assertion(rec, d, " NOT IN ", "2015-04-05T20:15:30.123") + assert query_assertion(rec, d, " NOT IN ", "2015-04-05T20:15:30") + assert query_assertion(rec, d, " NOT IN ", "2015-04-05T20:15") + assert query_assertion(rec, d, " NOT IN ", "2015-04-05T20") + assert query_assertion(rec, d, " NOT IN ", "2015-04-05") + assert query_assertion(rec, d, " NOT IN ", "2015-04") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15:30.123") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15:30") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05T20") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05") + assert query_assertion(rec, d, " NOT IN ", "2016-05") + assert query_assertion(rec, d, " NOT IN ", "2016") + assert query_assertion(rec, d, " NOT IN ", "2014-05-05T20:15:30.123") + assert query_assertion(rec, d, " NOT IN ", "2014-05-05T20:15:30") + assert query_assertion(rec, d, " NOT IN ", "2014-05-05T20:15") + assert query_assertion(rec, d, " NOT IN ", "2014-05-05T20") + assert query_assertion(rec, d, " NOT IN ", "2014-05-05") + assert query_assertion(rec, d, " NOT IN ", "2014-05") + assert query_assertion(rec, d, " NOT IN ", "2014") + + # Date YYYY-MM + d = "2015-05" + assert not query_assertion(rec, d, " NOT IN ", d) + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15:30.123") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15:30") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05") + assert not query_assertion(rec, d, " NOT IN ", "2015-05") + assert not query_assertion(rec, d, " NOT IN ", "2015") + assert query_assertion(rec, d, " NOT IN ", "2015-06-05T20:15:30.123") + assert query_assertion(rec, d, " NOT IN ", "2015-06-05T20:15:30") + assert query_assertion(rec, d, " NOT IN ", "2015-06-05T20:15") + assert query_assertion(rec, d, " NOT IN ", "2015-06-05T20") + assert query_assertion(rec, d, " NOT IN ", "2015-06-05") + assert query_assertion(rec, d, " NOT IN ", "2015-06") + assert query_assertion(rec, d, " NOT IN ", "2015-04-05T20:15:30.123") + assert query_assertion(rec, d, " NOT IN ", "2015-04-05T20:15:30") + assert query_assertion(rec, d, " NOT IN ", "2015-04-05T20:15") + assert query_assertion(rec, d, " NOT IN ", "2015-04-05T20") + assert query_assertion(rec, d, " NOT IN ", "2015-04-05") + assert query_assertion(rec, d, " NOT IN ", "2015-04") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15:30.123") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15:30") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05T20") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05") + assert query_assertion(rec, d, " NOT IN ", "2016-05") + assert query_assertion(rec, d, " NOT IN ", "2016") + assert query_assertion(rec, d, " NOT IN ", "2014-05-05T20:15:30.123") + assert query_assertion(rec, d, " NOT IN ", "2014-05-05T20:15:30") + assert query_assertion(rec, d, " NOT IN ", "2014-05-05T20:15") + assert query_assertion(rec, d, " NOT IN ", "2014-05-05T20") + assert query_assertion(rec, d, " NOT IN ", "2014-05-05") + assert query_assertion(rec, d, " NOT IN ", "2014-05") + assert query_assertion(rec, d, " NOT IN ", "2014") + + # Date YYYY + d = "2015" + assert not query_assertion(rec, d, " NOT IN ", d) + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15:30.123") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15:30") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20:15") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05T20") + assert query_assertion(rec, d, " NOT IN ", "2015-05-05") + assert query_assertion(rec, d, " NOT IN ", "2015-05") + assert not query_assertion(rec, d, " NOT IN ", "2015") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15:30.123") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15:30") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05T20:15") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05T20") + assert query_assertion(rec, d, " NOT IN ", "2016-05-05") + assert query_assertion(rec, d, " NOT IN ", "2016-05") + assert query_assertion(rec, d, " NOT IN ", "2016") + assert query_assertion(rec, d, " NOT IN ", "2014-05-05T20:15:30.123") + assert query_assertion(rec, d, " NOT IN ", "2014-05-05T20:15:30") + assert query_assertion(rec, d, " NOT IN ", "2014-05-05T20:15") + assert query_assertion(rec, d, " NOT IN ", "2014-05-05T20") + assert query_assertion(rec, d, " NOT IN ", "2014-05-05") + assert query_assertion(rec, d, " NOT IN ", "2014-05") + assert query_assertion(rec, d, " NOT IN ", "2014") @pytest.mark.slow def test_eq_operator(): - try: - rec = set_up_rec() - - # Date YYYY-MM-ddThh:mm:ss - d = "2015-05-05T20:15:30" - assert_true(query_assertion(rec, d, "=", d)) - assert_false(query_assertion(rec, d, "=", "2015-05-05T20:15:30.123")) - assert_true(query_assertion(rec, d, "=", "2015-05-05T20:15:30")) - assert_false(query_assertion(rec, d, "=", "2015-05-05T20:15")) - assert_false(query_assertion(rec, d, "=", "2015-05-05T20")) - assert_false(query_assertion(rec, d, "=", "2015-05-05")) - assert_false(query_assertion(rec, d, "=", "2015-05")) - assert_false(query_assertion(rec, d, "=", "2015")) - - # 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_false(query_assertion(rec, d, "=", "2015-05-05T20:15:30")) - assert_false(query_assertion(rec, d, "=", "2015-05-05T20:15")) - assert_false(query_assertion(rec, d, "=", "2015-05-05T20")) - assert_false(query_assertion(rec, d, "=", "2015-05-05")) - assert_false(query_assertion(rec, d, "=", "2015-05")) - assert_false(query_assertion(rec, d, "=", "2015")) - - # Date YYYY-MM-dd - d = "2015-01-01" - assert_true(query_assertion(rec, d, "=", d)) - assert_false(query_assertion(rec, d, "=", "2015-01-02")) - assert_false(query_assertion(rec, d, "=", "2015-01-01T20:15:30.123")) - assert_false(query_assertion(rec, d, "=", "2015-01-01T20:15:30")) - assert_false(query_assertion(rec, d, "=", "2015-01-01T20:15")) - assert_false(query_assertion(rec, d, "=", "2015-01-01T20")) - assert_false(query_assertion(rec, d, "=", "2015-01")) - assert_false(query_assertion(rec, d, "=", "2015")) - - # Date YYYY-MM - d = "2015-01" - assert_true(query_assertion(rec, d, "=", d)) - assert_false(query_assertion(rec, d, "=", "2015-02")) - assert_false(query_assertion(rec, d, "=", "2015-01-01T20:15:30.123")) - assert_false(query_assertion(rec, d, "=", "2015-01-01T20:15:30")) - assert_false(query_assertion(rec, d, "=", "2015-01-01T20:15")) - assert_false(query_assertion(rec, d, "=", "2015-01-01T20")) - assert_false(query_assertion(rec, d, "=", "2015-01-01")) - assert_false(query_assertion(rec, d, "=", "2015")) - - # Date YYYY - d = "2015" - assert_true(query_assertion(rec, d, "=", d)) - assert_false(query_assertion(rec, d, "=", "2016")) - assert_false(query_assertion(rec, d, "=", "2015-01-01T20:15:30.123")) - assert_false(query_assertion(rec, d, "=", "2015-01-01T20:15:30")) - assert_false(query_assertion(rec, d, "=", "2015-01-01T20:15")) - assert_false(query_assertion(rec, d, "=", "2015-01-01T20")) - assert_false(query_assertion(rec, d, "=", "2015-01-01")) - assert_false(query_assertion(rec, d, "=", "2015-01")) - - finally: - try: - h.execute_query("FIND Simple*").delete() - except BaseException: - pass + rec = set_up_rec() + + # Date YYYY-MM-ddThh:mm:ss + d = "2015-05-05T20:15:30" + assert query_assertion(rec, d, "=", d) + assert not query_assertion(rec, d, "=", "2015-05-05T20:15:30.123") + assert query_assertion(rec, d, "=", "2015-05-05T20:15:30") + assert not query_assertion(rec, d, "=", "2015-05-05T20:15") + assert not query_assertion(rec, d, "=", "2015-05-05T20") + assert not query_assertion(rec, d, "=", "2015-05-05") + assert not query_assertion(rec, d, "=", "2015-05") + assert not query_assertion(rec, d, "=", "2015") + + # Date YYYY-MM-ddThh:mm:ss.ns + d = "2015-05-05T20:15:30.123" + assert query_assertion(rec, d, "=", d) + assert query_assertion(rec, d, "=", "2015-05-05T20:15:30.123") + assert not query_assertion(rec, d, "=", "2015-05-05T20:15:30") + assert not query_assertion(rec, d, "=", "2015-05-05T20:15") + assert not query_assertion(rec, d, "=", "2015-05-05T20") + assert not query_assertion(rec, d, "=", "2015-05-05") + assert not query_assertion(rec, d, "=", "2015-05") + assert not query_assertion(rec, d, "=", "2015") + + # Date YYYY-MM-dd + d = "2015-01-01" + assert query_assertion(rec, d, "=", d) + assert not query_assertion(rec, d, "=", "2015-01-02") + assert not query_assertion(rec, d, "=", "2015-01-01T20:15:30.123") + assert not query_assertion(rec, d, "=", "2015-01-01T20:15:30") + assert not query_assertion(rec, d, "=", "2015-01-01T20:15") + assert not query_assertion(rec, d, "=", "2015-01-01T20") + assert not query_assertion(rec, d, "=", "2015-01") + assert not query_assertion(rec, d, "=", "2015") + + # Date YYYY-MM + d = "2015-01" + assert query_assertion(rec, d, "=", d) + assert not query_assertion(rec, d, "=", "2015-02") + assert not query_assertion(rec, d, "=", "2015-01-01T20:15:30.123") + assert not query_assertion(rec, d, "=", "2015-01-01T20:15:30") + assert not query_assertion(rec, d, "=", "2015-01-01T20:15") + assert not query_assertion(rec, d, "=", "2015-01-01T20") + assert not query_assertion(rec, d, "=", "2015-01-01") + assert not query_assertion(rec, d, "=", "2015") + + # Date YYYY + d = "2015" + assert query_assertion(rec, d, "=", d) + assert not query_assertion(rec, d, "=", "2016") + assert not query_assertion(rec, d, "=", "2015-01-01T20:15:30.123") + assert not query_assertion(rec, d, "=", "2015-01-01T20:15:30") + assert not query_assertion(rec, d, "=", "2015-01-01T20:15") + assert not query_assertion(rec, d, "=", "2015-01-01T20") + assert not query_assertion(rec, d, "=", "2015-01-01") + assert not query_assertion(rec, d, "=", "2015-01") @pytest.mark.slow def test_neq_operator(): - try: - rec = set_up_rec() - - # Date YYYY-MM-ddThh:mm:ss - d = "2015-05-05T20:15:30" - assert_false(query_assertion(rec, d, "!=", d)) - assert_true(query_assertion(rec, d, "!=", "2015-05-05T20:15:31")) - assert_false(query_assertion(rec, d, "!=", "2015-05-05T20:15:30.123")) - assert_false(query_assertion(rec, d, "!=", "2015-05-05T20:15:30")) - assert_false(query_assertion(rec, d, "!=", "2015-05-05T20:15")) - assert_false(query_assertion(rec, d, "!=", "2015-05-05T20")) - assert_false(query_assertion(rec, d, "!=", "2015-05-05")) - assert_false(query_assertion(rec, d, "!=", "2015-05")) - assert_false(query_assertion(rec, d, "!=", "2015")) - - # Date YYYY-MM-ddThh:mm:ss.ns - d = "2015-05-05T20:15:30.123" - assert_false(query_assertion(rec, d, "!=", d)) - assert_true(query_assertion(rec, d, "!=", "2015-05-05T20:15:30.124")) - assert_false(query_assertion(rec, d, "!=", "2015-05-05T20:15:30.123")) - assert_false(query_assertion(rec, d, "!=", "2015-05-05T20:15:30")) - assert_false(query_assertion(rec, d, "!=", "2015-05-05T20:15")) - assert_false(query_assertion(rec, d, "!=", "2015-05-05T20")) - assert_false(query_assertion(rec, d, "!=", "2015-05-05")) - assert_false(query_assertion(rec, d, "!=", "2015-05")) - assert_false(query_assertion(rec, d, "!=", "2015")) - - # Date YYYY-MM-dd - d = "2015-01-01" - assert_false(query_assertion(rec, d, "!=", d)) - assert_true(query_assertion(rec, d, "!=", "2015-01-02")) - assert_false(query_assertion(rec, d, "!=", "2015-01-01T20:15:30.123")) - assert_false(query_assertion(rec, d, "!=", "2015-01-01T20:15:30")) - assert_false(query_assertion(rec, d, "!=", "2015-01-01T20:15")) - assert_false(query_assertion(rec, d, "!=", "2015-01-01T20")) - assert_false(query_assertion(rec, d, "!=", "2015-01")) - assert_false(query_assertion(rec, d, "!=", "2015")) - - # Date YYYY-MM - d = "2015-01" - assert_false(query_assertion(rec, d, "!=", d)) - assert_true(query_assertion(rec, d, "!=", "2015-02")) - assert_false(query_assertion(rec, d, "!=", "2015-01-01T20:15:30.123")) - assert_false(query_assertion(rec, d, "!=", "2015-01-01T20:15:30")) - assert_false(query_assertion(rec, d, "!=", "2015-01-01T20:15")) - assert_false(query_assertion(rec, d, "!=", "2015-01-01T20")) - assert_false(query_assertion(rec, d, "!=", "2015-01-01")) - assert_false(query_assertion(rec, d, "!=", "2015")) - - # Date YYYY - d = "2015" - assert_false(query_assertion(rec, d, "!=", d)) - assert_true(query_assertion(rec, d, "!=", "2016")) - assert_false(query_assertion(rec, d, "!=", "2015-01-01T20:15:30.123")) - assert_false(query_assertion(rec, d, "!=", "2015-01-01T20:15:30")) - assert_false(query_assertion(rec, d, "!=", "2015-01-01T20:15")) - assert_false(query_assertion(rec, d, "!=", "2015-01-01T20")) - assert_false(query_assertion(rec, d, "!=", "2015-01-01")) - assert_false(query_assertion(rec, d, "!=", "2015-01")) - - finally: - try: - h.execute_query("FIND Simple*").delete() - except BaseException: - pass + rec = set_up_rec() + + # Date YYYY-MM-ddThh:mm:ss + d = "2015-05-05T20:15:30" + assert not query_assertion(rec, d, "!=", d) + assert query_assertion(rec, d, "!=", "2015-05-05T20:15:31") + assert not query_assertion(rec, d, "!=", "2015-05-05T20:15:30.123") + assert not query_assertion(rec, d, "!=", "2015-05-05T20:15:30") + assert not query_assertion(rec, d, "!=", "2015-05-05T20:15") + assert not query_assertion(rec, d, "!=", "2015-05-05T20") + assert not query_assertion(rec, d, "!=", "2015-05-05") + assert not query_assertion(rec, d, "!=", "2015-05") + assert not query_assertion(rec, d, "!=", "2015") + + # Date YYYY-MM-ddThh:mm:ss.ns + d = "2015-05-05T20:15:30.123" + assert not query_assertion(rec, d, "!=", d) + assert query_assertion(rec, d, "!=", "2015-05-05T20:15:30.124") + assert not query_assertion(rec, d, "!=", "2015-05-05T20:15:30.123") + assert not query_assertion(rec, d, "!=", "2015-05-05T20:15:30") + assert not query_assertion(rec, d, "!=", "2015-05-05T20:15") + assert not query_assertion(rec, d, "!=", "2015-05-05T20") + assert not query_assertion(rec, d, "!=", "2015-05-05") + assert not query_assertion(rec, d, "!=", "2015-05") + assert not query_assertion(rec, d, "!=", "2015") + + # Date YYYY-MM-dd + d = "2015-01-01" + assert not query_assertion(rec, d, "!=", d) + assert query_assertion(rec, d, "!=", "2015-01-02") + assert not query_assertion(rec, d, "!=", "2015-01-01T20:15:30.123") + assert not query_assertion(rec, d, "!=", "2015-01-01T20:15:30") + assert not query_assertion(rec, d, "!=", "2015-01-01T20:15") + assert not query_assertion(rec, d, "!=", "2015-01-01T20") + assert not query_assertion(rec, d, "!=", "2015-01") + assert not query_assertion(rec, d, "!=", "2015") + + # Date YYYY-MM + d = "2015-01" + assert not query_assertion(rec, d, "!=", d) + assert query_assertion(rec, d, "!=", "2015-02") + assert not query_assertion(rec, d, "!=", "2015-01-01T20:15:30.123") + assert not query_assertion(rec, d, "!=", "2015-01-01T20:15:30") + assert not query_assertion(rec, d, "!=", "2015-01-01T20:15") + assert not query_assertion(rec, d, "!=", "2015-01-01T20") + assert not query_assertion(rec, d, "!=", "2015-01-01") + assert not query_assertion(rec, d, "!=", "2015") + + # Date YYYY + d = "2015" + assert not query_assertion(rec, d, "!=", d) + assert query_assertion(rec, d, "!=", "2016") + assert not query_assertion(rec, d, "!=", "2015-01-01T20:15:30.123") + assert not query_assertion(rec, d, "!=", "2015-01-01T20:15:30") + assert not query_assertion(rec, d, "!=", "2015-01-01T20:15") + assert not query_assertion(rec, d, "!=", "2015-01-01T20") + assert not query_assertion(rec, d, "!=", "2015-01-01") + assert not query_assertion(rec, d, "!=", "2015-01") @pytest.mark.slow def test_smaller_operator(): - try: - rec = set_up_rec() - - # Date YYYY-MM-ddThh:mm:ss - d = "2015-05-05T20:15:30" - assert_false(query_assertion(rec, d, "<", d)) - assert_false(query_assertion(rec, d, "<", "2015-05-05T20:15:30.123")) - assert_false(query_assertion(rec, d, "<", "2015-05-05T20:15:30")) - assert_false(query_assertion(rec, d, "<", "2015-05-05T20:15")) - assert_false(query_assertion(rec, d, "<", "2015-05-05T20")) - assert_false(query_assertion(rec, d, "<", "2015-05-05")) - assert_false(query_assertion(rec, d, "<", "2015-05")) - assert_false(query_assertion(rec, d, "<", "2015")) - assert_false(query_assertion(rec, d, "<", "2015-05-05T20:15:30.122")) - assert_false(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-ddThh:mm:ss.ns - d = "2015-05-05T20:15:30.123" - assert_false(query_assertion(rec, d, "<", d)) - assert_false(query_assertion(rec, d, "<", "2015-05-05T20:15:30.123")) - assert_false(query_assertion(rec, d, "<", "2015-05-05T20:15:30")) - assert_false(query_assertion(rec, d, "<", "2015-05-05T20:15")) - assert_false(query_assertion(rec, d, "<", "2015-05-05T20")) - assert_false(query_assertion(rec, d, "<", "2015-05-05")) - assert_false(query_assertion(rec, d, "<", "2015-05")) - assert_false(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_false(query_assertion(rec, d, "<", d)) - assert_false(query_assertion(rec, d, "<", "2015-05-05T20:15:30.123")) - assert_false(query_assertion(rec, d, "<", "2015-05-05T20:15:30")) - assert_false(query_assertion(rec, d, "<", "2015-05-05T20:15")) - assert_false(query_assertion(rec, d, "<", "2015-05-05T20")) - assert_false(query_assertion(rec, d, "<", "2015-05-05")) - assert_false(query_assertion(rec, d, "<", "2015-05")) - assert_false(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_false(query_assertion(rec, d, "<", d)) - assert_false(query_assertion(rec, d, "<", "2015-05-05T20:15:30.123")) - assert_false(query_assertion(rec, d, "<", "2015-05-05T20:15:30")) - assert_false(query_assertion(rec, d, "<", "2015-05-05T20:15")) - assert_false(query_assertion(rec, d, "<", "2015-05-05T20")) - assert_false(query_assertion(rec, d, "<", "2015-05-05")) - assert_false(query_assertion(rec, d, "<", "2015-05")) - assert_false(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_false(query_assertion(rec, d, "<", d)) - assert_false(query_assertion(rec, d, "<", "2015-05-05T20:15:30.123")) - assert_false(query_assertion(rec, d, "<", "2015-05-05T20:15:30")) - assert_false(query_assertion(rec, d, "<", "2015-05-05T20:15")) - assert_false(query_assertion(rec, d, "<", "2015-05-05T20")) - assert_false(query_assertion(rec, d, "<", "2015-05-05")) - assert_false(query_assertion(rec, d, "<", "2015-05")) - assert_false(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 + rec = set_up_rec() + + # Date YYYY-MM-ddThh:mm:ss + d = "2015-05-05T20:15:30" + assert not query_assertion(rec, d, "<", d) + assert not query_assertion(rec, d, "<", "2015-05-05T20:15:30.123") + assert not query_assertion(rec, d, "<", "2015-05-05T20:15:30") + assert not query_assertion(rec, d, "<", "2015-05-05T20:15") + assert not query_assertion(rec, d, "<", "2015-05-05T20") + assert not query_assertion(rec, d, "<", "2015-05-05") + assert not query_assertion(rec, d, "<", "2015-05") + assert not query_assertion(rec, d, "<", "2015") + assert not query_assertion(rec, d, "<", "2015-05-05T20:15:30.122") + assert not query_assertion(rec, d, "<", "2015-05-05T20:15:30.124") + assert not query_assertion(rec, d, "<", "2015-05-05T20:15:29.123") + assert not query_assertion(rec, d, "<", "2015-05-05T20:15:29") + assert query_assertion(rec, d, "<", "2015-05-05T20:15:31.123") + assert query_assertion(rec, d, "<", "2015-05-05T20:15:31") + assert not query_assertion(rec, d, "<", "2015-05-05T20:14:30.123") + assert not query_assertion(rec, d, "<", "2015-05-05T20:14:30") + assert not query_assertion(rec, d, "<", "2015-05-05T20:14") + assert query_assertion(rec, d, "<", "2015-05-05T20:16:30.123") + assert query_assertion(rec, d, "<", "2015-05-05T20:16:30") + assert query_assertion(rec, d, "<", "2015-05-05T20:16") + assert not query_assertion(rec, d, "<", "2015-05-05T19:15:30.123") + assert not query_assertion(rec, d, "<", "2015-05-05T19:15:30") + assert not query_assertion(rec, d, "<", "2015-05-05T19:15") + assert not query_assertion(rec, d, "<", "2015-05-05T19") + assert query_assertion(rec, d, "<", "2015-05-05T21:15:30.123") + assert query_assertion(rec, d, "<", "2015-05-05T21:15:30") + assert query_assertion(rec, d, "<", "2015-05-05T21:15") + assert query_assertion(rec, d, "<", "2015-05-05T21") + assert not query_assertion(rec, d, "<", "2015-05-04T20:15:30.123") + assert not query_assertion(rec, d, "<", "2015-05-04T20:15:30") + assert not query_assertion(rec, d, "<", "2015-05-04T20:15") + assert not query_assertion(rec, d, "<", "2015-05-04T20") + assert not query_assertion(rec, d, "<", "2015-05-04") + assert query_assertion(rec, d, "<", "2015-05-06T20:15:30.123") + assert query_assertion(rec, d, "<", "2015-05-06T20:15:30") + assert query_assertion(rec, d, "<", "2015-05-06T20:15") + assert query_assertion(rec, d, "<", "2015-05-06T20") + assert query_assertion(rec, d, "<", "2015-05-06") + assert not query_assertion(rec, d, "<", "2015-04-05T20:15:30.123") + assert not query_assertion(rec, d, "<", "2015-04-05T20:15:30") + assert not query_assertion(rec, d, "<", "2015-04-05T20:15") + assert not query_assertion(rec, d, "<", "2015-04-05T20") + assert not query_assertion(rec, d, "<", "2015-04-05") + assert not query_assertion(rec, d, "<", "2015-04") + assert query_assertion(rec, d, "<", "2015-06-05T20:15:30.123") + assert query_assertion(rec, d, "<", "2015-06-05T20:15:30") + assert query_assertion(rec, d, "<", "2015-06-05T20:15") + assert query_assertion(rec, d, "<", "2015-06-05T20") + assert query_assertion(rec, d, "<", "2015-06-05") + assert query_assertion(rec, d, "<", "2015-06") + assert not query_assertion(rec, d, "<", "2014-05-05T20:15:30.123") + assert not query_assertion(rec, d, "<", "2014-05-05T20:15:30") + assert not query_assertion(rec, d, "<", "2014-05-05T20:15") + assert not query_assertion(rec, d, "<", "2014-05-05T20") + assert not query_assertion(rec, d, "<", "2014-05-05") + assert not query_assertion(rec, d, "<", "2014-05") + assert not query_assertion(rec, d, "<", "2014") + assert query_assertion(rec, d, "<", "2016-05-05T20:15:30.123") + assert query_assertion(rec, d, "<", "2016-05-05T20:15:30") + assert query_assertion(rec, d, "<", "2016-05-05T20:15") + assert query_assertion(rec, d, "<", "2016-05-05T20") + assert query_assertion(rec, d, "<", "2016-05-05") + assert query_assertion(rec, d, "<", "2016-05") + assert query_assertion(rec, d, "<", "2016") + + # Date YYYY-MM-ddThh:mm:ss.ns + d = "2015-05-05T20:15:30.123" + assert not query_assertion(rec, d, "<", d) + assert not query_assertion(rec, d, "<", "2015-05-05T20:15:30.123") + assert not query_assertion(rec, d, "<", "2015-05-05T20:15:30") + assert not query_assertion(rec, d, "<", "2015-05-05T20:15") + assert not query_assertion(rec, d, "<", "2015-05-05T20") + assert not query_assertion(rec, d, "<", "2015-05-05") + assert not query_assertion(rec, d, "<", "2015-05") + assert not query_assertion(rec, d, "<", "2015") + assert not query_assertion(rec, d, "<", "2015-05-05T20:15:30.122") + assert query_assertion(rec, d, "<", "2015-05-05T20:15:30.124") + assert not query_assertion(rec, d, "<", "2015-05-05T20:15:29.123") + assert not query_assertion(rec, d, "<", "2015-05-05T20:15:29") + assert query_assertion(rec, d, "<", "2015-05-05T20:15:31.123") + assert query_assertion(rec, d, "<", "2015-05-05T20:15:31") + assert not query_assertion(rec, d, "<", "2015-05-05T20:14:30.123") + assert not query_assertion(rec, d, "<", "2015-05-05T20:14:30") + assert not query_assertion(rec, d, "<", "2015-05-05T20:14") + assert query_assertion(rec, d, "<", "2015-05-05T20:16:30.123") + assert query_assertion(rec, d, "<", "2015-05-05T20:16:30") + assert query_assertion(rec, d, "<", "2015-05-05T20:16") + assert not query_assertion(rec, d, "<", "2015-05-05T19:15:30.123") + assert not query_assertion(rec, d, "<", "2015-05-05T19:15:30") + assert not query_assertion(rec, d, "<", "2015-05-05T19:15") + assert not query_assertion(rec, d, "<", "2015-05-05T19") + assert query_assertion(rec, d, "<", "2015-05-05T21:15:30.123") + assert query_assertion(rec, d, "<", "2015-05-05T21:15:30") + assert query_assertion(rec, d, "<", "2015-05-05T21:15") + assert query_assertion(rec, d, "<", "2015-05-05T21") + assert not query_assertion(rec, d, "<", "2015-05-04T20:15:30.123") + assert not query_assertion(rec, d, "<", "2015-05-04T20:15:30") + assert not query_assertion(rec, d, "<", "2015-05-04T20:15") + assert not query_assertion(rec, d, "<", "2015-05-04T20") + assert not query_assertion(rec, d, "<", "2015-05-04") + assert query_assertion(rec, d, "<", "2015-05-06T20:15:30.123") + assert query_assertion(rec, d, "<", "2015-05-06T20:15:30") + assert query_assertion(rec, d, "<", "2015-05-06T20:15") + assert query_assertion(rec, d, "<", "2015-05-06T20") + assert query_assertion(rec, d, "<", "2015-05-06") + assert not query_assertion(rec, d, "<", "2015-04-05T20:15:30.123") + assert not query_assertion(rec, d, "<", "2015-04-05T20:15:30") + assert not query_assertion(rec, d, "<", "2015-04-05T20:15") + assert not query_assertion(rec, d, "<", "2015-04-05T20") + assert not query_assertion(rec, d, "<", "2015-04-05") + assert not query_assertion(rec, d, "<", "2015-04") + assert query_assertion(rec, d, "<", "2015-06-05T20:15:30.123") + assert query_assertion(rec, d, "<", "2015-06-05T20:15:30") + assert query_assertion(rec, d, "<", "2015-06-05T20:15") + assert query_assertion(rec, d, "<", "2015-06-05T20") + assert query_assertion(rec, d, "<", "2015-06-05") + assert query_assertion(rec, d, "<", "2015-06") + assert not query_assertion(rec, d, "<", "2014-05-05T20:15:30.123") + assert not query_assertion(rec, d, "<", "2014-05-05T20:15:30") + assert not query_assertion(rec, d, "<", "2014-05-05T20:15") + assert not query_assertion(rec, d, "<", "2014-05-05T20") + assert not query_assertion(rec, d, "<", "2014-05-05") + assert not query_assertion(rec, d, "<", "2014-05") + assert not query_assertion(rec, d, "<", "2014") + assert query_assertion(rec, d, "<", "2016-05-05T20:15:30.123") + assert query_assertion(rec, d, "<", "2016-05-05T20:15:30") + assert query_assertion(rec, d, "<", "2016-05-05T20:15") + assert query_assertion(rec, d, "<", "2016-05-05T20") + assert query_assertion(rec, d, "<", "2016-05-05") + assert query_assertion(rec, d, "<", "2016-05") + assert query_assertion(rec, d, "<", "2016") + + # Date YYYY-MM-dd + d = "2015-05-05" + assert not query_assertion(rec, d, "<", d) + assert not query_assertion(rec, d, "<", "2015-05-05T20:15:30.123") + assert not query_assertion(rec, d, "<", "2015-05-05T20:15:30") + assert not query_assertion(rec, d, "<", "2015-05-05T20:15") + assert not query_assertion(rec, d, "<", "2015-05-05T20") + assert not query_assertion(rec, d, "<", "2015-05-05") + assert not query_assertion(rec, d, "<", "2015-05") + assert not query_assertion(rec, d, "<", "2015") + assert not query_assertion(rec, d, "<", "2015-05-04T20:15:30.123") + assert not query_assertion(rec, d, "<", "2015-05-04T20:15:30") + assert not query_assertion(rec, d, "<", "2015-05-04T20:15") + assert not query_assertion(rec, d, "<", "2015-05-04T20") + assert not query_assertion(rec, d, "<", "2015-05-04") + assert query_assertion(rec, d, "<", "2015-05-06T20:15:30.123") + assert query_assertion(rec, d, "<", "2015-05-06T20:15:30") + assert query_assertion(rec, d, "<", "2015-05-06T20:15") + assert query_assertion(rec, d, "<", "2015-05-06T20") + assert query_assertion(rec, d, "<", "2015-05-06") + assert not query_assertion(rec, d, "<", "2015-04-05T20:15:30.123") + assert not query_assertion(rec, d, "<", "2015-04-05T20:15:30") + assert not query_assertion(rec, d, "<", "2015-04-05T20:15") + assert not query_assertion(rec, d, "<", "2015-04-05T20") + assert not query_assertion(rec, d, "<", "2015-04-05") + assert not query_assertion(rec, d, "<", "2015-04") + assert query_assertion(rec, d, "<", "2015-06-05T20:15:30.123") + assert query_assertion(rec, d, "<", "2015-06-05T20:15:30") + assert query_assertion(rec, d, "<", "2015-06-05T20:15") + assert query_assertion(rec, d, "<", "2015-06-05T20") + assert query_assertion(rec, d, "<", "2015-06-05") + assert query_assertion(rec, d, "<", "2015-06") + assert not query_assertion(rec, d, "<", "2014-05-05T20:15:30.123") + assert not query_assertion(rec, d, "<", "2014-05-05T20:15:30") + assert not query_assertion(rec, d, "<", "2014-05-05T20:15") + assert not query_assertion(rec, d, "<", "2014-05-05T20") + assert not query_assertion(rec, d, "<", "2014-05-05") + assert not query_assertion(rec, d, "<", "2014-05") + assert not query_assertion(rec, d, "<", "2014") + assert query_assertion(rec, d, "<", "2016-05-05T20:15:30.123") + assert query_assertion(rec, d, "<", "2016-05-05T20:15:30") + assert query_assertion(rec, d, "<", "2016-05-05T20:15") + assert query_assertion(rec, d, "<", "2016-05-05T20") + assert query_assertion(rec, d, "<", "2016-05-05") + assert query_assertion(rec, d, "<", "2016-05") + assert query_assertion(rec, d, "<", "2016") + + # Date YYYY-MM + d = "2015-05" + assert not query_assertion(rec, d, "<", d) + assert not query_assertion(rec, d, "<", "2015-05-05T20:15:30.123") + assert not query_assertion(rec, d, "<", "2015-05-05T20:15:30") + assert not query_assertion(rec, d, "<", "2015-05-05T20:15") + assert not query_assertion(rec, d, "<", "2015-05-05T20") + assert not query_assertion(rec, d, "<", "2015-05-05") + assert not query_assertion(rec, d, "<", "2015-05") + assert not query_assertion(rec, d, "<", "2015") + assert not query_assertion(rec, d, "<", "2015-04-05T20:15:30.123") + assert not query_assertion(rec, d, "<", "2015-04-05T20:15:30") + assert not query_assertion(rec, d, "<", "2015-04-05T20:15") + assert not query_assertion(rec, d, "<", "2015-04-05T20") + assert not query_assertion(rec, d, "<", "2015-04-05") + assert not query_assertion(rec, d, "<", "2015-04") + assert query_assertion(rec, d, "<", "2015-06-05T20:15:30.123") + assert query_assertion(rec, d, "<", "2015-06-05T20:15:30") + assert query_assertion(rec, d, "<", "2015-06-05T20:15") + assert query_assertion(rec, d, "<", "2015-06-05T20") + assert query_assertion(rec, d, "<", "2015-06-05") + assert query_assertion(rec, d, "<", "2015-06") + assert not query_assertion(rec, d, "<", "2014-05-05T20:15:30.123") + assert not query_assertion(rec, d, "<", "2014-05-05T20:15:30") + assert not query_assertion(rec, d, "<", "2014-05-05T20:15") + assert not query_assertion(rec, d, "<", "2014-05-05T20") + assert not query_assertion(rec, d, "<", "2014-05-05") + assert not query_assertion(rec, d, "<", "2014-05") + assert not query_assertion(rec, d, "<", "2014") + assert query_assertion(rec, d, "<", "2016-05-05T20:15:30.123") + assert query_assertion(rec, d, "<", "2016-05-05T20:15:30") + assert query_assertion(rec, d, "<", "2016-05-05T20:15") + assert query_assertion(rec, d, "<", "2016-05-05T20") + assert query_assertion(rec, d, "<", "2016-05-05") + assert query_assertion(rec, d, "<", "2016-05") + assert query_assertion(rec, d, "<", "2016") + + # Date YYYY + d = "2015" + assert not query_assertion(rec, d, "<", d) + assert not query_assertion(rec, d, "<", "2015-05-05T20:15:30.123") + assert not query_assertion(rec, d, "<", "2015-05-05T20:15:30") + assert not query_assertion(rec, d, "<", "2015-05-05T20:15") + assert not query_assertion(rec, d, "<", "2015-05-05T20") + assert not query_assertion(rec, d, "<", "2015-05-05") + assert not query_assertion(rec, d, "<", "2015-05") + assert not query_assertion(rec, d, "<", "2015") + assert not query_assertion(rec, d, "<", "2014-05-05T20:15:30.123") + assert not query_assertion(rec, d, "<", "2014-05-05T20:15:30") + assert not query_assertion(rec, d, "<", "2014-05-05T20:15") + assert not query_assertion(rec, d, "<", "2014-05-05T20") + assert not query_assertion(rec, d, "<", "2014-05-05") + assert not query_assertion(rec, d, "<", "2014-05") + assert not query_assertion(rec, d, "<", "2014") + assert query_assertion(rec, d, "<", "2016-05-05T20:15:30.123") + assert query_assertion(rec, d, "<", "2016-05-05T20:15:30") + assert query_assertion(rec, d, "<", "2016-05-05T20:15") + assert query_assertion(rec, d, "<", "2016-05-05T20") + assert query_assertion(rec, d, "<", "2016-05-05") + assert query_assertion(rec, d, "<", "2016-05") + assert query_assertion(rec, d, "<", "2016") @pytest.mark.slow def test_greater_operator(): - try: - rec = set_up_rec() - # query with > - # Date YYYY-MM-ddThh:mm:ss - d = "2015-05-05T20:15:30" - assert_false(query_assertion(rec, d, ">", d)) - assert_false(query_assertion(rec, d, ">", "2015-05-05T20:15:30.123")) - assert_false(query_assertion(rec, d, ">", "2015-05-05T20:15:30")) - assert_false(query_assertion(rec, d, ">", "2015-05-05T20:15")) - assert_false(query_assertion(rec, d, ">", "2015-05-05T20")) - assert_false(query_assertion(rec, d, ">", "2015-05-05")) - assert_false(query_assertion(rec, d, ">", "2015-05")) - assert_false(query_assertion(rec, d, ">", "2015")) - assert_false(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-ddThh:mm:ss.ns - d = "2015-05-05T20:15:30.123" - assert_false(query_assertion(rec, d, ">", d)) - assert_false(query_assertion(rec, d, ">", "2015-05-05T20:15:30.123")) - assert_false(query_assertion(rec, d, ">", "2015-05-05T20:15:30")) - assert_false(query_assertion(rec, d, ">", "2015-05-05T20:15")) - assert_false(query_assertion(rec, d, ">", "2015-05-05T20")) - assert_false(query_assertion(rec, d, ">", "2015-05-05")) - assert_false(query_assertion(rec, d, ">", "2015-05")) - assert_false(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_false(query_assertion(rec, d, ">", d)) - assert_false(query_assertion(rec, d, ">", "2015-05-05T20:15:30.123")) - assert_false(query_assertion(rec, d, ">", "2015-05-05T20:15:30")) - assert_false(query_assertion(rec, d, ">", "2015-05-05T20:15")) - assert_false(query_assertion(rec, d, ">", "2015-05-05T20")) - assert_false(query_assertion(rec, d, ">", "2015-05-05")) - assert_false(query_assertion(rec, d, ">", "2015-05")) - assert_false(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_false(query_assertion(rec, d, ">", d)) - assert_false(query_assertion(rec, d, ">", "2015-05-05T20:15:30.123")) - assert_false(query_assertion(rec, d, ">", "2015-05-05T20:15:30")) - assert_false(query_assertion(rec, d, ">", "2015-05-05T20:15")) - assert_false(query_assertion(rec, d, ">", "2015-05-05T20")) - assert_false(query_assertion(rec, d, ">", "2015-05-05")) - assert_false(query_assertion(rec, d, ">", "2015-05")) - assert_false(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_false(query_assertion(rec, d, ">", d)) - assert_false(query_assertion(rec, d, ">", "2015-05-05T20:15:30.123")) - assert_false(query_assertion(rec, d, ">", "2015-05-05T20:15:30")) - assert_false(query_assertion(rec, d, ">", "2015-05-05T20:15")) - assert_false(query_assertion(rec, d, ">", "2015-05-05T20")) - assert_false(query_assertion(rec, d, ">", "2015-05-05")) - assert_false(query_assertion(rec, d, ">", "2015-05")) - assert_false(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 + rec = set_up_rec() + # query with > + # Date YYYY-MM-ddThh:mm:ss + d = "2015-05-05T20:15:30" + assert not query_assertion(rec, d, ">", d) + assert not query_assertion(rec, d, ">", "2015-05-05T20:15:30.123") + assert not query_assertion(rec, d, ">", "2015-05-05T20:15:30") + assert not query_assertion(rec, d, ">", "2015-05-05T20:15") + assert not query_assertion(rec, d, ">", "2015-05-05T20") + assert not query_assertion(rec, d, ">", "2015-05-05") + assert not query_assertion(rec, d, ">", "2015-05") + assert not query_assertion(rec, d, ">", "2015") + assert not query_assertion(rec, d, ">", "2015-05-05T20:15:30.122") + assert not query_assertion(rec, d, ">", "2015-05-05T20:15:30.124") + assert query_assertion(rec, d, ">", "2015-05-05T20:15:29.123") + assert query_assertion(rec, d, ">", "2015-05-05T20:15:29") + assert not query_assertion(rec, d, ">", "2015-05-05T20:15:31.123") + assert not query_assertion(rec, d, ">", "2015-05-05T20:15:31") + assert query_assertion(rec, d, ">", "2015-05-05T20:14:30.123") + assert query_assertion(rec, d, ">", "2015-05-05T20:14:30") + assert query_assertion(rec, d, ">", "2015-05-05T20:14") + assert not query_assertion(rec, d, ">", "2015-05-05T20:16:30.123") + assert not query_assertion(rec, d, ">", "2015-05-05T20:16:30") + assert not query_assertion(rec, d, ">", "2015-05-05T20:16") + assert query_assertion(rec, d, ">", "2015-05-05T19:15:30.123") + assert query_assertion(rec, d, ">", "2015-05-05T19:15:30") + assert query_assertion(rec, d, ">", "2015-05-05T19:15") + assert query_assertion(rec, d, ">", "2015-05-05T19") + assert not query_assertion(rec, d, ">", "2015-05-05T21:15:30.123") + assert not query_assertion(rec, d, ">", "2015-05-05T21:15:30") + assert not query_assertion(rec, d, ">", "2015-05-05T21:15") + assert not query_assertion(rec, d, ">", "2015-05-05T21") + assert query_assertion(rec, d, ">", "2015-05-04T20:15:30.123") + assert query_assertion(rec, d, ">", "2015-05-04T20:15:30") + assert query_assertion(rec, d, ">", "2015-05-04T20:15") + assert query_assertion(rec, d, ">", "2015-05-04T20") + assert query_assertion(rec, d, ">", "2015-05-04") + assert not query_assertion(rec, d, ">", "2015-05-06T20:15:30.123") + assert not query_assertion(rec, d, ">", "2015-05-06T20:15:30") + assert not query_assertion(rec, d, ">", "2015-05-06T20:15") + assert not query_assertion(rec, d, ">", "2015-05-06T20") + assert not query_assertion(rec, d, ">", "2015-05-06") + assert query_assertion(rec, d, ">", "2015-04-05T20:15:30.123") + assert query_assertion(rec, d, ">", "2015-04-05T20:15:30") + assert query_assertion(rec, d, ">", "2015-04-05T20:15") + assert query_assertion(rec, d, ">", "2015-04-05T20") + assert query_assertion(rec, d, ">", "2015-04-05") + assert query_assertion(rec, d, ">", "2015-04") + assert not query_assertion(rec, d, ">", "2015-06-05T20:15:30.123") + assert not query_assertion(rec, d, ">", "2015-06-05T20:15:30") + assert not query_assertion(rec, d, ">", "2015-06-05T20:15") + assert not query_assertion(rec, d, ">", "2015-06-05T20") + assert not query_assertion(rec, d, ">", "2015-06-05") + assert not query_assertion(rec, d, ">", "2015-06") + assert query_assertion(rec, d, ">", "2014-05-05T20:15:30.123") + assert query_assertion(rec, d, ">", "2014-05-05T20:15:30") + assert query_assertion(rec, d, ">", "2014-05-05T20:15") + assert query_assertion(rec, d, ">", "2014-05-05T20") + assert query_assertion(rec, d, ">", "2014-05-05") + assert query_assertion(rec, d, ">", "2014-05") + assert query_assertion(rec, d, ">", "2014") + assert not query_assertion(rec, d, ">", "2016-05-05T20:15:30.123") + assert not query_assertion(rec, d, ">", "2016-05-05T20:15:30") + assert not query_assertion(rec, d, ">", "2016-05-05T20:15") + assert not query_assertion(rec, d, ">", "2016-05-05T20") + assert not query_assertion(rec, d, ">", "2016-05-05") + assert not query_assertion(rec, d, ">", "2016-05") + assert not query_assertion(rec, d, ">", "2016") + + # Date YYYY-MM-ddThh:mm:ss.ns + d = "2015-05-05T20:15:30.123" + assert not query_assertion(rec, d, ">", d) + assert not query_assertion(rec, d, ">", "2015-05-05T20:15:30.123") + assert not query_assertion(rec, d, ">", "2015-05-05T20:15:30") + assert not query_assertion(rec, d, ">", "2015-05-05T20:15") + assert not query_assertion(rec, d, ">", "2015-05-05T20") + assert not query_assertion(rec, d, ">", "2015-05-05") + assert not query_assertion(rec, d, ">", "2015-05") + assert not query_assertion(rec, d, ">", "2015") + assert query_assertion(rec, d, ">", "2015-05-05T20:15:30.122") + assert not query_assertion(rec, d, ">", "2015-05-05T20:15:30.124") + assert query_assertion(rec, d, ">", "2015-05-05T20:15:29.123") + assert query_assertion(rec, d, ">", "2015-05-05T20:15:29") + assert not query_assertion(rec, d, ">", "2015-05-05T20:15:31.123") + assert not query_assertion(rec, d, ">", "2015-05-05T20:15:31") + assert query_assertion(rec, d, ">", "2015-05-05T20:14:30.123") + assert query_assertion(rec, d, ">", "2015-05-05T20:14:30") + assert query_assertion(rec, d, ">", "2015-05-05T20:14") + assert not query_assertion(rec, d, ">", "2015-05-05T20:16:30.123") + assert not query_assertion(rec, d, ">", "2015-05-05T20:16:30") + assert not query_assertion(rec, d, ">", "2015-05-05T20:16") + assert query_assertion(rec, d, ">", "2015-05-05T19:15:30.123") + assert query_assertion(rec, d, ">", "2015-05-05T19:15:30") + assert query_assertion(rec, d, ">", "2015-05-05T19:15") + assert query_assertion(rec, d, ">", "2015-05-05T19") + assert not query_assertion(rec, d, ">", "2015-05-05T21:15:30.123") + assert not query_assertion(rec, d, ">", "2015-05-05T21:15:30") + assert not query_assertion(rec, d, ">", "2015-05-05T21:15") + assert not query_assertion(rec, d, ">", "2015-05-05T21") + assert query_assertion(rec, d, ">", "2015-05-04T20:15:30.123") + assert query_assertion(rec, d, ">", "2015-05-04T20:15:30") + assert query_assertion(rec, d, ">", "2015-05-04T20:15") + assert query_assertion(rec, d, ">", "2015-05-04T20") + assert query_assertion(rec, d, ">", "2015-05-04") + assert not query_assertion(rec, d, ">", "2015-05-06T20:15:30.123") + assert not query_assertion(rec, d, ">", "2015-05-06T20:15:30") + assert not query_assertion(rec, d, ">", "2015-05-06T20:15") + assert not query_assertion(rec, d, ">", "2015-05-06T20") + assert not query_assertion(rec, d, ">", "2015-05-06") + assert query_assertion(rec, d, ">", "2015-04-05T20:15:30.123") + assert query_assertion(rec, d, ">", "2015-04-05T20:15:30") + assert query_assertion(rec, d, ">", "2015-04-05T20:15") + assert query_assertion(rec, d, ">", "2015-04-05T20") + assert query_assertion(rec, d, ">", "2015-04-05") + assert query_assertion(rec, d, ">", "2015-04") + assert not query_assertion(rec, d, ">", "2015-06-05T20:15:30.123") + assert not query_assertion(rec, d, ">", "2015-06-05T20:15:30") + assert not query_assertion(rec, d, ">", "2015-06-05T20:15") + assert not query_assertion(rec, d, ">", "2015-06-05T20") + assert not query_assertion(rec, d, ">", "2015-06-05") + assert not query_assertion(rec, d, ">", "2015-06") + assert query_assertion(rec, d, ">", "2014-05-05T20:15:30.123") + assert query_assertion(rec, d, ">", "2014-05-05T20:15:30") + assert query_assertion(rec, d, ">", "2014-05-05T20:15") + assert query_assertion(rec, d, ">", "2014-05-05T20") + assert query_assertion(rec, d, ">", "2014-05-05") + assert query_assertion(rec, d, ">", "2014-05") + assert query_assertion(rec, d, ">", "2014") + assert not query_assertion(rec, d, ">", "2016-05-05T20:15:30.123") + assert not query_assertion(rec, d, ">", "2016-05-05T20:15:30") + assert not query_assertion(rec, d, ">", "2016-05-05T20:15") + assert not query_assertion(rec, d, ">", "2016-05-05T20") + assert not query_assertion(rec, d, ">", "2016-05-05") + assert not query_assertion(rec, d, ">", "2016-05") + assert not query_assertion(rec, d, ">", "2016") + + # Date YYYY-MM-dd + d = "2015-05-05" + assert not query_assertion(rec, d, ">", d) + assert not query_assertion(rec, d, ">", "2015-05-05T20:15:30.123") + assert not query_assertion(rec, d, ">", "2015-05-05T20:15:30") + assert not query_assertion(rec, d, ">", "2015-05-05T20:15") + assert not query_assertion(rec, d, ">", "2015-05-05T20") + assert not query_assertion(rec, d, ">", "2015-05-05") + assert not query_assertion(rec, d, ">", "2015-05") + assert not query_assertion(rec, d, ">", "2015") + assert not query_assertion(rec, d, ">", "2015-05-06T20:15:30.123") + assert not query_assertion(rec, d, ">", "2015-05-06T20:15:30") + assert not query_assertion(rec, d, ">", "2015-05-06T20:15") + assert not query_assertion(rec, d, ">", "2015-05-06T20") + assert not query_assertion(rec, d, ">", "2015-05-06") + assert query_assertion(rec, d, ">", "2015-05-04T20:15:30.123") + assert query_assertion(rec, d, ">", "2015-05-04T20:15:30") + assert query_assertion(rec, d, ">", "2015-05-04T20:15") + assert query_assertion(rec, d, ">", "2015-05-04T20") + assert query_assertion(rec, d, ">", "2015-05-04") + assert not query_assertion(rec, d, ">", "2015-06-05T20:15:30.123") + assert not query_assertion(rec, d, ">", "2015-06-05T20:15:30") + assert not query_assertion(rec, d, ">", "2015-06-05T20:15") + assert not query_assertion(rec, d, ">", "2015-06-05T20") + assert not query_assertion(rec, d, ">", "2015-06-05") + assert not query_assertion(rec, d, ">", "2015-06") + assert query_assertion(rec, d, ">", "2015-04-05T20:15:30.123") + assert query_assertion(rec, d, ">", "2015-04-05T20:15:30") + assert query_assertion(rec, d, ">", "2015-04-05T20:15") + assert query_assertion(rec, d, ">", "2015-04-05T20") + assert query_assertion(rec, d, ">", "2015-04-05") + assert query_assertion(rec, d, ">", "2015-04") + assert not query_assertion(rec, d, ">", "2016-05-05T20:15:30.123") + assert not query_assertion(rec, d, ">", "2016-05-05T20:15:30") + assert not query_assertion(rec, d, ">", "2016-05-05T20:15") + assert not query_assertion(rec, d, ">", "2016-05-05T20") + assert not query_assertion(rec, d, ">", "2016-05-05") + assert not query_assertion(rec, d, ">", "2016-05") + assert not query_assertion(rec, d, ">", "2016") + assert query_assertion(rec, d, ">", "2014-05-05T20:15:30.123") + assert query_assertion(rec, d, ">", "2014-05-05T20:15:30") + assert query_assertion(rec, d, ">", "2014-05-05T20:15") + assert query_assertion(rec, d, ">", "2014-05-05T20") + assert query_assertion(rec, d, ">", "2014-05-05") + assert query_assertion(rec, d, ">", "2014-05") + assert query_assertion(rec, d, ">", "2014") + + # Date YYYY-MM + d = "2015-05" + assert not query_assertion(rec, d, ">", d) + assert not query_assertion(rec, d, ">", "2015-05-05T20:15:30.123") + assert not query_assertion(rec, d, ">", "2015-05-05T20:15:30") + assert not query_assertion(rec, d, ">", "2015-05-05T20:15") + assert not query_assertion(rec, d, ">", "2015-05-05T20") + assert not query_assertion(rec, d, ">", "2015-05-05") + assert not query_assertion(rec, d, ">", "2015-05") + assert not query_assertion(rec, d, ">", "2015") + assert not query_assertion(rec, d, ">", "2015-06-05T20:15:30.123") + assert not query_assertion(rec, d, ">", "2015-06-05T20:15:30") + assert not query_assertion(rec, d, ">", "2015-06-05T20:15") + assert not query_assertion(rec, d, ">", "2015-06-05T20") + assert not query_assertion(rec, d, ">", "2015-06-05") + assert not query_assertion(rec, d, ">", "2015-06") + assert query_assertion(rec, d, ">", "2015-04-05T20:15:30.123") + assert query_assertion(rec, d, ">", "2015-04-05T20:15:30") + assert query_assertion(rec, d, ">", "2015-04-05T20:15") + assert query_assertion(rec, d, ">", "2015-04-05T20") + assert query_assertion(rec, d, ">", "2015-04-05") + assert query_assertion(rec, d, ">", "2015-04") + assert not query_assertion(rec, d, ">", "2016-05-05T20:15:30.123") + assert not query_assertion(rec, d, ">", "2016-05-05T20:15:30") + assert not query_assertion(rec, d, ">", "2016-05-05T20:15") + assert not query_assertion(rec, d, ">", "2016-05-05T20") + assert not query_assertion(rec, d, ">", "2016-05-05") + assert not query_assertion(rec, d, ">", "2016-05") + assert not query_assertion(rec, d, ">", "2016") + assert query_assertion(rec, d, ">", "2014-05-05T20:15:30.123") + assert query_assertion(rec, d, ">", "2014-05-05T20:15:30") + assert query_assertion(rec, d, ">", "2014-05-05T20:15") + assert query_assertion(rec, d, ">", "2014-05-05T20") + assert query_assertion(rec, d, ">", "2014-05-05") + assert query_assertion(rec, d, ">", "2014-05") + assert query_assertion(rec, d, ">", "2014") + + # Date YYYY + d = "2015" + assert not query_assertion(rec, d, ">", d) + assert not query_assertion(rec, d, ">", "2015-05-05T20:15:30.123") + assert not query_assertion(rec, d, ">", "2015-05-05T20:15:30") + assert not query_assertion(rec, d, ">", "2015-05-05T20:15") + assert not query_assertion(rec, d, ">", "2015-05-05T20") + assert not query_assertion(rec, d, ">", "2015-05-05") + assert not query_assertion(rec, d, ">", "2015-05") + assert not query_assertion(rec, d, ">", "2015") + assert not query_assertion(rec, d, ">", "2016-05-05T20:15:30.123") + assert not query_assertion(rec, d, ">", "2016-05-05T20:15:30") + assert not query_assertion(rec, d, ">", "2016-05-05T20:15") + assert not query_assertion(rec, d, ">", "2016-05-05T20") + assert not query_assertion(rec, d, ">", "2016-05-05") + assert not query_assertion(rec, d, ">", "2016-05") + assert not query_assertion(rec, d, ">", "2016") + assert query_assertion(rec, d, ">", "2014-05-05T20:15:30.123") + assert query_assertion(rec, d, ">", "2014-05-05T20:15:30") + assert query_assertion(rec, d, ">", "2014-05-05T20:15") + assert query_assertion(rec, d, ">", "2014-05-05T20") + assert query_assertion(rec, d, ">", "2014-05-05") + assert query_assertion(rec, d, ">", "2014-05") + assert query_assertion(rec, d, ">", "2014") @pytest.mark.slow 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 + rec = set_up_rec() + # query with > Date YYYY-MM-ddThh:mm:ss + d = "2015-05-05T20:15:30" + assert query_assertion(rec, d, ">=", d) + assert query_assertion(rec, d, ">=", "2015-05-05T20:15:30.123") + assert query_assertion(rec, d, ">=", "2015-05-05T20:15:30") + assert query_assertion(rec, d, ">=", "2015-05-05T20:15") + assert query_assertion(rec, d, ">=", "2015-05-05T20") + assert query_assertion(rec, d, ">=", "2015-05-05") + assert query_assertion(rec, d, ">=", "2015-05") + assert query_assertion(rec, d, ">=", "2015") + assert query_assertion(rec, d, ">=", "2015-05-05T20:15:30.122") + assert query_assertion(rec, d, ">=", "2015-05-05T20:15:30.124") + assert query_assertion(rec, d, ">=", "2015-05-05T20:15:29.123") + assert query_assertion(rec, d, ">=", "2015-05-05T20:15:29") + assert not query_assertion(rec, d, ">=", "2015-05-05T20:15:31.123") + assert not query_assertion(rec, d, ">=", "2015-05-05T20:15:31") + assert query_assertion(rec, d, ">=", "2015-05-05T20:14:30.123") + assert query_assertion(rec, d, ">=", "2015-05-05T20:14:30") + assert query_assertion(rec, d, ">=", "2015-05-05T20:14") + assert not query_assertion(rec, d, ">=", "2015-05-05T20:16:30.123") + assert not query_assertion(rec, d, ">=", "2015-05-05T20:16:30") + assert not query_assertion(rec, d, ">=", "2015-05-05T20:16") + assert query_assertion(rec, d, ">=", "2015-05-05T19:15:30.123") + assert query_assertion(rec, d, ">=", "2015-05-05T19:15:30") + assert query_assertion(rec, d, ">=", "2015-05-05T19:15") + assert query_assertion(rec, d, ">=", "2015-05-05T19") + assert not query_assertion(rec, d, ">=", "2015-05-05T21:15:30.123") + assert not query_assertion(rec, d, ">=", "2015-05-05T21:15:30") + assert not query_assertion(rec, d, ">=", "2015-05-05T21:15") + assert not query_assertion(rec, d, ">=", "2015-05-05T21") + assert query_assertion(rec, d, ">=", "2015-05-04T20:15:30.123") + assert query_assertion(rec, d, ">=", "2015-05-04T20:15:30") + assert query_assertion(rec, d, ">=", "2015-05-04T20:15") + assert query_assertion(rec, d, ">=", "2015-05-04T20") + assert query_assertion(rec, d, ">=", "2015-05-04") + assert not query_assertion(rec, d, ">=", "2015-05-06T20:15:30.123") + assert not query_assertion(rec, d, ">=", "2015-05-06T20:15:30") + assert not query_assertion(rec, d, ">=", "2015-05-06T20:15") + assert not query_assertion(rec, d, ">=", "2015-05-06T20") + assert not query_assertion(rec, d, ">=", "2015-05-06") + assert query_assertion(rec, d, ">=", "2015-04-05T20:15:30.123") + assert query_assertion(rec, d, ">=", "2015-04-05T20:15:30") + assert query_assertion(rec, d, ">=", "2015-04-05T20:15") + assert query_assertion(rec, d, ">=", "2015-04-05T20") + assert query_assertion(rec, d, ">=", "2015-04-05") + assert query_assertion(rec, d, ">=", "2015-04") + assert not query_assertion(rec, d, ">=", "2015-06-05T20:15:30.123") + assert not query_assertion(rec, d, ">=", "2015-06-05T20:15:30") + assert not query_assertion(rec, d, ">=", "2015-06-05T20:15") + assert not query_assertion(rec, d, ">=", "2015-06-05T20") + assert not query_assertion(rec, d, ">=", "2015-06-05") + assert not query_assertion(rec, d, ">=", "2015-06") + assert query_assertion(rec, d, ">=", "2014-05-05T20:15:30.123") + assert query_assertion(rec, d, ">=", "2014-05-05T20:15:30") + assert query_assertion(rec, d, ">=", "2014-05-05T20:15") + assert query_assertion(rec, d, ">=", "2014-05-05T20") + assert query_assertion(rec, d, ">=", "2014-05-05") + assert query_assertion(rec, d, ">=", "2014-05") + assert query_assertion(rec, d, ">=", "2014") + assert not query_assertion(rec, d, ">=", "2016-05-05T20:15:30.123") + assert not query_assertion(rec, d, ">=", "2016-05-05T20:15:30") + assert not query_assertion(rec, d, ">=", "2016-05-05T20:15") + assert not query_assertion(rec, d, ">=", "2016-05-05T20") + assert not query_assertion(rec, d, ">=", "2016-05-05") + assert not query_assertion(rec, d, ">=", "2016-05") + assert not query_assertion(rec, d, ">=", "2016") + + # Date YYYY-MM-ddThh:mm:ss.ns + d = "2015-05-05T20:15:30.123" + assert query_assertion(rec, d, ">=", d) + assert query_assertion(rec, d, ">=", "2015-05-05T20:15:30.123") + assert query_assertion(rec, d, ">=", "2015-05-05T20:15:30") + assert query_assertion(rec, d, ">=", "2015-05-05T20:15") + assert query_assertion(rec, d, ">=", "2015-05-05T20") + assert query_assertion(rec, d, ">=", "2015-05-05") + assert query_assertion(rec, d, ">=", "2015-05") + assert query_assertion(rec, d, ">=", "2015") + assert query_assertion(rec, d, ">=", "2015-05-05T20:15:30.122") + assert not query_assertion(rec, d, ">=", "2015-05-05T20:15:30.124") + assert query_assertion(rec, d, ">=", "2015-05-05T20:15:29.123") + assert query_assertion(rec, d, ">=", "2015-05-05T20:15:29") + assert not query_assertion(rec, d, ">=", "2015-05-05T20:15:31.123") + assert not query_assertion(rec, d, ">=", "2015-05-05T20:15:31") + assert query_assertion(rec, d, ">=", "2015-05-05T20:14:30.123") + assert query_assertion(rec, d, ">=", "2015-05-05T20:14:30") + assert query_assertion(rec, d, ">=", "2015-05-05T20:14") + assert not query_assertion(rec, d, ">=", "2015-05-05T20:16:30.123") + assert not query_assertion(rec, d, ">=", "2015-05-05T20:16:30") + assert not query_assertion(rec, d, ">=", "2015-05-05T20:16") + assert query_assertion(rec, d, ">=", "2015-05-05T19:15:30.123") + assert query_assertion(rec, d, ">=", "2015-05-05T19:15:30") + assert query_assertion(rec, d, ">=", "2015-05-05T19:15") + assert query_assertion(rec, d, ">=", "2015-05-05T19") + assert not query_assertion(rec, d, ">=", "2015-05-05T21:15:30.123") + assert not query_assertion(rec, d, ">=", "2015-05-05T21:15:30") + assert not query_assertion(rec, d, ">=", "2015-05-05T21:15") + assert not query_assertion(rec, d, ">=", "2015-05-05T21") + assert query_assertion(rec, d, ">=", "2015-05-04T20:15:30.123") + assert query_assertion(rec, d, ">=", "2015-05-04T20:15:30") + assert query_assertion(rec, d, ">=", "2015-05-04T20:15") + assert query_assertion(rec, d, ">=", "2015-05-04T20") + assert query_assertion(rec, d, ">=", "2015-05-04") + assert not query_assertion(rec, d, ">=", "2015-05-06T20:15:30.123") + assert not query_assertion(rec, d, ">=", "2015-05-06T20:15:30") + assert not query_assertion(rec, d, ">=", "2015-05-06T20:15") + assert not query_assertion(rec, d, ">=", "2015-05-06T20") + assert not query_assertion(rec, d, ">=", "2015-05-06") + assert query_assertion(rec, d, ">=", "2015-04-05T20:15:30.123") + assert query_assertion(rec, d, ">=", "2015-04-05T20:15:30") + assert query_assertion(rec, d, ">=", "2015-04-05T20:15") + assert query_assertion(rec, d, ">=", "2015-04-05T20") + assert query_assertion(rec, d, ">=", "2015-04-05") + assert query_assertion(rec, d, ">=", "2015-04") + assert not query_assertion(rec, d, ">=", "2015-06-05T20:15:30.123") + assert not query_assertion(rec, d, ">=", "2015-06-05T20:15:30") + assert not query_assertion(rec, d, ">=", "2015-06-05T20:15") + assert not query_assertion(rec, d, ">=", "2015-06-05T20") + assert not query_assertion(rec, d, ">=", "2015-06-05") + assert not query_assertion(rec, d, ">=", "2015-06") + assert query_assertion(rec, d, ">=", "2014-05-05T20:15:30.123") + assert query_assertion(rec, d, ">=", "2014-05-05T20:15:30") + assert query_assertion(rec, d, ">=", "2014-05-05T20:15") + assert query_assertion(rec, d, ">=", "2014-05-05T20") + assert query_assertion(rec, d, ">=", "2014-05-05") + assert query_assertion(rec, d, ">=", "2014-05") + assert query_assertion(rec, d, ">=", "2014") + assert not query_assertion(rec, d, ">=", "2016-05-05T20:15:30.123") + assert not query_assertion(rec, d, ">=", "2016-05-05T20:15:30") + assert not query_assertion(rec, d, ">=", "2016-05-05T20:15") + assert not query_assertion(rec, d, ">=", "2016-05-05T20") + assert not query_assertion(rec, d, ">=", "2016-05-05") + assert not query_assertion(rec, d, ">=", "2016-05") + assert not query_assertion(rec, d, ">=", "2016") + + # Date YYYY-MM-dd + d = "2015-05-05" + assert query_assertion(rec, d, ">=", d) + assert query_assertion(rec, d, ">=", "2015-05-05T20:15:30.123") + assert query_assertion(rec, d, ">=", "2015-05-05T20:15:30") + assert query_assertion(rec, d, ">=", "2015-05-05T20:15") + assert query_assertion(rec, d, ">=", "2015-05-05T20") + assert query_assertion(rec, d, ">=", "2015-05-05") + assert query_assertion(rec, d, ">=", "2015-05") + assert query_assertion(rec, d, ">=", "2015") + assert not query_assertion(rec, d, ">=", "2015-05-06T20:15:30.123") + assert not query_assertion(rec, d, ">=", "2015-05-06T20:15:30") + assert not query_assertion(rec, d, ">=", "2015-05-06T20:15") + assert not query_assertion(rec, d, ">=", "2015-05-06T20") + assert not query_assertion(rec, d, ">=", "2015-05-06") + assert query_assertion(rec, d, ">=", "2015-05-04T20:15:30.123") + assert query_assertion(rec, d, ">=", "2015-05-04T20:15:30") + assert query_assertion(rec, d, ">=", "2015-05-04T20:15") + assert query_assertion(rec, d, ">=", "2015-05-04T20") + assert query_assertion(rec, d, ">=", "2015-05-04") + assert not query_assertion(rec, d, ">=", "2015-06-05T20:15:30.123") + assert not query_assertion(rec, d, ">=", "2015-06-05T20:15:30") + assert not query_assertion(rec, d, ">=", "2015-06-05T20:15") + assert not query_assertion(rec, d, ">=", "2015-06-05T20") + assert not query_assertion(rec, d, ">=", "2015-06-05") + assert not query_assertion(rec, d, ">=", "2015-06") + assert query_assertion(rec, d, ">=", "2015-04-05T20:15:30.123") + assert query_assertion(rec, d, ">=", "2015-04-05T20:15:30") + assert query_assertion(rec, d, ">=", "2015-04-05T20:15") + assert query_assertion(rec, d, ">=", "2015-04-05T20") + assert query_assertion(rec, d, ">=", "2015-04-05") + assert query_assertion(rec, d, ">=", "2015-04") + assert not query_assertion(rec, d, ">=", "2016-05-05T20:15:30.123") + assert not query_assertion(rec, d, ">=", "2016-05-05T20:15:30") + assert not query_assertion(rec, d, ">=", "2016-05-05T20:15") + assert not query_assertion(rec, d, ">=", "2016-05-05T20") + assert not query_assertion(rec, d, ">=", "2016-05-05") + assert not query_assertion(rec, d, ">=", "2016-05") + assert not query_assertion(rec, d, ">=", "2016") + assert query_assertion(rec, d, ">=", "2014-05-05T20:15:30.123") + assert query_assertion(rec, d, ">=", "2014-05-05T20:15:30") + assert query_assertion(rec, d, ">=", "2014-05-05T20:15") + assert query_assertion(rec, d, ">=", "2014-05-05T20") + assert query_assertion(rec, d, ">=", "2014-05-05") + assert query_assertion(rec, d, ">=", "2014-05") + assert query_assertion(rec, d, ">=", "2014") + + # Date YYYY-MM + d = "2015-05" + assert query_assertion(rec, d, ">=", d) + assert query_assertion(rec, d, ">=", "2015-05-05T20:15:30.123") + assert query_assertion(rec, d, ">=", "2015-05-05T20:15:30") + assert query_assertion(rec, d, ">=", "2015-05-05T20:15") + assert query_assertion(rec, d, ">=", "2015-05-05T20") + assert query_assertion(rec, d, ">=", "2015-05-05") + assert query_assertion(rec, d, ">=", "2015-05") + assert query_assertion(rec, d, ">=", "2015") + assert not query_assertion(rec, d, ">=", "2015-06-05T20:15:30.123") + assert not query_assertion(rec, d, ">=", "2015-06-05T20:15:30") + assert not query_assertion(rec, d, ">=", "2015-06-05T20:15") + assert not query_assertion(rec, d, ">=", "2015-06-05T20") + assert not query_assertion(rec, d, ">=", "2015-06-05") + assert not query_assertion(rec, d, ">=", "2015-06") + assert query_assertion(rec, d, ">=", "2015-04-05T20:15:30.123") + assert query_assertion(rec, d, ">=", "2015-04-05T20:15:30") + assert query_assertion(rec, d, ">=", "2015-04-05T20:15") + assert query_assertion(rec, d, ">=", "2015-04-05T20") + assert query_assertion(rec, d, ">=", "2015-04-05") + assert query_assertion(rec, d, ">=", "2015-04") + assert not query_assertion(rec, d, ">=", "2016-05-05T20:15:30.123") + assert not query_assertion(rec, d, ">=", "2016-05-05T20:15:30") + assert not query_assertion(rec, d, ">=", "2016-05-05T20:15") + assert not query_assertion(rec, d, ">=", "2016-05-05T20") + assert not query_assertion(rec, d, ">=", "2016-05-05") + assert not query_assertion(rec, d, ">=", "2016-05") + assert not query_assertion(rec, d, ">=", "2016") + assert query_assertion(rec, d, ">=", "2014-05-05T20:15:30.123") + assert query_assertion(rec, d, ">=", "2014-05-05T20:15:30") + assert query_assertion(rec, d, ">=", "2014-05-05T20:15") + assert query_assertion(rec, d, ">=", "2014-05-05T20") + assert query_assertion(rec, d, ">=", "2014-05-05") + assert query_assertion(rec, d, ">=", "2014-05") + assert query_assertion(rec, d, ">=", "2014") + + # Date YYYY + d = "2015" + assert query_assertion(rec, d, ">=", d) + assert query_assertion(rec, d, ">=", "2015-05-05T20:15:30.123") + assert query_assertion(rec, d, ">=", "2015-05-05T20:15:30") + assert query_assertion(rec, d, ">=", "2015-05-05T20:15") + assert query_assertion(rec, d, ">=", "2015-05-05T20") + assert query_assertion(rec, d, ">=", "2015-05-05") + assert query_assertion(rec, d, ">=", "2015-05") + assert query_assertion(rec, d, ">=", "2015") + assert not query_assertion(rec, d, ">=", "2016-05-05T20:15:30.123") + assert not query_assertion(rec, d, ">=", "2016-05-05T20:15:30") + assert not query_assertion(rec, d, ">=", "2016-05-05T20:15") + assert not query_assertion(rec, d, ">=", "2016-05-05T20") + assert not query_assertion(rec, d, ">=", "2016-05-05") + assert not query_assertion(rec, d, ">=", "2016-05") + assert not query_assertion(rec, d, ">=", "2016") + assert query_assertion(rec, d, ">=", "2014-05-05T20:15:30.123") + assert query_assertion(rec, d, ">=", "2014-05-05T20:15:30") + assert query_assertion(rec, d, ">=", "2014-05-05T20:15") + assert query_assertion(rec, d, ">=", "2014-05-05T20") + assert query_assertion(rec, d, ">=", "2014-05-05") + assert query_assertion(rec, d, ">=", "2014-05") + assert query_assertion(rec, d, ">=", "2014") @pytest.mark.slow 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 + rec = set_up_rec() + + # Date YYYY-MM-ddThh:mm:ss + d = "2015-05-05T20:15:30" + assert query_assertion(rec, d, "<=", "2015-05-05T20:15:30.123") + assert query_assertion(rec, d, "<=", "2015-05-05T20:15:30.122") + assert query_assertion(rec, d, "<=", "2015-05-05T20:15:30.124") + assert query_assertion(rec, d, "<=", d) + assert query_assertion(rec, d, "<=", "2015-05-05T20:15:30") + assert query_assertion(rec, d, "<=", "2015-05-05T20:15") + assert query_assertion(rec, d, "<=", "2015-05-05T20") + assert query_assertion(rec, d, "<=", "2015-05-05") + assert query_assertion(rec, d, "<=", "2015-05") + assert query_assertion(rec, d, "<=", "2015") + assert not query_assertion(rec, d, "<=", "2015-05-05T20:15:29.123") + assert not query_assertion(rec, d, "<=", "2015-05-05T20:15:29") + assert query_assertion(rec, d, "<=", "2015-05-05T20:15:31.123") + assert query_assertion(rec, d, "<=", "2015-05-05T20:15:31") + assert not query_assertion(rec, d, "<=", "2015-05-05T20:14:30.123") + assert not query_assertion(rec, d, "<=", "2015-05-05T20:14:30") + assert not query_assertion(rec, d, "<=", "2015-05-05T20:14") + assert query_assertion(rec, d, "<=", "2015-05-05T20:16:30.123") + assert query_assertion(rec, d, "<=", "2015-05-05T20:16:30") + assert query_assertion(rec, d, "<=", "2015-05-05T20:16") + assert not query_assertion(rec, d, "<=", "2015-05-05T19:15:30.123") + assert not query_assertion(rec, d, "<=", "2015-05-05T19:15:30") + assert not query_assertion(rec, d, "<=", "2015-05-05T19:15") + assert not query_assertion(rec, d, "<=", "2015-05-05T19") + assert query_assertion(rec, d, "<=", "2015-05-05T21:15:30.123") + assert query_assertion(rec, d, "<=", "2015-05-05T21:15:30") + assert query_assertion(rec, d, "<=", "2015-05-05T21:15") + assert query_assertion(rec, d, "<=", "2015-05-05T21") + assert not query_assertion(rec, d, "<=", "2015-05-04T20:15:30.123") + assert not query_assertion(rec, d, "<=", "2015-05-04T20:15:30") + assert not query_assertion(rec, d, "<=", "2015-05-04T20:15") + assert not query_assertion(rec, d, "<=", "2015-05-04T20") + assert not query_assertion(rec, d, "<=", "2015-05-04") + assert query_assertion(rec, d, "<=", "2015-05-06T20:15:30.123") + assert query_assertion(rec, d, "<=", "2015-05-06T20:15:30") + assert query_assertion(rec, d, "<=", "2015-05-06T20:15") + assert query_assertion(rec, d, "<=", "2015-05-06T20") + assert query_assertion(rec, d, "<=", "2015-05-06") + assert not query_assertion(rec, d, "<=", "2015-04-05T20:15:30.123") + assert not query_assertion(rec, d, "<=", "2015-04-05T20:15:30") + assert not query_assertion(rec, d, "<=", "2015-04-05T20:15") + assert not query_assertion(rec, d, "<=", "2015-04-05T20") + assert not query_assertion(rec, d, "<=", "2015-04-05") + assert not query_assertion(rec, d, "<=", "2015-04") + assert query_assertion(rec, d, "<=", "2015-06-05T20:15:30.123") + assert query_assertion(rec, d, "<=", "2015-06-05T20:15:30") + assert query_assertion(rec, d, "<=", "2015-06-05T20:15") + assert query_assertion(rec, d, "<=", "2015-06-05T20") + assert query_assertion(rec, d, "<=", "2015-06-05") + assert query_assertion(rec, d, "<=", "2015-06") + assert not query_assertion(rec, d, "<=", "2014-05-05T20:15:30.123") + assert not query_assertion(rec, d, "<=", "2014-05-05T20:15:30") + assert not query_assertion(rec, d, "<=", "2014-05-05T20:15") + assert not query_assertion(rec, d, "<=", "2014-05-05T20") + assert not query_assertion(rec, d, "<=", "2014-05-05") + assert not query_assertion(rec, d, "<=", "2014-05") + assert not query_assertion(rec, d, "<=", "2014") + assert query_assertion(rec, d, "<=", "2016-05-05T20:15:30.123") + assert query_assertion(rec, d, "<=", "2016-05-05T20:15:30") + assert query_assertion(rec, d, "<=", "2016-05-05T20:15") + assert query_assertion(rec, d, "<=", "2016-05-05T20") + assert query_assertion(rec, d, "<=", "2016-05-05") + assert query_assertion(rec, d, "<=", "2016-05") + assert query_assertion(rec, d, "<=", "2016") + + # Date YYYY-MM-ddThh:mm:ss.ns + d = "2015-05-05T20:15:30.123" + assert query_assertion(rec, d, "<=", d) + assert query_assertion(rec, d, "<=", "2015-05-05T20:15:30.123") + assert query_assertion(rec, d, "<=", "2015-05-05T20:15:30") + assert query_assertion(rec, d, "<=", "2015-05-05T20:15") + assert query_assertion(rec, d, "<=", "2015-05-05T20") + assert query_assertion(rec, d, "<=", "2015-05-05") + assert query_assertion(rec, d, "<=", "2015-05") + assert query_assertion(rec, d, "<=", "2015") + assert not query_assertion(rec, d, "<=", "2015-05-05T20:15:30.122") + assert query_assertion(rec, d, "<=", "2015-05-05T20:15:30.124") + assert not query_assertion(rec, d, "<=", "2015-05-05T20:15:29.123") + assert not query_assertion(rec, d, "<=", "2015-05-05T20:15:29") + assert query_assertion(rec, d, "<=", "2015-05-05T20:15:31.123") + assert query_assertion(rec, d, "<=", "2015-05-05T20:15:31") + assert not query_assertion(rec, d, "<=", "2015-05-05T20:14:30.123") + assert not query_assertion(rec, d, "<=", "2015-05-05T20:14:30") + assert not query_assertion(rec, d, "<=", "2015-05-05T20:14") + assert query_assertion(rec, d, "<=", "2015-05-05T20:16:30.123") + assert query_assertion(rec, d, "<=", "2015-05-05T20:16:30") + assert query_assertion(rec, d, "<=", "2015-05-05T20:16") + assert not query_assertion(rec, d, "<=", "2015-05-05T19:15:30.123") + assert not query_assertion(rec, d, "<=", "2015-05-05T19:15:30") + assert not query_assertion(rec, d, "<=", "2015-05-05T19:15") + assert not query_assertion(rec, d, "<=", "2015-05-05T19") + assert query_assertion(rec, d, "<=", "2015-05-05T21:15:30.123") + assert query_assertion(rec, d, "<=", "2015-05-05T21:15:30") + assert query_assertion(rec, d, "<=", "2015-05-05T21:15") + assert query_assertion(rec, d, "<=", "2015-05-05T21") + assert not query_assertion(rec, d, "<=", "2015-05-04T20:15:30.123") + assert not query_assertion(rec, d, "<=", "2015-05-04T20:15:30") + assert not query_assertion(rec, d, "<=", "2015-05-04T20:15") + assert not query_assertion(rec, d, "<=", "2015-05-04T20") + assert not query_assertion(rec, d, "<=", "2015-05-04") + assert query_assertion(rec, d, "<=", "2015-05-06T20:15:30.123") + assert query_assertion(rec, d, "<=", "2015-05-06T20:15:30") + assert query_assertion(rec, d, "<=", "2015-05-06T20:15") + assert query_assertion(rec, d, "<=", "2015-05-06T20") + assert query_assertion(rec, d, "<=", "2015-05-06") + assert not query_assertion(rec, d, "<=", "2015-04-05T20:15:30.123") + assert not query_assertion(rec, d, "<=", "2015-04-05T20:15:30") + assert not query_assertion(rec, d, "<=", "2015-04-05T20:15") + assert not query_assertion(rec, d, "<=", "2015-04-05T20") + assert not query_assertion(rec, d, "<=", "2015-04-05") + assert not query_assertion(rec, d, "<=", "2015-04") + assert query_assertion(rec, d, "<=", "2015-06-05T20:15:30.123") + assert query_assertion(rec, d, "<=", "2015-06-05T20:15:30") + assert query_assertion(rec, d, "<=", "2015-06-05T20:15") + assert query_assertion(rec, d, "<=", "2015-06-05T20") + assert query_assertion(rec, d, "<=", "2015-06-05") + assert query_assertion(rec, d, "<=", "2015-06") + assert not query_assertion(rec, d, "<=", "2014-05-05T20:15:30.123") + assert not query_assertion(rec, d, "<=", "2014-05-05T20:15:30") + assert not query_assertion(rec, d, "<=", "2014-05-05T20:15") + assert not query_assertion(rec, d, "<=", "2014-05-05T20") + assert not query_assertion(rec, d, "<=", "2014-05-05") + assert not query_assertion(rec, d, "<=", "2014-05") + assert not query_assertion(rec, d, "<=", "2014") + assert query_assertion(rec, d, "<=", "2016-05-05T20:15:30.123") + assert query_assertion(rec, d, "<=", "2016-05-05T20:15:30") + assert query_assertion(rec, d, "<=", "2016-05-05T20:15") + assert query_assertion(rec, d, "<=", "2016-05-05T20") + assert query_assertion(rec, d, "<=", "2016-05-05") + assert query_assertion(rec, d, "<=", "2016-05") + assert query_assertion(rec, d, "<=", "2016") + + # Date YYYY-MM-dd + d = "2015-05-05" + assert query_assertion(rec, d, "<=", d) + assert query_assertion(rec, d, "<=", "2015-05-05T20:15:30.123") + assert query_assertion(rec, d, "<=", "2015-05-05T20:15:30") + assert query_assertion(rec, d, "<=", "2015-05-05T20:15") + assert query_assertion(rec, d, "<=", "2015-05-05T20") + assert query_assertion(rec, d, "<=", "2015-05-05") + assert query_assertion(rec, d, "<=", "2015-05") + assert query_assertion(rec, d, "<=", "2015") + assert not query_assertion(rec, d, "<=", "2015-05-04T20:15:30.123") + assert not query_assertion(rec, d, "<=", "2015-05-04T20:15:30") + assert not query_assertion(rec, d, "<=", "2015-05-04T20:15") + assert not query_assertion(rec, d, "<=", "2015-05-04T20") + assert not query_assertion(rec, d, "<=", "2015-05-04") + assert query_assertion(rec, d, "<=", "2015-05-06T20:15:30.123") + assert query_assertion(rec, d, "<=", "2015-05-06T20:15:30") + assert query_assertion(rec, d, "<=", "2015-05-06T20:15") + assert query_assertion(rec, d, "<=", "2015-05-06T20") + assert query_assertion(rec, d, "<=", "2015-05-06") + assert not query_assertion(rec, d, "<=", "2015-04-05T20:15:30.123") + assert not query_assertion(rec, d, "<=", "2015-04-05T20:15:30") + assert not query_assertion(rec, d, "<=", "2015-04-05T20:15") + assert not query_assertion(rec, d, "<=", "2015-04-05T20") + assert not query_assertion(rec, d, "<=", "2015-04-05") + assert not query_assertion(rec, d, "<=", "2015-04") + assert query_assertion(rec, d, "<=", "2015-06-05T20:15:30.123") + assert query_assertion(rec, d, "<=", "2015-06-05T20:15:30") + assert query_assertion(rec, d, "<=", "2015-06-05T20:15") + assert query_assertion(rec, d, "<=", "2015-06-05T20") + assert query_assertion(rec, d, "<=", "2015-06-05") + assert query_assertion(rec, d, "<=", "2015-06") + assert not query_assertion(rec, d, "<=", "2014-05-05T20:15:30.123") + assert not query_assertion(rec, d, "<=", "2014-05-05T20:15:30") + assert not query_assertion(rec, d, "<=", "2014-05-05T20:15") + assert not query_assertion(rec, d, "<=", "2014-05-05T20") + assert not query_assertion(rec, d, "<=", "2014-05-05") + assert not query_assertion(rec, d, "<=", "2014-05") + assert not query_assertion(rec, d, "<=", "2014") + assert query_assertion(rec, d, "<=", "2016-05-05T20:15:30.123") + assert query_assertion(rec, d, "<=", "2016-05-05T20:15:30") + assert query_assertion(rec, d, "<=", "2016-05-05T20:15") + assert query_assertion(rec, d, "<=", "2016-05-05T20") + assert query_assertion(rec, d, "<=", "2016-05-05") + assert query_assertion(rec, d, "<=", "2016-05") + assert query_assertion(rec, d, "<=", "2016") + + # Date YYYY-MM + d = "2015-05" + assert query_assertion(rec, d, "<=", d) + assert query_assertion(rec, d, "<=", "2015-05-05T20:15:30.123") + assert query_assertion(rec, d, "<=", "2015-05-05T20:15:30") + assert query_assertion(rec, d, "<=", "2015-05-05T20:15") + assert query_assertion(rec, d, "<=", "2015-05-05T20") + assert query_assertion(rec, d, "<=", "2015-05-05") + assert query_assertion(rec, d, "<=", "2015-05") + assert query_assertion(rec, d, "<=", "2015") + assert not query_assertion(rec, d, "<=", "2015-04-05T20:15:30.123") + assert not query_assertion(rec, d, "<=", "2015-04-05T20:15:30") + assert not query_assertion(rec, d, "<=", "2015-04-05T20:15") + assert not query_assertion(rec, d, "<=", "2015-04-05T20") + assert not query_assertion(rec, d, "<=", "2015-04-05") + assert not query_assertion(rec, d, "<=", "2015-04") + assert query_assertion(rec, d, "<=", "2015-06-05T20:15:30.123") + assert query_assertion(rec, d, "<=", "2015-06-05T20:15:30") + assert query_assertion(rec, d, "<=", "2015-06-05T20:15") + assert query_assertion(rec, d, "<=", "2015-06-05T20") + assert query_assertion(rec, d, "<=", "2015-06-05") + assert query_assertion(rec, d, "<=", "2015-06") + assert not query_assertion(rec, d, "<=", "2014-05-05T20:15:30.123") + assert not query_assertion(rec, d, "<=", "2014-05-05T20:15:30") + assert not query_assertion(rec, d, "<=", "2014-05-05T20:15") + assert not query_assertion(rec, d, "<=", "2014-05-05T20") + assert not query_assertion(rec, d, "<=", "2014-05-05") + assert not query_assertion(rec, d, "<=", "2014-05") + assert not query_assertion(rec, d, "<=", "2014") + assert query_assertion(rec, d, "<=", "2016-05-05T20:15:30.123") + assert query_assertion(rec, d, "<=", "2016-05-05T20:15:30") + assert query_assertion(rec, d, "<=", "2016-05-05T20:15") + assert query_assertion(rec, d, "<=", "2016-05-05T20") + assert query_assertion(rec, d, "<=", "2016-05-05") + assert query_assertion(rec, d, "<=", "2016-05") + assert query_assertion(rec, d, "<=", "2016") + + # Date YYYY + d = "2015" + assert query_assertion(rec, d, "<=", d) + assert query_assertion(rec, d, "<=", "2015-05-05T20:15:30.123") + assert query_assertion(rec, d, "<=", "2015-05-05T20:15:30") + assert query_assertion(rec, d, "<=", "2015-05-05T20:15") + assert query_assertion(rec, d, "<=", "2015-05-05T20") + assert query_assertion(rec, d, "<=", "2015-05-05") + assert query_assertion(rec, d, "<=", "2015-05") + assert query_assertion(rec, d, "<=", "2015") + assert not query_assertion(rec, d, "<=", "2014-05-05T20:15:30.123") + assert not query_assertion(rec, d, "<=", "2014-05-05T20:15:30") + assert not query_assertion(rec, d, "<=", "2014-05-05T20:15") + assert not query_assertion(rec, d, "<=", "2014-05-05T20") + assert not query_assertion(rec, d, "<=", "2014-05-05") + assert not query_assertion(rec, d, "<=", "2014-05") + assert not query_assertion(rec, d, "<=", "2014") + assert query_assertion(rec, d, "<=", "2016-05-05T20:15:30.123") + assert query_assertion(rec, d, "<=", "2016-05-05T20:15:30") + assert query_assertion(rec, d, "<=", "2016-05-05T20:15") + assert query_assertion(rec, d, "<=", "2016-05-05T20") + assert query_assertion(rec, d, "<=", "2016-05-05") + assert query_assertion(rec, d, "<=", "2016-05") + assert query_assertion(rec, d, "<=", "2016") diff --git a/tests/test_double.py b/tests/test_double.py index 041a060ca61ff92dc7117e6fd64572f269e249ab..f01f85e747a27c20a9f7d39200e92bafb723a55f 100644 --- a/tests/test_double.py +++ b/tests/test_double.py @@ -26,7 +26,7 @@ import caosdb as db def setup_module(): - clean = db.execute_query("FIND Test*") + clean = db.execute_query("FIND ENTITY") if len(clean) > 0: clean.delete() @@ -40,9 +40,9 @@ def test_nan(): rt = db.RecordType(name="TestRecordType").add_property(name="TestDoubleProperty", value="NaN").insert() - test1 = db.execute_query("FIND TestRecordType", unique=True) + test1 = db.execute_query("FIND ENTITY TestRecordType", unique=True) assert math.isnan(test1.get_property("TestDoubleProperty").value) test2 = db.execute_query( - "FIND TestRecordType WITH TestDoubleProperty = NaN", unique=True) + "FIND ENTITY TestRecordType WITH TestDoubleProperty = NaN", unique=True) assert math.isnan(test1.get_property("TestDoubleProperty").value) diff --git a/tests/test_empty_text_value.py b/tests/test_empty_text_value.py index 64be317878150e735e6d197835381d5a52b22dcc..dba100e0c0ec4f59a3993b85b3ce6aebaf86819e 100644 --- a/tests/test_empty_text_value.py +++ b/tests/test_empty_text_value.py @@ -34,7 +34,7 @@ def setup_function(function): def teardown_function(function): try: - db.execute_query("FIND Test*").delete() + db.execute_query("FIND ENTITY").delete() except Exception as e: print(e) @@ -50,8 +50,8 @@ def test_empty_string(): "TestProp").value == "" # query language works for empty string assert db.execute_query( - "FIND TestRT with TestProp=''", unique=True).id == r1.id - assert db.execute_query('FIND TestRT with TestProp=""', + "FIND ENTITY TestRT with TestProp=''", unique=True).id == r1.id + assert db.execute_query('FIND ENTITY TestRT with TestProp=""', unique=True).get_property("TestProp").value == "" r2 = db.Record() @@ -60,10 +60,10 @@ def test_empty_string(): r2.insert() assert db.execute_query( - "FIND TestRT with TestProp='not empty'", unique=True).id == r2.id + "FIND ENTITY TestRT with TestProp='not empty'", unique=True).id == r2.id # query language work while other records with non empty values are present assert db.execute_query( - "FIND TestRT with TestProp=''", unique=True).id == r1.id + "FIND ENTITY TestRT with TestProp=''", unique=True).id == r1.id assert len(db.execute_query("FIND Record TestRT")) == 2 @@ -78,7 +78,7 @@ def test_null_value(): unique=True).get_property("TestProp").value is None # query language works with null value assert db.execute_query( - "FIND TestRT WHERE TestProp IS NULL", unique=True).id == r1.id + "FIND ENTITY TestRT WHERE TestProp IS NULL", unique=True).id == r1.id # add a bit of noise r2 = db.Record() @@ -87,10 +87,10 @@ def test_null_value(): r2.insert() assert db.execute_query( - "FIND TestRT with TestProp='null'", unique=True).id == r2.id + "FIND ENTITY TestRT with TestProp='null'", unique=True).id == r2.id # query language works while other record with non-null values are present assert db.execute_query( - "FIND TestRT WHERE TestProp IS NULL", unique=True).id == r1.id + "FIND ENTITY TestRT WHERE TestProp IS NULL", unique=True).id == r1.id assert len(db.execute_query("FIND Record TestRT")) == 2 @@ -105,7 +105,7 @@ def test_list_with_empty_string(): unique=True).get_property("TestProp").value == [""] # query language works assert db.execute_query( - "FIND TestRT with TestProp=''", unique=True).id == r1.id + "FIND ENTITY TestRT with TestProp=''", unique=True).id == r1.id r2 = db.Record() r2.add_parent("TestRT") @@ -114,9 +114,9 @@ def test_list_with_empty_string(): assert db.execute_query("FIND Record TestRT with TestProp='leer'", unique=True).get_property("TestProp").value == ["leer"] assert db.execute_query( - "FIND TestRT with TestProp='leer'", unique=True).id == r2.id + "FIND ENTITY TestRT with TestProp='leer'", unique=True).id == r2.id assert db.execute_query( - "FIND TestRT with TestProp=''", unique=True).id == r1.id + "FIND ENTITY TestRT with TestProp=''", unique=True).id == r1.id def test_null_list(): @@ -129,7 +129,7 @@ def test_null_list(): assert db.execute_query("FIND Record TestRT", unique=True).get_property("TestProp").value is None assert db.execute_query( - "FIND TestRT WHERE TestProp IS NULL", unique=True).id == r1.id + "FIND ENTITY TestRT WHERE TestProp IS NULL", unique=True).id == r1.id @pytest.mark.xfail(reason="""this is the confirmation for diff --git a/tests/test_error_stuff.py b/tests/test_error_stuff.py index ca33fb2f101ad87e701bad92745490699b1e789a..7dd6d087e71a65c7da02ccddf3745aea487a2a81 100644 --- a/tests/test_error_stuff.py +++ b/tests/test_error_stuff.py @@ -30,7 +30,7 @@ Created on 19.02.2015. @author: tf """ -import caosdb as h +import linkahead as db from caosdb.exceptions import (AmbiguousEntityError, EntityDoesNotExistError, EntityError, EntityHasNoDatatypeError, @@ -42,7 +42,7 @@ import pytest def setup_function(function): try: - h.execute_query("FIND Test*").delete() + db.execute_query("FIND ENTITY").delete() except BaseException: pass @@ -54,7 +54,7 @@ def teardown_function(function): def test_retrieval_no_exception_raised(): """Test whether retrieval fails but error is suppressed.""" - p = h.Property(name="TestNon-ExsistentProperty").retrieve( + p = db.Property(name="TestNon-ExsistentProperty").retrieve( unique=True, raise_exception_on_error=False) assert not p.is_valid() assert (p.id is None or p.id < 0) @@ -67,8 +67,8 @@ def test_retrieval_exception_raised(): """ propname = "TestNon-ExistentProperty" with pytest.raises(TransactionError) as te: - h.Property(name="TestNon-ExistentProperty").retrieve(unique=True, - raise_exception_on_error=True) + db.Property(name="TestNon-ExistentProperty").retrieve(unique=True, + raise_exception_on_error=True) assert len(te.value.errors) == 1 ee = te.value.errors[0] # Check for type incl. inheritance @@ -89,19 +89,19 @@ def test_ambiguous_retrieval(): raised correctly if there are two possible candidates. """ - h.RecordType(name="TestType").insert() - h.Record(name="TestRec").add_parent(name="TestType").insert() + db.RecordType(name="TestType").insert() + db.Record(name="TestRec").add_parent(name="TestType").insert() # Insert twice, so unique=False - h.Record(name="TestRec").add_parent(name="TestType").insert(unique=False) + db.Record(name="TestRec").add_parent(name="TestType").insert(unique=False) with pytest.raises(TransactionError) as te: - h.Record(name="TestRec").retrieve() + db.Record(name="TestRec").retrieve() assert te.value.has_error(AmbiguousEntityError) assert te.value.errors[0].entity.name == "TestRec" def test_insertion_no_exception_raised(): """Test whether insertion fails but no error is raised.""" - p = h.Property(name="TestNoTypeProperty").insert( + p = db.Property(name="TestNoTypeProperty").insert( raise_exception_on_error=False) assert not p.is_valid() assert (p.id is None or p.id < 0) @@ -109,7 +109,7 @@ def test_insertion_no_exception_raised(): def test_insertion_exception_raised(): """Test insertion of a property with missing datatype.""" - p = h.Property(name="TestNoTypeProperty") + p = db.Property(name="TestNoTypeProperty") with pytest.raises(TransactionError) as te: p.insert(raise_exception_on_error=True) assert te.value.has_error(EntityHasNoDatatypeError) @@ -117,7 +117,7 @@ def test_insertion_exception_raised(): def test_insertion_with_invalid_parents(): with pytest.raises(TransactionError) as te: - p = h.Property( + p = db.Property( name="TestNoTypeProperty", datatype="Text").add_parent( id=-1) @@ -136,7 +136,7 @@ def test_insertion_with_invalid_parents(): def test_insertion_with_invalid_properties(): with pytest.raises(TransactionError) as te: - p = h.Property( + p = db.Property( name="TestNoTypeProperty", datatype="Text").add_property( id=-1) @@ -157,11 +157,11 @@ def test_entity_does_not_exist(): EntityDoesNotExistErrors. """ - p1 = h.Property(name="TestNon-ExistentProperty1").retrieve( + p1 = db.Property(name="TestNon-ExistentProperty1").retrieve( raise_exception_on_error=False) - p2 = h.Property(name="TestNon-ExistentProperty2").retrieve( + p2 = db.Property(name="TestNon-ExistentProperty2").retrieve( raise_exception_on_error=False) - p3 = h.Property(name="TestNon-ExistentProperty3").retrieve( + p3 = db.Property(name="TestNon-ExistentProperty3").retrieve( raise_exception_on_error=False) # None of them should exist assert not p1.is_valid() @@ -171,17 +171,17 @@ def test_entity_does_not_exist(): assert not p3.is_valid() assert (p3.id is None or p3.id < 0) - pe = h.Property(name="TestExistentProperty", datatype="text").insert() + pe = db.Property(name="TestExistentProperty", datatype="text").insert() - c = h.Container().extend( + c = db.Container().extend( [ - h.Property( + db.Property( name="TestNon-ExistentProperty1"), - h.Property( + db.Property( name="TestNon-ExistentProperty2"), - h.Property( + db.Property( name="TestNon-ExistentProperty3"), - h.Property( + db.Property( name="TestExistentProperty")]) with pytest.raises(TransactionError) as te: @@ -199,11 +199,11 @@ def test_insert_existent_entity(): UniqueNamesError. """ - p1 = h.Property(name="TestNon-ExistentProperty1").retrieve( + p1 = db.Property(name="TestNon-ExistentProperty1").retrieve( raise_exception_on_error=False) - p2 = h.Property(name="TestNon-ExistentProperty2").retrieve( + p2 = db.Property(name="TestNon-ExistentProperty2").retrieve( raise_exception_on_error=False) - p3 = h.Property(name="TestNon-ExistentProperty3").retrieve( + p3 = db.Property(name="TestNon-ExistentProperty3").retrieve( raise_exception_on_error=False) # None of them should exist assert not p1.is_valid() @@ -213,21 +213,21 @@ def test_insert_existent_entity(): assert not p3.is_valid() assert (p3.id is None or p3.id < 0) - pe = h.Property(name="TestExistentProperty", datatype="text").insert() + pe = db.Property(name="TestExistentProperty", datatype="text").insert() assert pe.is_valid() - c = h.Container().extend( + c = db.Container().extend( [ - h.Property( + db.Property( name="TestNon-ExistentProperty1", datatype="text"), - h.Property( + db.Property( name="TestNon-ExistentProperty2", datatype="text"), - h.Property( + db.Property( name="TestNon-ExistentProperty3", datatype="text"), - h.Property( + db.Property( name="TestExistentProperty", datatype="text")]) @@ -243,31 +243,31 @@ def test_insert_existent_entity(): def test_double_insertion(): - c1 = h.Container() + c1 = db.Container() c1.append( - h.Property( + db.Property( name="TestSimpleTextProperty", description="simple text property (from test_error_stuff.py)", datatype='text')) c1.append( - h.Property( + db.Property( name="TestSimpleDoubleProperty", description="simple double property (from test_error_stuff.py)", datatype='double')) c1.append( - h.Property( + db.Property( name="TestSimpleIntegerProperty", description="simple integer property (from test_error_stuff.py)", datatype='integer')) c1.append( - h.Property( + db.Property( name="TestSimpleDatetimeProperty", description="simple datetime property (from test_error_stuff.py)", datatype='datetime')) c1.append( - h.RecordType( + db.RecordType( name="TestSimpleRecordType", description="simple recordType (from test_error_stuff.py)").add_property( name='TestSimpleTextProperty').add_property( @@ -277,30 +277,30 @@ def test_double_insertion(): c1.insert() - c2 = h.Container() + c2 = db.Container() c2.append( - h.Property( + db.Property( name="TestSimpleTextProperty", description="simple text property (from test_error_stuff.py)", datatype='text')) c2.append( - h.Property( + db.Property( name="TestSimpleDoubleProperty", description="simple double property (from test_error_stuff.py)", datatype='double')) c2.append( - h.Property( + db.Property( name="TestSimpleIntegerProperty", description="simple integer property (from test_error_stuff.py)", datatype='integer')) c2.append( - h.Property( + db.Property( name="TestSimpleDatetimeProperty", description="simple datetime property (from test_error_stuff.py)", datatype='datetime')) c2.append( - h.RecordType( + db.RecordType( name="TestSimpleRecordType", description="simple recordType (from test_error_stuff.py)").add_property( name='TestSimpleTextProperty').add_property( @@ -322,7 +322,7 @@ def test_update_acl_errors(): `Entity.update_acl` """ - rec_ne = h.Record("TestRecordNonExisting") + rec_ne = db.Record("TestRecordNonExisting") with pytest.raises(TransactionError) as te: @@ -331,12 +331,36 @@ def test_update_acl_errors(): assert te.value.has_error(EntityDoesNotExistError) assert te.value.errors[0].entity.name == rec_ne.name - rt = h.RecordType(name="TestType").insert() - rec = h.Record(name="TestRecord").add_parent(rt).insert() - h.Record(name=rec.name).add_parent(rt).insert(unique=False) + rt = db.RecordType(name="TestType").insert() + rec = db.Record(name="TestRecord").add_parent(rt).insert() + db.Record(name=rec.name).add_parent(rt).insert(unique=False) with pytest.raises(TransactionError) as te: - h.Record(name=rec.name).update_acl() + db.Record(name=rec.name).update_acl() assert te.value.has_error(AmbiguousEntityError) + + +def test_URI_too_long(): + """Some tests for variours URI too long commands. + + See for example https://gitlab.indiscale.com/caosdb/src/caosdb-pylib/-/issues/180 + + """ + + short = 100 + uri_long = 819 + header_long = 815 + + with pytest.raises(db.TransactionError) as excinfo: + db.execute_query("0123456789" * short) + assert "Parsing" in excinfo.value.msg + + with pytest.raises(db.HTTPURITooLongError) as excinfo: + db.execute_query("0123456789" * uri_long) + assert "414" in excinfo.value.msg + + with pytest.raises(db.HTTPURITooLongError) as excinfo: + db.execute_query("0123456789" * header_long) + assert "431" in excinfo.value.msg diff --git a/tests/test_file.py b/tests/test_file.py index ea3a050209da3251dc00de63edd1759c762658a6..26b6a30bf9765df356702feb0e08f54d0bf4a264 100644 --- a/tests/test_file.py +++ b/tests/test_file.py @@ -5,9 +5,9 @@ # # Copyright (C) 2018 Research Group Biomedical Physics, # Max-Planck-Institute for Dynamics and Self-Organization Göttingen -# Copyright (C) 2019-2021 IndiScale GmbH <info@indiscale.com> -# Copyright (C) 2019 Daniel Hornung <d.hornung@indiscale.com> -# Copyright (C) 2020-2021 Timm Fitschen <t.fitschen@indiscale.com> +# Copyright (C) 2019-2023 IndiScale GmbH <info@indiscale.com> +# Copyright (C) 2019-2023 Daniel Hornung <d.hornung@indiscale.com> +# Copyright (C) 2020-2024 Timm Fitschen <t.fitschen@indiscale.com> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -159,7 +159,7 @@ def test_consistency_file_was_modified(): assert c.messages["Error", 0] is not None assert c.messages["Error", - 0][0] == 'CHANGED:HASH - DEFAULT:debug/test_file_storage_consistency' + 0][0] == 'CHANGED:SIZE - DEFAULT:debug/test_file_storage_consistency' # download file again and check if it is still the same (just to be # sure that the server only simulated the consistency breach @@ -304,7 +304,7 @@ def test_consistency_file_was_modified_2(): assert c.messages["Error", 0] is not None assert c.messages["Error", - 0][0] == 'CHANGED:HASH - DEFAULT:debug/test_file_storage_consistency' + 0][0] == 'CHANGED:SIZE - DEFAULT:debug/test_file_storage_consistency' # old checksum is still stored qfile = execute_query("FIND FILE TestConsistency3", unique=True) @@ -346,6 +346,8 @@ def test_consistency_file_was_modified_2(): assert qfile.id == file_.id assert qfile.checksum.lower() == checksum2 +# TODO test modified file with constant size and modified hash + def test_insert_empty_directory(): directory = db.Directory(path="A").insert() diff --git a/tests/test_importance.py b/tests/test_importance.py index 6bcf4a097647c6d8393192361337e0b45a1417b0..41668d98c221fb0080aeba47c51104a8343d61f6 100644 --- a/tests/test_importance.py +++ b/tests/test_importance.py @@ -27,7 +27,7 @@ def setup_function(function): def teardown_module(): - clean = db.execute_query("FIND Test*") + clean = db.execute_query("FIND ENTITY") if len(clean) > 0: clean.delete() diff --git a/tests/test_inheritance.py b/tests/test_inheritance.py index bffb128484364906ec2e30342cbc5090c7ca9554..01d094c989305e67c7e1cf2efeb9a336807a5ebb 100644 --- a/tests/test_inheritance.py +++ b/tests/test_inheritance.py @@ -200,7 +200,7 @@ def test_inheritance_unit(): assert rt.is_valid() assert rt.get_property("SimpleIntProperty").unit == "km" - rt2 = db.execute_query("FIND SimpleRecordType", True) + rt2 = db.execute_query("FIND ENTITY SimpleRecordType", True) assert rt2.id == rt.id assert rt2.get_property("SimpleIntProperty").unit == "km" @@ -212,7 +212,7 @@ def test_inheritance_unit(): assert rt3.get_property("SimpleIntProperty") is not None assert rt3.get_property("SimpleIntProperty").unit == "km" - rt4 = db.execute_query("FIND SimpleRecordType2", True) + rt4 = db.execute_query("FIND ENTITY SimpleRecordType2", True) assert rt4.is_valid() assert rt4.id == rt3.id assert rt4.get_property("SimpleIntProperty").unit == "km" diff --git a/tests/test_issues_pylib.py b/tests/test_issues_pylib.py new file mode 100644 index 0000000000000000000000000000000000000000..56009a824f9b3a3608f444c2206237c668f394eb --- /dev/null +++ b/tests/test_issues_pylib.py @@ -0,0 +1,92 @@ +# -*- coding: utf-8 -*- +# This file is a part of the LinkAhead Project. +# +# Copyright (c) 2023 IndiScale GmbH <info@indiscale.com> +# Copyright (c) 2023 Daniel Hornung <d.hornung@indiscale.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +"""Tests for issues on gitlab.com, project linkahead-pylib. + +Tests should be named: + + ``test_gitlab_com_{issue_id}`` +""" + +import math +import os +import tempfile +import time + +import linkahead as db +import pytest + +from linkahead import administration as admin +from linkahead.exceptions import (TransactionError, HTTPClientError) + +CURATOR_ROLE = "curator" + + +def setup_module(): + db.configure_connection() + try: + db.execute_query("FIND ENTITY WITH ID > 99").delete() + except Exception as delete_exc: + print(delete_exc) + try: + admin._delete_user("TestUser") + except Exception as delete_exc: + print(delete_exc) + try: + admin._delete_role(CURATOR_ROLE) + except Exception as delete_exc: + print(delete_exc) + + +def setup_function(function): + """No setup required.""" + setup_module() + + +def teardown_function(function): + """Deleting entities again.""" + setup_module() + +# ########################### Issue tests start here ##################### + + +# @pytest.mark.xfail(reason="Entities with many, long, properties: " +# "https://gitlab.com/linkahead/linkahead-pylib/-/issues/108") +def test_gitlab_com_108(): + """Create RT and a list of properties, then insert and retrieve. + + This is another instance of bugs caused by caosdb/src/caosdb-mysqlbackend#48, but was originally + reported as https://gitlab.com/linkahead/linkahead-pylib/-/issues/108 + """ + cont = db.Container() + long = "Long" * 50 + first_RT = db.RecordType(name="TestRecord_first") + for index in range(20): + this_RT = db.RecordType(name=f"TestRecord_{long}_{index:02d}") + first_RT.add_property(this_RT) + cont.append(this_RT) + cont.append(first_RT) + cont.insert() + cont.retrieve() + print("retrieved") + + # Incidentally, the following lines seem to trigger another, unrelated problem + tests = db.execute_query("FIND ENTITY test*", cache=False) + tests.delete() + print("deleted") diff --git a/tests/test_issues_server.py b/tests/test_issues_server.py index bad61c220507c7cdd5360892471d04a2f6a032c7..7f76085d1b675968f0aed29678fe9b89caaf0e7e 100644 --- a/tests/test_issues_server.py +++ b/tests/test_issues_server.py @@ -27,9 +27,10 @@ import tempfile import time import caosdb as db -from caosdb import administration as admin import pytest -from caosdb.exceptions import TransactionError, HTTPClientError + +from caosdb import administration as admin +from caosdb.exceptions import (TransactionError, HTTPClientError, HTTPURITooLongError) CURATOR_ROLE = "curator" @@ -100,12 +101,14 @@ def test_issue_62(): # renaming has to be reflected in Test_Record and Test_Prop rec = db.execute_query("FIND Record Test_Record", unique=True) assert rec.parents[0].name == rtb.name + assert rec.get_property("Test_Prop").datatype == rtb.name prop = db.execute_query("FIND Property Test_Prop", unique=True) assert prop.datatype == rtb.name # fails; datatype not updated # Can't use Test_RTA as datatype anymore prop2 = db.Property(name="Test_Prop2", datatype="Test_RTA") - with pytest.raises(TransactionError): + with pytest.raises(TransactionError) as exc: prop2.insert() + assert "Unknown data type." in str(exc.value) def test_issue_85_a(): @@ -261,21 +264,21 @@ def test_issue_154_no_versioning(): "FIND RECORD MusicalInstrument WITH Manufacturer != 'Antonio Stradivari'")] assert "Violin" not in [e.name for e in db.execute_query( "FIND RECORD MusicalInstrument WITH NOT Manufacturer = 'Antonio Stradivari'")] - assert len(db.execute_query("FIND MusicalInstrument")) == 4 + assert len(db.execute_query("FIND ENTITY MusicalInstrument")) == 4 assert len(db.execute_query("FIND RECORD MusicalInstrument")) == 3 assert len(db.execute_query( - "FIND MusicalInstrument WITH Manufacturer")) == 3 + "FIND ENTITY MusicalInstrument WITH Manufacturer")) == 3 assert len(db.execute_query( "FIND RECORD MusicalInstrument WITH Manufacturer")) == 2 assert rec_inst.id == db.execute_query( - "FIND MusicalInstrument WITH Manufacturer = 'Antonio Stradivari'", + "FIND ENTITY MusicalInstrument WITH Manufacturer = 'Antonio Stradivari'", unique=True).id assert len(db.execute_query( - "FIND MusicalInstrument WITH NOT Manufacturer = 'Antonio Stradivari'")) == 3 + "FIND ENTITY MusicalInstrument WITH NOT Manufacturer = 'Antonio Stradivari'")) == 3 assert len(db.execute_query( "FIND RECORD MusicalInstrument WITH NOT Manufacturer = 'Antonio Stradivari'")) == 2 assert len(db.execute_query( - "FIND MusicalInstrument WITH Manufacturer != 'Antonio Stradivari'")) == 1 + "FIND ENTITY MusicalInstrument WITH Manufacturer != 'Antonio Stradivari'")) == 1 assert len(db.execute_query( "FIND RECORD MusicalInstrument WITH Manufacturer != 'Antonio Stradivari'")) == 1 @@ -301,22 +304,22 @@ def test_issue_154_with_versioning(): "FIND ANY VERSION OF RECORD MusicalInstrument WITH Manufacturer != 'Antonio Stradivari'")] assert "Violin" not in [e.name for e in db.execute_query( "FIND ANY VERSION OF RECORD MusicalInstrument WITH NOT Manufacturer = 'Antonio Stradivari'")] - assert len(db.execute_query("FIND ANY VERSION OF MusicalInstrument")) == 4 + assert len(db.execute_query("FIND ANY VERSION OF ENTITY MusicalInstrument")) == 4 assert len(db.execute_query( "FIND ANY VERSION OF RECORD MusicalInstrument")) == 3 assert len(db.execute_query( - "FIND ANY VERSION OF MusicalInstrument WITH Manufacturer")) == 3 + "FIND ANY VERSION OF ENTITY MusicalInstrument WITH Manufacturer")) == 3 assert len(db.execute_query( "FIND ANY VERSION OF RECORD MusicalInstrument WITH Manufacturer")) == 2 assert rec_inst.id == db.execute_query( - "FIND ANY VERSION OF MusicalInstrument WITH Manufacturer = 'Antonio Stradivari'", + "FIND ANY VERSION OF ENTITY MusicalInstrument WITH Manufacturer = 'Antonio Stradivari'", unique=True).id assert len(db.execute_query( - "FIND ANY VERSION OF MusicalInstrument WITH NOT Manufacturer = 'Antonio Stradivari'")) == 3 + "FIND ANY VERSION OF ENTITY MusicalInstrument WITH NOT Manufacturer = 'Antonio Stradivari'")) == 3 assert len(db.execute_query( "FIND ANY VERSION OF RECORD MusicalInstrument WITH NOT Manufacturer = 'Antonio Stradivari'")) == 2 assert len(db.execute_query( - "FIND ANY VERSION OF MusicalInstrument WITH Manufacturer != 'Antonio Stradivari'")) == 1 + "FIND ANY VERSION OF ENTITY MusicalInstrument WITH Manufacturer != 'Antonio Stradivari'")) == 1 assert len(db.execute_query( "FIND ANY VERSION OF RECORD MusicalInstrument WITH Manufacturer != 'Antonio Stradivari'")) == 1 @@ -336,21 +339,21 @@ def test_issue_154_with_versioning(): "FIND ANY VERSION OF RECORD MusicalInstrument WITH Manufacturer != 'Antonio Stradivari'")] assert "Violin" not in [e.name for e in db.execute_query( "FIND ANY VERSION OF RECORD MusicalInstrument WITH NOT Manufacturer = 'Antonio Stradivari'")] - assert len(db.execute_query("FIND ANY VERSION OF MusicalInstrument")) == 8 + assert len(db.execute_query("FIND ANY VERSION OF ENTITY MusicalInstrument")) == 8 assert len(db.execute_query( "FIND ANY VERSION OF RECORD MusicalInstrument")) == 6 assert len(db.execute_query( - "FIND ANY VERSION OF MusicalInstrument WITH Manufacturer")) == 6 + "FIND ANY VERSION OF ENTITY MusicalInstrument WITH Manufacturer")) == 6 assert len(db.execute_query( "FIND ANY VERSION OF RECORD MusicalInstrument WITH Manufacturer")) == 4 assert len(db.execute_query( - "FIND ANY VERSION OF MusicalInstrument WITH Manufacturer = 'Antonio Stradivari'")) == 2 + "FIND ANY VERSION OF ENTITY MusicalInstrument WITH Manufacturer = 'Antonio Stradivari'")) == 2 assert len(db.execute_query( - "FIND ANY VERSION OF MusicalInstrument WITH NOT Manufacturer = 'Antonio Stradivari'")) == 6 + "FIND ANY VERSION OF ENTITY MusicalInstrument WITH NOT Manufacturer = 'Antonio Stradivari'")) == 6 assert len(db.execute_query( "FIND ANY VERSION OF RECORD MusicalInstrument WITH NOT Manufacturer = 'Antonio Stradivari'")) == 4 assert len(db.execute_query( - "FIND ANY VERSION OF MusicalInstrument WITH Manufacturer != 'Antonio Stradivari'")) == 2 + "FIND ANY VERSION OF ENTITY MusicalInstrument WITH Manufacturer != 'Antonio Stradivari'")) == 2 assert len(db.execute_query( "FIND ANY VERSION OF RECORD MusicalInstrument WITH Manufacturer != 'Antonio Stradivari'")) == 2 @@ -364,11 +367,11 @@ def test_issue_127(): rt = db.RecordType(name="TestRecordType").add_property(name="TestDoubleProperty", value=["nan"]).insert() - test1 = db.execute_query("FIND TestRecordType", unique=True) + test1 = db.execute_query("FIND ENTITY TestRecordType", unique=True) assert math.isnan(test1.get_property("TestDoubleProperty").value[0]) test2 = db.execute_query( - "FIND TestRecordType WITH TestDoubleProperty = NaN", unique=True) + "FIND ENTITY TestRecordType WITH TestDoubleProperty = NaN", unique=True) assert math.isnan(test1.get_property("TestDoubleProperty").value[0]) @@ -378,14 +381,14 @@ def test_issue_170(): p.value = [1, 2] p.insert() - p2 = db.execute_query("FIND TestProp1", unique=True) + p2 = db.execute_query("FIND ENTITY TestProp1", unique=True) assert p2.datatype == db.LIST(db.INTEGER) assert p2.value == [1, 2] p.description = "TestDescription" p.update() # this failed - p2 = db.execute_query("FIND TestProp1", unique=True) + p2 = db.execute_query("FIND ENTITY TestProp1", unique=True) assert p2.datatype == db.LIST(db.INTEGER) assert p2.value == [1, 2] assert p2.description == "TestDescription" @@ -395,12 +398,12 @@ def test_issue_170(): p.datatype = db.LIST(db.INTEGER) p.update() # this worked because no value yet - p2 = db.execute_query("FIND TestProp2", unique=True) + p2 = db.execute_query("FIND ENTITY TestProp2", unique=True) assert p2.datatype == db.LIST(db.INTEGER) p.value = [1, 2] p.update() # this failed - p2 = db.execute_query("FIND TestProp2", unique=True) + p2 = db.execute_query("FIND ENTITY TestProp2", unique=True) assert p2.datatype == db.LIST(db.INTEGER) assert p2.value == [1, 2] @@ -411,7 +414,7 @@ def test_issue_170(): p.value = [1, 2] p.update() # this failed - p2 = db.execute_query("FIND TestProp3", unique=True) + p2 = db.execute_query("FIND ENTITY TestProp3", unique=True) assert p2.datatype == db.LIST(db.INTEGER) assert p2.value == [1, 2] @@ -846,7 +849,7 @@ def test_141(): # switch back to admin user db.configure_connection() - assert db.execute_query("FIND TestRT", unique=True).description == "Desc2" + assert db.execute_query("FIND ENTITY TestRT", unique=True).description == "Desc2" def test_145(): @@ -1105,3 +1108,348 @@ def test_135(): r1 = db.Record().add_parent("TestRT1").insert() r2 = db.Record().add_parent("TestRT1").add_property("TestProp", r1).insert() assert len(db.execute_query("FIND ENTITY WHICH IS REFERENCED BY A TestRT1 AS TestProp")) == 1 + + +def test_192(): + """Testing queries with Property by name. + + See https://gitlab.com/caosdb/caosdb-server/-/issues/192 + + COUNT Record WHICH HAS price -> Results: 19 + COUNT Record WHICH HAS Property price -> Results: 19 + COUNT Record WITH price -> Results: 19 + COUNT Record WITH Property price -> Results: 0 + """ + db.Property(name="testprop", datatype=db.DOUBLE).insert() + db.RecordType(name="TestRT").add_property("testprop").insert() + db.Record(name="Rec1").add_parent("TestRT").add_property("testprop", value=3.1).insert() + + query1 = "COUNT RECORD WHICH HAS testprop" + query2 = "COUNT RECORD WHICH HAS A testprop" + query3 = "COUNT RECORD WHICH HAS Property testprop" + query4 = "COUNT RECORD WHICH HAS A Property testprop" + query5 = "COUNT RECORD WITH testprop" + query6 = "COUNT RECORD WITH A testprop" + query7 = "COUNT RECORD WITH Property testprop" + query8 = "COUNT RECORD WITH A Property testprop" + + count1 = db.execute_query(query1) + count2 = db.execute_query(query2) + count3 = db.execute_query(query3) + count4 = db.execute_query(query4) + count5 = db.execute_query(query5) + count6 = db.execute_query(query6) + count7 = db.execute_query(query7) + count8 = db.execute_query(query8) + + assert count1 == 1 + assert count2 == 1 + assert count3 == 1 + assert count4 == 1 + assert count5 == 1 + assert count6 == 1 + assert count7 == 1 + assert count8 == 1 + + +def test_196a(): + """See https://gitlab.com/caosdb/caosdb-server/-/issues/196""" + admin._insert_role(name=CURATOR_ROLE, description="Desc") + + perms = admin._get_permissions(CURATOR_ROLE) + g = admin.PermissionRule(action="Grant", permission="TRANSACTION:*") + perms.add(g) + admin._set_permissions(CURATOR_ROLE, permission_rules=perms) + admin._insert_user(name="TestUser", password="Password1!", status="ACTIVE") + admin._set_roles(username="TestUser", roles=[CURATOR_ROLE]) + + db.configure_connection(username="TestUser", password_method="plain", + password="Password1!") + # works + db.RecordType(name="TestRT1").insert() + db.Property(name="TestProp1", datatype=db.TEXT).insert() + + # Deny TRANSACTION:INSERT:PROPERTY + db.configure_connection() + perms = admin._get_permissions(CURATOR_ROLE) + g = admin.PermissionRule(action="Deny", permission="TRANSACTION:INSERT:PROPERTY") + perms.add(g) + admin._set_permissions(CURATOR_ROLE, permission_rules=perms) + + db.configure_connection(username="TestUser", password_method="plain", + password="Password1!") + + # it is still allowed to insert a record type... + db.RecordType(name="TestRT2").insert() + + # fails + with pytest.raises(TransactionError) as cm: + # this should fail because the curator doesn't have TRANSACTION:INSERT:PROPERTY + db.Property(name="TestProp2", datatype=db.TEXT).insert() + assert cm.value.errors[0].msg == "You are not allowed to do this." + + +@pytest.mark.parametrize("deny", ["TRANSACTION:INSERT:", "TRANSACTION:INSERT:*"]) +def test_196b(deny): + """Same as test_196a but we completely deny insertion.""" + admin._insert_role(name=CURATOR_ROLE, description="Desc") + + perms = admin._get_permissions(CURATOR_ROLE) + g = admin.PermissionRule(action="Grant", permission="TRANSACTION:*") + perms.add(g) + admin._set_permissions(CURATOR_ROLE, permission_rules=perms) + admin._insert_user(name="TestUser", password="Password1!", status="ACTIVE") + admin._set_roles(username="TestUser", roles=[CURATOR_ROLE]) + + db.configure_connection(username="TestUser", password_method="plain", + password="Password1!") + # works + db.RecordType(name="TestRT1").insert() + db.Property(name="TestProp1", datatype=db.TEXT).insert() + + # Deny TRANSACTION:INSERT + db.configure_connection() + perms = admin._get_permissions(CURATOR_ROLE) + g = admin.PermissionRule(action="Deny", permission=deny) + perms.add(g) + admin._set_permissions(CURATOR_ROLE, permission_rules=perms) + + db.configure_connection(username="TestUser", password_method="plain", + password="Password1!") + + # fails (in contrast to test_196a) + with pytest.raises(TransactionError) as cm: + # this should fail because the curator doesn't have TRANSACTION:INSERT:RECORDTYPE + db.RecordType(name="TestRT2").insert() + assert cm.value.errors[0].msg == "You are not allowed to do this." + + # fails + with pytest.raises(TransactionError) as cm: + # this should fail because the curator doesn't have TRANSACTION:INSERT:PROPERTY + db.Property(name="TestProp2", datatype=db.TEXT).insert() + assert cm.value.errors[0].msg == "You are not allowed to do this." + + +@pytest.mark.parametrize("num", ["1e+23", "5e22", "2e-323", "2E-323", "5E22", "1E+23", "+1E+23"]) +def test_143(num): + """https://gitlab.com/caosdb/caosdb-server/-/issues/144""" + db.Property(name="scientific_notation", datatype=db.DOUBLE).insert() + db.RecordType(name="RT1").add_property("scientific_notation", value=num).insert() + + for query in [ + f"FIND RECORDTYPE RT1 WITH scientific_notation={num}", + f"FIND RECORDTYPE RT1 WITH scientific_notation='{num}'", + f"FIND RECORDTYPE RT1 WITH scientific_notation=\"{num}\"", + f"FIND RECORDTYPE RT1 WITH scientific_notation = {num}", + f"FIND RECORDTYPE RT1 WITH scientific_notation = '{num}'", + f"FIND RECORDTYPE RT1 WITH scientific_notation = \"{num}\"" + ]: + db.execute_query(query, unique=True) + + +@pytest.mark.parametrize("num", ["1 e+23", "- 5e22", "2e -323", + "2E- 323", "5 E 22", "1 E+ 23", "+ 1"]) +def test_143_white_space(num): + """https://gitlab.com/caosdb/caosdb-server/-/issues/144""" + + for query in [ + f"FIND RECORDTYPE RT1 WITH scientific_notation={num}", + f"FIND RECORDTYPE RT1 WITH scientific_notation='{num}'", + f"FIND RECORDTYPE RT1 WITH scientific_notation=\"{num}\"", + f"FIND RECORDTYPE RT1 WITH scientific_notation = {num}", + f"FIND RECORDTYPE RT1 WITH scientific_notation = '{num}'", + f"FIND RECORDTYPE RT1 WITH scientific_notation = \"{num}\"" + ]: + with pytest.raises(TransactionError) as cm: + db.execute_query(query) + assert cm.value.msg == f'You typed "{num}". Empty spaces are not allowed in numbers. Did you mean "{num.replace(" ", "")}"?' + + +def test_144(): + """https://gitlab.com/caosdb/caosdb-server/-/issues/144""" + db.Property(name="scientific_notation", datatype=db.DOUBLE, value="1e23").insert() + + value = db.execute_query("FIND PROPERTY scientific_notation", unique=True).value + assert str(value) == "1e+23" + assert isinstance(value, float) + assert value == 1e23 + assert value == 1e+23 + + +def test_166(): + """https://gitlab.com/caosdb/caosdb-server/-/issues/166""" + db.RecordType(name="exists").insert() + db.Property(name="exists_property", datatype=db.INTEGER).insert() + + db.RecordType(name="RT1").add_parent("exists").insert() + db.RecordType(name="RT2").add_parent("exists").add_property("exists_property", 32453).insert() + + with pytest.raises(TransactionError) as cm: + db.Record(name="RT3").add_parent("notexists").insert() + assert [e.msg for e in cm.value.errors] == ["Entity has unqualified parents."] + + with pytest.raises(TransactionError) as cm: + db.Record(name="RT4").add_parent("exists").add_property("notexists", 234243).insert() + assert [e.msg for e in cm.value.errors] == ["Entity has unqualified properties."] + + with pytest.raises(TransactionError) as cm: + db.Record( + name="RT5").add_parent("notexists").add_property( + "exists_property", + 234243).insert() + assert [e.msg for e in cm.value.errors] == ["Entity has unqualified parents."] + + +@pytest.mark.xfail(reason="fix needed") +def test_195(): + """https://gitlab.com/caosdb/caosdb-server/-/issues/195""" + admin._insert_role(name=CURATOR_ROLE, description="Desc") + + perms = admin._get_permissions(CURATOR_ROLE) + g = admin.PermissionRule(action="Grant", permission="INVALID_PERMISSION:*") + perms.add(g) + with pytest.raises(Exception): + admin._set_permissions(CURATOR_ROLE, permission_rules=perms) + + +def test_216(): + """https://gitlab.com/caosdb/caosdb-server/-/issues/216""" + p1 = db.Property(name='p1', datatype=db.DOUBLE).insert() + + cont = db.Container() + cont.append(db.RecordType(name="A") + .add_property(id=p1.id, name=p1.name, datatype=db.DOUBLE, + unit="min", + importance=db.RECOMMENDED) + .add_property(id=p1.id, name=p1.name, + importance=db.RECOMMENDED) + ) + cont.append(db.RecordType(name="B") + .add_parent(name="A", inheritance=db.SUGGESTED)) + cont.insert() + + assert db.execute_query("FIND RECORDTYPE B", unique=True).name == "B" + + +def test_138(): + """Problems with non-integer ids in query filters, see + https://gitlab.com/caosdb/caosdb-server/-/issues/138 + + """ + + queries = [ + "FIND ENTITY WITH ID={}", + "FIND ENTITY WITH ID=None", + "FIND ENTITY WITH ID=\"1 non-existing id\"" + ] + for query in queries: + # No error, but of course also no results. + results = db.execute_query(query) + assert len(results) == 0 + + +@pytest.mark.xfail(reason="Needs fix for parent name change caching, " + "see https://gitlab.com/caosdb/caosdb-server/-/issues/220") +def test_220(): + """Caching of children is not removed. + +See https://gitlab.com/caosdb/caosdb-server/-/issues/220""" + rectype = db.RecordType(name="OldName").insert() + rec = db.Record(name="rec").add_parent(rectype).insert() + + query = db.Query("FIND rec") + assert query.cached is None + + res_1 = query.execute(unique=True) + assert query.cached is False, "First query should be uncached." + assert res_1.id == rec.id + + res_2 = query.execute(unique=True) + assert query.cached is True, "Second query should be cached." + + rectype.name = "NewName" + rectype.update() + + res_3 = query.execute(unique=True) + assert res_3.parents[0].name == rectype.name, \ + "The name of the record's parent should be up-to-date." + assert query.cached is False, "Query after name change of parent should not be cached." + + +@pytest.mark.xfail(reason="Needs fix for intermediate length strings, " + "see https://gitlab.com/linkahead/linkahead-server/-/issues/101") +def test_101(): + """Unexpected server errors in case of intermediate length strings, + https://gitlab.indiscale.com/caosdb/src/caosdb-server/-/issues/101 + + """ + # This is ok + very_long_string = "Long string" * 10000 + with pytest.raises(HTTPURITooLongError): + db.execute_query(f"FIND RECORD WITH test=\"{very_long_string}\"") + # This is not + long_string = "Long string" * 100 + assert len(db.execute_query(f"FIND RECORD WITH test=\"{long_string}\"")) == 0 + + +@pytest.mark.xfail(reason="Needs fix for keeping datatype, " + "see https://gitlab.indiscale.com/caosdb/src/caosdb-server/-/issues/106") +def test_indiscale_106(): + """Datatype of old properties is changed. + +See https://gitlab.indiscale.com/caosdb/src/caosdb-server/-/issues/106 + """ + + # Create TEXT Property + p = db.Property("prop", datatype=db.TEXT) + p.insert() + + # Create Record using this Property + db.RecordType("RT").insert() + r = db.Record(name="rec") + r.add_parent("RT") + r.add_property(id=p.id, value="This is a TEXT property") + r.insert() + + print(db.Record(id=r.id).retrieve()) + assert db.Record(id=r.id).retrieve().get_property("prop").datatype == db.TEXT + + # Changing Property's datatype to REFERENCE + p.datatype = db.REFERENCE + p.update() + + # Existing Property should still be reported as TEXT + assert db.Record(id=r.id).retrieve().get_property("prop").datatype == db.TEXT + + +@pytest.mark.xfail(reason="https://gitlab.com/caosdb/caosdb-server/-/issues/230") +def test_230_name_duplicates_in_list_datatypes(): + """https://gitlab.com/linkahead/linkahead-server/-/issues/230""" + prop = db.Property(name="Test", datatype=db.TEXT).insert() + # RT with same name, will be used as datatype + rt = db.RecordType(name="Test").insert(unique=False) + rec = db.Record(name="TestRec").add_parent(id=rt.id).insert() + rec.add_property(id=rt.id, datatype=rt.id).update() # This works since it's not a list + rec.add_property(id=rt.id, datatype=db.LIST(rt.id)).update() # This fails + + +@pytest.mark.xfail(reason="https://gitlab.com/caosdb/caosdb-server/-/issues/235") +def test_235_long_name(): + """Should give an appropriate error, not just unknown server/-/issues.""" + length = 10256 + name = "N" * length + rt1 = db.RecordType(name=name) + try: + rt1.insert() + except Exception as exc: + assert not isinstance(exc, db.HTTPServerError) + # TODO more specific error should be asserted + + rt2 = db.RecordType(name="Short") + rt2.insert() + rt2.name = name + try: + rt2.update() + except Exception as exc: + assert not isinstance(exc, db.HTTPServerError) + # TODO more specific error should be asserted diff --git a/tests/test_list.py b/tests/test_list.py index 63ece67b7b454800533a68b2c86d5db51776be68..b2c246e092d9998e37b2c4fd12f2f18f26c4ae35 100644 --- a/tests/test_list.py +++ b/tests/test_list.py @@ -89,12 +89,12 @@ def test_list_datatype_know(): assert_equal( p.id, db.execute_query( - "FIND TestListProperty", + "FIND ENTITY TestListProperty", unique=True).id) assert_equal( p.datatype, db.execute_query( - "FIND TestListProperty", + "FIND ENTITY TestListProperty", unique=True).datatype) @@ -113,12 +113,12 @@ def test_rt_property_without_value(): assert_equal( p.id, db.execute_query( - "FIND TestRT", + "FIND ENTITY TestRT", unique=True).get_property("TestListProperty").id) assert_equal( p.datatype, db.execute_query( - "FIND TestRT", + "FIND ENTITY TestRT", unique=True).get_property("TestListProperty").datatype) @@ -141,21 +141,21 @@ def test_concrete_property_with_single_value(): assert_equal( p.id, db.execute_query( - "FIND TestRT", + "FIND ENTITY TestRT", unique=True).get_property("TestListProperty").id) assert_equal( p.datatype, db.execute_query( - "FIND TestRT", + "FIND ENTITY TestRT", unique=True).get_property("TestListProperty").datatype) assert_equal( "[1]", str( db.execute_query( - "FIND TestRT", unique=True).get_property("TestListProperty").value)) + "FIND ENTITY TestRT", unique=True).get_property("TestListProperty").value)) assert_equal( [1], db.execute_query( - "FIND TestRT", + "FIND ENTITY TestRT", unique=True).get_property("TestListProperty").value) @@ -175,7 +175,7 @@ def test_query_concrete_property_with_single_value(): assert_equal( rt.id, db.execute_query( - "FIND TestRT WHICH HAS A TestListProperty=1337", + "FIND ENTITY TestRT WHICH HAS A TestListProperty=1337", unique=True).id) @@ -195,7 +195,7 @@ def test_query_concrete_property_with_more_values(): assert_equal( rt.id, db.execute_query( - "FIND TestRT WHICH HAS A TestListProperty=1337", + "FIND ENTITY TestRT WHICH HAS A TestListProperty=1337", unique=True).id) @@ -292,7 +292,7 @@ def test_rt_ref_property_without_value(): assert_equal( db.execute_query( - "FIND TestRT2", + "FIND ENTITY TestRT2", unique=True).get_property("TestListProperty").datatype, db.LIST( rt.name)) @@ -308,7 +308,7 @@ def test_datatype_inheritance1(): assert_equal(p2.datatype, db.LIST(rt.name)) assert_equal( db.execute_query( - "FIND TestListProperty2", + "FIND ENTITY TestListProperty2", unique=True).datatype, db.LIST( rt.name)) @@ -328,7 +328,7 @@ def test_datatype_inheritance2(): assert_equal(p2.datatype, db.LIST(rt2.name)) assert_equal( db.execute_query( - "FIND TestListProperty2", + "FIND ENTITY TestListProperty2", unique=True).datatype, db.LIST( rt2.name)) @@ -348,7 +348,7 @@ def test_datatype_inheritance3(): assert_equal(p2.datatype, db.LIST(rt2.name)) assert_equal( db.execute_query( - "FIND TestListProperty2", + "FIND ENTITY TestListProperty2", unique=True).datatype, db.LIST( rt2.name)) @@ -492,17 +492,17 @@ def test_multi_ref_value(): assert_equal( db.execute_query( - "FIND TestRT2 WHICH HAS A TestProp=TestRec2", + "FIND ENTITY TestRT2 WHICH HAS A TestProp=TestRec2", unique=True).id, rt2.id) assert_equal( db.execute_query( - "FIND TestRT2 WHICH HAS A TestProp=TestRec1", + "FIND ENTITY TestRT2 WHICH HAS A TestProp=TestRec1", unique=True).id, rt2.id) assert_equal( db.execute_query( - "FIND TestRT2 WHICH HAS A TestProp=" + str(rec.id), + "FIND ENTITY TestRT2 WHICH HAS A TestProp=" + str(rec.id), unique=True).id, rt2.id) @@ -527,17 +527,17 @@ def test_multi_ref_with_doublets(): assert_equal( db.execute_query( - "FIND TestRT2 WHICH HAS A TestProp=TestRec2", + "FIND ENTITY TestRT2 WHICH HAS A TestProp=TestRec2", unique=True).id, rt2.id) assert_equal( db.execute_query( - "FIND TestRT2 WHICH HAS A TestProp=TestRec1", + "FIND ENTITY TestRT2 WHICH HAS A TestProp=TestRec1", unique=True).id, rt2.id) assert_equal( db.execute_query( - "FIND TestRT2 WHICH HAS A TestProp=" + str(rec1.id), + "FIND ENTITY TestRT2 WHICH HAS A TestProp=" + str(rec1.id), unique=True).id, rt2.id) @@ -560,20 +560,20 @@ def test_multi_ref_with_null(): assert_equal(rt2.get_property("TestProp").value[1], rec2.id) assert_equal(rt2.get_property("TestProp").value[2], None) - assert_equal(db.execute_query("FIND TestRT2", unique=True).id, rt2.id) + assert_equal(db.execute_query("FIND ENTITY TestRT2", unique=True).id, rt2.id) assert_equal( db.execute_query( - "FIND TestRT2 WHICH HAS A TestProp=TestRec2", + "FIND ENTITY TestRT2 WHICH HAS A TestProp=TestRec2", unique=True).id, rt2.id) assert_equal( db.execute_query( - "FIND TestRT2 WHICH HAS A TestProp=TestRec1", + "FIND ENTITY TestRT2 WHICH HAS A TestProp=TestRec1", unique=True).id, rt2.id) assert_equal( db.execute_query( - "FIND TestRT2 WITH TestProp IS NULL", + "FIND ENTITY TestRT2 WITH TestProp IS NULL", unique=True).id, rt2.id) @@ -592,17 +592,17 @@ def test_rec_with_value(): assert_true(rec4.is_valid()) assert_equal( db.execute_query( - "FIND TestRec4 WHICH REFERENCES TestRec3", + "FIND ENTITY TestRec4 WHICH REFERENCES TestRec3", unique=True).id, rec4.id) assert_equal( db.execute_query( - "FIND TestRec4 WHICH REFERENCES TestRec2", + "FIND ENTITY TestRec4 WHICH REFERENCES TestRec2", unique=True).id, rec4.id) assert_equal( db.execute_query( - "FIND TestRec4 WHICH REFERENCES TestRec1", + "FIND ENTITY TestRec4 WHICH REFERENCES TestRec1", unique=True).id, rec4.id) @@ -620,12 +620,12 @@ def test_rec_with_null_value(): assert_true(rec4.is_valid()) assert_equal( db.execute_query( - "FIND TestRec4 WHICH REFERENCES TestRec1", + "FIND ENTITY TestRec4 WHICH REFERENCES TestRec1", unique=True).id, rec4.id) assert_equal( db.execute_query( - "FIND TestRec4 WHICH REFERENCES TestRec2", + "FIND ENTITY TestRec4 WHICH REFERENCES TestRec2", unique=True).id, rec4.id) @@ -641,7 +641,7 @@ def test_list_of_references(): assert p.name == rt1.name assert p.datatype == db.LIST(rt1.name) - p = db.execute_query("FIND Test_RT2", unique=True).get_properties()[0] + p = db.execute_query("FIND ENTITY Test_RT2", unique=True).get_properties()[0] assert p.id == rt1.id assert p.name == rt1.name assert p.datatype == db.LIST(rt1.name) diff --git a/tests/test_messages.py b/tests/test_messages.py index 626e820dc64ee7c956ed440ee30a68ba7a221fff..79430422d37000700454d1d70b97fbf353f733dc 100644 --- a/tests/test_messages.py +++ b/tests/test_messages.py @@ -26,13 +26,14 @@ @author: Timm Fitschen """ +import caosdb as db + def test_messages_dict_behavior(): - from caosdb.common.models import Message - from caosdb.common.models import _Messages + from caosdb.common.models import Message, Messages - msgs = _Messages() + msgs = Messages() # create Message msg = Message( @@ -41,10 +42,10 @@ def test_messages_dict_behavior(): description="Greeting the world", body="Hello, world!") - # append it to the _Messages + # append it to the Messages msgs.append(msg) - # use _Messages as list of Message objects + # use Messages as list of Message objects for m in msgs: assert isinstance(m, Message) @@ -64,12 +65,14 @@ def test_messages_dict_behavior(): msgs["HelloWorld", 2] = "Greeting the world in German", "Hallo, Welt!" assert msgs["HelloWorld", 2] == ( "Greeting the world in German", "Hallo, Welt!") - msgs["HelloWorld", 2] = "Greeting the world in German", "Huhu, Welt!" - assert msgs["HelloWorld", 2] == ( - "Greeting the world in German", "Huhu, Welt!") del msgs["HelloWorld", 2] assert msgs.get("HelloWorld", 2) is None # this Message has no code and no description (make easy things easy...) msgs["HelloWorld"] = "Hello!" assert msgs["HelloWorld"] == "Hello!" + + +def test_info(): + a = str(db.Info()) + assert a.startswith("Connection to") diff --git a/tests/test_misc.py b/tests/test_misc.py index 326cd02e07de5313f84844d823490123b193bbd4..79aff21b565aaa76703bec3b423dcd042adc1dbf 100644 --- a/tests/test_misc.py +++ b/tests/test_misc.py @@ -33,6 +33,12 @@ from pytest import raises, mark, fixture set_test_key("_CAOSDB_PYINTTEST_SUITE") +def setup_function(function): + d = db.execute_query("SELECT id FROM ENTITY") + if len(d) > 0: + d.delete() + + def teardown_function(function): assert len(db.execute_query("FIND Entity with id>99")) == 0 @@ -60,6 +66,27 @@ def test_file_system_returns_ids(clear_database): assert search in str(body) +def test_file_system_returns_correct_url_with_proxy(clear_database): + c = db.get_connection() + resp = c.retrieve( + entity_uri_segments=["FileSystem"], + headers={"X-Forwarded-Proto": "myscheme"}, + reconnect=True) + body = resp.read() + print(body) + search = 'url="myscheme://' + assert search in str(body) + + resp = c.retrieve( + entity_uri_segments=["FileSystem"], + headers={"Forwarded": "by=byid;for=forid;host=hostaddress;proto=myother"}, + reconnect=True) + body = resp.read() + print(body) + search = 'url="myother://' + assert search in str(body) + + def test_sat_query_with_leading_slash(clear_database): upload_file = open("test.dat", "w") upload_file.write("hello world\n") @@ -345,51 +372,62 @@ def test_overrides_in_subdomains(clear_database): pov1 = Property( id=p1.id, + value="pov1", name="TestPropertyov1", description="desc1ov1") pov2 = Property( id=p2.id, + value="pov2", name="TestPropertyov2", - description="desc1ov2") + description="desc2ov2") pov3 = Property( id=p3.id, + value="pov3", name="TestPropertyov3", - description="desc1ov3") + description="desc3ov3") pov21 = Property( id=p1.id, + value="pov21", name="TestPropertyov21", description="desc1ov21") pov22 = Property( id=p2.id, + value="pov22", name="TestPropertyov22", - description="desc1ov22") + description="desc2ov22") pov31 = Property( id=p1.id, + value="pov31", name="TestPropertyov31", description="desc1ov31") pov32 = Property( id=p2.id, + value="pov32", name="TestPropertyov32", - description="desc1ov32") + description="desc2ov32") pov33 = Property( id=p3.id, + value="pov33", name="TestPropertyov33", - description="desc1ov33") + description="desc3ov33") pov321 = Property( id=p1.id, + value="pov321", name="TestPropertyov321", description="desc1ov321") pov322 = Property( id=p2.id, + value="pov322", name="TestPropertyov322", - description="desc1ov322") + description="desc2ov322") pov323 = Property( id=p3.id, + value="pov323", name="TestPropertyov323", - description="desc1ov323") + description="desc3ov323") pov32.add_property(pov321).add_property( pov322).add_property(pov323) @@ -397,8 +435,54 @@ def test_overrides_in_subdomains(clear_database): pov2.add_property(pov21).add_property(pov22) rt1 = RecordType(name="TestRT1").add_property( - pov1).add_property(pov2).add_property(pov3).insert() + pov1).add_property(pov2).add_property(pov3) + + rt1.insert() assert rt1.is_valid() is True + rt1 = db.execute_query(f"FIND ENTITY WITH id={rt1.id}", unique=True) + + assert len(rt1.get_properties()) == 3 + assert rt1.get_property("TestPropertyov1").description == "desc1ov1" + assert rt1.get_property("TestPropertyov1").value == "pov1" + assert rt1.get_property("TestPropertyov2").description == "desc2ov2" + assert rt1.get_property("TestPropertyov2").value == "pov2" + assert rt1.get_property("TestPropertyov3").description == "desc3ov3" + assert rt1.get_property("TestPropertyov3").value == "pov3" + + p1o = rt1.get_property("TestPropertyov1") + assert len(p1o.get_properties()) == 0 + + p2o = rt1.get_property("TestPropertyov2") + assert len(p2o.get_properties()) == 2 + assert p2o.get_property("TestPropertyov21").description == "desc1ov21" + assert p2o.get_property("TestPropertyov21").value == "pov21" + assert p2o.get_property("TestPropertyov22").description == "desc2ov22" + assert p2o.get_property("TestPropertyov22").value == "pov22" + assert len(p2o.get_property("TestPropertyov21").get_properties()) == 0 + assert len(p2o.get_property("TestPropertyov22").get_properties()) == 0 + + p3o = rt1.get_property("TestPropertyov3") + assert len(p3o.get_properties()) == 3 + assert p3o.get_property("TestPropertyov31").description == "desc1ov31" + assert p3o.get_property("TestPropertyov31").value == "pov31" + assert p3o.get_property("TestPropertyov32").description == "desc2ov32" + assert p3o.get_property("TestPropertyov32").value == "pov32" + assert p3o.get_property("TestPropertyov33").description == "desc3ov33" + assert p3o.get_property("TestPropertyov33").value == "pov33" + assert len(p3o.get_property("TestPropertyov31").get_properties()) == 0 + assert len(p3o.get_property("TestPropertyov32").get_properties()) == 3 + assert len(p3o.get_property("TestPropertyov33").get_properties()) == 0 + + p32o = p3o.get_property("TestPropertyov32") + assert p32o.get_property("TestPropertyov321").description == "desc1ov321" + assert p32o.get_property("TestPropertyov321").value == "pov321" + assert p32o.get_property("TestPropertyov322").description == "desc2ov322" + assert p32o.get_property("TestPropertyov322").value == "pov322" + assert p32o.get_property("TestPropertyov323").description == "desc3ov323" + assert p32o.get_property("TestPropertyov323").value == "pov323" + assert len(p32o.get_property("TestPropertyov321").get_properties()) == 0 + assert len(p32o.get_property("TestPropertyov322").get_properties()) == 0 + assert len(p32o.get_property("TestPropertyov323").get_properties()) == 0 def test_role_after_retrieve(clear_database): diff --git a/tests/test_name_properties.py b/tests/test_name_properties.py index 39e63e3b9850127f821c1679cb6ccd53c938a612..ad53e2050d9d7e514b72ad3f3df5be27603028cf 100644 --- a/tests/test_name_properties.py +++ b/tests/test_name_properties.py @@ -41,14 +41,14 @@ def teardown_module(): def setup_function(function): try: - db.execute_query("FIND Test*").delete() + db.execute_query("FIND ENTITY Test*").delete() except BaseException: pass def teardown_function(function): try: - db.execute_query("FIND Test*").delete() + db.execute_query("FIND ENTITY Test*").delete() except BaseException: pass @@ -66,10 +66,10 @@ def test_property_insertion(): def test_property_query(): pid = test_property_insertion().id - assert_equal(db.execute_query("FIND TestShortName", unique=True).id, pid) + assert_equal(db.execute_query("FIND ENTITY TestShortName", unique=True).id, pid) # the short name does not apply to the property itself!!! - assert_equal(len(db.execute_query("FIND TestSN")), 0) + assert_equal(len(db.execute_query("FIND ENTITY TestSN")), 0) def test_recordtype_insertion_separately_prop_by_id_direct_name_child(): @@ -181,22 +181,22 @@ def assert_same_unique_results(call, queries): def test_recordtype_query(): assert_same_unique_results( test_recordtype_insertion_separately_prop_by_id_direct_name_child, [ - "FIND TestRecordType", "FIND TestRT"]) + "FIND ENTITY TestRecordType", "FIND ENTITY TestRT"]) assert_same_unique_results( test_recordtype_insertion_separately_prop_by_name_direct_name_child, [ - "FIND TestRecordType", "FIND TestRT"]) + "FIND ENTITY TestRecordType", "FIND ENTITY TestRT"]) assert_same_unique_results( test_recordtype_insertion_container_prop_by_name_direct_name_child, [ - "FIND TestRecordType", "FIND TestRT"]) + "FIND ENTITY TestRecordType", "FIND ENTITY TestRT"]) assert_same_unique_results( test_recordtype_insertion_container_prop_by_tempid_direct_name_child, [ - "FIND TestRecordType", "FIND TestRT"]) + "FIND ENTITY TestRecordType", "FIND ENTITY TestRT"]) assert_same_unique_results( test_recordtpye_insertion_with_indirect_child_with_new_parent, [ - "FIND TestRecordType", "FIND TestRT"]) + "FIND ENTITY TestRecordType", "FIND ENTITY TestRT"]) assert_same_unique_results( test_recordtpye_insertion_with_indirect_child_with_existing_parent, [ - "FIND TestRecordType", "FIND TestRT"]) + "FIND ENTITY TestRecordType", "FIND ENTITY TestRT"]) def test_query_name_property(): @@ -209,7 +209,7 @@ def test_query_name_property(): rec.add_property("TestGivenName", "John") rec.insert() - assert db.execute_query("FIND TestPerson WITH TestGivenName='John'", + assert db.execute_query("FIND ENTITY TestPerson WITH TestGivenName='John'", unique=True).id == rec.id with raises(db.BadQueryError): db.execute_query("FIND John", unique=True) @@ -223,7 +223,7 @@ def test_query_name_property(): rec.add_property("TestGivenName", "John") rec.insert() - assert db.execute_query("FIND TestPerson WITH TestGivenName='John'", + assert db.execute_query("FIND ENTITY TestPerson WITH TestGivenName='John'", unique=True).id == rec.id assert db.execute_query("FIND John", unique=True).id == rec.id @@ -254,22 +254,22 @@ def test_query_property_with_pov(): assert_equal( db.execute_query( - "FIND TestExperiment WHICH HAS A TestRating=4", + "FIND ENTITY TestExperiment WHICH HAS A TestRating=4", unique=True).id, rec.id) assert_equal( db.execute_query( - "FIND TestExperiment WHICH HAS A TestRating>3", + "FIND ENTITY TestExperiment WHICH HAS A TestRating>3", unique=True).id, rec.id) assert_equal( db.execute_query( - "FIND TestExperiment WHICH HAS A TestScore=4", + "FIND ENTITY TestExperiment WHICH HAS A TestScore=4", unique=True).id, rec.id) assert_equal( db.execute_query( - "FIND TestExperiment WHICH HAS A TestScore>3", + "FIND ENTITY TestExperiment WHICH HAS A TestScore>3", unique=True).id, rec.id) @@ -299,12 +299,12 @@ def test_query_with_reference(): value="TestJohnDoe").insert() assert_equal( db.execute_query( - "FIND TestExperiment WHICH HAS A TestConductor=TestJohnDoe", + "FIND ENTITY TestExperiment WHICH HAS A TestConductor=TestJohnDoe", unique=True).id, rec.id) assert_equal( db.execute_query( - "FIND TestExperiment WHICH HAS A TestConductor=John", + "FIND ENTITY TestExperiment WHICH HAS A TestConductor=John", unique=True).id, rec.id) @@ -333,22 +333,22 @@ def test_query_with_back_reference(): value="TestJohnDoe").insert() assert_equal( db.execute_query( - "FIND TestPerson WHICH IS REFERENCED BY TestMeasurement", + "FIND ENTITY TestPerson WHICH IS REFERENCED BY TestMeasurement", unique=True).id, rec.id) assert_equal( db.execute_query( - "FIND TestPerson WHICH IS REFERENCED BY TestMeasurement AS A TestConductor", + "FIND ENTITY TestPerson WHICH IS REFERENCED BY TestMeasurement AS A TestConductor", unique=True).id, rec.id) assert_equal( db.execute_query( - "FIND TestPerson WHICH IS REFERENCED BY TestObservation", + "FIND ENTITY TestPerson WHICH IS REFERENCED BY TestObservation", unique=True).id, rec.id) assert_equal( db.execute_query( - "FIND TestPerson WHICH IS REFERENCED BY TestObservation AS A TestConductor", + "FIND ENTITY TestPerson WHICH IS REFERENCED BY TestObservation AS A TestConductor", unique=True).id, rec.id) diff --git a/tests/test_permissions.py b/tests/test_permissions.py index ff157cf0c9cf3af71f84c8827147d29c6cc95151..4f048607b7fe42ffe9a8a73191a9e857f2b61b82 100644 --- a/tests/test_permissions.py +++ b/tests/test_permissions.py @@ -36,6 +36,7 @@ from nose.tools import (assert_equal, assert_is_not_none) from pytest import raises, mark + test_user = "test_user" test_role = "test_role" test_pw = "passphrase1P!" @@ -142,10 +143,9 @@ def teardown_function(function): def setup_function(function): switch_to_admin_user() - try: - db.execute_query("FIND ENTITY *").delete() - except BaseException: - pass + d = db.execute_query("FIND ENTITY") + if len(d) > 0: + d.delete() def test_basic_acl_stuff(): @@ -183,7 +183,36 @@ def test_basic_acl_stuff(): assert_false("DELETE" in other_role_permissions) +@mark.xfail(reason="fix needed: https://gitlab.com/linkahead/linkahead-server/-/issues/247") +def test_server_issue_247(): + db.administration.set_server_property( + "QUERY_FILTER_ENTITIES_WITHOUT_RETRIEVE_PERMISSIONS", "TRUE") + person = db.RecordType("TestPerson").insert() + db.Property("TestFirstName", datatype=db.TEXT).insert() + db.Property("TestConductor", datatype=person).insert() + + dan = db.Record( + name="TestDaniel").add_property( + name="TestFirstName", + value="Daniel").add_parent(person).insert() + exp = db.RecordType( + name="TestExperiment").add_property( + name="TestConductor", + value=dan.id).insert() + + grant_permission(person, "RETRIEVE:*") + grant_permission(exp, "RETRIEVE:*") + deny_permission(dan, "RETRIEVE:*") + switch_to_test_user() + + assert db.execute_query( + "FIND ENTITY TestExperiment WHICH HAS A TestConductor=" + str(dan.id), + unique=True).id == exp.id + + def test_query(): + db.administration.set_server_property( + "QUERY_FILTER_ENTITIES_WITHOUT_RETRIEVE_PERMISSIONS", "TRUE") person = db.RecordType("TestPerson").insert() db.Property("TestFirstName", datatype=db.TEXT).insert() db.Property("TestConductor", datatype=person).insert() @@ -198,19 +227,19 @@ def test_query(): value=dan.id).insert() assert db.execute_query( - "FIND TestExperiment WHICH HAS A TestConductor->TestPerson", + "FIND ENTITY TestExperiment WHICH HAS A TestConductor->TestPerson", unique=True).id == exp.id assert db.execute_query( - "FIND TestExperiment WHICH HAS A TestConductor=TestPerson", + "FIND ENTITY TestExperiment WHICH HAS A TestConductor=TestPerson", unique=True).id == exp.id assert db.execute_query( - "FIND TestExperiment WHICH HAS A TestConductor=" + str(dan.id), + "FIND ENTITY TestExperiment WHICH HAS A TestConductor=" + str(dan.id), unique=True).id == exp.id assert db.execute_query( - "FIND TestExperiment", + "FIND ENTITY TestExperiment", unique=True).id == exp.id assert db.execute_query( - "FIND TestExperiment WHICH HAS A TestConductor WHICH has a TestFirstName=Daniel", + "FIND ENTITY TestExperiment WHICH HAS A TestConductor WHICH has a TestFirstName=Daniel", unique=True).id == exp.id '''success''' @@ -220,25 +249,24 @@ def test_query(): switch_to_test_user() assert db.execute_query( - "FIND TestExperiment WHICH HAS A TestConductor WHICH has a TestFirstName=Daniel", + "FIND ENTITY TestExperiment WHICH HAS A TestConductor WHICH has a TestFirstName=Daniel", unique=True).id == exp.id '''failure - dan''' deny_permission(dan, "RETRIEVE:*") switch_to_test_user() - # this fails if server is configured with - # QUERY_FILTER_ENTITIES_WITHOUT_RETRIEVE_PERMISSIONS = FALSE with raises(db.EmptyUniqueQueryError): db.execute_query( - "FIND TestExperiment WHICH HAS A TestConductor WHICH has a TestFirstName=Daniel", + "FIND ENTITY TestExperiment WHICH HAS A TestConductor WHICH has a TestFirstName=Daniel", unique=True) '''... but works without the which clause''' - assert db.execute_query("FIND TestExperiment", unique=True).id == exp.id + assert db.execute_query("FIND ENTITY TestExperiment", unique=True).id == exp.id + '''and with the id''' - assert db.execute_query( - "FIND TestExperiment WHICH HAS A TestConductor=" + str(dan.id), - unique=True).id == exp.id + # assert db.execute_query( + # "FIND ENTITY TestExperiment WHICH HAS A TestConductor=" + str(dan.id), + # unique=True).id == exp.id '''failure - exp''' grant_permission(dan, "RETRIEVE:*") @@ -247,11 +275,11 @@ def test_query(): with raises(db.EmptyUniqueQueryError): db.execute_query( - "FIND TestExperiment WHICH HAS A TestConductor=TestDaniel", + "FIND ENTITY TestExperiment WHICH HAS A TestConductor=TestDaniel", unique=True) with raises(db.EmptyUniqueQueryError): - db.execute_query("FIND TestExperiment", unique=True) + db.execute_query("FIND ENTITY TestExperiment", unique=True) def test_update_acl(): @@ -279,7 +307,7 @@ def test_update_acl(): db.get_config().get("Connection", "username"))) p2 = db.execute_query( - "FIND TestProperty", + "FIND ENTITY TestProperty", unique=True, flags={ "ACL": None}) @@ -304,7 +332,7 @@ def test_update_acl(): p2.update() p3 = db.execute_query( - "FIND TestProperty", + "FIND ENTITY TestProperty", unique=True, flags={ "ACL": None}) @@ -330,7 +358,7 @@ def test_update_acl(): assert te.value.has_error(db.AuthorizationError) p3 = db.execute_query( - "FIND TestProperty", + "FIND ENTITY TestProperty", unique=True, flags={ "ACL": None}) @@ -363,7 +391,7 @@ def test_update_name(): assert_is_none(p.acl) p.update() - p2 = db.execute_query("FIND Test*", unique=True) + p2 = db.execute_query("FIND ENTITY Test*", unique=True) assert p.is_valid() assert_equal(p2.name, "TestPropertyNew") @@ -378,7 +406,7 @@ def test_update_name(): p.update() assert te.value.has_error(db.AuthorizationError) - p2 = db.execute_query("FIND Test*", unique=True) + p2 = db.execute_query("FIND ENTITY Test*", unique=True) assert p2.is_valid() assert p2.name == "TestPropertyNew" @@ -399,7 +427,7 @@ def test_update_desc(): p.description = "DescriptionNew" p.update() - p2 = db.execute_query("FIND Test*", unique=True) + p2 = db.execute_query("FIND ENTITY Test*", unique=True) assert p.is_valid() assert_equal(p2.description, "DescriptionNew") @@ -411,7 +439,7 @@ def test_update_desc(): p.update() assert te.value.has_error(db.AuthorizationError) - p2 = db.execute_query("FIND Test*", unique=True) + p2 = db.execute_query("FIND ENTITY Test*", unique=True) assert p2.is_valid() assert p2.description == "DescriptionNew" @@ -428,7 +456,7 @@ def test_update_data_type(): p.datatype = db.INTEGER p.update() - p2 = db.execute_query("FIND Test*", unique=True) + p2 = db.execute_query("FIND ENTITY Test*", unique=True) assert p.is_valid() assert_equal(p2.datatype, db.INTEGER) @@ -440,7 +468,7 @@ def test_update_data_type(): p.update() assert te.value.has_error(db.AuthorizationError) - p2 = db.execute_query("FIND Test*", unique=True) + p2 = db.execute_query("FIND ENTITY Test*", unique=True) assert p2.is_valid() assert p2.datatype == db.INTEGER @@ -457,7 +485,7 @@ def test_update_role(): rt.role = "RecordType" rt.update() - rt2 = db.execute_query("FIND TestProperty", unique=True) + rt2 = db.execute_query("FIND ENTITY TestProperty", unique=True) assert isinstance(rt2, db.RecordType) deny_permission(p, "UPDATE:ROLE") @@ -469,7 +497,7 @@ def test_update_role(): rec.update() assert te.value.has_error(db.AuthorizationError) - rt2 = db.execute_query("FIND Test*", unique=True) + rt2 = db.execute_query("FIND ENTITY Test*", unique=True) assert rt2.is_valid() assert isinstance(rt2, db.RecordType) @@ -491,7 +519,7 @@ def test_update_move_file(): f.path = "/testfiles/otherpermissiontestfiles/test.dat" f.update() - f2 = db.execute_query("FIND TestFile", unique=True) + f2 = db.execute_query("FIND ENTITY TestFile", unique=True) assert_equal(f2.path, "/testfiles/otherpermissiontestfiles/test.dat") deny_permission(f, "UPDATE:FILE:MOVE") @@ -502,7 +530,7 @@ def test_update_move_file(): f.update() assert te.value.has_error(db.AuthorizationError) - f2 = db.execute_query("FIND TestFile", unique=True) + f2 = db.execute_query("FIND ENTITY TestFile", unique=True) assert f2.path == "/testfiles/otherpermissiontestfiles/test.dat" @@ -523,19 +551,19 @@ def test_update_add_file(): f.update() assert te.value.has_error(db.AuthorizationError) - f2 = db.execute_query("FIND TestFile", unique=True) + f2 = db.execute_query("FIND ENTITY TestFile", unique=True) assert f2.path is None '''SUCCESS''' grant_permission(f, "UPDATE:FILE:ADD") - f2 = db.execute_query("FIND TestFile", unique=True) + f2 = db.execute_query("FIND ENTITY TestFile", unique=True) f2.path = "/testfiles/permissiontestfiles/newtest.dat" f2.file = upload_file f2.update() assert f2.is_valid() - f2 = db.execute_query("FIND TestFile", unique=True) + f2 = db.execute_query("FIND ENTITY TestFile", unique=True) assert_equal(f2.path, "/testfiles/permissiontestfiles/newtest.dat") @@ -564,7 +592,7 @@ def test_update_change_file(): f.update() assert te.value.has_error(db.AuthorizationError) - f2 = db.execute_query("FIND TestFile", unique=True) + f2 = db.execute_query("FIND ENTITY TestFile", unique=True) download_file = f2.download() assert db.File._get_checksum( download_file) == db.File._get_checksum(upload_file) @@ -578,12 +606,12 @@ def test_update_change_file(): grant_permission(f, "UPDATE:FILE:ADD") print(f.acl) - f2 = db.execute_query("FIND TestFile", unique=True) + f2 = db.execute_query("FIND ENTITY TestFile", unique=True) f2.file = upload_file2 f2.update() assert f2.is_valid() - f2 = db.execute_query("FIND TestFile", unique=True) + f2 = db.execute_query("FIND ENTITY TestFile", unique=True) download_file = f2.download() assert db.File._get_checksum( download_file) == db.File._get_checksum(upload_file2) @@ -597,7 +625,7 @@ def test_update_add_property(): rt = db.RecordType(name="TestRecordType").insert() assert rt.is_valid() - rt = db.execute_query("FIND TestRecordType", unique=True) + rt = db.execute_query("FIND ENTITY TestRecordType", unique=True) assert_equal(len(rt.get_properties()), 0) grant_permission(p, "RETRIEVE:ENTITY") @@ -611,7 +639,7 @@ def test_update_add_property(): '''Success - add p to rt''' rt.add_property(name="TestProperty", id=p.id).update() - rt = db.execute_query("FIND TestRecordType", unique=True) + rt = db.execute_query("FIND ENTITY TestRecordType", unique=True) assert_equal(len(rt.get_properties()), 1) assert_is_not_none(rt.get_property("TestProperty")) @@ -623,7 +651,7 @@ def test_update_add_property(): rt.update() assert te.value.has_error(db.AuthorizationError) - rt2 = db.execute_query("FIND TestRecordType", unique=True) + rt2 = db.execute_query("FIND ENTITY TestRecordType", unique=True) assert len(rt2.get_properties()) == 1 assert rt2.get_property("TestProperty") is not None @@ -633,7 +661,7 @@ def test_update_add_property(): rt.update() assert te.value.has_error(db.AuthorizationError) - rt2 = db.execute_query("FIND TestRecordType", unique=True) + rt2 = db.execute_query("FIND ENTITY TestRecordType", unique=True) assert len(rt2.get_properties()) == 1 assert rt2.get_property("TestProperty") is not None @@ -649,7 +677,7 @@ def test_update_remove_property(): name="TestProperty2").insert() assert rt.is_valid() - rt = db.execute_query("FIND TestRecordType", unique=True) + rt = db.execute_query("FIND ENTITY TestRecordType", unique=True) assert_equal(len(rt.get_properties()), 2) assert_is_not_none(rt.get_property("TestProperty")) assert_is_not_none(rt.get_property("TestProperty2")) @@ -665,7 +693,7 @@ def test_update_remove_property(): '''Success - remove p2 from rt''' rt.remove_property("TestProperty2").update() - rt2 = db.execute_query("FIND TestRecordType", unique=True) + rt2 = db.execute_query("FIND ENTITY TestRecordType", unique=True) assert_equal(len(rt2.get_properties()), 1) assert_is_not_none(rt2.get_property("TestProperty")) assert_is_none(rt2.get_property("TestProperty2")) @@ -678,7 +706,7 @@ def test_update_remove_property(): rt.update() assert te.value.has_error(db.AuthorizationError) - rt2 = db.execute_query("FIND TestRecordType", unique=True) + rt2 = db.execute_query("FIND ENTITY TestRecordType", unique=True) assert len(rt2.get_properties()) == 1 assert rt2.get_property("TestProperty") is not None @@ -691,7 +719,7 @@ def test_update_add_parent(): par2 = db.RecordType(name="TestRecordTypePar2").insert() assert par2.is_valid() - rt = db.execute_query("FIND TestRecordType", unique=True) + rt = db.execute_query("FIND ENTITY TestRecordType", unique=True) assert_equal(len(rt.get_parents()), 0) grant_permission(rt, "RETRIEVE:ENTITY") @@ -704,7 +732,7 @@ def test_update_add_parent(): '''Success - add par1 to rt''' rt.add_parent(name="TestRecordTypePar1", id=par1.id).update() - rt2 = db.execute_query("FIND TestRecordType", unique=True) + rt2 = db.execute_query("FIND ENTITY TestRecordType", unique=True) assert_equal(len(rt2.get_parents()), 1) assert_is_not_none(rt2.get_parent("TestRecordTypePar1")) @@ -716,7 +744,7 @@ def test_update_add_parent(): rt.update() assert te.value.has_error(db.AuthorizationError) - rt2 = db.execute_query("FIND TestRecordType", unique=True) + rt2 = db.execute_query("FIND ENTITY TestRecordType", unique=True) assert len(rt2.get_parents()) == 1 assert rt2.get_parent("TestRecordTypePar1") is not None @@ -726,7 +754,7 @@ def test_update_add_parent(): rt.update() assert te.value.has_error(db.AuthorizationError) - rt2 = db.execute_query("FIND TestRecordType", unique=True) + rt2 = db.execute_query("FIND ENTITY TestRecordType", unique=True) assert len(rt2.get_parents()) == 1 assert rt2.get_parent("TestRecordTypePar1") is not None assert rt2.get_parent("TestRecordTypePar2") is None @@ -741,7 +769,7 @@ def test_update_remove_parent(): par1).add_parent(par2).insert() assert rt.is_valid() - rt = db.execute_query("FIND TestRecordType", unique=True) + rt = db.execute_query("FIND ENTITY TestRecordType", unique=True) assert_equal(len(rt.get_parents()), 2) assert_is_not_none(rt.get_parent("TestRecordTypePar1")) assert_is_not_none(rt.get_parent("TestRecordTypePar2")) @@ -756,7 +784,7 @@ def test_update_remove_parent(): '''Success''' rt.remove_parent("TestRecordTypePar2").update() - rt = db.execute_query("FIND TestRecordType", unique=True) + rt = db.execute_query("FIND ENTITY TestRecordType", unique=True) assert_equal(len(rt.get_parents()), 1) assert_is_not_none(rt.get_parent("TestRecordTypePar1")) assert_is_none(rt.get_parent("TestRecordTypePar2")) @@ -769,7 +797,7 @@ def test_update_remove_parent(): rt.update() assert te.value.has_error(db.AuthorizationError) - rt = db.execute_query("FIND TestRecordType", unique=True) + rt = db.execute_query("FIND ENTITY TestRecordType", unique=True) assert len(rt.get_parents()) == 1 assert rt.get_parent("TestRecordTypePar1") is not None assert rt.get_parent("TestRecordTypePar2") is None @@ -782,7 +810,7 @@ def test_update_value(): value="Value").insert() assert p.is_valid() - p = db.execute_query("FIND Test*", unique=True) + p = db.execute_query("FIND ENTITY Test*", unique=True) assert p.is_valid() assert p.value == "Value" @@ -793,7 +821,7 @@ def test_update_value(): p.value = "NewValue" p.update() - p = db.execute_query("FIND Test*", unique=True) + p = db.execute_query("FIND ENTITY Test*", unique=True) assert p.is_valid() assert p.value == "NewValue" @@ -805,7 +833,7 @@ def test_update_value(): p.update() assert te.value.has_error(db.AuthorizationError) - p2 = db.execute_query("FIND Test*", unique=True) + p2 = db.execute_query("FIND ENTITY Test*", unique=True) assert p2.is_valid() assert p2.value == "NewValue" @@ -817,7 +845,7 @@ def test_deletion(): grant_permission(p, "RETRIEVE:ENTITY") '''Failure''' - p = db.execute_query("FIND Test*", unique=True) + p = db.execute_query("FIND ENTITY Test*", unique=True) assert p.is_valid() with raises(db.TransactionError) as te: p.delete() @@ -917,7 +945,7 @@ def test_download_file(): assert f.is_valid() '''FAILURE''' - f2 = db.execute_query("FIND TestFile", unique=True) + f2 = db.execute_query("FIND ENTITY TestFile", unique=True) grant_permission(f2, "RETRIEVE:ENTITY") deny_permission(f2, "RETRIEVE:FILE") @@ -928,7 +956,7 @@ def test_download_file(): '''SUCCESS''' grant_permission(f2, "RETRIEVE:FILE") - f2 = db.execute_query("FIND TestFile", unique=True) + f2 = db.execute_query("FIND ENTITY TestFile", unique=True) download_file = f2.download() assert db.File._get_checksum( download_file) == db.File._get_checksum(upload_file) @@ -1164,3 +1192,145 @@ def test_check_entity_acl_roles(): assert ret.get_warnings()[0].description == "User role does not exist." db.administration.set_server_property("CHECK_ENTITY_ACL_ROLES_MODE", reset) + + +def test_deny_update_role(): + + p = db.Property(name="TestProperty", datatype=db.TEXT).insert() + assert p.is_valid() + + grant_permission(p, "RETRIEVE:*") + grant_permission(p, "UPDATE:*") + + '''Success''' + p.name = "TestPropertyNew" + assert_is_none(p.acl) + p.update() + + '''Failure''' + switch_to_admin_user() + db.administration._set_permissions( + role=test_role, permission_rules=[ + db.administration.PermissionRule( + "Deny", "TRANSACTION:UPDATE:*")]) + switch_to_test_user() + + p.retrieve() + p.name = "TestPropertyEvenNewer" + with raises(db.TransactionError) as te: + p.update() + + +def test_query_with_invisible_reference(): + """ + Names of references that are not visible to the test user should not be usable as query + filters. + """ + db.administration.set_server_property( + "QUERY_FILTER_ENTITIES_WITHOUT_RETRIEVE_PERMISSIONS", "TRUE") + + rt = db.RecordType(name="TestRT").insert() + rec_invisible = db.Record(name="TestInvisible").add_parent(rt).insert() + rec_visible = db.Record(name="TestVisible").add_parent( + rt).add_property(name=rt.name, value=rec_invisible.id).insert() + # test user is only allowed to see rec_visible, not rec_invisble + grant_permission(rec_visible, "RETRIEVE:*") + deny_permission(rec_invisible, "RETRIEVE:*") + + # as admin, I'm allowed to filter this + switch_to_admin_user() + assert len(db.execute_query(f"FIND {rt.name} WITH {rt.name}={rec_invisible.name}")) == 1 + + switch_to_test_user() + + # Retrival is forbidden + with raises(db.TransactionError) as te: + retrieved_invisible = db.Record(id=rec_invisible.id).retrieve() + assert te.value.has_error(db.AuthorizationError) + + retrieved_visible = db.Record(id=rec_visible.id).retrieve() + assert retrieved_visible.name == rec_visible.name + assert retrieved_visible.get_property(rt.name) is not None + assert retrieved_visible.get_property(rt.name).value == rec_invisible.id + + # We cant see rec_invisible, so its name can't be used as a valid query filter. + assert len(db.execute_query( + f"FIND {rt.name} WITH {rt.name} WITH name={rec_invisible.name}")) == 0 + assert len(db.execute_query(f"FIND {rt.name} WITH {rt.name}={rec_invisible.name}")) == 0 + assert len(db.execute_query(f"FIND {rt.name} WITH {rt.name} LIKE '*invis*'")) == 0 + + +def test_select_query_with_invisible_reference(): + """SELECT queries must not leak property values of invisible referenced entities.""" + + visible_rt = db.RecordType(name="TestTypeVisible").insert() + invisible_rt = db.RecordType(name="TestTypeInvisible").insert() + other_rt = db.RecordType(name="TestTypeOther").insert() + prop = db.Property(name="TestProp", datatype=db.INTEGER).insert() + + other_rec = db.Record(name="TestOther").add_parent(other_rt).insert() + referenced_visible = db.Record(name="TestReferencedVisible").add_parent(visible_rt).insert() + # invisible rec will have one int property, one reference to the (invisible) + # other rt and one to the visible rt. + invisible_rec = db.Record(name="TestInvisible").add_parent(invisible_rt) + invisible_rec.add_property(name=prop.name, value=42) + invisible_rec.add_property(name=other_rt.name, value=other_rec.id) + invisible_rec.add_property(name=visible_rt.name, value=referenced_visible.id) + invisible_rec.insert() + visible_rec = db.Record(name="TestVisible").add_parent(visible_rt.name) + visible_rec.add_property(name=invisible_rt.name, value=invisible_rec.id) + visible_rec.insert() + + # Everything is there when queried as admin + select_query = ( + f"SELECT name, {invisible_rt.name}, {invisible_rt.name}.name, " + f"{invisible_rt.name}.{prop.name}, {invisible_rt.name}.{other_rt.name}, " + f"{invisible_rt.name}.{other_rt.name}.name FROM {visible_rec.id}") + select_results = db.execute_query(select_query) + value_args = ["name", f"{invisible_rt.name}", (invisible_rt.name, "name"), + (invisible_rt.name, prop.name), (invisible_rt.name, other_rt.name), + (invisible_rt.name, other_rt.name, "name")] + values = select_results.get_property_values(*value_args)[0] + assert values[0] == visible_rec.name + assert values[1] == invisible_rec.id + assert values[2] == invisible_rec.name + assert values[3] == invisible_rec.get_property(prop.name).value + assert values[4] == other_rec.id + assert values[5] == other_rec.name + + for rec in [referenced_visible, visible_rec]: + grant_permission(rec, "RETRIEVE:*") + for rec in [invisible_rec, other_rec]: + deny_permission(rec, "RETRIEVE:*") + + switch_to_test_user() + + select_results = db.execute_query(select_query) + values = select_results.get_property_values(*value_args)[0] + assert values[0] == visible_rec.name + assert values[1] == invisible_rec.id # id is ok + assert values[2] == invisible_rt.name # fall-back to property's name + assert values[3] is None # prop isn't either + assert values[4] is None # neither id ... + assert values[5] is None # ... nor name of other rec referenced by invisible + + # Special case of visible referencing invisible referencing visible + + switch_to_admin_user() + + select_query = ( + f"SELECT {invisible_rt.name}.{visible_rt.name}, " + f"{invisible_rt.name}.{visible_rt.name}.name FROM {visible_rec.id}") + value_args = [(invisible_rt.name, visible_rt.name), + (invisible_rt.name, visible_rt.name, "name")] + select_results = db.execute_query(select_query) + values = select_results.get_property_values(*value_args)[0] + assert values[0] == referenced_visible.id + assert values[1] == referenced_visible.name + + switch_to_test_user() + + select_results = db.execute_query(select_query) + values = select_results.get_property_values(*value_args)[0] + assert values[0] is None + assert values[1] is None diff --git a/tests/test_plantuml.py b/tests/test_plantuml.py index 87ae6b0e01781a5f811768e69a5ca4e55b881414..d3e2a930277219273f58c064df53813370986fef 100644 --- a/tests/test_plantuml.py +++ b/tests/test_plantuml.py @@ -224,7 +224,7 @@ class TestRetrieveSubstructure(unittest.TestCase): self.assertEqual(len(tst4), 13) def tearDown(self) -> None: - db.execute_query(f'FIND {self.test_prefix}*').delete() + db.execute_query(f'FIND ENTITY {self.test_prefix}*').delete() if __name__ == '__main__': diff --git a/tests/test_pylib_caching.py b/tests/test_pylib_caching.py new file mode 100644 index 0000000000000000000000000000000000000000..365deff29c5c6fadba7a8bd5c480b2c257890548 --- /dev/null +++ b/tests/test_pylib_caching.py @@ -0,0 +1,89 @@ +# This file is a part of the CaosDB Project. +# +# Copyright (C) 2023 IndiScale GmbH <info@indiscale.com> +# Copyright (C) 2023 Daniel Hornung <d.hornung@indiscale.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +"""Test the Python-side caching of server queries.""" + +import os +from datetime import datetime + +import caosdb as db +from caosdb.cached import cached_query, cached_get_entity_by, cache_clear + + +def setup_function(): + d = db.execute_query("FIND Entity WITH ID > 99") + if len(d) > 0: + d.delete() + cache_clear() + + with open("test.dat", "w", encoding="utf-8") as upload_file: + upload_file.write("hello world\n") + + +def teardown_function(): + setup_function() + + try: + os.remove("test.dat") + except Exception as e: + print(e) + + +def test_caching(): + """Test if cached functions work at all.""" + + rect = db.RecordType(name="RT1").insert() + rec = db.Record(name="rec1").add_parent(rect).insert() + + for res in (cached_get_entity_by(eid=rec.id), + cached_get_entity_by(name=rec.name), + cached_get_entity_by(query="FIND RECORD rec1"), + cached_query("FIND RECORD rec1")[0], + ): + assert res.id == rec.id + + file_ = db.File(name="TestFile", + description="Testfile Desc", + path="testfiles/test.dat", + file="test.dat").insert() + res = cached_get_entity_by(path="testfiles/test.dat") + assert file_.id == res.id + + +def test_caching_speed(): + """Test if caching is faster that uncached access.""" + rect = db.RecordType(name="RT1").insert() + db.Record(name="rec1").add_parent(rect).insert() + + # Retrieve once to set up server-side caching. + db.execute_query("FIND RECORD rec1") + + # uncached + before = datetime.now() + cached_query("FIND RECORD rec1") + after = datetime.now() + time_uncached = after - before + + # cached + before = datetime.now() + cached_query("FIND RECORD rec1") + after = datetime.now() + time_cached = after - before + + error_str = f"Cached query was not faster than uncached, {time_uncached} vs. {time_cached}" + assert time_cached < time_uncached, error_str diff --git a/tests/test_query.py b/tests/test_query.py index 93f6315d272b7df35e55d934ea8485c665e4c440..87500c405966f1b07fab239ce679b72ce3b6f3f0 100644 --- a/tests/test_query.py +++ b/tests/test_query.py @@ -29,12 +29,12 @@ import os import random -import caosdb as db -from pytest import mark, raises +import caosdb as db from caosdb.connection.connection import get_connection -from caosdb.exceptions import EmptyUniqueQueryError +from caosdb.exceptions import EmptyUniqueQueryError, TransactionError from lxml import etree +from pytest import mark, raises def setup_module(): @@ -44,8 +44,9 @@ def setup_module(): def setup_function(function): + db.administration.set_server_property("FIND_QUERY_DEFAULT_ROLE", "ENTITY") try: - db.execute_query("FIND *").delete() + db.execute_query("FIND ENTITY").delete() except Exception as e: print(e) @@ -59,6 +60,10 @@ def teardown_function(function): print(e) +def teardown_module(): + db.administration.set_server_property("FIND_QUERY_DEFAULT_ROLE", "RECORD") + + def test_query_with_reference_by_parent(): db.RecordType("TestExperiment").insert() db.RecordType("TestProtocolLog").insert() @@ -88,6 +93,8 @@ def test_query_with_reference_by_parent(): unique=True).id assert exp_rec.id == db.execute_query( "FIND TestExperiment .-> " + str(sp_rec.id), unique=True).id + assert exp_rec.id == db.execute_query("FIND ENTITY " + str(exp_rec.id), unique=True).id + assert exp_rec.id == db.execute_query("FIND RECORD " + str(exp_rec.id), unique=True).id assert exp_rec.id == db.execute_query( "FIND TestExperiment .-> TestSpecialProtocolLog1", unique=True).id assert exp_rec.id == db.execute_query( @@ -932,11 +939,11 @@ def test_query_benchmark(): print(body) xml = etree.fromstring(body) # see #4 - #assert 3 == len(xml) - #assert "query" == xml[0].tag.lower() - #assert "transactionbenchmark" == xml[0][3].tag.lower() - #benchmark = xml[0][3] - #assert len(benchmark) > 0 + # assert 3 == len(xml) + # assert "query" == xml[0].tag.lower() + # assert "transactionbenchmark" == xml[0][3].tag.lower() + # benchmark = xml[0][3] + # assert len(benchmark) > 0 def test_like_query(): @@ -1094,6 +1101,8 @@ def test_query_cache(): def test_query_cache_with_permissions(): + db.administration.set_server_property( + "QUERY_FILTER_ENTITIES_WITHOUT_RETRIEVE_PERMISSIONS", "TRUE") db.RecordType("TestRT").insert() db.RecordType("TestRT2").insert() public_record = db.Record().add_parent("TestRT").insert() @@ -1160,7 +1169,7 @@ def test_query_cache_with_permissions(): def test_find_star(): """related: caosdb-server#116""" rt = db.RecordType("TestRT").insert() - response = db.execute_query("FIND *")[0] + response = db.execute_query("FIND ENTITY")[0] assert response.id == rt.id @@ -1305,3 +1314,159 @@ def test_transaction_time(): with raises(EmptyUniqueQueryError): db.execute_query("FIND TestRT WHICH WAS INSERTED SINCE " + next_year, unique=True) + + +def test_find_query_default_role(): + p = db.Property("TestProp", datatype=db.TEXT).insert() + rt = db.RecordType("TestRT").add_property("TestProp").insert() + rec = db.Record().add_parent("TestRT").add_property("TestProp", "val").insert() + assert len(db.execute_query("FIND ENTITY Test*")) == 3 + + db.administration.set_server_property("FIND_QUERY_DEFAULT_ROLE", "ENTITY") + assert len(db.execute_query("FIND Test*")) == 3 + + db.administration.set_server_property("FIND_QUERY_DEFAULT_ROLE", "PROPERTY") + assert db.execute_query("FIND Test*", unique=True).id == p.id + + db.administration.set_server_property("FIND_QUERY_DEFAULT_ROLE", + "RECORDTYPE") + assert db.execute_query("FIND Test*", unique=True).id == rt.id + + db.administration.set_server_property("FIND_QUERY_DEFAULT_ROLE", "RECORD") + assert db.execute_query("FIND Test*", unique=True).id == rec.id + + db.administration.set_server_property("FIND_QUERY_DEFAULT_ROLE", "asdf") + with raises(TransactionError): + assert db.execute_query("FIND Test*", unique=True).id == rec.id + + +def test_query_paging(): + test_query = "FIND RECORDTYPE TestRT*" + + # insert 20 entities + for i in range(20): + db.RecordType(f"TestRT{i}").insert() + + assert len(db.execute_query(test_query)) == 20 + + # paging off + assert isinstance(db.execute_query(test_query, page_length=0), db.Container) + assert isinstance(db.execute_query(test_query, page_length=-1), db.Container) + assert isinstance(db.execute_query(test_query, page_length=False), db.Container) + assert isinstance(db.execute_query(test_query, page_length=None), db.Container) + assert isinstance( + db.execute_query( + test_query + + " WITH name=TestRT0", + page_length=10, + unique=True), + db.RecordType) + assert isinstance(db.execute_query("COUNT RECORDTYPE", page_length=10), int) + + # zero pages + assert len([page for page in db.execute_query( + test_query + " WITH unmet_condition", page_length=109)]) == 0 + # two pages + assert len([page for page in db.execute_query(test_query, page_length=10)]) == 2 + assert len([page for page in db.execute_query(test_query, page_length=11)]) == 2 + assert len([page for page in db.execute_query(test_query, page_length=19)]) == 2 + # one page + assert len([page for page in db.execute_query(test_query, page_length=20)]) == 1 + assert len([page for page in db.execute_query(test_query, page_length=100)]) == 1 + + # concat + assert len([entity for page in db.execute_query(test_query, page_length=10) + for entity in page]) == 20 + + # concat zero pages + assert len([entity for page in db.execute_query( + test_query + " WITH unmet_condition", page_length=10) + for entity in page]) == 0 + + # this kind of update is allowed + for entity in [entity for page in db.execute_query( + test_query, page_length=10) for entity in page]: + entity.description = "updated" + entity.update() + + # as well as this + container = db.Container().extend( + [entity for page in db.execute_query(test_query, page_length=10) for entity in page]) + for entity in container: + entity.description = "updated 2" + container.update() + + # but not this + with raises(db.exceptions.PagingConsistencyError): + for page in db.execute_query(test_query, page_length=10): + for entity in page: + entity.description = "update not allowed" + entity.update() + + # not ideal: the first page has been written: + pages = db.execute_query(test_query, page_length=10) + for entity in next(pages): + assert entity.description == "update not allowed" + for entity in next(pages): + assert entity.description == "updated 2" + + # the above pattern is ok if you don't write, tho + for page in db.execute_query(test_query, page_length=10): + for entity in page: + assert entity.description is not None + # don't: entity.update() + + +def test_greatest_smallest_id(): + rt1 = db.RecordType("TestRT1").insert() + rt2 = db.RecordType("TestRT2").insert() + + # assumptions + assert rt1.id < rt2.id + + # actual testing + assert db.execute_query( + "FIND RECORDTYPE Test* WITH ID>99 AND THE SMALLEST ID", + unique=True).id == rt1.id + assert db.execute_query("FIND RECORDTYPE Test* WITH THE GREATEST ID", unique=True).id == rt2.id + + assert db.execute_query("FIND ENTITY Test* WITH THE SMALLEST ID", unique=True).id == rt1.id + assert db.execute_query("FIND ENTITY Test* WITH THE GREATEST ID", unique=True).id == rt2.id + + +@mark.xfail(reason="Issue: https://gitlab.com/linkahead/linkahead-server/-/issues/237") +def test_greatest_smallest_id_over_roles(): + rt1 = db.RecordType("TestRT1").insert() + rt2 = db.RecordType("TestRT2").insert() + p1 = db.Property("TestProp1", datatype=db.TEXT).insert() + p2 = db.Property("TestProp2", datatype=db.TEXT).insert() + + # assumptions + assert rt1.id < rt2.id + assert rt2.id < p1.id + assert p1.id < p2.id + + # actual testing + assert db.execute_query("FIND RECORDTYPE WITH THE SMALLEST ID", unique=True).id == rt1.id + assert db.execute_query("FIND RECORDTYPE WITH THE GREATEST ID", unique=True).id == rt2.id + + assert db.execute_query("FIND PROPERTY WITH THE SMALLEST ID", unique=True).id == p1.id + assert db.execute_query("FIND PROPERTY WITH THE GREATEST ID", unique=True).id == p2.id + + assert db.execute_query("FIND ENTITY WITH THE SMALLEST ID", unique=True).id == rt1.id + assert db.execute_query("FIND ENTITY WITH THE GREATEST ID", unique=True).id == p2.id + + +def test_find_id(): + """See also: https://gitlab.indiscale.com/caosdb/src/caosdb-server/-/issues/323""" + rt1 = db.RecordType("TestRT1").insert() + rt2 = db.RecordType("TestRT2").insert() + rt3 = db.RecordType("TestRT3").add_parent("TestRT2").add_property("TestRT1").insert() + + assert db.execute_query("FIND TestRT1", unique=True).id == rt1.id + assert db.execute_query(f"FIND {rt1.id}", unique=True).id == rt1.id + assert set([e.id for e in db.execute_query("FIND TestRT2")]) == set([rt2.id, rt3.id]) + assert db.execute_query("FIND TestRT2 WITH TestRT1", unique=True).id == rt3.id + assert db.execute_query("FIND TestRT3 WITH TestRT1", unique=True).id == rt3.id + assert db.execute_query(f"FIND {rt2.id} WITH TestRT1", unique=True).id == rt3.id + assert db.execute_query(f"FIND {rt3.id} WITH TestRT1", unique=True).id == rt3.id diff --git a/tests/test_query_template.py b/tests/test_query_template.py index 58eccf87b502587c9c7ce0c0424012006167fc03..b2bcab4c4d9001b02c3e426081deec99c9fc65a4 100644 --- a/tests/test_query_template.py +++ b/tests/test_query_template.py @@ -37,7 +37,7 @@ def setup_module(): except Exception as e: print(e) try: - db.execute_query("FIND Test*").delete() + db.execute_query("FIND ENTITY").delete() except Exception as e: print(e) db.RecordType(name="TestPerson").insert() @@ -171,8 +171,8 @@ def test_update_failure_syntax(): q.query = "ashdjfkasjdf" with raises(db.TransactionError) as cm: q.update() - assert(cm.value.errors[0].msg == "An error occured during the parsing of this query. Maybe you " - "were using a wrong syntax?") + assert (cm.value.errors[0].msg == "An error occured during the parsing of this query. Maybe you " + "were using a wrong syntax?") def test_update_failure_count_query_not_allowed(): @@ -259,10 +259,10 @@ def test_query_with_select_in_outer_query(): def test_query_with_other_filters(): - query_def = "FIND TestExperiment WHICH HAS A TestAnimal" + query_def = "FIND ENTITY TestExperiment WHICH HAS A TestAnimal" db.QueryTemplate(name="TestAnimalExperiment", query=query_def).insert() - r = db.execute_query("FIND TestAnimalExperiment") + r = db.execute_query("FIND ENTITY TestAnimalExperiment") assert_equal(len(r), 2) r = db.execute_query( @@ -272,10 +272,10 @@ def test_query_with_other_filters(): def test_query_simple_find_with_wildcard(): - query_def = "FIND TestExperiment WHICH HAS A TestAnimal = Pig" + query_def = "FIND ENTITY TestExperiment WHICH HAS A TestAnimal = Pig" db.QueryTemplate(name="TestAnimalExperiment", query=query_def).insert() - r = db.execute_query("FIND TestAnimal*") + r = db.execute_query("FIND ENTITY TestAnimal*") assert_equal(len(r), 2) r = db.execute_query( @@ -285,10 +285,10 @@ def test_query_simple_find_with_wildcard(): def test_query_select_from_with_wildcard(): - query_def = "FIND TestExperiment WHICH HAS A TestAnimal = Pig" + query_def = "FIND ENTITY TestExperiment WHICH HAS A TestAnimal = Pig" db.QueryTemplate(name="TestAnimalExperiment", query=query_def).insert() - r = db.execute_query("SELECT TestAnimal FROM TestAnimal*") + r = db.execute_query("SELECT TestAnimal FROM ENTITY TestAnimal*") assert_equal(len(r), 2) assert_equal(len(r.get_entity_by_name("TestRecord").get_properties()), 1) assert_equal(len(r.get_entity_by_name("TestAnimal").get_properties()), 0) diff --git a/tests/test_recursive_parents.py b/tests/test_recursive_parents.py index 76178cee37db9ebeb2d249837bdfde80baa58141..a79feff30fe1ac606a5ce8027c13a37220d3b315 100644 --- a/tests/test_recursive_parents.py +++ b/tests/test_recursive_parents.py @@ -34,7 +34,7 @@ import pytest def setup_module(): """Delete all test entities""" - db.execute_query("FIND Test*").delete( + db.execute_query("FIND ENTITY Test*").delete( raise_exception_on_error=False) @@ -48,7 +48,26 @@ def teardown_function(function): setup_module() -@pytest.mark.xfail(reason="To be fixed in server and/or pylib") +def test_get_parents_recursively(): + """Test for https://gitlab.com/caosdb/caosdb-pylib/-/issues/90 + +> Entity.get_parents_recursively() does not work unless the full ancestry has been retrieved from +> the server. +""" + # Setup + rt_A = db.RecordType(name="TestA") + rt_B = db.RecordType(name="TestB").add_parent(rt_A) + rt_C = db.RecordType(name="TestC").add_parent(rt_B) + db.Container().extend([rt_A, rt_B, rt_C]).insert() + + # Retrieve only C + retrieved_C = db.RecordType(name="TestC").retrieve() + parents = retrieved_C.get_parents_recursively(retrieve=True) + assert len(parents) == 2 + assert "TestB" in [p.name for p in parents] + assert "TestA" in [p.name for p in parents] + + def test_recursive_parents(): # inheritance structure: # A @@ -66,29 +85,31 @@ def test_recursive_parents(): parents = C.get_parents_recursively() assert len(parents) == 3 - assert A in parents - assert B in parents - assert B2 in parents + parent_identifiers = [(all_p.id, all_p.name) for all_p in parents] + assert (A.id, A.name) in parent_identifiers + assert (B.id, B.name) in parent_identifiers + assert (B2.id, B2.name) in parent_identifiers parents = c.get_parents_recursively() assert len(parents) == 4 - assert A in parents - assert B in parents - assert B2 in parents - assert C in parents + parent_identifiers = [(all_p.id, all_p.name) for all_p in parents] + assert (A.id, A.name) in parent_identifiers + assert (B.id, B.name) in parent_identifiers + assert (B2.id, B2.name) in parent_identifiers + assert (C.id, C.name) in parent_identifiers # Now do a time travel and great-grand-parentize yourself... A.add_parent(C).update() parents = C.get_parents_recursively() assert len(parents) == 4 - assert A in parents - assert B in parents - assert B2 in parents - assert C in parents + parent_identifiers = [(all_p.id, all_p.name) for all_p in parents] + assert (A.id, A.name) in parent_identifiers + assert (B.id, B.name) in parent_identifiers + assert (B2.id, B2.name) in parent_identifiers + assert (C.id, C.name) in parent_identifiers -@pytest.mark.xfail(reason="To be fixed in server and/or pylib") def test_entity_has_parent(): # inheritance structure: # A @@ -137,8 +158,8 @@ def test_entity_has_parent(): assert not c.has_parent(fake_C_id, check_name=False, check_id=True) - fake_B_name_id = RecordType(name="TestTypeB", id=B.id) - fake_C_name_id = RecordType(name="not C", id=C.id * 5) + fake_B_name_id = db.RecordType(name="TestTypeB", id=B.id) + fake_C_name_id = db.RecordType(name="not C", id=C.id * 5) assert c.has_parent(fake_B_name_id, check_name=True, check_id=True) diff --git a/tests/test_select.py b/tests/test_select.py index 64182bbe3b8e5d6ffa585fd4a2c4cd981cb9f78d..80e380ab04ed9268059347a57787ab286b300483 100644 --- a/tests/test_select.py +++ b/tests/test_select.py @@ -91,7 +91,7 @@ def setup_module(): def teardown_module(): - d = db.execute_query("FIND Test*") + d = db.execute_query("FIND ENTITY Test*") if len(d) > 0: d.delete() @@ -102,13 +102,13 @@ def teardown_module(): def test_id1(): - p1 = db.execute_query("FIND TestPropertyOne", unique=True) + p1 = db.execute_query("FIND ENTITY TestPropertyOne", unique=True) assert p1.is_valid() is True assert p1.name is not None assert p1.datatype is not None assert p1.description is None - p1_c = db.execute_query("SELECT id FROM TestPropertyOne", unique=True) + p1_c = db.execute_query("SELECT id FROM ENTITY TestPropertyOne", unique=True) assert p1_c.is_valid() is True assert p1_c.id == p1.id assert p1_c.name is None @@ -117,13 +117,13 @@ def test_id1(): def test_id2(): - p2 = db.execute_query("FIND TestPropertyTwo", unique=True) + p2 = db.execute_query("FIND ENTITY TestPropertyTwo", unique=True) assert p2.is_valid() is True assert p2.name is not None assert p2.datatype is not None assert p2.description is not None - p2_c = db.execute_query("SELECT id FROM TestPropertyTwo", unique=True) + p2_c = db.execute_query("SELECT id FROM ENTITY TestPropertyTwo", unique=True) assert p2_c.is_valid() is True assert p2_c.id == p2.id assert p2_c.name is None @@ -132,7 +132,7 @@ def test_id2(): def test_id3(): - p3s = db.execute_query("SELECT description FROM TestProperty*") + p3s = db.execute_query("SELECT description FROM ENTITY TestProperty*") assert len(p3s) == 2 for e in p3s: @@ -140,7 +140,7 @@ def test_id3(): def test_name1(): - p3s = db.execute_query("SELECT description FROM TestProperty*") + p3s = db.execute_query("SELECT description FROM ENTITY TestProperty*") assert len(p3s) == 2 for e in p3s: @@ -148,7 +148,7 @@ def test_name1(): def test_name2(): - p3s = db.execute_query("SELECT name FROM TestProperty*") + p3s = db.execute_query("SELECT name FROM ENTITY TestProperty*") assert len(p3s) == 2 for e in p3s: @@ -169,14 +169,14 @@ def test_name_from_entity(): def test_multi1(): p1 = db.execute_query( - "SELECT id, name, description FROM TestPropertyOne", + "SELECT id, name, description FROM ENTITY TestPropertyOne", unique=True) assert p1.id is not None assert p1.name == "TestPropertyOne" assert p1.description is None p2 = db.execute_query( - "SELECT id, name, description FROM TestPropertyTwo", + "SELECT id, name, description FROM ENTITY TestPropertyTwo", unique=True) assert p2.id is not None assert p2.name == "TestPropertyTwo" @@ -184,13 +184,13 @@ def test_multi1(): def test_sub1(): - rt = db.execute_query("FIND TestRecordType", unique=True) + rt = db.execute_query("FIND ENTITY TestRecordType", unique=True) assert rt.id is not None assert rt.name is not None assert rt.get_property("TestPropertyOne") is not None rt = db.execute_query( - "SELECT TestPropertyOne FROM TestRecordType", + "SELECT TestPropertyOne FROM ENTITY TestRecordType", unique=True) assert rt.id is not None assert rt.name is not None @@ -201,7 +201,7 @@ def test_sub1(): def test_sub2(): rt = db.execute_query( - "SELECT TestPropertyTwo.description FROM TestRecordType", + "SELECT TestPropertyTwo.description FROM ENTITY TestRecordType", unique=True) assert rt.id is not None assert rt.name is not None diff --git a/tests/test_server_side_scripting.py b/tests/test_server_side_scripting.py index 5801f98a7b634c2c391d531be42f3c4878cc1d2c..229411b5768774cd0c3098aa868420a9a9850b8a 100644 --- a/tests/test_server_side_scripting.py +++ b/tests/test_server_side_scripting.py @@ -70,6 +70,28 @@ def clean_database(): d.delete() +def assert_stderr(stderr) -> None: + """Assert that ``stderr`` is either None or contains only the pyarrow deprecation warning. + +This can probably removed with Pandas 3.0, to be replaced by ``assert stderr is None``. + +Parameters +---------- +stderr + The object to be tested. + """ + if stderr is None: + return + assert isinstance(stderr, str) + assert stderr.split(sep="\n", maxsplit=1)[1] == """Pyarrow will become a required dependency of pandas in the next major release of pandas (pandas 3.0), +(to allow more performant data types, such as the Arrow string type, and better interoperability with other libraries) +but was not found to be installed on your system. +If this would cause problems for you, +please provide us feedback at https://github.com/pandas-dev/pandas/issues/54466 + + i = __import__(m)""" + + def setup_function(function): clean_database() @@ -148,7 +170,7 @@ def test_call_ok(): xml = etree.parse(r) assert xml.xpath("/Response/script/call")[0].text == "ok" assert xml.xpath("/Response/script/stdout")[0].text == "ok" - assert xml.xpath("/Response/script/stderr")[0].text is None + assert_stderr(xml.xpath("/Response/script/stderr")[0].text) assert xml.xpath("/Response/script/@code")[0] == "0" @@ -176,18 +198,18 @@ def test_run_server_side_script_with_file_as_positional_param(): "pos0", "pos1", exit="123", - query="COUNT TestRT", + query="COUNT ENTITY TestRT", files={"-p2": "test_file.txt"}) - assert response.stderr is None + assert_stderr(response.stderr) assert response.code == 123 assert response.call == ('administration/diagnostics.py ' - '--exit=123 --query=COUNT TestRT ' + '--exit=123 --query=COUNT ENTITY TestRT ' 'pos0 pos1 .upload_files/test_file.txt') json_data = json.loads(response.stdout) assert "caosdb" in json_data assert "query" in json_data["caosdb"] - assert json_data["caosdb"]["query"] == ["COUNT TestRT", "1"] + assert json_data["caosdb"]["query"] == ["COUNT ENTITY TestRT", "1"] assert "./.upload_files/test_file.txt" in json_data["files"] @@ -201,16 +223,16 @@ def test_run_server_side_script_with_additional_file(): "pos0", "pos1", exit="123", - query="COUNT TestRT", + query="COUNT ENTITY TestRT", files={"dummykey": "test_file.txt"}) - assert response.stderr is None + assert_stderr(response.stderr) assert response.code == 123 assert response.call == ('administration/diagnostics.py ' - '--exit=123 --query=COUNT TestRT ' + '--exit=123 --query=COUNT ENTITY TestRT ' 'pos0 pos1') json_data = json.loads(response.stdout) - assert json_data["caosdb"]["query"] == ["COUNT TestRT", "1"] + assert json_data["caosdb"]["query"] == ["COUNT ENTITY TestRT", "1"] assert "./.upload_files/test_file.txt" in json_data["files"] @@ -220,7 +242,7 @@ def test_diagnostics_basic(): form = dict() form["call"] = "administration/diagnostics.py" form["-Oexit"] = "123" - form["-Oquery"] = "COUNT TestRT" + form["-Oquery"] = "COUNT ENTITY TestRT" response = get_connection().post_form_data("scripting", form) xml = etree.parse(response) @@ -242,7 +264,7 @@ def test_diagnostics_basic(): assert "exception" not in diagnostics["caosdb"], EXC_ERR assert "query" in diagnostics["caosdb"] - assert diagnostics["caosdb"]["query"][0] == "COUNT TestRT" + assert diagnostics["caosdb"]["query"][0] == "COUNT ENTITY TestRT" assert diagnostics["caosdb"]["query"][1] == "1", ("The RecordType should " "have been found.") assert xml.xpath("/Response/script/@code")[0] == "123", ("The script " @@ -250,7 +272,7 @@ def test_diagnostics_basic(): "with code 123.") assert xml.xpath("/Response/script/call")[0].text.startswith( "administration/diagnostics.py") - assert xml.xpath("/Response/script/stderr")[0].text is None + assert_stderr(xml.xpath("/Response/script/stderr")[0].text) def test_diagnostics_with_file_upload(): @@ -293,7 +315,7 @@ def test_diagnostics_with_file_upload(): "with code 0.") assert xml.xpath("/Response/script/call")[0].text.startswith( "administration/diagnostics.py") - assert xml.xpath("/Response/script/stderr")[0].text is None + assert_stderr(xml.xpath("/Response/script/stderr")[0].text) @mark.local_server @@ -403,7 +425,7 @@ def test_anonymous_script_calling_success(): assert xml.xpath("/Response/UserInfo/Roles/Role")[0].text == "anonymous" assert xml.xpath("/Response/script/call")[0].text == "ok_anonymous" assert xml.xpath("/Response/script/stdout")[0].text == "ok_anonymous" - assert xml.xpath("/Response/script/stderr")[0].text is None + assert_stderr(xml.xpath("/Response/script/stderr")[0].text) assert xml.xpath("/Response/script/@code")[0] == "0" diff --git a/tests/test_state.py b/tests/test_state.py index 19c6db8ef79856069c8eada2da87f14cc1170d61..2f407f6857e88ddfcaf61a8da0e5e11a2fe4704b 100644 --- a/tests/test_state.py +++ b/tests/test_state.py @@ -169,7 +169,7 @@ def teardown_function(function): switch_to_admin_user() # deactivate anonymous user db.administration.set_server_property("AUTH_OPTIONAL", "FALSE") - d = db.execute_query("FIND TestRT") + d = db.execute_query("FIND ENTITY TestRT") if len(d) > 0: d.delete(flags={"forceFinalState": "true"}) @@ -252,7 +252,7 @@ def test_state_query(): rec.insert() assert rec.get_property("State") is None - result = db.execute_query("FIND TestRT WITH State = State1", unique=True) + result = db.execute_query("FIND ENTITY TestRT WITH State = State1", unique=True) assert result.id == rec.id assert result.get_property("State") is None diff --git a/tests/test_tenpoints.py b/tests/test_tenpoints.py index 9674ca3b0cc314248aec3552f4336655ebeaf210..25f28313659ca1b240aaf22872ed1b0c2090c93c 100644 --- a/tests/test_tenpoints.py +++ b/tests/test_tenpoints.py @@ -25,7 +25,6 @@ @author: fitschen """ -from nose.tools import assert_equal, assert_is_not_none, assert_true # @UnresolvedImport import caosdb as h import os from caosdb.exceptions import CaosDBException @@ -52,23 +51,15 @@ Datensätzen Description oder einer Zahl''' -def setup_module(): +def setup_function(function): try: - h.execute_query("FIND Complex*").delete() - except Exception as e: - print(e) - try: - h.execute_query("FIND ReferenceProperty").delete() - except Exception as e: - print(e) - try: - h.execute_query("FIND Simple*").delete() + h.execute_query("FIND ENTITY *").delete() except Exception as e: print(e) -def teardown_module(): - setup_module() +def teardown_function(function): + setup_function(function) def test_tenpoints1_1(): @@ -77,94 +68,82 @@ def test_tenpoints1_1(): enthalten (Gewicht, Beschreibung, Identifkationsnummern, etc.) ''' - try: - c = h.Container() - c.append( - h.Property( - name="SimpleTextProperty", - description="simple text property (from test_tenpoints.py)", - datatype='text')) - c.append( - h.Property( - name="SimpleDoubleProperty", - description="simple double property (from test_tenpoints.py)", - datatype='double')) - c.append( - h.Property( - name="SimpleIntegerProperty", - description="simple integer property (from test_tenpoints.py)", - datatype='integer')) - c.append( - h.Property( - name="SimpleDatetimeProperty", - description="simple datetime property (from test_tenpoints.py)", - datatype='datetime')) - - c.append( - h.RecordType( - name="SimpleRecordType", - description="simple recordType (from test_tenpoints.py)") .add_property( - name='SimpleTextProperty') .add_property( - name='SimpleDoubleProperty') .add_property( - name='SimpleIntegerProperty') .add_property( - name='SimpleDatetimeProperty')) - - c.insert() - finally: - try: - c.delete() - except BaseException: - pass + c = h.Container() + c.append( + h.Property( + name="SimpleTextProperty", + description="simple text property (from test_tenpoints.py)", + datatype='text')) + c.append( + h.Property( + name="SimpleDoubleProperty", + description="simple double property (from test_tenpoints.py)", + datatype='double')) + c.append( + h.Property( + name="SimpleIntegerProperty", + description="simple integer property (from test_tenpoints.py)", + datatype='integer')) + c.append( + h.Property( + name="SimpleDatetimeProperty", + description="simple datetime property (from test_tenpoints.py)", + datatype='datetime')) + + c.append( + h.RecordType( + name="SimpleRecordType", + description="simple recordType (from test_tenpoints.py)") .add_property( + name='SimpleTextProperty') .add_property( + name='SimpleDoubleProperty') .add_property( + name='SimpleIntegerProperty') .add_property( + name='SimpleDatetimeProperty')) + + c.insert() def test_tenpoints1_2(): ''' 1.2 Einfügen von RecordTypes, die zusätzlich Dateien referenzieren ''' - try: - c = h.Container() - c.append( - h.Property( - name="SimpleTextProperty", - description="simple text property (from test_tenpoints.py)", - datatype='text')) - c.append( - h.Property( - name="SimpleDoubleProperty", - description="simple double property (from test_tenpoints.py)", - datatype='double')) - c.append( - h.Property( - name="SimpleIntegerProperty", - description="simple integer property (from test_tenpoints.py)", - datatype='integer')) - c.append( - h.Property( - name="SimpleDatetimeProperty", - description="simple datetime property (from test_tenpoints.py)", - datatype='datetime')) - c.append( - h.Property( - name="SimpleFileProperty", - description="simple file property (from test_tenpoints.py)", - datatype='file')) - - c.append( - h.RecordType( - name="SimpleRecordType", - description="simple recordType (from test_tenpoints.py)") .add_property( - name='SimpleTextProperty') .add_property( - name='SimpleDoubleProperty') .add_property( - name='SimpleIntegerProperty') .add_property( - name='SimpleDatetimeProperty') .add_property( - name='SimpleFileProperty')) - - c.insert() - finally: - try: - c.delete() - except BaseException: - pass + c = h.Container() + c.append( + h.Property( + name="SimpleTextProperty", + description="simple text property (from test_tenpoints.py)", + datatype='text')) + c.append( + h.Property( + name="SimpleDoubleProperty", + description="simple double property (from test_tenpoints.py)", + datatype='double')) + c.append( + h.Property( + name="SimpleIntegerProperty", + description="simple integer property (from test_tenpoints.py)", + datatype='integer')) + c.append( + h.Property( + name="SimpleDatetimeProperty", + description="simple datetime property (from test_tenpoints.py)", + datatype='datetime')) + c.append( + h.Property( + name="SimpleFileProperty", + description="simple file property (from test_tenpoints.py)", + datatype='file')) + + c.append( + h.RecordType( + name="SimpleRecordType", + description="simple recordType (from test_tenpoints.py)") .add_property( + name='SimpleTextProperty') .add_property( + name='SimpleDoubleProperty') .add_property( + name='SimpleIntegerProperty') .add_property( + name='SimpleDatetimeProperty') .add_property( + name='SimpleFileProperty')) + + c.insert() def test_tenpoints1_3(): @@ -173,61 +152,55 @@ def test_tenpoints1_3(): andere RecordTypes enthalten ''' - try: - c = h.Container() - c.append( - h.Property( - name="SimpleTextProperty", - description="simple text property (from test_tenpoints.py)", - datatype='text')) - c.append( - h.Property( - name="SimpleDoubleProperty", - description="simple double property (from test_tenpoints.py)", - datatype='double')) - c.append( - h.Property( - name="SimpleIntegerProperty", - description="simple integer property (from test_tenpoints.py)", - datatype='integer')) - c.append( - h.Property( - name="SimpleDatetimeProperty", - description="simple datetime property (from test_tenpoints.py)", - datatype='datetime')) - c.append( - h.Property( - name="SimpleFileProperty", - description="simple file property (from test_tenpoints.py)", - datatype='file')) - - c.append( - h.RecordType( - name="SimpleRecordType", - description="simple recordType (from test_tenpoints.py)") .add_property( - name='SimpleTextProperty') .add_property( - name='SimpleDoubleProperty') .add_property( - name='SimpleIntegerProperty') .add_property( - name='SimpleDatetimeProperty') .add_property( - name='SimpleFileProperty')) - - c.append( - h.Property( - name="ReferenceProperty", - description='reference property (from test_tenpoints.py)', - datatype="SimpleRecordType")) - c.append(h.RecordType(name="ComlexRecordType", description="complex recordType with references (from test_tenpoints.py)") - .add_property(name='ReferenceProperty') # first method - # second method, doesn't need the ReferenceProperty - .add_property(name='SimpleRecordType') - ) - - c.insert() - finally: - try: - c.delete() - except BaseException: - pass + c = h.Container() + c.append( + h.Property( + name="SimpleTextProperty", + description="simple text property (from test_tenpoints.py)", + datatype='text')) + c.append( + h.Property( + name="SimpleDoubleProperty", + description="simple double property (from test_tenpoints.py)", + datatype='double')) + c.append( + h.Property( + name="SimpleIntegerProperty", + description="simple integer property (from test_tenpoints.py)", + datatype='integer')) + c.append( + h.Property( + name="SimpleDatetimeProperty", + description="simple datetime property (from test_tenpoints.py)", + datatype='datetime')) + c.append( + h.Property( + name="SimpleFileProperty", + description="simple file property (from test_tenpoints.py)", + datatype='file')) + + c.append( + h.RecordType( + name="SimpleRecordType", + description="simple recordType (from test_tenpoints.py)") .add_property( + name='SimpleTextProperty') .add_property( + name='SimpleDoubleProperty') .add_property( + name='SimpleIntegerProperty') .add_property( + name='SimpleDatetimeProperty') .add_property( + name='SimpleFileProperty')) + + c.append( + h.Property( + name="ReferenceProperty", + description='reference property (from test_tenpoints.py)', + datatype="SimpleRecordType")) + c.append(h.RecordType(name="ComlexRecordType", description="complex recordType with references (from test_tenpoints.py)") + .add_property(name='ReferenceProperty') # first method + # second method, doesn't need the ReferenceProperty + .add_property(name='SimpleRecordType') + ) + + c.insert() def test_tenpoints1_4(): @@ -245,98 +218,75 @@ def test_tenpoints1_5(): RecordTypes / Properties ''' - try: - c = h.Container() - c.append( - h.Property( - name="SimpleTextProperty", - description="simple text property (from test_tenpoints.py)", - datatype='text')) - c.append( - h.Property( - name="SimpleDoubleProperty", - description="simple double property (from test_tenpoints.py)", - datatype='double')) - c.append( - h.Property( - name="SimpleIntegerProperty", - description="simple integer property (from test_tenpoints.py)", - datatype='integer')) - c.append( - h.Property( - name="SimpleDatetimeProperty", - description="simple datetime property (from test_tenpoints.py)", - datatype='datetime')) - c.append( - h.Property( - name="SimpleFileProperty", - description="simple file property (from test_tenpoints.py)", - datatype='file')) - c.insert() - - d = h.Container() - d.append( - h.RecordType( - name="SimpleRecordType", - description="simple recordType (from test_tenpoints.py)") .add_property( - name='SimpleTextProperty') .add_property( - name='SimpleDoubleProperty') .add_property( - name='SimpleIntegerProperty') .add_property( - name='SimpleDatetimeProperty') .add_property( - name='SimpleFileProperty')) - - d.append( - h.Property( - name="ReferenceProperty", - description='reference property (from test_tenpoints.py)', - datatype="SimpleRecordType")) - d.append(h.RecordType(name="ComplexRecordType", description="complex recordType with references (from test_tenpoints.py)") - .add_property(name='ReferenceProperty') # first method - # second method, doesn't need the ReferenceProperty - .add_property(name='SimpleRecordType') - ) - - d.insert() - - sr = (h.Record().add_parent(name="SimpleRecordType") - .add_property(name="SimpleTextProperty", value="Some Text") - .add_property(name="SimpleDoubleProperty", value=3.14) - .add_property(name="SimpleIntegerProperty", value=1337) - ) - - sr.insert() - - cr1 = (h.Record().add_parent(name="ComplexRecordType") - .add_property(name="ReferenceProperty", value=sr)) - - cr1.insert() - - cr2 = (h.Record().add_parent(name="ComplexRecordType") - .add_property(name="SimpleRecordType", value=sr)) - - cr2.insert() - - finally: - try: - cr2.delete() - except BaseException: - pass - try: - cr1.delete() - except BaseException: - pass - try: - sr.delete() - except BaseException: - pass - try: - d.delete() - except BaseException: - pass - try: - c.delete() - except BaseException: - pass + c = h.Container() + c.append( + h.Property( + name="SimpleTextProperty", + description="simple text property (from test_tenpoints.py)", + datatype='text')) + c.append( + h.Property( + name="SimpleDoubleProperty", + description="simple double property (from test_tenpoints.py)", + datatype='double')) + c.append( + h.Property( + name="SimpleIntegerProperty", + description="simple integer property (from test_tenpoints.py)", + datatype='integer')) + c.append( + h.Property( + name="SimpleDatetimeProperty", + description="simple datetime property (from test_tenpoints.py)", + datatype='datetime')) + c.append( + h.Property( + name="SimpleFileProperty", + description="simple file property (from test_tenpoints.py)", + datatype='file')) + c.insert() + + d = h.Container() + d.append( + h.RecordType( + name="SimpleRecordType", + description="simple recordType (from test_tenpoints.py)") .add_property( + name='SimpleTextProperty') .add_property( + name='SimpleDoubleProperty') .add_property( + name='SimpleIntegerProperty') .add_property( + name='SimpleDatetimeProperty') .add_property( + name='SimpleFileProperty')) + + d.append( + h.Property( + name="ReferenceProperty", + description='reference property (from test_tenpoints.py)', + datatype="SimpleRecordType")) + d.append(h.RecordType(name="ComplexRecordType", description="complex recordType with references (from test_tenpoints.py)") + .add_property(name='ReferenceProperty') # first method + # second method, doesn't need the ReferenceProperty + .add_property(name='SimpleRecordType') + ) + + d.insert() + + sr = (h.Record().add_parent(name="SimpleRecordType") + .add_property(name="SimpleTextProperty", value="Some Text") + .add_property(name="SimpleDoubleProperty", value=3.14) + .add_property(name="SimpleIntegerProperty", value=1337) + ) + + sr.insert() + + cr1 = (h.Record().add_parent(name="ComplexRecordType") + .add_property(name="ReferenceProperty", value=sr)) + + cr1.insert() + + cr2 = (h.Record().add_parent(name="ComplexRecordType") + .add_property(name="SimpleRecordType", value=sr)) + + cr2.insert() def test_tenpoints2_1AND2_2(): @@ -346,315 +296,263 @@ def test_tenpoints2_1AND2_2(): Datensätzen ''' - try: - """data model.""" - c = h.Container() - c.append( - h.Property( - name="SimpleTextProperty", - description="simple text property (from test_tenpoints.py)", - datatype='text')) - c.append( - h.Property( - name="SimpleDoubleProperty", - description="simple double property (from test_tenpoints.py)", - datatype='double', - unit="m")) - c.append( - h.Property( - name="SimpleIntegerProperty", - description="simple integer property (from test_tenpoints.py)", - datatype='integer')) - c.append( - h.Property( - name="SimpleDatetimeProperty", - description="simple datetime property (from test_tenpoints.py)", - datatype='datetime')) - c.append( - h.Property( - name="SimpleFileProperty", - description="simple file property (from test_tenpoints.py)", - datatype='file')) - - c.append( - h.RecordType( - name="SimpleRecordType", - description="simple recordType (from test_tenpoints.py)") .add_property( - name='SimpleTextProperty', + """data model.""" + c = h.Container() + c.append( + h.Property( + name="SimpleTextProperty", + description="simple text property (from test_tenpoints.py)", + datatype='text')) + c.append( + h.Property( + name="SimpleDoubleProperty", + description="simple double property (from test_tenpoints.py)", + datatype='double', + unit="m")) + c.append( + h.Property( + name="SimpleIntegerProperty", + description="simple integer property (from test_tenpoints.py)", + datatype='integer')) + c.append( + h.Property( + name="SimpleDatetimeProperty", + description="simple datetime property (from test_tenpoints.py)", + datatype='datetime')) + c.append( + h.Property( + name="SimpleFileProperty", + description="simple file property (from test_tenpoints.py)", + datatype='file')) + + c.append( + h.RecordType( + name="SimpleRecordType", + description="simple recordType (from test_tenpoints.py)") .add_property( + name='SimpleTextProperty', + importance='obligatory') .add_property( + name='SimpleDoubleProperty', + importance='obligatory') .add_property( + name='SimpleIntegerProperty', importance='obligatory') .add_property( + name='SimpleDatetimeProperty', + importance='obligatory') .add_property( + name='SimpleFileProperty', + importance='obligatory')) + + c.append( + h.Property( + name="ReferenceProperty", + description='reference property (from test_tenpoints.py)', + datatype="SimpleRecordType")) + c.append(h.RecordType(name="ComplexRecordType", description="complex recordType with references (from test_tenpoints.py)") + .add_property(name='ReferenceProperty') # first method + # second method, doesn't need the ReferenceProperty + .add_property(name='SimpleRecordType') + ) + + c.insert() + print(c) + + ''' data''' + d = h.Container() + + ''' create testfile ''' + f = open("test.dat", "w") + f.write("hello world\n") + f.close() + + ''' prepare file record ''' + d.append( + h.File( + id=-1, + path='testfiles/testfile', + file="test.dat", + name="SimpleFileRecord")) + + ''' prepare simple record with file property''' + d.append( + h.Record( + id=-2, + name="SimpleRecord") .add_parent( + name='SimpleRecordType') .add_property( + name='SimpleTextProperty', + value='some text') .add_property( name='SimpleDoubleProperty', - importance='obligatory') .add_property( + value=3.14) .add_property( name='SimpleIntegerProperty', - importance='obligatory') .add_property( + value=1337) .add_property( name='SimpleDatetimeProperty', - importance='obligatory') .add_property( + value='2015-12-24 18:15:00') .add_property( name='SimpleFileProperty', - importance='obligatory')) - - c.append( - h.Property( - name="ReferenceProperty", - description='reference property (from test_tenpoints.py)', - datatype="SimpleRecordType")) - c.append(h.RecordType(name="ComplexRecordType", description="complex recordType with references (from test_tenpoints.py)") - .add_property(name='ReferenceProperty') # first method - # second method, doesn't need the ReferenceProperty - .add_property(name='SimpleRecordType') - ) - - c.insert() - print(c) - - ''' data''' - d = h.Container() - - ''' create testfile ''' - f = open("test.dat", "w") - f.write("hello world\n") - f.close() - - ''' prepare file record ''' - d.append( - h.File( - id=-1, - path='testfiles/testfile', - file="test.dat", - name="SimpleFileRecord")) - - ''' prepare simple record with file property''' - d.append( - h.Record( - id=-2, - name="SimpleRecord") .add_parent( - name='SimpleRecordType') .add_property( - name='SimpleTextProperty', - value='some text') .add_property( - name='SimpleDoubleProperty', - value=3.14) .add_property( - name='SimpleIntegerProperty', - value=1337) .add_property( - name='SimpleDatetimeProperty', - value='2015-12-24 18:15:00') .add_property( - name='SimpleFileProperty', - value=-1)) - - d.append(h.Record() - .add_parent(name="ComplexRecordType") - .add_property(name="ReferenceProperty", value=-2) - ) - - d.insert() - - e = d.get_entity_by_name("SimpleRecord") - assert_is_not_none(e) - assert_true(e.is_valid()) - fp = e.get_property("SimpleFileProperty") - assert_is_not_none(fp) - assert_is_not_none(fp.value) - - fr = d.get_entity_by_name("SimpleFileRecord") - assert_is_not_none(fr) - assert_true(fr.is_valid()) - assert_is_not_none(fr.id) - - assert_equal(int(fp.value), fr.id) - print(d) - finally: - try: - d.delete() - except BaseException: - pass - try: - c.delete() - except BaseException: - pass - try: - os.remove("test.dat") - except BaseException: - pass + value=-1)) + + d.append(h.Record() + .add_parent(name="ComplexRecordType") + .add_property(name="ReferenceProperty", value=-2) + ) + + d.insert() + + e = d.get_entity_by_name("SimpleRecord") + assert e is not None + assert e.is_valid() + fp = e.get_property("SimpleFileProperty") + assert fp is not None + assert fp.value is not None + + fr = d.get_entity_by_name("SimpleFileRecord") + assert fr is not None + assert fr.is_valid() + assert fr.id is not None + + assert int(fp.value) == fr.id def test_tenpoints2_3(): '''2.3 Verwendung von Einheiten''' - try: - """insert simple property with unit.""" - p1 = h.Property(name='unittestproperty', datatype='double', unit='m') - p1.insert() - - '''subtyping with unit inheritance''' - p2 = h.Property(name='SubTypeOfUnitTestProperty').add_parent(id=p1.id) - p2.insert() - assert_equal('m', p2.unit) - - '''implement property''' - rt = h.RecordType( - name='SimpleRecordType', - description='simple recordType (from test_tenpoints.py)').add_property( - id=p2.id) - rt.insert() - print(rt) - rtid = rt.id - rt = h.RecordType(id=rtid).retrieve() - print(rt) - assert_equal(p2.id, rt.get_properties()[0].id) - - assert_equal('m', rt.get_properties()[0].unit) - finally: - try: - rt.delete() - except BaseException: - pass - try: - p2.delete() - except BaseException: - pass - try: - p1.delete() - except BaseException: - pass + """insert simple property with unit.""" + p1 = h.Property(name='unittestproperty', datatype='double', unit='m') + p1.insert() + + '''subtyping with unit inheritance''' + p2 = h.Property(name='SubTypeOfUnitTestProperty').add_parent(id=p1.id) + p2.insert() + assert 'm' == p2.unit + + '''implement property''' + rt = h.RecordType( + name='SimpleRecordType', + description='simple recordType (from test_tenpoints.py)').add_property( + id=p2.id) + rt.insert() + print(rt) + rtid = rt.id + rt = h.RecordType(id=rtid).retrieve() + print(rt) + assert p2.id == rt.get_properties()[0].id + + assert 'm' == rt.get_properties()[0].unit def test_tenpoints2_4(): '''2.4 Nachtägliches Annotieren von Datensätzen, z.B. hinzufügen einer Description oder einer Zahl''' - try: - c = h.Container() - c.append( - h.Property( - name="SimpleTextProperty", - description="simple text property (from test_tenpoints.py)", - datatype='text')) - c.append( - h.Property( - name="SimpleDoubleProperty", - description="simple double property (from test_tenpoints.py)", - datatype='double')) - c.append( - h.Property( - name="SimpleIntegerProperty", - description="simple integer property (from test_tenpoints.py)", - datatype='integer')) - c.append( - h.Property( - name="SimpleDatetimeProperty", - description="simple datetime property (from test_tenpoints.py)", - datatype='datetime')) - c.append( - h.Property( - name="SimpleFileProperty", - description="simple file property (from test_tenpoints.py)", - datatype='file')) - c.append( - h.Property( - name="CommentProperty", - description="comment property", - datatype='text')) - c.insert() - - d = h.Container() - - d.append( - h.RecordType( - name="SimpleRecordType", - description="simple recordType (from test_tenpoints.py)") .add_property( - name='SimpleTextProperty', - importance='obligatory') .add_property( - name='SimpleDoubleProperty', + c = h.Container() + c.append( + h.Property( + name="SimpleTextProperty", + description="simple text property (from test_tenpoints.py)", + datatype='text')) + c.append( + h.Property( + name="SimpleDoubleProperty", + description="simple double property (from test_tenpoints.py)", + datatype='double')) + c.append( + h.Property( + name="SimpleIntegerProperty", + description="simple integer property (from test_tenpoints.py)", + datatype='integer')) + c.append( + h.Property( + name="SimpleDatetimeProperty", + description="simple datetime property (from test_tenpoints.py)", + datatype='datetime')) + c.append( + h.Property( + name="SimpleFileProperty", + description="simple file property (from test_tenpoints.py)", + datatype='file')) + c.append( + h.Property( + name="CommentProperty", + description="comment property", + datatype='text')) + c.insert() + + d = h.Container() + + d.append( + h.RecordType( + name="SimpleRecordType", + description="simple recordType (from test_tenpoints.py)") .add_property( + name='SimpleTextProperty', + importance='obligatory') .add_property( + name='SimpleDoubleProperty', + importance='obligatory') .add_property( + name='SimpleIntegerProperty', importance='obligatory') .add_property( - name='SimpleIntegerProperty', - importance='obligatory') .add_property( - name='SimpleDatetimeProperty') .add_property( - name='SimpleFileProperty')) - - d.append( - h.Property( - name="ReferenceProperty", - description='reference property (from test_tenpoints.py)', - datatype="SimpleRecordType")) - d.append(h.RecordType(name="ComplexRecordType", description="complex recordType with references (from test_tenpoints.py)") - .add_property(name='ReferenceProperty') # first method - # second method, doesn't need the ReferenceProperty - .add_property(name='SimpleRecordType') - ) - - d.insert() - - ''' create testfile ''' - f = open("test.dat", "w") - f.write("hello world\n") - f.close() - - ''' prepare file record ''' - e = h.Container() - e.append(h.File(id=-1, path='testfiles/testfile', file="test.dat")) - - sr = (h.Record().add_parent(name="SimpleRecordType") - .add_property(name="SimpleTextProperty", value="Some Text") - .add_property(name="SimpleDoubleProperty", value=3.14) - .add_property(name="SimpleIntegerProperty", value=1337) - .add_property(name='SimpleFileProperty', value=-1) - ) - - e.append(sr).insert() - - cr1 = ( - h.Record( - name="My special unique record name").add_parent( - name="ComplexRecordType") .add_property( - name="ReferenceProperty", - value=sr)) - - cr1.insert() - - cr2 = (h.Record().add_parent(name="ComplexRecordType") - .add_property(name="SimpleRecordType", value=sr)) - - recid = cr2.insert().id - - '''annotate file''' - h.File( - path='testfiles/testfile').retrieve().add_property( - c.get_entity_by_name("CommentProperty"), - value="This is a really nice file.").update() + name='SimpleDatetimeProperty') .add_property( + name='SimpleFileProperty')) - '''annotate records''' - h.Record( - name="My special unique record name").retrieve().add_property( - c.get_entity_by_name("CommentProperty"), - value="This is a really nice record.").update() + d.append( + h.Property( + name="ReferenceProperty", + description='reference property (from test_tenpoints.py)', + datatype="SimpleRecordType")) + d.append(h.RecordType(name="ComplexRecordType", description="complex recordType with references (from test_tenpoints.py)") + .add_property(name='ReferenceProperty') # first method + # second method, doesn't need the ReferenceProperty + .add_property(name='SimpleRecordType') + ) + + d.insert() + + ''' create testfile ''' + f = open("test.dat", "w") + f.write("hello world\n") + f.close() + + ''' prepare file record ''' + e = h.Container() + e.append(h.File(id=-1, path='testfiles/testfile', file="test.dat")) + + sr = (h.Record().add_parent(name="SimpleRecordType") + .add_property(name="SimpleTextProperty", value="Some Text") + .add_property(name="SimpleDoubleProperty", value=3.14) + .add_property(name="SimpleIntegerProperty", value=1337) + .add_property(name='SimpleFileProperty', value=-1) + ) + + e.append(sr).insert() + + cr1 = ( h.Record( - id=recid).retrieve().add_property( - c.get_entity_by_name("CommentProperty"), - value="I don't like this record.").update() - h.execute_query( - "FIND RECORD SimpleRecordType WITH SimpleIntegerProperty=1337 AND SimpleTextProperty='Some Text'", - unique=True).add_property( - c.get_entity_by_name("CommentProperty"), - value="I looove this record!!!!!11.").update() - - finally: - try: - cr2.delete() - except BaseException: - pass - try: - cr1.delete() - except BaseException: - pass - try: - e.delete() - except BaseException: - pass - try: - d.delete() - except BaseException: - pass - try: - c.delete() - except BaseException: - pass + name="My special unique record name").add_parent( + name="ComplexRecordType") .add_property( + name="ReferenceProperty", + value=sr)) + + cr1.insert() + + cr2 = (h.Record().add_parent(name="ComplexRecordType") + .add_property(name="SimpleRecordType", value=sr)) + + recid = cr2.insert().id + + '''annotate file''' + h.File( + path='testfiles/testfile').retrieve().add_property( + c.get_entity_by_name("CommentProperty"), + value="This is a really nice file.").update() + + '''annotate records''' + h.Record( + name="My special unique record name").retrieve().add_property( + c.get_entity_by_name("CommentProperty"), + value="This is a really nice record.").update() + h.Record( + id=recid).retrieve().add_property( + c.get_entity_by_name("CommentProperty"), + value="I don't like this record.").update() + h.execute_query( + "FIND RECORD SimpleRecordType WITH SimpleIntegerProperty=1337 AND SimpleTextProperty='Some Text'", + unique=True).add_property( + c.get_entity_by_name("CommentProperty"), + value="I looove this record!!!!!11.").update() def test_existence(): @@ -677,10 +575,3 @@ def test_existence(): print("SimpleTextProperty does exist!") p.delete() - - -def test_cleanup(): - try: - h.execute_query("FIND Simple*").delete() - except BaseException: - pass diff --git a/tests/test_tickets.py b/tests/test_tickets.py index feb688322baaf3c3a5244ad49ce841eef52286ad..106d2f63aeb3c93840a67b86ebd6e51672c3b137 100644 --- a/tests/test_tickets.py +++ b/tests/test_tickets.py @@ -33,7 +33,7 @@ from tests import test_misc def setup_function(function): - d = db.execute_query("FIND Test*") + d = db.execute_query("FIND ENTITY") if len(d) > 0: d.delete() @@ -410,49 +410,43 @@ def test_ticket_139(): rt1 = db.RecordType(name="TestRT1").insert() assert rt1.is_valid() assert "TestRT1" == rt1.name - assert 1 == len(db.execute_query("FIND TestRT1")) + assert 1 == len(db.execute_query("FIND ENTITY TestRT1")) rt1.delete() assert not rt1.is_valid() - assert 0 == len(db.execute_query("FIND TestRT1")) + assert 0 == len(db.execute_query("FIND ENTITY TestRT1")) rt1.insert() assert rt1.is_valid() assert "TestRT1" == rt1.name - assert 1 == len(db.execute_query("FIND TestRT1")) + assert 1 == len(db.execute_query("FIND ENTITY TestRT1")) rt1.delete() assert not rt1.is_valid() - assert 0 == len(db.execute_query("FIND TestRT1")) + assert 0 == len(db.execute_query("FIND ENTITY TestRT1")) assert "TestRT1" == rt1.name def test_ticket_138(): - try: - rt_person = db.RecordType("Person").insert() - rt_person_x = db.RecordType("Person_x") - rt_person_x.add_property(rt_person) - rt_person_x.insert() - - assert 1 == len(rt_person_x.get_properties()) + rt_person = db.RecordType("Person").insert() + rt_person_x = db.RecordType("Person_x") + rt_person_x.add_property(rt_person) + rt_person_x.insert() - rt_person_x.delete() - assert 1 == len(rt_person_x.get_properties()) + assert 1 == len(rt_person_x.get_properties()) - rt_person_x.insert() - assert 1 == len(rt_person_x.get_properties()) + rt_person_x.delete() + assert 1 == len(rt_person_x.get_properties()) - rt_person_x.delete() - assert 1 == len(rt_person_x.get_properties()) + rt_person_x.insert() + assert 1 == len(rt_person_x.get_properties()) - rt_person_x.insert() - assert 1 == len(rt_person_x.get_properties()) + rt_person_x.delete() + assert 1 == len(rt_person_x.get_properties()) - finally: - if len(db.execute_query("FIND Person_x")) > 0: - rt_person_x.delete() - rt_person.delete() + rt_person_x.insert() + assert 1 == len(rt_person_x.get_properties()) def test_ticket_137(): @@ -460,23 +454,58 @@ def test_ticket_137(): rt1 = db.RecordType("TestRT1").insert() assert rt1.is_valid() - crt1 = db.execute_query("FIND TestRT1", unique=True) + crt1 = db.execute_query("FIND ENTITY TestRT1", unique=True) assert crt1.is_valid() assert rt1.id == crt1.id crt1.delete() assert not crt1.is_valid() - assert 0 == len(db.execute_query("FIND TestRT1")) + assert 0 == len(db.execute_query("FIND ENTITY TestRT1")) - try: + with pytest.raises(TransactionError): rt1.insert() - raise AssertionError("This should have raised an TransactionError") - except TransactionError as e: - print(e) -def test_ticket_128(): +@pytest.mark.skip +def test_ticket_39(): + import os + scratch = os.path.realpath(db.get_config().get( + "EndToEndTests", "test_tickets.test_ticket_39.scratch")) + assert os.path.isdir(scratch) + testfile = os.path.join(scratch, "test.dat") + try: + # insert RecordType + + upload_file = open(testfile, "w") + upload_file.write("hello world\n") + upload_file.close() + # check if the server can connect to this filesystem + + f = db.File(path="testfiles/file1", pickup=testfile).insert() + assert f.is_valid() + f.delete() + + # make unreadable + os.chmod(testfile, 0o000) + with pytest.raises(TransactionError) as te: + f = db.File( + path="testfiles/file1", pickup=testfile).insert() + e = te.value.errors[0] + assert e.msg == "Insufficient read permission for this file. Please make it readable." + + finally: + os.chmod(testfile, 0o600) + + if len(db.execute_query("FIND ENTITY RT1")) > 0: + rt1.delete() + try: + os.remove(testfile) + except Exception as e: + print(e) + + +def test_ticket_128(): try: db.execute_query(r"FIND 5\#):xw;;-`;BY6~PjsI^*g.$+eY#n.aA9zm") except TransactionError as e: @@ -484,29 +513,25 @@ def test_ticket_128(): def test_ticket_123a(): + p = db.Property( + name="TestDoubleProperty", datatype="Double").insert() + assert p.is_valid() - try: - p = db.Property( - name="TestDoubleProperty", datatype="Double").insert() - assert p.is_valid() - - assert p.id == db.execute_query( - "FIND TestDoubleProperty", unique=True).id - assert p.id == db.execute_query("FIND TestDouble*", unique=True).id - assert p.id == db.execute_query( - "FIND TestD*Property", unique=True).id - assert p.id == db.execute_query( - "FIND *stDoubleProperty", unique=True).id - assert p.id == db.execute_query( - "FIND TestDoubleProperty*", unique=True).id - assert p.id == db.execute_query( - "FIND TestDouble*Property", unique=True).id - assert p.id == db.execute_query( - "FIND *Te*tDoublePr*operty", unique=True).id - assert p.id == db.execute_query( - "FIND *T*oubl*oper*", unique=True).id - finally: - p.delete() + assert p.id == db.execute_query( + "FIND PROPERTY TestDoubleProperty", unique=True).id + assert p.id == db.execute_query("FIND PROPERTY TestDouble*", unique=True).id + assert p.id == db.execute_query( + "FIND PROPERTY TestD*Property", unique=True).id + assert p.id == db.execute_query( + "FIND PROPERTY *stDoubleProperty", unique=True).id + assert p.id == db.execute_query( + "FIND PROPERTY TestDoubleProperty*", unique=True).id + assert p.id == db.execute_query( + "FIND PROPERTY TestDouble*Property", unique=True).id + assert p.id == db.execute_query( + "FIND PROPERTY *Te*tDoublePr*operty", unique=True).id + assert p.id == db.execute_query( + "FIND PROPERTY *T*oubl*oper*", unique=True).id def test_ticket_123(): @@ -517,332 +542,279 @@ def test_ticket_123(): assert p.is_valid() assert p.id == db.execute_query( - "FIND <<TestDoubleProperty>>", unique=True).id + "FIND PROPERTY <<TestDoubleProperty>>", unique=True).id assert p.id == db.execute_query( - "FIND <<TestDouble>>", unique=True).id + "FIND PROPERTY <<TestDouble>>", unique=True).id assert p.id == db.execute_query( - "FIND <<TestD.*Property>>", unique=True).id + "FIND PROPERTY <<TestD.*Property>>", unique=True).id assert p.id == db.execute_query( - "FIND <<stDoubleProperty>>", unique=True).id + "FIND PROPERTY <<stDoubleProperty>>", unique=True).id assert p.id == db.execute_query( - "FIND <<TestDoubleProperty>>", unique=True).id + "FIND PROPERTY <<TestDoubleProperty>>", unique=True).id assert p.id == db.execute_query( - "FIND <<TestDoubleProperty>>", unique=True).id + "FIND PROPERTY <<TestDoubleProperty>>", unique=True).id assert p.id == db.execute_query( - "FIND <<TestDoubleProperty>>", unique=True).id + "FIND PROPERTY <<TestDoubleProperty>>", unique=True).id assert p.id == db.execute_query( - "FIND <<Te[asdfgjkle]tDoubl.*oper>>", unique=True).id + "FIND PROPERTY <<Te[asdfgjkle]tDoubl.*oper>>", unique=True).id finally: p.delete() def test_ticket_143(): - - try: - p = db.Property( - name="TestDoubleProperty", datatype="DOUBLE").insert() - assert p.is_valid() - rt = db.RecordType(name="TestRecordType").add_property(p).insert() - assert rt.is_valid() - r1 = db.Record().add_parent(rt).add_property(p, value="1.0").insert() - assert r1.is_valid() - r2 = db.Record().add_parent(rt).add_property(p, value="2.0").insert() - assert r2.is_valid() - - s = db.execute_query("FIND TestRecordType") - assert 3 == len(s) - assert s.is_valid() - - s = db.execute_query("FIND RECORD TestRecordType") - assert 2 == len(s) - assert s.is_valid() - - s = db.execute_query("FIND TestRecordType WITH TestDoubleProperty") - assert 3 == len(s) - assert s.is_valid() - - s = db.execute_query( - "FIND RECORD TestRecordType WITH TestDoubleProperty") - assert 2 == len(s) - assert s.is_valid() - - s = db.execute_query( - "FIND TestRecordType WITH TestDoubleProperty>0") - assert 2 == len(s) - assert s.is_valid() - - s = db.execute_query( - "FIND TestRecordType WITH THE GREATEST TestDoubleProperty>0") - assert 1 == len(s) - assert s.is_valid() - - assert r2.id == db.execute_query( - "FIND TestRecordType WITH THE GREATEST TestDoubleProperty>0", - unique=True).id - assert r2.id == db.execute_query( - "FIND TestRecordType WITH THE GREATEST TestDoubleProperty", - unique=True).id - assert r1.id == db.execute_query( - "FIND TestRecordType WITH THE SMALLEST TestDoubleProperty", - unique=True).id - finally: - try: - r2.delete() - except BaseException: - pass - try: - r1.delete() - except BaseException: - pass - try: - rt.delete() - except BaseException: - pass - try: - p.delete() - except BaseException: - pass + p = db.Property( + name="TestDoubleProperty", datatype="DOUBLE").insert() + assert p.is_valid() + rt = db.RecordType(name="TestRecordType").add_property(p).insert() + assert rt.is_valid() + r1 = db.Record().add_parent(rt).add_property(p, value="1.0").insert() + assert r1.is_valid() + r2 = db.Record().add_parent(rt).add_property(p, value="2.0").insert() + assert r2.is_valid() + + s = db.execute_query("FIND ENTITY TestRecordType") + assert 3 == len(s) + assert s.is_valid() + + s = db.execute_query("FIND RECORD TestRecordType") + assert 2 == len(s) + assert s.is_valid() + + s = db.execute_query("FIND ENTITY TestRecordType WITH TestDoubleProperty") + assert 3 == len(s) + assert s.is_valid() + + s = db.execute_query( + "FIND RECORD TestRecordType WITH TestDoubleProperty") + assert 2 == len(s) + assert s.is_valid() + + s = db.execute_query( + "FIND ENTITY TestRecordType WITH TestDoubleProperty>0") + assert 2 == len(s) + assert s.is_valid() + + s = db.execute_query( + "FIND ENTITY TestRecordType WITH THE GREATEST TestDoubleProperty>0") + assert 1 == len(s) + assert s.is_valid() + + assert r2.id == db.execute_query( + "FIND ENTITY TestRecordType WITH THE GREATEST TestDoubleProperty>0", + unique=True).id + assert r2.id == db.execute_query( + "FIND ENTITY TestRecordType WITH THE GREATEST TestDoubleProperty", + unique=True).id + assert r1.id == db.execute_query( + "FIND ENTITY TestRecordType WITH THE SMALLEST TestDoubleProperty", + unique=True).id @pytest.mark.slow def test_ticket_147(): - try: - db.execute_query("FIND ticket147_*").delete() - except BaseException: - pass - - try: - # structure - obs = db.Property( - name="ticket147_ObstacleRadius", datatype="DOUBLE").insert() - assert obs.is_valid() - tstep = db.Property( - name="ticket147_TimeStep", datatype="DOUBLE").insert() - assert tstep.is_valid() - bmsim = db.RecordType(name="ticket147_BarkleyModelSimulation" - ).add_property(tstep).insert() - assert bmsim.is_valid() - frm = db.RecordType(name="ticket147_FrequencyMeasurement" - ).add_property(obs).add_property(bmsim).insert() - assert frm.is_valid() - - # data - c = db.Container() - r1 = db.Record().add_parent(bmsim).add_property(tstep, value="0.001") - r2 = db.Record().add_parent(bmsim).add_property(tstep, value="0.001") - r3 = db.Record().add_parent(bmsim).add_property(tstep, value="0.002") - r4 = db.Record().add_parent(bmsim).add_property(tstep, value="0.002") - r5 = db.Record().add_parent(bmsim).add_property(tstep, value="0.003") - c.extend([r1, r2, r3, r4, r5]).insert() - assert c.is_valid() - - for e in c: - assert e.is_valid() - - c2 = db.Container() - r21 = db.Record().add_parent(frm).add_property( - obs, value="1.0").add_property( - id=bmsim.id, value=r1) - r22 = db.Record().add_parent(frm).add_property( - obs, value="2.0").add_property( - id=bmsim.id, value=r2) - r23 = db.Record().add_parent(frm).add_property( - obs, value="2.0").add_property( - id=bmsim.id, value=r3) - r24 = db.Record().add_parent(frm).add_property( - obs, value="3.0").add_property( - id=bmsim.id, value=r4) - r25 = db.Record().add_parent(frm).add_property( - obs, value="3.0").add_property( - id=bmsim.id, value=r5) - c2.extend([r21, r22, r23, r24, r25]).insert() - assert c2.is_valid() - ''' - s = db.execute_query("FIND ticket147*") - assert s.is_valid() - assert 14 == len(s) - - s = db.execute_query("FIND ticket147_Bar*") - assert s.is_valid() - assert 6 == len(s) - - s = db.execute_query("FIND RECORD ticket147_Bar*") - assert s.is_valid() - assert 5 == len(s) - - s = db.execute_query("FIND ticket147_Fre*") - assert s.is_valid() - assert 6 == len(s) - - s = db.execute_query("FIND RECORD ticket147_Fre*") - assert s.is_valid() - assert 5 == len(s) - - s = db.execute_query( - "FIND ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius=2.0") - assert s.is_valid() - assert 2 == len(s) - - s = db.execute_query( - "FIND ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0'") - assert s.is_valid() - assert 2 == len(s) - - s = db.execute_query( - "FIND ticket147_Fre* WHICH HAS A PROPERTY ticket147_BarkleyModelSimulation") - assert s.is_valid() - assert 6 == len(s) - - s = db.execute_query( - "FIND Record ticket147_Fre* WHICH HAS A PROPERTY ticket147_BarkleyModelSimulation") - assert s.is_valid() - assert 5 == len(s)''' - - s = db.execute_query( - "FIND Record ticket147_Fre* WHICH HAS A PROPERTY ticket147_BarkleyModelSimulation WHICH HAS A ticket147_TimeStep" - ) - assert s.is_valid() - assert 5 == len(s) - - s = db.execute_query( - "FIND ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation )" - ) - assert s.is_valid() - assert 2 == len(s) - - s = db.execute_query( - "FIND ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS A ticket147_TimeStep)" - ) - assert s.is_valid() - assert 2 == len(s) - - s = db.execute_query( - "FIND ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS A ticket147_TimeStep<='0.0021')" - ) - assert s.is_valid() - assert 2 == len(s) - assert r22.id == s[0].id - assert r23.id == s[1].id - - s = db.execute_query( - "FIND ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS A ticket147_TimeStep='0.002')" - ) - assert s.is_valid() - assert 1 == len(s) - assert r23.id == s[0].id - - s = db.execute_query( - "FIND ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius>='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS A ticket147_TimeStep>='0.002')" - ) - assert s.is_valid() - assert 3 == len(s) - - s = db.execute_query( - "FIND ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS A ticket147_TimeStep='0.001')" - ) - assert s.is_valid() - assert 1 == len(s) - assert r22.id == s[0].id + # structure + obs = db.Property( + name="ticket147_ObstacleRadius", datatype="DOUBLE").insert() + assert obs.is_valid() + tstep = db.Property( + name="ticket147_TimeStep", datatype="DOUBLE").insert() + assert tstep.is_valid() + bmsim = db.RecordType(name="ticket147_BarkleyModelSimulation" + ).add_property(tstep).insert() + assert bmsim.is_valid() + frm = db.RecordType(name="ticket147_FrequencyMeasurement" + ).add_property(obs).add_property(bmsim).insert() + assert frm.is_valid() - s = db.execute_query( - "FIND ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS ticket147_TimeStep='0.001')" - ) - assert s.is_valid() - assert 1 == len(s) - assert r22.id == s[0].id + # data + c = db.Container() + r1 = db.Record().add_parent(bmsim).add_property(tstep, value="0.001") + r2 = db.Record().add_parent(bmsim).add_property(tstep, value="0.001") + r3 = db.Record().add_parent(bmsim).add_property(tstep, value="0.002") + r4 = db.Record().add_parent(bmsim).add_property(tstep, value="0.002") + r5 = db.Record().add_parent(bmsim).add_property(tstep, value="0.003") + c.extend([r1, r2, r3, r4, r5]).insert() + assert c.is_valid() - s = db.execute_query( - "FIND ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS THE SMALLEST ticket147_TimeStep)" - ) - assert s.is_valid() - assert 1 == len(s) - assert r22.id == s[0].id + for e in c: + assert e.is_valid() + c2 = db.Container() + r21 = db.Record().add_parent(frm).add_property( + obs, value="1.0").add_property( + id=bmsim.id, value=r1) + r22 = db.Record().add_parent(frm).add_property( + obs, value="2.0").add_property( + id=bmsim.id, value=r2) + r23 = db.Record().add_parent(frm).add_property( + obs, value="2.0").add_property( + id=bmsim.id, value=r3) + r24 = db.Record().add_parent(frm).add_property( + obs, value="3.0").add_property( + id=bmsim.id, value=r4) + r25 = db.Record().add_parent(frm).add_property( + obs, value="3.0").add_property( + id=bmsim.id, value=r5) + c2.extend([r21, r22, r23, r24, r25]).insert() + assert c2.is_valid() + ''' + s = db.execute_query("FIND ENTITY ticket147*") + assert s.is_valid() + assert 14 == len(s) + + s = db.execute_query("FIND ENTITY ticket147_Bar*") + assert s.is_valid() + assert 6 == len(s) + + s = db.execute_query("FIND RECORD ticket147_Bar*") + assert s.is_valid() + assert 5 == len(s) + + s = db.execute_query("FIND ENTITY ticket147_Fre*") + assert s.is_valid() + assert 6 == len(s) + + s = db.execute_query("FIND RECORD ticket147_Fre*") + assert s.is_valid() + assert 5 == len(s) + + s = db.execute_query( + "FIND ENTITY ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius=2.0") + assert s.is_valid() + assert 2 == len(s) + + s = db.execute_query( + "FIND ENTITY ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0'") + assert s.is_valid() + assert 2 == len(s) + + s = db.execute_query( + "FIND ENTITY ticket147_Fre* WHICH HAS A PROPERTY ticket147_BarkleyModelSimulation") + assert s.is_valid() + assert 6 == len(s) + + s = db.execute_query( + "FIND Record ticket147_Fre* WHICH HAS A PROPERTY ticket147_BarkleyModelSimulation") + assert s.is_valid() + assert 5 == len(s)''' + + s = db.execute_query( + "FIND Record ticket147_Fre* WHICH HAS A PROPERTY ticket147_BarkleyModelSimulation WHICH HAS A ticket147_TimeStep" + ) + assert s.is_valid() + assert 5 == len(s) + + s = db.execute_query( + "FIND ENTITY ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation )" + ) + assert s.is_valid() + assert 2 == len(s) + + s = db.execute_query( + "FIND ENTITY ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS A ticket147_TimeStep)" + ) + assert s.is_valid() + assert 2 == len(s) + + s = db.execute_query( + "FIND ENTITY ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS A ticket147_TimeStep<='0.0021')" + ) + assert s.is_valid() + assert 2 == len(s) + assert r22.id == s[0].id + assert r23.id == s[1].id + + s = db.execute_query( + "FIND ENTITY ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS A ticket147_TimeStep='0.002')" + ) + assert s.is_valid() + assert 1 == len(s) + assert r23.id == s[0].id + + s = db.execute_query( + "FIND ENTITY ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius>='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS A ticket147_TimeStep>='0.002')" + ) + assert s.is_valid() + assert 3 == len(s) + + s = db.execute_query( + "FIND ENTITY ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS A ticket147_TimeStep='0.001')" + ) + assert s.is_valid() + assert 1 == len(s) + assert r22.id == s[0].id + + s = db.execute_query( + "FIND ENTITY ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS ticket147_TimeStep='0.001')" + ) + assert s.is_valid() + assert 1 == len(s) + assert r22.id == s[0].id + + s = db.execute_query( + "FIND ENTITY ticket147_Fre* WHICH HAS A PROPERTY ticket147_ObstacleRadius='2.0' AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS THE SMALLEST ticket147_TimeStep)" + ) + assert s.is_valid() + assert 1 == len(s) + assert r22.id == s[0].id + + s = db.execute_query( + "FIND ENTITY ticket147_Fre* WHICH HAS THE SMALLEST ticket147_ObstacleRadius AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS THE SMALLEST ticket147_TimeStep)" + ) + assert s.is_valid() + assert 1 == len(s) + assert r21.id == s[0].id + + # typo: SMALLES + with pytest.raises(TransactionError): s = db.execute_query( - "FIND ticket147_Fre* WHICH HAS THE SMALLEST ticket147_ObstacleRadius AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS THE SMALLEST ticket147_TimeStep)" + "FIND ENTITY ticket147_Fre* WHICH HAS THE SMALLEST ticket147_ObstacleRadius AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS THE SMALLES ticket147_TimeStep)" ) - assert s.is_valid() - assert 1 == len(s) - assert r21.id == s[0].id - # typo: SMALLES - with pytest.raises(TransactionError): - s = db.execute_query( - "FIND ticket147_Fre* WHICH HAS THE SMALLEST ticket147_ObstacleRadius AND A PROPERTY ( ticket147_BarkleyModelSimulation WHICH HAS THE SMALLES ticket147_TimeStep)" - ) - finally: - try: - c2.delete() - except BaseException: - pass - try: - c.delete() - except BaseException: - pass - try: - frm.delete() - except BaseException: - pass - try: - bmsim.delete() - except BaseException: - pass - try: - tstep.delete() - except BaseException: - pass - try: - obs.delete() - except BaseException: - pass +def test_ticket_89(): + nt_user = db.Property(name="NT_user", datatype="TEXT").insert() + assert nt_user.is_valid() + nt_data = db.RecordType(name="NT_testfile", id=-100) + # nt_data = <File id="-100" name="NT_testfile" + # path="testfiles/NT_test.txt"/> + + nt_data.insert() + assert nt_data.is_valid() + assert 0 == len(nt_data.get_properties()) + # nt_data = + # <File id="318" cuid="c0c28bad-fb30-4e74-94ad-10934363e755" name="NT_testfile" path="testfiles/NT_test.txt" checksum="cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e" size="0"> + # <Warning code="106" description="Entity has no description."/> + # </File> + + nt_data.add_property(nt_user, value="user1") + nt_data.update() + assert nt_data.is_valid() + assert 1 == len(nt_data.get_properties()) + + # nt_data = + # <File id="318" cuid="c0c28bad-fb30-4e74-94ad-10934363e755" name="NT_testfile" path="testfiles/NT_test.txt" checksum="cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e" size="0"> + # <Warning code="106" description="Entity has no description."/> + # <Property id="316" name="NT_user" description="Test Property of type 'string' for nosetests" datatype="TEXT" importance="FIX">user1</Property> + # </File> + nt_data.add_property(nt_user, value="user2") + nt_data.update() + assert nt_data.is_valid() + assert 2 == len(nt_data.get_properties()) -def test_ticket_89(): + # nt_data = + # <File id="318" cuid="c0c28bad-fb30-4e74-94ad-10934363e755" name="NT_testfile" path="testfiles/NT_test.txt" checksum="cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e" size="0"> + # <Warning code="106" description="Entity has no description."/> + # <Property id="316" name="NT_user" description="Test Property of type 'string' for nosetests" datatype="TEXT" importance="FIX">user2</Property> + # <Property id="316" name="NT_user" description="Test Property of type 'string' for nosetests" datatype="TEXT" importance="FIX">user2</Property> + # <Property id="316" name="NT_user" description="Test Property of type 'string' for nosetests" datatype="TEXT" importance="FIX">user1</Property> + # </File> - try: - nt_user = db.Property(name="NT_user", datatype="TEXT").insert() - assert nt_user.is_valid() - nt_data = db.RecordType(name="NT_testfile", id=-100) - # nt_data = <File id="-100" name="NT_testfile" - # path="testfiles/NT_test.txt"/> - - nt_data.insert() - assert nt_data.is_valid() - assert 0 == len(nt_data.get_properties()) - # nt_data = - # <File id="318" cuid="c0c28bad-fb30-4e74-94ad-10934363e755" name="NT_testfile" path="testfiles/NT_test.txt" checksum="cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e" size="0"> - # <Warning code="106" description="Entity has no description."/> - # </File> - - nt_data.add_property(nt_user, value="user1") - nt_data.update() - assert nt_data.is_valid() - assert 1 == len(nt_data.get_properties()) - - # nt_data = - # <File id="318" cuid="c0c28bad-fb30-4e74-94ad-10934363e755" name="NT_testfile" path="testfiles/NT_test.txt" checksum="cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e" size="0"> - # <Warning code="106" description="Entity has no description."/> - # <Property id="316" name="NT_user" description="Test Property of type 'string' for nosetests" datatype="TEXT" importance="FIX">user1</Property> - # </File> - - nt_data.add_property(nt_user, value="user2") - nt_data.update() - assert nt_data.is_valid() - assert 2 == len(nt_data.get_properties()) - - # nt_data = - # <File id="318" cuid="c0c28bad-fb30-4e74-94ad-10934363e755" name="NT_testfile" path="testfiles/NT_test.txt" checksum="cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e" size="0"> - # <Warning code="106" description="Entity has no description."/> - # <Property id="316" name="NT_user" description="Test Property of type 'string' for nosetests" datatype="TEXT" importance="FIX">user2</Property> - # <Property id="316" name="NT_user" description="Test Property of type 'string' for nosetests" datatype="TEXT" importance="FIX">user2</Property> - # <Property id="316" name="NT_user" description="Test Property of type 'string' for nosetests" datatype="TEXT" importance="FIX">user1</Property> - # </File> - - nt_data.retrieve() - assert nt_data.is_valid() - assert 2 == len(nt_data.get_properties()) + nt_data.retrieve() + assert nt_data.is_valid() + assert 2 == len(nt_data.get_properties()) # response: # <Entities> # <File id="318" name="NT_testfile" path="testfiles/NT_test.txt" checksum="CF83E1357EEFB8BDF1542850D66D8007D620E4050B5715DC83F4A921D36CE9CE47D0D13C5D85F2B0FF8318D2877EEC2F63B931BD47417A81A538327AF927DA3E" size="0"> @@ -858,38 +830,20 @@ def test_ticket_89(): # <Property id="316" name="NT_user" description="Test Property of type 'string' for nosetests" datatype="TEXT" importance="FIX">user2</Property> # <Property id="316" name="NT_user" description="Test Property of type 'string' for nosetests" datatype="TEXT" importance="FIX">user1</Property> # </File> - finally: - try: - db.execute_query("FIND RECORDTYPE NT_testfile").delete( - raise_exception_on_error=False) - except BaseException: - pass - try: - db.execute_query( - "FIND PROPERTY NT_user", - unique=True).delete(raise_exception_on_error=False) - except BaseException: - pass def test_ticket_173(): - try: - assert 0 == db.execute_query("COUNT TestTextProperty") + assert 0 == db.execute_query("COUNT ENTITY TestTextProperty") - p = db.Property( - name="TestTextProperty", - description="simple text property (from test_tickets.py:test_ticket173)", - datatype='text') - p.insert() + p = db.Property( + name="TestTextProperty", + description="simple text property (from test_tickets.py:test_ticket173)", + datatype='text') + p.insert() - assert p.is_valid() - assert 1 == db.execute_query("COUNT TestTextProperty") - finally: - try: - p.delete() - except BaseException: - pass + assert p.is_valid() + assert 1 == db.execute_query("COUNT ENTITY TestTextProperty") def test_ticket_166(): @@ -967,330 +921,214 @@ def test_ticket_178(): xml = etree.Element("Björn") assert xml.tag == "Björn" - try: - rt = db.RecordType(name="Person") - rt.insert() - - assert rt.is_valid() + rt = db.RecordType(name="Person") + rt.insert() - p = db.Property(name="First name", datatype="TEXT") - p.insert() + assert rt.is_valid() - assert p.is_valid() + p = db.Property(name="First name", datatype="TEXT") + p.insert() - r = db.Record().add_parent(parent=rt).add_property( - name="First name", value="Björn") + assert p.is_valid() - r.insert() + r = db.Record().add_parent(parent=rt).add_property( + name="First name", value="Björn") - assert r.is_valid() + r.insert() - assert db.Record(id=r.id).retrieve().get_property( - "First name").value == "Björn" + assert r.is_valid() - finally: - try: - r.delete() - except BaseException: - pass - try: - p.delete() - except BaseException: - pass - try: - rt.delete() - except BaseException: - pass + assert db.Record(id=r.id).retrieve().get_property( + "First name").value == "Björn" def test_ticket_124(): + rt = db.RecordType(name="Person") + rt.insert() - try: - rt = db.RecordType(name="Person") - rt.insert() - - assert rt.is_valid() - - p = db.Property(name="First name", datatype="TEXT") - p.insert() + assert rt.is_valid() - assert p.is_valid() + p = db.Property(name="First name", datatype="TEXT") + p.insert() - r = db.Record().add_parent(parent=rt).add_property( - name="First name", value="Björn") + assert p.is_valid() - r.insert() + r = db.Record().add_parent(parent=rt).add_property( + name="First name", value="Björn") - assert r.is_valid() + r.insert() - r2 = db.execute_query("Find Person WITH 'First name'=Björn")[0] - assert r2.is_valid() - assert r2.id == r.id + assert r.is_valid() - finally: - try: - r.delete() - except BaseException: - pass - try: - p.delete() - except BaseException: - pass - try: - rt.delete() - except BaseException: - pass + r2 = db.execute_query("Find Person WITH 'First name'=Björn")[0] + assert r2.is_valid() + assert r2.id == r.id def test_ticket_163(): + p = db.Property(name="SomePropertyTest", datatype="TEXT") + p.insert() + assert p.is_valid() - try: - p = db.Property(name="SomePropertyTest", datatype="TEXT") - p.insert() - assert p.is_valid() - - rt = db.RecordType(name="RecordTypeTest").add_property( - name="SomePropertyTest", importance="obligatory", value="blabla") - rt.insert() - assert rt.is_valid() - - rt2 = db.execute_query( - "FIND Entity . SomePropertyTest=blabla", unique=True) - assert rt2.is_valid() + rt = db.RecordType(name="RecordTypeTest").add_property( + name="SomePropertyTest", importance="obligatory", value="blabla") + rt.insert() + assert rt.is_valid() - assert rt2.id == rt.id + rt2 = db.execute_query( + "FIND Entity . SomePropertyTest=blabla", unique=True) + assert rt2.is_valid() - finally: - try: - rt.delete() - except BaseException: - pass - try: - p.delete() - except BaseException: - pass + assert rt2.id == rt.id def test_ticket_165(): - try: - db.execute_query("FIND Test*").delete() - except BaseException: - pass - try: - p = db.Property(name="TestComment", datatype="TEXT") - - rt_a = db.RecordType(name="TestAnnotation").add_property( - name="TestComment") - rt_a.datatype = "REFERENCE" - - rt_b = db.RecordType(name="TestEntity") - - assert isinstance(rt_a, db.Entity) - r_a = db.Record().add_parent(rt_a).add_property( - name="TestComment", value="blablabla") - r_a.value = rt_b - - c = db.Container().extend([p, rt_a, rt_b, r_a]).insert() - assert c.is_valid() - - for e in c: - assert e.is_valid() - - assert rt_b.id == db.execute_query( - "FIND TestEntity WHICH IS REFERENCED BY TestAnnotation", unique=True).id - assert rt_b.id == db.execute_query( - "FIND Entity WHICH IS REFERENCED BY TestAnnotation", unique=True).id - assert rt_b.id == db.execute_query( - "FIND RecordType WHICH IS REFERENCED BY TestAnnotation", unique=True).id - assert 0 == len(db.execute_query( - "FIND Record WHICH IS REFERENCED BY TestAnnotation")) - - assert rt_b.id == db.execute_query( - "FIND TestEntity WHICH IS REFERENCED WITH TestComment", unique=True).id - assert rt_b.id == db.execute_query( - "FIND Entity WHICH IS REFERENCED BY TestAnnotation WITH TestComment", - unique=True).id - assert rt_b.id == db.execute_query( - "FIND RecordType WHICH IS REFERENCED BY TestAnnotation WITH TestComment", - unique=True).id - assert 0 == len(db.execute_query( - "FIND Record WHICH IS REFERENCED BY TestAnnotation WITH TestComment")) + p = db.Property(name="TestComment", datatype="TEXT") - assert rt_b.id == db.execute_query( - "FIND TestEntity WHICH IS REFERENCED BY TestAnnotation WITH TestComment", - unique=True).id - assert rt_b.id == db.execute_query( - "FIND Entity WHICH IS REFERENCED BY TestAnnotation WITH TestComment", - unique=True).id - assert rt_b.id == db.execute_query( - "FIND RecordType WHICH IS REFERENCED BY TestAnnotation WITH TestComment", - unique=True).id - assert 0 == len(db.execute_query( - "FIND Record WHICH IS REFERENCED BY TestAnnotation WITH TestComment")) + rt_a = db.RecordType(name="TestAnnotation").add_property( + name="TestComment") + rt_a.datatype = "REFERENCE" - assert rt_b.id == db.execute_query( - "FIND TestEntity WHICH IS REFERENCED BY TestAnnotation WITH TestComment='blablabla'", - unique=True).id - assert rt_b.id == db.execute_query( - "FIND Entity WHICH IS REFERENCED BY TestAnnotation WITH TestComment='blablabla'", - unique=True).id - assert rt_b.id == db.execute_query( - "FIND RecordType WHICH IS REFERENCED BY TestAnnotation WITH TestComment='blablabla'", - unique=True).id - assert 0 == len(db.execute_query( - "FIND Record WHICH IS REFERENCED BY TestAnnotation WITH TestComment='blablabla'")) + rt_b = db.RecordType(name="TestEntity") - c.delete() + assert isinstance(rt_a, db.Entity) + r_a = db.Record().add_parent(rt_a).add_property( + name="TestComment", value="blablabla") + r_a.value = rt_b - finally: - try: - db.execute_query("FIND Test*").delete() - except BaseException: - pass - try: - r_a.delete() - except BaseException: - pass - try: - rt_b.delete() - except BaseException: - pass - try: - rt_b.delete() - except BaseException: - pass - try: - rt_a.delete() - except BaseException: - pass - try: - p.delete() - except BaseException: - pass - - -def test_ticket_174(): + c = db.Container().extend([p, rt_a, rt_b, r_a]).insert() + assert c.is_valid() - try: + for e in c: + assert e.is_valid() - p1 = db.Property(name="Ticket174_P1", datatype="INTEGER") - p2 = db.Property(name="Ticket174_P2", datatype="DOUBLE") - rt1 = db.RecordType(name="Ticket174_RecordType1").add_property( - p1, value=1).add_property( - p2, value=2) - rt2 = db.RecordType(name="Ticket174_RecordType2").add_property( - p2, value=1).add_property( - p1, value=2) - rt3 = db.RecordType(name="Ticket174_RecordType3").add_property( - p1, value=1).add_property( - p1, value=2).add_property( - p2, value=3) - rt4 = db.RecordType(name="Ticket174_RecordType4").add_property( - p2, value=1).add_property( - p1, value=2).add_property( - p1, value=3).add_property( - p2, value=4) + assert rt_b.id == db.execute_query( + "FIND ENTITY TestEntity WHICH IS REFERENCED BY TestAnnotation", unique=True).id + assert rt_b.id == db.execute_query( + "FIND Entity WHICH IS REFERENCED BY TestAnnotation", unique=True).id + assert rt_b.id == db.execute_query( + "FIND RecordType WHICH IS REFERENCED BY TestAnnotation", unique=True).id + assert 0 == len(db.execute_query( + "FIND Record WHICH IS REFERENCED BY TestAnnotation")) + + assert rt_b.id == db.execute_query( + "FIND ENTITY TestEntity WHICH IS REFERENCED WITH TestComment", unique=True).id + assert rt_b.id == db.execute_query( + "FIND Entity WHICH IS REFERENCED BY TestAnnotation WITH TestComment", + unique=True).id + assert rt_b.id == db.execute_query( + "FIND RecordType WHICH IS REFERENCED BY TestAnnotation WITH TestComment", + unique=True).id + assert 0 == len(db.execute_query( + "FIND Record WHICH IS REFERENCED BY TestAnnotation WITH TestComment")) + + assert rt_b.id == db.execute_query( + "FIND ENTITY TestEntity WHICH IS REFERENCED BY TestAnnotation WITH TestComment", + unique=True).id + assert rt_b.id == db.execute_query( + "FIND Entity WHICH IS REFERENCED BY TestAnnotation WITH TestComment", + unique=True).id + assert rt_b.id == db.execute_query( + "FIND RecordType WHICH IS REFERENCED BY TestAnnotation WITH TestComment", + unique=True).id + assert 0 == len(db.execute_query( + "FIND Record WHICH IS REFERENCED BY TestAnnotation WITH TestComment")) + + assert rt_b.id == db.execute_query( + "FIND ENTITY TestEntity WHICH IS REFERENCED BY TestAnnotation WITH TestComment='blablabla'", + unique=True).id + assert rt_b.id == db.execute_query( + "FIND Entity WHICH IS REFERENCED BY TestAnnotation WITH TestComment='blablabla'", + unique=True).id + assert rt_b.id == db.execute_query( + "FIND RecordType WHICH IS REFERENCED BY TestAnnotation WITH TestComment='blablabla'", + unique=True).id + assert 0 == len(db.execute_query( + "FIND Record WHICH IS REFERENCED BY TestAnnotation WITH TestComment='blablabla'")) - c = db.Container().extend([p1, p2, rt1, rt2, rt3, rt4]).insert() - assert c.is_valid() +def test_ticket_174(): + p1 = db.Property(name="Ticket174_P1", datatype="INTEGER") + p2 = db.Property(name="Ticket174_P2", datatype="DOUBLE") + rt1 = db.RecordType(name="Ticket174_RecordType1").add_property( + p1, value=1).add_property( + p2, value=2) + rt2 = db.RecordType(name="Ticket174_RecordType2").add_property( + p2, value=1).add_property( + p1, value=2) + rt3 = db.RecordType(name="Ticket174_RecordType3").add_property( + p1, value=1).add_property( + p1, value=2).add_property( + p2, value=3) + rt4 = db.RecordType(name="Ticket174_RecordType4").add_property( + p2, value=1).add_property( + p1, value=2).add_property( + p1, value=3).add_property( + p2, value=4) + + c = db.Container().extend([p1, p2, rt1, rt2, rt3, rt4]).insert() - assert rt1.is_valid() + assert c.is_valid() - for i in range(len(rt1.get_properties())): - assert i + 1.0 == float(rt1.get_properties()[i].value) + assert rt1.is_valid() - assert rt2.is_valid() + for i in range(len(rt1.get_properties())): + assert i + 1.0 == float(rt1.get_properties()[i].value) - for i in range(len(rt2.get_properties())): - assert i + 1.0 == float(rt2.get_properties()[i].value) + assert rt2.is_valid() - assert rt3.is_valid() + for i in range(len(rt2.get_properties())): + assert i + 1.0 == float(rt2.get_properties()[i].value) - for i in range(len(rt3.get_properties())): - assert i + 1.0 == float(rt3.get_properties()[i].value) + assert rt3.is_valid() - assert rt4.is_valid() + for i in range(len(rt3.get_properties())): + assert i + 1.0 == float(rt3.get_properties()[i].value) - for i in range(len(rt4.get_properties())): - assert i + 1.0 == float(rt4.get_properties()[i].value) + assert rt4.is_valid() - # change order: - rt4_i1 = rt4.get_properties()[1] - rt4_i2 = rt4.get_properties()[2] - rt4.get_properties()[2] = rt4_i1 - rt4.get_properties()[1] = rt4_i2 - rt4.update() + for i in range(len(rt4.get_properties())): + assert i + 1.0 == float(rt4.get_properties()[i].value) - assert rt4.is_valid() + # change order: + rt4_i1 = rt4.get_properties()[1] + rt4_i2 = rt4.get_properties()[2] + rt4.get_properties()[2] = rt4_i1 + rt4.get_properties()[1] = rt4_i2 + rt4.update() - assert 1.0 == float(rt4.get_properties()[0].value) - assert 3.0 == float(rt4.get_properties()[1].value) - assert 2.0 == float(rt4.get_properties()[2].value) - assert 4.0 == float(rt4.get_properties()[3].value) + assert rt4.is_valid() - # retrieve again: - rt42 = db.execute_query("FIND Ticket174_RecordType4", unique=True) + assert 1.0 == float(rt4.get_properties()[0].value) + assert 3.0 == float(rt4.get_properties()[1].value) + assert 2.0 == float(rt4.get_properties()[2].value) + assert 4.0 == float(rt4.get_properties()[3].value) - assert 1.0 == float(rt42.get_properties()[0].value) - assert 3.0 == float(rt42.get_properties()[1].value) - assert 2.0 == float(rt42.get_properties()[2].value) - assert 4.0 == float(rt42.get_properties()[3].value) + # retrieve again: + rt42 = db.execute_query("FIND ENTITY Ticket174_RecordType4", unique=True) - c.delete() - finally: - try: - rt1.delete() - except BaseException: - pass - try: - rt2.delete() - except BaseException: - pass - try: - rt3.delete() - except BaseException: - pass - try: - rt4.delete() - except BaseException: - pass - try: - p2.delete() - except BaseException: - pass - try: - p1.delete() - except BaseException: - pass + assert 1.0 == float(rt42.get_properties()[0].value) + assert 3.0 == float(rt42.get_properties()[1].value) + assert 2.0 == float(rt42.get_properties()[2].value) + assert 4.0 == float(rt42.get_properties()[3].value) def test_ticket_192(): import time if time.localtime().tm_hour > time.gmtime().tm_hour: - try: - rt = db.RecordType(name="SimulationTestRecordType").insert() - rec = db.Record().add_parent(rt).insert() - - assert rec.id == db.execute_query( - "FIND Record SimulationTestRecordType WHICH WAS CREATED BY ME", unique=True).id - assert rec.id == db.execute_query( - "FIND Record SimulationTestRecordType WHICH WAS CREATED TODAY", unique=True).id - assert rec.id == db.execute_query( - "FIND Record SimulationTestRecordType WHICH WAS CREATED TODAY BY ME", - unique=True).id - assert rec.id == db.execute_query( - "FIND Record WHICH WAS CREATED TODAY BY ME", unique=True).id - finally: - try: - rec.delete() - except BaseException: - pass - try: - rt.delete() - except BaseException: - pass + rt = db.RecordType(name="SimulationTestRecordType").insert() + rec = db.Record().add_parent(rt).insert() + + assert rec.id == db.execute_query( + "FIND Record SimulationTestRecordType WHICH WAS CREATED BY ME", unique=True).id + assert rec.id == db.execute_query( + "FIND Record SimulationTestRecordType WHICH WAS CREATED TODAY", unique=True).id + assert rec.id == db.execute_query( + "FIND Record SimulationTestRecordType WHICH WAS CREATED TODAY BY ME", + unique=True).id + assert rec.id == db.execute_query( + "FIND Record WHICH WAS CREATED TODAY BY ME", unique=True).id def test_ticket_200(): @@ -1333,7 +1171,7 @@ def test_ticket_155(): datatype="TEXT").insert() assert p.is_valid() assert p.description == "standard desc" - p2 = db.execute_query("FIND TestTextProperty", True) + p2 = db.execute_query("FIND PROPERTY TestTextProperty", True) assert p2.is_valid() assert p2.description == "standard desc" @@ -1342,7 +1180,7 @@ def test_ticket_155(): assert rt.is_valid() assert rt.get_property( "TestTextProperty").description == "overridden standard desc" - rt2 = db.execute_query("FIND TestRecordType", True) + rt2 = db.execute_query("FIND ENTITY TestRecordType", True) assert rt2.is_valid() assert rt2.get_property( "TestTextProperty").description == "overridden standard desc" @@ -1353,7 +1191,7 @@ def test_ticket_155(): assert rt3.get_property( "TestTextProperty").description == "overridden standard desc" - rt4 = db.execute_query("FIND TestRecordType2", True) + rt4 = db.execute_query("FIND ENTITY TestRecordType2", True) assert rt4.is_valid() assert rt4.get_property( "TestTextProperty").description == "overridden standard desc" @@ -1392,7 +1230,7 @@ def test_ticket_115(): c.insert() assert c.is_valid() - rtc = db.execute_query("FIND TestRecordType", unique=True) + rtc = db.execute_query("FIND ENTITY TestRecordType", unique=True) assert len(rtc.get_properties()) == 2 rtc.get_properties().remove("TestDoubleProperty1") diff --git a/tests/test_tickets_200.py b/tests/test_tickets_200.py index 83738ff4e5dec12910271a322da0409185c3bd1f..fde2c18dd36be3eadcd684e9bd4c2f2c5d2472a8 100644 --- a/tests/test_tickets_200.py +++ b/tests/test_tickets_200.py @@ -25,17 +25,19 @@ """ from __future__ import print_function, unicode_literals -from nose.tools import (assert_equal, assert_is_none, assert_is_not_none, - assert_true) from pytest import raises import caosdb as h from caosdb.common.models import Property, RecordType +def setup_function(function): + setup_module() + + def setup_module(): try: - h.execute_query("FIND Simple*").delete() + h.execute_query("FIND ENTITY").delete() except Exception as e: print(e) @@ -45,150 +47,94 @@ def teardown_module(): def test_ticket_208(): + c = h.Container() + rt1 = h.RecordType(name="SimpleRecordType") + c.append(rt1) - try: - c = h.Container() - rt1 = h.RecordType(name="SimpleRecordType") - c.append(rt1) + for i in range(10): + rec = h.Record(name="SimpleRecord" + str(i)).add_parent(rt1) + c.append(rec) - for i in range(10): - rec = h.Record(name="SimpleRecord" + str(i)).add_parent(rt1) - c.append(rec) + c.insert() + assert c.is_valid() - c.insert() - assert_true(c.is_valid()) + q = h.Query("FIND ENTITY SimpleRecordType") + rs = q.execute() + assert rs.is_valid() + assert len(rs) == 11 - q = h.Query("FIND SimpleRecordType") - rs = q.execute() - assert_true(rs.is_valid()) - assert_equal(len(rs), 11) + q = h.Query("FIND Record SimpleRecordType") + rs = q.execute() + assert rs.is_valid() + assert len(rs) == 10 - q = h.Query("FIND Record SimpleRecordType") - rs = q.execute() - assert_true(rs.is_valid()) - assert_equal(len(rs), 10) + q.putFlag("P", "0L3") + rs = q.execute() + assert rs.is_valid() + assert len(rs) == 3 - q.putFlag("P", "0L3") - rs = q.execute() - assert_true(rs.is_valid()) - assert_equal(len(rs), 3) + for i in range(3): + assert rs.get_entity_by_name("SimpleRecord" + str(i)) is not None - for i in range(3): - assert_is_not_none(rs.get_entity_by_name("SimpleRecord" + str(i))) + q.putFlag("P", "5L3") + rs = q.execute() + assert rs.is_valid() + assert len(rs) == 3 - q.putFlag("P", "5L3") - rs = q.execute() - assert_true(rs.is_valid()) - assert_equal(len(rs), 3) - - for i in range(5, 8): - assert_is_not_none(rs.get_entity_by_name("SimpleRecord" + str(i))) - - finally: - try: - c.delete() - except BaseException: - pass + for i in range(5, 8): + assert rs.get_entity_by_name("SimpleRecord" + str(i)) is not None def test_ticket_203(): - try: - - rt1 = h.RecordType(name="SimpleRecordType").add_property( - name="File", datatype=h.REFERENCE).insert() - assert_true(rt1.is_valid()) - - finally: - try: - rt1.delete() - except BaseException: - pass + rt1 = h.RecordType(name="SimpleRecordType").add_property( + name="File", datatype=h.REFERENCE).insert() + assert rt1.is_valid() def test_ticket_202(): - try: + p = h.Property(name="bla", datatype=h.TEXT).insert() + assert p.is_valid() - p = h.Property(name="bla", datatype=h.TEXT).insert() - assert_true(p.is_valid()) + rt1 = h.RecordType(name="SimpleRecordType").add_property( + p, importance=h.OBLIGATORY).insert() + assert rt1.is_valid() - rt1 = h.RecordType(name="SimpleRecordType").add_property( - p, importance=h.OBLIGATORY).insert() - assert_true(rt1.is_valid()) - - rt2 = h.RecordType(name="SimpleRecordType2").add_parent( - rt1, inheritance=h.OBLIGATORY).insert() - assert_true(rt2.is_valid()) - rt2.add_property(id=p.id, name="bla2").update() - assert_true(rt2.is_valid()) - assert_is_not_none(rt2.get_property("bla")) - assert_is_not_none(rt2.get_property("bla2")) - - finally: - try: - rt2.delete() - except BaseException: - pass - try: - rt1.delete() - except BaseException: - pass - try: - p.delete() - except BaseException: - pass + rt2 = h.RecordType(name="SimpleRecordType2").add_parent( + rt1, inheritance=h.OBLIGATORY).insert() + assert rt2.is_valid() + rt2.add_property(id=p.id, name="bla2").update() + assert rt2.is_valid() + assert rt2.get_property("bla") is not None + assert rt2.get_property("bla2") is not None def test_ticket_201(): - try: - - p1 = h.Property(name="FirstName", datatype=h.TEXT).insert() - p2 = h.Property(name="LastName", datatype=h.TEXT).insert() - assert_true(p1.is_valid()) - assert_true(p2.is_valid()) + p1 = h.Property(name="FirstName", datatype=h.TEXT).insert() + p2 = h.Property(name="LastName", datatype=h.TEXT).insert() + assert p1.is_valid() + assert p2.is_valid() - rt1 = h.RecordType(name="SimpleRecordType").add_property( - p1, importance=h.OBLIGATORY).add_property( - p2, importance=h.OBLIGATORY).insert() - assert_true(rt1.is_valid()) + rt1 = h.RecordType(name="SimpleRecordType").add_property( + p1, importance=h.OBLIGATORY).add_property( + p2, importance=h.OBLIGATORY).insert() + assert rt1.is_valid() - rt2 = h.RecordType(name="SimpleRecordType2").add_parent( - rt1, inheritance=h.OBLIGATORY).add_property( - p2, importance=h.OBLIGATORY).insert() - assert_true(rt2.is_valid()) - assert_equal(len(rt2.get_properties()), 2) - assert_is_not_none(rt2.get_property("FirstName")) - assert_is_not_none(rt2.get_property("LastName")) - - finally: - try: - rt2.delete() - except BaseException: - pass - try: - rt1.delete() - except BaseException: - pass - try: - p1.delete() - except BaseException: - pass - try: - p2.delete() - except BaseException: - pass + rt2 = h.RecordType(name="SimpleRecordType2").add_parent( + rt1, inheritance=h.OBLIGATORY).add_property( + p2, importance=h.OBLIGATORY).insert() + assert rt2.is_valid() + assert len(rt2.get_properties()) == 2 + assert rt2.get_property("FirstName") is not None + assert rt2.get_property("LastName") is not None def test_ticket_204(): RT1 = h.RecordType(name="one") RT2 = h.RecordType(name="two").add_property(RT1, name="one_and_only") - assert_equal( - RT2.__str__(), - '<RecordType name="two">\n <Property name="one_and_only" datatype="one" importance="RECOMMENDED" flag="inheritance:FIX"/>\n</RecordType>\n') - assert_equal(RT2.get_properties()[0].__str__(), - '<Property name="one_and_only" datatype="one"/>\n') - assert_equal(RT2.get_properties()[0].datatype.__str__(), - '<RecordType name="one"/>\n') + assert RT2.__str__() == '<RecordType name="two">\n <Property name="one_and_only" datatype="one" importance="RECOMMENDED" flag="inheritance:FIX"/>\n</RecordType>\n' + assert RT2.get_properties()[0].__str__() == '<Property name="one_and_only" datatype="one"/>\n' + assert RT2.get_properties()[0].datatype.__str__() == '<RecordType name="one"/>\n' def test_ticket_232(): @@ -202,22 +148,19 @@ def test_ticket_232(): # h.get_connection().retrieve(uri) c = h.Container().extend(uri).retrieve(raise_exception_on_error=False) - assert_equal(len(c), 1000) + assert len(c) == 1000 def test_ticket_216(): """Tests creation and printing of a reference Property. """ - try: - RT = RecordType(name="RT") - p = Property(name="refProperty", datatype=RT) - assert_equal(str(p), '<Property name="refProperty" datatype="RT"/>\n') + RT = RecordType(name="RT") + p = Property(name="refProperty", datatype=RT) + assert str(p) == '<Property name="refProperty" datatype="RT"/>\n' - RT = RecordType() - p = Property(name="refProperty", datatype=RT) - assert_is_not_none(str(p)) - finally: - pass + RT = RecordType() + p = Property(name="refProperty", datatype=RT) + assert str(p) is not None def test_ticket_221(): @@ -228,10 +171,7 @@ def test_ticket_221(): RT2.add_property( property=h.Property(name="test_property_with_RT1", datatype=RT1)) - assert_equal( - repr(RT2), - '<RecordType name="TestRT2">\n <Property name="test_property_with_RT1" datatype="TestRT1" importance="RECOMMENDED" flag="inheritance:FIX"/>\n</RecordType>\n' - ) + assert repr(RT2) == '<RecordType name="TestRT2">\n <Property name="test_property_with_RT1" datatype="TestRT1" importance="RECOMMENDED" flag="inheritance:FIX"/>\n</RecordType>\n' def test_ticket_238(): @@ -241,175 +181,108 @@ def test_ticket_238(): p2 = h.Property(id=-1) p3 = h.Property() c.append(p1) - assert_equal(len(c), 1) + assert len(c) == 1 c.remove(p1) - assert_equal(len(c), 0) + assert len(c) == 0 c.extend([p1, p2, p3]) - assert_equal(len(c), 3) + assert len(c) == 3 c.remove(p3) - assert_equal(len(c), 2) - assert_is_not_none(c.get_entity_by_id(-1)) - assert_is_not_none(c.get_entity_by_name("bla")) + assert len(c) == 2 + assert c.get_entity_by_id(-1) is not None + assert c.get_entity_by_name("bla") is not None def test_ticket_239(): - try: - h.configure_connection() - p = h.Property( - name="SimpleReferenceProperty", datatype=h.REFERENCE).insert() - assert_true(p.is_valid()) - - rt = h.RecordType(name="SimpleRecordType").add_property(p).insert() - assert_true(rt.is_valid()) - - rec1 = h.Record(name="SimpleRecord1").add_parent(rt) - - rec2 = h.Record(name="SimpleRecord2").add_parent(rt).add_property( - p, value="SimpleRecord1") - - c = h.Container().extend([rec1, rec2]).insert() - assert_true(c.is_valid()) - assert_true(rec1.is_valid()) - assert_true(rec2.is_valid()) - - rec4 = h.Record(name="SimpleRecord4").add_parent(rt).add_property( - p, value="SimpleRecord3") - - c = h.Container().extend([rec4]) - with raises(h.TransactionError) as te: - c.insert() - assert te.value.has_error(h.UnqualifiedPropertiesError) - assert c[0].get_property("SimpleReferenceProperty").get_errors()[ - 0].description == "Referenced entity does not exist." - - rec3 = h.Record(name="SimpleRecord3").add_parent(rt) - c = h.Container().extend([rec3, rec4]).insert() - assert_true(c.is_valid()) - assert_true(rec4.is_valid()) - assert_true(rec3.is_valid()) - - rec5 = h.Record(name="SimpleRecord5").add_parent(rt).add_property( - p, value="SimpleRecord3").insert() - assert_true(rec5.is_valid()) - assert_equal( - int(rec5.get_property("SimpleReferenceProperty").value), rec3.id) + h.configure_connection() + p = h.Property( + name="SimpleReferenceProperty", datatype=h.REFERENCE).insert() + assert p.is_valid() - finally: - try: - rec5.delete() - except BaseException: - pass - try: - rec4.delete() - except BaseException: - pass - try: - rec3.delete() - except BaseException: - pass - try: - rec2.delete() - except BaseException: - pass - try: - rec1.delete() - except BaseException: - pass - try: - rt.delete() - except BaseException: - pass - try: - p.delete() - except BaseException: - pass + rt = h.RecordType(name="SimpleRecordType").add_property(p).insert() + assert rt.is_valid() + rec1 = h.Record(name="SimpleRecord1").add_parent(rt) -def test_ticket_240(): - try: - # try: - # h.execute_query("FIND Simple*").delete() - # except: - # pass - p = h.Property(name="SimpleProperty", datatype=h.DOUBLE).insert() - assert_true(p.is_valid()) + rec2 = h.Record(name="SimpleRecord2").add_parent(rt).add_property( + p, value="SimpleRecord1") - rt = h.RecordType(name="SimpleRecordType").add_property(p).insert() - assert_true(rt.is_valid()) + c = h.Container().extend([rec1, rec2]).insert() + assert c.is_valid() + assert rec1.is_valid() + assert rec2.is_valid() - rec1 = h.Record(name="SimpleRecord1").add_parent(rt).insert() + rec4 = h.Record(name="SimpleRecord4").add_parent(rt).add_property( + p, value="SimpleRecord3") - rec2 = h.Record(name="SimpleRecord2").add_parent(rt).add_property( - p, value=2.0).insert() + c = h.Container().extend([rec4]) + with raises(h.TransactionError) as te: + c.insert() + assert te.value.has_error(h.UnqualifiedPropertiesError) + assert c[0].get_property("SimpleReferenceProperty").get_errors()[ + 0].description == "Referenced entity does not exist." - rec3 = h.Record(name="SimpleRecord3").add_parent(rt).add_property( - p, value=1.0).insert() + rec3 = h.Record(name="SimpleRecord3").add_parent(rt) + c = h.Container().extend([rec3, rec4]).insert() + assert c.is_valid() + assert rec4.is_valid() + assert rec3.is_valid() - c = h.execute_query( - "FIND Record SimpleRecordType WHICH HAS A SimpleProperty='2.0'", - unique=True) - assert_equal(c.id, rec2.id) + rec5 = h.Record(name="SimpleRecord5").add_parent(rt).add_property( + p, value="SimpleRecord3").insert() + assert rec5.is_valid() + assert int(rec5.get_property("SimpleReferenceProperty").value) == rec3.id - c = h.execute_query( - "FIND Record SimpleRecordType WHICH HAS A SimpleProperty='1.0'", - unique=True) - assert_equal(c.id, rec3.id) - c = h.execute_query( - "FIND Record SimpleRecordType WHICH HAS A SimpleProperty!='1.0'", - unique=True) - assert_equal(c.id, rec2.id) +def test_ticket_240(): + p = h.Property(name="SimpleProperty", datatype=h.DOUBLE).insert() + assert p.is_valid() - c = h.execute_query( - "FIND Record SimpleRecordType WHICH HAS A SimpleProperty!='2.0'", - unique=True) - assert_equal(c.id, rec3.id) + rt = h.RecordType(name="SimpleRecordType").add_property(p).insert() + assert rt.is_valid() - c = h.execute_query( - "FIND Record SimpleRecordType WHICH DOESN'T HAVE A SimpleProperty='1.0'" - ) - assert_equal(len(c), 2) - assert_is_not_none(c.get_entity_by_id(rec1.id)) - assert_is_not_none(c.get_entity_by_id(rec2.id)) + rec1 = h.Record(name="SimpleRecord1").add_parent(rt).insert() - finally: - try: - rec3.delete() - except BaseException: - pass - try: - rec2.delete() - except BaseException: - pass - try: - rec1.delete() - except BaseException: - pass - try: - rt.delete() - except BaseException: - pass - try: - p.delete() - except BaseException: - pass + rec2 = h.Record(name="SimpleRecord2").add_parent(rt).add_property( + p, value=2.0).insert() + rec3 = h.Record(name="SimpleRecord3").add_parent(rt).add_property( + p, value=1.0).insert() -def test_ticket_247(): - try: + c = h.execute_query( + "FIND Record SimpleRecordType WHICH HAS A SimpleProperty='2.0'", + unique=True) + assert c.id == rec2.id - p = h.Property( - name="SimpleProperty", datatype=h.DOUBLE, unit="1").insert() - assert_true(p.is_valid()) + c = h.execute_query( + "FIND Record SimpleRecordType WHICH HAS A SimpleProperty='1.0'", + unique=True) + assert c.id == rec3.id - finally: - try: - p.delete() - except BaseException: - pass + c = h.execute_query( + "FIND Record SimpleRecordType WHICH HAS A SimpleProperty!='1.0'", + unique=True) + assert c.id == rec2.id + + c = h.execute_query( + "FIND Record SimpleRecordType WHICH HAS A SimpleProperty!='2.0'", + unique=True) + assert c.id == rec3.id + + c = h.execute_query( + "FIND Record SimpleRecordType WHICH DOESN'T HAVE A SimpleProperty='1.0'" + ) + assert len(c) == 2 + assert c.get_entity_by_id(rec1.id) is not None + assert c.get_entity_by_id(rec2.id) is not None + + +def test_ticket_247(): + p = h.Property( + name="SimpleProperty", datatype=h.DOUBLE, unit="1").insert() + assert p.is_valid() def test_ticket_243(): @@ -431,92 +304,57 @@ def test_ticket_256(): path="testfiles/testfilewithcolon:initsname.dat", file="test.dat") file_.insert() - assert_true(file_.is_valid()) + assert file_.is_valid() ret = h.execute_query( "FIND FILE WHICH IS STORED AT testfiles/testfilewithcolon:initsname.dat", unique=True) - assert_equal(ret.id, file_.id) + assert ret.id == file_.id ret = h.execute_query( "FIND FILE WHICH IS STORED AT *colon:initsname.dat", unique=True) - assert_equal(ret.id, file_.id) + assert ret.id == file_.id finally: try: import os os.remove("test.dat") except BaseException: pass - try: - file_.delete() - except BaseException: - pass def test_ticket_228(): - try: - p1 = h.Property(name="SimpleProperty1", datatype=h.DOUBLE).insert() - p2 = h.Property(name="SimpleProperty_2", datatype=h.DOUBLE).insert() - p3 = h.Property(name="SimpleProperty.3", datatype=h.DOUBLE).insert() - assert_true(p1.is_valid()) - assert_true(p2.is_valid()) - assert_true(p3.is_valid()) - - assert_equal(h.execute_query("FIND *_*", unique=True).id, p2.id) - assert_equal( - len(h.execute_query("FIND *.*", raise_exception_on_error=False)), - 0) - assert_equal(h.execute_query("FIND '*.*'", unique=True).id, p3.id) - - p4 = h.Property(name="^.^", datatype=h.DOUBLE).insert() - assert_true(p4.is_valid()) - assert_equal(len(h.execute_query("FIND ^.^")), 0) - assert_equal(h.execute_query("FIND '^.^'", unique=True).id, p4.id) + p1 = h.Property(name="SimpleProperty1", datatype=h.DOUBLE).insert() + p2 = h.Property(name="SimpleProperty_2", datatype=h.DOUBLE).insert() + p3 = h.Property(name="SimpleProperty.3", datatype=h.DOUBLE).insert() + assert p1.is_valid() + assert p2.is_valid() + assert p3.is_valid() - finally: - try: - p4.delete() - except BaseException: - pass - try: - p3.delete() - except BaseException: - pass - try: - p2.delete() - except BaseException: - pass - try: - p1.delete() - except BaseException: - pass + assert h.execute_query("FIND ENTITY *_*", unique=True).id == p2.id + assert len(h.execute_query("FIND ENTITY *.*", raise_exception_on_error=False)) == 0 + assert h.execute_query("FIND ENTITY '*.*'", unique=True).id == p3.id + p4 = h.Property(name="^.^", datatype=h.DOUBLE).insert() + assert p4.is_valid() + assert len(h.execute_query("FIND ENTITY ^.^")) == 0 + assert h.execute_query("FIND ENTITY '^.^'", unique=True).id == p4.id -def test_ticket_231(): - try: - p1 = h.Property(name="Publication", datatype=h.TEXT).insert() - assert_equal( - h.execute_query("FIND publication", unique=True).id, p1.id) - assert_equal(h.Property("publication").retrieve().id, p1.id) - assert_equal(h.Entity("publication").retrieve().id, p1.id) +def test_ticket_231(): + p1 = h.Property(name="Publication", datatype=h.TEXT).insert() - finally: - try: - p1.delete() - except BaseException: - pass + assert h.execute_query("FIND ENTITY publication", unique=True).id == p1.id + assert h.Property("publication").retrieve().id == p1.id + assert h.Entity("publication").retrieve().id == p1.id def test_ticket_241(): q = h.Query("FIND RECORD WHICH HAS been created by some*") q.execute(raise_exception_on_error=False) - assert_is_not_none(q.messages["Info"]) - assert_equal( - q.messages["Info"], - ("Regular expression and like patterns are not implemented for transactor names yet.", - None)) + assert q.messages["Info"] is not None + assert q.messages["Info"] == ( + "Regular expression and like patterns are not implemented for transactor names yet.", None) def test_ticket_233(): diff --git a/tests/test_unit.py b/tests/test_unit.py index e02ccdc73534bc838c0b6670e125149da6224e93..fb2a403adc9e5f1bd204f40cbd2d5d248cf3827e 100644 --- a/tests/test_unit.py +++ b/tests/test_unit.py @@ -27,388 +27,282 @@ """ from __future__ import unicode_literals import caosdb as h -from nose.tools import assert_true, assert_equal # @UnresolvedImport def setup_module(): try: - h.execute_query("FIND Simple*").delete() + h.execute_query("FIND ENTITY").delete() except BaseException: pass def teardown_module(): - try: - h.execute_query("FIND Simple*").delete() - except BaseException: - pass + setup_module() + + +def teardown_function(function): + setup_module() def test_km_1(): # insert with base unit and search for base unit and derived unit - try: + p = h.Property( + name="SimpleDoubleProperty", + datatype=h.DOUBLE, + unit="m") + p.insert() + assert p.is_valid() + + rt = h.RecordType(name="SimpleRecordType").add_property(p, value=3140) + rt.insert() + + rt2 = h.execute_query("FIND ENTITY SimpleRecordType", True) + assert rt2.is_valid() + assert rt2.id, rt.id + assert rt2.get_property("SimpleDoubleProperty").unit == "m" + assert rt2.get_property("SimpleDoubleProperty").value == 3140.0 + + rt2 = h.execute_query( + "FIND ENTITY SimpleRecordType.SimpleDoubleProperty='3140.0m'", True) + assert rt2.is_valid() + assert rt2.id, rt.id - p = h.Property( - name="SimpleDoubleProperty", - datatype=h.DOUBLE, - unit="m") - p.insert() - assert_true(p.is_valid()) - - rt = h.RecordType(name="SimpleRecordType").add_property(p, value=3140) - rt.insert() - - rt2 = h.execute_query("FIND SimpleRecordType", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - assert_equal(rt2.get_property("SimpleDoubleProperty").unit, "m") - assert_equal(rt2.get_property("SimpleDoubleProperty").value, 3140.0) - - rt2 = h.execute_query( - "FIND SimpleRecordType.SimpleDoubleProperty='3140.0m'", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - - rt2 = h.execute_query( - "FIND SimpleRecordType.SimpleDoubleProperty='3140m'", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - - rt2 = h.execute_query( - "FIND SimpleRecordType.SimpleDoubleProperty='3.14km'", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - - finally: - try: - rt.delete() - except BaseException: - pass - try: - p.delete() - except BaseException: - pass + rt2 = h.execute_query( + "FIND ENTITY SimpleRecordType.SimpleDoubleProperty='3140m'", True) + assert rt2.is_valid() + assert rt2.id, rt.id + + rt2 = h.execute_query( + "FIND ENTITY SimpleRecordType.SimpleDoubleProperty='3.14km'", True) + assert rt2.is_valid() + assert rt2.id, rt.id def test_km_2(): # insert with derived unit and search for base unit and derived unit - try: + p = h.Property( + name="SimpleDoubleProperty", + datatype="DOUBLE", + unit="km") + p.insert() + assert p.is_valid() + + rt = h.RecordType(name="SimpleRecordType").add_property(p, value=3.14) + rt.insert() + + rt2 = h.execute_query( + "FIND ENTITY SimpleRecordType.SimpleDoubleProperty='3.14km'", True) + assert rt2.is_valid() + assert rt2.id, rt.id + + rt2 = h.execute_query( + "FIND ENTITY SimpleRecordType.SimpleDoubleProperty='3140.0m'", True) + assert rt2.is_valid() + assert rt2.id, rt.id - p = h.Property( - name="SimpleDoubleProperty", - datatype="DOUBLE", - unit="km") - p.insert() - assert_true(p.is_valid()) - - rt = h.RecordType(name="SimpleRecordType").add_property(p, value=3.14) - rt.insert() - - rt2 = h.execute_query( - "FIND SimpleRecordType.SimpleDoubleProperty='3.14km'", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - - rt2 = h.execute_query( - "FIND SimpleRecordType.SimpleDoubleProperty='3140.0m'", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - - rt2 = h.execute_query( - "FIND SimpleRecordType.SimpleDoubleProperty='3140m'", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - - finally: - try: - rt.delete() - except BaseException: - pass - try: - p.delete() - except BaseException: - pass + rt2 = h.execute_query( + "FIND ENTITY SimpleRecordType.SimpleDoubleProperty='3140m'", True) + assert rt2.is_valid() + assert rt2.id, rt.id def test_celsius_1(): # insert with base unit and search for base unit and derived unit - try: - p = h.Property( - name="SimpleDoubleProperty", - datatype=h.DOUBLE, - unit="K") - p.insert() - assert_true(p.is_valid()) - - rt = h.RecordType(name="SimpleRecordType").add_property(p, value=0) - rt.insert() - - rt2 = h.execute_query("FIND SimpleRecordType", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - assert_equal(rt2.get_property("SimpleDoubleProperty").unit, "K") - assert_equal(rt2.get_property("SimpleDoubleProperty").value, 0.0) - - rt2 = h.execute_query( - "FIND SimpleRecordType.SimpleDoubleProperty='0.0K'", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - - rt2 = h.execute_query( - "FIND SimpleRecordType.SimpleDoubleProperty='0K'", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - - rt2 = h.execute_query( - "FIND SimpleRecordType.SimpleDoubleProperty='-273.15°C'", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - - finally: - try: - rt.delete() - except BaseException: - pass - try: - p.delete() - except BaseException: - pass + p = h.Property( + name="SimpleDoubleProperty", + datatype=h.DOUBLE, + unit="K") + p.insert() + assert p.is_valid() + + rt = h.RecordType(name="SimpleRecordType").add_property(p, value=0) + rt.insert() + + rt2 = h.execute_query("FIND ENTITY SimpleRecordType", True) + assert rt2.is_valid() + assert rt2.id, rt.id + assert rt2.get_property("SimpleDoubleProperty").unit == "K" + assert rt2.get_property("SimpleDoubleProperty").value == 0.0 + + rt2 = h.execute_query( + "FIND ENTITY SimpleRecordType.SimpleDoubleProperty='0.0K'", True) + assert rt2.is_valid() + assert rt2.id, rt.id + + rt2 = h.execute_query( + "FIND ENTITY SimpleRecordType.SimpleDoubleProperty='0K'", True) + assert rt2.is_valid() + assert rt2.id, rt.id + + rt2 = h.execute_query( + "FIND ENTITY SimpleRecordType.SimpleDoubleProperty='-273.15°C'", True) + assert rt2.is_valid() + assert rt2.id, rt.id def test_celsius_2(): # insert with derived unit and search for base unit and derived unit - try: - p = h.Property( - name="SimpleDoubleProperty", - datatype="DOUBLE", - unit="°C") - p.insert() - assert_true(p.is_valid()) - - rt = h.RecordType(name="SimpleRecordType").add_property(p, value=0) - rt.insert() - - rt2 = h.execute_query( - "FIND SimpleRecordType.SimpleDoubleProperty='0.0°C'", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - - rt2 = h.execute_query( - "FIND SimpleRecordType.SimpleDoubleProperty='0°C'", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - - rt2 = h.execute_query( - "FIND SimpleRecordType.SimpleDoubleProperty='273.15K'", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - - finally: - try: - rt.delete() - except BaseException: - pass - try: - p.delete() - except BaseException: - pass + p = h.Property( + name="SimpleDoubleProperty", + datatype="DOUBLE", + unit="°C") + p.insert() + assert p.is_valid() + + rt = h.RecordType(name="SimpleRecordType").add_property(p, value=0) + rt.insert() + + rt2 = h.execute_query( + "FIND ENTITY SimpleRecordType.SimpleDoubleProperty='0.0°C'", True) + assert rt2.is_valid() + assert rt2.id, rt.id + + rt2 = h.execute_query( + "FIND ENTITY SimpleRecordType.SimpleDoubleProperty='0°C'", True) + assert rt2.is_valid() + assert rt2.id, rt.id + + rt2 = h.execute_query( + "FIND ENTITY SimpleRecordType.SimpleDoubleProperty='273.15K'", True) + assert rt2.is_valid() + assert rt2.id, rt.id def test_int(): # insert with base unit and search for base unit and derived unit - try: - p = h.Property( - name="SimpleIntegerProperty", - datatype=h.INTEGER, - unit="m") - p.insert() - assert_true(p.is_valid()) - - rt = h.RecordType(name="SimpleRecordType").add_property(p, value=3140) - rt.insert() - - rt2 = h.execute_query("FIND SimpleRecordType", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - assert_equal(rt2.get_property("SimpleIntegerProperty").unit, "m") - assert_equal(rt2.get_property("SimpleIntegerProperty").value, 3140) - - rt2 = h.execute_query( - "FIND SimpleRecordType.SimpleIntegerProperty='3140m'", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - - rt2 = h.execute_query( - "FIND SimpleRecordType.SimpleIntegerProperty='3140.0m'", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - - rt2 = h.execute_query( - "FIND SimpleRecordType.SimpleIntegerProperty='3.14km'", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - - rt2 = h.execute_query( - "FIND SimpleRecordType.SimpleIntegerProperty='314000cm'", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - - rt2 = h.execute_query( - "FIND SimpleRecordType.SimpleIntegerProperty='314000.0cm'", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - - finally: - try: - rt.delete() - except BaseException: - pass - try: - p.delete() - except BaseException: - pass + p = h.Property( + name="SimpleIntegerProperty", + datatype=h.INTEGER, + unit="m") + p.insert() + assert p.is_valid() + + rt = h.RecordType(name="SimpleRecordType").add_property(p, value=3140) + rt.insert() + + rt2 = h.execute_query("FIND ENTITY SimpleRecordType", True) + assert rt2.is_valid() + assert rt2.id, rt.id + assert rt2.get_property("SimpleIntegerProperty").unit == "m" + assert rt2.get_property("SimpleIntegerProperty").value == 3140 + + rt2 = h.execute_query( + "FIND ENTITY SimpleRecordType.SimpleIntegerProperty='3140m'", True) + assert rt2.is_valid() + assert rt2.id, rt.id + + rt2 = h.execute_query( + "FIND ENTITY SimpleRecordType.SimpleIntegerProperty='3140.0m'", True) + assert rt2.is_valid() + assert rt2.id, rt.id + + rt2 = h.execute_query( + "FIND ENTITY SimpleRecordType.SimpleIntegerProperty='3.14km'", True) + assert rt2.is_valid() + assert rt2.id, rt.id + + rt2 = h.execute_query( + "FIND ENTITY SimpleRecordType.SimpleIntegerProperty='314000cm'", True) + assert rt2.is_valid() + assert rt2.id, rt.id + + rt2 = h.execute_query( + "FIND ENTITY SimpleRecordType.SimpleIntegerProperty='314000.0cm'", True) + assert rt2.is_valid() + assert rt2.id, rt.id def test_unknown_unit(): # insert unknown unit - try: - p = h.Property( - name="SimpleIntegerProperty", - datatype=h.INTEGER, - unit="my_unit") - p.insert() - assert_true(p.is_valid()) - assert_equal(len(p.get_warnings()), 1) - assert_equal( - p.get_warnings()[0].description, - "Unknown unit. Values with this unit cannot be converted to other units when used in search queries.") - - rt = h.RecordType( - name="SimpleRecordType").add_property( - p, value="3140") - rt.insert() - - rt2 = h.execute_query("FIND SimpleRecordType", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - assert_equal( - rt2.get_property("SimpleIntegerProperty").unit, - "my_unit") - assert_equal(rt2.get_property("SimpleIntegerProperty").value, 3140) - - rt2 = h.execute_query( - "FIND SimpleRecordType.SimpleIntegerProperty='3140'", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - - rt2 = h.execute_query( - "FIND SimpleRecordType.SimpleIntegerProperty='3140my_unit'", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - - rt2 = h.execute_query( - "FIND SimpleRecordType.SimpleIntegerProperty='3140.0my_unit'", True) - assert_true(rt2.is_valid()) - assert_true(rt2.id, rt.id) - - finally: - try: - rt.delete() - except BaseException: - pass - try: - p.delete() - except BaseException: - pass + p = h.Property( + name="SimpleIntegerProperty", + datatype=h.INTEGER, + unit="my_unit") + p.insert() + assert p.is_valid() + assert len(p.get_warnings()) == 1 + assert p.get_warnings()[ + 0].description == "Unknown unit. Values with this unit cannot be converted to other units when used in search queries." + + rt = h.RecordType( + name="SimpleRecordType").add_property( + p, value="3140") + rt.insert() + + rt2 = h.execute_query("FIND ENTITY SimpleRecordType", True) + assert rt2.is_valid() + assert rt2.id, rt.id + assert rt2.get_property("SimpleIntegerProperty").unit == "my_unit" + assert rt2.get_property("SimpleIntegerProperty").value == 3140 + + rt2 = h.execute_query( + "FIND ENTITY SimpleRecordType.SimpleIntegerProperty='3140'", True) + assert rt2.is_valid() + assert rt2.id, rt.id + + rt2 = h.execute_query( + "FIND ENTITY SimpleRecordType.SimpleIntegerProperty='3140my_unit'", True) + assert rt2.is_valid() + assert rt2.id, rt.id + + rt2 = h.execute_query( + "FIND ENTITY SimpleRecordType.SimpleIntegerProperty='3140.0my_unit'", True) + assert rt2.is_valid() + assert rt2.id, rt.id def test_greatest(): # insert unknown unit - try: - try: - h.execute_query("FIND Simple*").delete() - except BaseException: - pass - p = h.Property( - name="SimpleDoubleProperty", - datatype=h.DOUBLE, - unit="m") - p.insert() - - rt = h.RecordType(name="SimpleRecordType").add_property(p) - rt.insert() - - rec1 = h.Record(name="SimpleRecord1").add_parent( - rt).add_property(p, unit="km", value="1").insert() - rec2 = h.Record(name="SimpleRecord2").add_parent( - rt).add_property(p, unit="km", value="2").insert() - rec3 = h.Record( - name="SimpleRecord3").add_parent(rt).add_property( - p, unit="m", value="200").insert() - - assert_true(rec1.is_valid()) - assert_true(rec2.is_valid()) - assert_true(rec3.is_valid()) - - c = h.execute_query( - "FIND SimpleRecord* WHICH HAS THE GREATEST SimpleDoubleProperty", - unique=True) - assert_equal(c.id, rec2.id) - - c = h.execute_query( - "FIND SimpleRecord* WHICH HAS THE SMALLEST SimpleDoubleProperty", - unique=True) - assert_equal(c.id, rec3.id) - - rec4 = h.Record( - name="SimpleRecord4").add_parent(rt).add_property( - p, unit="bla", value="150").insert() - assert_true(rec4.is_valid()) - - c = h.execute_query( - "FIND SimpleRecord* WHICH HAS THE GREATEST SimpleDoubleProperty") - assert_equal(c[0].id, rec3.id) - assert_equal( - c.get_warnings()[0].description, - "The filter POV(SimpleDoubleProperty,NULL,NULL) with the aggregate function 'max' could not match the values against each other with their units. The values had different base units. Only their numric value had been taken into account.") - - c = h.execute_query( - "FIND SimpleRecord* WHICH HAS THE SMALLEST SimpleDoubleProperty", - unique=True) - assert_equal(c.id, rec1.id) - assert_equal( - c.get_warnings()[0].description, - "The filter POV(SimpleDoubleProperty,NULL,NULL) with the aggregate function 'min' could not match the values against each other with their units. The values had different base units. Only their numric value had been taken into account.") - - finally: - try: - rec4.delete() - except BaseException: - pass - try: - rec3.delete() - except BaseException: - pass - try: - rec2.delete() - except BaseException: - pass - try: - rec1.delete() - except BaseException: - pass - try: - rt.delete() - except BaseException: - pass - try: - p.delete() - except BaseException: - pass + p = h.Property( + name="SimpleDoubleProperty", + datatype=h.DOUBLE, + unit="m") + p.insert() + + rt = h.RecordType(name="SimpleRecordType").add_property(p) + rt.insert() + + rec1 = h.Record(name="SimpleRecord1").add_parent( + rt).add_property(p, unit="km", value="1").insert() + rec2 = h.Record(name="SimpleRecord2").add_parent( + rt).add_property(p, unit="km", value="2").insert() + rec3 = h.Record( + name="SimpleRecord3").add_parent(rt).add_property( + p, unit="m", value="200").insert() + + assert rec1.is_valid() + assert rec2.is_valid() + assert rec3.is_valid() + + c = h.execute_query( + "FIND ENTITY SimpleRecord* WHICH HAS THE GREATEST SimpleDoubleProperty", + unique=True) + assert c.id == rec2.id + + c = h.execute_query( + "FIND ENTITY SimpleRecord* WHICH HAS THE SMALLEST SimpleDoubleProperty", + unique=True) + assert c.id == rec3.id + + rec4 = h.Record( + name="SimpleRecord4").add_parent(rt).add_property( + p, unit="bla", value="150").insert() + assert rec4.is_valid() + + c = h.execute_query( + "FIND ENTITY SimpleRecord* WHICH HAS THE GREATEST SimpleDoubleProperty") + assert c[0].id == rec3.id + assert c.get_warnings()[0].description, "The filter POV(SimpleDoubleProperty,NULL == NULL) with the aggregate function 'max' could not match the values against each other with their units. The values had different base units. Only their numric value had been taken into account." + + c = h.execute_query( + "FIND ENTITY SimpleRecord* WHICH HAS THE SMALLEST SimpleDoubleProperty", + unique=True) + assert c.id == rec1.id + assert c.get_warnings()[0].description, "The filter POV(SimpleDoubleProperty,NULL == NULL) with the aggregate function 'min' could not match the values against each other with their units. The values had different base units. Only their numric value had been taken into account." diff --git a/tests/test_version.py b/tests/test_version.py index 4d19aaae7d90c808b891042cc78484fba85bddcb..cedd710f16575dc530b2b8d0708cffc1681523e6 100644 --- a/tests/test_version.py +++ b/tests/test_version.py @@ -26,7 +26,7 @@ import caosdb as c def setup_function(function): - d = c.execute_query("FIND Test*") + d = c.execute_query("FIND ENTITY Test*") if len(d) > 0: d.delete() @@ -116,9 +116,9 @@ def test_update_parent(): third_version = rt.version # now retrieve and look again - assert c.execute_query("FIND TestRTParent1", unique=True).id == par1.id - assert len(c.execute_query("FIND TestRTParent2")) == 2 - assert c.execute_query("FIND TestRTChild", unique=True).id == rt.id + assert c.execute_query("FIND ENTITY TestRTParent1", unique=True).id == par1.id + assert len(c.execute_query("FIND ENTITY TestRTParent2")) == 2 + assert c.execute_query("FIND ENTITY TestRTChild", unique=True).id == rt.id rt_head = c.Container().retrieve( query=str( @@ -533,7 +533,7 @@ def test_reference_version_head(): id=str(versioned_rec.id), ver=version) test_rec = c.execute_query( - "FIND TestRec2 WHICH HAS A TestReferencedObject", unique=True) + "FIND ENTITY TestRec2 WHICH HAS A TestReferencedObject", unique=True) assert test_rec.get_property(ref_rt).value == "{id}@{ver}".format( id=str(versioned_rec.id), ver=version) @@ -546,7 +546,7 @@ def test_reference_version_head(): id=str(versioned_rec.id), ver=old_head), "after update still old head" test_rec = c.execute_query( - "FIND TestRec2 WHICH HAS A TestReferencedObject", unique=True) + "FIND ENTITY TestRec2 WHICH HAS A TestReferencedObject", unique=True) assert test_rec.get_property(ref_rt).value == "{id}@{ver}".format( id=str(versioned_rec.id), ver=old_head), "after query old head" @@ -663,7 +663,7 @@ def test_reference_version_old(): id=str(versioned_rec.id), ver=old_head) test_rec = c.execute_query( - "FIND TestRec2 WHICH HAS A TestReferencedObject", unique=True) + "FIND ENTITY TestRec2 WHICH HAS A TestReferencedObject", unique=True) assert test_rec.get_property(ref_rt).value == "{id}@{ver}".format( id=str(versioned_rec.id), ver=old_head) @@ -680,7 +680,7 @@ def test_reference_no_version(): assert rec.get_property(ref_rt).value == versioned_rec.id test_rec = c.execute_query( - "FIND TestRec2 WHICH HAS A TestReferencedObject", unique=True) + "FIND ENTITY TestRec2 WHICH HAS A TestReferencedObject", unique=True) assert test_rec.get_property(ref_rt).value == versioned_rec.id @@ -714,7 +714,7 @@ def test_reference_head_minus_in_separate_container(): str(rec1.id) + "@HEAD~2"]) rec2.insert() - test_rec = c.execute_query("FIND TestRecord2", unique=True) + test_rec = c.execute_query("FIND ENTITY TestRecord2", unique=True) assert test_rec.get_property("TestRT").value == [rec1.id, str(rec1.id) + "@" + v3, str(rec1.id) + "@" + v2, @@ -725,7 +725,7 @@ def test_properties_no_version(): c.Property("TestProperty", datatype=c.TEXT).insert() c.RecordType("TestRT").add_property("TestProperty").insert() - rt = c.execute_query("FIND TestRT", unique=True) + rt = c.execute_query("FIND ENTITY TestRT", unique=True) p = rt.get_property("TestProperty") assert p.version is None diff --git a/tox.ini b/tox.ini index c86b7e505e1cce056b9e20faeba993c1511d8667..9b25c55a6044d83d1d7eaec23b9e1d17d7e54396 100644 --- a/tox.ini +++ b/tox.ini @@ -1,10 +1,13 @@ [tox] -envlist=py38, py39, py310 +envlist=py37, py38, py39, py310, py311 skip_missing_interpreters = true [pycodestyle] max_line_length = 100 +[flake8] +max-line-length=100 + [testenv] setenv = PASSWORD_STORE_DIR = {env:HOME}/.password-store passenv = PYCAOSDBINI