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))
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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()
Ejemplo n.º 4
0
    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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
    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)
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
0
    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()
Ejemplo n.º 10
0
    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))
Ejemplo n.º 11
0
    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')
Ejemplo n.º 12
0
    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()
Ejemplo n.º 13
0
    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'
        )