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
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
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()
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
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)
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))
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
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)
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()
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)
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)
def gen_random_author(): (email_base, name) = random.choice(org_users) email = create_fake_email(email_base, "demo") return (name, email)