Ejemplo n.º 1
0
 def test_add_project_valid_repo(self):
     session = MagicMock()
     project = project_manager.add_project(self.test_repo, self.test_name, session)
     assert isinstance(project, Project)
     assert project.repo == self.test_repo
     assert project.name == self.test_name
     assert session.add.called
 def test_add_project_valid_repo(self):
     session = MagicMock()
     project = project_manager.add_project(self.test_repo, self.test_name,
                                           session)
     assert isinstance(project, Project)
     assert project.repo == self.test_repo
     assert project.name == self.test_name
     assert session.add.called
Ejemplo n.º 3
0
def post_project():
    """Adds a project to the database

    It receive a Project in the body as a json object and tries to create the project in the database

    Example:
        Body
        {"repo": "http://google.com"}

    :return codes:  201 on success
                    400 on errors
                    409 on a duplicate repo
    """

    data = request.get_json()
    if not data:
        return api_error_response('invalid payload'), 400

    repo = data.get('repo', None)
    if repo is None or repo == '':
        return api_error_response('missing repo'), 400
    else:
        data.pop('repo')  # repo should not be present in data

    name = data.get('name', None)
    if name is None or name == '':
        name = repo.split('/')[-1]
    if data.get('name'):
        data.pop('name')  # name should not be present in data

    email = data.get('email', None)
    if email is not None:
        hook_type = ProjectHookType.EMAIL.name
        hook_data = {"email": email}
    else:
        hook_type = ProjectHookType.NONE.name
        hook_data = {}

    with db.session_scope() as session:
        try:
            project = project_manager.add_project(repo,
                                                  name,
                                                  session,
                                                  hook_type=hook_type,
                                                  hook_data=hook_data,
                                                  **data)
            session.commit()
        except Exception as exc:
            session.rollback()
            if 'unique constraint "project_repo_key"' in exc.args[0]:
                return api_error_response(
                    'unique constraint project repo {}'.format(repo)), 409
            else:
                return api_error_response(exc.args[0]), 400

        return jsonify(project.to_dict()), 201
Ejemplo n.º 4
0
def post_project():
    """Adds a project to the database

    It receive a Project in the body as a json object and tries to create the project in the database

    Example:
        Body
        {"repo": "http://google.com"}

    :return codes:  201 on success
                    400 on errors
                    409 on a duplicate repo
    """

    data = request.get_json()
    if not data:
        return api_error_response('invalid payload'), 400

    repo = data.get('repo', None)
    if repo is None or repo == '':
        return api_error_response('missing repo'), 400
    else:
        data.pop('repo')  # repo should not be present in data

    name = data.get('name', None)
    if name is None or name == '':
        name = repo.split('/')[-1]
    if data.get('name'):
        data.pop('name')  # name should not be present in data

    email = data.get('email', None)
    if email is not None:
        hook_type = ProjectHookType.EMAIL.name
        hook_data = {"email": email}
    else:
        hook_type = ProjectHookType.NONE.name
        hook_data = {}

    with db.session_scope() as session:
        try:
            project = project_manager.add_project(repo, name, session, hook_type=hook_type, hook_data=hook_data, **data)
            session.commit()
        except Exception as exc:
            session.rollback()
            if 'unique constraint "project_repo_key"' in exc.args[0]:
                return api_error_response('unique constraint project repo {}'.format(repo)), 409
            else:
                return api_error_response(exc.args[0]), 400

        return jsonify(project.to_dict()), 201
Ejemplo n.º 5
0
    def test_add_project_with_hooks_in_kwargs(self):
        session = MagicMock()
        data = {
            'repo_auth_type': RepoAuthType.PUBLIC.name,
            'hook_type': ProjectHookType.SLACK.name,
            'hook_data': {
                'webhook_url': 'test_webhook'
            }
        }
        repo_url = 'http://repo.com'
        name = 'name'
        project = project_manager.add_project(repo_url, name, session, **data)

        assert isinstance(project, Project)
        assert project.repo == repo_url
        assert project.name == name
        assert project.hook_type == ProjectHookType.SLACK.name

        assert json.loads(project.hook_data) == {"webhook_url": "test_webhook"}
        assert session.add.called
    def test_add_project_with_hooks_in_kwargs(self):
        session = MagicMock()
        data = {
            'repo_auth_type': RepoAuthType.PUBLIC.name,
            'hook_type': ProjectHookType.SLACK.name,
            'hook_data': {
                'webhook_url': 'test_webhook'
            }
        }
        repo_url = 'http://repo.com'
        name = 'name'
        project = project_manager.add_project(repo_url, name, session, **data)

        assert isinstance(project, Project)
        assert project.repo == repo_url
        assert project.name == name
        assert project.hook_type == ProjectHookType.SLACK.name

        assert json.loads(project.hook_data) == {"webhook_url": "test_webhook"}
        assert session.add.called
Ejemplo n.º 7
0
    def test_add_project_missing_name(self):
        session = MagicMock()
        with self.assertRaises(AssertionError):
            project_manager.add_project(self.test_repo, None, session)

        assert not session.add.called
    def test_add_project_missing_name(self):
        session = MagicMock()
        with self.assertRaises(AssertionError):
            project_manager.add_project(self.test_repo, None, session)

        assert not session.add.called