From 52ba54c7306380e860c967722256dee4ed48a539 Mon Sep 17 00:00:00 2001 From: petruki <31597636+petruki@users.noreply.github.com> Date: Sun, 26 May 2024 12:55:30 -0700 Subject: [PATCH] Fixes Slack integration service query --- src/services/common.js | 11 +++++++++-- src/services/slack.js | 5 +++++ tests/fixtures/db_api.js | 1 + tests/slack.test.js | 20 ++++++++++++++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/services/common.js b/src/services/common.js index b7c647f..5784d69 100644 --- a/src/services/common.js +++ b/src/services/common.js @@ -1,6 +1,13 @@ import { NotFoundError } from '../exceptions/index.js'; export function response(element, onErrorMessage) { - if (!element) throw new NotFoundError(onErrorMessage); + if (!element) { + throw new NotFoundError(onErrorMessage); + } + return element; -} \ No newline at end of file +} + +export function isQueryValid(where) { + return Object.values(where).some(value => value != null); +} diff --git a/src/services/slack.js b/src/services/slack.js index b6737cd..83e4907 100644 --- a/src/services/slack.js +++ b/src/services/slack.js @@ -7,6 +7,7 @@ import { getDomainById, updateDomainVersion } from './domain.js'; import { getEnvironment } from './environment.js'; import { getGroupConfig } from './group-config.js'; import { containsValue } from '../helpers/index.js'; +import { isQueryValid } from './common.js'; /** * Validates if ticket already exists, if so, return it. @@ -63,6 +64,10 @@ export async function getSlackOrError(where) { } export async function getSlack(where) { + if (!isQueryValid(where)) { + throw new NotFoundError('Slack installation not found - no valid query provided'); + } + const query = Slack.findOne(); if (where.id) query.where('_id', where.id); diff --git a/tests/fixtures/db_api.js b/tests/fixtures/db_api.js index 3041183..de2086c 100644 --- a/tests/fixtures/db_api.js +++ b/tests/fixtures/db_api.js @@ -227,6 +227,7 @@ export const slack = { incoming_webhook_channel_id : 'CHANNEL_ID' }, }; +domainDocument.integrations = { slack: slack._id }; export const setupDatabase = async () => { await ConfigStrategy.deleteMany().exec(); diff --git a/tests/slack.test.js b/tests/slack.test.js index 7557122..068ef82 100644 --- a/tests/slack.test.js +++ b/tests/slack.test.js @@ -146,6 +146,26 @@ describe('Slack Installation', () => { mock1_slack_installation.installation_payload.incoming_webhook_channel); }); + test('SLACK_SUITE - Should NOT query installation by Domain - Domain has no Slack integration', async () => { + //given + const domain = await getDomainById(domainId); + const slackId = domain.integrations.slack; + domain.integrations.slack = null; + await domain.save(); + + //test + const response = await request(app) + .get(`/slack/v1/installation/${String(domainId)}`) + .set('Authorization', `Bearer ${adminMasterAccountToken}`) + .send().expect(404); + + expect(response.body.error).toBe('Slack installation not found - no valid query provided'); + + //teardown + domain.integrations.slack = slackId; + await domain.save(); + }); + test('SLACK_SUITE - Should NOT query installation by Domain - Domain not found', async () => { await request(app) .get(`/slack/v1/installation/${new mongoose.Types.ObjectId()}`)