def test_assign_one_review(self, with_student_repos, tmpdir): assignment_name = assignment_names[1] expected_review_teams = [ plug.StudentTeam( members=[], name=plug.generate_review_team_name(student_team_name, assignment_name), ) for student_team_name in STUDENT_TEAM_NAMES ] command = " ".join([ *repobee_plug.cli.CoreCommand.reviews.assign.as_name_tuple(), *BASE_ARGS, "-a", assignment_name, *STUDENTS_ARG, "-n", "1", ]) group_assertion = expected_num_members_group_assertion( expected_num_members=1) run_repobee(command, workdir=tmpdir, plugins=[_repobee.ext.gitlab]) assert_on_groups(expected_review_teams, single_group_assertion=group_assertion) assert_num_issues(STUDENT_TEAMS, [assignment_name], 1) assert_issues_exist( STUDENT_TEAMS, [assignment_name], _repobee.command.peer.DEFAULT_REVIEW_ISSUE, expected_num_asignees=1, )
def test_assign_to_nonexisting_students(self, with_student_repos, tmpdir): """If you try to assign reviews where one or more of the allocated student repos don't exist, there should be an error. """ assignment_name = assignment_names[1] non_existing_group = "non-existing-group" student_team_names = STUDENT_TEAM_NAMES + [non_existing_group] command = " ".join([ *repobee_plug.cli.CoreCommand.reviews.assign.as_name_tuple(), *BASE_ARGS_NO_TB, "-a", assignment_name, "-s", *student_team_names, "-n", "1", ]) with pytest.raises(plug.NotFoundError) as exc_info: run_repobee(command, workdir=tmpdir, plugins=[_repobee.ext.gitlab]) non_existing_repo_name = plug.generate_repo_name( non_existing_group, assignment_name) assert f"Can't find repos: {non_existing_repo_name}" in str( exc_info.value) assert_num_issues(STUDENT_TEAMS, [assignment_name], 0)
def test_assign_to_nonexisting_students( self, with_student_repos, extra_args ): """If you try to assign reviews where one or more of the allocated student repos don't exist, there should be an error. """ assignment_name = assignment_names[1] non_existing_group = "non-existing-group" student_team_names = STUDENT_TEAM_NAMES + [non_existing_group] command = " ".join( [ REPOBEE_GITLAB, *repobee_plug.cli.CoreCommand.reviews.assign.as_name_tuple(), *BASE_ARGS_NO_TB, "-a", assignment_name, "-s", *student_team_names, "-n", "1", ] ) result = run_in_docker_with_coverage(command, extra_args=extra_args) output = result.stdout.decode("utf-8") assert ( "[ERROR] NotFoundError: Can't find repos: {}".format( plug.generate_repo_name(non_existing_group, assignment_name) ) in output ) assert result.returncode == 1 assert_num_issues(STUDENT_TEAMS, [assignment_name], 0)
def open_issues(with_student_repos): """Open two issues in each student repo.""" task_issue = plug.Issue( title="Task", body="The task is to do this, this and that" ) correction_issue = plug.Issue( title="Correction required", body="You need to fix this, this and that" ) issues = [task_issue, correction_issue] gl = gitlab.Gitlab(LOCAL_BASE_URL, private_token=TOKEN, ssl_verify=False) target_group = get_group(ORG_NAME, gl=gl) projects = ( gl.projects.get(p.id) for p in target_group.projects.list(include_subgroups=True, all=True) ) for project in projects: project.issues.create( dict(title=task_issue.title, description=task_issue.body) ) project.issues.create( dict( title=correction_issue.title, description=correction_issue.body ) ) assert_num_issues(STUDENT_TEAM_NAMES, assignment_names, len(issues)) assert_issues_exist(STUDENT_TEAM_NAMES, assignment_names, task_issue) assert_issues_exist(STUDENT_TEAM_NAMES, assignment_names, correction_issue) return issues
def test_assign_one_review(self, with_student_repos, extra_args): assignment_name = assignment_names[1] expected_review_teams = [ plug.StudentTeam( members=[], name=plug.generate_review_team_name(student_team_name, assignment_name), ) for student_team_name in STUDENT_TEAM_NAMES ] command = " ".join([ REPOBEE_GITLAB, *repobee_plug.cli.CoreCommand.reviews.assign.as_name_tuple(), *BASE_ARGS, "-a", assignment_name, *STUDENTS_ARG, "-n", "1", ]) group_assertion = expected_num_members_group_assertion( expected_num_members=1) result = run_in_docker_with_coverage(command, extra_args=extra_args) assert result.returncode == 0 assert_on_groups(expected_review_teams, single_group_assertion=group_assertion) assert_num_issues(STUDENT_TEAMS, [assignment_name], 1) assert_issues_exist( STUDENT_TEAMS, [assignment_name], _repobee.command.peer.DEFAULT_REVIEW_ISSUE, expected_num_asignees=1, )
def test_happy_path(self, tmpdir): """Test opening an issue in each student repo.""" filename = "issue.md" text = "{}\n{}".format(self._ISSUE.title, self._ISSUE.body) tmpdir.join(filename).write_text(text, encoding="utf-8") command = " ".join([ *repobee_plug.cli.CoreCommand.issues.open.as_name_tuple(), *BASE_ARGS, *MASTER_REPOS_ARG, *STUDENTS_ARG, "-i", f"{tmpdir}/{filename}", ]) run_repobee(command, workdir=tmpdir, plugins=[_repobee.ext.gitlab]) assert_num_issues(STUDENT_TEAMS, assignment_names, 1) assert_issues_exist(STUDENT_TEAMS, assignment_names, self._ISSUE)
def test_happy_path(self, tmpdir_volume_arg, tmpdir, extra_args): """Test opening an issue in each student repo.""" filename = "issue.md" text = "{}\n{}".format(self._ISSUE.title, self._ISSUE.body) tmpdir.join(filename).write_text(text, encoding="utf-8") command = " ".join([ REPOBEE_GITLAB, *repobee_plug.cli.CoreCommand.issues.open.as_name_tuple(), *BASE_ARGS, *MASTER_REPOS_ARG, *STUDENTS_ARG, "-i", "{}/{}".format(VOLUME_DST, filename), ]) result = run_in_docker_with_coverage(command, extra_args=extra_args) assert result.returncode == 0 assert_num_issues(STUDENT_TEAMS, assignment_names, 1) assert_issues_exist(STUDENT_TEAMS, assignment_names, self._ISSUE)