diff --git a/apps/addons/buttons.py b/apps/addons/buttons.py index 83239c3f03f..a4e59eece45 100644 --- a/apps/addons/buttons.py +++ b/apps/addons/buttons.py @@ -75,10 +75,14 @@ def __init__(self, addon, app, lang, version=None, show_eula=True, self.size = size self.detailed = detailed + self.is_beta = self.version and self.version.is_beta version_unreviewed = (self.version and self.version.is_unreviewed) - self.unreviewed = addon.is_unreviewed() or version_unreviewed + self.unreviewed = (addon.is_unreviewed() or version_unreviewed or + self.is_beta) self.self_hosted = addon.status == amo.STATUS_LISTED - self.featured = (not self.unreviewed and not self.self_hosted + self.featured = (not self.unreviewed + and not self.self_hosted + and not self.is_beta and addon.is_featured(app, lang) or addon.is_category_featured(app, lang)) self.is_persona = addon.type == amo.ADDON_PERSONA @@ -110,6 +114,8 @@ def prepare(self): self.install_class.append('accept') if self.size: self.button_class.append(self.size) + if self.is_beta: + self.install_class.append('beta') def attrs(self): rv = {} diff --git a/apps/addons/tests/test_buttons.py b/apps/addons/tests/test_buttons.py index 4662e58ba80..81c4fb7f134 100644 --- a/apps/addons/tests/test_buttons.py +++ b/apps/addons/tests/test_buttons.py @@ -26,6 +26,7 @@ def setup(self): self.version = v = Mock() v.is_unreviewed = False + v.is_beta = False self.addon.current_version = v self.file = self.get_file(amo.PLATFORM_ALL) @@ -224,6 +225,17 @@ def test_unreviewed(self): eq_(b.install_class, ['unreviewed']) eq_(b.install_text, 'Not Reviewed') + def test_beta(self): + # Throw featured in there to make sure it's ignored. + self.addon.is_featured.return_value = True + self.version.is_beta = True + b = self.get_button() + assert not b.featured + assert b.is_beta + eq_(b.button_class, ['download', 'caution']) + eq_(b.install_class, ['unreviewed', 'beta']) + eq_(b.install_text, 'Not Reviewed') + def test_self_hosted(self): # Throw featured in there to make sure it's ignored. self.addon.is_featured.return_value = True diff --git a/apps/versions/models.py b/apps/versions/models.py index 119bce68fc6..135119ded32 100644 --- a/apps/versions/models.py +++ b/apps/versions/models.py @@ -59,6 +59,11 @@ def is_unreviewed(self): return filter(lambda f: f.status == amo.STATUS_UNREVIEWED, self.all_files) + @amo.cached_property + def is_beta(self): + return filter(lambda f: f.status == amo.STATUS_BETA, + self.all_files) + @classmethod def _compat_map(cls, avs): apps = {} diff --git a/media/js/zamboni/buttons.js b/media/js/zamboni/buttons.js index e7726e6e671..780e57c18db 100644 --- a/media/js/zamboni/buttons.js +++ b/media/js/zamboni/buttons.js @@ -201,13 +201,14 @@ var installButton = function() { // What kind of button are we dealing with? var selfhosted = $this.hasClass('selfhosted'), - unreviewed = $this.hasClass('unreviewed'), + beta = $this.hasClass('beta'); + unreviewed = $this.hasClass('unreviewed') && !beta, persona = $this.hasClass('persona'), contrib = $this.hasClass('contrib'), search = $this.hasattr('data-search'), eula = $this.hasClass('eula'); - if (unreviewed && !(selfhosted || eula || contrib)) { + if (unreviewed && !(selfhosted || eula || contrib || beta)) { $button.addPopup(message('unreviewed')); }