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 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
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
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_missing_name(self): session = MagicMock() with self.assertRaises(AssertionError): project_manager.add_project(self.test_repo, None, session) assert not session.add.called