def has_permission(self, request, view): checker = RestrictionChecker(request=request) if not checker.is_submission_allowed(): self.message = checker.get_error_message() self.code = 'permission_denied_restriction' return False return True
def test_is_submission_allowed_bypassing_read_dev_agreement_restricted( self, incr_mock): # Mix of test_is_submission_allowed_email_restricted() and # test_is_submission_allowed_bypassing_read_dev_agreement() above: # this time, we're restricted by email while bypassing the read dev # agreement check. This ensures even when bypassing that check, we # still record everything properly when restricting. EmailUserRestriction.objects.create( email_pattern=self.request.user.email) checker = RestrictionChecker(request=self.request) assert not checker.is_submission_allowed(check_dev_agreement=False) assert checker.get_error_message() == ( 'The email address used for your account is not ' 'allowed for add-on submission.') assert incr_mock.call_count == 2 assert incr_mock.call_args_list[0][0] == ( 'RestrictionChecker.is_submission_allowed.EmailUserRestriction.failure', ) assert incr_mock.call_args_list[1][0] == ( 'RestrictionChecker.is_submission_allowed.failure', ) assert UserRestrictionHistory.objects.count() == 1 history = UserRestrictionHistory.objects.get() assert history.get_restriction_display() == 'EmailUserRestriction' assert history.user == self.request.user assert history.last_login_ip == self.request.user.last_login_ip assert history.ip_address == '10.0.0.1'
def test_is_submission_allowed_pass(self, incr_mock): checker = RestrictionChecker(request=self.request) assert checker.is_submission_allowed() assert incr_mock.call_count == 1 assert incr_mock.call_args_list[0][0] == ( 'RestrictionChecker.is_submission_allowed.success', ) assert not UserRestrictionHistory.objects.exists()
def test_user_is_allowed_to_bypass_restrictions(self, incr_mock): IPNetworkUserRestriction.objects.create(network='10.0.0.0/24') EmailUserRestriction.objects.create(email_pattern=self.request.user.email) self.request.user.update(bypass_upload_restrictions=True) checker = RestrictionChecker(request=self.request) assert checker.is_submission_allowed() assert not UserRestrictionHistory.objects.exists() assert incr_mock.call_count == 0
def test_is_submission_allowed_bypassing_read_dev_agreement( self, incr_mock): self.request.user.update(read_dev_agreement=None) checker = RestrictionChecker(request=self.request) assert checker.is_submission_allowed(check_dev_agreement=False) assert incr_mock.call_count == 1 assert incr_mock.call_args_list[0][0] == ( 'RestrictionChecker.is_submission_allowed.success', ) assert not UserRestrictionHistory.objects.exists()
def test_is_submission_allowed_with_mocks(self, incr_mock): checker = RestrictionChecker(request=self.request) with ExitStack() as stack: allow_submission_mocks = [ stack.enter_context(mock.patch.object(choice[1], 'allow_submission')) for choice in checker.restriction_choices ] allow_auto_approval_mocks = [ stack.enter_context(mock.patch.object(choice[1], 'allow_auto_approval')) for choice in checker.restriction_choices ] assert checker.is_submission_allowed() for restriction_mock in allow_submission_mocks: assert restriction_mock.call_count == 1 for restriction_mock in allow_auto_approval_mocks: assert restriction_mock.call_count == 0
def test_is_submission_allowed_ip_restricted(self, incr_mock): IPNetworkUserRestriction.objects.create(network='10.0.0.0/24') checker = RestrictionChecker(request=self.request) assert not checker.is_submission_allowed() assert checker.get_error_message() == ( 'Multiple add-ons violating our policies have been submitted ' 'from your location. The IP address has been blocked.') assert incr_mock.call_count == 2 assert incr_mock.call_args_list[0][0] == ( 'RestrictionChecker.is_submission_allowed.IPNetworkUserRestriction.failure', ) assert incr_mock.call_args_list[1][0] == ( 'RestrictionChecker.is_submission_allowed.failure', ) assert UserRestrictionHistory.objects.count() == 1 history = UserRestrictionHistory.objects.get() assert history.get_restriction_display() == 'IPNetworkUserRestriction' assert history.user == self.request.user assert history.last_login_ip == self.request.user.last_login_ip assert history.ip_address == '10.0.0.1'
def test_is_submission_allowed_email_restricted(self, incr_mock): EmailUserRestriction.objects.create( email_pattern=self.request.user.email) checker = RestrictionChecker(request=self.request) assert not checker.is_submission_allowed() assert checker.get_error_message() == ( 'The email address used for your account is not ' 'allowed for add-on submission.') assert incr_mock.call_count == 2 assert incr_mock.call_args_list[0][0] == ( 'RestrictionChecker.is_submission_allowed.EmailUserRestriction.failure', ) assert incr_mock.call_args_list[1][0] == ( 'RestrictionChecker.is_submission_allowed.failure', ) assert UserRestrictionHistory.objects.count() == 1 history = UserRestrictionHistory.objects.get() assert history.get_restriction_display() == 'EmailUserRestriction' assert history.user == self.request.user assert history.last_login_ip == self.request.user.last_login_ip assert history.ip_address == '10.0.0.1'
def test_is_submission_allowed_hasnt_read_agreement(self, incr_mock): self.request.user.update(read_dev_agreement=None) checker = RestrictionChecker(request=self.request) assert not checker.is_submission_allowed() assert checker.get_error_message() == ( 'Before starting, please read and accept our Firefox Add-on ' 'Distribution Agreement as well as our Review Policies and Rules. ' 'The Firefox Add-on Distribution Agreement also links to our ' 'Privacy Notice which explains how we handle your information.') assert incr_mock.call_count == 2 assert incr_mock.call_args_list[0][0] == ( 'RestrictionChecker.is_submission_allowed.DeveloperAgreementRestriction.' 'failure', ) assert incr_mock.call_args_list[1][0] == ( 'RestrictionChecker.is_submission_allowed.failure', ) assert UserRestrictionHistory.objects.count() == 1 history = UserRestrictionHistory.objects.get() assert history.get_restriction_display() == ( 'DeveloperAgreementRestriction') assert history.user == self.request.user assert history.last_login_ip == self.request.user.last_login_ip assert history.ip_address == '10.0.0.1'
def test_is_submission_allowed_no_request_raises_improperly_configured( self, incr_mock): checker = RestrictionChecker(upload=mock.Mock()) with self.assertRaises(ImproperlyConfigured): assert checker.is_submission_allowed()