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)
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)
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'))
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))
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)
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)
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
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)
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
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
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
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)
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)
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'))
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)
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
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
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)')
def reset_uuid(self): langpack = LangPack(uuid='12345678123456781234567812345678') eq_(langpack.pk, '12345678123456781234567812345678') langpack.reset_uuid() ok_(langpack.pk != '12345678123456781234567812345678')
def test_download_url(self): langpack = LangPack(pk='12345678123456781234567812345678') ok_( langpack.download_url.endswith( '/12345678123456781234567812345678/langpack.zip'))
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"))
def reset_uuid(self): langpack = LangPack(uuid="12345678123456781234567812345678") eq_(langpack.pk, "12345678123456781234567812345678") langpack.reset_uuid() ok_(langpack.pk != "12345678123456781234567812345678")
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'))
def restore_object(self, attrs, instance=None): try: return LangPack.from_upload(attrs['upload'], instance=instance) except serializers.ValidationError, e: raise ParseError(e.messages)