Ejemplo n.º 1
0
def project_add():
    form = ProjectForm()

    if form.validate_on_submit():
        project = Project()

        form.populate_obj(project)
        try:
            form.create_subscription_for(project)
        except Exception:
            logger.exception('Intercom subscription error')
            flash('Can\'t create subscription on Intercom\'s events. '
                  'Probably you provide an incorrect APP_ID or API_KEY.',
                  'danger')
            return locals()

        project.user_id = current_user.id
        project.save()
        handle_intercom_users.delay(project.id)

        flash('Project has been added', 'success')

        msg = 'Job for import existing users has been started.'

        if app.config['AWIS_USER_LIMIT_FOR_PROJECT'] > 0:
            msg = ('%s With limit is %s valid emails per project '
                   'for purpose of debugging'
                   ) % (msg, app.config['AWIS_USER_LIMIT_FOR_PROJECT'])

        flash(msg, 'success')

        return redirect(url_for('accounts.projects_list'))

    return locals()
Ejemplo n.º 2
0
 def setUp(self):
     super(ProjectUpdateTestCase, self).setUp()
     self.project = Project(
         title='title',
         intercom_app_id='intercom_app_id',
         intercom_api_key='intercom_api_key',
         aws_access_id='aws_access_id',
         aws_secret_access_key='aws_secret_access_key',
         user_id=self.user.id)
     self.project.save()
     self.url = url_for('accounts.project_update', pk=self.project.id)
Ejemplo n.º 3
0
def project_update(pk):
    project = Project.get_for_current_user_or_404(pk)
    form = ProjectForm(obj=project)

    if form.validate_on_submit():
        form.populate_obj(project)
        project.save()
        flash('Project has been updated', 'success')

        if form.intercom_api_key.is_changed or form.data['repeat_import']:
            handle_intercom_users.delay(project.id)
            flash('Job for importing existing users for a new '
                  'Intercom project started', 'success')

        return redirect(url_for('accounts.projects_list'))

    return locals()
Ejemplo n.º 4
0
class ProjectUpdateTestCase(TestCase):
    def setUp(self):
        super(ProjectUpdateTestCase, self).setUp()
        self.project = Project(
            title='title',
            intercom_app_id='intercom_app_id',
            intercom_api_key='intercom_api_key',
            aws_access_id='aws_access_id',
            aws_secret_access_key='aws_secret_access_key',
            user_id=self.user.id)
        self.project.save()
        self.url = url_for('accounts.project_update', pk=self.project.id)

    def test_page_not_allowed_for_anon(self):
        response = self.client.get(self.url)
        self.assertRedirectToLogin(response, self.url)

    def test_only_owner_can_see_project(self):
        other_user = User(
            email='*****@*****.**',
            password=self.app.user_manager.hash_password('password'),
            is_enabled=True,
            is_admin=True,
            confirmed_at=datetime.utcnow())
        other_user.save()
        self.login(email='*****@*****.**', password='******')

        response = self.client.get(self.url)
        self.assert404(response)

    def test_incorrect_values_submited(self):
        self.login()

        response = self.client.post(self.url, data={'title': ''})
        self.assert200(response)

        form = self.get_context_variable('form')
        self.assertTrue(form.errors)

    @mock.patch('app.accounts.views.handle_intercom_users')
    def test_updated_project(self, handle_intercom_users):
        self.login()

        new_values = dict(
            title='title1',
            intercom_app_id='intercom_app_id1',
            intercom_api_key='intercom_api_key1',
            aws_access_id='aws_access_id1',
            aws_secret_access_key='aws_secret_access_key1',
        )

        response = self.client.post(self.url, data=new_values,
                                    follow_redirects=True)
        self.assert200(response)

        project = Project.query.filter(Project.id == self.project.id).first()

        for k, v in new_values.items():
            self.assertEqual(getattr(project, k), v)

        handle_intercom_users.delay.assert_called_once_with(self.project.id)

    @mock.patch('app.accounts.views.handle_intercom_users')
    def test_intercom_keys_not_changed(self, handle_intercom_users):
        self.login()

        data = dict(
            title='new_title',
            intercom_app_id=self.project.intercom_app_id,
            intercom_api_key=self.project.intercom_api_key,
            aws_access_id=self.project.aws_access_id,
            aws_secret_access_key=self.project.aws_secret_access_key,
        )

        response = self.client.post(self.url, data=data, follow_redirects=True)

        project = Project.query.filter(Project.id == self.project.id).first()

        self.assert200(response)
        self.assertFalse(handle_intercom_users.delay.called)
        self.assertEqual(project.title, 'new_title')

    @mock.patch('app.accounts.views.handle_intercom_users')
    def test_force_job_start(self, handle_intercom_users):
        self.login()

        data = dict(
            title=self.project.title,
            intercom_app_id=self.project.intercom_app_id,
            intercom_api_key=self.project.intercom_api_key,
            aws_access_id=self.project.aws_access_id,
            aws_secret_access_key=self.project.aws_secret_access_key,
            repeat_import='Re-Import'
        )

        response = self.client.post(self.url, data=data, follow_redirects=True)

        self.assert200(response)
        handle_intercom_users.delay.assert_called_once_with(self.project.id)
Ejemplo n.º 5
0
def project_remove(pk):
    project = Project.get_for_current_user_or_404(pk)
    project.delete()
    flash('Project has been removed', 'success')
    return redirect(url_for('accounts.projects_list'))