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 }}

-
+ {{ csrf() }}

{% trans %} @@ -38,8 +39,34 @@

{{ title }}

{% endif %}
+ {% if waffle.flag('unlisted-addons') %} +
+ +
+ +
+
+ {% endif %} - +
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):