From 4f585cd0d384ccb31921a3c57b834c597e781682 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <p.gawron@atcomp.pl>
Date: Thu, 24 Oct 2024 11:42:57 +0200
Subject: [PATCH] show banner only when link is available

---
 CHANGELOG                                     |  5 +++
 .../CookieBanner.component.test.tsx           | 20 +++++++-----
 .../CookieBanner/CookieBanner.component.tsx   |  6 ++--
 src/models/mocks/configurationOptionMock.ts   | 31 +++++++++++++++----
 .../configuration/configuration.constants.ts  |  1 +
 src/redux/configuration/configuration.mock.ts |  2 ++
 .../configuration/configuration.selectors.ts  |  6 ++++
 .../map/triggerSearch/triggerSearch.test.ts   |  2 +-
 8 files changed, 57 insertions(+), 16 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index c5313949..b564876d 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,8 @@
+minerva-front (18.0.0) stable; urgency=medium
+  * Bug fix: show cookie baner only when cookie baner link is provided (#304)
+
+ -- Piotr Gawron <piotr.gawron@uni.lu>  Thu, 24 Oct 2024 13:00:00 +0200
+
 minerva-front (18.0.0) stable; urgency=medium
   * Feature: minerva frontend - first version
 
diff --git a/src/components/FunctionalArea/CookieBanner/CookieBanner.component.test.tsx b/src/components/FunctionalArea/CookieBanner/CookieBanner.component.test.tsx
index f4c49582..c5a0ccdb 100644
--- a/src/components/FunctionalArea/CookieBanner/CookieBanner.component.test.tsx
+++ b/src/components/FunctionalArea/CookieBanner/CookieBanner.component.test.tsx
@@ -1,18 +1,24 @@
 import React from 'react';
 import { render, screen } from '@testing-library/react';
-import { ToolkitStoreWithSingleSlice } from '@/utils/createStoreInstanceUsingSliceReducer';
-import { CookieBannerState } from '@/redux/cookieBanner/cookieBanner.types';
-import { getReduxWrapperUsingSliceReducer } from '@/utils/testing/getReduxWrapperUsingSliceReducer';
-import cookieBannerReducer from '@/redux/cookieBanner/cookieBanner.slice';
 import { act } from 'react-dom/test-utils';
-import { CookieBanner } from './CookieBanner.component';
+import { getReduxWrapperWithStore } from '@/utils/testing/getReduxWrapperWithStore';
+import { INITIAL_STORE_STATE_MOCK } from '@/redux/root/root.fixtures';
+import { StoreType } from '@/redux/store';
+import { CONFIGURATION_INITIAL_STORE_MOCKS } from '@/redux/configuration/configuration.mock';
 import {
   USER_ACCEPTED_COOKIES_COOKIE_NAME,
   USER_ACCEPTED_COOKIES_COOKIE_VALUE,
 } from './CookieBanner.constants';
+import { CookieBanner } from './CookieBanner.component';
 
-const renderComponent = (): { store: ToolkitStoreWithSingleSlice<CookieBannerState> } => {
-  const { Wrapper, store } = getReduxWrapperUsingSliceReducer('cookieBanner', cookieBannerReducer);
+const renderComponent = (): { store: StoreType } => {
+  // const { Wrapper, store } = getReduxWrapperUsingSliceReducer('cookieBanner', cookieBannerReducer);
+  //
+
+  const { Wrapper, store } = getReduxWrapperWithStore({
+    ...INITIAL_STORE_STATE_MOCK,
+    configuration: CONFIGURATION_INITIAL_STORE_MOCKS,
+  });
 
   return (
     render(
diff --git a/src/components/FunctionalArea/CookieBanner/CookieBanner.component.tsx b/src/components/FunctionalArea/CookieBanner/CookieBanner.component.tsx
index f27ac87c..643ed796 100644
--- a/src/components/FunctionalArea/CookieBanner/CookieBanner.component.tsx
+++ b/src/components/FunctionalArea/CookieBanner/CookieBanner.component.tsx
@@ -5,6 +5,7 @@ import { useAppSelector } from '@/redux/hooks/useAppSelector';
 import { Button } from '@/shared/Button';
 import Link from 'next/link';
 import { useEffect } from 'react';
+import { cookiePolicyUrlSelector } from '@/redux/configuration/configuration.selectors';
 import {
   USER_ACCEPTED_COOKIES_COOKIE_NAME,
   USER_ACCEPTED_COOKIES_COOKIE_VALUE,
@@ -13,6 +14,7 @@ import {
 export const CookieBanner = (): React.ReactNode => {
   const dispatch = useAppDispatch();
   const { visible, accepted } = useAppSelector(selectCookieBanner);
+  const cookiePolicyUrl = useAppSelector(cookiePolicyUrlSelector);
 
   useEffect(() => {
     const isAccepted =
@@ -33,7 +35,7 @@ export const CookieBanner = (): React.ReactNode => {
     );
   };
 
-  if (!visible || accepted) {
+  if (!visible || accepted || !cookiePolicyUrl) {
     return null;
   }
 
@@ -43,7 +45,7 @@ export const CookieBanner = (): React.ReactNode => {
       <p className="my-4 leading-loose">
         Minerva platform uses essential cookies to ensure its proper operation. For any queries in
         relation to our policy on cookies and your choices, please{' '}
-        <Link href="/" className="font-semibold text-[#1C00DE]">
+        <Link href={cookiePolicyUrl} className="font-semibold text-[#1C00DE]">
           read here
         </Link>
       </p>
diff --git a/src/models/mocks/configurationOptionMock.ts b/src/models/mocks/configurationOptionMock.ts
index f7a293f7..16fb91c7 100644
--- a/src/models/mocks/configurationOptionMock.ts
+++ b/src/models/mocks/configurationOptionMock.ts
@@ -1,12 +1,22 @@
 import { ConfigurationOption } from '@/types/models';
+import {
+  COOKIE_POLICY_URL,
+  MAX_COLOR_VAL_NAME_ID,
+  MIN_COLOR_VAL_NAME_ID,
+  NEUTRAL_COLOR_VAL_NAME_ID,
+  OVERLAY_OPACITY_NAME_ID,
+  SEARCH_DISTANCE_NAME_ID,
+  SIMPLE_COLOR_VAL_NAME_ID,
+} from '@/redux/configuration/configuration.constants';
 
 export const CONFIGURATION_OPTIONS_TYPES_MOCK: string[] = [
-  'MIN_COLOR_VAL',
-  'MAX_COLOR_VAL',
-  'SIMPLE_COLOR_VAL',
-  'NEUTRAL_COLOR_VAL',
-  'OVERLAY_OPACITY',
-  'SEARCH_DISTANCE',
+  MIN_COLOR_VAL_NAME_ID,
+  MAX_COLOR_VAL_NAME_ID,
+  SIMPLE_COLOR_VAL_NAME_ID,
+  NEUTRAL_COLOR_VAL_NAME_ID,
+  OVERLAY_OPACITY_NAME_ID,
+  SEARCH_DISTANCE_NAME_ID,
+  COOKIE_POLICY_URL,
 ];
 
 export const CONFIGURATION_OPTIONS_COLOURS_MOCK: ConfigurationOption[] = [
@@ -64,4 +74,13 @@ export const CONFIGURATION_OPTIONS_COLOURS_MOCK: ConfigurationOption[] = [
     value: '10',
     group: 'Point and click',
   },
+  {
+    idObject: 41,
+    type: 'COOKIE_POLICY_URL',
+    valueType: 'URL',
+    commonName: 'Privacy policy (url)',
+    isServerSide: false,
+    value: 'default-cookie-policy.xhtml',
+    group: 'Server configuration',
+  },
 ];
diff --git a/src/redux/configuration/configuration.constants.ts b/src/redux/configuration/configuration.constants.ts
index 28578664..032c5e0b 100644
--- a/src/redux/configuration/configuration.constants.ts
+++ b/src/redux/configuration/configuration.constants.ts
@@ -6,6 +6,7 @@ export const OVERLAY_OPACITY_NAME_ID = 'OVERLAY_OPACITY';
 export const SEARCH_DISTANCE_NAME_ID = 'SEARCH_DISTANCE';
 export const REQUEST_ACCOUNT_EMAIL = 'REQUEST_ACCOUNT_EMAIL';
 export const TERMS_OF_SERVICE_ID = 'TERMS_OF_USE';
+export const COOKIE_POLICY_URL = 'COOKIE_POLICY_URL';
 
 export const LEGEND_FILE_NAMES_IDS = [
   'LEGEND_FILE_1',
diff --git a/src/redux/configuration/configuration.mock.ts b/src/redux/configuration/configuration.mock.ts
index 07ee6ea9..4edae637 100644
--- a/src/redux/configuration/configuration.mock.ts
+++ b/src/redux/configuration/configuration.mock.ts
@@ -30,6 +30,8 @@ export const CONFIGURATION_INITIAL_STORE_MOCKS: ConfigurationState = {
       [CONFIGURATION_OPTIONS_TYPES_MOCK[2]]: CONFIGURATION_OPTIONS_COLOURS_MOCK[2],
       [CONFIGURATION_OPTIONS_TYPES_MOCK[3]]: CONFIGURATION_OPTIONS_COLOURS_MOCK[3],
       [CONFIGURATION_OPTIONS_TYPES_MOCK[4]]: CONFIGURATION_OPTIONS_COLOURS_MOCK[4],
+      [CONFIGURATION_OPTIONS_TYPES_MOCK[5]]: CONFIGURATION_OPTIONS_COLOURS_MOCK[5],
+      [CONFIGURATION_OPTIONS_TYPES_MOCK[6]]: CONFIGURATION_OPTIONS_COLOURS_MOCK[6],
     },
     loading: 'idle',
     error: DEFAULT_ERROR,
diff --git a/src/redux/configuration/configuration.selectors.ts b/src/redux/configuration/configuration.selectors.ts
index 176847d4..01a9eb4c 100644
--- a/src/redux/configuration/configuration.selectors.ts
+++ b/src/redux/configuration/configuration.selectors.ts
@@ -19,6 +19,7 @@ import {
   SEARCH_DISTANCE_NAME_ID,
   REQUEST_ACCOUNT_EMAIL,
   TERMS_OF_SERVICE_ID,
+  COOKIE_POLICY_URL,
 } from './configuration.constants';
 
 import { ConfigurationHandlersIds, ConfigurationImageHandlersIds } from './configuration.types';
@@ -69,6 +70,11 @@ export const termsOfServiceValSelector = createSelector(
   state => configurationAdapterSelectors.selectById(state, TERMS_OF_SERVICE_ID)?.value,
 );
 
+export const cookiePolicyUrlSelector = createSelector(
+  configurationOptionsSelector,
+  state => configurationAdapterSelectors.selectById(state, COOKIE_POLICY_URL)?.value,
+);
+
 export const defaultLegendImagesSelector = createSelector(configurationOptionsSelector, state =>
   LEGEND_FILE_NAMES_IDS.map(
     legendNameId => configurationAdapterSelectors.selectById(state, legendNameId)?.value,
diff --git a/src/services/pluginsManager/map/triggerSearch/triggerSearch.test.ts b/src/services/pluginsManager/map/triggerSearch/triggerSearch.test.ts
index bdec8559..abb470aa 100644
--- a/src/services/pluginsManager/map/triggerSearch/triggerSearch.test.ts
+++ b/src/services/pluginsManager/map/triggerSearch/triggerSearch.test.ts
@@ -197,7 +197,7 @@ describe('triggerSearch', () => {
             x: 545.8013,
             y: 500.9926,
           },
-          searchDistance: undefined,
+          searchDistance: '10',
           zoom: 5,
         });
       });
-- 
GitLab