Skip to content

Commit ce48a17

Browse files
feat(mediaurls): option to add revision query param to media URLs in Release (#243)
--------- Co-authored-by: Lukas Schneider (Neo Reply) <131265055+neo-reply-lukas@users.noreply.github.com> Co-authored-by: jodeleit-es <>
1 parent 653c99d commit ce48a17

5 files changed

Lines changed: 58 additions & 6 deletions

File tree

src/modules/CaaSMapper.spec.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,16 +144,32 @@ describe('CaaSMapper', () => {
144144
})
145145

146146
describe('buildMediaUrl', () => {
147-
it('should return the url as-is in release mode', () => {
147+
it('should return the url as-is in release mode when includeRevisionInMediaUrls is false', () => {
148148
const api = createApi()
149149
api.contentMode = FSXAContentMode.RELEASE
150+
api.includeRevisionInMediaUrls = false
150151
const mapper = new CaaSMapper(api, 'de', {}, createLogger())
151152
const url = 'https://e-spirit.local/some/resource'
152153
expect(mapper.buildMediaUrl(url)).toEqual(url)
154+
expect(mapper.buildMediaUrl(url, 5593)).toEqual(url)
153155
})
154-
it('should append the revision as a query param if given in preview mode', () => {
156+
it('should append the revision as a query param if given when includeRevisionInMediaUrls is true', () => {
155157
const api = createApi()
156-
api.contentMode = FSXAContentMode.PREVIEW
158+
api.includeRevisionInMediaUrls = true
159+
const mapper = new CaaSMapper(api, 'de', {}, createLogger())
160+
const url = 'https://e-spirit.local/some/resource'
161+
expect(mapper.buildMediaUrl(url)).toEqual(url)
162+
expect(mapper.buildMediaUrl(url, 5593)).toEqual(`${url}?rev=5593`)
163+
// check media string construction
164+
expect(mapper.buildMediaUrl(`${url}?prev`, 5593)).toEqual(
165+
`${url}?prev&rev=5593`
166+
)
167+
})
168+
169+
it('should append the revision as a query param if includeRevisionInMediaUrls is true and content mode is release', () => {
170+
const api = createApi()
171+
api.contentMode = FSXAContentMode.RELEASE
172+
api.includeRevisionInMediaUrls = true
157173
const mapper = new CaaSMapper(api, 'de', {}, createLogger())
158174
const url = 'https://e-spirit.local/some/resource'
159175
expect(mapper.buildMediaUrl(url)).toEqual(url)

src/modules/CaaSMapper.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ export class CaaSMapper {
231231
}
232232

233233
buildMediaUrl(url: string, rev?: number) {
234-
if (rev && this.api.contentMode === FSXAContentMode.PREVIEW) {
234+
if (rev && this.api.includeRevisionInMediaUrls) {
235235
url += `${url.includes('?') ? '&' : '?'}rev=${rev}`
236236
}
237237
return url

src/modules/FSXARemoteApi.spec.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,22 @@ describe('FSXARemoteAPI', () => {
8686
new FSXARemoteApi(config)
8787
}).toThrow(FSXAApiErrors.UNKNOWN_CONTENT_MODE)
8888
})
89+
it('should default includeRevisionInMediaUrls to true in preview mode', () => {
90+
config.contentMode = 'preview'
91+
remoteApi = new FSXARemoteApi(config)
92+
expect(remoteApi.includeRevisionInMediaUrls).toBe(true)
93+
})
94+
it('should default includeRevisionInMediaUrls to false in release mode', () => {
95+
config.contentMode = 'release'
96+
remoteApi = new FSXARemoteApi(config)
97+
expect(remoteApi.includeRevisionInMediaUrls).toBe(false)
98+
})
99+
it('should allow overriding includeRevisionInMediaUrls in release mode', () => {
100+
config.contentMode = 'release'
101+
config.includeRevisionInMediaUrls = true
102+
remoteApi = new FSXARemoteApi(config)
103+
expect(remoteApi.includeRevisionInMediaUrls).toBe(true)
104+
})
89105
})
90106
describe('buildAuthorizationHeaders', () => {
91107
it('should return the correct authorization object', () => {

src/modules/FSXARemoteApi.ts

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import {
3030
removeFromSeoRouteMap,
3131
removeFromStructure,
3232
} from '../utils'
33-
import { FSXAApiErrors, HttpStatus } from './../enums'
33+
import { FSXAApiErrors, FSXAContentMode, HttpStatus } from './../enums'
3434
import { LogLevel } from './Logger'
3535
import { denormalizeResolvedReferences } from './MappingUtils'
3636
import { ComparisonQueryOperatorEnum, QueryBuilder } from './QueryBuilder'
@@ -74,6 +74,7 @@ export class FSXARemoteApi implements FSXAApi {
7474
private _caasItemFilter?: CaasItemFilter
7575
private _logLevel: LogLevel
7676
private _enableEventStream: boolean = false
77+
private _includeRevisionInMediaUrls: boolean = false
7778

7879
/**
7980
* The constructor of this class initializes the configuration for the api.
@@ -90,6 +91,7 @@ export class FSXARemoteApi implements FSXAApi {
9091
* @param config.customMapper optional {@link CustomMapper CustomMapper}
9192
* @param config.filterOptions optional {@link RemoteApiFilterOptions RemoteApiFilterOptions} (EXPERIMENTAL)
9293
* @param config.logLevel the used {@link LogLevel LogLevel} for the API `(default LogLevel.ERROR)` - optional
94+
* @param config.includeRevisionInMediaUrls whether to append `rev` query param to media URLs `(default: true in preview, false in release)`
9395
*/
9496
constructor({
9597
apikey,
@@ -103,6 +105,7 @@ export class FSXARemoteApi implements FSXAApi {
103105
customMapper,
104106
filterOptions,
105107
logLevel = LogLevel.ERROR,
108+
includeRevisionInMediaUrls = contentMode === FSXAContentMode.PREVIEW, // default to true in preview, false in release
106109
}: FSXARemoteApiConfig) {
107110
this.apikey = apikey
108111
this.caasURL = caasURL
@@ -118,6 +121,7 @@ export class FSXARemoteApi implements FSXAApi {
118121
this._queryBuilder = new QueryBuilder(this._logger)
119122
this._navigationItemFilter = filterOptions?.navigationItemFilter
120123
this._caasItemFilter = filterOptions?.caasItemFilter
124+
this._includeRevisionInMediaUrls = includeRevisionInMediaUrls
121125

122126
this._logger.debug('FSXARemoteApi created', {
123127
caasURL,
@@ -129,6 +133,7 @@ export class FSXARemoteApi implements FSXAApi {
129133
customMapper: this._customMapper,
130134
navigationItemFilter: this._navigationItemFilter,
131135
caasItemFilter: this._caasItemFilter,
136+
includeRevisionInMediaUrls: this._includeRevisionInMediaUrls
132137
})
133138
}
134139

@@ -635,7 +640,7 @@ export class FSXARemoteApi implements FSXAApi {
635640
mapperLocale,
636641
{
637642
customMapper: this._customMapper,
638-
maxReferenceDepth: this._maxReferenceDepth,
643+
maxReferenceDepth: this._maxReferenceDepth
639644
},
640645
new Logger(this._logLevel, 'CaaSMapper')
641646
)
@@ -1043,6 +1048,20 @@ export class FSXARemoteApi implements FSXAApi {
10431048
this._contentMode = value
10441049
}
10451050

1051+
/**
1052+
* @returns whether revision query parameter `rev` is appended to media URLs
1053+
*/
1054+
public get includeRevisionInMediaUrls() {
1055+
return this._includeRevisionInMediaUrls
1056+
}
1057+
1058+
/**
1059+
* Sets whether revision query parameter `rev` is appended to media URLs
1060+
*/
1061+
public set includeRevisionInMediaUrls(value: boolean) {
1062+
this._includeRevisionInMediaUrls = value
1063+
}
1064+
10461065
/**
10471066
* @returns the configured log level
10481067
*/

src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1033,6 +1033,7 @@ export type FSXARemoteApiConfig = {
10331033
customMapper?: CustomMapper
10341034
filterOptions?: RemoteApiFilterOptions
10351035
enableEventStream?: boolean
1036+
includeRevisionInMediaUrls?: boolean
10361037
}
10371038

10381039
export type FilterContextProvider = () => unknown | null

0 commit comments

Comments
 (0)