def test_validate_creation(self, name, data, is_file, has_terms, side_effect=None, err_type=None, err_msg=None): self._mock_validator_imports(product_validator) if side_effect is not None: side_effect(self) error = None try: validator = product_validator.ProductValidator() validator.validate(data['action'], self._provider, data['product']) except Exception as e: error = e if err_type is None: self.assertTrue(error is None) # Check calls product_validator.ResourcePlugin.objects.get.assert_called_once_with(name='Widget') if is_file: product_validator.Resource.objects.get.assert_called_once_with(download_link=PRODUCT_LOCATION) self.assertEquals(product_validator.Resource.objects.get().has_terms, has_terms) product_validator.Resource.objects.get().save.assert_called_once_with() else: product_validator.Resource.objects.create.assert_called_once_with( has_terms=has_terms, resource_path='', download_link=PRODUCT_LOCATION, provider=self._provider, content_type='application/x-widget' ) else: self.assertTrue(isinstance(error, err_type)) self.assertEquals(err_msg, unicode(e))
def test_bundle_creation(self, name, asset_mocker, created=True): self._mock_validator_imports(product_validator) assets = asset_mocker(self) expected_assets = [asset[0].pk for asset in assets if len(asset)] product_validator.Resource.objects.filter.side_effect = assets validator = product_validator.ProductValidator() validator.validate(BASIC_BUNDLE_CREATION['action'], self._provider, BASIC_BUNDLE_CREATION['product']) # Validate filter calls self.assertEquals([ call(product_id=BASIC_BUNDLE_CREATION['product']['bundledProductSpecification'][0]['id']), call(product_id=BASIC_BUNDLE_CREATION['product']['bundledProductSpecification'][1]['id']) ], product_validator.Resource.objects.filter.call_args_list) # Check resource creation if created: product_validator.Resource.objects.create.assert_called_once_with( has_terms=False, resource_path='', download_link='', provider=self._provider, content_type='bundle', bundled_assets=expected_assets ) else: self.assertEquals(0, product_validator.Resource.objects.call_count)
def test_attach_upgrade(self): self._mock_validator_imports(product_validator) self._mock_upgrading_asset(UPGRADE_PRODUCT['product']['version']) doc_lock = self._mock_document_lock() # Mock inventory upgrader class product_validator.InventoryUpgrader = MagicMock() validator = product_validator.ProductValidator() validator.validate('attach_upgrade', self._provider, UPGRADE_PRODUCT['product']) self.assertEquals('attached', self._asset_instance.state) product_validator.InventoryUpgrader.assert_called_once_with( self._asset_instance) product_validator.InventoryUpgrader().start.assert_called_once_with() self._asset_instance.save.assert_called_once_with() product_validator.DocumentLock.assert_called_once_with( 'wstore_resource', self._asset_instance.pk, 'asset') doc_lock.wait_document.assert_called_once_with() doc_lock.unlock_document.assert_called_once_with()
def test_validate_physical(self, name, product): self._mock_validator_imports(product_validator) validator = product_validator.ProductValidator() validator.validate('create', self._provider, product) self.assertEquals(0, product_validator.ResourcePlugin.objects.get.call_count) self.assertEquals(0, product_validator.Resource.objects.get.call_count) self.assertEquals(0, product_validator.Resource.objects.create.call_count)
def test_validate_upgrade_missing_info(self, name, data): self._mock_validator_imports(product_validator) self._asset_instance.state = 'upgrading' validator = product_validator.ProductValidator() validator.validate('upgrade', self._provider, data) self.assertEquals('upgrading', self._asset_instance.state)
def test_attach_upgrade_non_digital(self): self._mock_validator_imports(product_validator) validator = product_validator.ProductValidator() validator.validate('attach_upgrade', self._provider, {'version': '1.0', 'productSpecCharacteristic':[]}) # The method did nothing self.assertEquals(0, product_validator.ResourcePlugin.objects.get.call_count)
def test_attach_info(self, name, product_spec, is_digital=False, is_attached=False, is_bundle=False, filter_mock=None): self._mock_validator_imports(product_validator) if filter_mock is not None: filter_mock(self) validator = product_validator.ProductValidator() digital_chars = ('type', 'media', 'http://location', '61004aba5e05acc115f022f0') if is_digital else (None, None, None, None) validator.parse_characteristics = MagicMock(return_value=digital_chars) validator.validate('attach', self._provider, product_spec) # Check calls validator.parse_characteristics.assert_called_once_with(product_spec) if is_digital: product_validator.Resource.objects.get.assert_called_once_with( pk=ObjectId(digital_chars[3])) self.assertEquals( 0, product_validator.Resource.objects.filter.call_count) if is_bundle: self.assertEquals([ call(product_id=None, provider=self._provider, content_type='bundle', resource_path='', download_link=''), call(product_id='1'), call(product_id='2') ], product_validator.Resource.objects.filter.call_args_list) self.assertEquals( 0, product_validator.Resource.objects.get.call_count) if is_attached: self.assertEquals(product_spec['id'], self._asset_instance.product_id) self.assertEquals(product_spec['version'], self._asset_instance.version) self.assertEquals(digital_chars[0], self._asset_instance.resource_type) self.assertEquals('attached', self._asset_instance.state) self._asset_instance.save.assert_called_once_with() else: self.assertEquals(0, self._asset_instance.save.call_count)
def test_rollback_handler(self, name, action, data, mocker, test_validator): self._mock_validator_imports(product_validator) if mocker is not None: mocker(self) validator = product_validator.ProductValidator() validator.validate(action, self._provider, data) test_validator(self)
def test_validate_creation_registered_file(self): self._mock_validator_imports(product_validator) validator = product_validator.ProductValidator() validator.validate('create', self._provider, BASIC_PRODUCT['product']) product_validator.ResourcePlugin.objects.get.assert_called_once_with(name='Widget') product_validator.Resource.objects.filter.assert_called_once_with(download_link=PRODUCT_LOCATION) self.assertFalse(product_validator.Resource.objects.get().has_terms) product_validator.Resource.objects.get().save.assert_called_once_with()
def _validate_bundle_creation_error(self, product_request, msg, side_effect=None): self._mock_validator_imports(product_validator) if side_effect is not None: side_effect() try: validator = product_validator.ProductValidator() validator.validate(product_request['action'], self._provider, product_request['product']) except ProductError as e: error = e self.assertEquals(msg, unicode(error))
def test_validate_creation_new_url(self): self._mock_validator_imports(product_validator) product_validator.Resource.objects.filter.return_value = [] self._plugin_instance.formats = ["URL"] validator = product_validator.ProductValidator() validator.validate('create', self._provider, TERMS_PRODUCT['product']) product_validator.Resource.objects.create.assert_called_once_with( has_terms=True, resource_path='', download_link=PRODUCT_LOCATION, provider=self._provider, content_type='application/x-widget')
def test_validate_upgrade(self): self._mock_validator_imports(product_validator) self._mock_upgrading_asset('') doc_lock = self._mock_document_lock() validator = product_validator.ProductValidator() validator.validate('upgrade', self._provider, UPGRADE_PRODUCT['product']) self.assertEquals(UPGRADE_PRODUCT['product']['version'], self._asset_instance.version) self.assertEquals('upgrading', self._asset_instance.state) self._asset_instance.save.assert_called_once_with() product_validator.DocumentLock.assert_called_once_with('wstore_resource', self._asset_instance.pk, 'asset') doc_lock.wait_document.assert_called_once_with() doc_lock.unlock_document.assert_called_once_with()
def test_validate_error(self, name, data, side_effect, err_type, err_msg): self._mock_validator_imports(product_validator) self._mock_document_lock() if side_effect is not None: side_effect(self) error = None try: validator = product_validator.ProductValidator() validator.validate(data['action'], self._provider, data['product']) except Exception as e: error = e self.assertTrue(isinstance(error, err_type)) self.assertEquals(err_msg, unicode(error))
def test_validate_detached(self): self._mock_validator_imports(product_validator) self._plugin_instance.formats = ["URL"] res1 = MagicMock(product_id=None) res2 = MagicMock(product_id=None) product_validator.Resource.objects.filter.return_value = [res1, res2] validator = product_validator.ProductValidator() validator.validate('create', self._provider, BASIC_PRODUCT['product']) res1.delete.assert_called_once_with() res2.delete.assert_called_once_with() product_validator.Resource.objects.create.assert_called_once_with( has_terms=False, resource_path='', download_link=PRODUCT_LOCATION, provider=self._provider, content_type='application/x-widget' )