|
4 | 4 | import zipfile |
5 | 5 |
|
6 | 6 | from django.conf import settings |
| 7 | +from django.db.models.signals import post_delete, post_save |
7 | 8 |
|
8 | 9 | import mock |
9 | 10 | import waffle |
|
12 | 13 |
|
13 | 14 | import amo |
14 | 15 | from addons.models import (Addon, AddonCategory, AddonDeviceType, AddonPremium, |
15 | | - BlacklistedSlug, Category, Preview) |
| 16 | + BlacklistedSlug, Category, Preview, version_changed) |
| 17 | +from addons.signals import version_changed as version_changed_signal |
16 | 18 | from amo.tests import app_factory, version_factory |
17 | 19 | from constants.applications import DEVICE_TYPES |
18 | 20 | from editors.models import RereviewQueue |
|
21 | 23 | from lib.crypto.tests import mock_sign |
22 | 24 | from market.models import Price |
23 | 25 | from users.models import UserProfile |
24 | | -from versions.models import Version |
| 26 | +from versions.models import update_status, Version |
25 | 27 |
|
26 | 28 | import mkt |
27 | 29 | from mkt.submit.tests.test_views import BasePackagedAppTest, BaseWebAppTest |
@@ -928,3 +930,63 @@ def test_packaged_reviewer(self, sign): |
928 | 930 | reviewer=True) |
929 | 931 | eq_(sign.call_args[0][0], self.app.current_version.pk) |
930 | 932 | eq_(sign.call_args[1]['reviewer'], True) |
| 933 | + |
| 934 | + |
| 935 | +class TestUpdateStatus(amo.tests.TestCase): |
| 936 | + |
| 937 | + def setUp(self): |
| 938 | + # Disabling signals to simplify these tests and because create doesn't |
| 939 | + # call the signals anyway. |
| 940 | + version_changed_signal.disconnect(version_changed, |
| 941 | + dispatch_uid='version_changed') |
| 942 | + post_save.disconnect(update_status, sender=Version, |
| 943 | + dispatch_uid='version_update_status') |
| 944 | + post_delete.disconnect(update_status, sender=Version, |
| 945 | + dispatch_uid='version_update_status') |
| 946 | + |
| 947 | + def tearDown(self): |
| 948 | + version_changed_signal.connect(version_changed, |
| 949 | + dispatch_uid='version_changed') |
| 950 | + post_save.connect(update_status, sender=Version, |
| 951 | + dispatch_uid='version_update_status') |
| 952 | + post_delete.connect(update_status, sender=Version, |
| 953 | + dispatch_uid='version_update_status') |
| 954 | + |
| 955 | + def test_no_versions(self): |
| 956 | + app = Webapp.objects.create(status=amo.STATUS_PUBLIC) |
| 957 | + app.update_status() |
| 958 | + eq_(app.status, amo.STATUS_NULL) |
| 959 | + |
| 960 | + def test_version_no_files(self): |
| 961 | + app = Webapp.objects.create(status=amo.STATUS_PUBLIC) |
| 962 | + Version(addon=app).save() |
| 963 | + app.update_status() |
| 964 | + eq_(app.status, amo.STATUS_NULL) |
| 965 | + |
| 966 | + def test_only_version_deleted(self): |
| 967 | + app = amo.tests.app_factory(status=amo.STATUS_REJECTED) |
| 968 | + app.current_version.delete() |
| 969 | + app.update_status() |
| 970 | + eq_(app.status, amo.STATUS_NULL) |
| 971 | + |
| 972 | + def test_other_version_deleted(self): |
| 973 | + app = amo.tests.app_factory(status=amo.STATUS_REJECTED) |
| 974 | + amo.tests.version_factory(addon=app) |
| 975 | + app.current_version.delete() |
| 976 | + app.update_status() |
| 977 | + eq_(app.status, amo.STATUS_REJECTED) |
| 978 | + |
| 979 | + def test_one_version_pending(self): |
| 980 | + app = amo.tests.app_factory(status=amo.STATUS_REJECTED, |
| 981 | + file_kw=dict(status=amo.STATUS_DISABLED)) |
| 982 | + amo.tests.version_factory(addon=app, |
| 983 | + file_kw=dict(status=amo.STATUS_PENDING)) |
| 984 | + app.update_status() |
| 985 | + eq_(app.status, amo.STATUS_PENDING) |
| 986 | + |
| 987 | + def test_one_version_public(self): |
| 988 | + app = amo.tests.app_factory(status=amo.STATUS_PUBLIC) |
| 989 | + amo.tests.version_factory(addon=app, |
| 990 | + file_kw=dict(status=amo.STATUS_DISABLED)) |
| 991 | + app.update_status() |
| 992 | + eq_(app.status, amo.STATUS_PUBLIC) |
0 commit comments