@financial-times/cp-content-pipeline-schema 3.22.0 → 3.23.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/lib/generated/index.d.ts +28 -2
  3. package/lib/model/Image.d.ts +4 -1
  4. package/lib/model/Image.js +3 -1
  5. package/lib/model/Image.js.map +1 -1
  6. package/lib/model/Topper.d.ts +7 -6
  7. package/lib/model/Topper.js +38 -18
  8. package/lib/model/Topper.js.map +1 -1
  9. package/lib/model/strategies/topper/PodcastStrategy.d.ts +13 -0
  10. package/lib/model/strategies/topper/PodcastStrategy.js +29 -0
  11. package/lib/model/strategies/topper/PodcastStrategy.js.map +1 -0
  12. package/lib/model/strategies/topper/PodcastStrategy.test.d.ts +1 -0
  13. package/lib/model/strategies/topper/PodcastStrategy.test.js +183 -0
  14. package/lib/model/strategies/topper/PodcastStrategy.test.js.map +1 -0
  15. package/lib/model/strategies/topper/TopperStrategy.d.ts +18 -0
  16. package/lib/model/strategies/topper/TopperStrategy.js +3 -0
  17. package/lib/model/strategies/topper/TopperStrategy.js.map +1 -0
  18. package/lib/model/strategies/topper/TopperStrategy.test.d.ts +1 -0
  19. package/lib/model/strategies/topper/TopperStrategy.test.js +103 -0
  20. package/lib/model/strategies/topper/TopperStrategy.test.js.map +1 -0
  21. package/lib/resolvers/content-tree/Workarounds.d.ts +2 -2
  22. package/lib/resolvers/content-tree/nodePredicates.d.ts +1 -1
  23. package/lib/resolvers/content-tree/nodePredicates.js +1 -0
  24. package/lib/resolvers/content-tree/nodePredicates.js.map +1 -1
  25. package/lib/resolvers/content-tree/tagMappings.js +25 -0
  26. package/lib/resolvers/content-tree/tagMappings.js.map +1 -1
  27. package/lib/resolvers/index.d.ts +4 -0
  28. package/lib/resolvers/topper.d.ts +4 -0
  29. package/lib/resolvers/topper.js +5 -1
  30. package/lib/resolvers/topper.js.map +1 -1
  31. package/package.json +3 -3
  32. package/queries/article.graphql +1 -0
  33. package/src/generated/index.ts +34 -2
  34. package/src/model/Image.ts +3 -1
  35. package/src/model/Topper.ts +53 -30
  36. package/src/model/strategies/topper/PodcastStrategy.test.ts +215 -0
  37. package/src/model/strategies/topper/PodcastStrategy.ts +39 -0
  38. package/src/model/strategies/topper/README.md +11 -0
  39. package/src/model/strategies/topper/TopperStrategy.test.ts +124 -0
  40. package/src/model/strategies/topper/TopperStrategy.ts +36 -0
  41. package/src/resolvers/content-tree/Workarounds.ts +3 -0
  42. package/src/resolvers/content-tree/nodePredicates.ts +1 -0
  43. package/src/resolvers/content-tree/tagMappings.ts +36 -0
  44. package/src/resolvers/topper.ts +8 -1
  45. package/tsconfig.tsbuildinfo +1 -1
  46. package/typedefs/topper.graphql +10 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [3.23.1](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-schema-v3.23.0...cp-content-pipeline-schema-v3.23.1) (2026-01-09)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * enable cover image for podcast while introducing strategy pattern ([2f8a242](https://github.com/Financial-Times/cp-content-pipeline/commit/2f8a242ef2e68698449618e70a23a2faec9320b7))
9
+
10
+ ## [3.23.0](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-schema-v3.22.0...cp-content-pipeline-schema-v3.23.0) (2026-01-08)
11
+
12
+
13
+ ### Features
14
+
15
+ * in numbers component ([729021c](https://github.com/Financial-Times/cp-content-pipeline/commit/729021c08965f313163c3c092d40db6233352ba5))
16
+
3
17
  ## [3.22.0](https://github.com/Financial-Times/cp-content-pipeline/compare/cp-content-pipeline-schema-v3.21.0...cp-content-pipeline-schema-v3.22.0) (2025-12-16)
4
18
 
5
19
 
@@ -1488,7 +1488,7 @@ export type PlaceholderUrlArgs = {
1488
1488
  relative?: InputMaybe<Scalars['Boolean']['input']>;
1489
1489
  vanity?: InputMaybe<Scalars['Boolean']['input']>;
1490
1490
  };
1491
- export type PodcastTopper = Topper & TopperWithBrand & TopperWithHeadshot & TopperWithTheme & {
1491
+ export type PodcastTopper = Topper & TopperWithBrand & TopperWithCoverImage & TopperWithHeadshot & TopperWithTheme & {
1492
1492
  /** Whether the topper should have a background box. */
1493
1493
  readonly backgroundBox?: Maybe<Scalars['Boolean']['output']>;
1494
1494
  /** The background colour of the topper. */
@@ -1502,6 +1502,8 @@ export type PodcastTopper = Topper & TopperWithBrand & TopperWithHeadshot & Topp
1502
1502
  readonly columnist?: Maybe<Concept>;
1503
1503
  /** The concept object describing details of the column author(s). */
1504
1504
  readonly columnists?: Maybe<ReadonlyArray<Concept>>;
1505
+ /** The url of the cover image. */
1506
+ readonly coverImage?: Maybe<Scalars['String']['output']>;
1505
1507
  /** The concept object to be displayed, eg. {'type': 'TOPIC', 'prefLabel': 'Non-dom tax status', ...}. */
1506
1508
  readonly displayConcept?: Maybe<Concept>;
1507
1509
  /** The variant of the follow button to be displayed on the topper. */
@@ -1510,7 +1512,10 @@ export type PodcastTopper = Topper & TopperWithBrand & TopperWithHeadshot & Topp
1510
1512
  readonly genreConcept?: Maybe<Concept>;
1511
1513
  /** The headline text of the topper. */
1512
1514
  readonly headline: Scalars['String']['output'];
1513
- /** The url of the headshot image, eg. for columns with one key author. */
1515
+ /**
1516
+ * The url of the headshot image, eg. for columns with one key author.
1517
+ * @deprecated replaced by coverImage
1518
+ */
1514
1519
  readonly headshot?: Maybe<Scalars['String']['output']>;
1515
1520
  /** An abstract syntax tree of the introduction text. */
1516
1521
  readonly intro?: Maybe<RichText>;
@@ -1521,6 +1526,10 @@ export type PodcastTopper = Topper & TopperWithBrand & TopperWithHeadshot & Topp
1521
1526
  /** Whether the topper should have a text shadow. */
1522
1527
  readonly textShadow?: Maybe<Scalars['Boolean']['output']>;
1523
1528
  };
1529
+ export type PodcastTopperCoverImageArgs = {
1530
+ dpr?: InputMaybe<Scalars['Int']['input']>;
1531
+ width?: InputMaybe<Scalars['Int']['input']>;
1532
+ };
1524
1533
  export type PodcastTopperHeadshotArgs = {
1525
1534
  dpr?: InputMaybe<Scalars['Int']['input']>;
1526
1535
  url?: InputMaybe<Scalars['String']['input']>;
@@ -1706,6 +1715,14 @@ export type TopperWithBrand = {
1706
1715
  /** The concept object of the genre, eg. {'type': 'GENRE', 'prefLabel': 'Opinion', ...}. */
1707
1716
  readonly genreConcept?: Maybe<Concept>;
1708
1717
  };
1718
+ export type TopperWithCoverImage = {
1719
+ /** The url of the cover image. */
1720
+ readonly coverImage?: Maybe<Scalars['String']['output']>;
1721
+ };
1722
+ export type TopperWithCoverImageCoverImageArgs = {
1723
+ dpr?: InputMaybe<Scalars['Int']['input']>;
1724
+ width?: InputMaybe<Scalars['Int']['input']>;
1725
+ };
1709
1726
  export type TopperWithFlourish = Topper & TopperWithTheme & {
1710
1727
  /** Whether the topper should have a background box. */
1711
1728
  readonly backgroundBox?: Maybe<Scalars['Boolean']['output']>;
@@ -1878,6 +1895,7 @@ export type ResolversInterfaceTypes<RefType extends Record<string, unknown>> = R
1878
1895
  Reference: (ReferenceWithCAPIData<AuthorNode>) | (ReferenceWithCAPIData<ClipSetNode | OldClipNode>) | (ReferenceWithCAPIData<ContentTree.CustomCodeComponent>) | (ReferenceWithCAPIData<ContentTree.Flourish>) | (ReferenceWithCAPIData<ContentTree.ImageSet>) | (ReferenceWithCAPIData<ContentTree.LayoutImage>) | (ReferenceWithCAPIData<ContentTree.ImageSet>) | (ReferenceWithCAPIData<RawImageNode>) | (ReferenceWithCAPIData<ContentTree.Recommended>) | (ReferenceWithCAPIData<ContentTree.RecommendedList>) | (ReferenceWithCAPIData<ContentTree.ScrollyImage>) | (ReferenceWithCAPIData<ContentTree.Tweet>) | (ReferenceWithCAPIData<ContentTree.Video>);
1879
1896
  Topper: (TopperModel) | (TopperModel) | (TopperModel) | (TopperModel) | (TopperModel) | (TopperModel) | (TopperModel) | (TopperModel) | (TopperModel) | (TopperModel);
1880
1897
  TopperWithBrand: (TopperModel) | (TopperModel) | (TopperModel) | (TopperModel) | (TopperModel) | (TopperModel);
1898
+ TopperWithCoverImage: (TopperModel);
1881
1899
  TopperWithHeadshot: (TopperModel) | (TopperModel);
1882
1900
  TopperWithImages: (TopperModel) | (TopperModel) | (TopperModel) | (TopperModel) | (TopperModel);
1883
1901
  TopperWithPackage: (TopperModel);
@@ -1984,6 +2002,7 @@ export type ResolversTypes = ResolversObject<{
1984
2002
  Topper: ResolverTypeWrapper<TopperModel>;
1985
2003
  TopperBackgroundColour: ResolverTypeWrapper<Scalars['TopperBackgroundColour']['output']>;
1986
2004
  TopperWithBrand: ResolverTypeWrapper<TopperModel>;
2005
+ TopperWithCoverImage: ResolverTypeWrapper<ResolversInterfaceTypes<ResolversTypes>['TopperWithCoverImage']>;
1987
2006
  TopperWithFlourish: ResolverTypeWrapper<TopperModel>;
1988
2007
  TopperWithHeadshot: ResolverTypeWrapper<ResolversInterfaceTypes<ResolversTypes>['TopperWithHeadshot']>;
1989
2008
  TopperWithImages: ResolverTypeWrapper<TopperModel>;
@@ -2094,6 +2113,7 @@ export type ResolversParentTypes = ResolversObject<{
2094
2113
  Topper: TopperModel;
2095
2114
  TopperBackgroundColour: Scalars['TopperBackgroundColour']['output'];
2096
2115
  TopperWithBrand: TopperModel;
2116
+ TopperWithCoverImage: ResolversInterfaceTypes<ResolversParentTypes>['TopperWithCoverImage'];
2097
2117
  TopperWithFlourish: TopperModel;
2098
2118
  TopperWithHeadshot: ResolversInterfaceTypes<ResolversParentTypes>['TopperWithHeadshot'];
2099
2119
  TopperWithImages: TopperModel;
@@ -2859,6 +2879,7 @@ export type PodcastTopperResolvers<ContextType = QueryContext, ParentType extend
2859
2879
  brandConcept: Resolver<Maybe<ResolversTypes['Concept']>, ParentType, ContextType>;
2860
2880
  columnist: Resolver<Maybe<ResolversTypes['Concept']>, ParentType, ContextType>;
2861
2881
  columnists: Resolver<Maybe<ReadonlyArray<ResolversTypes['Concept']>>, ParentType, ContextType>;
2882
+ coverImage: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType, Partial<PodcastTopperCoverImageArgs>>;
2862
2883
  displayConcept: Resolver<Maybe<ResolversTypes['Concept']>, ParentType, ContextType>;
2863
2884
  followButtonVariant: Resolver<Maybe<ResolversTypes['FollowButtonVariant']>, ParentType, ContextType>;
2864
2885
  genreConcept: Resolver<Maybe<ResolversTypes['Concept']>, ParentType, ContextType>;
@@ -2986,6 +3007,10 @@ export type TopperWithBrandResolvers<ContextType = QueryContext, ParentType exte
2986
3007
  brandConcept: Resolver<Maybe<ResolversTypes['Concept']>, ParentType, ContextType>;
2987
3008
  genreConcept: Resolver<Maybe<ResolversTypes['Concept']>, ParentType, ContextType>;
2988
3009
  }>;
3010
+ export type TopperWithCoverImageResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['TopperWithCoverImage'] = ResolversParentTypes['TopperWithCoverImage']> = ResolversObject<{
3011
+ __resolveType?: TypeResolveFn<'PodcastTopper', ParentType, ContextType>;
3012
+ coverImage: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType, Partial<TopperWithCoverImageCoverImageArgs>>;
3013
+ }>;
2989
3014
  export type TopperWithFlourishResolvers<ContextType = QueryContext, ParentType extends ResolversParentTypes['TopperWithFlourish'] = ResolversParentTypes['TopperWithFlourish']> = ResolversObject<{
2990
3015
  backgroundBox: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
2991
3016
  backgroundColour: Resolver<Maybe<ResolversTypes['TopperBackgroundColour']>, ParentType, ContextType>;
@@ -3147,6 +3172,7 @@ export type Resolvers<ContextType = QueryContext> = ResolversObject<{
3147
3172
  Topper: TopperResolvers<ContextType>;
3148
3173
  TopperBackgroundColour: GraphQLScalarType;
3149
3174
  TopperWithBrand: TopperWithBrandResolvers<ContextType>;
3175
+ TopperWithCoverImage: TopperWithCoverImageResolvers<ContextType>;
3150
3176
  TopperWithFlourish: TopperWithFlourishResolvers<ContextType>;
3151
3177
  TopperWithHeadshot: TopperWithHeadshotResolvers<ContextType>;
3152
3178
  TopperWithImages: TopperWithImagesResolvers<ContextType>;
@@ -35,7 +35,10 @@ export declare class CAPIImage implements Image {
35
35
  width: number;
36
36
  dpr: number;
37
37
  }[]>;
38
- url(): string;
38
+ url(args?: {
39
+ width?: number;
40
+ dpr?: number;
41
+ }): string;
39
42
  dimensions(): Promise<{
40
43
  width: number;
41
44
  height: number;
@@ -98,10 +98,12 @@ class CAPIImage {
98
98
  dpr,
99
99
  }));
100
100
  }
101
- url() {
101
+ url(args) {
102
102
  return (0, imageService_1.default)({
103
103
  url: this.capiImage.binaryUrl,
104
104
  systemCode: this.#systemCode,
105
+ width: args?.width,
106
+ dpr: args?.dpr,
105
107
  });
106
108
  }
107
109
  async dimensions() {
@@ -1 +1 @@
1
- {"version":3,"file":"Image.js","sourceRoot":"","sources":["../../src/model/Image.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Image.js","sourceRoot":"","sources":["../../src/model/Image.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,18 @@
1
1
  import { Content } from './Content';
2
2
  import { CAPIImage } from './Image';
3
3
  import type { QueryContext } from '..';
4
- import { LiteralUnionScalarValues } from '../resolvers/literal-union';
5
- import { TopperBackgroundColour } from '../resolvers/scalars';
4
+ import type { TopperBackgroundColourValues, FollowButtonVariant } from './strategies/topper/TopperStrategy';
6
5
  import { RichText } from './RichText';
7
6
  import { LeadFlourish } from './LeadFlourish';
8
- import type { TopperWithHeadshotHeadshotArgs } from '../generated';
7
+ import type { TopperWithHeadshotHeadshotArgs, TopperWithCoverImageCoverImageArgs } from '../generated';
9
8
  type TopperType = 'DeepPortraitTopper' | 'DeepLandscapeTopper' | 'SplitTextTopper' | 'FullBleedTopper' | 'PodcastTopper' | 'OpinionTopper' | 'BrandedTopper' | 'BasicTopper' | 'TopperWithFlourish' | 'PartnerContentTopper';
10
- type TopperBackgroundColourValues = LiteralUnionScalarValues<typeof TopperBackgroundColour>;
11
9
  export declare class Topper {
12
10
  #private;
13
11
  private capiResponse;
14
12
  private context;
15
13
  constructor(capiResponse: Content, context: QueryContext);
14
+ private createStrategy;
15
+ private get strategy();
16
16
  intro(): RichText;
17
17
  headline(): string;
18
18
  type(): TopperType;
@@ -26,16 +26,17 @@ export declare class Topper {
26
26
  backgroundBox(): boolean | null;
27
27
  textShadow(): boolean | null;
28
28
  displayConcept(): import("./Concept").Concept | null;
29
- followButtonVariant(): "standard" | "inverse" | "opinion" | "alphaville" | "monochrome" | "inverse-monochrome";
29
+ followButtonVariant(): FollowButtonVariant;
30
30
  columnist(): import("./Concept").Concept | null;
31
31
  columnists(): import("./Concept").Concept[] | null;
32
32
  brandConcept(): import("./Concept").Concept | null;
33
33
  genreConcept(): import("./Concept").Concept | null;
34
34
  design(): {
35
- theme: LiteralUnionScalarValues<typeof import("../resolvers/scalars").PackageDesign>;
35
+ theme: import("../resolvers/literal-union").LiteralUnionScalarValues<typeof import("../resolvers/scalars").PackageDesign>;
36
36
  layout?: "default" | "wide";
37
37
  };
38
38
  imageService(args: TopperWithHeadshotHeadshotArgs): string | null;
39
39
  headshot(args: TopperWithHeadshotHeadshotArgs): Promise<string | null>;
40
+ coverImage(args: TopperWithCoverImageCoverImageArgs): Promise<string | null>;
40
41
  }
41
42
  export {};
@@ -13,6 +13,7 @@ const LeadFlourish_1 = require("./LeadFlourish");
13
13
  const Concept_1 = require("./Concept");
14
14
  const errors_1 = require("@dotcom-reliability-kit/errors");
15
15
  const isError_1 = __importDefault(require("../helpers/isError"));
16
+ const PodcastStrategy_1 = require("./strategies/topper/PodcastStrategy");
16
17
  function isDarkBackground(backgroundColour) {
17
18
  const darkColours = [
18
19
  'black',
@@ -23,14 +24,33 @@ function isDarkBackground(backgroundColour) {
23
24
  ];
24
25
  return darkColours.includes(backgroundColour);
25
26
  }
27
+ /*
28
+ Class representing a Topper for content, providing methods to access its properties.
29
+ It uses strategies to handle different topper types.
30
+ It returns a consistent interface for accessing topper-related data.
31
+ Strategies may override certain methods otherwise default values will be returned.
32
+ */
26
33
  class Topper {
27
34
  capiResponse;
28
35
  context;
29
36
  #systemCode;
37
+ #strategy = {};
30
38
  constructor(capiResponse, context) {
31
39
  this.capiResponse = capiResponse;
32
40
  this.context = context;
33
41
  this.#systemCode = context.systemCode;
42
+ this.#strategy = this.createStrategy() ?? {};
43
+ }
44
+ createStrategy() {
45
+ switch (this.type()) {
46
+ case 'PodcastTopper':
47
+ return new PodcastStrategy_1.PodcastTopperStrategy(this.capiResponse);
48
+ default:
49
+ return null;
50
+ }
51
+ }
52
+ get strategy() {
53
+ return this.#strategy;
34
54
  }
35
55
  intro() {
36
56
  const summary = this.capiResponse.summary();
@@ -128,6 +148,9 @@ class Topper {
128
148
  }
129
149
  }
130
150
  const type = this.type();
151
+ const strategy = this.strategy.backgroundColour?.();
152
+ if (strategy !== undefined)
153
+ return strategy;
131
154
  if (this.capiResponse.isCentralBanking()) {
132
155
  return 'slate';
133
156
  }
@@ -137,9 +160,6 @@ class Topper {
137
160
  if (this.capiResponse.isAlphaville()) {
138
161
  return 'matisse';
139
162
  }
140
- if (type === 'PodcastTopper') {
141
- return 'slate';
142
- }
143
163
  if (type === 'BrandedTopper') {
144
164
  return 'wheat';
145
165
  }
@@ -170,9 +190,9 @@ class Topper {
170
190
  return this.capiResponse.topper()?.textShadow ?? null;
171
191
  }
172
192
  displayConcept() {
173
- if (this.capiResponse.isPodcast()) {
174
- return this.capiResponse.getPodcastDisplayConcept() ?? null;
175
- }
193
+ const strategy = this.strategy.displayConcept?.();
194
+ if (strategy !== undefined)
195
+ return strategy;
176
196
  if (this.capiResponse.type() === 'ContentPackage' ||
177
197
  this.capiResponse.isCentralBanking()) {
178
198
  return null;
@@ -192,9 +212,9 @@ class Topper {
192
212
  return aboutAnnotation ?? null;
193
213
  }
194
214
  followButtonVariant() {
195
- if (this.capiResponse.isPodcast()) {
196
- return 'inverse';
197
- }
215
+ const strategy = this.strategy.followButtonVariant?.();
216
+ if (strategy !== undefined)
217
+ return strategy;
198
218
  if (this.type() === 'OpinionTopper') {
199
219
  if (this.backgroundColour() === 'sky') {
200
220
  return 'opinion';
@@ -227,9 +247,9 @@ class Topper {
227
247
  return isOpinionOrColumn && authors.length > 0 ? authors : null;
228
248
  }
229
249
  brandConcept() {
230
- if (this.capiResponse.isPodcast()) {
231
- return this.capiResponse.getPodcastBrandConcept() ?? null;
232
- }
250
+ const strategy = this.strategy.brandConcept?.();
251
+ if (strategy !== undefined)
252
+ return strategy;
233
253
  if (this.capiResponse.type() === 'ContentPackage') {
234
254
  return this.capiResponse.getPackageBrandConcept() ?? null;
235
255
  }
@@ -255,12 +275,6 @@ class Topper {
255
275
  return null;
256
276
  }
257
277
  async headshot(args) {
258
- if (this.capiResponse.isPodcast()) {
259
- return this.imageService({
260
- ...args,
261
- url: this.capiResponse.mainImage()?.url(),
262
- });
263
- }
264
278
  if (this.capiResponse.isOpinion()) {
265
279
  try {
266
280
  const primaryAuthor = await this.capiResponse.primaryAuthor();
@@ -282,6 +296,12 @@ class Topper {
282
296
  }
283
297
  return null;
284
298
  }
299
+ async coverImage(args) {
300
+ const strategy = this.strategy.coverImage?.(args);
301
+ if (strategy !== undefined)
302
+ return strategy;
303
+ return null;
304
+ }
285
305
  }
286
306
  exports.Topper = Topper;
287
307
  //# sourceMappingURL=Topper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Topper.js","sourceRoot":"","sources":["../../src/model/Topper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Topper.js","sourceRoot":"","sources":["../../src/model/Topper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { Content } from '../../Content';
2
+ import type { TopperStrategy, FollowButtonVariant, TopperBackgroundColourValues } from './TopperStrategy';
3
+ import type { TopperWithCoverImageCoverImageArgs } from '../../../generated';
4
+ import type { Concept } from '../../Concept';
5
+ export declare class PodcastTopperStrategy implements TopperStrategy {
6
+ private capiResponse;
7
+ constructor(capiResponse: Content);
8
+ backgroundColour(): TopperBackgroundColourValues;
9
+ displayConcept(): Concept | null;
10
+ brandConcept(): Concept | null;
11
+ followButtonVariant(): FollowButtonVariant;
12
+ coverImage(args: TopperWithCoverImageCoverImageArgs): Promise<string | null>;
13
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PodcastTopperStrategy = void 0;
4
+ class PodcastTopperStrategy {
5
+ capiResponse;
6
+ constructor(capiResponse) {
7
+ this.capiResponse = capiResponse;
8
+ }
9
+ backgroundColour() {
10
+ return 'slate';
11
+ }
12
+ displayConcept() {
13
+ return this.capiResponse.getPodcastDisplayConcept() ?? null;
14
+ }
15
+ brandConcept() {
16
+ return this.capiResponse.getPodcastBrandConcept() ?? null;
17
+ }
18
+ followButtonVariant() {
19
+ return 'inverse';
20
+ }
21
+ async coverImage(args) {
22
+ return (this.capiResponse
23
+ .mainImage()
24
+ ?.url({ width: args.width || undefined, dpr: args.dpr || undefined }) ||
25
+ null);
26
+ }
27
+ }
28
+ exports.PodcastTopperStrategy = PodcastTopperStrategy;
29
+ //# sourceMappingURL=PodcastStrategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PodcastStrategy.js","sourceRoot":"","sources":["../../../../src/model/strategies/topper/PodcastStrategy.ts"],"names":[],"mappings":";;;AASA,MAAa,qBAAqB;IACZ;IAApB,YAAoB,YAAqB;QAArB,iBAAY,GAAZ,YAAY,CAAS;IAAG,CAAC;IAE7C,gBAAgB;QACd,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC,wBAAwB,EAAE,IAAI,IAAI,CAAA;IAC7D,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,IAAI,IAAI,CAAA;IAC3D,CAAC;IAED,mBAAmB;QACjB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,KAAK,CAAC,UAAU,CACd,IAAwC;QAExC,OAAO,CACL,IAAI,CAAC,YAAY;aACd,SAAS,EAAE;YACZ,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,SAAS,EAAE,CAAC;YACvE,IAAI,CACL,CAAA;IACH,CAAC;CACF;AA7BD,sDA6BC"}
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const Topper_1 = require("../../Topper");
7
+ const Content_1 = require("../../Content");
8
+ const capiObject_1 = require("../../../fixtures/capiObject");
9
+ const dummyContext_1 = __importDefault(require("../../../fixtures/dummyContext"));
10
+ const clone_deep_1 = __importDefault(require("clone-deep"));
11
+ describe('Podcast topper', () => {
12
+ const createPodcastContent = (overrides = {}) => {
13
+ const podcastCapiObject = (0, clone_deep_1.default)({
14
+ ...capiObject_1.baseCapiObject,
15
+ types: ['http://www.ft.com/ontology/content/Audio'],
16
+ ...overrides,
17
+ });
18
+ return new Content_1.Content(podcastCapiObject, dummyContext_1.default);
19
+ };
20
+ describe('type()', () => {
21
+ test('returns PodcastTopper when content is podcast and has no specific topper layout', () => {
22
+ const podcastContent = createPodcastContent();
23
+ const topper = new Topper_1.Topper(podcastContent, dummyContext_1.default);
24
+ expect(topper.type()).toBe('PodcastTopper');
25
+ });
26
+ test('returns layout-specific topper type even for podcast content when topper layout is specified', () => {
27
+ const podcastContent = createPodcastContent({
28
+ topper: {
29
+ layout: 'deep-portrait',
30
+ headline: 'Podcast headline',
31
+ },
32
+ });
33
+ const topper = new Topper_1.Topper(podcastContent, dummyContext_1.default);
34
+ // Layout-based types take precedence over isPodcast() check
35
+ expect(topper.type()).toBe('DeepPortraitTopper');
36
+ });
37
+ test('returns PodcastTopper when content is podcast and has non-matching layout', () => {
38
+ const podcastContent = createPodcastContent({
39
+ topper: {
40
+ layout: 'branded',
41
+ headline: 'Podcast headline',
42
+ },
43
+ });
44
+ const topper = new Topper_1.Topper(podcastContent, dummyContext_1.default);
45
+ expect(topper.type()).toBe('PodcastTopper');
46
+ });
47
+ });
48
+ describe('backgroundColour()', () => {
49
+ test('returns slate for podcast topper', () => {
50
+ const podcastContent = createPodcastContent();
51
+ const topper = new Topper_1.Topper(podcastContent, dummyContext_1.default);
52
+ expect(topper.backgroundColour()).toBe('slate');
53
+ });
54
+ test('returns slate even when topper has different background colour specified', () => {
55
+ const podcastContent = createPodcastContent({
56
+ topper: {
57
+ backgroundColour: 'blue',
58
+ headline: 'Podcast headline',
59
+ },
60
+ });
61
+ const topper = new Topper_1.Topper(podcastContent, dummyContext_1.default);
62
+ expect(topper.backgroundColour()).toBe('slate');
63
+ });
64
+ });
65
+ describe('displayConcept()', () => {
66
+ test('calls getPodcastDisplayConcept for podcast content', () => {
67
+ const podcastContent = createPodcastContent();
68
+ const topper = new Topper_1.Topper(podcastContent, dummyContext_1.default);
69
+ jest
70
+ .spyOn(podcastContent, 'getPodcastDisplayConcept')
71
+ .mockReturnValue(undefined);
72
+ topper.displayConcept();
73
+ expect(podcastContent.getPodcastDisplayConcept).toHaveBeenCalled();
74
+ });
75
+ test('returns null when no podcast display concept is available', () => {
76
+ const podcastContent = createPodcastContent();
77
+ const topper = new Topper_1.Topper(podcastContent, dummyContext_1.default);
78
+ jest
79
+ .spyOn(podcastContent, 'getPodcastDisplayConcept')
80
+ .mockReturnValue(undefined);
81
+ expect(topper.displayConcept()).toBe(null);
82
+ });
83
+ });
84
+ describe('followButtonVariant()', () => {
85
+ test('returns inverse for podcast topper', () => {
86
+ const podcastContent = createPodcastContent();
87
+ const topper = new Topper_1.Topper(podcastContent, dummyContext_1.default);
88
+ expect(topper.followButtonVariant()).toBe('inverse');
89
+ });
90
+ test('returns inverse regardless of background colour', () => {
91
+ const podcastContent = createPodcastContent({
92
+ topper: {
93
+ backgroundColour: 'white',
94
+ headline: 'Podcast headline',
95
+ },
96
+ });
97
+ const topper = new Topper_1.Topper(podcastContent, dummyContext_1.default);
98
+ expect(topper.followButtonVariant()).toBe('inverse');
99
+ });
100
+ });
101
+ describe('brandConcept()', () => {
102
+ test('calls getPodcastBrandConcept for podcast content', () => {
103
+ const podcastContent = createPodcastContent();
104
+ const topper = new Topper_1.Topper(podcastContent, dummyContext_1.default);
105
+ jest
106
+ .spyOn(podcastContent, 'getPodcastBrandConcept')
107
+ .mockReturnValue(undefined);
108
+ topper.brandConcept();
109
+ expect(podcastContent.getPodcastBrandConcept).toHaveBeenCalled();
110
+ });
111
+ test('returns null when no podcast brand concept is available', () => {
112
+ const podcastContent = createPodcastContent();
113
+ const topper = new Topper_1.Topper(podcastContent, dummyContext_1.default);
114
+ jest
115
+ .spyOn(podcastContent, 'getPodcastBrandConcept')
116
+ .mockReturnValue(undefined);
117
+ expect(topper.brandConcept()).toBe(null);
118
+ });
119
+ });
120
+ describe('integration with other methods', () => {
121
+ test('podcast topper behavior takes precedence over other content types in specific methods', () => {
122
+ // Create content that would normally be opinion but is also a podcast
123
+ const podcastOpinionContent = createPodcastContent({
124
+ annotations: [
125
+ {
126
+ id: 'http://api.ft.com/things/author-1',
127
+ predicate: 'http://www.ft.com/ontology/annotation/hasAuthor',
128
+ prefLabel: 'Opinion Author',
129
+ directType: 'http://www.ft.com/ontology/Person',
130
+ },
131
+ ],
132
+ });
133
+ jest.spyOn(podcastOpinionContent, 'isOpinion').mockReturnValue(true);
134
+ const topper = new Topper_1.Topper(podcastOpinionContent, dummyContext_1.default);
135
+ // Should still be PodcastTopper, not OpinionTopper (because isPodcast comes before isOpinion in type())
136
+ expect(topper.type()).toBe('PodcastTopper');
137
+ expect(topper.backgroundColour()).toBe('slate');
138
+ expect(topper.followButtonVariant()).toBe('inverse');
139
+ });
140
+ describe('podcast topper behavior works with various topper layouts', () => {
141
+ // Test with layouts that DON'T override podcast behavior
142
+ const nonOverridingLayouts = ['branded', 'basic'];
143
+ nonOverridingLayouts.forEach((layout) => {
144
+ const podcastContent = createPodcastContent({
145
+ topper: {
146
+ layout,
147
+ headline: 'Podcast headline',
148
+ },
149
+ });
150
+ const topper = new Topper_1.Topper(podcastContent, dummyContext_1.default);
151
+ test(`layout: ${layout}`, () => {
152
+ // These should still be PodcastTopper because layout does not override podcast behavior
153
+ expect(topper.type()).toBe('PodcastTopper');
154
+ expect(topper.backgroundColour()).toBe('slate');
155
+ expect(topper.followButtonVariant()).toBe('inverse');
156
+ });
157
+ });
158
+ });
159
+ describe('podcast topper is overriden by some layouts', () => {
160
+ // Test with layouts that DO override podcast behavior
161
+ const overridingLayouts = [
162
+ 'deep-portrait',
163
+ 'deep-landscape',
164
+ 'split',
165
+ 'full-bleed',
166
+ ];
167
+ overridingLayouts.forEach((layout) => {
168
+ test(`layout: ${layout}`, () => {
169
+ const podcastContent = createPodcastContent({
170
+ topper: {
171
+ layout,
172
+ headline: 'Podcast headline',
173
+ },
174
+ });
175
+ const topper = new Topper_1.Topper(podcastContent, dummyContext_1.default);
176
+ // These should NOT be PodcastTopper because layout takes precedence
177
+ expect(topper.type()).not.toBe('PodcastTopper');
178
+ });
179
+ });
180
+ });
181
+ });
182
+ });
183
+ //# sourceMappingURL=PodcastStrategy.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PodcastStrategy.test.js","sourceRoot":"","sources":["../../../../src/model/strategies/topper/PodcastStrategy.test.ts"],"names":[],"mappings":"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"}