475
479
# Somebody unrelated does not
476
480
self.assertEquals(False, archive.checkArchivePermission(somebody))
482
def make_archive_and_active_distroseries(self, purpose=None):
484
purpose = ArchivePurpose.PRIMARY
485
archive = self.factory.makeArchive(purpose=purpose)
486
distroseries = self.factory.makeDistroSeries(
487
distribution=archive.distribution,
488
status=SeriesStatus.DEVELOPMENT)
489
return archive, distroseries
491
def make_person_with_component_permission(self, archive):
492
person = self.factory.makePerson()
493
component = self.factory.makeComponent()
494
removeSecurityProxy(archive).newComponentUploader(
496
return person, component
498
def checkUpload(self, archive, person=None, distroseries=None,
499
sourcepackagename=None, component=None,
500
pocket=None, strict_component=False):
502
person = self.factory.makePerson()
503
if distroseries is None:
504
distroseries = self.factory.makeDistroSeries()
505
if sourcepackagename is None:
506
sourcepackagename = self.factory.makeSourcePackageName()
507
if component is None:
508
component = self.factory.makeComponent()
510
pocket = PackagePublishingPocket.PROPOSED
511
return archive.checkUpload(
512
person, distroseries, sourcepackagename, component, pocket,
513
strict_component=strict_component)
478
515
def test_checkUpload_partner_invalid_pocket(self):
479
516
# Partner archives only have release and proposed pockets
480
archive = self.factory.makeArchive(purpose=ArchivePurpose.PARTNER)
481
self.assertIsInstance(archive.checkUpload(self.factory.makePerson(),
482
self.factory.makeDistroSeries(),
483
self.factory.makeSourcePackageName(),
484
self.factory.makeComponent(),
485
PackagePublishingPocket.UPDATES),
486
InvalidPocketForPartnerArchive)
517
archive, distroseries = self.make_archive_and_active_distroseries(
518
purpose=ArchivePurpose.PARTNER)
519
self.assertIsInstance(
521
archive, distroseries=distroseries,
522
pocket=PackagePublishingPocket.UPDATES),
523
InvalidPocketForPartnerArchive)
488
525
def test_checkUpload_ppa_invalid_pocket(self):
489
526
# PPA archives only have release pockets
490
archive = self.factory.makeArchive(purpose=ArchivePurpose.PPA)
491
self.assertIsInstance(archive.checkUpload(self.factory.makePerson(),
492
self.factory.makeDistroSeries(),
493
self.factory.makeSourcePackageName(),
494
self.factory.makeComponent(),
495
PackagePublishingPocket.PROPOSED),
527
archive, distroseries = self.make_archive_and_active_distroseries(
528
purpose=ArchivePurpose.PPA)
529
self.assertIsInstance(
531
archive, distroseries=distroseries,
532
pocket=PackagePublishingPocket.PROPOSED),
535
def test_checkUpload_invalid_pocket_for_series_state(self):
536
archive, distroseries = self.make_archive_and_active_distroseries(
537
purpose=ArchivePurpose.PRIMARY)
538
self.assertIsInstance(
540
archive, distroseries=distroseries,
541
pocket=PackagePublishingPocket.PROPOSED),
542
CannotUploadToPocket)
544
def test_checkUpload_disabled_archive(self):
545
archive, distroseries = self.make_archive_and_active_distroseries(
546
purpose=ArchivePurpose.PRIMARY)
547
removeSecurityProxy(archive).disable()
548
self.assertIsInstance(
550
archive, distroseries=distroseries,
551
pocket=PackagePublishingPocket.RELEASE),
554
def test_checkUpload_ppa_owner(self):
555
person = self.factory.makePerson()
556
archive = self.factory.makeArchive(
557
purpose=ArchivePurpose.PPA, owner=person)
561
archive, person=person,
562
pocket=PackagePublishingPocket.RELEASE))
564
def test_checkUpload_ppa_with_permission(self):
565
archive = self.factory.makeArchive(purpose=ArchivePurpose.PPA)
566
person = self.factory.makePerson()
567
removeSecurityProxy(archive).newComponentUploader(person, "main")
568
# component is ignored
572
archive, person=person,
573
component=self.factory.makeComponent(name="universe"),
574
pocket=PackagePublishingPocket.RELEASE))
576
def test_checkUpload_ppa_with_no_permission(self):
577
archive = self.factory.makeArchive(purpose=ArchivePurpose.PPA)
578
person = self.factory.makePerson()
579
self.assertIsInstance(
581
person, self.factory.makeDistroSeries(),
582
self.factory.makeSourcePackageName(),
583
self.factory.makeComponent(),
584
PackagePublishingPocket.RELEASE),
587
def test_checkUpload_copy_archive_no_permission(self):
588
archive, distroseries = self.make_archive_and_active_distroseries(
589
purpose=ArchivePurpose.COPY)
590
sourcepackagename = self.factory.makeSourcePackageName()
591
person = self.factory.makePerson()
592
removeSecurityProxy(archive).newPackageUploader(
593
person, sourcepackagename)
594
self.assertIsInstance(
596
archive, person=person, distroseries=distroseries,
597
sourcepackagename=sourcepackagename,
598
pocket=PackagePublishingPocket.RELEASE),
601
def test_checkUpload_package_permission(self):
602
archive, distroseries = self.make_archive_and_active_distroseries(
603
purpose=ArchivePurpose.PRIMARY)
604
sourcepackagename = self.factory.makeSourcePackageName()
605
person = self.factory.makePerson()
606
removeSecurityProxy(archive).newPackageUploader(
607
person, sourcepackagename)
611
archive, person=person, distroseries=distroseries,
612
sourcepackagename=sourcepackagename,
613
pocket=PackagePublishingPocket.RELEASE))
615
def make_person_with_packageset_permission(self, archive, distroseries,
617
packageset = self.factory.makePackageset(
618
distroseries=distroseries, packages=packages)
619
person = self.factory.makePerson()
620
techboard = getUtility(ILaunchpadCelebrities).ubuntu_techboard
621
with person_logged_in(techboard):
622
archive.newPackagesetUploader(person, packageset)
623
return person, packageset
625
def test_checkUpload_packageset_permission(self):
626
archive, distroseries = self.make_archive_and_active_distroseries(
627
purpose=ArchivePurpose.PRIMARY)
628
sourcepackagename = self.factory.makeSourcePackageName()
629
person, packageset = self.make_person_with_packageset_permission(
630
archive, distroseries, packages=[sourcepackagename])
634
archive, person=person, distroseries=distroseries,
635
sourcepackagename=sourcepackagename,
636
pocket=PackagePublishingPocket.RELEASE))
638
def test_checkUpload_component_permission(self):
639
archive, distroseries = self.make_archive_and_active_distroseries(
640
purpose=ArchivePurpose.PRIMARY)
641
sourcepackagename = self.factory.makeSourcePackageName()
642
person, component = self.make_person_with_component_permission(
647
archive, person=person, distroseries=distroseries,
648
sourcepackagename=sourcepackagename, component=component,
649
pocket=PackagePublishingPocket.RELEASE))
651
def test_checkUpload_no_permissions(self):
652
archive, distroseries = self.make_archive_and_active_distroseries(
653
purpose=ArchivePurpose.PRIMARY)
654
sourcepackagename = self.factory.makeSourcePackageName()
655
person = self.factory.makePerson()
656
self.assertIsInstance(
658
archive, person=person, distroseries=distroseries,
659
sourcepackagename=sourcepackagename,
660
pocket=PackagePublishingPocket.RELEASE),
663
def test_checkUpload_insufficient_permissions(self):
664
archive, distroseries = self.make_archive_and_active_distroseries(
665
purpose=ArchivePurpose.PRIMARY)
666
sourcepackagename = self.factory.makeSourcePackageName()
667
person, packageset = self.make_person_with_packageset_permission(
668
archive, distroseries)
669
self.assertIsInstance(
671
archive, person=person, distroseries=distroseries,
672
sourcepackagename=sourcepackagename,
673
pocket=PackagePublishingPocket.RELEASE),
674
InsufficientUploadRights)
676
def test_checkUpload_without_strict_component(self):
677
archive, distroseries = self.make_archive_and_active_distroseries(
678
purpose=ArchivePurpose.PRIMARY)
679
sourcepackagename = self.factory.makeSourcePackageName()
680
person, component = self.make_person_with_component_permission(
682
other_component = self.factory.makeComponent()
686
archive, person=person, distroseries=distroseries,
687
sourcepackagename=sourcepackagename,
688
component=other_component,
689
pocket=PackagePublishingPocket.RELEASE,
690
strict_component=False))
692
def test_checkUpload_with_strict_component(self):
693
archive, distroseries = self.make_archive_and_active_distroseries(
694
purpose=ArchivePurpose.PRIMARY)
695
sourcepackagename = self.factory.makeSourcePackageName()
696
person, component = self.make_person_with_component_permission(
698
other_component = self.factory.makeComponent()
699
self.assertIsInstance(
701
archive, person=person, distroseries=distroseries,
702
sourcepackagename=sourcepackagename,
703
component=other_component,
704
pocket=PackagePublishingPocket.RELEASE,
705
strict_component=True),
706
NoRightsForComponent)
708
def make_package_to_upload(self, distroseries):
709
sourcepackagename = self.factory.makeSourcePackageName()
710
suitesourcepackage = self.factory.makeSuiteSourcePackage(
711
pocket=PackagePublishingPocket.RELEASE,
712
sourcepackagename=sourcepackagename,
713
distroseries=distroseries)
714
return suitesourcepackage
498
716
def test_canUploadSuiteSourcePackage_invalid_pocket(self):
499
717
# Test that canUploadSuiteSourcePackage calls checkUpload for