summaryrefslogtreecommitdiff
path: root/gitlab/tests/objects/test_groups.py
blob: 075d9156775043defeb1922086f6eba77f69ccc8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import unittest

from httmock import response, urlmatch, with_httmock

import gitlab
from .mocks import *  # noqa


@urlmatch(scheme="http", netloc="localhost", path="/api/v4/groups/1", method="get")
def resp_get_group(url, request):
    content = '{"name": "name", "id": 1, "path": "path"}'
    content = content.encode("utf-8")
    return response(200, content, headers, None, 5, request)


@urlmatch(scheme="http", netloc="localhost", path="/api/v4/groups", method="post")
def resp_create_group(url, request):
    content = '{"name": "name", "id": 1, "path": "path"}'
    content = content.encode("utf-8")
    return response(200, content, headers, None, 5, request)


@urlmatch(
    scheme="http", netloc="localhost", path="/api/v4/groups/import", method="post",
)
def resp_create_import(url, request):
    """Mock for Group import tests.

    GitLab does not respond with import status for group imports.
    """

    content = """{
    "message": "202 Accepted"
    }"""
    content = content.encode("utf-8")
    return response(202, content, headers, None, 25, request)


class TestGroup(unittest.TestCase):
    def setUp(self):
        self.gl = gitlab.Gitlab(
            "http://localhost",
            private_token="private_token",
            ssl_verify=True,
            api_version=4,
        )

    @with_httmock(resp_get_group)
    def test_get_group(self):
        data = self.gl.groups.get(1)
        self.assertIsInstance(data, gitlab.v4.objects.Group)
        self.assertEqual(data.name, "name")
        self.assertEqual(data.path, "path")
        self.assertEqual(data.id, 1)

    @with_httmock(resp_create_group)
    def test_create_group(self):
        name, path = "name", "path"
        data = self.gl.groups.create({"name": name, "path": path})
        self.assertIsInstance(data, gitlab.v4.objects.Group)
        self.assertEqual(data.name, name)
        self.assertEqual(data.path, path)


class TestGroupExport(TestGroup):
    def setUp(self):
        super(TestGroupExport, self).setUp()
        self.group = self.gl.groups.get(1, lazy=True)

    @with_httmock(resp_create_export)
    def test_create_group_export(self):
        export = self.group.exports.create()
        self.assertEqual(export.message, "202 Accepted")

    @unittest.skip("GitLab API endpoint not implemented")
    @with_httmock(resp_create_export)
    def test_refresh_group_export_status(self):
        export = self.group.exports.create()
        export.refresh()
        self.assertEqual(export.export_status, "finished")

    @with_httmock(resp_create_export, resp_download_export)
    def test_download_group_export(self):
        export = self.group.exports.create()
        download = export.download()
        self.assertIsInstance(download, bytes)
        self.assertEqual(download, binary_content)


class TestGroupImport(TestGroup):
    @with_httmock(resp_create_import)
    def test_import_group(self):
        group_import = self.gl.groups.import_group("file", "api-group", "API Group")
        self.assertEqual(group_import["message"], "202 Accepted")

    @unittest.skip("GitLab API endpoint not implemented")
    @with_httmock(resp_create_import)
    def test_refresh_group_import_status(self):
        group_import = self.group.imports.get()
        group_import.refresh()
        self.assertEqual(group_import.import_status, "finished")