Exemple #1
0
    def test_premium_to_free_inapp_with_non_paid_region(self):
        # At this point the app is premium.
        self.app.update(premium_type=amo.ADDON_PREMIUM)
        self.kwargs['price'] = 'free'
        form = forms.RegionForm(data=None, **self.kwargs)
        assert not form.is_valid()
        assert form.has_inappropriate_regions()

        all_paid_regions = set(mkt.regions.ALL_PAID_REGION_IDS)
        new_paid = sorted(all_paid_regions.difference(set([mkt.regions.BR.id
                                                           ])))
        with mock.patch('mkt.developers.forms.ALL_PAID_REGION_IDS',
                        new=new_paid):
            form = forms.RegionForm(data={'regions': [mkt.regions.BR.id]},
                                    **self.kwargs)
            assert not form.is_valid()
            assert form.has_inappropriate_regions()

        new_paid = sorted(all_paid_regions.difference(set([mkt.regions.UK.id
                                                           ])))
        with mock.patch('mkt.developers.forms.ALL_PAID_REGION_IDS',
                        new=new_paid):
            form = forms.RegionForm(data={'regions': [mkt.regions.UK.id]},
                                    **self.kwargs)
            assert not form.is_valid()
            assert form.has_inappropriate_regions()

        new_paid = sorted(all_paid_regions.union(set([mkt.regions.PL.id])))
        with mock.patch('mkt.developers.forms.ALL_PAID_REGION_IDS',
                        new=new_paid):
            form = forms.RegionForm(data={'regions': [mkt.regions.PL.id]},
                                    **self.kwargs)
            assert form.is_valid()
            assert not form.has_inappropriate_regions()
Exemple #2
0
    def test_unrated_games_already_excluded(self):
        regions = [
            x.id for x in mkt.regions.ALL_REGIONS_WITH_CONTENT_RATINGS()
        ]
        for region in regions:
            self.app.addonexcludedregion.create(region=region)

        games = Category.objects.create(type=amo.ADDON_WEBAPP, slug='games')
        self.app.addoncategory_set.create(category=games)

        form = forms.RegionForm(
            {
                'regions': mkt.regions.REGION_IDS,
                'restricted': '1',
                'enable_new_regions': True
            }, **self.kwargs)

        assert form.is_valid(), form.errors
        form.save()

        form = forms.RegionForm(data=None, **self.kwargs)
        self.assertSetEqual(
            form.initial['regions'],
            set(mkt.regions.REGION_IDS) - set(mkt.regions.SPECIAL_REGION_IDS) -
            set(regions + [mkt.regions.RESTOFWORLD.id]))
        eq_(form.initial['enable_new_regions'], True)
Exemple #3
0
    def test_china_included_if_approved_but_unchecked(self):
        self.create_flag('special-regions')

        # Mark app as public in China.
        status = amo.STATUS_PUBLIC
        self.app.geodata.set_status(mkt.regions.CN, status, save=True)
        eq_(self.app.geodata.get_status(mkt.regions.CN), status)

        # Post the form.
        form = forms.RegionForm({'regions': mkt.regions.ALL_REGION_IDS},
                                **self.kwargs)

        # China should be checked if it's public.
        cn = mkt.regions.CN.id
        assert cn in form.initial['regions']
        assert cn in dict(form.fields['regions'].choices).keys()

        eq_(form.disabled_regions, [])
        assert form.is_valid(), form.errors
        form.save()

        # App should be unlisted in China and now null.
        self.app = self.app.reload()
        eq_(self.app.listed_in(mkt.regions.CN), False)
        eq_(self.app.geodata.get_status(mkt.regions.CN), amo.STATUS_NULL)
Exemple #4
0
 def test_restofworld_valid_choice_free(self):
     form = forms.RegionForm(
         {
             'restricted': '1',
             'regions': [mkt.regions.RESTOFWORLD.id]
         }, **self.kwargs)
     assert form.is_valid(), form.errors
Exemple #5
0
 def test_exclude_restofworld(self):
     form = forms.RegionForm({'regions': mkt.regions.REGION_IDS,
                              'restricted': '1',
                              'enable_new_regions': False}, **self.kwargs)
     assert form.is_valid(), form.errors
     form.save()
     eq_(self.app.get_region_ids(True), mkt.regions.REGION_IDS)
Exemple #6
0
 def test_worldwide_invalid_choice_paid(self):
     self.app.update(premium_type=amo.ADDON_PREMIUM)
     form = forms.RegionForm(data={'regions': [mkt.regions.WORLDWIDE.id]},
                             **self.kwargs)
     assert not form.is_valid(), form.errors
     assert ('Select a valid choice. 1 is not one of the available '
             'choices.' in form.errors['regions'])
Exemple #7
0
    def _test_china_excluded_if_pending_or_rejected(self):
        self.create_flag('special-regions')

        # Mark app as pending/rejected in China.
        for status in (amo.STATUS_PENDING, amo.STATUS_REJECTED):
            self.app.geodata.set_status(mkt.regions.CN, status, save=True)
            eq_(self.app.geodata.get_status(mkt.regions.CN), status)

            # Post the form.
            form = forms.RegionForm({'regions': mkt.regions.ALL_REGION_IDS,
                                     'special_regions': [mkt.regions.CN.id]},
                                    **self.kwargs)

            # China should be checked if it's pending and
            # unchecked if rejected.
            cn = mkt.regions.CN.id
            if status == amo.STATUS_PENDING:
                assert cn in form.initial['regions'], (
                    status, form.initial['regions'])
            else:
                assert cn not in form.initial['regions'], (
                    status, form.initial['regions'])
            choices = dict(form.fields['regions'].choices).keys()
            assert cn in choices, (status, choices)

            assert form.is_valid(), form.errors
            form.save()

            # App should be unlisted in China and always pending after
            # requesting China.
            self.app = self.app.reload()
            eq_(self.app.listed_in(mkt.regions.CN), False)
            eq_(self.app.geodata.get_status(mkt.regions.CN),
                amo.STATUS_PENDING)
Exemple #8
0
 def test_initial_empty(self):
     form = forms.RegionForm(data=None, **self.kwargs)
     self.assertSetEqual(
         form.initial['regions'],
         set(mkt.regions.ALL_REGION_IDS) -
         set(mkt.regions.SPECIAL_REGION_IDS))
     eq_(form.initial['enable_new_regions'], False)
Exemple #9
0
 def test_low_memory_regions_false(self):
     regions = {10: mock.MagicMock(low_memory=False),
                20: mock.MagicMock(low_memory=False),
                30: mock.MagicMock(low_memory=False)}
     form = forms.RegionForm(**self.kwargs)
     with mock.patch.object(forms.RegionForm, 'regions_by_id', regions):
         assert not form.low_memory_regions, 'expected no low memory region'
Exemple #10
0
 def test_initial_checked(self):
     form = forms.RegionForm(data=None, **self.kwargs)
     # Even special regions (i.e., China) should be checked.
     eq_(form.initial['restricted'], False)
     eq_(form.initial['enable_new_regions'], True)
     self.assertSetEqual(form.initial['regions'],
                         set(mkt.regions.ALL_REGION_IDS))
Exemple #11
0
    def test_china_excluded_if_pending_cancelled(self):
        """
        If the developer already requested to be in China,
        and a reviewer hasn't reviewed it for China yet,
        keep the region exclusion and the status as pending.

        """

        self.create_flag('special-regions')

        # Mark app as pending in China.
        status = mkt.STATUS_PENDING
        self.app.geodata.set_status(mkt.regions.CHN, status, save=True)
        eq_(self.app.geodata.get_status(mkt.regions.CHN), status)

        # Post the form.
        form = forms.RegionForm({'regions': mkt.regions.ALL_REGION_IDS},
                                **self.kwargs)

        # China should be checked if it's pending.
        cn = mkt.regions.CHN.id
        assert cn in form.initial['regions']
        assert cn in dict(form.fields['regions'].choices).keys()

        assert form.is_valid(), form.errors
        form.save()

        # App should be unlisted in China and now null.
        self.app = self.app.reload()
        eq_(self.app.listed_in(mkt.regions.CHN), False)
        eq_(self.app.geodata.get_status(mkt.regions.CHN), mkt.STATUS_NULL)
Exemple #12
0
 def test_no_regions(self):
     form = forms.RegionForm({
         'restricted': '1',
         'enable_new_regions': True
     }, **self.kwargs)
     assert not form.is_valid(), 'Form should be invalid'
     eq_(form.errors, {'regions': ['You must select at least one region.']})
Exemple #13
0
    def test_reinclude_region(self):
        self.app.addonexcludedregion.create(region=mkt.regions.BR.id)

        form = forms.RegionForm({'regions': mkt.regions.ALL_REGION_IDS,
                                 'enable_new_regions': True}, **self.kwargs)
        assert form.is_valid(), form.errors
        form.save()
        eq_(self.app.get_region_ids(True), mkt.regions.ALL_REGION_IDS)
Exemple #14
0
    def test_reinclude_restofworld(self):
        self.app.addonexcludedregion.create(region=mkt.regions.RESTOFWORLD.id)

        form = forms.RegionForm({'regions': mkt.regions.ALL_REGION_IDS},
                                **self.kwargs)
        assert form.is_valid(), form.errors
        form.save()
        eq_(self.app.get_region_ids(True), mkt.regions.ALL_REGION_IDS)
Exemple #15
0
 def test_restofworld_valid_choice_paid(self):
     self.app.update(premium_type=mkt.ADDON_PREMIUM)
     form = forms.RegionForm(
         {
             'restricted': '1',
             'regions': [mkt.regions.RESTOFWORLD.id]
         }, **self.kwargs)
     assert form.is_valid(), form.errors
Exemple #16
0
    def test_reinclude_worldwide(self):
        AER.objects.create(addon=self.app, region=mkt.regions.WORLDWIDE.id)

        form = forms.RegionForm(data={'regions': mkt.regions.ALL_REGION_IDS},
                                **self.kwargs)
        assert form.is_valid(), form.errors
        form.save()
        eq_(self.app.get_region_ids(True), mkt.regions.ALL_REGION_IDS)
Exemple #17
0
 def test_exclude_worldwide(self):
     form = forms.RegionForm(data={
         'regions': mkt.regions.REGION_IDS,
         'other_regions': False
     },
                             **self.kwargs)
     assert form.is_valid(), form.errors
     form.save()
     eq_(self.app.get_region_ids(True), mkt.regions.REGION_IDS)
Exemple #18
0
 def test_enable_new_regions(self):
     form = forms.RegionForm(data={
         'enable_new_regions': 'on',
         'regions': mkt.regions.ALL_REGION_IDS
     },
                             **self.kwargs)
     assert form.is_valid(), form.errors
     form.save()
     eq_(self.app.enable_new_regions, True)
Exemple #19
0
    def test_paid_app_options_initial(self):
        """Check initial regions of a paid app post-save.

        Check that if we save the region form for a paid app
        with a specific region that should *not* be excluded it is still
        shown as a initial region when the new form instance is created.

        """

        self.app.update(premium_type=amo.ADDON_PREMIUM)
        form = forms.RegionForm(
            {'restricted': '1',
             'regions': [mkt.regions.RESTOFWORLD.id]}, **self.kwargs)
        assert form.is_valid(), form.errors
        form.save()
        new_form = forms.RegionForm(**self.kwargs)
        self.assertIn(mkt.regions.RESTOFWORLD.id,
                      new_form.initial.get('regions', []))
Exemple #20
0
    def test_disable_regions_on_paid(self):
        eq_(self.app.get_region_ids(), mkt.regions.REGION_IDS)

        self.app.update(premium_type=amo.ADDON_PREMIUM)
        form = forms.RegionForm(data=None, **self.kwargs)
        assert form.has_inappropriate_regions()
        assert not form.is_valid()

        form = forms.RegionForm(
            data={'regions': mkt.regions.ALL_PAID_REGION_IDS}, **self.kwargs)
        assert form.has_inappropriate_regions()
        assert form.is_valid(), form.errors
        form.save()

        self.assertSetEqual(self.app.get_region_ids(),
                            mkt.regions.ALL_PAID_REGION_IDS)

        form = forms.RegionForm(data=None, **self.kwargs)
        assert not form.has_inappropriate_regions()
Exemple #21
0
 def test_no_regions(self):
     form = forms.RegionForm(data={}, **self.kwargs)
     assert not form.is_valid()
     eq_(
         form.errors, {
             '__all__': [
                 'You must select at least one region or '
                 '"Other and new regions."'
             ]
         })
Exemple #22
0
    def test_initial_excluded_in_region(self):
        AER.objects.create(addon=self.app, region=mkt.regions.BR.id)

        regions = list(mkt.regions.REGION_IDS)
        regions.remove(mkt.regions.BR.id)

        eq_(self.get_app().get_region_ids(), regions)

        form = forms.RegionForm(data=None, **self.kwargs)
        eq_(form.initial['regions'], regions)
        eq_(form.initial['other_regions'], True)
Exemple #23
0
    def test_initial_excluded_in_region(self):
        AER.objects.create(addon=self.app, region=mkt.regions.BR.id)

        regions = list(mkt.regions.ALL_REGION_IDS)
        regions.remove(mkt.regions.BR.id)

        eq_(self.get_app().get_region_ids(worldwide=True), regions)

        form = forms.RegionForm(data=None, **self.kwargs)
        eq_(form.initial['regions'], regions)
        eq_(form.initial['enable_new_regions'], False)
Exemple #24
0
    def test_unrated_games_excluded(self):
        games = Category.objects.create(type=amo.ADDON_WEBAPP, slug='games')
        self.app.addoncategory_set.create(category=games)

        form = forms.RegionForm({'regions': mkt.regions.REGION_IDS,
                                 'restricted': '1',
                                 'enable_new_regions': True},
                                **self.kwargs)

        # Developers should still be able to save form OK, even
        # if they pass a bad region. Think of the grandfathered developers.
        assert form.is_valid(), form.errors
        form.save()

        # No matter what the developer tells us, still exclude Brazilian
        # and German games.
        form = forms.RegionForm(data=None, **self.kwargs)
        assert mkt.regions.BR.id not in form.initial['regions']
        assert mkt.regions.DE.id not in form.initial['regions']
        eq_(form.initial['enable_new_regions'], True)
Exemple #25
0
    def test_restricted_ignores_enable_new_regions(self):
        self.app.geodata.update(restricted=True)
        self.app.update(enable_new_regions=False)

        form = forms.RegionForm({'restricted': '0',
                                 'regions': [mkt.regions.RESTOFWORLD.id],
                                 'enable_new_regions': False}, **self.kwargs)
        assert form.is_valid(), form.errors
        form.save()

        eq_(self.app.enable_new_regions, True)
        eq_(self.app.geodata.restricted, False)
Exemple #26
0
    def test_paid_enable_region(self):
        for region in mkt.regions.ALL_REGION_IDS:
            AER.objects.create(addon=self.app, region=region)
        self.app.update(premium_type=amo.ADDON_PREMIUM)
        price = Price.objects.get(id=1)
        AddonPremium.objects.create(addon=self.app, price=price)
        self.kwargs['price'] = price
        form = forms.RegionForm(data={'regions': []}, **self.kwargs)
        assert not form.is_valid()  # Fails due to needing at least 1 region.
        assert not form.has_inappropriate_regions(), (
            form.has_inappropriate_regions())

        form = forms.RegionForm(data={'regions': [mkt.regions.PL.id]},
                                **self.kwargs)
        assert form.is_valid(), form.errors
        assert not form.has_inappropriate_regions()

        form = forms.RegionForm(data={'regions': [mkt.regions.BR.id]},
                                **self.kwargs)
        assert not form.is_valid()
        assert form.has_inappropriate_regions()
Exemple #27
0
    def test_brazil_games_already_excluded(self):
        AER.objects.create(addon=self.app, region=mkt.regions.BR.id)

        games = Category.objects.create(type=amo.ADDON_WEBAPP, slug='games')
        AddonCategory.objects.create(addon=self.app, category=games)

        form = forms.RegionForm(data={
            'regions': mkt.regions.REGION_IDS,
            'other_regions': True
        },
                                **self.kwargs)

        assert form.is_valid()
        form.save()

        form = forms.RegionForm(data=None, **self.kwargs)
        eq_(
            set(form.initial['regions']),
            set(mkt.regions.REGION_IDS) -
            set([mkt.regions.BR.id, mkt.regions.WORLDWIDE.id]))
        eq_(form.initial['other_regions'], True)
Exemple #28
0
    def test_initial_excluded_in_regions_and_future_regions(self):
        for region in [mkt.regions.BR, mkt.regions.UK, mkt.regions.WORLDWIDE]:
            AER.objects.create(addon=self.app, region=region.id)

        regions = list(mkt.regions.REGION_IDS)
        regions.remove(mkt.regions.BR.id)
        regions.remove(mkt.regions.UK.id)

        eq_(self.get_app().get_region_ids(), regions)

        form = forms.RegionForm(data=None, **self.kwargs)
        eq_(form.initial['regions'], regions)
        eq_(form.initial['other_regions'], False)
Exemple #29
0
    def test_disable_regions_on_paid(self):
        eq_(self.app.get_region_ids(), mkt.regions.REGION_IDS)
        self.app.update(premium_type=amo.ADDON_PREMIUM)
        price = Price.objects.get(id=1)
        AddonPremium.objects.create(addon=self.app, price=price)
        self.kwargs['price'] = price
        form = forms.RegionForm(data=None, **self.kwargs)
        assert not form.is_valid()
        assert form.has_inappropriate_regions()

        form = forms.RegionForm(
            data={'regions': mkt.regions.ALL_PAID_REGION_IDS}, **self.kwargs)
        assert not form.is_valid()
        assert form.has_inappropriate_regions()

        form = forms.RegionForm(data={'regions': [mkt.regions.PL.id]},
                                **self.kwargs)
        assert form.is_valid(), form.errors
        assert not form.has_inappropriate_regions()
        form.save()

        self.assertSetEqual(self.app.get_region_ids(), [mkt.regions.PL.id])
Exemple #30
0
    def test_brazil_games_excluded(self):
        games = Category.objects.create(type=amo.ADDON_WEBAPP, slug='games')
        AddonCategory.objects.create(addon=self.app, category=games)

        form = forms.RegionForm(data={
            'regions': mkt.regions.REGION_IDS,
            'other_regions': True
        },
                                **self.kwargs)

        # Developers should still be able to save form OK, even
        # if they pass a bad region. Think of the grandfathered developers.
        assert form.is_valid(), form.errors
        form.save()

        # No matter what the developer tells us, still exclude Brazilian
        # games.
        form = forms.RegionForm(data=None, **self.kwargs)
        eq_(
            set(form.initial['regions']),
            set(mkt.regions.REGION_IDS) -
            set([mkt.regions.BR.id, mkt.regions.WORLDWIDE.id]))
        eq_(form.initial['other_regions'], True)