From 633c7b286a7e4d2794e6a070d768551878ec1e57 Mon Sep 17 00:00:00 2001 From: cballevre Date: Mon, 5 Dec 2022 10:37:23 +0100 Subject: [PATCH] feat(search.js): add maintenance activated matcher It allows you to filter the applications in the AppSection to display only those that are not under maintenance --- react/AppSections/search.js | 7 +++++- react/AppSections/search.spec.js | 37 ++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/react/AppSections/search.js b/react/AppSections/search.js index 4083e54ba7..b4123caa6c 100644 --- a/react/AppSections/search.js +++ b/react/AppSections/search.js @@ -27,12 +27,17 @@ const doctypeMatcher = doctype => app => { } const pendingUpdateMatcher = () => app => !!app.availableVersion +const underMaintenanceMatcher = isUnderMaintenance => app => { + return (app.maintenance !== undefined) === isUnderMaintenance +} + const searchAttrToMatcher = { type: typeMatcher, category: categoryMatcher, tag: tagMatcher, doctype: doctypeMatcher, - pendingUpdate: pendingUpdateMatcher + pendingUpdate: pendingUpdateMatcher, + underMaintenance: underMaintenanceMatcher } /** diff --git a/react/AppSections/search.spec.js b/react/AppSections/search.spec.js index 3043d884f4..cf47dd1229 100644 --- a/react/AppSections/search.spec.js +++ b/react/AppSections/search.spec.js @@ -5,6 +5,20 @@ import { makeMatcherFromSearch } from './search' import mockApps from '../mocks/apps' +const mockMaintenanceApps = [ + { slug: 'collect' }, + { slug: 'drive' }, + { + slug: 'konnectorInMaintenance', + maintenance: { + flag_infra_maintenance: true, + flag_short_maintenance: true, + flag_disallow_manual_exec: true, + messages: [] + } + } +] + describe('makeMatcherFromSearch', () => { it('should filter correctly on type', () => { const matcher = makeMatcherFromSearch({ type: 'webapp' }) @@ -31,6 +45,29 @@ describe('makeMatcherFromSearch', () => { expect(mockApps.filter(matcher)).toMatchSnapshot() }) + it('should filter correctly when under maintenance is false', () => { + const matcher = makeMatcherFromSearch({ underMaintenance: false }) + expect(mockMaintenanceApps.filter(matcher)).toStrictEqual([ + { slug: 'collect' }, + { slug: 'drive' } + ]) + }) + + it('should filter correctly when under maintenance is true', () => { + const matcher = makeMatcherFromSearch({ underMaintenance: true }) + expect(mockMaintenanceApps.filter(matcher)).toStrictEqual([ + { + maintenance: { + flag_disallow_manual_exec: true, + flag_infra_maintenance: true, + flag_short_maintenance: true, + messages: [] + }, + slug: 'konnectorInMaintenance' + } + ]) + }) + it('should handle correctly multi filters', () => { const matcher = makeMatcherFromSearch({ type: 'konnector',