Exemple #1
0
    def test_get_user_subscriptions_for_groups_empty(self):
        groups_by_project = {self.project: {self.group}}
        notification_settings_by_scope = {
            NotificationScopeType.USER: {
                self.user.id: {
                    ExternalProviders.SLACK:
                    NotificationSettingOptionValues.NEVER,
                    ExternalProviders.EMAIL:
                    NotificationSettingOptionValues.ALWAYS,
                },
            },
            NotificationScopeType.PROJECT: {
                self.project.id: {
                    ExternalProviders.SLACK:
                    NotificationSettingOptionValues.NEVER,
                    ExternalProviders.EMAIL:
                    NotificationSettingOptionValues.NEVER,
                },
            },
        }

        subscriptions_by_group_id = {self.group.id: self.group_subscription}
        assert (get_user_subscriptions_for_groups(
            groups_by_project={},
            notification_settings_by_scope={},
            subscriptions_by_group_id={},
            user=self.user,
        ) == {})

        assert (get_user_subscriptions_for_groups(
            groups_by_project={},
            notification_settings_by_scope=notification_settings_by_scope,
            subscriptions_by_group_id=subscriptions_by_group_id,
            user=self.user,
        ) == {})

        assert (get_user_subscriptions_for_groups(
            groups_by_project=groups_by_project,
            notification_settings_by_scope={},
            subscriptions_by_group_id=subscriptions_by_group_id,
            user=self.user,
        ) == {
            self.group.id: (False, True, self.group_subscription)
        })

        assert (get_user_subscriptions_for_groups(
            groups_by_project=groups_by_project,
            notification_settings_by_scope=notification_settings_by_scope,
            subscriptions_by_group_id={},
            user=self.user,
        ) == {
            self.group.id: (True, False, None)
        })
Exemple #2
0
    def _get_subscriptions(
        groups: Iterable[Group], user: User
    ) -> Mapping[int, Tuple[bool, bool, Optional[GroupSubscription]]]:
        """
        Returns a mapping of group IDs to a two-tuple of (is_disabled: bool,
        subscribed: bool, subscription: Optional[GroupSubscription]) for the
        provided user and groups.
        """
        if not groups:
            return {}

        groups_by_project = collect_groups_by_project(groups)
        notification_settings_by_scope = transform_to_notification_settings_by_scope(
            NotificationSetting.objects.get_for_user_by_projects(
                NotificationSettingTypes.WORKFLOW,
                user,
                groups_by_project.keys(),
            )
        )
        query_groups = get_groups_for_query(groups_by_project, notification_settings_by_scope, user)
        subscriptions = GroupSubscription.objects.filter(group__in=query_groups, user=user)
        subscriptions_by_group_id = {
            subscription.group_id: subscription for subscription in subscriptions
        }

        return get_user_subscriptions_for_groups(
            groups_by_project,
            notification_settings_by_scope,
            subscriptions_by_group_id,
            user,
        )
Exemple #3
0
 def test_get_user_subscriptions_for_groups(self):
     groups_by_project = {self.project: {self.group}}
     notification_settings_by_key = {5: NotificationSettingOptionValues.ALWAYS}
     subscriptions_by_group_id = {2: None}
     global_default_workflow_option = NotificationSettingOptionValues.ALWAYS
     subscriptions = get_user_subscriptions_for_groups(
         groups_by_project,
         notification_settings_by_key,
         subscriptions_by_group_id,
         global_default_workflow_option,
     )
     assert subscriptions == {self.group.id: (False, True, None)}
Exemple #4
0
    def _get_subscriptions(
        groups: Iterable[Group], user: User
    ) -> Mapping[int, Tuple[bool, bool, Optional[GroupSubscription]]]:
        """
        Returns a mapping of group IDs to a two-tuple of (is_disabled: bool,
        subscribed: bool, subscription: Optional[GroupSubscription]) for the
        provided user and groups.
        """
        if not groups:
            return {}

        groups_by_project = collect_groups_by_project(groups)
        notification_settings = NotificationSetting.objects.get_for_user_by_projects(
            NotificationSettingTypes.WORKFLOW,
            user,
            groups_by_project.keys(),
        )

        (
            notification_settings_by_project_id_by_provider,
            default_subscribe_by_provider,
        ) = transform_to_notification_settings_by_parent_id(
            notification_settings,
            NotificationSettingOptionValues.SUBSCRIBE_ONLY)
        notification_settings_by_key = notification_settings_by_project_id_by_provider[
            ExternalProviders.EMAIL]
        global_default_workflow_option = default_subscribe_by_provider[
            ExternalProviders.EMAIL]

        query_groups = get_groups_for_query(
            groups_by_project,
            notification_settings_by_key,
            global_default_workflow_option,
        )
        subscriptions = GroupSubscription.objects.filter(
            group__in=query_groups, user=user)
        subscriptions_by_group_id = {
            subscription.group_id: subscription
            for subscription in subscriptions
        }

        return get_user_subscriptions_for_groups(
            groups_by_project,
            notification_settings_by_key,
            subscriptions_by_group_id,
            global_default_workflow_option,
        )