Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion taiga/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from .models import User
from .models import Users
from .models import Membership
from .models import Memberships
from .models import Project
from .models import Projects
from .models import UserStory
Expand Down Expand Up @@ -42,5 +44,5 @@
'IssueStatuses', 'TaskStatus', 'TaskStatuses', 'WikiPage', 'WikiPages',
'WikiLink', 'WikiLinks', 'IssueAttribute', 'IssueAttributes',
'TaskAttribute', 'TaskAttributes', 'UserStoryAttribute',
'UserStoryAttributes'
'UserStoryAttributes', 'Membership', 'Memberships'
]
26 changes: 26 additions & 0 deletions taiga/models/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,24 @@ class Users(ListResource):
instance = User


class Membership(InstanceResource):

endpoint = 'memberships'

allowed_params = ['email', 'role', 'project']

repr_attribute = 'email'


class Memberships(ListResource):

instance = Membership

def create(self, project, email, role, **attrs):
attrs.update({'project': project, 'email': email, 'role': role})
return self._new_resource(payload=attrs)


class Priority(InstanceResource):

endpoint = 'priorities'
Expand Down Expand Up @@ -477,6 +495,14 @@ def unstar(self):
)
return self

def add_membership(self, email, role, **attrs):
return Memberships(self.requester).create(
self.id, email, role, **attrs
)

def list_memberships(self):
return Memberships(self.requester).list(project=self.id)

def add_user_story(self, subject, **attrs):
return UserStories(self.requester).create(
self.id, subject, **attrs
Expand Down
15 changes: 15 additions & 0 deletions tests/test_projects.py
Original file line number Diff line number Diff line change
Expand Up @@ -283,3 +283,18 @@ def test_list_user_story_attributes(self, mock_list_us_attr):
project = Project(rm, id=1)
project.list_user_story_attributes()
mock_list_us_attr.assert_called_with(project=1)

@patch('taiga.models.Memberships.create')
def test_add_membership(self, mock_new_membership):
rm = RequestMaker('/api/v1', 'fakehost', 'faketoken')
project = Project(rm, id=1)
project.add_membership('test@example.com', 1)
mock_new_membership.assert_called_with(1, 'test@example.com', 1)

@patch('taiga.models.Memberships.list')
def test_list_membership(self, mock_list_memberships):
rm = RequestMaker('/api/v1', 'fakehost', 'faketoken')
project = Project(rm, id=1)
project.list_memberships()
mock_list_memberships.assert_called_with(project=1)