def test_disabled_component_comma_cleaning(self): package_repository = factory.make_PackageRepository( default=True, components=[] ) form = PackageRepositoryForm( instance=package_repository, data={"disabled_components": ["universe,multiverse"]}, ) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) repo = form.save(endpoint, request) self.assertItemsEqual( ["universe", "multiverse"], repo.disabled_components ) form = PackageRepositoryForm( instance=package_repository, data={"disabled_components": ["universe, multiverse"]}, ) repo = form.save(endpoint, request) self.assertItemsEqual( ["universe", "multiverse"], repo.disabled_components ) form = PackageRepositoryForm( instance=package_repository, data={"disabled_components": ["universe"]}, ) repo = form.save(endpoint, request) self.assertItemsEqual(["universe"], repo.disabled_components)
def test__arches_comma_cleaning(self): package_repository = factory.make_PackageRepository() form = PackageRepositoryForm(instance=package_repository, data={'arches': ['i386,armhf']}) repo = form.save() self.assertItemsEqual(['i386', 'armhf'], repo.arches) form = PackageRepositoryForm(instance=package_repository, data={'arches': ['i386, armhf']}) repo = form.save() self.assertItemsEqual(['i386', 'armhf'], repo.arches) form = PackageRepositoryForm(instance=package_repository, data={'arches': ['i386']}) repo = form.save() self.assertItemsEqual(['i386'], repo.arches)
def test__component_comma_cleaning(self): package_repository = factory.make_PackageRepository() form = PackageRepositoryForm(instance=package_repository, data={'components': ['val1,val2']}) repo = form.save() self.assertItemsEqual(['val1', 'val2'], repo.components) form = PackageRepositoryForm(instance=package_repository, data={'components': ['val1, val2']}) repo = form.save() self.assertItemsEqual(['val1', 'val2'], repo.components) form = PackageRepositoryForm(instance=package_repository, data={'components': ['val1']}) repo = form.save() self.assertItemsEqual(['val1'], repo.components)
def create(Self, request): """Create a Package Repository. :param name: The name of the Package Repository. :type name: unicode :param url: The url of the Package Repository. :type url: unicode :param distributions: Which package distributions to include. :type distributions: unicode :param disabled_pockets: The list of pockets to disable. :param disabled_components: The list of components to disable. Only applicable to the default Ubuntu repositories. :param components: The list of components to enable. Only applicable to custom repositories. :param arches: The list of supported architectures. :param key: The authentication key to use with the repository. :type key: unicode :param enabled: Whether or not the repository is enabled. :type enabled: boolean """ form = PackageRepositoryForm(data=request.data) if form.is_valid(): return form.save(ENDPOINT.API, request) else: raise MAASAPIValidationError(form.errors)
def test__creates_package_repository(self): repo = factory.make_PackageRepository() params = self.make_valid_repo_params(repo) form = PackageRepositoryForm(data=params) self.assertTrue(form.is_valid(), form.errors) package_repository = form.save() self.assertAttributes(package_repository, params)
def update(self, params): """Update the object from params iff admin.""" if not reload_object(self.user).is_superuser: raise HandlerPermissionError() obj = self.get_object(params) request = HttpRequest() request.user = self.user # Update by using form. form = PackageRepositoryForm(instance=obj, request=request, data=params) if form.is_valid(): try: obj = form.save(ENDPOINT.UI, request) except ValidationError as e: raise HandlerValidationError(e.error_dict) return self.full_dehydrate(obj) else: raise HandlerValidationError(form.errors) # Update by updating the fields on the object. obj = self.full_hydrate(obj, params) obj.save() return self.full_dehydrate(obj)
def test__disabled_pocket_comma_cleaning(self): package_repository = factory.make_PackageRepository() form = PackageRepositoryForm( instance=package_repository, data={'disabled_pockets': ['updates,backports']}) repo = form.save() self.assertItemsEqual(['updates', 'backports'], repo.disabled_pockets) form = PackageRepositoryForm( instance=package_repository, data={'disabled_pockets': ['updates, backports']}) repo = form.save() self.assertItemsEqual(['updates', 'backports'], repo.disabled_pockets) form = PackageRepositoryForm(instance=package_repository, data={'disabled_pockets': ['updates']}) repo = form.save() self.assertItemsEqual(['updates'], repo.disabled_pockets)
def create(self, params): """Create the object from params iff admin.""" if not reload_object(self.user).is_superuser: raise HandlerPermissionError() request = HttpRequest() request.user = self.user # Create by using form. form = PackageRepositoryForm(request=request, data=params) if form.is_valid(): try: obj = form.save(ENDPOINT.UI, request) except ValidationError as e: try: raise HandlerValidationError(e.message_dict) except AttributeError: raise HandlerValidationError({"__all__": e.message}) return self.full_dehydrate(obj) else: raise HandlerValidationError(form.errors) # Create by updating the fields on the object. obj = self._meta.object_class() obj = self.full_hydrate(obj, params) obj.save() return self.full_dehydrate(obj)
def test__updates_url(self): package_repository = factory.make_PackageRepository() url = factory.make_url(scheme='http') form = PackageRepositoryForm(instance=package_repository, data={'url': url}) self.assertTrue(form.is_valid(), form.errors) package_repository = form.save() self.assertEqual(url, package_repository.url)
def test__component_comma_cleaning(self): package_repository = factory.make_PackageRepository() form = PackageRepositoryForm(instance=package_repository, data={'components': ['val1,val2']}) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) repo = form.save(endpoint, request) self.assertItemsEqual(['val1', 'val2'], repo.components) form = PackageRepositoryForm(instance=package_repository, data={'components': ['val1, val2']}) repo = form.save(endpoint, request) self.assertItemsEqual(['val1', 'val2'], repo.components) form = PackageRepositoryForm(instance=package_repository, data={'components': ['val1']}) repo = form.save(endpoint, request) self.assertItemsEqual(['val1'], repo.components)
def test__arches_comma_cleaning(self): package_repository = factory.make_PackageRepository() form = PackageRepositoryForm(instance=package_repository, data={'arches': ['i386,armhf']}) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) repo = form.save(endpoint, request) self.assertItemsEqual(['i386', 'armhf'], repo.arches) form = PackageRepositoryForm(instance=package_repository, data={'arches': ['i386, armhf']}) repo = form.save(endpoint, request) self.assertItemsEqual(['i386', 'armhf'], repo.arches) form = PackageRepositoryForm(instance=package_repository, data={'arches': ['i386']}) repo = form.save(endpoint, request) self.assertItemsEqual(['i386'], repo.arches)
def test__updates_enabled(self): package_repository = factory.make_PackageRepository() enabled = not package_repository.enabled form = PackageRepositoryForm(instance=package_repository, data={'enabled': enabled}) self.assertTrue(form.is_valid(), form.errors) package_repository = form.save() self.assertEqual(enabled, package_repository.enabled)
def test_distribution_comma_cleaning(self): package_repository = factory.make_PackageRepository() form = PackageRepositoryForm(instance=package_repository, data={"distributions": ["val1,val2"]}) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) repo = form.save(endpoint, request) self.assertItemsEqual(["val1", "val2"], repo.distributions) form = PackageRepositoryForm(instance=package_repository, data={"distributions": ["val1, val2"]}) repo = form.save(endpoint, request) self.assertItemsEqual(["val1", "val2"], repo.distributions) form = PackageRepositoryForm(instance=package_repository, data={"distributions": ["val1"]}) repo = form.save(endpoint, request) self.assertItemsEqual(["val1"], repo.distributions)
def test__updates_name(self): package_repository = factory.make_PackageRepository() name = factory.make_name('name') form = PackageRepositoryForm(instance=package_repository, data={'name': name}) self.assertTrue(form.is_valid(), form.errors) package_repository = form.save() self.assertEqual(name, package_repository.name)
def test__create_package_repository_defaults_to_enabled(self): repo = factory.make_PackageRepository() params = self.make_valid_repo_params(repo) del params['enabled'] form = PackageRepositoryForm(data=params) self.assertTrue(form.is_valid(), form.errors) package_repository = form.save() self.assertAttributes(package_repository, params) self.assertTrue(package_repository.enabled)
def update(self, request, id): """@description-title Update a package repository @description Update the package repository with the given id. @param (int) "{id}" [required=true] A package repository id. @param (string) "name" [required=false] The name of the package repository. @param (string) "url" [required=false] The url of the package repository. @param (string) "distributions" [required=false] Which package distributions to include. @param (string) "disabled_pockets" [required=false] The list of pockets to disable. @param (string) "disabled_components" [required=false] The list of components to disable. Only applicable to the default Ubuntu repositories. @param (string) "disable_sources" [required=false] Disable deb-src lines. @param (string) "components" [required=false] The list of components to enable. Only applicable to custom repositories. @param (string) "arches" [required=false] The list of supported architectures. @param (string) "key" [required=false] The authentication key to use with the repository. @param (boolean) "enabled" [required=false] Whether or not the repository is enabled. @success (http-status-code) "server-success" 200 @success (json) "success-json" A JSON object containing information about the updated package repository. @success-example "success-json" [exkey=pkg-repos-update] placeholder text @error (http-status-code) "404" 404 @error (content) "not-found" The requested package repository is not found. @error-example "not-found" Not Found """ package_repository = PackageRepository.objects.get_object_or_404(id) form = PackageRepositoryForm(instance=package_repository, data=request.data) if form.is_valid(): return form.save(ENDPOINT.API, request) else: raise MAASAPIValidationError(form.errors)
def test__disabled_pocket_comma_cleaning(self): package_repository = factory.make_PackageRepository() form = PackageRepositoryForm( instance=package_repository, data={'disabled_pockets': ['updates,backports']}) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) repo = form.save(endpoint, request) self.assertItemsEqual(['updates', 'backports'], repo.disabled_pockets) form = PackageRepositoryForm( instance=package_repository, data={'disabled_pockets': ['updates, backports']}) repo = form.save(endpoint, request) self.assertItemsEqual(['updates', 'backports'], repo.disabled_pockets) form = PackageRepositoryForm(instance=package_repository, data={'disabled_pockets': ['updates']}) repo = form.save(endpoint, request) self.assertItemsEqual(['updates'], repo.disabled_pockets)
def test__updates_arches(self): package_repository = factory.make_PackageRepository() arch1 = random.choice(PackageRepository.KNOWN_ARCHES) arch2 = random.choice(PackageRepository.KNOWN_ARCHES) arch3 = random.choice(PackageRepository.KNOWN_ARCHES) form = PackageRepositoryForm(instance=package_repository, data={'arches': [arch1, arch2, arch3]}) self.assertTrue(form.is_valid(), form.errors) package_repository = form.save() self.assertEqual([arch1, arch2, arch3], package_repository.arches)
def test__creates_package_repository_defaults_main_arches(self): repo = factory.make_PackageRepository(arches=[]) params = self.make_valid_repo_params(repo) del params['arches'] form = PackageRepositoryForm(data=params) self.assertTrue(form.is_valid(), form.errors) package_repository = form.save() self.assertAttributes(package_repository, params) self.assertItemsEqual(package_repository.arches, PackageRepository.MAIN_ARCHES)
def test__disabled_component_comma_cleaning(self): package_repository = factory.make_PackageRepository(default=True, components=[]) form = PackageRepositoryForm( instance=package_repository, data={'disabled_components': ['universe,multiverse']}) repo = form.save() self.assertItemsEqual(['universe', 'multiverse'], repo.disabled_components) form = PackageRepositoryForm( instance=package_repository, data={'disabled_components': ['universe, multiverse']}) repo = form.save() self.assertItemsEqual(['universe', 'multiverse'], repo.disabled_components) form = PackageRepositoryForm( instance=package_repository, data={'disabled_components': ['universe']}) repo = form.save() self.assertItemsEqual(['universe'], repo.disabled_components)
def test__updates_enabled(self): package_repository = factory.make_PackageRepository() enabled = not package_repository.enabled form = PackageRepositoryForm(instance=package_repository, data={'enabled': enabled}) self.assertTrue(form.is_valid(), form.errors) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) package_repository = form.save(endpoint, request) self.assertEqual(enabled, package_repository.enabled)
def test__updates_url(self): package_repository = factory.make_PackageRepository() url = factory.make_url(scheme='http') form = PackageRepositoryForm(instance=package_repository, data={'url': url}) self.assertTrue(form.is_valid(), form.errors) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) package_repository = form.save(endpoint, request) self.assertEqual(url, package_repository.url)
def test_default_ports_package_repository_arches(self): package_repository = PackageRepository.objects.get( name="ports_archive") form = PackageRepositoryForm(instance=package_repository, data={"arches": []}) self.assertTrue(form.is_valid(), form.errors) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) package_repository = form.save(endpoint, request) self.assertItemsEqual(package_repository.arches, PackageRepository.PORTS_ARCHES)
def test__create_package_repository_defaults_to_enabled(self): repo = factory.make_PackageRepository() params = self.make_valid_repo_params(repo) del params['enabled'] form = PackageRepositoryForm(data=params) self.assertTrue(form.is_valid(), form.errors) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) package_repository = form.save(endpoint, request) self.assertAttributes(package_repository, params) self.assertTrue(package_repository.enabled)
def test__updates_arches(self): package_repository = factory.make_PackageRepository() arch1 = random.choice(PackageRepository.KNOWN_ARCHES) arch2 = random.choice(PackageRepository.KNOWN_ARCHES) arch3 = random.choice(PackageRepository.KNOWN_ARCHES) form = PackageRepositoryForm(instance=package_repository, data={'arches': [arch1, arch2, arch3]}) self.assertTrue(form.is_valid(), form.errors) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) package_repository = form.save(endpoint, request) self.assertEqual([arch1, arch2, arch3], package_repository.arches)
def test__creates_package_repository_defaults_main_arches(self): repo = factory.make_PackageRepository(arches=[]) params = self.make_valid_repo_params(repo) del params['arches'] form = PackageRepositoryForm(data=params) self.assertTrue(form.is_valid(), form.errors) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) package_repository = form.save(endpoint, request) self.assertAttributes(package_repository, params) self.assertItemsEqual(package_repository.arches, PackageRepository.MAIN_ARCHES)
def test__creates_package_repository(self): repo = factory.make_PackageRepository() params = self.make_valid_repo_params(repo) form = PackageRepositoryForm(data=params) self.assertTrue(form.is_valid(), form.errors) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) package_repository = form.save(endpoint, request) self.assertAttributes(package_repository, params) event = Event.objects.get(type__level=AUDIT) self.assertIsNotNone(event) self.assertEqual( event.description, "Created package repository '%s'." % package_repository.name)
def test__updates_disable_sources(self): package_repository = factory.make_PackageRepository() form = PackageRepositoryForm(instance=package_repository, data={'disable_sources': True}) self.assertTrue(form.is_valid(), form.errors) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) package_repository = form.save(endpoint, request) self.assertTrue(package_repository.disable_sources) event = Event.objects.get(type__level=AUDIT) self.assertIsNotNone(event) self.assertEqual( event.description, "Updated package repository '%s'." % (package_repository.name))
def test__updates_name(self): package_repository = factory.make_PackageRepository() name = factory.make_name('name') form = PackageRepositoryForm(instance=package_repository, data={'name': name}) self.assertTrue(form.is_valid(), form.errors) request = HttpRequest() request.user = factory.make_User() endpoint = factory.pick_choice(ENDPOINT_CHOICES) package_repository = form.save(endpoint, request) self.assertEqual(name, package_repository.name) event = Event.objects.get(type__level=AUDIT) self.assertIsNotNone(event) self.assertEqual( event.description, "Package repository '%s'" % package_repository.name + " updated by '%(username)s'.")
def create(Self, request): """@description-title Create a package repository @description Create a new package repository. @param (string) "name" [required=true] The name of the package repository. @param (string) "url" [required=true] The url of the package repository. @param (string) "distributions" [required=false] Which package distributions to include. @param (string) "disabled_pockets" [required=false] The list of pockets to disable. @param (string) "disabled_components" [required=false] The list of components to disable. Only applicable to the default Ubuntu repositories. @param (string) "components" [required=false] The list of components to enable. Only applicable to custom repositories. @param (string) "arches" [required=false] The list of supported architectures. @param (string) "key" [required=false] The authentication key to use with the repository. @param (boolean) "enabled" [required=false] Whether or not the repository is enabled. @success (http-status-code) "server-success" 200 @success (json) "success-json" A JSON object containing information about the new package repository. @success-example "success-json" [exkey=pkg-repos-update] placeholder text """ form = PackageRepositoryForm(data=request.data) if form.is_valid(): return form.save(ENDPOINT.API, request) else: raise MAASAPIValidationError(form.errors)