From bf878a34565aabaa7ddbdd9d225d8d9b3b2d9d7a Mon Sep 17 00:00:00 2001 From: Brandon Shien Date: Fri, 4 Oct 2024 14:18:40 -0700 Subject: [PATCH] Added tests and prettier formatting Signed-off-by: Brandon Shien --- .../github-activity-events-monitor.yml | 7 +- package.json | 2 +- src/call/github-activity-events-monitor.ts | 8 +- .../github-activity-events-monitor.test.ts | 87 +++++++++++++++++++ 4 files changed, 96 insertions(+), 8 deletions(-) create mode 100644 test/call/github-activity-events-monitor.test.ts diff --git a/configs/operations/github-activity-events-monitor.yml b/configs/operations/github-activity-events-monitor.yml index bfcea22..b36090f 100644 --- a/configs/operations/github-activity-events-monitor.yml +++ b/configs/operations/github-activity-events-monitor.yml @@ -9,16 +9,17 @@ events: - issues.transferred - issues.assigned - issue_comment.created - - push + # - push - pull_request.closed - pull_request.opened - pull_request.labeled - pull_request.unlabeled - pull_request.assigned - pull_request_review.submitted + - pull_request_review_comment.created - gollum - - release.released - - project.edited +# - release.released +# - project.edited tasks: - name: Activity Events Monitor Operation diff --git a/package.json b/package.json index 28ee8f4..b836410 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "opensearch-automation-app", - "version": "0.1.7", + "version": "0.1.8", "description": "An Automation App that handles all your GitHub Repository Activities", "author": "Peter Zhu", "homepage": "https://github.com/opensearch-project/automation-app", diff --git a/src/call/github-activity-events-monitor.ts b/src/call/github-activity-events-monitor.ts index 6a7492b..fc3d705 100644 --- a/src/call/github-activity-events-monitor.ts +++ b/src/call/github-activity-events-monitor.ts @@ -21,7 +21,7 @@ export default async function githubActivityEventsMonitor(app: Probot, context: const repoName = context.payload.repository?.name; const orgName = context.payload.organization?.login || context.payload.repository?.owner?.login; - const logData = { + const event = { id: context.id, organization: orgName, repository: repoName, @@ -38,10 +38,10 @@ export default async function githubActivityEventsMonitor(app: Probot, context: try { await client.index({ index: `github-activity-events-${month}-${year}`, - body: logData, + body: event, }); - app.log.info('Log data indexed successfully.'); + app.log.info('Event indexed successfully.'); } catch (error) { - app.log.error(`Error indexing log data: ${error}`); + app.log.error(`Error indexing event: ${error}`); } } diff --git a/test/call/github-activity-events-monitor.test.ts b/test/call/github-activity-events-monitor.test.ts new file mode 100644 index 0000000..863e518 --- /dev/null +++ b/test/call/github-activity-events-monitor.test.ts @@ -0,0 +1,87 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + * + * The OpenSearch Contributors require contributions made to + * this file be licensed under the Apache-2.0 license or a + * compatible open source license. + */ + +import { Logger, Probot } from 'probot'; +import { OpensearchClient } from '../../src/utility/opensearch/opensearch-client'; +import githubActivityEventsMonitor from '../../src/call/github-activity-events-monitor'; + +jest.mock('../../src/utility/opensearch/opensearch-client'); + +describe('githubActivityEventsMonitor', () => { + let app: Probot; + let context: any; + let resource: any; + + beforeEach(() => { + app = new Probot({ appId: 1, secret: 'test', privateKey: 'test' }); + app.log = { + info: jest.fn(), + error: jest.fn(), + } as unknown as Logger; + context = { + name: 'eventType', + id: 'id', + payload: { + repository: { + name: 'repo', + owner: { login: 'org' }, + }, + action: 'action', + sender: { + login: 'sender', + }, + }, + }; + resource = { + organizations: new Map([ + [ + 'org', + { + repositories: new Map([['repo', 'repo object']]), + }, + ], + ]), + }; + }); + + it('should index events', async () => { + const mockClient = { + index: jest.fn().mockResolvedValue({}), + }; + (OpensearchClient as jest.Mock).mockImplementation(() => { + return { getClient: jest.fn().mockResolvedValue(mockClient) }; + }); + jest.spyOn(Date.prototype, 'toISOString').mockReturnValue('2024-10-04T21:00:06.875Z'); + await githubActivityEventsMonitor(app, context, resource); + expect(mockClient.index).toHaveBeenCalledWith({ + index: expect.stringMatching(/^github-activity-events-\d{2}-\d{4}$/), + body: expect.objectContaining({ + id: 'id', + organization: 'org', + repository: 'repo', + type: 'eventType', + action: 'action', + sender: 'sender', + created_at: '2024-10-04T21:00:06.875Z', + }), + }); + expect(app.log.info).toHaveBeenCalledWith('Event indexed successfully.'); + }); + + it('should log an error if indexing fails', async () => { + const mockClient = { + index: jest.fn().mockRejectedValue(new Error('Indexing failed')), + }; + (OpensearchClient as jest.Mock).mockImplementation(() => { + return { getClient: jest.fn().mockResolvedValue(mockClient) }; + }); + await githubActivityEventsMonitor(app, context, resource); + expect(app.log.error).toHaveBeenCalledWith('Error indexing event: Error: Indexing failed'); + }); +});