Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feature/CXCDS-12370 - DM- 281: Downstream - commerce site propagation to ISS - SPA component #19385

Open
wants to merge 21 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
bd49ca3
CXCDS-12370: introduced feature toggle for cas enablement
SebastianHamilton Sep 20, 2024
3687e8f
CXCDS-12370: Resolved merge conflicts with develop branch
SebastianHamilton Oct 4, 2024
af0e9f8
Merge branch 'develop' into feature/CXCDS-12370
SebastianHamilton Oct 9, 2024
1b28fcc
CXCDS-12370: fixed lifecycle problem with injection
SebastianHamilton Oct 9, 2024
d170aa0
CXCDS-12370: fixed merge conflicts
SebastianHamilton Oct 9, 2024
073f617
CXCDS-12370: Fixed tests, resolved conflicts with develop
SebastianHamilton Oct 10, 2024
c883d61
Merge branch 'develop' into feature/CXCDS-12370
SebastianHamilton Oct 10, 2024
09ef0fc
Merge branch 'develop' into feature/CXCDS-12370
SebastianHamilton Oct 10, 2024
ba34fff
CXCDS-12370: Cleaned-up schematics config
SebastianHamilton Oct 14, 2024
15e1e7f
Merge branch 'feature/CXCDS-12370' of https://github.com/SAP/spartacu…
SebastianHamilton Oct 14, 2024
3b3f3fb
Merge branch 'develop' into feature/CXCDS-12370
SebastianHamilton Oct 14, 2024
81496af
CXCDS-12370: Fixed linting errors
SebastianHamilton Oct 14, 2024
401666d
CXCDS-12370: Fixed SonarQube errors
SebastianHamilton Oct 14, 2024
ec5c0b6
CXCDS-12370: Fixed formatting errors
SebastianHamilton Oct 14, 2024
a5af507
Merge branch 'develop' into feature/CXCDS-12370
SebastianHamilton Oct 14, 2024
b69964c
CXCDS-12370: Fixed failing tests
SebastianHamilton Oct 14, 2024
1ec695f
CXCDS-12370: Resolved merge conflicts
SebastianHamilton Oct 14, 2024
a57bf7f
Merge branch 'develop' into feature/CXCDS-12370
SebastianHamilton Oct 14, 2024
af0ff6f
CXCDS-12370: Fixed typos
SebastianHamilton Oct 17, 2024
b939dfd
Merge branch 'feature/CXCDS-12370' of https://github.com/SAP/spartacu…
SebastianHamilton Oct 17, 2024
7acee19
Merge branch 'develop' into feature/CXCDS-12370
SebastianHamilton Oct 17, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 11 additions & 3 deletions integration-libs/cds/src/cds.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,16 @@
*/

import { ModuleWithProviders, NgModule } from '@angular/core';
import { provideConfigValidator, provideDefaultConfig } from '@spartacus/core';
import { CdsConfig, cdsConfigValidator, DEFAULT_CDS_CONFIG } from './config';
import {
provideConfigValidator,
provideDefaultConfig,
provideDefaultConfigFactory,
} from '@spartacus/core';
import {
CdsConfig,
cdsConfigValidator,
defaultCdsConfigFactory,
} from './config';
import { MerchandisingModule } from './merchandising';
import {
ProfileTagModule,
Expand All @@ -30,7 +38,7 @@ export class CdsModule {
return {
ngModule: CdsModule,
providers: [
provideDefaultConfig(DEFAULT_CDS_CONFIG),
provideDefaultConfigFactory(defaultCdsConfigFactory),
provideDefaultConfig(config),
provideConfigValidator(cdsConfigValidator),
ProfileTagPushEventsService,
Expand Down
41 changes: 24 additions & 17 deletions integration-libs/cds/src/config/default-cds-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,30 @@
* SPDX-License-Identifier: Apache-2.0
*/

import { inject } from '@angular/core';
import { CdsConfig } from './cds-config';
import { FeatureToggles } from '@spartacus/core';

export const DEFAULT_CDS_CONFIG: CdsConfig = {
cds: {
tenant: '',
baseUrl: '',
endpoints: {
strategyProducts: '/strategy/${tenant}/strategies/${strategyId}/products',
searchIntelligence:
'/search-intelligence/v1/sites/${cdsSiteId}/trendingSearches',
export function defaultCdsConfigFactory(): CdsConfig {
const featureToggles = inject(FeatureToggles);
return {
cds: {
tenant: '',
baseUrl: '',
endpoints: {
strategyProducts: featureToggles.cdsCasEnabled
? '/strategy/v1/sites/${baseSite}/strategies/${strategyId}/products'
: '/strategy/${tenant}/strategies/${strategyId}/products',
searchIntelligence:
'/search-intelligence/v1/sites/${cdsSiteId}/trendingSearches',
},
merchandising: {
defaultCarouselViewportThreshold: 80,
},
consentTemplateId: 'PROFILE',
profileTag: {
allowInsecureCookies: false,
},
},
merchandising: {
defaultCarouselViewportThreshold: 80,
},
consentTemplateId: 'PROFILE',
profileTag: {
allowInsecureCookies: false,
},
},
};
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,17 @@ import { CdsEndpointsService } from '../../../services/cds-endpoints.service';
import { StrategyProducts } from '../../model/strategy-products.model';
import { CdsMerchandisingStrategyAdapter } from './cds-merchandising-strategy.adapter';
import createSpy = jasmine.createSpy;
import { BaseSiteService } from '@spartacus/core';
import { of } from 'rxjs';

const STRATEGY_ID = 'test-strategy-id';
const STRATEGY_PRODUCTS_ENDPOINT_KEY = 'strategyProducts';
const strategyIdObject = { strategyId: STRATEGY_ID };
const TEST_BASE_SITE = 'testBaseSite';

const TEST_URL_PARAMS = {
baseSite: TEST_BASE_SITE,
strategyId: STRATEGY_ID,
};

const expectedProductsFromStrategy: StrategyProducts = {
resultCount: 1,
Expand Down Expand Up @@ -46,7 +53,13 @@ const strategyRequestUndefinedConsentReference = {

class MockCdsEndpointsService {
getUrl = createSpy('MockCdsEndpointsService.getUrl').and.callFake(
(endpoint) => endpoint
(endpoint: string) => endpoint
);
}

class MockBaseSiteService {
getActive = createSpy('MockBaseSiteService.getActive').and.callFake(() =>
of(TEST_BASE_SITE)
);
}

Expand All @@ -63,6 +76,10 @@ describe('MerchandisingStrategyAdapter', () => {
provide: CdsEndpointsService,
useClass: MockCdsEndpointsService,
},
{
provide: BaseSiteService,
useClass: MockBaseSiteService,
},
CdsMerchandisingStrategyAdapter,
],
});
Expand Down Expand Up @@ -123,7 +140,7 @@ describe('MerchandisingStrategyAdapter', () => {

expect(cdsEndpointsService.getUrl).toHaveBeenCalledWith(
STRATEGY_PRODUCTS_ENDPOINT_KEY,
strategyIdObject,
TEST_URL_PARAMS,
strategyRequest.queryParams
);

Expand Down Expand Up @@ -156,7 +173,7 @@ describe('MerchandisingStrategyAdapter', () => {

expect(cdsEndpointsService.getUrl).toHaveBeenCalledWith(
STRATEGY_PRODUCTS_ENDPOINT_KEY,
strategyIdObject,
TEST_URL_PARAMS,
strategyRequest.queryParams
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@

import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { Observable, switchMap, take } from 'rxjs';
import { CdsEndpointsService } from '../../../services/cds-endpoints.service';
import { MerchandisingStrategyAdapter } from '../../connectors/strategy/merchandising-strategy.adapter';
import { StrategyProducts } from '../../model/strategy-products.model';
import { StrategyRequest } from './../../../cds-models/cds-strategy-request.model';
import { BaseSiteService } from '@spartacus/core';

const STRATEGY_PRODUCTS_ENDPOINT_KEY = 'strategyProducts';

Expand All @@ -20,6 +21,7 @@ export class CdsMerchandisingStrategyAdapter
{
constructor(
private cdsEndpointsService: CdsEndpointsService,
private baseSiteService: BaseSiteService,
protected http: HttpClient
) {}

Expand All @@ -34,15 +36,21 @@ export class CdsMerchandisingStrategyAdapter
strategyRequest.headers.consentReference
);
}
return this.http.get(
this.cdsEndpointsService.getUrl(
STRATEGY_PRODUCTS_ENDPOINT_KEY,
{
strategyId,
},
strategyRequest.queryParams
),
{ headers }
return this.baseSiteService.getActive().pipe(
take(1),
switchMap((baseSite) =>
this.http.get(
this.cdsEndpointsService.getUrl(
STRATEGY_PRODUCTS_ENDPOINT_KEY,
{
baseSite,
strategyId,
},
strategyRequest.queryParams
),
{ headers }
)
)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,6 @@ describe('RecentSearchesComponent', () => {

expect(() => {
component.shareEvent(ev);
}).toThrowError();
}).toThrow();
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,6 @@ import { I18nConfig, provideConfig } from "@spartacus/core";
cds: {
tenant: 'my-tenant',
baseUrl: 'my-base-url.com',
endpoints: {
strategyProducts: '/strategy/\${tenant}/strategies/\${strategyId}/products',
},
merchandising: {
defaultCarouselViewportThreshold: 80,
},
Expand Down Expand Up @@ -67,9 +64,6 @@ import { I18nConfig, provideConfig } from "@spartacus/core";
cds: {
tenant: 'my-tenant',
baseUrl: 'my-base-url.com',
endpoints: {
strategyProducts: '/strategy/\${tenant}/strategies/\${strategyId}/products',
},
merchandising: {
defaultCarouselViewportThreshold: 80,
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -632,6 +632,12 @@ export interface FeatureTogglesInterface {
* in the future together with this feature toggle.
*/
allPageMetaResolversEnabledInCsr?: boolean;

/**
* CDS/ISS is integrated into CAS. CAS uses different URL formats for its services. This feature toggle can be used
* to make the CDS module use the CAS URLs.
*/
cdsCasEnabled?: boolean;
}

export const defaultFeatureToggles: Required<FeatureTogglesInterface> = {
Expand Down Expand Up @@ -731,4 +737,5 @@ export const defaultFeatureToggles: Required<FeatureTogglesInterface> = {
enableConsecutiveCharactersPasswordRequirement: false,
enablePasswordsCannotMatchInPasswordUpdateForm: false,
allPageMetaResolversEnabledInCsr: false,
cdsCasEnabled: false,
};
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,6 @@ function buildCdsConfig(
cds: {
tenant: '${options.tenant || 'TENANT_PLACEHOLDER'}',
baseUrl: '${options.baseUrl || 'BASE_URL_PLACEHOLDER'}',
endpoints: {
strategyProducts: '/strategy/\${tenant}/strategies/\${strategyId}/products',
},
merchandising: {
defaultCarouselViewportThreshold: 80,
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,17 @@ import {
cdsTranslations,
} from '@spartacus/cds/assets';

/**
* Only differences to the default cds config, they are merged together.
*
* @see defaultCdsConfigFactory
* @see CdsModule.forRoot
*/
const cds1: CdsConfig = {
cds: {
baseSite: ['electronics-spa', 'electronics', 'electronics-standalone'],
tenant: 'argotest',
baseUrl: 'https://api.stage.context.cloud.sap',
endpoints: {
strategyProducts: '/strategy/${tenant}/strategies/${strategyId}/products',
searchIntelligence:
'/search-intelligence/v1/sites/${cdsSiteId}/trendingSearches',
},
merchandising: {
defaultCarouselViewportThreshold: 80,
},
profileTag: {
javascriptUrl:
'https://tag.static.stage.context.cloud.sap/js/profile-tag.js',
Expand All @@ -40,7 +38,13 @@ const cds1: CdsConfig = {
},
};

const cds2 = {
/**
* Only differences to the default cds config, they are merged together.
*
* @see defaultCdsConfigFactory
* @see CdsModule.forRoot
*/
const cds2: CdsConfig = {
cds: {
baseSite: [
'apparel-de',
Expand All @@ -50,14 +54,6 @@ const cds2 = {
],
tenant: 'A_CDS_TENANT',
baseUrl: 'A_CDS_BASE_URL',
endpoints: {
strategyProducts: '/strategy/${tenant}/strategies/${strategyId}/products',
searchIntelligence:
'/search-intelligence/v1/sites/${cdsSiteId}/trendingSearches',
},
merchandising: {
defaultCarouselViewportThreshold: 80,
},
profileTag: {
javascriptUrl: 'A_CDS_PROFILE_TAG_LOAD_URL',
configUrl: 'A_CDS_PROFILE_TAG_CONFIG_URL',
Expand All @@ -66,9 +62,9 @@ const cds2 = {
},
};

const cdsConfigArray = [cds1, cds2];
function cdsConfigFactory(windowRef: WindowRef): CdsConfig {
const cdsConfigArray = [cds1, cds2];

const cdsConfig = (windowRef: WindowRef): CdsConfig => {
if (!windowRef.isBrowser()) {
return cds1;
}
Expand All @@ -78,7 +74,7 @@ const cdsConfig = (windowRef: WindowRef): CdsConfig => {
);
});
return cds ?? cds1;
};
}

@NgModule({
imports: [CdsModule.forRoot()],
Expand All @@ -90,7 +86,7 @@ const cdsConfig = (windowRef: WindowRef): CdsConfig => {
fallbackLang: 'en',
},
}),
provideConfigFactory(cdsConfig, [WindowRef]),
provideConfigFactory(cdsConfigFactory, [WindowRef]),
],
})
export class CdsFeatureModule {}
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,7 @@ if (environment.cpq) {
enableConsecutiveCharactersPasswordRequirement: true,
enablePasswordsCannotMatchInPasswordUpdateForm: true,
allPageMetaResolversEnabledInCsr: true,
cdsCasEnabled: false,
};
return appFeatureToggles;
}),
Expand Down
Loading