diff --git a/.docker/Dockerfile b/.docker/Dockerfile index 14a4f121954591a255cbb32301f3bad748771f74..72500018a68b2495f728080cdcfaf6e895d49e5c 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -8,6 +8,8 @@ RUN apt-get update && \ python3-pip \ tox \ -y +ARG PYLIB +RUN echo "PYLIB=${PYLIB}" COPY .docker/wait-for-it.sh /wait-for-it.sh ADD https://gitlab.indiscale.com/api/v4/projects/97/repository/commits/${PYLIB} \ pylib_version.json diff --git a/tests/test_administration.py b/tests/test_administration.py index 6187da465d19db729fbdba9c8e50c51a15ab7b28..a6f44bae4577789617ee16e69ed53086ebf90ae3 100644 --- a/tests/test_administration.py +++ b/tests/test_administration.py @@ -30,8 +30,6 @@ from caosdb import administration as admin, Info, get_config from caosdb.connection.connection import configure_connection, get_connection from caosdb.exceptions import (HTTPClientError, HTTPForbiddenError, LoginFailedError, HTTPResourceNotFoundError) -from nose.tools import (assert_equal, assert_is_not_none, assert_raises, - assert_true) from pytest import raises test_role = "test_role" @@ -118,20 +116,17 @@ def test_insert_role_failure_name_duplicates(): assert Info().user_info.name == get_config().get("Connection", "username") assert Info().user_info.roles == ["administration"] test_insert_role_success() - with assert_raises(HTTPClientError) as cm: + with raises(HTTPClientError) as cm: admin._insert_role(name=test_role, description=test_role_desc) - assert_equal( - cm.exception.msg, - "Role name is already in use. Choose a different name.") + assert cm.value.msg == "Role name is already in use. Choose a different name." def test_update_role_success(): test_insert_role_success() - assert_is_not_none( - admin._update_role( - name=test_role, - description=test_role_desc + - "asdf")) + assert admin._update_role( + name=test_role, + description=test_role_desc + + "asdf") is not None def test_update_role_failure_permissions(): @@ -150,7 +145,7 @@ def test_update_role_failure_non_existing(): def test_delete_role_success(): test_insert_role_success() - assert_true(admin._delete_role(name=test_role)) + assert admin._delete_role(name=test_role) def test_delete_role_failure_permissions(): @@ -170,7 +165,7 @@ def test_delete_role_failure_non_existing(): def test_retrieve_role_success(): test_insert_role_success() r = admin._retrieve_role(test_role) - assert_is_not_none(r) + assert r is not None def test_retrieve_role_failure_permission(): @@ -189,13 +184,12 @@ def test_retrieve_role_failure_non_existing(): def test_set_permissions_success(): test_insert_role_success() - assert_true( - admin._set_permissions( - role=test_role, - permission_rules=[ - admin.PermissionRule( - "Grant", - "BLA:BLA:BLA")])) + assert admin._set_permissions( + role=test_role, + permission_rules=[ + admin.PermissionRule( + "Grant", + "BLA:BLA:BLA")]) def test_set_permissions_failure_permissions(): @@ -221,8 +215,8 @@ def test_set_permissions_failure_non_existing(): def test_get_permissions_success(): test_set_permissions_success() r = admin._get_permissions(role=test_role) - assert_equal({admin.PermissionRule("Grant", "BLA:BLA:BLA")}, r) - assert_is_not_none(r) + assert {admin.PermissionRule("Grant", "BLA:BLA:BLA")} == r + assert r is not None def test_get_permissions_failure_permissions(): @@ -242,7 +236,7 @@ def test_get_permissions_failure_non_existing(): def test_get_roles_success(): test_insert_role_success() r = admin._get_roles(username=test_user) - assert_is_not_none(r) + assert r is not None return r @@ -265,17 +259,17 @@ def test_set_roles_success(): roles_old = test_get_roles_success() roles = {test_role} roles.union(roles_old) - assert_is_not_none(admin._set_roles(username=test_user, roles=roles_old)) - assert_is_not_none(admin._set_roles(username=test_user, roles=roles)) - assert_is_not_none(admin._set_roles(username=test_user, roles=roles_old)) + assert admin._set_roles(username=test_user, roles=roles_old) is not None + assert admin._set_roles(username=test_user, roles=roles) is not None + assert admin._set_roles(username=test_user, roles=roles_old) is not None def test_set_roles_success_with_warning(): test_insert_role_success() roles = {test_role} r = admin._set_roles(username=test_user, roles=roles) - assert_is_not_none(r) - assert_is_not_none(admin._set_roles(username=test_user, roles=[])) + assert r is not None + assert admin._set_roles(username=test_user, roles=[]) is not None def test_set_roles_failure_permissions(): @@ -290,9 +284,9 @@ def test_set_roles_failure_permissions(): def test_set_roles_failure_non_existing_role(): roles = {"non-existing-role"} - with assert_raises(HTTPClientError) as cm: + with raises(HTTPClientError) as cm: admin._set_roles(username=test_user, roles=roles) - assert_equal(cm.exception.msg, "Role does not exist.") + assert cm.value.msg == "Role does not exist." def test_set_roles_failure_non_existing_user(): @@ -312,6 +306,15 @@ def test_insert_user_success(): entity=None) +def test_insert_user_failure_password_invalid(): + with raises(HTTPClientError) as cm: + admin._insert_user( + name=test_user + "2", + password="1234") + assert cm.value.status == 400 + assert cm.value.msg[:70] == "The password does not comply with the current policies for passwords: " + + def test_insert_user_failure_permissions(): switch_to_normal_user() with raises(HTTPForbiddenError) as cm: @@ -326,14 +329,14 @@ def test_insert_user_failure_permissions(): def test_insert_user_failure_name_in_use(): test_insert_user_success() - with assert_raises(HTTPClientError) as cm: + with raises(HTTPClientError) as cm: test_insert_user_success() - assert_equal(cm.exception.msg, "User name is already in use.") + assert cm.value.msg == "This user name is already in use. Please choose another one." def test_delete_user_success(): test_insert_user_success() - assert_is_not_none(admin._delete_user(name=test_user + "2")) + assert admin._delete_user(name=test_user + "2") is not None def test_delete_user_failure_permissions(): @@ -351,13 +354,12 @@ def test_delete_user_failure_non_existing(): def test_update_user_success_status(): - assert_is_not_none( - admin._insert_user( - name=test_user + "2", - password="secret1P!", - status="INACTIVE", - email="email@example.com", - entity=None)) + assert admin._insert_user( + name=test_user + "2", + password="secret1P!", + status="INACTIVE", + email="email@example.com", + entity=None) is not None admin._update_user( realm=None, name=test_user + "2", @@ -368,13 +370,12 @@ def test_update_user_success_status(): def test_update_user_success_email(): - assert_is_not_none( - admin._insert_user( - name=test_user + "2", - password="secret1P!", - status="ACTIVE", - email="email@example.com", - entity=None)) + assert admin._insert_user( + name=test_user + "2", + password="secret1P!", + status="ACTIVE", + email="email@example.com", + entity=None) is not None admin._update_user( realm=None, name=test_user + "2", @@ -385,25 +386,23 @@ def test_update_user_success_email(): def test_update_user_success_entity(): - assert_is_not_none( - admin._insert_user( - name=test_user + "2", - password="secret1P!", - status="ACTIVE", - email="email@example.com", - entity=None)) + assert admin._insert_user( + name=test_user + "2", + password="secret1P!", + status="ACTIVE", + email="email@example.com", + entity=None) is not None admin._update_user(realm=None, name=test_user + "2", password=None, status=None, email=None, entity="21") def test_update_user_success_password(): - assert_is_not_none( - admin._insert_user( - name=test_user + "2", - password="secret1P!", - status="ACTIVE", - email="email@example.com", - entity=None)) + assert admin._insert_user( + name=test_user + "2", + password="secret1P!", + status="ACTIVE", + email="email@example.com", + entity=None) is not None admin._update_user( realm=None, name=test_user + "2", @@ -507,7 +506,7 @@ def test_update_user_failure_non_existing_entity(): def test_retrieve_user_success(): test_insert_user_success() - assert_is_not_none(admin._retrieve_user(realm=None, name=test_user + "2")) + assert admin._retrieve_user(realm=None, name=test_user + "2") is not None def test_retrieve_user_failure_permissions(): @@ -525,14 +524,13 @@ def test_retrieve_user_failure_non_existing(): def test_login_with_inactive_user_failure(): - assert_is_not_none( - admin._insert_user( - name=test_user + "2", - password="secret1P!", - status="INACTIVE", - email="email@example.com", - entity=None)) + assert admin._insert_user( + name=test_user + "2", + password="secret1P!", + status="INACTIVE", + email="email@example.com", + entity=None) is not None configure_connection(username=test_user + "2", password="secret1P!", password_method="plain") - with assert_raises(LoginFailedError): + with raises(LoginFailedError): get_connection()._login() diff --git a/tests/test_issues_server.py b/tests/test_issues_server.py index df1e57f3ddf5fc39e96ee986d7a51ae6180a905c..af88e7440e4f7704d4569d167170d71bb354db9d 100644 --- a/tests/test_issues_server.py +++ b/tests/test_issues_server.py @@ -28,7 +28,7 @@ import time import caosdb as db from caosdb import administration as admin import pytest -from caosdb.exceptions import TransactionError +from caosdb.exceptions import TransactionError, HTTPClientError CURATOR_ROLE = "curator" @@ -857,8 +857,10 @@ def test_145(): https://gitlab.com/caosdb/caosdb-server/-/issues/145 """ db.Property("TestProp", datatype=db.TEXT).insert() - db.Property("TestPropInt", datatype=db.INTEGER).add_parent("TestProp").insert() - db.Property("TestPropDouble", datatype=db.DOUBLE).add_parent("TestProp").insert() + db.Property("TestPropInt", datatype=db.INTEGER).add_parent( + "TestProp").insert() + db.Property("TestPropDouble", datatype=db.DOUBLE).add_parent( + "TestProp").insert() db.RecordType("TestRT").insert() rec1 = db.Record("TestRec1").add_parent("TestRT").add_property( @@ -870,17 +872,25 @@ def test_145(): assert rec2.get_property("TestPropDouble").value == 20_000_000_000 assert isinstance(rec2.get_property("TestPropDouble").value, float) - assert db.execute_query("FIND TestRT WITH TestProp = 1000000000", unique=True).id == rec1.id - assert db.execute_query("FIND TestRT WITH TestProp = 1000000000.0", unique=True).id == rec1.id + assert db.execute_query( + "FIND TestRT WITH TestProp = 1000000000", unique=True).id == rec1.id + assert db.execute_query( + "FIND TestRT WITH TestProp = 1000000000.0", unique=True).id == rec1.id - assert db.execute_query("FIND TestRT WITH TestProp > 1000000000", unique=True).id == rec2.id - assert db.execute_query("FIND TestRT WITH TestProp > 1000000000.0", unique=True).id == rec2.id + assert db.execute_query( + "FIND TestRT WITH TestProp > 1000000000", unique=True).id == rec2.id + assert db.execute_query( + "FIND TestRT WITH TestProp > 1000000000.0", unique=True).id == rec2.id - assert db.execute_query("FIND TestRT WITH TestProp = 20000000000", unique=True).id == rec2.id - assert db.execute_query("FIND TestRT WITH TestProp = 20000000000.0", unique=True).id == rec2.id + assert db.execute_query( + "FIND TestRT WITH TestProp = 20000000000", unique=True).id == rec2.id + assert db.execute_query( + "FIND TestRT WITH TestProp = 20000000000.0", unique=True).id == rec2.id - assert db.execute_query("FIND TestRT WITH TestProp < 20000000000", unique=True).id == rec1.id - assert db.execute_query("FIND TestRT WITH TestProp < 20000000000.0", unique=True).id == rec1.id + assert db.execute_query( + "FIND TestRT WITH TestProp < 20000000000", unique=True).id == rec1.id + assert db.execute_query( + "FIND TestRT WITH TestProp < 20000000000.0", unique=True).id == rec1.id assert db.execute_query( "FIND TestRT WITH TestPropInt < 10000000000000000000000000000000000000000000000000000000000", @@ -894,7 +904,8 @@ def test_147(): https://gitlab.com/caosdb/caosdb-server/-/issues/147 """ db.Property("TestProp", datatype=db.TEXT).insert() - db.Property("TestPropInt", datatype=db.INTEGER).add_parent("TestProp").insert() + db.Property("TestPropInt", datatype=db.INTEGER).add_parent( + "TestProp").insert() db.RecordType("TestRT1").insert() db.RecordType("TestRT2").insert() @@ -906,27 +917,45 @@ def test_147(): "TestPropInt", -2).insert() # Find the records - assert db.execute_query("FIND TestRT1 WITH TestProp < 1.9", unique=True).id == rec1.id - assert db.execute_query("FIND TestRT1 WITH TestProp < 1.1", unique=True).id == rec1.id - assert db.execute_query("FIND TestRT1 WITH TestProp = 1.0", unique=True).id == rec1.id - assert db.execute_query("FIND TestRT1 WITH TestProp > 0.9", unique=True).id == rec1.id - assert db.execute_query("FIND TestRT1 WITH TestProp > 0.1", unique=True).id == rec1.id - - assert db.execute_query("FIND TestRT1 WITH TestProp <= 1.9", unique=True).id == rec1.id - assert db.execute_query("FIND TestRT1 WITH TestProp <= 1.1", unique=True).id == rec1.id - assert db.execute_query("FIND TestRT1 WITH TestProp >= 0.9", unique=True).id == rec1.id - assert db.execute_query("FIND TestRT1 WITH TestProp >= 0.1", unique=True).id == rec1.id - - assert db.execute_query("FIND TestRT2 WITH TestProp < -1.1", unique=True).id == rec2.id - assert db.execute_query("FIND TestRT2 WITH TestProp < -1.9", unique=True).id == rec2.id - assert db.execute_query("FIND TestRT2 WITH TestProp = -2.0", unique=True).id == rec2.id - assert db.execute_query("FIND TestRT2 WITH TestProp > -2.1", unique=True).id == rec2.id - assert db.execute_query("FIND TestRT2 WITH TestProp > 2.9", unique=True).id == rec2.id - - assert db.execute_query("FIND TestRT2 WITH TestProp <= -1.1", unique=True).id == rec2.id - assert db.execute_query("FIND TestRT2 WITH TestProp <= -1.9", unique=True).id == rec2.id - assert db.execute_query("FIND TestRT2 WITH TestProp >= -2.1", unique=True).id == rec2.id - assert db.execute_query("FIND TestRT2 WITH TestProp >= 2.9", unique=True).id == rec2.id + assert db.execute_query( + "FIND TestRT1 WITH TestProp < 1.9", unique=True).id == rec1.id + assert db.execute_query( + "FIND TestRT1 WITH TestProp < 1.1", unique=True).id == rec1.id + assert db.execute_query( + "FIND TestRT1 WITH TestProp = 1.0", unique=True).id == rec1.id + assert db.execute_query( + "FIND TestRT1 WITH TestProp > 0.9", unique=True).id == rec1.id + assert db.execute_query( + "FIND TestRT1 WITH TestProp > 0.1", unique=True).id == rec1.id + + assert db.execute_query( + "FIND TestRT1 WITH TestProp <= 1.9", unique=True).id == rec1.id + assert db.execute_query( + "FIND TestRT1 WITH TestProp <= 1.1", unique=True).id == rec1.id + assert db.execute_query( + "FIND TestRT1 WITH TestProp >= 0.9", unique=True).id == rec1.id + assert db.execute_query( + "FIND TestRT1 WITH TestProp >= 0.1", unique=True).id == rec1.id + + assert db.execute_query( + "FIND TestRT2 WITH TestProp < -1.1", unique=True).id == rec2.id + assert db.execute_query( + "FIND TestRT2 WITH TestProp < -1.9", unique=True).id == rec2.id + assert db.execute_query( + "FIND TestRT2 WITH TestProp = -2.0", unique=True).id == rec2.id + assert db.execute_query( + "FIND TestRT2 WITH TestProp > -2.1", unique=True).id == rec2.id + assert db.execute_query( + "FIND TestRT2 WITH TestProp > 2.9", unique=True).id == rec2.id + + assert db.execute_query( + "FIND TestRT2 WITH TestProp <= -1.1", unique=True).id == rec2.id + assert db.execute_query( + "FIND TestRT2 WITH TestProp <= -1.9", unique=True).id == rec2.id + assert db.execute_query( + "FIND TestRT2 WITH TestProp >= -2.1", unique=True).id == rec2.id + assert db.execute_query( + "FIND TestRT2 WITH TestProp >= 2.9", unique=True).id == rec2.id # Don't find the records assert len(db.execute_query("FIND TestRT1 WITH TestProp < 0.9")) == 0 @@ -940,9 +969,12 @@ def test_147(): assert len(db.execute_query("FIND TestRT2 WITH TestProp <= -2.1")) == 0 # Smaller numbers, but querying across number types. - rec3 = db.Record("TestRec3").add_parent("TestRT").add_property("TestPropInt", 1).insert() - assert db.execute_query("FIND TestRT WITH TestPropInt < 2", unique=True).id == rec3.id - assert db.execute_query("FIND TestRT WITH TestPropInt < 2.5", unique=True).id == rec3.id + rec3 = db.Record("TestRec3").add_parent( + "TestRT").add_property("TestPropInt", 1).insert() + assert db.execute_query( + "FIND TestRT WITH TestPropInt < 2", unique=True).id == rec3.id + assert db.execute_query( + "FIND TestRT WITH TestPropInt < 2.5", unique=True).id == rec3.id def test_140(): @@ -1001,3 +1033,58 @@ def test_140(): # UPDATE:PROPERTY:REMOVE rt.update() assert cm.value.errors[0].msg == "You are not allowed to do this." + + +def test_142(): + """https://gitlab.com/caosdb/caosdb-server/-/issues/142""" + valid_names = [ + "with.dot", + "with-hyphen", + "with_underbar", + "with0number", + "withAcapital", + ".withleadingdot", + "Bwithleadingcapital", + "1withleadingnumber", + "_withleadingunderbar", + "withtrailingcapitalC", + "withtrailingnumber2", + "withtrailingunderbar_", + "withtrailinghyphen-", + "withtrailingdot.", + "4", + "_", + "D", + "d", + ".", + ] + invalid_names = [ + "-", + "-leadinghyphen", + "", + "%", + "/", + "[asdf]", + "?", + '"', + ] + for name in valid_names: + admin._insert_user( + name=name, + password="Password1!", + status="ACTIVE", + email=None, + entity=None) + admin._delete_user(name=name) + for name in invalid_names: + with pytest.raises(HTTPClientError) as cm: + admin._insert_user( + name=name, + password="Password1!", + status="ACTIVE", + email=None, + entity=None) + admin._delete_user(name=name) + assert cm.value.status == 400 + assert cm.value.msg.startswith( + "The user name does not comply with the current policies for user names") diff --git a/tests/test_permissions.py b/tests/test_permissions.py index f35d49661a551f6ee336d85e4477233905da1515..fe433d0c36d42ff552f9e812772f34a9e5bac047 100644 --- a/tests/test_permissions.py +++ b/tests/test_permissions.py @@ -41,7 +41,6 @@ from .test_misc import test_info test_user = "test_user" test_role = "test_role" test_pw = "passphrase1P!" -easy_pw = "1234" def setup_module(): @@ -120,14 +119,6 @@ def insert_test_user(): except BaseException: pass - with assert_raises(db.HTTPClientError) as cee: - db.administration._insert_user( - name=test_user, - password=easy_pw, - status="ACTIVE") - assert_equal(cee.exception.status, 422, - "Easy password should raise a 422 error.") - db.administration._insert_user( name=test_user, password=test_pw,