summaryrefslogtreecommitdiff
path: root/tools/functional/api/test_projects.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/functional/api/test_projects.py')
-rw-r--r--tools/functional/api/test_projects.py298
1 files changed, 298 insertions, 0 deletions
diff --git a/tools/functional/api/test_projects.py b/tools/functional/api/test_projects.py
new file mode 100644
index 0000000..3e88c0c
--- /dev/null
+++ b/tools/functional/api/test_projects.py
@@ -0,0 +1,298 @@
+import pytest
+
+import gitlab
+
+
+def test_create_project(gl, user):
+ # Moved from group tests chunk in legacy tests, TODO cleanup
+ admin_project = gl.projects.create({"name": "admin_project"})
+ assert isinstance(admin_project, gitlab.v4.objects.Project)
+ assert len(gl.projects.list(search="admin")) == 1
+
+ sudo_project = gl.projects.create({"name": "sudo_project"}, sudo=user.id)
+
+ created = gl.projects.list()
+ created_gen = gl.projects.list(as_list=False)
+ owned = gl.projects.list(owned=True)
+
+ assert admin_project in created and sudo_project in created
+ assert admin_project in owned and sudo_project not in owned
+ assert len(created) == len(list(created_gen))
+
+ admin_project.delete()
+ sudo_project.delete()
+
+
+def test_project_badges(project):
+ badge_image = "http://example.com"
+ badge_link = "http://example/img.svg"
+
+ badge = project.badges.create({"link_url": badge_link, "image_url": badge_image})
+ assert len(project.badges.list()) == 1
+
+ badge.image_url = "http://another.example.com"
+ badge.save()
+
+ badge = project.badges.get(badge.id)
+ assert badge.image_url == "http://another.example.com"
+
+ badge.delete()
+ assert len(project.badges.list()) == 0
+
+
+@pytest.mark.skip(reason="Commented out in legacy test")
+def test_project_boards(project):
+ boards = project.boards.list()
+ assert len(boards)
+
+ board = boards[0]
+ lists = board.lists.list()
+ begin_size = len(lists)
+ last_list = lists[-1]
+ last_list.position = 0
+ last_list.save()
+ last_list.delete()
+ lists = board.lists.list()
+ assert len(lists) == begin_size - 1
+
+
+def test_project_custom_attributes(gl, project):
+ attrs = project.customattributes.list()
+ assert len(attrs) == 0
+
+ attr = project.customattributes.set("key", "value1")
+ assert attr.key == "key"
+ assert attr.value == "value1"
+ assert len(project.customattributes.list()) == 1
+ assert len(gl.projects.list(custom_attributes={"key": "value1"})) == 1
+
+ attr = project.customattributes.set("key", "value2")
+ attr = project.customattributes.get("key")
+ assert attr.value == "value2"
+ assert len(project.customattributes.list()) == 1
+
+ attr.delete()
+ assert len(project.customattributes.list()) == 0
+
+
+def test_project_environments(project):
+ project.environments.create(
+ {"name": "env1", "external_url": "http://fake.env/whatever"}
+ )
+ environments = project.environments.list()
+ assert len(environments) == 1
+
+ environment = environments[0]
+ environment.external_url = "http://new.env/whatever"
+ environment.save()
+
+ environment = project.environments.list()[0]
+ assert environment.external_url == "http://new.env/whatever"
+
+ environment.stop()
+ environment.delete()
+ assert len(project.environments.list()) == 0
+
+
+def test_project_events(project):
+ events = project.events.list()
+ assert isinstance(events, list)
+
+
+def test_project_file_uploads(project):
+ filename = "test.txt"
+ file_contents = "testing contents"
+
+ uploaded_file = project.upload(filename, file_contents)
+ assert uploaded_file["alt"] == filename
+ assert uploaded_file["url"].startswith("/uploads/")
+ assert uploaded_file["url"].endswith("/" + filename)
+ assert uploaded_file["markdown"] == "[{}]({})".format(
+ uploaded_file["alt"], uploaded_file["url"]
+ )
+
+
+def test_project_forks(gl, project, user):
+ fork = project.forks.create({"namespace": user.username})
+ fork_project = gl.projects.get(fork.id)
+ assert fork_project.forked_from_project["id"] == project.id
+
+ forks = project.forks.list()
+ assert fork.id in map(lambda fork_project: fork_project.id, forks)
+
+
+def test_project_hooks(project):
+ hook = project.hooks.create({"url": "http://hook.url"})
+ assert len(project.hooks.list()) == 1
+
+ hook.note_events = True
+ hook.save()
+
+ hook = project.hooks.get(hook.id)
+ assert hook.note_events is True
+ hook.delete()
+
+
+def test_project_housekeeping(project):
+ project.housekeeping()
+
+
+def test_project_labels(project):
+ label = project.labels.create({"name": "label", "color": "#778899"})
+ label = project.labels.list()[0]
+ assert len(project.labels.list()) == 1
+
+ label.new_name = "labelupdated"
+ label.save()
+ assert label.name == "labelupdated"
+
+ label.subscribe()
+ assert label.subscribed == True
+
+ label.unsubscribe()
+ assert label.subscribed == False
+
+ label.delete()
+ assert len(project.labels.list()) == 0
+
+
+def test_project_milestones(project):
+ milestone = project.milestones.create({"title": "milestone1"})
+ assert len(project.milestones.list()) == 1
+
+ milestone.due_date = "2020-01-01T00:00:00Z"
+ milestone.save()
+
+ milestone.state_event = "close"
+ milestone.save()
+
+ milestone = project.milestones.get(milestone.id)
+ assert milestone.state == "closed"
+ assert len(milestone.issues()) == 0
+ assert len(milestone.merge_requests()) == 0
+
+
+def test_project_pages_domains(gl, project):
+ domain = project.pagesdomains.create({"domain": "foo.domain.com"})
+ assert len(project.pagesdomains.list()) == 1
+ assert len(gl.pagesdomains.list()) == 1
+
+ domain = project.pagesdomains.get("foo.domain.com")
+ assert domain.domain == "foo.domain.com"
+
+ domain.delete()
+ assert len(project.pagesdomains.list()) == 0
+
+
+def test_project_protected_branches(project):
+ p_b = project.protectedbranches.create({"name": "*-stable"})
+ assert p_b.name == "*-stable"
+ assert len(project.protectedbranches.list()) == 1
+
+ p_b = project.protectedbranches.get("*-stable")
+ p_b.delete()
+ assert len(project.protectedbranches.list()) == 0
+
+
+def test_project_releases(gl):
+ project = gl.projects.create(
+ {"name": "release-test-project", "initialize_with_readme": True}
+ )
+ release_name = "Demo Release"
+ release_tag_name = "v1.2.3"
+ release_description = "release notes go here"
+ release = project.releases.create(
+ {
+ "name": release_name,
+ "tag_name": release_tag_name,
+ "description": release_description,
+ "ref": "master",
+ }
+ )
+ assert len(project.releases.list()) == 1
+ assert project.releases.get(release_tag_name)
+ assert release.name == release_name
+ assert release.tag_name == release_tag_name
+ assert release.description == release_description
+
+ project.releases.delete(release_tag_name)
+ assert len(project.releases.list()) == 0
+ project.delete()
+
+
+def test_project_remote_mirrors(project):
+ mirror_url = "http://gitlab.test/root/mirror.git"
+
+ mirror = project.remote_mirrors.create({"url": mirror_url})
+ assert mirror.url == mirror_url
+
+ mirror.enabled = True
+ mirror.save()
+
+ mirror = project.remote_mirrors.list()[0]
+ assert isinstance(mirror, gitlab.v4.objects.ProjectRemoteMirror)
+ assert mirror.url == mirror_url
+ assert mirror.enabled is True
+
+
+def test_project_services(project):
+ service = project.services.get("asana")
+ service.api_key = "whatever"
+ service.save()
+
+ service = project.services.get("asana")
+ assert service.active is True
+
+ service.delete()
+
+ service = project.services.get("asana")
+ assert service.active is False
+
+
+def test_project_stars(project):
+ project.star()
+ assert project.star_count == 1
+
+ project.unstar()
+ assert project.star_count == 0
+
+
+def test_project_tags(project):
+ project.files.create(
+ {
+ "file_path": "README",
+ "branch": "master",
+ "content": "Initial content",
+ "commit_message": "Initial commit",
+ }
+ )
+ tag = project.tags.create({"tag_name": "v1.0", "ref": "master"})
+ assert len(project.tags.list()) == 1
+
+ tag.set_release_description("Description 1")
+ tag.set_release_description("Description 2")
+ assert tag.release["description"] == "Description 2"
+
+ tag.delete()
+ assert len(project.tags.list()) == 0
+
+
+def test_project_triggers(project):
+ trigger = project.triggers.create({"description": "trigger1"})
+ assert len(project.triggers.list()) == 1
+ trigger.delete()
+
+
+def test_project_wiki(project):
+ content = "Wiki page content"
+ wiki = project.wikis.create({"title": "wikipage", "content": content})
+ assert len(project.wikis.list()) == 1
+
+ wiki = project.wikis.get(wiki.slug)
+ assert wiki.content == content
+
+ # update and delete seem broken
+ wiki.content = "new content"
+ wiki.save()
+ wiki.delete()
+ assert len(project.wikis.list()) == 0