From c24691bf5ea419d00d92ef67301a4939c0ef0c40 Mon Sep 17 00:00:00 2001
From: Sascha Klawohn <sascha.klawohn@physik.hu-berlin.de>
Date: Mon, 26 Feb 2024 16:19:03 +0100
Subject: [PATCH] Add group tests

---
 tests/app/v1/routers/test_groups.py | 49 +++++++++++++++++++----------
 tests/conftest.py                   |  5 +++
 2 files changed, 38 insertions(+), 16 deletions(-)

diff --git a/tests/app/v1/routers/test_groups.py b/tests/app/v1/routers/test_groups.py
index 37e61240b2..3e01107075 100644
--- a/tests/app/v1/routers/test_groups.py
+++ b/tests/app/v1/routers/test_groups.py
@@ -121,6 +121,15 @@ def test_get_group_invalid(
         ),
         pytest.param('invalid', 'new_group', None, 401, id='invalid-user'),
         pytest.param(None, 'new_group', None, 401, id='guest-user'),
+        pytest.param('test_user', 'short_name', None, 422, id='short-name-fails'),
+        pytest.param('test_user', 'long_name', None, 422, id='long-name-fails'),
+        pytest.param(
+            'test_user',
+            'double_member',
+            'double_member_ref',
+            201,
+            id='double-member-skipped',
+        ),
     ],
 )
 def test_create_group(
@@ -144,21 +153,29 @@ def test_create_group(
         return
 
     response_group = UserGroup.parse_raw(response.content)
-    assert_group(response_group, new_group, new_group.keys())
     group = get_user_group(response_group.group_id)
     assert_group(group, response_group)
+    ref_group = test_user_groups_dict[ref_group_label]
+    assert_group(group, ref_group, ref_group.keys())
 
 
 @pytest.mark.parametrize(
-    'user_label, variation, expected_status_code',
+    'user_label, group_edit_label, ref_group_label, expected_status_code',
     [
-        pytest.param(None, {}, 401, id='guest-fails'),
-        pytest.param('invalid', {}, 401, id='faker-fails'),
-        pytest.param('other_test_user', {}, 401, id='other-fails'),
-        pytest.param('test_user', {}, 200, id='edit-ok'),
-        pytest.param('test_user', {'group_name': 'GG'}, 422, id='short-name-fails'),
-        pytest.param('test_user', {'group_name': 'G' * 33}, 422, id='long-name-fails'),
-        pytest.param('test_user', {'group_name': 'G!G'}, 422, id='special-chars-fails'),
+        pytest.param(None, 'new_group', None, 401, id='guest-fails'),
+        pytest.param('invalid', 'new_group', None, 401, id='faker-fails'),
+        pytest.param('other_test_user', 'new_group', None, 401, id='other-fails'),
+        pytest.param('test_user', 'new_group', 'new_group', 200, id='edit-ok'),
+        pytest.param('test_user', 'short_name', None, 422, id='short-name-fails'),
+        pytest.param('test_user', 'long_name', None, 422, id='long-name-fails'),
+        pytest.param('test_user', 'special_char', None, 422, id='special-chars-fails'),
+        pytest.param(
+            'test_user',
+            'double_member',
+            'double_member_ref',
+            200,
+            id='double-member-skipped',
+        ),
     ],
 )
 def test_update_user_group(
@@ -169,13 +186,13 @@ def test_update_user_group(
     user_groups_function,
     user_owner_group,
     user_label,
-    variation,
+    group_edit_label,
+    ref_group_label,
     expected_status_code,
 ):
     user_auth, _ = test_auth_dict[user_label]
     group_before = get_user_group(user_owner_group.group_id)
-    group_edit = test_user_groups_dict['new_group']
-    group_edit.update(variation)
+    group_edit = test_user_groups_dict[group_edit_label]
 
     url = f'{base_url}/{group_before.group_id}/edit'
     response = perform_post(client, url, user_auth, json=group_edit)
@@ -186,10 +203,10 @@ def test_update_user_group(
         assert_group(group_after, group_before)
         return
 
-    keys = group_edit.keys()
-    assert_group(group_after, group_edit, keys)
-    keys = group_after._fields - group_edit.keys()
-    assert_group(group_after, group_before, keys)
+    response_group = UserGroup.parse_raw(response.content)
+    assert_group(group_after, response_group)
+    ref_group = test_user_groups_dict[ref_group_label]
+    assert_group(group_after, ref_group, ref_group.keys())
 
 
 @pytest.mark.parametrize(
diff --git a/tests/conftest.py b/tests/conftest.py
index 4ea3b749b0..394a923370 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -512,6 +512,11 @@ def test_user_groups_dict():
         'other_owner_group': old_group(2, 'Other Owner Group', 2, []),
         'mixed_group': old_group(3, 'Mixed Group', 0, [1, 2]),
         'new_group': new_group('New Group', [0, 2]),
+        'short_name': new_group('GG', []),
+        'long_name': new_group('G' * 33, []),
+        'double_member': new_group('Double Member', [0, 2, 0]),
+        'double_member_ref': new_group('Double Member', [0, 2]),
+        'special_char': new_group('G!G', []),
     }
 
 
-- 
GitLab