Merge lp:~cjohnston/ubuntu-ci-services-itself/ts-update-status into lp:ubuntu-ci-services-itself

Proposed by Chris Johnston
Status: Merged
Approved by: Chris Johnston
Approved revision: 76
Merged at revision: 84
Proposed branch: lp:~cjohnston/ubuntu-ci-services-itself/ts-update-status
Merge into: lp:ubuntu-ci-services-itself
Diff against target: 143 lines (+86/-2)
4 files modified
ticket_system/ticket/api.py (+27/-0)
ticket_system/ticket/tests/test_read_api.py (+35/-1)
ticket_system/ticket/tests/test_write_api.py (+20/-0)
ticket_system/ticket_system/urls.py (+4/-1)
To merge this branch: bzr merge lp:~cjohnston/ubuntu-ci-services-itself/ts-update-status
Reviewer Review Type Date Requested Status
Joe Talbott (community) Approve
Review via email: mp+200601@code.launchpad.net

Commit message

Add ticket status APIs

Description of the change

Adds ticket status API for webui to consume. Adds ticket status update API for lander to use.

To post a comment you must log in.
Revision history for this message
Joe Talbott (joetalbott) wrote :

+1

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'ticket_system/ticket/api.py'
--- ticket_system/ticket/api.py 2013-12-20 21:12:13 +0000
+++ ticket_system/ticket/api.py 2014-01-07 01:03:48 +0000
@@ -14,6 +14,7 @@
14# along with this program. If not, see <http://www.gnu.org/licenses/>.14# along with this program. If not, see <http://www.gnu.org/licenses/>.
1515
16from tastypie import fields16from tastypie import fields
17from tastypie.constants import ALL
17from tastypie.authorization import Authorization18from tastypie.authorization import Authorization
18from tastypie.resources import ModelResource19from tastypie.resources import ModelResource
19from ticket.models import Ticket, SubTicket, SourcePackageUpload, Artifact20from ticket.models import Ticket, SubTicket, SourcePackageUpload, Artifact
@@ -87,3 +88,29 @@
87 class Meta:88 class Meta:
88 queryset = Ticket.objects.all()89 queryset = Ticket.objects.all()
89 allowed_methods = ['get']90 allowed_methods = ['get']
91
92
93class TicketUpdateStatusResource(ModelResource):
94
95 class Meta:
96 queryset = Ticket.objects.all()
97 fields = ['id', 'current_workflow_step', 'status']
98 allowed_methods = ['get', 'patch']
99 authorization = Authorization()
100 resource_name = 'updatestatus'
101 filtering = {
102 "id": ('exact'),
103 }
104
105
106class TicketStatusResource(ModelResource):
107
108 class Meta:
109 queryset = Ticket.objects.all()
110 fields = ['id', 'title', 'current_workflow_step', 'status', 'created',
111 'updated']
112 allowed_methods = ['get']
113 resource_name = 'status'
114 filtering = {
115 "current_workflow_step": ALL,
116 }
90117
=== modified file 'ticket_system/ticket/tests/test_read_api.py'
--- ticket_system/ticket/tests/test_read_api.py 2014-01-06 20:24:26 +0000
+++ ticket_system/ticket/tests/test_read_api.py 2014-01-07 01:03:48 +0000
@@ -28,7 +28,6 @@
28 self.subticket = mommy.make('SubTicket', ticket=self.ticket,28 self.subticket = mommy.make('SubTicket', ticket=self.ticket,
29 source_package_upload=self.spu)29 source_package_upload=self.spu)
30 self.artifact = mommy.make('Artifact', subticket=self.subticket)30 self.artifact = mommy.make('Artifact', subticket=self.subticket)
31 self.maxDiff = None
3231
33 def test_get_artifact_api(self):32 def test_get_artifact_api(self):
34 obj = self.getResource('artifact/')33 obj = self.getResource('artifact/')
@@ -149,3 +148,38 @@
149 u'resource_uri':148 u'resource_uri':
150 u'/api/v1/spu/{0}/'.format(self.spu.pk),149 u'/api/v1/spu/{0}/'.format(self.spu.pk),
151 })150 })
151
152 def test_get_ticket_update_status_api(self):
153 obj = self.getResource('updatestatus/')
154 self.assertEqual(obj['objects'][0], {
155 u'id': self.ticket.pk,
156 u'resource_uri':
157 u'/api/v1/updatestatus/{0}/'.format(self.ticket.pk),
158 u'current_workflow_step': self.ticket.current_workflow_step,
159 u'status': self.ticket.status,
160 })
161
162 def test_get_single_ticket_update_status_api(self):
163 obj = self.getResource('updatestatus/?id={}'.format(self.ticket.pk))
164 self.assertEqual(obj['objects'][0], {
165 u'id': self.ticket.pk,
166 u'resource_uri':
167 u'/api/v1/updatestatus/{0}/'.format(self.ticket.pk),
168 u'current_workflow_step': self.ticket.current_workflow_step,
169 u'status': self.ticket.status,
170 })
171
172 def test_get_ticket_status_api(self):
173 obj = self.getResource('status/')
174 self.assertEqual(obj['objects'][0], {
175 u'created': unicode(self.ticket.created.strftime(
176 "%Y-%m-%dT%H:%M:%S.%f")),
177 u'current_workflow_step': self.ticket.current_workflow_step,
178 u'id': self.ticket.pk,
179 u'status': self.ticket.status,
180 u'title': self.ticket.title,
181 u'resource_uri':
182 u'/api/v1/status/{0}/'.format(self.ticket.pk),
183 u'updated': unicode(self.ticket.updated.strftime(
184 "%Y-%m-%dT%H:%M:%S.%f")),
185 })
152186
=== modified file 'ticket_system/ticket/tests/test_write_api.py'
--- ticket_system/ticket/tests/test_write_api.py 2013-12-20 21:12:13 +0000
+++ ticket_system/ticket/tests/test_write_api.py 2014-01-07 01:03:48 +0000
@@ -190,3 +190,23 @@
190 def test_delete_artifact_not_allowed(self):190 def test_delete_artifact_not_allowed(self):
191 resp = self.delete(resource=self.detail_url)191 resp = self.delete(resource=self.detail_url)
192 self.assertHttpMethodNotAllowed(resp)192 self.assertHttpMethodNotAllowed(resp)
193
194
195class APIUpdateTicketStatuses(TastypieTestCase):
196
197 def setUp(self):
198 super(APIUpdateTicketStatuses, self).setUp('/api/v1')
199 self.ticket = mommy.make('Ticket')
200 self.ticket_detail_url = 'updatestatus/{0}/'.format(self.ticket.pk)
201
202 def test_patch_ticket_status(self):
203 new_data = {'current_workflow_step': '200', 'status': '210'}
204 self.assertEqual(Ticket.objects.count(), 1)
205 self.patch('/api/v1/' + self.ticket_detail_url,
206 new_data)
207 # Make sure the count hasn't changed & we did an update.
208 self.assertEqual(Ticket.objects.count(), 1)
209 # Check for updated data.
210 self.assertEqual(Ticket.objects.get(
211 pk=self.ticket.pk).current_workflow_step, 200)
212 self.assertEqual(Ticket.objects.get(pk=self.ticket.pk).status, 210)
193213
=== modified file 'ticket_system/ticket_system/urls.py'
--- ticket_system/ticket_system/urls.py 2013-12-13 04:56:17 +0000
+++ ticket_system/ticket_system/urls.py 2014-01-07 01:03:48 +0000
@@ -20,7 +20,8 @@
20from project.api import SourcePackageResource, BinaryPackageResource20from project.api import SourcePackageResource, BinaryPackageResource
21from ticket.api import (TicketResource, SubTicketResource, ArtifactResource,21from ticket.api import (TicketResource, SubTicketResource, ArtifactResource,
22 SourcePackageUploadResource, FullSubTicketResource,22 SourcePackageUploadResource, FullSubTicketResource,
23 FullTicketResource, FullArtifactResource)23 FullTicketResource, FullArtifactResource,
24 TicketStatusResource, TicketUpdateStatusResource)
2425
25admin.autodiscover()26admin.autodiscover()
26v1_api = Api(api_name='v1')27v1_api = Api(api_name='v1')
@@ -34,6 +35,8 @@
34v1_api.register(FullArtifactResource())35v1_api.register(FullArtifactResource())
35v1_api.register(FullSubTicketResource())36v1_api.register(FullSubTicketResource())
36v1_api.register(FullTicketResource())37v1_api.register(FullTicketResource())
38v1_api.register(TicketUpdateStatusResource())
39v1_api.register(TicketStatusResource())
3740
38urlpatterns = patterns(41urlpatterns = patterns(
39 '',42 '',

Subscribers

People subscribed via source and target branches