diff options
author | Clayton Walker <cwalker@sofi.org> | 2021-02-18 17:28:08 -0700 |
---|---|---|
committer | Clayton Walker <cwalker@sofi.org> | 2021-02-19 14:54:53 -0700 |
commit | 6660dbefeeffc2b39ddfed4928a59ed6da32ddf4 (patch) | |
tree | 26a3cea2268948e8e2e230fe5f66e1341e9ccaa2 | |
parent | d4e7a031eb64ecba09f2547bd7803f2cceb7558b (diff) | |
download | gitlab-6660dbefeeffc2b39ddfed4928a59ed6da32ddf4.tar.gz |
feat: add project audit endpoint
-rw-r--r-- | gitlab/tests/objects/test_audit_events.py | 79 | ||||
-rw-r--r-- | gitlab/v4/objects/audit_events.py | 23 | ||||
-rw-r--r-- | gitlab/v4/objects/projects.py | 2 |
3 files changed, 104 insertions, 0 deletions
diff --git a/gitlab/tests/objects/test_audit_events.py b/gitlab/tests/objects/test_audit_events.py new file mode 100644 index 0000000..23c4199 --- /dev/null +++ b/gitlab/tests/objects/test_audit_events.py @@ -0,0 +1,79 @@ +""" +GitLab API: +https://docs.gitlab.com/ee/api/audit_events.html#project-audit-events +""" + +import re + +import pytest +import responses + +from gitlab.v4.objects.audit_events import ProjectAudit + +id = 5 + +audit_events_content = { + "id": 5, + "author_id": 1, + "entity_id": 7, + "entity_type": "Project", + "details": { + "change": "prevent merge request approval from reviewers", + "from": "", + "to": "true", + "author_name": "Administrator", + "target_id": 7, + "target_type": "Project", + "target_details": "twitter/typeahead-js", + "ip_address": "127.0.0.1", + "entity_path": "twitter/typeahead-js", + }, + "created_at": "2020-05-26T22:55:04.230Z", +} + +audit_events_url = re.compile( + r"http://localhost/api/v4/(((groups|projects)/1)|(admin/ci))/audit_events" +) + +audit_events_url_id = re.compile( + rf"http://localhost/api/v4/(((groups|projects)/1)|(admin/ci))/audit_events/{id}" +) + + +@pytest.fixture +def resp_list_audit_events(): + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.GET, + url=audit_events_url, + json=[audit_events_content], + content_type="application/json", + status=200, + ) + yield rsps + + +@pytest.fixture +def resp_get_variable(): + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.GET, + url=audit_events_url_id, + json=audit_events_content, + content_type="application/json", + status=200, + ) + yield rsps + + +def test_list_project_audit_events(project, resp_list_audit_events): + audit_events = project.audit_events.list() + assert isinstance(audit_events, list) + assert isinstance(audit_events[0], ProjectAudit) + assert audit_events[0].id == id + + +def test_get_project_audit_events(project, resp_get_variable): + audit_event = project.audit_events.get(id) + assert isinstance(audit_event, ProjectAudit) + assert audit_event.id == id diff --git a/gitlab/v4/objects/audit_events.py b/gitlab/v4/objects/audit_events.py new file mode 100644 index 0000000..24ec309 --- /dev/null +++ b/gitlab/v4/objects/audit_events.py @@ -0,0 +1,23 @@ +""" +GitLab API: +https://docs.gitlab.com/ee/api/audit_events.html#project-audit-events +""" + +from gitlab.base import * # noqa +from gitlab.mixins import * # noqa + +__all__ = [ + "ProjectAudit", + "ProjectAuditManager", +] + + +class ProjectAudit(RESTObject): + _id_attr = "id" + + +class ProjectAuditManager(RetrieveMixin, RESTManager): + _path = "/projects/%(project_id)s/audit_events" + _obj_cls = ProjectAudit + _from_parent_attrs = {"project_id": "id"} + _list_filters = ("created_after", "created_before") diff --git a/gitlab/v4/objects/projects.py b/gitlab/v4/objects/projects.py index 0284e98..722b9ea 100644 --- a/gitlab/v4/objects/projects.py +++ b/gitlab/v4/objects/projects.py @@ -16,6 +16,7 @@ from .deploy_tokens import ProjectDeployTokenManager from .deployments import ProjectDeploymentManager from .environments import ProjectEnvironmentManager from .events import ProjectEventManager +from .audit_events import ProjectAuditManager from .export_import import ProjectExportManager, ProjectImportManager from .files import ProjectFileManager from .hooks import ProjectHookManager @@ -100,6 +101,7 @@ class Project(SaveMixin, ObjectDeleteMixin, RESTObject): ("deployments", "ProjectDeploymentManager"), ("environments", "ProjectEnvironmentManager"), ("events", "ProjectEventManager"), + ("audit_events", "ProjectAuditManager"), ("exports", "ProjectExportManager"), ("files", "ProjectFileManager"), ("forks", "ProjectForkManager"), |