From c45e4501d1beb27decb24f8e66e745d74f4a6410 Mon Sep 17 00:00:00 2001 From: jacekpluta <73617938+jacekpluta@users.noreply.github.com> Date: Thu, 8 Aug 2024 11:21:15 +0200 Subject: [PATCH] [ACS-8484] Add feature flag to knowledge retrieval (#4003) --- app/src/app.config.json | 3 +- .../aca-content/src/lib/aca-content.routes.ts | 8 +++- ...earch-ai-input-container.component.spec.ts | 18 +++----- .../aca-shared/rules/src/app.rules.spec.ts | 43 ++++++++++++++++++- projects/aca-shared/rules/src/app.rules.ts | 11 ++--- 5 files changed, 63 insertions(+), 20 deletions(-) diff --git a/app/src/app.config.json b/app/src/app.config.json index d8e9f13ef..a44b811e3 100644 --- a/app/src/app.config.json +++ b/app/src/app.config.json @@ -14,7 +14,8 @@ "contentService": true, "folderRules": true, "tagsEnabled": true, - "categoriesEnabled": true + "categoriesEnabled": true, + "knowledgeRetrievalEnabled": true }, "oauth2": { "host": "{protocol}//{hostname}{:port}/auth/realms/alfresco", diff --git a/projects/aca-content/src/lib/aca-content.routes.ts b/projects/aca-content/src/lib/aca-content.routes.ts index 23fd539c4..f92a81dd6 100644 --- a/projects/aca-content/src/lib/aca-content.routes.ts +++ b/projects/aca-content/src/lib/aca-content.routes.ts @@ -27,7 +27,7 @@ import { LibrariesComponent } from './components/libraries/libraries.component'; import { FavoriteLibrariesComponent } from './components/favorite-libraries/favorite-libraries.component'; import { SearchResultsComponent } from './components/search/search-results/search-results.component'; import { SearchLibrariesResultsComponent } from './components/search/search-libraries-results/search-libraries-results.component'; -import { AppSharedRuleGuard, GenericErrorComponent, ExtensionRoute, ExtensionsDataLoaderGuard } from '@alfresco/aca-shared'; +import { AppSharedRuleGuard, GenericErrorComponent, ExtensionRoute, ExtensionsDataLoaderGuard, PluginEnabledGuard } from '@alfresco/aca-shared'; import { AuthGuard } from '@alfresco/adf-core'; import { FavoritesComponent } from './components/favorites/favorites.component'; import { RecentFilesComponent } from './components/recent-files/recent-files.component'; @@ -510,7 +510,11 @@ export const CONTENT_LAYOUT_ROUTES: Route = { }, { path: 'knowledge-retrieval', - component: SearchAiResultsComponent + component: SearchAiResultsComponent, + canActivate: [PluginEnabledGuard], + data: { + plugin: 'plugins.knowledgeRetrievalEnabled' + } }, { path: '**', diff --git a/projects/aca-content/src/lib/components/knowledge-retrieval/search-ai/search-ai-input-container/search-ai-input-container.component.spec.ts b/projects/aca-content/src/lib/components/knowledge-retrieval/search-ai/search-ai-input-container/search-ai-input-container.component.spec.ts index 2ae4ce426..d8d57b619 100644 --- a/projects/aca-content/src/lib/components/knowledge-retrieval/search-ai/search-ai-input-container/search-ai-input-container.component.spec.ts +++ b/projects/aca-content/src/lib/components/knowledge-retrieval/search-ai/search-ai-input-container/search-ai-input-container.component.spec.ts @@ -53,18 +53,14 @@ describe('SearchAiInputContainerComponent', () => { provide: AgentService, useValue: { getAgents: () => - of({ - list: { - entries: [ - { - entry: { - id: '1', - name: 'HR Agent' - } - } - ] + of([ + { + id: '1', + name: 'HR Agent', + description: 'HR Agent', + avatar: 'avatar1' } - }) + ]) } } ] diff --git a/projects/aca-shared/rules/src/app.rules.spec.ts b/projects/aca-shared/rules/src/app.rules.spec.ts index aebdc0827..d5fe674a9 100644 --- a/projects/aca-shared/rules/src/app.rules.spec.ts +++ b/projects/aca-shared/rules/src/app.rules.spec.ts @@ -23,9 +23,9 @@ */ import * as app from './app.rules'; -import { getFileExtension } from './app.rules'; import { TestRuleContext } from './test-rule-context'; import { NodeEntry, RepositoryInfo, StatusInfo } from '@alfresco/js-api'; +import { getFileExtension } from './app.rules'; describe('app.evaluators', () => { let context: TestRuleContext; @@ -540,6 +540,47 @@ describe('app.evaluators', () => { }); }); + describe('isKnowledgeRetrievalEnabled', () => { + it('should call context.appConfig.get with correct parameters', () => { + context.appConfig = { get: jasmine.createSpy() } as any; + + app.canDisplayKnowledgeRetrievalButton(context); + expect(context.appConfig.get).toHaveBeenCalledWith('plugins.knowledgeRetrievalEnabled', true); + }); + + it('should return false if get from appConfig returns false', () => { + expect( + app.canDisplayKnowledgeRetrievalButton({ + appConfig: { + get: () => false + } + } as any) + ).toBeFalse(); + }); + + it('should return true if get from appConfig returns true and navigation is correct', () => { + expect( + app.canDisplayKnowledgeRetrievalButton({ + navigation: { url: '/personal-files' }, + appConfig: { + get: () => true + } + } as any) + ).toBeTrue(); + }); + + it('should return false if get from appConfig returns true, but navigation is not correct', () => { + expect( + app.canDisplayKnowledgeRetrievalButton({ + navigation: { url: '/my-special-files' }, + appConfig: { + get: () => true + } + } as any) + ).toBeFalse(); + }); + }); + describe('isContentServiceEnabled', () => { it('should call context.appConfig.get with correct parameters', () => { context.appConfig = { get: jasmine.createSpy() } as any; diff --git a/projects/aca-shared/rules/src/app.rules.ts b/projects/aca-shared/rules/src/app.rules.ts index 06a7dd369..e0a819b5a 100644 --- a/projects/aca-shared/rules/src/app.rules.ts +++ b/projects/aca-shared/rules/src/app.rules.ts @@ -631,8 +631,9 @@ export const areTagsEnabled = (context: AcaRuleContext): boolean => context.appC export const areCategoriesEnabled = (context: AcaRuleContext): boolean => context.appConfig.get('plugins.categoriesEnabled', true); export const canDisplayKnowledgeRetrievalButton = (context: AcaRuleContext): boolean => - navigation.isPersonalFiles(context) || - navigation.isSharedFiles(context) || - navigation.isRecentFiles(context) || - navigation.isFavorites(context) || - ((navigation.isSearchResults(context) || navigation.isLibraryContent(context)) && navigation.isNotLibraries(context)); + context.appConfig.get('plugins.knowledgeRetrievalEnabled', true) && + (navigation.isPersonalFiles(context) || + navigation.isSharedFiles(context) || + navigation.isRecentFiles(context) || + navigation.isFavorites(context) || + ((navigation.isSearchResults(context) || navigation.isLibraryContent(context)) && navigation.isNotLibraries(context)));