diff --git a/apps/devhub/templates/devhub/validate_addon.html b/apps/devhub/templates/devhub/validate_addon.html
index cd63eb103d0..ea5b1a43316 100644
--- a/apps/devhub/templates/devhub/validate_addon.html
+++ b/apps/devhub/templates/devhub/validate_addon.html
@@ -7,7 +7,8 @@
{{ dev_breadcrumbs(addon, items=[(None, title)]) }}
{{ title }}
-
diff --git a/apps/devhub/tests/test_views_validation.py b/apps/devhub/tests/test_views_validation.py
index 5e593b1f37c..6279d4126a5 100644
--- a/apps/devhub/tests/test_views_validation.py
+++ b/apps/devhub/tests/test_views_validation.py
@@ -194,11 +194,26 @@ def test_login_required(self):
eq_(r.status_code, 302)
def test_context(self):
+ self.create_flag('unlisted-addons')
r = self.client.get(reverse('devhub.validate_addon'))
eq_(r.status_code, 200)
doc = pq(r.content)
eq_(doc('#upload-addon').attr('data-upload-url'),
reverse('devhub.standalone_upload'))
+ eq_(doc('#upload-addon').attr('data-upload-url-listed'),
+ reverse('devhub.standalone_upload'))
+ eq_(doc('#upload-addon').attr('data-upload-url-unlisted'),
+ reverse('devhub.standalone_upload_unlisted'))
+
+ @mock.patch('validator.validate.validate')
+ def test_upload_unlisted_addon(self, validate_mock):
+ """Unlisted addons are validated as "self hosted" addons."""
+ validate_mock.return_value = '{}'
+ self.url = reverse('devhub.upload_unlisted')
+ data = open(get_image_path('animated.png'), 'rb')
+ self.client.post(self.url, {'upload': data})
+ # Make sure it was called with listed=False.
+ assert not validate_mock.call_args[1]['listed']
class TestValidateFile(BaseUploadTest):
diff --git a/apps/devhub/urls.py b/apps/devhub/urls.py
index c44b66b86b6..ce7323c832d 100644
--- a/apps/devhub/urls.py
+++ b/apps/devhub/urls.py
@@ -178,6 +178,8 @@
name='devhub.upload_detail'),
url('^standalone-upload$', views.standalone_upload,
name='devhub.standalone_upload'),
+ url('^standalone-upload-unlisted$', views.standalone_upload_unlisted,
+ name='devhub.standalone_upload_unlisted'),
url('^standalone-upload/([^/]+)$', views.standalone_upload_detail,
name='devhub.standalone_upload_detail'),
diff --git a/apps/devhub/views.py b/apps/devhub/views.py
index 67293997539..0aaf204204b 100644
--- a/apps/devhub/views.py
+++ b/apps/devhub/views.py
@@ -577,7 +577,9 @@ def compat_application_versions(request):
def validate_addon(request):
return render(request, 'devhub/validate_addon.html',
{'title': _('Validate Add-on'),
- 'upload_url': reverse('devhub.standalone_upload')})
+ # Hack: we just need the "is_unlisted" field from this form.
+ 'new_addon_form': forms.NewAddonForm(
+ None, None, request=request)})
@login_required
@@ -586,7 +588,9 @@ def check_addon_compatibility(request):
return render(request, 'devhub/validate_addon.html',
{'appversion_form': form,
'title': _('Check Add-on Compatibility'),
- 'upload_url': reverse('devhub.standalone_upload')})
+ # Hack: we just need the "is_unlisted" field from this form.
+ 'new_addon_form': forms.NewAddonForm(
+ None, None, request=request)})
@dev_required
@@ -672,6 +676,12 @@ def standalone_upload(request):
return upload(request, is_standalone=True)
+@login_required
+@post_required
+def standalone_upload_unlisted(request):
+ return upload(request, is_standalone=True, is_listed=False)
+
+
@login_required
@json_view
def standalone_upload_detail(request, uuid):