Skip to content

Commit 6d7c511

Browse files
author
Charles Larivier
committed
feat: add PermissionGroup
1 parent 29268c3 commit 6d7c511

File tree

2 files changed

+112
-0
lines changed

2 files changed

+112
-0
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from __future__ import annotations
2+
3+
from typing import List
4+
5+
from metabase.resource import ListResource, CreateResource, GetResource, UpdateResource, DeleteResource
6+
7+
8+
class PermissionGroup(ListResource, CreateResource, GetResource, UpdateResource, DeleteResource):
9+
ENDPOINT = "/api/permissions/group"
10+
11+
id: int
12+
name: str
13+
member_count: int
14+
15+
@classmethod
16+
def list(cls) -> List[PermissionGroup]:
17+
return super(PermissionGroup, cls).list()
18+
19+
@classmethod
20+
def get(cls, id: int) -> PermissionGroup:
21+
return super(PermissionGroup, cls).get(id)
22+
23+
@classmethod
24+
def create(cls, name: str, **kwargs) -> PermissionGroup:
25+
return super(PermissionGroup, cls).create(name=name, **kwargs)
26+
27+
def update(self, name: str, **kwargs) -> None:
28+
return super(PermissionGroup, self).update(name=name, **kwargs)
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
from exceptions import NotFoundError
2+
from metabase import PermissionGroup, PermissionMembership
3+
4+
from tests.helpers import IntegrationTestCase
5+
6+
7+
class PermissionMembershipTests(IntegrationTestCase):
8+
def tearDown(self) -> None:
9+
groups = PermissionGroup.list()
10+
for group in groups:
11+
if group.id not in (1, 2):
12+
# can't delete default groups
13+
group.delete()
14+
15+
def test_list(self):
16+
"""Ensure PermissionGroup.list returns a list of PermissionGroup instances."""
17+
groups = PermissionGroup.list()
18+
19+
self.assertIsInstance(groups, list)
20+
self.assertEqual(2, len(groups)) # there are 2 default groups in Metabase
21+
self.assertTrue(all([isinstance(g, PermissionGroup) for g in groups]))
22+
23+
def test_get(self):
24+
"""
25+
Ensure PermissionGroup.get returns a PermissionGroup instance for a given ID, or
26+
raises a NotFoundError when it does not exist.
27+
"""
28+
# fixture
29+
group = PermissionGroup.create(
30+
name="My Group"
31+
)
32+
self.assertIsInstance(group, PermissionGroup)
33+
34+
g = PermissionGroup.get(group.id)
35+
self.assertIsInstance(g, PermissionGroup)
36+
self.assertEqual(group.id, g.id)
37+
38+
with self.assertRaises(NotFoundError):
39+
_ = PermissionGroup.get(12345)
40+
41+
def test_create(self):
42+
"""Ensure PermissionGroup.create creates a Metric in Metabase and returns a PermissionGroup instance."""
43+
group = PermissionGroup.create(
44+
name="My Group",
45+
)
46+
47+
self.assertIsInstance(group, PermissionGroup)
48+
self.assertEqual("My Group", group.name)
49+
50+
def test_update(self):
51+
"""Ensure PermissionGroup.update updates an existing PermissionGroup in Metabase."""
52+
# fixture
53+
group = PermissionGroup.create(
54+
name="My Group",
55+
)
56+
57+
self.assertIsInstance(group, PermissionGroup)
58+
self.assertEqual("My Group", group.name)
59+
60+
group.update(
61+
name="New Name"
62+
)
63+
# assert local instance is mutated
64+
self.assertEqual("New Name", group.name)
65+
66+
# assert metabase object is mutated
67+
m = PermissionGroup.get(group.id)
68+
self.assertEqual("New Name", m.name)
69+
70+
def test_delete(self):
71+
"""Ensure PermissionGroup.delete deletes a PermissionGroup in Metabase."""
72+
# fixture
73+
group = PermissionGroup.create(
74+
name="My Metric",
75+
)
76+
77+
self.assertIsInstance(group, PermissionGroup)
78+
79+
group.delete()
80+
81+
# assert metabase object is mutated
82+
with self.assertRaises(NotFoundError):
83+
_ = PermissionGroup.get(group.id)
84+

0 commit comments

Comments
 (0)