Esempio n. 1
0
class TestCreator(TestCase):
    def setUp(self):
        self.user = self.create_user()
        self.org = self.create_organization(owner=self.user)
        self.creator = Creator(name='nulldb',
                               organization=self.org,
                               scopes=('project:read',),
                               webhook_url='http://example.com')

    def test_creates_proxy_user(self):
        self.creator.call()

        assert User.objects.get(
            username='******',
            is_sentry_app=True,
        )

    def test_creates_api_application(self):
        self.creator.call()
        proxy = User.objects.get(username='******')

        assert ApiApplication.objects.get(owner=proxy)

    def test_creates_sentry_app(self):
        self.creator.call()

        proxy = User.objects.get(username='******')
        app = ApiApplication.objects.get(owner=proxy)

        sentry_app = SentryApp.objects.get(
            name='nulldb',
            application=app,
            owner=self.org,
            proxy_user=proxy,
        )

        assert sentry_app
        assert sentry_app.scope_list == ['project:read']

    def test_expands_rolled_up_events(self):
        self.creator.events = ['issue']
        app = self.creator.call()

        sentry_app = SentryApp.objects.get(id=app.id)

        assert 'issue.created' in sentry_app.events
Esempio n. 2
0
class TestCreator(TestCase):
    def setUp(self):
        self.user = self.create_user()
        self.org = self.create_organization(owner=self.user)
        self.creator = Creator(name='nulldb',
                               organization=self.org,
                               scopes=('project:read', ),
                               webhook_url='http://example.com')

    def test_creates_proxy_user(self):
        self.creator.call()

        assert User.objects.get(
            username='******',
            is_sentry_app=True,
        )

    def test_creates_api_application(self):
        self.creator.call()
        proxy = User.objects.get(username='******')

        assert ApiApplication.objects.get(owner=proxy)

    def test_creates_sentry_app(self):
        self.creator.call()

        proxy = User.objects.get(username='******')
        app = ApiApplication.objects.get(owner=proxy)

        sentry_app = SentryApp.objects.get(
            name='nulldb',
            application=app,
            owner=self.org,
            proxy_user=proxy,
        )

        assert sentry_app
        assert sentry_app.scope_list == ['project:read']

    def test_expands_rolled_up_events(self):
        self.creator.events = ['issue']
        app = self.creator.call()

        sentry_app = SentryApp.objects.get(id=app.id)

        assert 'issue.created' in sentry_app.events
Esempio n. 3
0
class TestCreator(TestCase):
    def setUp(self):
        self.user = self.create_user()
        self.creator = Creator(name='nulldb',
                               user=self.user,
                               scopes=('project:read',),
                               webhook_url='http://example.com')

    def test_creates_proxy_user(self):
        self.creator.call()

        assert User.objects.get(
            username='******',
            is_sentry_app=True,
        )

    def test_creates_api_application(self):
        self.creator.call()
        proxy = User.objects.get(username='******')

        assert ApiApplication.objects.get(owner=proxy)

    def test_creates_sentry_app(self):
        self.creator.call()

        proxy = User.objects.get(username='******')
        app = ApiApplication.objects.get(owner=proxy)

        sentry_app = SentryApp.objects.get(
            name='nulldb',
            application=app,
            owner=self.user,
            proxy_user=proxy,
        )

        assert sentry_app
        assert sentry_app.scope_list == ['project:read']
Esempio n. 4
0
class TestCreator(TestCase):
    def setUp(self):
        self.user = self.create_user()
        self.creator = Creator(name='nulldb',
                               user=self.user,
                               scopes=('project:read', ),
                               webhook_url='http://example.com')

    def test_creates_proxy_user(self):
        self.creator.call()

        assert User.objects.get(
            username='******',
            is_sentry_app=True,
        )

    def test_creates_api_application(self):
        self.creator.call()
        proxy = User.objects.get(username='******')

        assert ApiApplication.objects.get(owner=proxy)

    def test_creates_sentry_app(self):
        self.creator.call()

        proxy = User.objects.get(username='******')
        app = ApiApplication.objects.get(owner=proxy)

        sentry_app = SentryApp.objects.get(
            name='nulldb',
            application=app,
            owner=self.user,
            proxy_user=proxy,
        )

        assert sentry_app
        assert sentry_app.scope_list == ['project:read']
Esempio n. 5
0
class TestCreator(TestCase):
    def setUp(self):
        self.user = self.create_user()
        self.org = self.create_organization(owner=self.user)
        self.creator = Creator(
            name="nulldb",
            user=self.user,
            author="Sentry",
            organization=self.org,
            scopes=("project:read", ),
            webhook_url="http://example.com",
            schema={"elements": [self.create_issue_link_schema()]},
            is_internal=False,
        )

    def test_slug(self):
        app = self.creator.call()
        assert app.slug == "nulldb"

    def test_creates_proxy_user(self):
        self.creator.call()

        assert User.objects.get(username__contains="nulldb",
                                is_sentry_app=True)

    def test_creates_api_application(self):
        self.creator.call()
        proxy = User.objects.get(username__contains="nulldb")

        assert ApiApplication.objects.get(owner=proxy)

    def test_creates_sentry_app(self):
        self.creator.call()

        proxy = User.objects.get(username__contains="nulldb")
        app = ApiApplication.objects.get(owner=proxy)

        sentry_app = SentryApp.objects.get(name="nulldb",
                                           application=app,
                                           owner=self.org,
                                           proxy_user=proxy)

        assert sentry_app
        assert sentry_app.scope_list == ["project:read"]

    def test_expands_rolled_up_events(self):
        self.creator.events = ["issue"]
        app = self.creator.call()

        sentry_app = SentryApp.objects.get(id=app.id)

        assert "issue.created" in sentry_app.events

    def test_creates_ui_components(self):
        self.creator.schema = {
            "elements": [
                self.create_issue_link_schema(),
                self.create_alert_rule_action_schema()
            ]
        }

        app = self.creator.call()

        assert SentryAppComponent.objects.filter(sentry_app_id=app.id,
                                                 type="issue-link").exists()

        assert SentryAppComponent.objects.filter(
            sentry_app_id=app.id, type="alert-rule-action").exists()

    def test_creates_integration_feature(self):
        app = self.creator.call()
        assert IntegrationFeature.objects.filter(sentry_app=app).exists()

    @patch("sentry.mediators.sentry_apps.creator.Creator.log")
    @patch("sentry.models.integrationfeature.IntegrationFeature.objects.create"
           )
    def test_raises_error_creating_integration_feature(self, mock_create,
                                                       mock_log):
        mock_create.side_effect = IntegrityError()
        self.creator.call()
        mock_log.assert_called_with(sentry_app="nulldb", error_message="")

    def test_creates_audit_log_entry(self):
        request = self.make_request(user=self.user, method="GET")
        Creator.run(
            name="nulldb",
            user=self.user,
            author="Sentry",
            organization=self.org,
            scopes=("project:read", ),
            webhook_url="http://example.com",
            schema={"elements": [self.create_issue_link_schema()]},
            request=request,
            is_internal=False,
        )
        assert AuditLogEntry.objects.filter(
            event=AuditLogEntryEvent.SENTRY_APP_ADD).exists()

    def test_blank_schema(self):
        self.creator.schema = ""
        assert self.creator.call()

    def test_none_schema(self):
        self.creator.schema = None
        assert self.creator.call()

    def test_schema_with_no_elements(self):
        self.creator.schema = {"elements": []}
        assert self.creator.call()

    @patch("sentry.analytics.record")
    def test_records_analytics(self, record):
        sentry_app = Creator.run(
            name="nulldb",
            user=self.user,
            author="Sentry",
            organization=self.org,
            scopes=("project:read", ),
            webhook_url="http://example.com",
            schema={"elements": [self.create_issue_link_schema()]},
            request=self.make_request(user=self.user, method="GET"),
            is_internal=False,
        )

        record.assert_called_with(
            "sentry_app.created",
            user_id=self.user.id,
            organization_id=self.org.id,
            sentry_app=sentry_app.slug,
        )

    def test_allows_name_that_exists_as_username_already(self):
        self.create_user(username="******")
        assert self.creator.call()
Esempio n. 6
0
class TestCreator(TestCase):
    def setUp(self):
        self.user = self.create_user()
        self.org = self.create_organization(owner=self.user)
        self.creator = Creator(
            name='nulldb',
            user=self.user,
            author='Sentry',
            organization=self.org,
            scopes=('project:read', ),
            webhook_url='http://example.com',
            schema={'elements': [self.create_issue_link_schema()]},
        )

    def test_creates_proxy_user(self):
        self.creator.call()

        assert User.objects.get(
            username='******',
            is_sentry_app=True,
        )

    def test_creates_api_application(self):
        self.creator.call()
        proxy = User.objects.get(username='******')

        assert ApiApplication.objects.get(owner=proxy)

    def test_creates_sentry_app(self):
        self.creator.call()

        proxy = User.objects.get(username='******')
        app = ApiApplication.objects.get(owner=proxy)

        sentry_app = SentryApp.objects.get(
            name='nulldb',
            application=app,
            owner=self.org,
            proxy_user=proxy,
        )

        assert sentry_app
        assert sentry_app.scope_list == ['project:read']

    def test_expands_rolled_up_events(self):
        self.creator.events = ['issue']
        app = self.creator.call()

        sentry_app = SentryApp.objects.get(id=app.id)

        assert 'issue.created' in sentry_app.events

    def test_creates_ui_components(self):
        self.creator.schema = {
            'elements': [
                self.create_issue_link_schema(),
                self.create_alert_rule_action_schema(),
            ],
        }

        app = self.creator.call()

        assert SentryAppComponent.objects.filter(
            sentry_app_id=app.id,
            type='issue-link',
        ).exists()

        assert SentryAppComponent.objects.filter(
            sentry_app_id=app.id,
            type='alert-rule-action',
        ).exists()

    def test_creates_integration_feature(self):
        app = self.creator.call()
        assert IntegrationFeature.objects.filter(sentry_app=app).exists()

    @patch('sentry.mediators.sentry_apps.creator.Creator.log')
    @patch('sentry.models.integrationfeature.IntegrationFeature.objects.create'
           )
    def test_raises_error_creating_integration_feature(self, mock_create,
                                                       mock_log):
        mock_create.side_effect = IntegrityError()
        self.creator.call()
        mock_log.assert_called_with(
            sentry_app='nulldb',
            error_message='',
        )

    def test_creates_audit_log_entry(self):
        request = self.make_request(user=self.user, method='GET')
        Creator.run(
            name='nulldb',
            user=self.user,
            author='Sentry',
            organization=self.org,
            scopes=('project:read', ),
            webhook_url='http://example.com',
            schema={'elements': [self.create_issue_link_schema()]},
            request=request,
        )
        assert AuditLogEntry.objects.filter(
            event=AuditLogEntryEvent.SENTRY_APP_ADD).exists()

    def test_blank_schema(self):
        self.creator.schema = ''
        assert self.creator.call()

    def test_none_schema(self):
        self.creator.schema = None
        assert self.creator.call()

    def test_schema_with_no_elements(self):
        self.creator.schema = {'elements': []}
        assert self.creator.call()

    @patch('sentry.analytics.record')
    def test_records_analytics(self, record):
        sentry_app = Creator.run(
            name='nulldb',
            user=self.user,
            author='Sentry',
            organization=self.org,
            scopes=('project:read', ),
            webhook_url='http://example.com',
            schema={'elements': [self.create_issue_link_schema()]},
            request=self.make_request(user=self.user, method='GET'))

        record.assert_called_with(
            'sentry_app.created',
            user_id=self.user.id,
            organization_id=self.org.id,
            sentry_app=sentry_app.slug,
        )
Esempio n. 7
0
class TestCreator(TestCase):
    def setUp(self):
        self.user = self.create_user()
        self.org = self.create_organization(owner=self.user)
        self.creator = Creator(
            name='nulldb',
            user=self.user,
            author='Sentry',
            organization=self.org,
            scopes=('project:read',),
            webhook_url='http://example.com',
            schema={'elements': [self.create_issue_link_schema()]},
        )

    def test_creates_proxy_user(self):
        self.creator.call()

        assert User.objects.get(
            username='******',
            is_sentry_app=True,
        )

    def test_creates_api_application(self):
        self.creator.call()
        proxy = User.objects.get(username='******')

        assert ApiApplication.objects.get(owner=proxy)

    def test_creates_sentry_app(self):
        self.creator.call()

        proxy = User.objects.get(username='******')
        app = ApiApplication.objects.get(owner=proxy)

        sentry_app = SentryApp.objects.get(
            name='nulldb',
            application=app,
            owner=self.org,
            proxy_user=proxy,
        )

        assert sentry_app
        assert sentry_app.scope_list == ['project:read']

    def test_expands_rolled_up_events(self):
        self.creator.events = ['issue']
        app = self.creator.call()

        sentry_app = SentryApp.objects.get(id=app.id)

        assert 'issue.created' in sentry_app.events

    def test_creates_ui_components(self):
        self.creator.schema = {
            'elements': [
                self.create_issue_link_schema(),
                self.create_alert_rule_action_schema(),
            ],
        }

        app = self.creator.call()

        assert SentryAppComponent.objects.filter(
            sentry_app_id=app.id,
            type='issue-link',
        ).exists()

        assert SentryAppComponent.objects.filter(
            sentry_app_id=app.id,
            type='alert-rule-action',
        ).exists()

    def test_creates_audit_log_entry(self):
        request = self.make_request(user=self.user, method='GET')
        Creator.run(
            name='nulldb',
            user=self.user,
            author='Sentry',
            organization=self.org,
            scopes=('project:read',),
            webhook_url='http://example.com',
            schema={'elements': [self.create_issue_link_schema()]},
            request=request,
        )
        assert AuditLogEntry.objects.filter(event=AuditLogEntryEvent.SENTRY_APP_ADD).exists()

    def test_blank_schema(self):
        self.creator.schema = ''
        assert self.creator.call()

    def test_none_schema(self):
        self.creator.schema = None
        assert self.creator.call()

    def test_schema_with_no_elements(self):
        self.creator.schema = {'elements': []}
        assert self.creator.call()

    @patch('sentry.analytics.record')
    def test_records_analytics(self, record):
        sentry_app = Creator.run(
            name='nulldb',
            user=self.user,
            author='Sentry',
            organization=self.org,
            scopes=('project:read',),
            webhook_url='http://example.com',
            schema={'elements': [self.create_issue_link_schema()]},
            request=self.make_request(user=self.user, method='GET')
        )

        record.assert_called_with(
            'sentry_app.created',
            user_id=self.user.id,
            organization_id=self.org.id,
            sentry_app=sentry_app.slug,
        )
Esempio n. 8
0
class TestCreator(TestCase):
    def setUp(self):
        self.user = self.create_user()
        self.org = self.create_organization(owner=self.user)
        self.creator = Creator(
            name='nulldb',
            organization=self.org,
            scopes=('project:read', ),
            webhook_url='http://example.com',
            schema={'elements': [self.create_issue_link_schema()]},
        )

    def test_creates_proxy_user(self):
        self.creator.call()

        assert User.objects.get(
            username='******',
            is_sentry_app=True,
        )

    def test_creates_api_application(self):
        self.creator.call()
        proxy = User.objects.get(username='******')

        assert ApiApplication.objects.get(owner=proxy)

    def test_creates_sentry_app(self):
        self.creator.call()

        proxy = User.objects.get(username='******')
        app = ApiApplication.objects.get(owner=proxy)

        sentry_app = SentryApp.objects.get(
            name='nulldb',
            application=app,
            owner=self.org,
            proxy_user=proxy,
        )

        assert sentry_app
        assert sentry_app.scope_list == ['project:read']

    def test_expands_rolled_up_events(self):
        self.creator.events = ['issue']
        app = self.creator.call()

        sentry_app = SentryApp.objects.get(id=app.id)

        assert 'issue.created' in sentry_app.events

    def test_creates_ui_components(self):
        self.creator.schema = {
            'elements': [
                self.create_issue_link_schema(),
                self.create_alert_rule_action_schema(),
            ],
        }

        app = self.creator.call()

        assert SentryAppComponent.objects.filter(
            sentry_app_id=app.id,
            type='issue-link',
        ).exists()

        assert SentryAppComponent.objects.filter(
            sentry_app_id=app.id,
            type='alert-rule-action',
        ).exists()

    def test_blank_schema(self):
        self.creator.schema = ''
        assert self.creator.call()

    def test_none_schema(self):
        self.creator.schema = None
        assert self.creator.call()

    def test_schema_with_no_elements(self):
        self.creator.schema = {'elements': []}
        assert self.creator.call()