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,