Skip to content

Commit

Permalink
Adding typed Group Categories
Browse files Browse the repository at this point in the history
  • Loading branch information
oleks committed May 24, 2017
1 parent 191831d commit e5a0811
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 8 deletions.
50 changes: 50 additions & 0 deletions staffeli/gcat.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
from staffeli import listed, cachable
from staffeli.course import Course

from typing import Any, Optional


class GroupCategory(listed.ListedEntity, cachable.CachableEntity):
course = None # type: Course
id = None # type: int
displayname = None # type: str

def __init__(
self,
course: Optional[Course]=None,
name: Optional[str]=None,
id: Optional[int]=None
) -> None:

if course is None:
self.course = Course()
else:
self.course = course

self.cachename = 'gcat'

if name is None and id is None:
cachable.CachableEntity.__init__(self, self.cachename)
listed.ListedEntity.__init__(self)
else:
entities = self.course.list_group_categories()
listed.ListedEntity.__init__(self, entities, name, id)

assert isinstance(self.json['id'], int)
assert isinstance(self.json['name'], str)

self.id = self.json['id']
self.displayname = self.json['name']

def web_url(self) -> str:
return self.course.canvas.web_url(
'courses/{}/groups#tab-{}'.format(self.course.id, self.id))

def list_groups(self) -> Any:
return self.course.list_groups(self.id)

def create_group(self, name: str) -> Any:
return self.course.create_group(self.id, name)

def delete_group(self, group_id: int) -> Any:
return self.course.delete_group(group_id)
1 change: 1 addition & 0 deletions static_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ def run(command: List[str]) -> None:
"setup.py",
"staffeli/typed_canvas.py",
"staffeli/course.py",
"staffeli/gcat.py",
"staffeli/names.py",
"staffeli/cachable.py",
"staffeli/upload.py",
Expand Down
23 changes: 15 additions & 8 deletions tests/test_groups.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from hypothesis import given
from staffeli.course import Course
from staffeli.gcat import GroupCategory
from typing import Any, List

from common import gen_nonempty_name, gen_nonempty_names
Expand All @@ -26,35 +27,41 @@ def course(
return init_course


@pytest.fixture(scope='function') # noqa: F811
def gcat(
init_course: Course,
gcat_id: int
) -> GroupCategory:
return GroupCategory(init_course, id=gcat_id)


@given(name=gen_nonempty_name) # noqa: F811
def test_create_group(
name: str,
course: Course,
gcat_id: int
gcat: GroupCategory
) -> None:

# Try and add the given group.
group = course.canvas.create_group(gcat_id, name)
group = gcat.create_group(name)
assert is_valid_group(group)
assert group['name'] == name

# Try and delete the group created above.
deleted_group = course.canvas.delete_group(group['id'])
deleted_group = gcat.delete_group(group['id'])
assert is_valid_group(deleted_group)
assert deleted_group['id'] == group['id']


@given(names=gen_nonempty_names) # noqa: F811
def test_create_groups(
names: List[str],
course: Course,
gcat_id: int
gcat: GroupCategory
) -> None:

# Try and add the given number of groups.
groups = []
for name in names:
group = course.create_group(gcat_id, name)
group = gcat.create_group(name)
groups.append(group)

gids = [s['id'] for s in groups]
Expand All @@ -65,6 +72,6 @@ def test_create_groups(
# Clean-up: Delete the groups created above.
deleted_ids = []
for gid in gids:
del_group = course.delete_group(gid)
del_group = gcat.delete_group(gid)
deleted_ids.append(del_group['id'])
assert sorted(deleted_ids) == sorted(gids)

0 comments on commit e5a0811

Please sign in to comment.