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
1=== modified file 'ticket_system/ticket/api.py'
2--- ticket_system/ticket/api.py 2013-12-20 21:12:13 +0000
3+++ ticket_system/ticket/api.py 2014-01-07 01:03:48 +0000
4@@ -14,6 +14,7 @@
5 # along with this program. If not, see <http://www.gnu.org/licenses/>.
6
7 from tastypie import fields
8+from tastypie.constants import ALL
9 from tastypie.authorization import Authorization
10 from tastypie.resources import ModelResource
11 from ticket.models import Ticket, SubTicket, SourcePackageUpload, Artifact
12@@ -87,3 +88,29 @@
13 class Meta:
14 queryset = Ticket.objects.all()
15 allowed_methods = ['get']
16+
17+
18+class TicketUpdateStatusResource(ModelResource):
19+
20+ class Meta:
21+ queryset = Ticket.objects.all()
22+ fields = ['id', 'current_workflow_step', 'status']
23+ allowed_methods = ['get', 'patch']
24+ authorization = Authorization()
25+ resource_name = 'updatestatus'
26+ filtering = {
27+ "id": ('exact'),
28+ }
29+
30+
31+class TicketStatusResource(ModelResource):
32+
33+ class Meta:
34+ queryset = Ticket.objects.all()
35+ fields = ['id', 'title', 'current_workflow_step', 'status', 'created',
36+ 'updated']
37+ allowed_methods = ['get']
38+ resource_name = 'status'
39+ filtering = {
40+ "current_workflow_step": ALL,
41+ }
42
43=== modified file 'ticket_system/ticket/tests/test_read_api.py'
44--- ticket_system/ticket/tests/test_read_api.py 2014-01-06 20:24:26 +0000
45+++ ticket_system/ticket/tests/test_read_api.py 2014-01-07 01:03:48 +0000
46@@ -28,7 +28,6 @@
47 self.subticket = mommy.make('SubTicket', ticket=self.ticket,
48 source_package_upload=self.spu)
49 self.artifact = mommy.make('Artifact', subticket=self.subticket)
50- self.maxDiff = None
51
52 def test_get_artifact_api(self):
53 obj = self.getResource('artifact/')
54@@ -149,3 +148,38 @@
55 u'resource_uri':
56 u'/api/v1/spu/{0}/'.format(self.spu.pk),
57 })
58+
59+ def test_get_ticket_update_status_api(self):
60+ obj = self.getResource('updatestatus/')
61+ self.assertEqual(obj['objects'][0], {
62+ u'id': self.ticket.pk,
63+ u'resource_uri':
64+ u'/api/v1/updatestatus/{0}/'.format(self.ticket.pk),
65+ u'current_workflow_step': self.ticket.current_workflow_step,
66+ u'status': self.ticket.status,
67+ })
68+
69+ def test_get_single_ticket_update_status_api(self):
70+ obj = self.getResource('updatestatus/?id={}'.format(self.ticket.pk))
71+ self.assertEqual(obj['objects'][0], {
72+ u'id': self.ticket.pk,
73+ u'resource_uri':
74+ u'/api/v1/updatestatus/{0}/'.format(self.ticket.pk),
75+ u'current_workflow_step': self.ticket.current_workflow_step,
76+ u'status': self.ticket.status,
77+ })
78+
79+ def test_get_ticket_status_api(self):
80+ obj = self.getResource('status/')
81+ self.assertEqual(obj['objects'][0], {
82+ u'created': unicode(self.ticket.created.strftime(
83+ "%Y-%m-%dT%H:%M:%S.%f")),
84+ u'current_workflow_step': self.ticket.current_workflow_step,
85+ u'id': self.ticket.pk,
86+ u'status': self.ticket.status,
87+ u'title': self.ticket.title,
88+ u'resource_uri':
89+ u'/api/v1/status/{0}/'.format(self.ticket.pk),
90+ u'updated': unicode(self.ticket.updated.strftime(
91+ "%Y-%m-%dT%H:%M:%S.%f")),
92+ })
93
94=== modified file 'ticket_system/ticket/tests/test_write_api.py'
95--- ticket_system/ticket/tests/test_write_api.py 2013-12-20 21:12:13 +0000
96+++ ticket_system/ticket/tests/test_write_api.py 2014-01-07 01:03:48 +0000
97@@ -190,3 +190,23 @@
98 def test_delete_artifact_not_allowed(self):
99 resp = self.delete(resource=self.detail_url)
100 self.assertHttpMethodNotAllowed(resp)
101+
102+
103+class APIUpdateTicketStatuses(TastypieTestCase):
104+
105+ def setUp(self):
106+ super(APIUpdateTicketStatuses, self).setUp('/api/v1')
107+ self.ticket = mommy.make('Ticket')
108+ self.ticket_detail_url = 'updatestatus/{0}/'.format(self.ticket.pk)
109+
110+ def test_patch_ticket_status(self):
111+ new_data = {'current_workflow_step': '200', 'status': '210'}
112+ self.assertEqual(Ticket.objects.count(), 1)
113+ self.patch('/api/v1/' + self.ticket_detail_url,
114+ new_data)
115+ # Make sure the count hasn't changed & we did an update.
116+ self.assertEqual(Ticket.objects.count(), 1)
117+ # Check for updated data.
118+ self.assertEqual(Ticket.objects.get(
119+ pk=self.ticket.pk).current_workflow_step, 200)
120+ self.assertEqual(Ticket.objects.get(pk=self.ticket.pk).status, 210)
121
122=== modified file 'ticket_system/ticket_system/urls.py'
123--- ticket_system/ticket_system/urls.py 2013-12-13 04:56:17 +0000
124+++ ticket_system/ticket_system/urls.py 2014-01-07 01:03:48 +0000
125@@ -20,7 +20,8 @@
126 from project.api import SourcePackageResource, BinaryPackageResource
127 from ticket.api import (TicketResource, SubTicketResource, ArtifactResource,
128 SourcePackageUploadResource, FullSubTicketResource,
129- FullTicketResource, FullArtifactResource)
130+ FullTicketResource, FullArtifactResource,
131+ TicketStatusResource, TicketUpdateStatusResource)
132
133 admin.autodiscover()
134 v1_api = Api(api_name='v1')
135@@ -34,6 +35,8 @@
136 v1_api.register(FullArtifactResource())
137 v1_api.register(FullSubTicketResource())
138 v1_api.register(FullTicketResource())
139+v1_api.register(TicketUpdateStatusResource())
140+v1_api.register(TicketStatusResource())
141
142 urlpatterns = patterns(
143 '',

Subscribers

People subscribed via source and target branches