Skip to content

Commit 77eff43

Browse files
authored
Merge pull request #139 from Kentico/GH-125-update-repo-base/MB
GH-125 update repo to use ContentRetriever API /mb
2 parents b22371e + 9eccd08 commit 77eff43

File tree

16 files changed

+233
-357
lines changed

16 files changed

+233
-357
lines changed
Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,29 @@
11
using Xunit;
2-
using CMS.Websites;
32
using Moq;
43
using TrainingGuides.Web.Features.Articles.Services;
54
using TrainingGuides.Web.Features.Articles;
65
using Microsoft.AspNetCore.Html;
7-
using Kentico.Content.Web.Mvc.Routing;
86

97
namespace TrainingGuides.Web.Tests.Features.Articles.Services;
108

119
public class ArticlePageServiceTests
1210
{
1311
private readonly Mock<ArticlePageService> articlePageServiceMock;
14-
private readonly Mock<IWebPageUrlRetriever> webPageUrlRetrieverMock;
15-
private readonly Mock<IPreferredLanguageRetriever> preferredLanguageRetrieverMock;
1612

1713
private const string ARTICLE_TITLE = "Title";
1814
private const string ARTICLE_SUMMARY = "Summary";
1915
private const string ARTICLE_TEXT = "Text";
2016
private const string ARTICLE_URL = "test";
21-
private const string ARTICLE_ABSOLUTE_URL = "https://test/test";
22-
private const string LANGUAGE_EN = "en-US";
2317

2418
private readonly ArticlePageViewModel referenceArticleViewModel;
2519

2620
public ArticlePageServiceTests()
2721
{
28-
webPageUrlRetrieverMock = new Mock<IWebPageUrlRetriever>();
29-
webPageUrlRetrieverMock.Setup(x => x.Retrieve(It.IsAny<ArticlePage>(), LANGUAGE_EN, It.IsAny<CancellationToken>()))
30-
.ReturnsAsync(new WebPageUrl(ARTICLE_URL, ARTICLE_ABSOLUTE_URL));
22+
articlePageServiceMock = new Mock<ArticlePageService> { CallBase = true };
3123

32-
preferredLanguageRetrieverMock = new Mock<IPreferredLanguageRetriever>();
33-
preferredLanguageRetrieverMock.Setup(x => x.Get()).Returns(LANGUAGE_EN);
34-
35-
articlePageServiceMock = new Mock<ArticlePageService>(
36-
webPageUrlRetrieverMock.Object,
37-
preferredLanguageRetrieverMock.Object);
24+
// Mock the GetArticlePageRelativeUrl method to return our test URL
25+
articlePageServiceMock.Setup(x => x.GetArticlePageRelativeUrl(It.IsAny<ArticlePage>()))
26+
.Returns(ARTICLE_URL);
3827

3928
referenceArticleViewModel = new()
4029
{
@@ -58,41 +47,60 @@ public ArticlePageServiceTests()
5847
};
5948

6049
[Fact]
61-
public async Task GetArticlePageViewModel_IfArticlePageNull_ReturnsEmptyModel()
50+
public void GetArticlePageViewModel_IfArticlePageNull_ReturnsEmptyModel()
6251
{
63-
var articlePageViewModel = await articlePageServiceMock.Object.GetArticlePageViewModel(null);
52+
var articlePageViewModel = articlePageServiceMock.Object.GetArticlePageViewModel(null);
6453
Assert.Equivalent(new ArticlePageViewModel(), articlePageViewModel);
6554
}
6655

6756
[Fact]
68-
public async Task GetArticlePageViewModel_ReturnsModel_WithArticleTitleSet()
57+
public void GetArticlePageViewModel_ReturnsModel_WithArticleTitleSet()
6958
{
7059
var articlePage = BuildSampleArticlePage();
71-
var articlePageViewModel = await articlePageServiceMock.Object.GetArticlePageViewModel(articlePage);
60+
var articlePageViewModel = articlePageServiceMock.Object.GetArticlePageViewModel(articlePage);
7261
Assert.Equal(referenceArticleViewModel.Title, articlePageViewModel.Title);
7362
}
7463

7564
[Fact]
76-
public async Task GetArticlePageViewModel_ReturnsModel_WithArticleSummarySet()
65+
public void GetArticlePageViewModel_ReturnsModel_WithArticleSummarySet()
7766
{
7867
var articlePage = BuildSampleArticlePage();
79-
var articlePageViewModel = await articlePageServiceMock.Object.GetArticlePageViewModel(articlePage);
68+
var articlePageViewModel = articlePageServiceMock.Object.GetArticlePageViewModel(articlePage);
8069
Assert.Equal(referenceArticleViewModel.SummaryHtml.Value, articlePageViewModel.SummaryHtml.Value);
8170
}
8271

8372
[Fact]
84-
public async Task GetArticlePageViewModel_ReturnsModel_WithArticleTextSet()
73+
public void GetArticlePageViewModel_ReturnsModel_WithArticleTextSet()
8574
{
8675
var articlePage = BuildSampleArticlePage();
87-
var articlePageViewModel = await articlePageServiceMock.Object.GetArticlePageViewModel(articlePage);
76+
var articlePageViewModel = articlePageServiceMock.Object.GetArticlePageViewModel(articlePage);
8877
Assert.Equal(referenceArticleViewModel.TextHtml.Value, articlePageViewModel.TextHtml.Value);
8978
}
9079

9180
[Fact]
92-
public async Task GetArticlePageViewModel_ReturnsModel_WithArticleUrlSet()
81+
public void GetArticlePageViewModel_ReturnsModel_WithArticleUrlSet()
9382
{
9483
var articlePage = BuildSampleArticlePage();
95-
var articlePageViewModel = await articlePageServiceMock.Object.GetArticlePageViewModel(articlePage);
84+
var articlePageViewModel = articlePageServiceMock.Object.GetArticlePageViewModel(articlePage);
9685
Assert.Equal(referenceArticleViewModel.Url, articlePageViewModel.Url);
9786
}
87+
88+
[Fact]
89+
public void GetArticlePageRelativeUrl_IsCalledCorrectly()
90+
{
91+
var articlePage = BuildSampleArticlePage();
92+
articlePageServiceMock.Object.GetArticlePageViewModel(articlePage);
93+
94+
// Verify that GetArticlePageRelativeUrl was called with the correct article page
95+
articlePageServiceMock.Verify(x => x.GetArticlePageRelativeUrl(articlePage), Times.Once);
96+
}
97+
98+
[Fact]
99+
public void GetArticlePageRelativeUrl_IsNotCalledWhenArticlePageIsNull()
100+
{
101+
articlePageServiceMock.Object.GetArticlePageViewModel(null);
102+
103+
// Verify that GetArticlePageRelativeUrl was not called when article page is null
104+
articlePageServiceMock.Verify(x => x.GetArticlePageRelativeUrl(It.IsAny<ArticlePage>()), Times.Never);
105+
}
98106
}

src/TrainingGuides.Web/App_Data/CIRepository/TrainingGuidesPages/cms.contentitemcommondata/loremx-xts0c4n0@571339e24d/66c10208-4161-48c6-8cd7-6359f27dcd89_en@aa7c53eced.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,18 @@
1313
<ContentItemCommonDataFirstPublishedWhen>2024-02-07 03:58:43Z</ContentItemCommonDataFirstPublishedWhen>
1414
<ContentItemCommonDataGUID>66c10208-4161-48c6-8cd7-6359f27dcd89</ContentItemCommonDataGUID>
1515
<ContentItemCommonDataIsLatest>True</ContentItemCommonDataIsLatest>
16-
<ContentItemCommonDataLastPublishedWhen>2024-03-21 19:47:43Z</ContentItemCommonDataLastPublishedWhen>
16+
<ContentItemCommonDataLastPublishedWhen>2025-07-22 18:11:44Z</ContentItemCommonDataLastPublishedWhen>
1717
<ContentItemCommonDataVersionStatus>2</ContentItemCommonDataVersionStatus>
1818
<ContentItemCommonDataVisualBuilderTemplateConfiguration>
1919
<![CDATA[{"identifier":"TrainingGuides.EmptyPagePageTemplate","properties":null,"fieldIdentifiers":{}}]]>
2020
</ContentItemCommonDataVisualBuilderTemplateConfiguration>
2121
<ContentItemCommonDataVisualBuilderWidgets>
22-
<![CDATA[{"editableAreas":[{"identifier":"areaMain","sections":[{"identifier":"b3bc4030-e22f-4214-90ea-7ea9df9c0e16","type":"TrainingGuides.GeneralSection","properties":{"sectionAnchor":null,"colorScheme":null,"cornerStyle":null,"columnLayout":null},"zones":[{"identifier":"51326fd5-008e-4f23-94ec-fa2df432132f","name":"zoneMain","widgets":[{"identifier":"9d777351-6ecf-4358-a4fc-e1690fdd7697","type":"TrainingGuides.HeroBanner","variants":[{"identifier":"65a8c2bf-bea1-4396-80d2-44c2a96a35d1","properties":{"mode":"currentProductPage","productPageAnchor":null,"productPage":null,"selectedProductPageAnchor":null,"hero":null,"cta":null,"displayCTA":true,"openInNewTab":false,"changeDesign":false,"showBenefits":false,"showImage":true,"width":"circle","textColor":"Dark"},"fieldIdentifiers":{"mode":"6521ec69-e2b7-4bf1-9da8-ad55987a44e1","productPageAnchor":"88c04d29-28fd-426c-ad2f-4ff714433757","productPage":"bdf7ab84-feee-477f-a426-8145663f077f","selectedProductPageAnchor":"cdb5a34e-2ce4-425d-8ae9-198e6374d3f4","hero":"4eef160b-fe13-4a0d-a7e4-78cbbaaf7171","cta":"f653edf6-3131-4089-898f-ef6cd333998c","displayCTA":"ce067e70-fa2a-410a-a0e1-e614758f6b00","openInNewTab":"cba0605d-3648-456b-aed8-5ffc47fab817","changeDesign":"7d1d01c5-c1a7-4bca-8ce3-6924530a78bc","showBenefits":"87180dc6-30d9-4dab-a742-e2093ba64c8d","showImage":"83d038f0-20e5-4601-98d9-04898ae65820","width":"665e9b67-83a6-4dca-ac01-b2a3806767df","textColor":"29dccc5d-94d3-4372-8073-474eef894bb9"}}]},{"identifier":"76495de3-74d2-41a7-9c7e-0a3c9b4b5ad5","type":"TrainingGuides.ProductWidget","variants":[{"identifier":"2e843c6a-e02f-48d6-8c54-2afd0b783dc0","properties":{"mode":"currentProductPage","pageAnchor":"#ProductA","selectedProductPage":[],"showProductImage":true,"showProductBenefits":true,"showProductFeatures":true,"callToAction":"","openInNewTab":false,"showAdvanced":true,"colorScheme":"Light3","cornerStyle":"VeryRound","dropShadow":true,"imagePosition":"Left","textAlignment":"Right","callToActionStyle":"Medium"},"fieldIdentifiers":{"mode":"f3bbee4a-df84-438e-9726-3a63351208f2","pageAnchor":"9aec5774-3679-4afe-9b57-01eb560f647f","selectedProductPage":"17804335-0e80-4d41-90a9-7872d1c46a14","showProductImage":"45b61a16-7e41-4f66-b330-29a44229d17d","showProductBenefits":"baf09c3f-1e89-4c83-a543-3c2eed36eda6","showProductFeatures":"e2454b28-1e03-4769-a48c-7247a19cfde4","callToAction":"4ead23f2-476e-48a4-bc40-4885217b5ab7","openInNewTab":"eb2dbf79-3c64-4fc7-b548-27ab30de31dc","showAdvanced":"98a8816e-3f67-4c0e-8b07-d7b8e41f39cb","colorScheme":"e3ad34ea-1e79-4569-8189-81d483344e84","cornerStyle":"0c97e2d1-1d69-4a1b-ba9a-fe5d3064b2be","dropShadow":"a611993e-50b9-4d52-aaa7-b9840c21387a","imagePosition":"331aa299-b74b-4bc1-a8e3-d3c3541a00f6","textAlignment":"d4a714ab-a220-454d-8bd6-4a813cebc4d3","callToActionStyle":"50b31e5f-6547-42ed-b4d1-eb0c9a6238b8"}}]},{"identifier":"1f4a9cf0-95d1-4c95-8749-e8d4b8d1c717","type":"Kentico.Widget.RichText","variants":[{"identifier":"b4a43915-5347-49f4-a9ae-ff40b8e60e3d","properties":{"content":"<p>Additional information about the product</p>"},"fieldIdentifiers":{"content":"34b64127-bfa9-402d-8964-f666fa66e40f"}}]},{"identifier":"88475248-17e6-4664-b9e0-b37d54a3a7e6","type":"TrainingGuides.PageLikeWidget","variants":[{"identifier":"c30d1d55-ab36-414e-a6e5-ed538e3e7fd4","properties":null,"fieldIdentifiers":{}}]}]}],"fieldIdentifiers":{"sectionAnchor":"c098f783-8742-4eaa-ab7a-cf2bc3fdbfb2","colorScheme":"7adeee13-ee98-458c-bb90-2e58ba0ef562","cornerStyle":"f239652d-7c39-4462-87d1-59f115c596b5","columnLayout":"505ff4aa-98cb-4dae-8a91-c70f14955042"}}]}]}]]>
22+
<![CDATA[{"editableAreas":[{"identifier":"areaMain","sections":[{"identifier":"755378b4-a815-4df5-ae9c-393f681f72f9","type":"TrainingGuides.SingleColumnSection","properties":{"sectionAnchor":""},"zones":[{"identifier":"8c2aac6f-fb17-4b28-928b-37ccd227f592","widgets":[]}],"fieldIdentifiers":{"sectionAnchor":"d196f39e-bb30-43db-9f79-f3b022ddab11"}}]}]}]]>
2323
</ContentItemCommonDataVisualBuilderWidgets>
2424
<ContentItemReferences>
2525
<cms.contentitemreference>
2626
<ContentItemReferenceGroupGUID>b315e712-05da-445d-980c-87578e46cd4d</ContentItemReferenceGroupGUID>
27-
<ContentItemReferenceGUID>4ae4c12c-6ed8-45d0-a208-4496f995e1e0</ContentItemReferenceGUID>
27+
<ContentItemReferenceGUID>b3a40c55-a3a9-4022-a4c7-aff781abc4e3</ContentItemReferenceGUID>
2828
<ContentItemReferenceSourceCommonDataID>
2929
<GUID>66c10208-4161-48c6-8cd7-6359f27dcd89</GUID>
3030
<ObjectType>cms.contentitemcommondata</ObjectType>

src/TrainingGuides.Web/App_Data/CIRepository/TrainingGuidesPages/cms.contentitemcommondata/news-bgt05j82@51846c04e6/81c6968d-ccf5-4666-9502-80083879519a_en@1757274891.xml

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,18 @@
1212
</ContentItemCommonDataContentLanguageID>
1313
<ContentItemCommonDataGUID>81c6968d-ccf5-4666-9502-80083879519a</ContentItemCommonDataGUID>
1414
<ContentItemCommonDataIsLatest>True</ContentItemCommonDataIsLatest>
15-
<ContentItemCommonDataLastPublishedWhen>2024-12-12 14:04:36Z</ContentItemCommonDataLastPublishedWhen>
15+
<ContentItemCommonDataLastPublishedWhen>2025-07-22 20:07:15Z</ContentItemCommonDataLastPublishedWhen>
1616
<ContentItemCommonDataVersionStatus>2</ContentItemCommonDataVersionStatus>
1717
<ContentItemCommonDataVisualBuilderTemplateConfiguration>
1818
<![CDATA[{"identifier":"TrainingGuides.ArticlePagePageTemplate","properties":null,"fieldIdentifiers":{}}]]>
1919
</ContentItemCommonDataVisualBuilderTemplateConfiguration>
2020
<ContentItemCommonDataVisualBuilderWidgets>
21-
<![CDATA[{"editableAreas":[{"identifier":"areaMain","sections":[{"identifier":"60e812c7-2a99-4c66-9af3-3fc45ee5c8f2","type":"TrainingGuides.SingleColumnSection","properties":{"sectionAnchor":""},"zones":[{"identifier":"597fd7dc-9919-47e8-9e74-1cdffca89c86","widgets":[{"identifier":"1c8de4e6-af87-4bb8-8bbb-8e989bbf0911","type":"TrainingGuides.ArticleListWidget","variants":[{"identifier":"a16dd22e-8321-4dce-8d8b-3697ad840163","properties":{"contentTreeSection":[{"webPageGuid":"77c7aa1f-e0e3-4b74-a66f-8c0c87523c15"}],"topN":10,"ctaText":"","orderBy":"NewestFirst"},"fieldIdentifiers":{"contentTreeSection":"99fb66c4-f110-4adf-a867-677370f76dcf","topN":"8180ea7c-b8d9-43c2-9efd-29d28096a898","ctaText":"0ae9976f-781f-44f6-9ed9-40d3bb4047aa","orderBy":"0ab9d94b-201b-40f8-bb36-cb3caf34a931"}}]}]}],"fieldIdentifiers":{"sectionAnchor":"23114663-fa9e-4364-a68d-cb799b61d521"}}]}]}]]>
21+
<![CDATA[{"editableAreas":[{"identifier":"areaMain","sections":[{"identifier":"60e812c7-2a99-4c66-9af3-3fc45ee5c8f2","type":"TrainingGuides.SingleColumnSection","properties":{"sectionAnchor":""},"zones":[{"identifier":"597fd7dc-9919-47e8-9e74-1cdffca89c86","widgets":[{"identifier":"1c8de4e6-af87-4bb8-8bbb-8e989bbf0911","type":"TrainingGuides.ArticleListWidget","variants":[{"identifier":"a16dd22e-8321-4dce-8d8b-3697ad840163","properties":{"contentTreeSection":[{"identifier":"ee6e8983-b6e7-4d00-98e5-25576586763d"}],"topN":10,"ctaText":"","orderBy":"NewestFirst"},"fieldIdentifiers":{"contentTreeSection":"99fb66c4-f110-4adf-a867-677370f76dcf","topN":"8180ea7c-b8d9-43c2-9efd-29d28096a898","ctaText":"0ae9976f-781f-44f6-9ed9-40d3bb4047aa","orderBy":"0ab9d94b-201b-40f8-bb36-cb3caf34a931"}}]}]}],"fieldIdentifiers":{"sectionAnchor":"23114663-fa9e-4364-a68d-cb799b61d521"}}]}]}]]>
2222
</ContentItemCommonDataVisualBuilderWidgets>
2323
<ContentItemReferences>
2424
<cms.contentitemreference>
2525
<ContentItemReferenceGroupGUID>e121ff3d-c221-4f60-9acb-0063ed2739f1</ContentItemReferenceGroupGUID>
26-
<ContentItemReferenceGUID>dc263dd9-9d91-4b91-9b29-537be341431d</ContentItemReferenceGUID>
26+
<ContentItemReferenceGUID>c2c5f704-2181-4701-9a8a-b905b19cd26d</ContentItemReferenceGUID>
2727
<ContentItemReferenceSourceCommonDataID>
2828
<GUID>81c6968d-ccf5-4666-9502-80083879519a</GUID>
2929
<ObjectType>cms.contentitemcommondata</ObjectType>
@@ -34,5 +34,18 @@
3434
<ObjectType>cms.contentitem</ObjectType>
3535
</ContentItemReferenceTargetItemID>
3636
</cms.contentitemreference>
37+
<cms.contentitemreference>
38+
<ContentItemReferenceGroupGUID>99fb66c4-f110-4adf-a867-677370f76dcf</ContentItemReferenceGroupGUID>
39+
<ContentItemReferenceGUID>9ec64dd4-04ed-4049-8ccc-78749ace7b69</ContentItemReferenceGUID>
40+
<ContentItemReferenceSourceCommonDataID>
41+
<GUID>81c6968d-ccf5-4666-9502-80083879519a</GUID>
42+
<ObjectType>cms.contentitemcommondata</ObjectType>
43+
</ContentItemReferenceSourceCommonDataID>
44+
<ContentItemReferenceTargetItemID>
45+
<CodeName>News-bgt05j82</CodeName>
46+
<GUID>ee6e8983-b6e7-4d00-98e5-25576586763d</GUID>
47+
<ObjectType>cms.contentitem</ObjectType>
48+
</ContentItemReferenceTargetItemID>
49+
</cms.contentitemreference>
3750
</ContentItemReferences>
3851
</cms.contentitemcommondata>
Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using Kentico.Content.Web.Mvc;
2-
using Kentico.Content.Web.Mvc.Routing;
1+
using Kentico.Content.Web.Mvc.Routing;
32
using Kentico.PageBuilder.Web.Mvc.PageTemplates;
43
using Microsoft.AspNetCore.Mvc;
54
using TrainingGuides;
@@ -11,31 +10,25 @@
1110
controllerType: typeof(TrainingGuides.Web.Features.Articles.ArticlePageController))]
1211

1312
namespace TrainingGuides.Web.Features.Articles;
13+
1414
public class ArticlePageController : Controller
1515
{
16-
17-
private readonly IWebPageDataContextRetriever webPageDataContextRetriever;
18-
private readonly IContentItemRetrieverService<ArticlePage> articlePageRetrieverService;
16+
private readonly IContentItemRetrieverService contentItemRetrieverService;
1917
private readonly IArticlePageService articlePageService;
2018

21-
public ArticlePageController(IWebPageDataContextRetriever webPageDataContextRetriever,
22-
IContentItemRetrieverService<ArticlePage> articlePageRetrieverService,
19+
public ArticlePageController(
20+
IContentItemRetrieverService contentItemRetrieverService,
2321
IArticlePageService articlePageService)
2422
{
25-
this.webPageDataContextRetriever = webPageDataContextRetriever;
26-
this.articlePageRetrieverService = articlePageRetrieverService;
23+
this.contentItemRetrieverService = contentItemRetrieverService;
2724
this.articlePageService = articlePageService;
2825
}
2926

3027
public async Task<IActionResult> Index()
3128
{
32-
var context = webPageDataContextRetriever.Retrieve();
33-
var articlePage = await articlePageRetrieverService.RetrieveWebPageById(
34-
context.WebPage.WebPageItemID,
35-
ArticlePage.CONTENT_TYPE_NAME,
36-
2);
29+
var articlePage = await contentItemRetrieverService.RetrieveCurrentPage<ArticlePage>(2);
3730

38-
var model = await articlePageService.GetArticlePageViewModel(articlePage);
31+
var model = articlePageService.GetArticlePageViewModel(articlePage);
3932
return new TemplateResult(model);
4033
}
4134
}
Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,19 @@
1-
using Kentico.Content.Web.Mvc.Routing;
21
using Microsoft.AspNetCore.Html;
32
using TrainingGuides.Web.Features.Shared.Models;
43

54
namespace TrainingGuides.Web.Features.Articles.Services;
65

76
public class ArticlePageService : IArticlePageService
87
{
9-
private readonly IWebPageUrlRetriever webPageUrlRetriever;
10-
private readonly IPreferredLanguageRetriever preferredLanguageRetriever;
11-
public ArticlePageService(IWebPageUrlRetriever webPageUrlRetriever,
12-
IPreferredLanguageRetriever preferredLanguageRetriever)
13-
{
14-
this.webPageUrlRetriever = webPageUrlRetriever;
15-
this.preferredLanguageRetriever = preferredLanguageRetriever;
16-
}
8+
public ArticlePageService()
9+
{ }
1710

1811
/// <summary>
1912
/// Creates a new instance of <see cref="ArticlePageViewModel"/>, setting the properties using ArticlePage given as a parameter.
2013
/// </summary>
2114
/// <param name="articlePage">Corresponding Article page object.</param>
2215
/// <returns>New instance of ArticlePageViewModel.</returns>
23-
public async Task<ArticlePageViewModel> GetArticlePageViewModel(ArticlePage? articlePage)
16+
public ArticlePageViewModel GetArticlePageViewModel(ArticlePage? articlePage)
2417
{
2518
if (articlePage == null)
2619
{
@@ -30,8 +23,7 @@ public async Task<ArticlePageViewModel> GetArticlePageViewModel(ArticlePage? art
3023
var article = articlePage.ArticlePageContent.FirstOrDefault();
3124
var articleTeaserImage = article?.ArticleTeaser.FirstOrDefault();
3225

33-
string language = preferredLanguageRetriever.Get();
34-
string articleUrl = (await webPageUrlRetriever.Retrieve(articlePage, language)).RelativePath;
26+
string articleUrl = GetArticlePageRelativeUrl(articlePage);
3527

3628
return new ArticlePageViewModel
3729
{
@@ -43,4 +35,7 @@ public async Task<ArticlePageViewModel> GetArticlePageViewModel(ArticlePage? art
4335
Url = articleUrl
4436
};
4537
}
38+
39+
public virtual string GetArticlePageRelativeUrl(ArticlePage articlePage) =>
40+
articlePage?.GetUrl().RelativePath ?? string.Empty;
4641
}

src/TrainingGuides.Web/Features/Articles/Services/IArticlePageService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ namespace TrainingGuides.Web.Features.Articles.Services;
22

33
public interface IArticlePageService
44
{
5-
public Task<ArticlePageViewModel> GetArticlePageViewModel(ArticlePage? articlePage);
5+
ArticlePageViewModel GetArticlePageViewModel(ArticlePage? articlePage);
66
}

src/TrainingGuides.Web/Features/Articles/Widgets/ArticleList/ArticleListWidgetProperties.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public class ArticleListWidgetProperties : IWidgetProperties
1818
AllowContentItemCreation = false,
1919
MaximumItems = 1,
2020
Order = 10)]
21-
public IEnumerable<ContentItemReference> ContentTreeSection { get; set; } = Enumerable.Empty<ContentItemReference>();
21+
public IEnumerable<ContentItemReference> ContentTreeSection { get; set; } = [];
2222

2323
[NumberInputComponent(
2424
Label = "Number of articles to display",

0 commit comments

Comments
 (0)