diff --git a/src/ActionHandler/PullRequest/PullRequestAssigneeAddedStrategy.ts b/src/ActionHandler/PullRequest/PullRequestAssigneeAddedStrategy.ts new file mode 100644 index 0000000..22363b2 --- /dev/null +++ b/src/ActionHandler/PullRequest/PullRequestAssigneeAddedStrategy.ts @@ -0,0 +1,45 @@ +import PullRequestStrategy, {OctokitResponsePullRequest} from "./PullRequestStrategy.js"; +import {Emotion} from "../../enums/Emotion.js"; +import {Sentiment} from "../../enums/Sentiment.js"; +import {ActionContextDTO} from "../../DTO/ActionContextDTO.js"; +import {EmitterWebhookEventName} from "@octokit/webhooks/dist-types/types"; +import {CommentFactory} from "../../Comment/CommentFactory.js"; +import Comment from "../../Comment/Comment.js"; +import {CaseSlugs} from "../../enums/CaseSlug.js"; + + +export default class PullRequestAssigneeAddedStrategy extends PullRequestStrategy<'pull_request.assigned'>{ + + + protected getEventName(): EmitterWebhookEventName { + return "pull_request.assigned"; + } + + + protected async executePrStrategy(commentFactory:CommentFactory,_previousPRs:Array): Promise { + + + let tags: Array=['assignment','team','support','backup','reinforce','reinforcement','aid','band','league','join','accompany','assemble','associate','enlist','guide','lead','pair','together','company','team up','stand together','unite','ally','suggest','request','plea','call','duty','demand','appeal','summon','invoke','invitation','invite','prayer','seek','hero','champion','evaluation','new','arrive','arrival','fresh','the one','savior','visitor','task','mission','goal']; + let contextEmotionMatrix: Emotion.EmotionMatrix=[ + {emotion:Emotion.Interest.Trust,temperature:4}, + {emotion:Emotion.Interest.Friendliness,temperature:5}, + {emotion:Emotion.Fear.Fright,temperature:2}, + {emotion:Emotion.Fear.Anxiety,temperature:1}, + {emotion:Emotion.Joy.Relief,temperature:4}, + {emotion:Emotion.Joy.Thrill,temperature:2}, + {emotion:Emotion.Surprise.Amazement,temperature:2}, + {emotion:Emotion.Surprise.Wonder,temperature:3}, + ]; + + let caseSlug: CaseSlugs.Types=CaseSlugs.PullRequest.Assignee.Added; + let sentiment :Sentiment=Sentiment.Positive; + + + + const actionContext=new ActionContextDTO(contextEmotionMatrix,sentiment,tags); + const comment = commentFactory.create(caseSlug,actionContext); + return comment; + + } + +} \ No newline at end of file diff --git a/src/enums/CaseSlug.ts b/src/enums/CaseSlug.ts index f01245f..26e3e72 100644 --- a/src/enums/CaseSlug.ts +++ b/src/enums/CaseSlug.ts @@ -24,6 +24,12 @@ export namespace CaseSlugs { } + export const enum Assignee { + Added = "PullRequest.Assignee.Added", + Removed = "PullRequest.Assignee.Removed", + + } + export namespace Review { export const enum Submitted { Approved = "PullRequest.Review.Submitted.Approved", @@ -66,6 +72,9 @@ export namespace CaseSlugs { | CaseSlugs.PullRequest.Reviewer.Added | CaseSlugs.PullRequest.Reviewer.Removed + | CaseSlugs.PullRequest.Assignee.Added + | CaseSlugs.PullRequest.Assignee.Removed + | CaseSlugs.PullRequest.Review.Submitted.Approved | CaseSlugs.PullRequest.Review.Submitted.ChangesRequested | CaseSlugs.PullRequest.Review.Submitted.Commented diff --git a/src/index.ts b/src/index.ts index a0676a3..0597ff8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,6 +5,7 @@ import PullRequestReviewSubmittedStrategy from "./ActionHandler/PullRequestRevie import IssueCommentCreatedStrategy from "./ActionHandler/IssueComment/IssueCommentCreatedStrategy.js"; import PullRequestReviewerAdded from "./ActionHandler/PullRequest/PullRequestReviewerAdded.js"; import PullRequestReviewerRemoved from "./ActionHandler/PullRequest/PullRequestReviewerRemoved.js"; +import PullRequestAssigneeAddedStrategy from "./ActionHandler/PullRequest/PullRequestAssigneeAddedStrategy.js"; @@ -40,4 +41,9 @@ export default (app: Probot) => { return strat.handle(); }); + app.on("pull_request.assigned", async (ghContext: Context<'pull_request.assigned'>) => { + const strat = new PullRequestAssigneeAddedStrategy(ghContext); + return strat.handle(); + }); + }; \ No newline at end of file diff --git a/test/feature/PullRequest/pullRequestAssigneeAdded.test.ts b/test/feature/PullRequest/pullRequestAssigneeAdded.test.ts new file mode 100644 index 0000000..723db8d --- /dev/null +++ b/test/feature/PullRequest/pullRequestAssigneeAdded.test.ts @@ -0,0 +1,41 @@ +import {describe, test, afterEach, vi, beforeAll} from "vitest"; +import {StrategyTestSetup} from "../strategyTestSetup"; +import PullRequestAssigneeAddedStrategy from "../../../src/ActionHandler/PullRequest/PullRequestAssigneeAddedStrategy"; + + +import prAssigneeAddedPayload from '../../fixtures/events/pull_request/assignee/pull_request.assignee.added.json'; +import {CaseSlugs} from "../../../src/enums/CaseSlug"; + + + +describe("Pull Request assignee added tests", () => { + const strategyTestSetup = new StrategyTestSetup(); + + + beforeAll(() => { + strategyTestSetup.beforeAll(); + strategyTestSetup.actionStrategyHandleSpy = vi.spyOn(PullRequestAssigneeAddedStrategy.prototype as any, 'handle'); + }); + + afterEach(() => { + strategyTestSetup.afterEach(); + }); + + + test("Creates comment", async () => { + + const caseSlug=CaseSlugs.PullRequest.Assignee.Added; + + await strategyTestSetup.probot.receive({ + id: '123', + name: 'pull_request', + payload: prAssigneeAddedPayload as any, + }); + + strategyTestSetup.performCommonAssertions(caseSlug); + + }); + + + +}); \ No newline at end of file diff --git a/test/fixtures/events/pull_request/assignee/pull_request.assignee.added.json b/test/fixtures/events/pull_request/assignee/pull_request.assignee.added.json new file mode 100644 index 0000000..2946004 --- /dev/null +++ b/test/fixtures/events/pull_request/assignee/pull_request.assignee.added.json @@ -0,0 +1,60 @@ +{ + "action": "assigned", + "pull_request": { + "id": 1, + "number": 555444, + "state": "open", + "title": "Test Pull Request", + "user": { + "login": "test-user", + "id": 101, + "avatar_url": "https://avatars.githubusercontent.com/u/101?v=4" + }, + "head": { + "ref": "some-branch" + }, + "base": { + "ref": "master" + }, + "assignees": [ + { + "login": "existing-user1", + "id": 102, + "avatar_url": "https://avatars.githubusercontent.com/u/102?v=4" + }, + { + "login": "existing-user2", + "id": 103, + "avatar_url": "https://avatars.githubusercontent.com/u/103?v=4" + }, + { + "login": "new-assigned-user", + "id": 104, + "avatar_url": "https://avatars.githubusercontent.com/u/104?v=4" + } + ] + }, + "repository": { + "id": 202, + "name": "test-repo", + "full_name": "test-owner/test-repo", + "owner": { + "login": "test-owner", + "id": 103, + "avatar_url": "https://avatars.githubusercontent.com/u/103?v=4" + } + }, + "sender": { + "login": "test-user", + "id": 101, + "avatar_url": "https://avatars.githubusercontent.com/u/101?v=4" + }, + "assignee": { + "login": "new-assigned-user", + "id": 104, + "avatar_url": "https://avatars.githubusercontent.com/u/104?v=4" + }, + "installation": { + "id": 1 + } +}