def test_behind(): repo = RepositoryFactory() pr: PullRequest = PullRequestFactory(repository=repo, merged=False, mergeable=True) assert ParsedExpression(f"behind=false").execute(pull_request=pr) RepositoryBranchFactory.add_commit( repo, pr.base_branch_name, RepositoryCommitFactory(repository=repo, sha="base-head") ) assert ParsedExpression(f"behind").execute(pull_request=pr)
def test_ignore_invalid(): data = """ rules: - ensure-lots-of-reviewers: conditions: - not-exist=0 actions: - update_pull_request_base """ repository = RepositoryFactory() assert 0 == len(refresh_from_data(repository, data))
def test_dup_implied_triggers(): data = """ rules: - ensure-lots-of-reviewers: actions: - merge_pull_request - merge_pull_request - merge_pull_request """ repository = RepositoryFactory() rule = refresh_from_data(repository, data)[0] assert 4 == len(rule.triggers.all()) assert 3 == len(rule.conditions.all())
def test_basic(): data = """ rules: - ensure-lots-of-reviewers: description: "Ensure lots-of-reviewers is on big pull requests" triggers: - pr_updated conditions: - description: "Number of reviewers is more than 3" expression: "number_reviewers>3" actions: - add_pull_request_label: "lots-of-reviewers" - add_pull_request_label: description: "blah" parameters: "lots-of-reviewers2" """ repository = RepositoryFactory() rules = refresh_from_data(repository, data) assert 1 == len(rules) rule = rules[0] assert "ensure-lots-of-reviewers" == rule.title assert "Ensure lots-of-reviewers is on big pull requests" == rule.description assert 1 == len(rule.conditions.all()) assert 2 == rule.line_number assert 1 == len(rule.triggers.all()) trigger = rule.triggers.filter(type="pr_updated").first() assert "pr_updated" == trigger.type assert 5 == trigger.line_number condition = rule.conditions.all()[0] assert "Number of reviewers is more than 3" == condition.description assert "number_reviewers>3" == condition.expression assert 2 == len(rule.actions.all()) assert 7 == condition.line_number action = rule.actions.all()[0] assert "add_pull_request_label" == action.type assert "lots-of-reviewers" == action.parameters.get("value") assert 10 == action.line_number action = rule.actions.all()[1] assert "add_pull_request_label" == action.type assert "blah" == action.description assert "lots-of-reviewers2" == action.parameters.get("value")
def test_simple(): data = """ rules: - keep_uptodate: triggers: - base_branch_updated actions: - update_pull_request_base """ repository = RepositoryFactory() rule = refresh_from_data(repository, data)[0] assert 1 == len(rule.triggers.all()) assert 1 == len(rule.conditions.all()) assert {"update_pull_request_base"} == set(t.type for t in rule.actions.all())
def test_no_action_params(): data = """ rules: - ensure-lots-of-reviewers: description: "Ensure lots-of-reviewers is on big pull requests" triggers: - base_branch_updated actions: - update_pull_request_base """ repository = RepositoryFactory() rule = refresh_from_data(repository, data)[0] assert 1 == len(rule.triggers.all()) assert {"update_pull_request_base"} == set(t.type for t in rule.actions.all())
def test_guess_triggers(): data = """ rules: - ensure-lots-of-reviewers: description: "Ensure lots-of-reviewers is on big pull requests" conditions: - description: "Number of reviewers is more than 3" expression: "number_reviewers>3" actions: - add_pull_request_label: "lots-of-reviewers" """ repository = RepositoryFactory() rule = refresh_from_data(repository, data)[0] assert 2 == len(rule.triggers.all()) assert {"pr_created", "pr_updated"} == set(t.type for t in rule.triggers.all())
def test_sync_commits(): repo: Repository = RepositoryFactory() changed = pull_requests.add_commits( repo, [ Commit( sha="sha1", message="msg1", parents=["sha2"], author_name="Bob", author_email="*****@*****.**", committer_name="Bob", committer_email="*****@*****.**", ) ], ) assert len(changed) == 2 assert repo.commits.all().count() == 3 assert repo.commit_tree.filter(child__sha="sha1", parent__sha="sha2").count() == 1
def test_update_pull_request(): repository = RepositoryFactory() with open(join(dirname(__file__), "pr.json")) as f: data = json.load(f) pr, dirty = _update_pull_request(repository.installation, repository, data) assert dirty assert "1347" == pr.remote_id assert 2 == len(pr.assignees.all()) assert 1 == len(pr.reviewers.all()) assert 1 == len(pr.labels.all()) assert "bug" == pr.labels.first().value assert "6dcb09b5b57875f334f61aebed695e2e4193db5e" == pr.source_sha assert not pr.merged assert not pr.draft assert pr.mergeable == TriState.TRUE assert pr.rebaseable pr, dirty = _update_pull_request(repository.installation, repository, data) assert not dirty