and so it begins, add a premium add-on (bug 677514)

This commit is contained in:
Andy McKay 2011-08-10 11:27:15 +01:00
Родитель 84c629b649
Коммит e208473897
4 изменённых файлов: 52 добавлений и 0 удалений

Просмотреть файл

@ -230,6 +230,9 @@ class Addon(amo.models.OnChangeMixin, amo.models.ModelBase):
dependencies = models.ManyToManyField('self', symmetrical=False,
through='AddonDependency',
related_name='addons')
premium_type = models.PositiveIntegerField(
choices=amo.ADDON_PREMIUM_TYPES.items(),
default=amo.ADDON_FREE)
_current_version = models.ForeignKey(Version, related_name='___ignore',
db_column='current_version', null=True, on_delete=models.SET_NULL)
@ -748,6 +751,15 @@ class Addon(amo.models.OnChangeMixin, amo.models.ModelBase):
def is_incomplete(self):
return self.status == amo.STATUS_NULL
def can_become_premium(self):
"""Not all addons can become premium."""
return (self.status in amo.PREMIUM_STATUSES
and self.highest_status in amo.PREMIUM_STATUSES
and self.type in [amo.ADDON_EXTENSION, amo.ADDON_WEBAPP])
def is_premium(self):
return self.premium_type == amo.ADDON_PREMIUM
@classmethod
def featured_random(cls, app, lang):
return FeaturedManager.featured_ids(app, lang)

Просмотреть файл

@ -1547,3 +1547,30 @@ class TestLanguagePack(TestLanguagePack):
File.objects.create(platform=self.mac, version=self.version,
filename=self.xpi_path('langpack'))
eq_(self.addon.get_localepicker(), '')
class TestMarketplace(amo.tests.ESTestCase):
def setUp(self):
self.addon = Addon(type=amo.ADDON_EXTENSION)
def test_is_premium(self):
assert not self.addon.is_premium()
self.addon.update(premium_type=amo.ADDON_PREMIUM)
assert self.addon.is_premium()
def test_can_be_premium_status(self):
for status in amo.STATUS_CHOICES.keys():
self.addon.update(status=status)
if status in amo.PREMIUM_STATUSES:
assert self.addon.can_become_premium()
else:
assert not self.addon.can_become_premium()
def test_can_be_premium_type(self):
for type in amo.ADDON_TYPES.keys():
self.addon.update(type=type)
if type in [amo.ADDON_EXTENSION, amo.ADDON_WEBAPP]:
assert self.addon.can_become_premium()
else:
assert not self.addon.can_become_premium()

Просмотреть файл

@ -50,6 +50,9 @@ LITE_STATUSES = (STATUS_LITE, STATUS_LITE_AND_NOMINATED)
MIRROR_STATUSES = (STATUS_PUBLIC, STATUS_BETA,
STATUS_LITE, STATUS_LITE_AND_NOMINATED)
# An add-on in one of these statuses can become premium.
PREMIUM_STATUSES = (STATUS_NULL, STATUS_UNDER_REVIEW, STATUS_NOMINATED)
# Types of administrative review queues for an add-on:
ADMIN_REVIEW_FULL = 1
ADMIN_REVIEW_PRELIM = 2
@ -137,6 +140,14 @@ ADDON_SLUGS_UPDATE = {
ADDON_PLUGIN: 'plugin',
}
ADDON_FREE = 0
ADDON_PREMIUM = 1
ADDON_PREMIUM_TYPES = {
ADDON_FREE: 'free',
ADDON_PREMIUM: 'premium',
}
# Edit addon information
MAX_TAGS = 20
MIN_TAG_LENGTH = 2

Просмотреть файл

@ -0,0 +1,2 @@
ALTER TABLE addons ADD COLUMN premium_type tinyint(1) unsigned NOT NULL DEFAULT 0;
CREATE INDEX premium_type_idx ON addons (premium_type);