Skip to content

Commit

Permalink
#22385 fix, new method and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreyDotcms committed Jan 26, 2024
1 parent 7790c94 commit 6ede56a
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 5 deletions.
Expand Up @@ -1045,7 +1045,7 @@ private synchronized <T> TryToAddResult tryToAdd(final PusheableAsset pusheableA
return new TryToAddResult(TryToAddResult.Result.EXCLUDE, ManifestReason.EXCLUDE_SYSTEM_OBJECT);
}

if (isExcludeByFilter(pusheableAsset)) {
if (!isTemplateLayout(asset) && isExcludeByFilter(pusheableAsset)) {
config.exclude(asset, pusheableAsset, ManifestReason.EXCLUDE_BY_FILTER.getMessage());
return new TryToAddResult(TryToAddResult.Result.EXCLUDE, ManifestReason.EXCLUDE_BY_FILTER);
}
Expand Down Expand Up @@ -1073,6 +1073,17 @@ private synchronized <T> TryToAddResult tryToAdd(final PusheableAsset pusheableA
}
}

/**
* Determines if the provided asset is a template layout.
* We can identify it by the title, it always contains the acronym Template.ANONYMOUS_PREFIX
* @param asset The asset to check
* @return If the Asset is a {@link Template} object and the title
* contains {@code Template.ANONYMOUS_PREFIX}, return {@code true}.
*/
private boolean isTemplateLayout(final Object asset){
return asset instanceof Template && ((Template) asset).getTitle().contains(Template.ANONYMOUS_PREFIX);
}

private <T> boolean isExcludeByFilter(final PusheableAsset pusheableAsset) {
return !isRelationshipObject(pusheableAsset) && (!publisherFilter.isDependencies() ||
publisherFilter.doesExcludeDependencyClassesContainsType(pusheableAsset.getType()));
Expand Down
Expand Up @@ -461,6 +461,39 @@ public void test_Page_with_FileTemplateAdvanced_as_Dependencies()

}

/**
* <b>Method to test:</b> {@link DependencyManager#setDependencies()} <p>
* <b>Given Scenario:</b> A Page using a Template as a File Advanced<p>
* <b>ExpectedResult:</b> Should include the template files as dependencies
* @throws DotSecurityException
* @throws DotBundleException
* @throws DotDataException
*/
private void createBundle(final PushPublisherConfig config, final Contentlet contentlet, final String bundleFilterKey)
throws DotDataException {
final String bundleName = "testDependencyManagerBundle" + System.currentTimeMillis();
Bundle bundle = new Bundle(bundleName, new Date(), null, user.getUserId());
bundle.setFilterKey(bundleFilterKey);
bundleAPI.saveBundle(bundle);
bundle = bundleAPI.getBundleByName(bundleName);

final PublishQueueElement publishQueueElement = new PublishQueueElement();
publishQueueElement.setId(1);
publishQueueElement.setOperation(Operation.PUBLISH.ordinal());
publishQueueElement.setAsset(contentlet.getInode());
publishQueueElement.setEnteredDate(new Date());
publishQueueElement.setPublishDate(new Date());
publishQueueElement.setBundleId(bundle.getId());
publishQueueElement.setType(PusheableAsset.CONTENTLET.getType());

config.setAssets(Lists.newArrayList(publishQueueElement));
config.setId(bundle.getId());
config.setOperation(Operation.PUBLISH);
config.setDownloading(true);
config.setLuceneQueries(Lists.newArrayList("+identifier:" + contentlet.getIdentifier()));
}


/**
* Creates a bundle with one contentlet
*/
Expand Down Expand Up @@ -524,10 +557,6 @@ private ContentType getContentTypeWithSelfJoinRelationship()
return contentType;
}





private static void createFilter(){
final Map<String,Object> filtersMap =
ImmutableMap.of("dependencies",true,"relationships",true,"forcePush",false);
Expand All @@ -536,4 +565,49 @@ private static void createFilter(){
APILocator.getPublisherAPI().addFilterDescriptor(filterDescriptor);
}

/**
* <b>Method to test:</b> PushPublishigDependencyProcesor.tryToAdd(PusheableAsset, Object, String) <p>
* <b>Given Scenario:</b> Push publish a page with the filter 'Only Selected Items' selected.<p>
* <b>ExpectedResult:</b> The template should not be included in the dependencies.
* @throws DotSecurityException
* @throws DotBundleException
* @throws DotDataException
*/
@Test
public void test_PP_page_should_not_contain_template_in_dependencies_when_filter_set() throws DotDataException, DotBundleException, DotSecurityException {
final PushPublisherConfig config = new PushPublisherConfig();
final Template template = new TemplateDataGen().nextPersisted();
final Host host = new SiteDataGen().nextPersisted();
final HTMLPageAsset htmlPageAsset = new HTMLPageDataGen(host, template).nextPersisted();
//Create a bundle with filter 'Only Selected Items'
createBundle(config, htmlPageAsset, "ShallowPush.yml");
DependencyManager dependencyManager = new DependencyManager(DependencyManagerTest.user, config);
dependencyManager.setDependencies();

assertFalse(dependencyManager.getTemplates().contains(template.getIdentifier()));

Check failure on line 587 in dotcms-integration/src/test/java/com/dotcms/publisher/util/DependencyManagerTest.java

View workflow job for this annotation

GitHub Actions / MVN Test Report IT Tests - JDK 11 - MainSuite 2b

com.dotcms.MainSuite2b ► com.dotcms.publisher.util.DependencyManagerTest ► test_PP_page_should_not_contain_template_in_dependencies_when_filter_set

Failed test found in: dotcms-integration/target/failsafe-reports/TEST-com.dotcms.MainSuite2b.xml Error: java.lang.AssertionError
Raw output
java.lang.AssertionError
	at org.junit.Assert.fail(Assert.java:87)
	at org.junit.Assert.assertTrue(Assert.java:42)
	at org.junit.Assert.assertFalse(Assert.java:65)
	at org.junit.Assert.assertFalse(Assert.java:75)
	at com.dotcms.publisher.util.DependencyManagerTest.test_PP_page_should_not_contain_template_in_dependencies_when_filter_set(DependencyManagerTest.java:587)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:61)
	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
	at com.dotcms.junit.CustomDataProviderRunner.runChild(CustomDataProviderRunner.java:41)
	at com.dotcms.junit.CustomDataProviderRunner.runChild(CustomDataProviderRunner.java:26)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at com.dotcms.junit.MainBaseSuite$DotRunner.run(MainBaseSuite.java:71)
	at org.junit.runners.Suite.runChild(Suite.java:128)
	at org.junit.runners.Suite.runChild(Suite.java:27)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:316)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:240)
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:214)
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:155)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385)
	at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)
	at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495)
}

/**
* <b>Method to test:</b> PushPublishigDependencyProcesor.tryToAdd(PusheableAsset, Object, String) <p>
* <b>Given Scenario:</b> Custom templates be should considered part of the page. <p>
* <b>ExpectedResult:</b> The layout should be included in the dependencies regardless of the selected filter.
* @throws DotSecurityException
* @throws DotBundleException
* @throws DotDataException
*/
@Test
public void test_PP_page_should_contains_layout_in_dependencies() throws DotDataException, DotBundleException, DotSecurityException {
final PushPublisherConfig config = new PushPublisherConfig();
//Layout templates are identified by the prefix 'anonymous_layout_'
final Template template = new TemplateDataGen().title(Template.ANONYMOUS_PREFIX+"shouldBeIncluded").nextPersisted();
final Host host = new SiteDataGen().nextPersisted();
final HTMLPageAsset htmlPageAsset = new HTMLPageDataGen(host, template).nextPersisted();
//Create a bundle with filter 'Only Selected Items'
createBundle(config, htmlPageAsset, "ShallowPush.yml");
DependencyManager dependencyManager = new DependencyManager(DependencyManagerTest.user, config);
dependencyManager.setDependencies();

assertTrue(dependencyManager.getTemplates().contains(template.getIdentifier()));
}

}

0 comments on commit 6ede56a

Please sign in to comment.