示例#1
0
文件: tests.py 项目: Kayle009/sentry
    def test_fake_dont_send(self):
        project = self.project

        user_a = User.objects.create(email=create_fake_email('foo', 'fake'))
        user_b = User.objects.create(email=create_fake_email('bar', 'fake'))
        user_c = User.objects.create(email=create_fake_email('baz', 'fake'))

        UserOption.objects.create(
            user=user_b,
            key='alert_email',
            value=create_fake_email('fizzle', 'fake'),
        )
        UserOption.objects.create(
            user=user_c,
            project=project,
            key='mail:email',
            value=create_fake_email('bazzer', 'fake'),
        )

        msg = MessageBuilder(
            subject='Test',
            body='hello world',
            html_body='<!DOCTYPE html>\n<b>hello world</b>',
        )
        msg.add_users([user_a.id, user_b.id, user_c.id], project=project)
        msg.send()

        assert len(mail.outbox) == 0
示例#2
0
    def test_fake_dont_send(self):
        project = self.project

        user_a = User.objects.create(email=create_fake_email('foo', 'fake'))
        user_b = User.objects.create(email=create_fake_email('bar', 'fake'))
        user_c = User.objects.create(email=create_fake_email('baz', 'fake'))

        UserOption.objects.create(
            user=user_b,
            key='alert_email',
            value=create_fake_email('fizzle', 'fake'),
        )
        UserOption.objects.create(
            user=user_c,
            project=project,
            key='mail:email',
            value=create_fake_email('bazzer', 'fake'),
        )

        msg = MessageBuilder(
            subject='Test',
            body='hello world',
            html_body='<!DOCTYPE html>\n<b>hello world</b>',
        )
        msg.add_users([user_a.id, user_b.id, user_c.id], project=project)
        msg.send()

        assert len(mail.outbox) == 0
示例#3
0
    def test_assign_demo_org(self, mock_build_up_org_buffer, mock_now):
        curr_time = datetime.utcnow().replace(tzinfo=pytz.utc)
        mock_now.return_value = curr_time

        org_slug = "some_org"
        org = self.create_organization(org_slug)
        DemoOrganization.objects.create(organization=org,
                                        status=DemoOrgStatus.PENDING)

        Team.objects.create(organization=org)

        (org, user) = assign_demo_org()

        assert OrganizationMember.objects.filter(user=user,
                                                 organization=org,
                                                 role="member").exists()
        assert user.email == create_fake_email(org.slug, "demo")

        demo_org = DemoOrganization.objects.get(organization=org,
                                                status=DemoOrgStatus.ACTIVE)
        demo_user = DemoUser.objects.get(user=user)

        assert demo_org.date_assigned == curr_time
        assert demo_user.date_assigned == curr_time

        mock_build_up_org_buffer.assert_called_once_with()
示例#4
0
    def test_assign_demo_org_integrity_error(self, mock_build_up_org_buffer,
                                             mock_create_user,
                                             mock_get_one_pending_org):
        email = create_fake_email("slug-two", "demo")
        second_user = self.create_user(email=email)
        mock_create_user.side_effect = [IntegrityError, second_user]

        demo_orgs = []
        for org_slug in ["slug-one", "slug-two"]:
            org = self.create_organization(org_slug)
            demo_org = DemoOrganization.objects.create(
                organization=org, status=DemoOrgStatus.PENDING)
            demo_orgs.append(demo_org)
            Team.objects.create(organization=org)
            project = self.create_project(organization=org)
            self.create_project_key(project)

        # return the two orgs
        mock_get_one_pending_org.side_effect = demo_orgs

        # we should get the second org
        (org, user) = assign_demo_org()

        assert user.email == email
        assert org.slug == "slug-two"

        assert mock_create_user.call_count == 2
        assert mock_get_one_pending_org.call_count == 2
示例#5
0
def assign_demo_org() -> Tuple[Organization, User]:
    from .tasks import build_up_org_buffer

    demo_org = DemoOrganization.objects.filter(status=DemoOrgStatus.PENDING).first()
    if not demo_org:
        raise NoDemoOrgReady()

    org = demo_org.organization

    email = create_fake_email(org.slug, "demo")
    user = DemoUser.create_user(
        email=email,
        username=email,
        is_managed=True,
    )

    # TODO: May need logic in case team no longer exists
    team = Team.objects.get(organization=org)

    member = OrganizationMember.objects.create(organization=org, user=user, role="member")
    OrganizationMemberTeam.objects.create(team=team, organizationmember=member, is_active=True)

    # update the date added to now so we reset the timer on deletion
    demo_org.mark_assigned()

    # build up the buffer
    build_up_org_buffer.apply_async()

    return (org, user)
示例#6
0
    def dispatch(self, request):
        # need this check for tests since the route will exist even if DEMO_MODE=False
        if not settings.DEMO_MODE:
            raise Http404

        # TODO: add way to ensure we generate unique petnames
        name = generate_random_name()

        slug = slugify(name)

        email = create_fake_email(slug, "demo")
        user = User.objects.create(
            email=email,
            username=email,
            is_managed=True,
            flags=User.flags["demo_mode"],
        )

        org = Organization.objects.create(
            name=name,
            slug=slug,
            flags=Organization.flags["demo_mode"],
        )
        team = org.team_set.create(name=org.name)

        owner = User.objects.get(email=settings.DEMO_ORG_OWNER_EMAIL)
        OrganizationMember.objects.create(organization=org,
                                          user=owner,
                                          role=roles.get_top_dog().id)

        member = OrganizationMember.objects.create(organization=org,
                                                   user=user,
                                                   role="member")
        OrganizationMemberTeam.objects.create(team=team,
                                              organizationmember=member,
                                              is_active=True)

        python_project = Project.objects.create(name="Python",
                                                organization=org,
                                                platform="python")
        python_project.add_team(team)

        reat_project = Project.objects.create(name="React",
                                              organization=org,
                                              platform="javascript-react")
        reat_project.add_team(team)

        populate_python_project(python_project)
        populate_react_project(reat_project)

        # delete all DSNs for the org so people don't send events
        ProjectKey.objects.filter(project__organization=org).delete()

        auth.login(request, user)
        return self.redirect(auth.get_login_redirect(request))
示例#7
0
文件: tests.py 项目: pasala91/test
    def test_fake_dont_send(self):
        project = self.project

        user_a = User.objects.create(email=create_fake_email("foo", "fake"))
        user_b = User.objects.create(email=create_fake_email("bar", "fake"))
        user_c = User.objects.create(email=create_fake_email("baz", "fake"))

        UserOption.objects.create(
            user=user_c,
            project=project,
            key="mail:email",
            value=create_fake_email("bazzer", "fake"),
        )

        msg = MessageBuilder(subject="Test",
                             body="hello world",
                             html_body="<!DOCTYPE html>\n<b>hello world</b>")
        msg.add_users([user_a.id, user_b.id, user_c.id], project=project)
        msg.send()

        assert len(mail.outbox) == 0
示例#8
0
def populate_org_members(org, team):
    for user_info in org_users:
        (email_base, name) = user_info
        email = create_fake_email(email_base, "demo")
        user, _ = User.objects.get_or_create(name=name,
                                             email=email,
                                             is_managed=True)
        member = OrganizationMember.objects.create(user=user,
                                                   organization=org,
                                                   role="member")
        OrganizationMemberTeam.objects.create(team=team,
                                              organizationmember=member,
                                              is_active=True)
def assign_demo_org() -> Tuple[Organization, User]:
    from .tasks import build_up_org_buffer

    demo_org = None
    # option to skip the buffer when testing things out locally
    if settings.DEMO_NO_ORG_BUFFER:
        org = create_demo_org()
    else:
        demo_org = DemoOrganization.objects.filter(
            status=DemoOrgStatus.PENDING).first()
        # if no org in buffer, make a quick one with fewer events
        if not demo_org:
            org = create_demo_org(quick=True)

    if not demo_org:
        demo_org = DemoOrganization.objects.get(organization=org)

    org = demo_org.organization

    # wrap the assignment of the demo org in a transaction
    with transaction.atomic():
        email = create_fake_email(org.slug, "demo")
        user = DemoUser.create_user(
            email=email,
            username=email,
            is_managed=True,
        )

        # TODO: May need logic in case team no longer exists
        team = Team.objects.get(organization=org)

        member = OrganizationMember.objects.create(organization=org,
                                                   user=user,
                                                   role="member")
        OrganizationMemberTeam.objects.create(team=team,
                                              organizationmember=member,
                                              is_active=True)

        # update the date added to now so we reset the timer on deletion
        demo_org.mark_assigned()

    # build up the buffer
    build_up_org_buffer.apply_async()

    return (org, user)
示例#10
0
    def test_basic(self, mock_generate_name):
        owner = User.objects.create(email=org_owner_email)
        resp = self.client.get(self.path)
        assert resp.status_code == 302

        org = Organization.objects.get(name=org_name)
        slug = slugify(org_name)
        email = create_fake_email(slug, "demo")
        user = User.objects.get(email=email)

        assert OrganizationMember.objects.filter(user=user,
                                                 organization=org,
                                                 role="member").exists()
        assert OrganizationMember.objects.filter(user=owner,
                                                 organization=org,
                                                 role="owner").exists()

        assert len(Project.objects.filter(organization=org)) == 2
        assert not ProjectKey.objects.filter(
            project__organization=org).exists()
示例#11
0
def assign_demo_org(skip_buffer=False, retries_left=3) -> Tuple[Organization, User]:
    with sentry_sdk.configure_scope() as scope:
        try:
            parent_span_id = scope.span.span_id
            trace_id = scope.span.trace_id
        except AttributeError:
            parent_span_id = None
            trace_id = None
    with sentry_sdk.start_transaction(
        op="assign_demo_org",
        name="assign_demo_org",
        parent_span_id=parent_span_id,
        trace_id=trace_id,
        sampled=True,
    ):
        from .tasks import build_up_org_buffer

        demo_org = None
        # option to skip the buffer when testing things out
        if skip_buffer:
            org = create_demo_org(quick=True)
        else:
            demo_org = DemoOrganization.get_one_pending_org()
            # if no org in buffer, make a quick one with fewer events
            if not demo_org:
                org = create_demo_org(quick=True)

        if not demo_org:
            demo_org = DemoOrganization.objects.get(organization=org)

        org = demo_org.organization

        # wrap the assignment of the demo org in a transaction
        with transaction.atomic():
            email = create_fake_email(org.slug, "demo")
            try:
                user = DemoUser.create_user(
                    email=email,
                    username=email,
                    is_managed=True,
                )
            except IntegrityError:
                # There is a race condition where two people might try to reserve the same organization
                # at the same time. If that happens, we get IntegrityError creating the user.
                # If that happens, try the same thing (which will give us a new org) but only up to 3 times
                if retries_left == 0:
                    raise
                return assign_demo_org(skip_buffer=skip_buffer, retries_left=retries_left - 1)

            # TODO: May need logic in case team no longer exists
            team = Team.objects.get(organization=org)

            member = OrganizationMember.objects.create(organization=org, user=user, role="member")
            OrganizationMemberTeam.objects.create(
                team=team, organizationmember=member, is_active=True
            )

            # delete all DSNs for the org so people don't send events
            ProjectKey.objects.filter(project__organization=org).delete()

            # update the date added to now so we reset the timer on deletion
            demo_org.mark_assigned()

        # build up the buffer
        build_up_org_buffer.apply_async()

        return (org, user)
示例#12
0
def assign_demo_org() -> Tuple[Organization, User]:
    with sentry_sdk.configure_scope() as scope:
        try:
            parent_span_id = scope.span.span_id
            trace_id = scope.span.trace_id
        except AttributeError:
            parent_span_id = None
            trace_id = None
    with sentry_sdk.start_transaction(
            op="assign_demo_org",
            name="assign_demo_org",
            parent_span_id=parent_span_id,
            trace_id=trace_id,
            sampled=True,
    ):
        from .tasks import build_up_org_buffer

        demo_org = None
        # option to skip the buffer when testing things out locally
        if settings.DEMO_NO_ORG_BUFFER:
            org = create_demo_org()
        else:
            demo_org = DemoOrganization.objects.filter(
                status=DemoOrgStatus.PENDING).first()
            # if no org in buffer, make a quick one with fewer events
            if not demo_org:
                org = create_demo_org(quick=True)

        if not demo_org:
            demo_org = DemoOrganization.objects.get(organization=org)

        org = demo_org.organization

        # wrap the assignment of the demo org in a transaction
        with transaction.atomic():
            email = create_fake_email(org.slug, "demo")
            user = DemoUser.create_user(
                email=email,
                username=email,
                is_managed=True,
            )

            # TODO: May need logic in case team no longer exists
            team = Team.objects.get(organization=org)

            member = OrganizationMember.objects.create(organization=org,
                                                       user=user,
                                                       role="member")
            OrganizationMemberTeam.objects.create(team=team,
                                                  organizationmember=member,
                                                  is_active=True)

            # delete all DSNs for the org so people don't send events
            ProjectKey.objects.filter(project__organization=org).delete()

            # update the date added to now so we reset the timer on deletion
            demo_org.mark_assigned()

        # build up the buffer
        build_up_org_buffer.apply_async()

        return (org, user)
示例#13
0
def gen_random_author():
    (email_base, name) = random.choice(org_users)
    email = create_fake_email(email_base, "demo")
    return (name, email)