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()
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)
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)
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
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)
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'])
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)
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)
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'
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))
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)
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.']})
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)
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)
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
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)
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)
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)
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', []))
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()
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."' ] })
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)
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)
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)
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)
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()
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)
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)
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])
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)