def apply_upgrades_and_downgrades(self, downgraded_privileges=None, upgraded_privileges=None, new_plan_version=None, verbose=False): if self.organization is not None: raise SubscriptionChangeError("Only domain upgrades and downgrades are possible.") if new_plan_version is None: new_plan_version = DefaultProductPlan.get_default_plan_by_domain(self.domain) if downgraded_privileges is None or upgraded_privileges is None: dp, up = get_change_status(None, new_plan_version)[1:] downgraded_privileges = downgraded_privileges or dp upgraded_privileges = upgraded_privileges or up if downgraded_privileges: downgrade_handler = DomainDowngradeActionHandler( self.domain, new_plan_version, downgraded_privileges, verbose=verbose, ) if not downgrade_handler.get_response(): raise SubscriptionChangeError("The downgrade was not successful.") if upgraded_privileges: upgrade_handler = DomainUpgradeActionHandler( self.domain, new_plan_version, upgraded_privileges, verbose=verbose, ) if not upgrade_handler.get_response(): raise SubscriptionChangeError("The upgrade was not successful.")
def test_domain_changes(self): role = Mock() role.memberships_granted.all.return_value = [] version = Mock() version.role.get_cached_role.return_value = role handler = DomainDowngradeActionHandler( self.domain, new_plan_version=version, changed_privs=REPORT_BUILDER_ADD_ON_PRIVS ) conflicting_domain = Domain.get_by_name(self.domain_name) conflicting_domain.description = 'eggs' conflicting_domain.save() get_by_name_func = Domain.get_by_name with patch('corehq.apps.accounting.subscription_changes.Domain') as Domain_patch: Domain_patch.get_by_name.side_effect = lambda name: get_by_name_func(name) handler.get_response() Domain_patch.get_by_name.assert_called_with(self.domain_name)