Skip to content

Commit

Permalink
#24829 include in 23.01.6
Browse files Browse the repository at this point in the history
  • Loading branch information
erickgonzalez committed Aug 30, 2023
1 parent cbc1511 commit 2bce672
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,29 +9,28 @@

import com.dotcms.IntegrationTestBase;
import com.dotcms.api.web.HttpServletRequestThreadLocal;
import com.dotcms.datagen.ContentletDataGen;
import com.dotcms.datagen.FileAssetDataGen;
import com.dotcms.datagen.FolderDataGen;
import com.dotcms.datagen.HTMLPageDataGen;
import com.dotcms.datagen.SiteDataGen;
import com.dotcms.datagen.TemplateDataGen;
import com.dotcms.datagen.TestDataUtils;
import com.dotcms.datagen.*;
import com.dotcms.util.IntegrationTestInitService;
import com.dotmarketing.beans.Host;
import com.dotmarketing.beans.Identifier;
import com.dotmarketing.business.APILocator;
import com.dotmarketing.business.CacheLocator;
import com.dotmarketing.business.IdentifierAPI;
import com.dotmarketing.business.VersionableAPI;
import com.dotmarketing.exception.DotDataException;
import com.dotmarketing.exception.DotSecurityException;
import com.dotmarketing.portlets.contentlet.business.ContentletAPI;
import com.dotmarketing.portlets.contentlet.model.Contentlet;
import com.dotmarketing.portlets.contentlet.model.IndexPolicy;
import com.dotmarketing.portlets.fileassets.business.FileAsset;
import com.dotmarketing.portlets.fileassets.business.FileAssetAPI;
import com.dotmarketing.portlets.fileassets.business.IFileAsset;
import com.dotmarketing.portlets.folders.business.FolderAPI;
import com.dotmarketing.portlets.folders.model.Folder;
import com.dotmarketing.portlets.htmlpageasset.model.HTMLPageAsset;
import com.dotmarketing.portlets.htmlpageasset.model.IHTMLPage;
import com.dotmarketing.portlets.languagesmanager.model.Language;
import com.dotmarketing.portlets.links.model.Link;
import com.dotmarketing.portlets.templates.model.Template;
import com.dotmarketing.util.Config;
import com.dotmarketing.util.PageMode;
Expand Down Expand Up @@ -70,6 +69,11 @@ public class NavToolTest extends IntegrationTestBase{
private static User user;
private static Host site;
private static Language spanishLanguage;
private static IdentifierAPI identifierAPI;
private static VersionableAPI versionableAPI;
private static FolderAPI folderAPI;

private static ContentletAPI contentletAPI;

@BeforeClass
public static void prepare() throws Exception {
Expand All @@ -79,6 +83,10 @@ public static void prepare() throws Exception {
user = APILocator.getUserAPI().getSystemUser();
site = new SiteDataGen().nextPersisted();
spanishLanguage = TestDataUtils.getSpanishLanguage();
identifierAPI = APILocator.getIdentifierAPI();
versionableAPI = APILocator.getVersionableAPI();
folderAPI = APILocator.getFolderAPI();
contentletAPI = APILocator.getContentletAPI();
}

@AfterClass
Expand Down Expand Up @@ -626,4 +634,72 @@ public void test_getNav_multilingualPage_shouldOnlyReturnOne() throws Exception
assertEquals(1,navResult.getChildren().size());
assertEquals("SPA Version", navResult.getChildren().get(0).getTitle());
}

/**
* Method to test: NavTool.getNav
* Given scenario: get navigation of a folder, where it contains published and unpublished links
* Expected result: getting the navigation must return only the published links
* @throws Exception exception
*/
@Test
public void test_getNav_GivenLinkItems_ShouldOnlyShowLiveLinksLiveMode() throws Exception {
final Host host = new SiteDataGen().nextPersisted();
final NavTool navTool = new NavTool();
final User mockedUSer = mock(User.class);
final HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getParameter(com.dotmarketing.util.WebKeys.PAGE_MODE_PARAMETER)).thenReturn(PageMode.LIVE.toString());
when(request.getAttribute(com.liferay.portal.util.WebKeys.USER)).thenReturn(APILocator.systemUser());
HttpServletRequestThreadLocal.INSTANCE.setRequest(request);

final ViewContext viewContext = mock(ViewContext.class);
when(viewContext.getRequest()).thenReturn(request);
navTool.init(viewContext);
//Create Folder
folder = new FolderDataGen().site(site).title("test").showOnMenu(true).nextPersisted();

//Add create two links with different states
final Link publishLink = new LinkDataGen().hostId(host.getIdentifier()).title("testPublish").parent(folder).target("https://google.com").linkType("INTERNAL").showOnMenu(true).nextPersisted();
APILocator.getVersionableAPI().setLive(publishLink);

final Link unpublishLink = new LinkDataGen().hostId(host.getIdentifier()).title("testUnpublish").parent(folder).target("https://google.com").linkType("INTERNAL").showOnMenu(true).nextPersisted();

final NavResult navResult1 = navTool.getNav(site, folder.getPath());
assertNotNull("There must be a valid NavResult object", navResult1);
assertEquals("Only only one item should appear in the nav result. ",1,navResult1.getChildren().size());
}

/**
* Method to test: NavTool.getNav
* Given scenario: get navigation of a folder, where it contains published and unpublished links
* Expected result: getting the navigation must return published and unpublished links
* @throws Exception exception
*/
@Test
public void test_getNav_GivenLinkItems_ShouldOnlyShowLinksEditMode() throws Exception {

final Host host = new SiteDataGen().nextPersisted();
final NavTool navTool = new NavTool();
final User mockedUSer = mock(User.class);
final HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getParameter(com.dotmarketing.util.WebKeys.PAGE_MODE_PARAMETER)).thenReturn(PageMode.EDIT_MODE.toString());
when(request.getAttribute(com.liferay.portal.util.WebKeys.USER)).thenReturn(APILocator.systemUser());
HttpServletRequestThreadLocal.INSTANCE.setRequest(request);

final ViewContext viewContext = mock(ViewContext.class);
when(viewContext.getRequest()).thenReturn(request);
navTool.init(viewContext);

//Create Folder
folder = new FolderDataGen().site(site).title("test").showOnMenu(true).nextPersisted();

//Add create two links with different states
final Link publishLink = new LinkDataGen().hostId(host.getIdentifier()).title("testPublish").parent(folder).target("https://google.com").linkType("INTERNAL").showOnMenu(true).nextPersisted();
APILocator.getVersionableAPI().setLive(publishLink);

Link unpublishLink = new LinkDataGen().hostId(host.getIdentifier()).title("testUnpublish").parent(folder).target("https://google.com").linkType("INTERNAL").showOnMenu(true).nextPersisted();

final NavResult navResult1 = navTool.getNav(site, folder.getPath());
assertNotNull("There must be a valid NavResult object", navResult1);
assertEquals("Both items should appear in the nav result. ",2,navResult1.getChildren().size());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,22 @@ public void init(Object initData) {
}
}

protected void setItemLinkValues(NavResult nav,Link itemLink, List<NavResult> children){
if (itemLink.getLinkType().equals(LinkType.CODE.toString()) && LinkType.CODE.toString() != null) {
nav.setCodeLink(itemLink.getLinkCode());
} else {
nav.setHref(itemLink.getWorkingURL());
}

nav.setTitle(itemLink.getTitle());
nav.setOrder(itemLink.getSortOrder());
nav.setType("link");
nav.setTarget(itemLink.getTarget());
nav.setPermissionId(itemLink.getPermissionId());
nav.setShowOnMenu(itemLink.isShowOnMenu());
children.add(nav);
}

protected NavResult getNav(Host host, String path) throws DotDataException, DotSecurityException {
return getNav(host, path, this.currentLanguage, this.systemUser);
}
Expand Down Expand Up @@ -162,19 +178,13 @@ protected NavResultHydrated getNav(final Host host, String path, final long lang
Link itemLink = (Link) item;
NavResult nav = new NavResult(folder.getInode(), host.getIdentifier(), languageId);

if (itemLink.getLinkType()
.equals(LinkType.CODE.toString()) && LinkType.CODE.toString() != null) {
nav.setCodeLink(itemLink.getLinkCode());
if (!pageMode.showLive) {
this.setItemLinkValues(nav, itemLink, children);
} else {
nav.setHref(itemLink.getWorkingURL());
if (itemLink.isLive() && itemLink.isWorking()){
this.setItemLinkValues(nav, itemLink, children);
}
}
nav.setTitle(itemLink.getTitle());
nav.setOrder(itemLink.getSortOrder());
nav.setType("link");
nav.setTarget(itemLink.getTarget());
nav.setPermissionId(itemLink.getPermissionId());
nav.setShowOnMenu(itemLink.isShowOnMenu());
children.add(nav);
} else if ((Contentlet.class.cast(item)).isHTMLPage()) {
final IHTMLPage itemPage = APILocator.getHTMLPageAssetAPI().fromContentlet(Contentlet.class.cast(item));

Expand Down
1 change: 1 addition & 0 deletions hotfix_tracking.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,3 +107,4 @@ This maintenance release includes the following code fixes:
86. https://github.com/dotCMS/core/issues/22533 : Relay State SAML improvement
87. https://github.com/dotCMS/core/issues/25896 : Creating a contentlet in a 2nd language removes related content #25896
88. https://github.com/dotCMS/core/issues/23733 : Stream Starter Zip Generation #23733
89. https://github.com/dotCMS/core/issues/24829 : NavTool method getNav must return only published links #24829

0 comments on commit 2bce672

Please sign in to comment.