~psivaa/uci-engine/ppa-int-prod

« back to all changes in this revision

Viewing changes to ticket_system/ticket/tests/test_read_api.py

  • Committer: Ubuntu CI Bot
  • Author(s): Celso Providelo
  • Date: 2014-09-05 20:02:36 UTC
  • mfrom: (761.4.15 ticket-resources-cleanup)
  • Revision ID: ubuntu_ci_bot-20140905200236-d6b6cc2ipu34smi5
[r=Evan Dandrea, PS Jenkins bot] Removing TS opentickets/ and ticketstatus/ resources since they are not particularly useful.

Show diffs side-by-side

added added

removed removed

Lines of Context:
276
276
 
277
277
    def test_get_ticket_api_private(self):
278
278
        self.ticket.private = True
279
 
        self.ticket.current_workflow_step = TicketWorkflowStep.QUEUED
280
279
        self.ticket.save()
281
280
 
282
281
        obj = self.getResource('ticket/')
283
282
        self.assertEqual(0, len(obj['objects']))
284
283
 
 
284
    def test_get_ticket_status_filtering(self):
 
285
        # `Ticket` API supports 'status' filtering.
 
286
        # Exact matching.
 
287
        results = self.getResource(
 
288
            'ticket/?status={}'.format(int(self.ticket.status)))
 
289
        [t] = results['objects']
 
290
        self.assertEqual(self.ticket.title, t['title'])
 
291
        # The django query_spec goodies (exact, lt, lte, gt, gte, etc)
 
292
        # are supported.
 
293
        results = self.getResource(
 
294
            'ticket/?status__lte={}'.format(
 
295
                int(TicketWorkflowStepStatus.INPROGRESS)))
 
296
        [t] = results['objects']
 
297
        self.assertEqual(self.ticket.title, t['title'])
 
298
        # Dataset updates take effect immediately.
 
299
        self.ticket.status = TicketWorkflowStepStatus.COMPLETED
 
300
        self.ticket.save()
 
301
        results = self.getResource(
 
302
            'ticket/?status={}'.format(int(self.ticket.status)))
 
303
        [t] = results['objects']
 
304
        self.assertEqual(self.ticket.title, t['title'])
 
305
        # Empty queryset.
 
306
        results = self.getResource(
 
307
            'ticket/?status={}'.format(int(TicketWorkflowStepStatus.FAILED)))
 
308
        self.assertEqual(0, len(results['objects']))
 
309
 
285
310
    def test_get_sourcepackageupload_api(self):
286
311
        obj = self.getResource('spu/')
287
312
        self.assertEqual(obj['objects'][0], {
296
321
            u'/api/v1/spu/{0}/'.format(self.spu.pk),
297
322
        })
298
323
 
299
 
    def test_get_ticket_status_api(self):
300
 
        obj = self.getResource('ticketstatus/')
301
 
        self.assertEqual(obj['objects'][0], {
302
 
            u'created': unicode(self.ticket.created.strftime(
303
 
                settings.TEST_DATETIME_FORMAT)),
304
 
            u'current_workflow_step': unicode(get_enum_title(
305
 
                self.ticket.current_workflow_step,
306
 
                TicketWorkflowStep)),
307
 
            u'status': unicode(get_enum_title(self.ticket.status,
308
 
                               TicketWorkflowStepStatus)),
309
 
            u'id': self.ticket.pk,
310
 
            u'title': self.ticket.title,
311
 
            u'resource_uri':
312
 
            u'/api/v1/ticketstatus/{0}/'.format(self.ticket.uuid),
313
 
            u'updated': unicode(self.ticket.updated.strftime(
314
 
                settings.TEST_DATETIME_FORMAT)),
315
 
            u'uuid': self.ticket.uuid,
316
 
        })
317
 
 
318
324
    def test_get_subticket_update_status_api(self):
319
325
        obj = self.getResource('updatesubticketstatus/')
320
326
        self.assertEqual(obj['objects'][0], {
397
403
        self.assert_same('subticket_workflow_step_status/')
398
404
 
399
405
 
400
 
class GetOpenTicketsTest(TicketTastypieTestCase):
401
 
    """
402
 
    Test that /opentickets/ returns only in progress and queued tickets.
403
 
    """
404
 
 
405
 
    # patch the send function so that anything saving a QUEUED ticket
406
 
    # won't generate noise
407
 
    @mock.patch('ci_utils.amqp_utils.send')
408
 
    def setUp(self, send):
409
 
        super(GetOpenTicketsTest, self).setUp('/api/v1')
410
 
        self.ticket_1 = mommy.make(
411
 
            'Ticket', current_workflow_step=int(TicketWorkflowStep.NEW))
412
 
        self.ticket_2 = mommy.make(
413
 
            'Ticket', current_workflow_step=int(TicketWorkflowStep.QUEUED))
414
 
        self.ticket_3 = mommy.make(
415
 
            'Ticket', current_workflow_step=int(
416
 
                TicketWorkflowStep.PKG_BUILDING))
417
 
        self.ticket_4 = mommy.make(
418
 
            'Ticket', current_workflow_step=int(
419
 
                TicketWorkflowStep.IMAGE_BUILDING))
420
 
        self.ticket_5 = mommy.make(
421
 
            'Ticket', current_workflow_step=int(
422
 
                TicketWorkflowStep.IMAGE_TESTING))
423
 
        self.ticket_6 = mommy.make(
424
 
            'Ticket', current_workflow_step=int(
425
 
                TicketWorkflowStep.PKG_PUBLISHING))
426
 
        self.ticket_7 = mommy.make(
427
 
            'Ticket', current_workflow_step=int(TicketWorkflowStep.COMPLETED))
428
 
        self.sourcepackage = sourcepackage_recipe.make()
429
 
        self.spu = mommy.make('SourcePackageUpload',
430
 
                              sourcepackage=self.sourcepackage)
431
 
        self.subticket_1 = mommy.make('SubTicket', ticket=self.ticket_1,
432
 
                                      source_package_upload=self.spu)
433
 
        self.artifact_1 = mommy.make('SubTicketArtifact',
434
 
                                     subticket=self.subticket_1)
435
 
        self.subticket_2 = mommy.make('SubTicket', ticket=self.ticket_2,
436
 
                                      source_package_upload=self.spu)
437
 
        self.artifact_2 = mommy.make('SubTicketArtifact',
438
 
                                     subticket=self.subticket_2)
439
 
        self.subticket_3 = mommy.make('SubTicket', ticket=self.ticket_3,
440
 
                                      source_package_upload=self.spu)
441
 
        self.artifact_3 = mommy.make('SubTicketArtifact',
442
 
                                     subticket=self.subticket_3)
443
 
        self.subticket_4 = mommy.make('SubTicket', ticket=self.ticket_4,
444
 
                                      source_package_upload=self.spu)
445
 
        self.artifact_4 = mommy.make('SubTicketArtifact',
446
 
                                     subticket=self.subticket_4)
447
 
        self.subticket_5 = mommy.make('SubTicket', ticket=self.ticket_5,
448
 
                                      source_package_upload=self.spu)
449
 
        self.artifact_5 = mommy.make('SubTicketArtifact',
450
 
                                     subticket=self.subticket_5)
451
 
        self.subticket_6 = mommy.make('SubTicket', ticket=self.ticket_6,
452
 
                                      source_package_upload=self.spu)
453
 
        self.artifact_6 = mommy.make('SubTicketArtifact',
454
 
                                     subticket=self.subticket_6)
455
 
        self.subticket_7 = mommy.make('SubTicket', ticket=self.ticket_7,
456
 
                                      source_package_upload=self.spu)
457
 
        self.artifact_7 = mommy.make('SubTicketArtifact',
458
 
                                     subticket=self.subticket_7)
459
 
 
460
 
    def test_total_open_tickets(self):
461
 
        obj = self.getResource('opentickets/')
462
 
        self.assertEqual(len(obj['objects']), 5)
463
 
 
464
 
    def test_open_ticket_syntax(self):
465
 
        self.ticket_2.current_workflow_step = int(
466
 
            TicketWorkflowStep.COMPLETED)
467
 
        self.ticket_2.save()
468
 
        self.ticket_3.current_workflow_step = int(
469
 
            TicketWorkflowStep.COMPLETED)
470
 
        self.ticket_3.save()
471
 
        self.ticket_4.current_workflow_step = int(
472
 
            TicketWorkflowStep.COMPLETED)
473
 
        self.ticket_4.save()
474
 
        self.ticket_5.current_workflow_step = int(
475
 
            TicketWorkflowStep.COMPLETED)
476
 
        self.ticket_5.save()
477
 
        obj = self.getResource('opentickets/')
478
 
        self.assertEqual(obj['objects'][0], {
479
 
            u'status': unicode(get_enum_title(self.ticket_6.status,
480
 
                               TicketWorkflowStepStatus)),
481
 
            u'created': unicode(self.ticket_6.created.strftime(
482
 
                settings.TEST_DATETIME_FORMAT)),
483
 
            u'current_workflow_step': unicode(get_enum_title(
484
 
                self.ticket_6.current_workflow_step,
485
 
                TicketWorkflowStep)),
486
 
            u'description': unicode(self.ticket_6.description),
487
 
            u'title': unicode(self.ticket_6.title),
488
 
            u'bug_id': self.ticket_6.bug_id,
489
 
            u'owner': unicode(self.ticket_6.owner),
490
 
            u'creator': unicode(self.ticket_6.creator),
491
 
            u'base_image': unicode(self.ticket_6.base_image),
492
 
            u'id': self.ticket_6.pk,
493
 
            u'lander_unit': self.ticket_6.lander_unit,
494
 
            u'master_ppa': unicode(self.ticket_6.master_ppa),
495
 
            u'build_ppa': unicode(self.ticket_6.build_ppa),
496
 
            u'resource_uri': u'/api/v1/opentickets/{0}/'.format(
497
 
                self.ticket_6.uuid),
498
 
            u'series': unicode(self.ticket_6.series),
499
 
            u'private': False,
500
 
            u'updated': unicode(self.ticket_6.updated.strftime(
501
 
                settings.TEST_DATETIME_FORMAT)),
502
 
            u'uuid': self.ticket_6.uuid,
503
 
        })
504
 
 
505
 
    def test_no_open_tickets(self):
506
 
        self.ticket_2.current_workflow_step = int(
507
 
            TicketWorkflowStep.COMPLETED)
508
 
        self.ticket_2.save()
509
 
        self.ticket_3.current_workflow_step = int(
510
 
            TicketWorkflowStep.COMPLETED)
511
 
        self.ticket_3.save()
512
 
        self.ticket_4.current_workflow_step = int(
513
 
            TicketWorkflowStep.COMPLETED)
514
 
        self.ticket_4.save()
515
 
        self.ticket_5.current_workflow_step = int(
516
 
            TicketWorkflowStep.COMPLETED)
517
 
        self.ticket_5.save()
518
 
        self.ticket_6.current_workflow_step = int(
519
 
            TicketWorkflowStep.COMPLETED)
520
 
        self.ticket_6.save()
521
 
        obj = self.getResource('opentickets/')
522
 
        self.assertEqual(len(obj['objects']), 0)
523
 
 
524
 
 
525
406
class TicketPaginationTest(TicketTastypieTestCase):
526
407
 
527
408
    @mock.patch('ci_utils.amqp_utils.send')
533
414
    def test_no_pagination(self):
534
415
        # `PageNumberPaginator` honours the default behaviour.
535
416
        # Full set (default limit is 20).
536
 
        result = self.getResource('ticketstatus/')
 
417
        result = self.getResource('ticket/')
537
418
        self.assertEqual(5, len(result['objects']))
538
419
        # Custom limit.
539
 
        result = self.getResource('ticketstatus/?limit=3')
 
420
        result = self.getResource('ticket/?limit=3')
540
421
        self.assertEqual(3, len(result['objects']))
541
422
        # Custom offset.
542
 
        result = self.getResource('ticketstatus/?offset=3')
 
423
        result = self.getResource('ticket/?offset=3')
543
424
        self.assertEqual(2, len(result['objects']))
544
425
        # Combined offset & limit.
545
 
        result = self.getResource('ticketstatus/?offset=1&limit=1')
 
426
        result = self.getResource('ticket/?offset=1&limit=1')
546
427
        [ticket] = result['objects']
547
428
        self.assertEqual('ticket-2', ticket['title'])
548
429
 
549
430
    def test_page_number(self):
550
431
        # `PageNumberPaginator` supports optional 'page' number
551
432
        # to cope with YUI datasource requests.
552
 
        result = self.getResource('ticketstatus/?page=2&limit=4')
 
433
        result = self.getResource('ticket/?page=2&limit=4')
553
434
        [ticket] = result['objects']
554
435
        self.assertEqual('ticket-5', ticket['title'])
555
436
 
556
437
    def test_offset_gets_precedence_over_page_number(self):
557
438
        # `PageNumberPaginator` gives precedence to 'offset' if it's
558
439
        # provided with 'page' (the latter is ignored.)
559
 
        result = self.getResource('ticketstatus/?page=2&offset=1&limit=4')
 
440
        result = self.getResource('ticket/?page=2&offset=1&limit=4')
560
441
        self.assertEqual(4, len(result['objects']))