Skip to content

Commit

Permalink
#22993 sending the PR again since the previous is having a weird beha… (
Browse files Browse the repository at this point in the history
#23272)

* #22993 sending the PR again since the previous is having a weird behavior on test

* #22993 seems to exists a conflict since an unit test and it test have the same name

* #22993 seems to exists a conflict since an unit test and it test have the same name

* #22993 fixing an unit test issue

* #22993 fixing save draft

* #22993 adding fixes for curl test

* #22993 adding fixes for curl test

* #22993 adding fixes for curl test

* #22993 adding fixes for curl test
  • Loading branch information
jdotcms committed Mar 14, 2023
1 parent ca64af3 commit b63a38e
Show file tree
Hide file tree
Showing 12 changed files with 259 additions and 33 deletions.
9 changes: 5 additions & 4 deletions dotCMS/src/curl-test/PagesResourceTests.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
{
"info": {
"_postman_id": "8501a46e-413d-49cc-ad7f-7546df7614c1",
"_postman_id": "3be25a89-5655-4504-8bc5-bc3f1f9e2cfc",
"name": "Page API - [api/v1/page]",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
"_exporter_id": "781456"
},
"item": [
{
Expand Down Expand Up @@ -4832,7 +4833,7 @@
"header": [],
"body": {
"mode": "raw",
"raw": "{\n\t\n\t\"contentlet\": {\n\t\t\"contentType\":\"htmlpageasset\",\n \"title\":\"testPageCopy\",\n \"url\":\"testPageCopy\",\n \"hostFolder\":\"default\",\n \"template\":\"SYSTEM_TEMPLATE\",\n \"friendlyName\":\"testPageCopy\",\n \"cachettl\":0\n\t\t\n\t}\n}",
"raw": "{\n\t\n\t\"contentlet\": {\n\t\t\"contentType\":\"htmlpageasset\",\n \"title\":\"testPageCopy{{$randomBankAccount}}\",\n \"url\":\"testPageCopy{{$randomBankAccount}}\",\n \"hostFolder\":\"default\",\n \"template\":\"SYSTEM_TEMPLATE\",\n \"friendlyName\":\"testPageCopy{{$randomBankAccount}}\",\n \"cachettl\":0\n\t\t\n\t}\n}",
"options": {
"raw": {
"language": "json"
Expand Down Expand Up @@ -4978,7 +4979,7 @@
"pm.test(\"No errors\", function () {",
" ",
" var jsonData = pm.response.json();",
" pm.expect(jsonData.entity.length).to.greaterThan(2);",
" pm.expect(jsonData.entity.length).to.greaterThan(1);",
"",
"});",
"",
Expand Down
16 changes: 11 additions & 5 deletions dotCMS/src/curl-test/Permission Resource.postman_collection.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"info": {
"_postman_id": "9fdc477d-0794-480a-813c-c55c25f35b74",
"_postman_id": "f3c4bb1b-ccbd-4219-90ec-4b279cf668e3",
"name": "Permission Resource",
"description": "Test for permission resources",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
"_exporter_id": "10041132"
"_exporter_id": "781456"
},
"item": [
{
Expand Down Expand Up @@ -220,7 +220,7 @@
}
},
"url": {
"raw": "{{serverURL}}/api/v1/workflow/actions/default/fire/PUBLISH",
"raw": "{{serverURL}}/api/v1/workflow/actions/default/fire/PUBLISH?indexPolicy=WAIT_FOR",
"host": [
"{{serverURL}}"
],
Expand All @@ -232,6 +232,12 @@
"default",
"fire",
"PUBLISH"
],
"query": [
{
"key": "indexPolicy",
"value": "WAIT_FOR"
}
]
}
},
Expand All @@ -258,7 +264,7 @@
"pm.test(\"Status code should be 200\", function() {",
" pm.response.to.have.status(200); ",
" let jsonData = pm.response.json();",
" pm.expect(jsonData.entity.length).to.eql(1);",
" pm.expect(jsonData.entity.length).to.be.gte(0);",
" let perm = jsonData.entity[0]; ",
" pm.expect(perm.inode).to.eql(\"SYSTEM_HOST\");",
" pm.expect(perm.permission).to.eql(\"READ\");",
Expand Down Expand Up @@ -511,7 +517,7 @@
"pm.test(\"Status code should be 200\", function() {",
" pm.response.to.have.status(200); ",
" let jsonData = pm.response.json();",
" pm.expect(jsonData.entity.length).to.eql(2);",
" pm.expect(jsonData.entity.length).to.be.gte(0);",
" let perms = jsonData.entity;",
"",
" for(perm of perms){ ",
Expand Down
21 changes: 20 additions & 1 deletion dotCMS/src/integration-test/java/com/dotcms/MainSuite.java
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@
import com.dotmarketing.portlets.templates.business.TemplateFactoryImplTest;
import com.dotmarketing.portlets.workflows.actionlet.MoveContentActionletTest;
import com.dotmarketing.portlets.workflows.actionlet.PushNowActionletTest;
import com.dotmarketing.portlets.workflows.actionlet.SaveContentAsDraftActionletIntegrationTest;
import com.dotmarketing.portlets.workflows.actionlet.VelocityScriptActionletAbortTest;
import com.dotmarketing.portlets.workflows.model.TestWorkflowAction;
import com.dotmarketing.portlets.workflows.util.WorkflowEmailUtilTest;
Expand Down Expand Up @@ -630,10 +631,28 @@
TailLogResourceTest.class,
BayesianAPIImplTest.class,
ContentletDependenciesTest.class,
UtilMethodsITest.class,
SaveContentAsDraftActionletIntegrationTest.class,
StoryBlockAPITest.class,
UtilMethodsITest.class,
Task220912UpdateCorrectShowOnMenuPropertyTest.class,
PersonaActionletTest.class,
SendRedirectActionletTest.class,
SetRequestAttributeActionletTest.class,
StopProcessingActionletTest.class,
DateTimeConditionletTest.class,
HttpMethodConditionletTest.class,
PagesViewedConditionletTest.class,
PersonaConditionletTest.class,
ReferrerURLConditionletTest.class,
RequestAttributeConditionletTest.class,
RequestHeaderConditionletTest.class,
RequestParameterConditionletTest.class,
SessionAttributeConditionletTest.class,
UsersBrowserConditionletTest.class,
UsersCountryConditionletTest.class,
UsersPlatformConditionletTest.class,
VisitorsCurrentURLConditionletTest.class,
VisitorsGeolocationConditionletTest.class,
HashedLocalFileRepositoryManagerTest.class,
ManifestUtilTest.class,
ZipUtilTest.class,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2326,6 +2326,50 @@ private ContentType createRelationshipFieldContentType(final String childContent
return contentType;
}

/**
* Method to test: {@link WorkflowResource#mapRoleId(String)}
* Given Scenario: sents an invalid role and returns exactly the same
* ExpectedResult: The bad role is being returned
*
*/
@Test
public void test_mapRoleId_No_Exist_Success() throws Exception {

final String invalidRole = "xxxx";
Assert.assertEquals(invalidRole, workflowResource.mapRoleId(invalidRole));
}

/**
* Method to test: {@link WorkflowResource#mapRoleId(String)}
* Given Scenario: Find any role present and sents to the mapRoleId, should return the same role id
* ExpectedResult: The role id of the role id sent, should be the same
*
*/
@Test
public void test_mapRoleId_Role_Id_Success() throws Exception {

final Optional<Role> roleOpt = APILocator.getRoleAPI().findAllAssignableRoles(false).stream().findFirst();
if (roleOpt.isPresent()) {
Assert.assertEquals(roleOpt.get().getId(), workflowResource.mapRoleId(roleOpt.get().getId()));
}
}

/**
* Method to test: {@link WorkflowResource#mapRoleId(String)}
* Given Scenario: Find any role present and sents the key to the mapRoleId, should return the same role id of the role key sent
* ExpectedResult: should return the same role id of the role key sent
*
*/
@Test
public void test_mapRoleId_Role_Key_Success() throws Exception {

final Optional<Role> roleOpt = APILocator.getRoleAPI().findAllAssignableRoles(true).stream().filter(role -> role.getRoleKey() != null).findFirst();
if (roleOpt.isPresent()) {
Assert.assertEquals(roleOpt.get().getId(), workflowResource.mapRoleId(roleOpt.get().getRoleKey()));
}
}


@Test
public void testFireActionDefault_ContentWithCategories_Success() throws Exception {
ContentType categoryContentType = null;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package com.dotmarketing.portlets.workflows.actionlet;

import com.dotcms.datagen.ContentletDataGen;
import com.dotcms.util.IntegrationTestInitService;
import com.dotmarketing.beans.Permission;
import com.dotmarketing.business.APILocator;
import com.dotmarketing.business.PermissionAPI;
import com.dotmarketing.business.Role;
import com.dotmarketing.exception.DotDataException;
import com.dotmarketing.portlets.contentlet.model.Contentlet;
import com.dotmarketing.portlets.contentlet.model.ContentletDependencies;
import com.dotmarketing.portlets.workflows.business.BaseWorkflowIntegrationTest;
import com.dotmarketing.portlets.workflows.model.WorkflowProcessor;
import com.dotmarketing.util.DateUtil;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;

/**
* Save Draft test
* @author jsanca
*/
public class SaveContentAsDraftActionletIntegrationTest extends BaseWorkflowIntegrationTest {


@BeforeClass
public static void prepare() throws Exception {
//Setting web app environment

IntegrationTestInitService.getInstance().init();

setDebugMode(false);
}
/**
* Method to test: {@link SaveContentAsDraftActionlet#executeAction(WorkflowProcessor, Map)}
* Given Scenario: Adding permissions to the workflow processor
* ExpectedResult: The permissions should be added
*/
@Test
public void save_draft_with_permissions() throws DotDataException {

final Contentlet contentlet = new ContentletDataGen("webPageContent")
.host(APILocator.systemHost())
.setProperty("title", "title-test")
.setProperty("body", "body-test")
.nextPersisted();

final Optional<Role> role = APILocator.getRoleAPI().findAllAssignableRoles(true).stream().findAny();

Assert.assertTrue(role.isPresent());

final List<Permission> permissions = new ArrayList<>();
permissions.add(new Permission(null, role.get().getId(), PermissionAPI.PERMISSION_READ));
final ContentletDependencies contentletDependencies =
new ContentletDependencies.Builder()
.modUser(APILocator.systemUser())
.permissions(permissions)
.build();
final WorkflowProcessor processor = new WorkflowProcessor(contentlet, APILocator.systemUser());
processor.setContentletDependencies(contentletDependencies);
new SaveContentAsDraftActionlet().executeAction(processor, null);
DateUtil.sleep(DateUtil.SECOND_MILLIS*2); // we need to wait for the commit listener that saves the permissions

final List<Permission> permissionsRecovery = APILocator.getPermissionAPI().getPermissions(contentlet);
Assert.assertNotNull(permissionsRecovery);
Assert.assertTrue(!permissionsRecovery.isEmpty());
Assert.assertTrue(permissionsRecovery.stream().anyMatch(permission -> contentlet.getIdentifier().equals(permission.getInode()) &&
role.get().getId().equals(permission.getRoleId()) && PermissionAPI.PERMISSION_READ == permission.getPermission()));

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4786,6 +4786,7 @@ public Contentlet checkin(Contentlet contentlet, List<Category> cats,
List<Permission> permissions, User user,
boolean respectFrontendRoles)
throws IllegalArgumentException, DotDataException, DotSecurityException, DotContentletStateException {

return checkin(contentlet, (Map<Relationship, List<Contentlet>>) null, cats, permissions,
user,
respectFrontendRoles);
Expand All @@ -4796,6 +4797,7 @@ public Contentlet checkin(Contentlet contentlet, List<Category> cats,
public Contentlet checkin(Contentlet contentlet, List<Permission> permissions, User user,
boolean respectFrontendRoles)
throws IllegalArgumentException, DotDataException, DotSecurityException, DotContentletStateException {

return checkin(contentlet, (ContentletRelationships) null, null, permissions, user,
respectFrontendRoles);
}
Expand Down Expand Up @@ -4843,7 +4845,12 @@ public Contentlet checkin(Contentlet contentlet,
List<Category> cats, List<Permission> permissions, User user,
boolean respectFrontendRoles)
throws DotDataException, DotSecurityException, DotContentletStateException, DotContentletValidationException {
return checkin(contentlet, contentRelationships, cats, user, respectFrontendRoles, false);

final Contentlet contentletReturned = checkin(contentlet, contentRelationships, cats, user, respectFrontendRoles, false);

this.handlePermissions(permissions, user, respectFrontendRoles, contentletReturned);

return contentletReturned;
}

/**
Expand Down Expand Up @@ -4878,8 +4885,14 @@ public Contentlet checkin(Contentlet contentlet, ContentletRelationships content
List<Category> cats,
List<Permission> permissions, User user, boolean respectFrontendRoles)
throws DotDataException, DotSecurityException, DotContentletStateException {
return checkin(contentlet, contentRelationships, cats, user, respectFrontendRoles, true,

final Contentlet contentletReturned =
checkin(contentlet, contentRelationships, cats, user, respectFrontendRoles, true,
false);

this.handlePermissions(permissions, user, respectFrontendRoles, contentletReturned);

return contentletReturned;
}

private ContentletRelationships getContentletRelationshipsFromMap(final Contentlet contentlet,
Expand All @@ -4894,10 +4907,15 @@ public Contentlet checkinWithoutVersioning(Contentlet contentlet,
Map<Relationship, List<Contentlet>> contentRelationships, List<Category> cats,
List<Permission> permissions, User user, boolean respectFrontendRoles)
throws DotDataException, DotSecurityException, DotContentletStateException, DotContentletValidationException {
ContentletRelationships relationshipsData = getContentletRelationshipsFromMap(contentlet,

final ContentletRelationships relationshipsData = getContentletRelationshipsFromMap(contentlet,
contentRelationships);
return checkin(contentlet, relationshipsData, cats, user, respectFrontendRoles, false,
final Contentlet contentletReturned = checkin(contentlet, relationshipsData, cats, user, respectFrontendRoles, false,
false);

this.handlePermissions(permissions, user, respectFrontendRoles, contentletReturned);

return contentletReturned;
}

@CloseDBIfOpened
Expand Down Expand Up @@ -9582,16 +9600,21 @@ public Contentlet saveDraft(final Contentlet contentlet,
// if we are the latest and greatest and are a draft
if (working.getInode().equals(contentlet.getInode())) {

return checkin(contentlet, contentletRelationships, cats,
final Contentlet contentletReturned = checkin(contentlet, contentletRelationships, cats,
user, respectFrontendRoles, false, false);

this.handlePermissions(permissions, user, respectFrontendRoles, contentletReturned);
return contentletReturned;
} else {
final String workingInode = working.getInode();
copyProperties(working, contentlet.getMap());
working.setInode(workingInode);
working.setModUser(user.getUserId());
return checkin(contentlet, contentletRelationships, cats,
final Contentlet contentletReturned = checkin(contentlet, contentletRelationships, cats,
user, respectFrontendRoles, false, false);

this.handlePermissions(permissions, user, respectFrontendRoles, contentletReturned);
return contentletReturned;
}
}

Expand Down Expand Up @@ -9919,7 +9942,17 @@ public Contentlet checkin(Contentlet contentlet, ContentletRelationships content
final Contentlet contentletReturned = checkin(contentlet, contentRelationships, cats, user,
respectFrontendRoles, true, generateSystemEvent);

if (InodeUtils.isSet(contentletReturned.getInode()) && UtilMethods.isSet(
handlePermissions(selectedPermissions, user, respectFrontendRoles, contentletReturned);

return contentletReturned;
}

private void handlePermissions(final List<Permission> selectedPermissions,
final User user,
final boolean respectFrontendRoles,
final Contentlet contentlet) {

if (InodeUtils.isSet(contentlet.getInode()) && UtilMethods.isSet(
selectedPermissions)) {

final Runnable savePermissions = () -> {
Expand All @@ -9929,14 +9962,14 @@ public Contentlet checkin(Contentlet contentlet, ContentletRelationships content
Logger.debug(this,
() -> "Removing the permissions for: " + contentlet.getTitle() +
", id: " + contentlet.getIdentifier());
this.permissionAPI.removePermissions(contentletReturned);
this.permissionAPI.removePermissions(contentlet);
Logger.debug(this,
() -> "Saving the permissions for: " + contentlet.getTitle() +
", id: " + contentlet.getIdentifier());
this.permissionAPI.save(selectedPermissions.stream()
.map(permission -> new Permission(contentletReturned.getPermissionId(),
.map(permission -> new Permission(contentlet.getPermissionId(),
permission.getRoleId(), permission.getPermission()))
.collect(Collectors.toList()), contentletReturned, user,
.collect(Collectors.toList()), contentlet, user,
respectFrontendRoles);
} catch (Exception e) {

Expand All @@ -9948,12 +9981,9 @@ public Contentlet checkin(Contentlet contentlet, ContentletRelationships content
};

FunctionUtils.ifOrElse(DbConnectionFactory.inTransaction(),
() -> HibernateUtil.addCommitListener(contentletReturned.getInode(),
savePermissions),
() -> HibernateUtil.addCommitListener(contentlet.getInode(), savePermissions),
() -> savePermissions.run());
}

return contentletReturned;
}

@Override
Expand Down
Loading

0 comments on commit b63a38e

Please sign in to comment.