diff --git a/.gitignore b/.gitignore index 6635cf5..ab574d8 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ node_modules !.env.example vite.config.js.timestamp-* vite.config.ts.timestamp-* +__pycache__/ diff --git a/integration/cli.py b/integration/cli.py index 9062fb0..628c0bc 100644 --- a/integration/cli.py +++ b/integration/cli.py @@ -25,6 +25,7 @@ class Forgejo: self.login() self.create_repository() self.create_issue() + self.create_comment() def __add_credentials_parser(self, parser): group = parser.add_argument_group("credentials", "User credentials") @@ -89,7 +90,9 @@ class Forgejo: def run(args, c: Session): forgejo = forgejo_from_args(args, c=c) forgejo.login() - forgejo.create_issue(owner=args.owner, repo=args.repo) + forgejo.create_issue( + owner=args.owner, repo=args.repo, title=args.title, body=args.body + ) self.create_issue_parser = self.subparser.add_parser( name="create_issue", @@ -106,6 +109,38 @@ class Forgejo: "repo", type=str, help="Name of the repository" ) + self.create_issue_parser.add_argument("title", type=str, help="title") + + self.create_issue_parser.add_argument("body", type=str, help="body") + + def create_comment(self): + def run(args, c: Session): + forgejo = forgejo_from_args(args, c=c) + forgejo.login() + forgejo.create_comment( + owner=args.owner, repo=args.repo, issue=args.issue, body=args.body + ) + + self.create_comment_parser = self.subparser.add_parser( + name="create_comment", + description="Create comment on a repository owned by someone on Forgejo", + help="Create comment on Forgejo", + ) + self.__add_credentials_parser(self.create_comment_parser) + self.create_comment_parser.set_defaults(func=run) + self.create_comment_parser.add_argument( + "owner", type=str, help="Owner of the repo" + ) + + self.create_comment_parser.add_argument( + "repo", type=str, help="Name of the repository" + ) + + self.create_comment_parser.add_argument( + "issue", type=int, help="ID of the issue" + ) + + self.create_comment_parser.add_argument("body", type=str, help="body") class Cli: diff --git a/integration/forgejo.py b/integration/forgejo.py index 1888dcb..cc54112 100755 --- a/integration/forgejo.py +++ b/integration/forgejo.py @@ -205,8 +205,7 @@ class Forgejo: f"Error while creating repository: {name} {resp.status_code}" ) - - def create_issue(self, owner: str, repo: str): + def create_issue(self, owner: str, repo: str, title: str, body: str): """ Create issue """ @@ -225,12 +224,11 @@ class Forgejo: "redirect_after_creation": "", } - return data url = self.get_uri(f"/{owner}/{repo}/issues/new") csrf = self.get_csrf_token(url) - data = create_issue_payload(csrf, "my issue", "my body") + data = create_issue_payload(csrf=csrf, title=title, body=body) resp = self.c.post(url, data=data, allow_redirects=False) print(f"Created issue") @@ -239,6 +237,34 @@ class Forgejo: and resp.status_code != 200 and resp.status_code != 303 ): - raise Exception( - f"Error while creating issue: {resp.status_code}" - ) + raise Exception(f"Error while creating issue: {resp.status_code}") + + def create_comment(self, owner: str, repo: str, issue: int, body: str): + """ + Create comment + """ + self.login() + + def create_comment_payload(csrf: str, body: str): + data = { + "_csrf": csrf, + "content": body, + "status": "", + } + + return data + + url = self.get_uri(f"/{owner}/{repo}/issues/{issue}") + print(url) + csrf = self.get_csrf_token(url) + data = create_comment_payload(csrf, body) + + url = self.get_uri(f"/{owner}/{repo}/issues/{issue}/comments") + resp = self.c.post(url, data=data, allow_redirects=False) + print(f"Created comment") + if ( + resp.status_code != 302 + and resp.status_code != 200 + and resp.status_code != 303 + ): + raise Exception(f"Error while creating comment: {resp.status_code}") diff --git a/integration/lib.sh b/integration/lib.sh index e2affcb..b8407aa 100755 --- a/integration/lib.sh +++ b/integration/lib.sh @@ -86,7 +86,54 @@ init_users_repo() { $FORGEJO_USER1_EMAIL \ $FORGEJO_URL \ $FORGEJO_USER1_USERNAME \ - $FORGEJO_USER1_SUPPORT_REPO + $FORGEJO_USER1_SUPPORT_REPO \ + "normal issue title" "normal issue body" + + python -m integration \ + forgejo create_comment \ + $FORGEJO_TESTUSER_USERNAME $FORGEJO_TESTUSER_PASSWORD \ + $FORGEJO_USER1_EMAIL \ + $FORGEJO_URL \ + $FORGEJO_USER1_USERNAME \ + $FORGEJO_USER1_SUPPORT_REPO \ + 1 "normal body" + + python -m integration \ + forgejo create_comment \ + $FORGEJO_TESTUSER_USERNAME $FORGEJO_TESTUSER_PASSWORD \ + $FORGEJO_USER1_EMAIL \ + $FORGEJO_URL \ + $FORGEJO_USER1_USERNAME \ + $FORGEJO_USER1_SUPPORT_REPO \ + 1 "mention body @$FORGEJO_USER1_USERNAME" + + python -m integration \ + forgejo create_issue \ + $FORGEJO_TESTUSER_USERNAME $FORGEJO_TESTUSER_PASSWORD \ + $FORGEJO_USER1_EMAIL \ + $FORGEJO_URL \ + $FORGEJO_USER1_USERNAME \ + $FORGEJO_USER1_SUPPORT_REPO \ + "normal issue title" "mention issue @$FORGEJO_USER1_USERNAME" + + python -m integration \ + forgejo create_issue \ + $FORGEJO_TESTUSER_USERNAME $FORGEJO_TESTUSER_PASSWORD \ + $FORGEJO_USER1_EMAIL \ + $FORGEJO_URL \ + $FORGEJO_USER1_USERNAME \ + $FORGEJO_USER1_SUPPORT_REPO \ + "mention issue @$FORGEJO_USER1_USERNAME" "normal issue body" + + + python -m integration \ + forgejo create_issue \ + $FORGEJO_TESTUSER_USERNAME $FORGEJO_TESTUSER_PASSWORD \ + $FORGEJO_USER1_EMAIL \ + $FORGEJO_URL \ + $FORGEJO_USER1_USERNAME \ + $FORGEJO_USER1_SUPPORT_REPO \ + "mention issue @$FORGEJO_USER1_USERNAME" "mention issue @$FORGEJO_USER1_USERNAME" } setup_env() {