and so it begins, add a premium add-on (bug 677514)
This commit is contained in:
Родитель
84c629b649
Коммит
e208473897
|
@ -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);
|
Загрузка…
Ссылка в новой задаче