示例#1
0
    def test_upload_sign_error_existing(self, sign_app_mock):
        sign_app_mock.side_effect = SigningError
        langpack = self.create_langpack()
        eq_(LangPack.objects.count(), 1)
        original_uuid = langpack.uuid
        original_file_path = langpack.file_path
        original_file_version = langpack.file_version
        original_version = langpack.version
        # create_langpack() doesn't create a fake file, let's add one.
        with public_storage.open(langpack.file_path, 'w') as f:
            f.write('.')
        upload = self.upload('langpack')
        with self.assertRaises(SigningError):
            LangPack.from_upload(upload, instance=langpack)
        # Test that we didn't delete the upload file
        ok_(private_storage.exists(upload.path))
        # Test that we didn't delete the existing filename or alter the
        # existing langpack in the database.
        eq_(LangPack.objects.count(), 1)
        langpack.reload()
        eq_(original_uuid, langpack.uuid)
        eq_(langpack.file_path, original_file_path)
        eq_(original_file_version, langpack.file_version)
        eq_(original_version, langpack.version)
        ok_(public_storage.exists(langpack.file_path))

        # Cleanup
        public_storage.delete(langpack.file_path)
示例#2
0
    def test_upload_sign_error_existing(self, sign_app_mock):
        sign_app_mock.side_effect = SigningError
        langpack = self.create_langpack()
        eq_(LangPack.objects.count(), 1)
        original_uuid = langpack.uuid
        original_file_path = langpack.file_path
        original_file_version = langpack.file_version
        original_version = langpack.version
        # create_langpack() doesn't create a fake file, let's add one.
        with public_storage.open(langpack.file_path, 'w') as f:
            f.write('.')
        upload = self.upload('langpack')
        with self.assertRaises(SigningError):
            LangPack.from_upload(upload, instance=langpack)
        # Test that we didn't delete the upload file
        ok_(private_storage.exists(upload.path))
        # Test that we didn't delete the existing filename or alter the
        # existing langpack in the database.
        eq_(LangPack.objects.count(), 1)
        langpack.reload()
        eq_(original_uuid, langpack.uuid)
        eq_(langpack.file_path, original_file_path)
        eq_(original_file_version, langpack.file_version)
        eq_(original_version, langpack.version)
        ok_(public_storage.exists(langpack.file_path))

        # Cleanup
        public_storage.delete(langpack.file_path)
示例#3
0
 def test_upload_language_validation(self, get_json_data_mock):
     upload = self.upload('langpack')
     get_json_data_mock.return_value = {
         'name': 'Portuguese Langpack',
         'developer': {
             'name': 'Mozilla'
         },
         'role': 'langpack',
         'languages-provided': {
             'pt-BR': {}
         },
         'languages-target': {
             'app://*.gaiamobile.org/manifest.webapp': '2.2'
         },
         'version': '0.1'
     }
     langpack = LangPack.from_upload(upload)
     ok_(langpack.pk)
     eq_(langpack.language, 'pt-BR')
     get_json_data_mock.return_value['languages-provided'] = {
         'invalid-lang': {}
     }
     expected = [u"Value 'invalid-lang' is not a valid choice."]
     with self.assertRaises(ValidationError) as e:
         LangPack.from_upload(upload)
     eq_(e.exception.messages, expected)
示例#4
0
 def test_manifest_url(self):
     langpack = LangPack(pk='12345678123456781234567812345678')
     eq_(langpack.manifest_url, '')  # Inactive langpack.
     langpack.active = True
     ok_(
         langpack.manifest_url.endswith(
             '/12345678-1234-5678-1234-567812345678/manifest.webapp'))
示例#5
0
 def test_upload_language_validation(self, get_json_data_mock):
     upload = self.upload('langpack')
     get_json_data_mock.return_value = {
         'name': 'Portuguese Langpack',
         'developer': {
             'name': 'Mozilla'
         },
         'role': 'langpack',
         'languages-provided': {
             'pt-BR': {}
         },
         'languages-target': {
             'app://*.gaiamobile.org/manifest.webapp': '2.2'
         },
         'version': '0.1'
     }
     langpack = LangPack.from_upload(upload)
     ok_(langpack.pk)
     eq_(langpack.language, 'pt-BR')
     get_json_data_mock.return_value['languages-provided'] = {
         'invalid-lang': {}
     }
     expected = [u"Value 'invalid-lang' is not a valid choice."]
     with self.assertRaises(ValidationError) as e:
         LangPack.from_upload(upload)
     eq_(e.exception.messages, expected)
示例#6
0
 def test_upload_sign_error(self, sign_app_mock):
     sign_app_mock.side_effect = SigningError
     eq_(LangPack.objects.count(), 0)
     upload = self.upload('langpack')
     with self.assertRaises(SigningError):
         LangPack.from_upload(upload)
     # Test that we didn't delete the upload file
     ok_(private_storage.exists(upload.path))
示例#7
0
 def test_upload_sign_error(self, sign_app_mock):
     sign_app_mock.side_effect = SigningError
     eq_(LangPack.objects.count(), 0)
     upload = self.upload('langpack')
     with self.assertRaises(SigningError):
         LangPack.from_upload(upload)
     # Test that we didn't delete the upload file
     ok_(private_storage.exists(upload.path))
示例#8
0
 def test_upload_existing_same_version(self):
     langpack = self.create_langpack()
     upload = self.upload('langpack')
     # Works once.
     ok_(LangPack.from_upload(upload, instance=langpack))
     # Doesn't work twice, since we are re-uploading the same version.
     expected = [u'Your language pack version must be different to the '
                 u'one you are replacing.']
     with self.assertRaises(ValidationError) as e:
         LangPack.from_upload(upload, instance=langpack)
     eq_(e.exception.messages, expected)
示例#9
0
 def test_upload_existing_same_version(self):
     langpack = self.create_langpack()
     upload = self.upload('langpack')
     # Works once.
     ok_(LangPack.from_upload(upload, instance=langpack))
     # Doesn't work twice, since we are re-uploading the same version.
     expected = [u'Your language pack version must be different to the '
                 u'one you are replacing.']
     with self.assertRaises(ValidationError) as e:
         LangPack.from_upload(upload, instance=langpack)
     eq_(e.exception.messages, expected)
示例#10
0
 def test_upload_existing(self):
     langpack = self.create_langpack()
     original_uuid = langpack.uuid
     original_file_path = langpack.file_path
     original_file_version = langpack.file_version
     original_manifest = langpack.manifest
     with patch('mkt.webapps.utils.public_storage') as storage_mock:
         # mock storage size before building minifest since we haven't
         # created a real file for this langpack yet.
         storage_mock.size.return_value = 666
         original_minifest = langpack.get_minifest_contents()
     upload = self.upload('langpack')
     langpack = LangPack.from_upload(upload, instance=langpack)
     eq_(langpack.uuid, original_uuid)
     eq_(langpack.version, '1.0.3')
     eq_(langpack.language, 'de')
     eq_(langpack.fxos_version, '2.2')
     eq_(langpack.filename, '%s-%s.zip' % (langpack.uuid, langpack.version))
     eq_(langpack.get_manifest_json(), self.expected_manifest)
     ok_(langpack.file_path.startswith(langpack.path_prefix))
     ok_(langpack.filename in langpack.file_path)
     ok_(langpack.file_path != original_file_path)
     ok_(langpack.file_version > original_file_version)
     ok_(public_storage.exists(langpack.file_path))
     ok_(LangPack.objects.get(pk=langpack.uuid))
     eq_(LangPack.objects.count(), 1)
     ok_(langpack.manifest != original_manifest)
     # We're supposed to have busted the old minifest cache.
     ok_(langpack.get_minifest_contents() != original_minifest)
示例#11
0
 def test_upload_existing(self):
     langpack = self.create_langpack()
     original_uuid = langpack.uuid
     original_file_path = langpack.file_path
     original_file_version = langpack.file_version
     original_manifest = langpack.manifest
     with patch('mkt.webapps.utils.public_storage') as storage_mock:
         # mock storage size before building minifest since we haven't
         # created a real file for this langpack yet.
         storage_mock.size.return_value = 666
         original_minifest = langpack.get_minifest_contents()
     upload = self.upload('langpack')
     langpack = LangPack.from_upload(upload, instance=langpack)
     eq_(langpack.uuid, original_uuid)
     eq_(langpack.version, '1.0.3')
     eq_(langpack.language, 'de')
     eq_(langpack.fxos_version, '2.2')
     eq_(langpack.filename, '%s-%s.zip' % (langpack.uuid, langpack.version))
     eq_(langpack.get_manifest_json(), self.expected_manifest)
     ok_(langpack.file_path.startswith(langpack.path_prefix))
     ok_(langpack.filename in langpack.file_path)
     ok_(langpack.file_path != original_file_path)
     ok_(langpack.file_version > original_file_version)
     ok_(public_storage.exists(langpack.file_path))
     ok_(LangPack.objects.get(pk=langpack.uuid))
     eq_(LangPack.objects.count(), 1)
     ok_(langpack.manifest != original_manifest)
     # We're supposed to have busted the old minifest cache.
     ok_(langpack.get_minifest_contents() != original_minifest)
示例#12
0
 def validate(self, data):
     try:
         self.instance = LangPack.from_upload(data['upload'],
                                              instance=self.instance)
     except forms.ValidationError, e:
         exc = ParseError()
         exc.detail = {u'detail': e.messages}
         raise exc
示例#13
0
 def validate(self, data):
     try:
         self.instance = LangPack.from_upload(data['upload'],
                                              instance=self.instance)
     except forms.ValidationError, e:
         exc = ParseError()
         exc.detail = {u'detail': e.messages}
         raise exc
示例#14
0
 def test_upload_language_validation(self, get_json_data_mock):
     upload = self.upload("langpack")
     get_json_data_mock.return_value = {
         "name": "Portuguese Langpack",
         "developer": {"name": "Mozilla"},
         "role": "langpack",
         "languages-provided": {"pt-BR": {}},
         "languages-target": {"app://*.gaiamobile.org/manifest.webapp": "2.2"},
         "version": "0.1",
     }
     langpack = LangPack.from_upload(upload)
     ok_(langpack.pk)
     eq_(langpack.language, "pt-BR")
     get_json_data_mock.return_value["languages-provided"] = {"invalid-lang": {}}
     expected = [u"Value 'invalid-lang' is not a valid choice."]
     with self.assertRaises(ValidationError) as e:
         LangPack.from_upload(upload)
     eq_(e.exception.messages, expected)
示例#15
0
    def test_get_minifest_contents(self, storage_mock):
        fake_manifest = {"name": u"Fake LangPäck", "developer": {"name": "Mozilla"}}
        langpack = LangPack(
            pk="12345678123456781234567812345678", fxos_version="2.2", version="0.3", manifest=json.dumps(fake_manifest)
        )
        storage_mock.size.return_value = 666
        minifest_contents = json.loads(langpack.get_minifest_contents()[0])

        eq_(
            minifest_contents,
            {
                "version": "0.3",
                "size": 666,
                "name": u"Fake LangPäck",
                "package_path": langpack.download_url,
                "developer": {"name": "Mozilla"},
            },
        )
        return langpack, minifest_contents
示例#16
0
    def test_get_minifest_contents(self, storage_mock):
        fake_manifest = {
            'name': u'Fake LangPäck',
            'developer': {
                'name': 'Mozilla'
            }
        }
        langpack = LangPack(
            pk='12345678123456781234567812345678',
            fxos_version='2.2',
            version='0.3',
            manifest=json.dumps(fake_manifest))
        storage_mock.size.return_value = 666
        minifest_contents = json.loads(langpack.get_minifest_contents()[0])

        eq_(minifest_contents,
            {'version': '0.3',
             'size': 666,
             'name': u'Fake LangPäck',
             'package_path': langpack.download_url,
             'developer': {'name': 'Mozilla'}})
        return langpack, minifest_contents
示例#17
0
    def test_get_minifest_contents(self, storage_mock):
        fake_manifest = {
            'name': u'Fake LangPäck',
            'developer': {
                'name': 'Mozilla'
            }
        }
        langpack = LangPack(
            pk='12345678123456781234567812345678',
            fxos_version='2.2',
            version='0.3',
            manifest=json.dumps(fake_manifest))
        storage_mock.size.return_value = 666
        minifest_contents = json.loads(langpack.get_minifest_contents())

        eq_(minifest_contents,
            {'version': '0.3',
             'size': 666,
             'name': u'Fake LangPäck',
             'package_path': langpack.download_url,
             'developer': {'name': 'Mozilla'}})
        return langpack, minifest_contents
示例#18
0
 def test_upload_sign(self, sign_app_mock, cached_minifest_mock):
     eq_(LangPack.objects.count(), 0)
     upload = self.upload('langpack')
     langpack = LangPack.from_upload(upload)
     ok_(langpack.pk)
     ok_(langpack.file_version)
     ok_(langpack.file_path)
     eq_(LangPack.objects.count(), 1)
     expected_args = (
         langpack.file_path,
         json.dumps({'id': langpack.pk, 'version': langpack.file_version})
     )
     eq_(os.path.join('/', sign_app_mock.call_args[0][0].name), upload.path)
     eq_(sign_app_mock.call_args[0][1:], expected_args)
示例#19
0
 def test_upload_sign(self, sign_app_mock, cached_minifest_mock):
     eq_(LangPack.objects.count(), 0)
     upload = self.upload('langpack')
     langpack = LangPack.from_upload(upload)
     ok_(langpack.pk)
     ok_(langpack.file_version)
     ok_(langpack.file_path)
     eq_(LangPack.objects.count(), 1)
     expected_args = (
         upload.path,
         langpack.file_path,
         json.dumps({'id': langpack.pk, 'version': langpack.file_version})
     )
     sign_app_mock.assert_called_once_with(*expected_args)
示例#20
0
    def test_caching_key_differs_between_models(self, storage_mock):
        storage_mock.size.return_value = 999

        ok_(not cache.get('1:webapp:337141:manifest'))
        get_cached_minifest(self.webapp)  # Build the cache for the webapp.

        ok_(not cache.get(
            '1:langpack:12345678123456781234567812345678:manifest'))
        langpack = LangPack(pk='12345678123456781234567812345678',
                            manifest='{}')
        get_cached_minifest(langpack)  # Build the cache for the langpack.

        ok_(cache.get('1:webapp:337141:manifest'))
        ok_(cache.get('1:langpack:12345678123456781234567812345678:manifest'))
示例#21
0
 def test_upload_sign(self, sign_app_mock, cached_minifest_mock):
     eq_(LangPack.objects.count(), 0)
     upload = self.upload('langpack')
     langpack = LangPack.from_upload(upload)
     ok_(langpack.pk)
     ok_(langpack.file_version)
     ok_(langpack.file_path)
     eq_(LangPack.objects.count(), 1)
     expected_args = (
         langpack.file_path,
         json.dumps({'id': langpack.pk, 'version': langpack.file_version})
     )
     eq_(os.path.join('/', sign_app_mock.call_args[0][0].name), upload.path)
     eq_(sign_app_mock.call_args[0][1:], expected_args)
示例#22
0
 def test_upload_sign_existing(self, sign_app_mock, cached_minifest_mock):
     langpack = self.create_langpack()
     eq_(LangPack.objects.count(), 1)
     upload = self.upload("langpack")
     langpack = LangPack.from_upload(upload, instance=langpack)
     ok_(langpack.pk)
     ok_(langpack.file_version)
     ok_(langpack.file_path)
     eq_(LangPack.objects.count(), 1)
     expected_args = (
         upload.path,
         langpack.file_path,
         json.dumps({"id": langpack.pk, "version": langpack.file_version}),
     )
     sign_app_mock.assert_called_once_with(*expected_args)
示例#23
0
 def test_upload_new(self):
     eq_(LangPack.objects.count(), 0)
     upload = self.upload('langpack')
     langpack = LangPack.from_upload(upload)
     ok_(langpack.uuid)
     eq_(langpack.file_version, 1)
     eq_(langpack.version, '1.0.3')
     eq_(langpack.language, 'de')
     eq_(langpack.fxos_version, '2.2')
     eq_(langpack.filename, '%s-%s.zip' % (langpack.uuid, langpack.version))
     ok_(langpack.filename in langpack.file_path)
     ok_(langpack.file_path.startswith(langpack.path_prefix))
     ok_(public_storage.exists(langpack.file_path))
     eq_(langpack.get_manifest_json(), self.expected_manifest)
     ok_(LangPack.objects.get(pk=langpack.uuid))
     eq_(LangPack.objects.count(), 1)
     return langpack
示例#24
0
 def test_upload_new(self):
     eq_(LangPack.objects.count(), 0)
     upload = self.upload("langpack")
     langpack = LangPack.from_upload(upload)
     ok_(langpack.uuid)
     eq_(langpack.file_version, 1)
     eq_(langpack.version, "1.0.3")
     eq_(langpack.language, "de")
     eq_(langpack.fxos_version, "2.2")
     eq_(langpack.filename, "%s-%s.zip" % (langpack.uuid, langpack.version))
     ok_(langpack.filename in langpack.file_path)
     ok_(langpack.file_path.startswith(langpack.path_prefix))
     ok_(os.path.exists(langpack.file_path))
     eq_(langpack.get_manifest_json(), self.expected_manifest)
     ok_(LangPack.objects.no_cache().get(pk=langpack.uuid))
     eq_(LangPack.objects.count(), 1)
     return langpack
示例#25
0
 def test_upload_new(self):
     eq_(LangPack.objects.count(), 0)
     upload = self.upload('langpack')
     langpack = LangPack.from_upload(upload)
     ok_(langpack.uuid)
     eq_(langpack.file_version, 1)
     eq_(langpack.version, '1.0.3')
     eq_(langpack.language, 'de')
     eq_(langpack.fxos_version, '2.2')
     eq_(langpack.filename, '%s-%s.zip' % (langpack.uuid, langpack.version))
     ok_(langpack.filename in langpack.file_path)
     ok_(langpack.file_path.startswith(langpack.path_prefix))
     ok_(public_storage.exists(langpack.file_path))
     eq_(langpack.get_manifest_json(), self.expected_manifest)
     ok_(LangPack.objects.get(pk=langpack.uuid))
     eq_(LangPack.objects.count(), 1)
     return langpack
示例#26
0
 def test_language_choices_and_display(self):
     field = LangPack._meta.get_field('language')
     eq_(len(field.choices), len(settings.LANGUAGES))
     eq_(LangPack(language='fr').get_language_display(), u'Français')
     eq_(LangPack(language='en-US').get_language_display(), u'English (US)')
示例#27
0
 def reset_uuid(self):
     langpack = LangPack(uuid='12345678123456781234567812345678')
     eq_(langpack.pk, '12345678123456781234567812345678')
     langpack.reset_uuid()
     ok_(langpack.pk != '12345678123456781234567812345678')
示例#28
0
 def test_download_url(self):
     langpack = LangPack(pk='12345678123456781234567812345678')
     ok_(
         langpack.download_url.endswith(
             '/12345678123456781234567812345678/langpack.zip'))
示例#29
0
 def test_manifest_url(self):
     langpack = LangPack(pk="12345678123456781234567812345678")
     eq_(langpack.manifest_url, "")  # Inactive langpack.
     langpack.active = True
     ok_(langpack.manifest_url.endswith("/12345678-1234-5678-1234-567812345678/manifest.webapp"))
示例#30
0
 def reset_uuid(self):
     langpack = LangPack(uuid='12345678123456781234567812345678')
     eq_(langpack.pk, '12345678123456781234567812345678')
     langpack.reset_uuid()
     ok_(langpack.pk != '12345678123456781234567812345678')
示例#31
0
 def reset_uuid(self):
     langpack = LangPack(uuid="12345678123456781234567812345678")
     eq_(langpack.pk, "12345678123456781234567812345678")
     langpack.reset_uuid()
     ok_(langpack.pk != "12345678123456781234567812345678")
示例#32
0
 def test_manifest_url(self):
     langpack = LangPack(pk='12345678123456781234567812345678')
     eq_(langpack.manifest_url, '')  # Inactive langpack.
     langpack.active = True
     ok_(langpack.manifest_url.endswith(
         '/12345678-1234-5678-1234-567812345678/manifest.webapp'))
示例#33
0
 def restore_object(self, attrs, instance=None):
     try:
         return LangPack.from_upload(attrs['upload'], instance=instance)
     except serializers.ValidationError, e:
         raise ParseError(e.messages)