summaryrefslogtreecommitdiff
path: root/tests/functional/api/test_groups.py
diff options
context:
space:
mode:
authorJohn L. Villalovos <john@sodarock.com>2021-05-25 17:35:17 -0700
committerJohn L. Villalovos <john@sodarock.com>2021-05-26 06:42:19 -0700
commit502715d99e02105c39b2c5cf0e7457b3256eba0d (patch)
treee9064cda7c903159d8025def351475c10a707118 /tests/functional/api/test_groups.py
parent9beff0d484b5fe86e2cd31f20cf00a309e09cf75 (diff)
downloadgitlab-502715d99e02105c39b2c5cf0e7457b3256eba0d.tar.gz
chore: rename 'tools/functional/' to 'tests/functional/'
Rename the 'tools/functional/' directory to 'tests/functional/' This makes more sense as these are functional tests and not tools. This was dicussed in: https://github.com/python-gitlab/python-gitlab/discussions/1468
Diffstat (limited to 'tests/functional/api/test_groups.py')
-rw-r--r--tests/functional/api/test_groups.py195
1 files changed, 195 insertions, 0 deletions
diff --git a/tests/functional/api/test_groups.py b/tests/functional/api/test_groups.py
new file mode 100644
index 0000000..eae2d9b
--- /dev/null
+++ b/tests/functional/api/test_groups.py
@@ -0,0 +1,195 @@
+import pytest
+
+import gitlab
+
+
+def test_groups(gl):
+ # TODO: This one still needs lots of work
+ user = gl.users.create(
+ {
+ "email": "user@test.com",
+ "username": "user",
+ "name": "user",
+ "password": "user_pass",
+ }
+ )
+ user2 = gl.users.create(
+ {
+ "email": "user2@test.com",
+ "username": "user2",
+ "name": "user2",
+ "password": "user2_pass",
+ }
+ )
+ group1 = gl.groups.create({"name": "group1", "path": "group1"})
+ group2 = gl.groups.create({"name": "group2", "path": "group2"})
+
+ p_id = gl.groups.list(search="group2")[0].id
+ group3 = gl.groups.create({"name": "group3", "path": "group3", "parent_id": p_id})
+ group4 = gl.groups.create({"name": "group4", "path": "group4"})
+
+ assert len(gl.groups.list()) == 4
+ assert len(gl.groups.list(search="oup1")) == 1
+ assert group3.parent_id == p_id
+ assert group2.subgroups.list()[0].id == group3.id
+
+ filtered_groups = gl.groups.list(skip_groups=[group3.id, group4.id])
+ assert group3 not in filtered_groups
+ assert group3 not in filtered_groups
+
+ group1.members.create(
+ {"access_level": gitlab.const.OWNER_ACCESS, "user_id": user.id}
+ )
+ group1.members.create(
+ {"access_level": gitlab.const.GUEST_ACCESS, "user_id": user2.id}
+ )
+ group2.members.create(
+ {"access_level": gitlab.const.OWNER_ACCESS, "user_id": user2.id}
+ )
+
+ group4.share(group1.id, gitlab.const.DEVELOPER_ACCESS)
+ group4.share(group2.id, gitlab.const.MAINTAINER_ACCESS)
+ # Reload group4 to have updated shared_with_groups
+ group4 = gl.groups.get(group4.id)
+ assert len(group4.shared_with_groups) == 2
+ group4.unshare(group1.id)
+ # Reload group4 to have updated shared_with_groups
+ group4 = gl.groups.get(group4.id)
+ assert len(group4.shared_with_groups) == 1
+
+ # User memberships (admin only)
+ memberships1 = user.memberships.list()
+ assert len(memberships1) == 1
+
+ memberships2 = user2.memberships.list()
+ assert len(memberships2) == 2
+
+ membership = memberships1[0]
+ assert membership.source_type == "Namespace"
+ assert membership.access_level == gitlab.const.OWNER_ACCESS
+
+ project_memberships = user.memberships.list(type="Project")
+ assert len(project_memberships) == 0
+
+ group_memberships = user.memberships.list(type="Namespace")
+ assert len(group_memberships) == 1
+
+ with pytest.raises(gitlab.GitlabListError) as e:
+ membership = user.memberships.list(type="Invalid")
+ assert "type does not have a valid value" in str(e.value)
+
+ with pytest.raises(gitlab.GitlabListError) as e:
+ user.memberships.list(sudo=user.name)
+ assert "403 Forbidden" in str(e.value)
+
+ # Administrator belongs to the groups
+ assert len(group1.members.list()) == 3
+ assert len(group2.members.list()) == 2
+
+ group1.members.delete(user.id)
+ assert len(group1.members.list()) == 2
+ assert len(group1.members.all()) # Deprecated
+ assert len(group1.members_all.list())
+ member = group1.members.get(user2.id)
+ member.access_level = gitlab.const.OWNER_ACCESS
+ member.save()
+ member = group1.members.get(user2.id)
+ assert member.access_level == gitlab.const.OWNER_ACCESS
+
+ group2.members.delete(gl.user.id)
+
+
+@pytest.mark.skip(reason="Commented out in legacy test")
+def test_group_labels(group):
+ group.labels.create({"name": "foo", "description": "bar", "color": "#112233"})
+ label = group.labels.get("foo")
+ assert label.description == "bar"
+
+ label.description = "baz"
+ label.save()
+ label = group.labels.get("foo")
+ assert label.description == "baz"
+ assert len(group.labels.list()) == 1
+
+ label.delete()
+ assert len(group.labels.list()) == 0
+
+
+def test_group_notification_settings(group):
+ settings = group.notificationsettings.get()
+ settings.level = "disabled"
+ settings.save()
+
+ settings = group.notificationsettings.get()
+ assert settings.level == "disabled"
+
+
+def test_group_badges(group):
+ badge_image = "http://example.com"
+ badge_link = "http://example/img.svg"
+ badge = group.badges.create({"link_url": badge_link, "image_url": badge_image})
+ assert len(group.badges.list()) == 1
+
+ badge.image_url = "http://another.example.com"
+ badge.save()
+
+ badge = group.badges.get(badge.id)
+ assert badge.image_url == "http://another.example.com"
+
+ badge.delete()
+ assert len(group.badges.list()) == 0
+
+
+def test_group_milestones(group):
+ milestone = group.milestones.create({"title": "groupmilestone1"})
+ assert len(group.milestones.list()) == 1
+
+ milestone.due_date = "2020-01-01T00:00:00Z"
+ milestone.save()
+ milestone.state_event = "close"
+ milestone.save()
+
+ milestone = group.milestones.get(milestone.id)
+ assert milestone.state == "closed"
+ assert len(milestone.issues()) == 0
+ assert len(milestone.merge_requests()) == 0
+
+
+def test_group_custom_attributes(gl, group):
+ attrs = group.customattributes.list()
+ assert len(attrs) == 0
+
+ attr = group.customattributes.set("key", "value1")
+ assert len(gl.groups.list(custom_attributes={"key": "value1"})) == 1
+ assert attr.key == "key"
+ assert attr.value == "value1"
+ assert len(group.customattributes.list()) == 1
+
+ attr = group.customattributes.set("key", "value2")
+ attr = group.customattributes.get("key")
+ assert attr.value == "value2"
+ assert len(group.customattributes.list()) == 1
+
+ attr.delete()
+ assert len(group.customattributes.list()) == 0
+
+
+def test_group_subgroups_projects(gl, user):
+ # TODO: fixture factories
+ group1 = gl.groups.list(search="group1")[0]
+ group2 = gl.groups.list(search="group2")[0]
+
+ group3 = gl.groups.create(
+ {"name": "subgroup1", "path": "subgroup1", "parent_id": group1.id}
+ )
+ group4 = gl.groups.create(
+ {"name": "subgroup2", "path": "subgroup2", "parent_id": group2.id}
+ )
+
+ gr1_project = gl.projects.create({"name": "gr1_project", "namespace_id": group1.id})
+ gr2_project = gl.projects.create({"name": "gr2_project", "namespace_id": group3.id})
+
+ assert group3.parent_id == group1.id
+ assert group4.parent_id == group2.id
+ assert gr1_project.namespace["id"] == group1.id
+ assert gr2_project.namespace["parent_id"] == group1.id