mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merge branch 'feature/RM-4195_CreateRMSite2' into 'master'
Feature/rm 4195 create rm site2 See merge request !1
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
* agreement is prohibited.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.com;
|
||||
package org.alfresco.com.fileplancomponents;
|
||||
|
||||
/**
|
||||
* File plan component alias enumeration
|
@@ -9,7 +9,7 @@
|
||||
* agreement is prohibited.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.com;
|
||||
package org.alfresco.com.fileplancomponents;
|
||||
|
||||
/**
|
||||
* FIXME: Document me :)
|
@@ -9,7 +9,7 @@
|
||||
* agreement is prohibited.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.com;
|
||||
package org.alfresco.com.fileplancomponents;
|
||||
|
||||
/**
|
||||
* File plan component type enumeration
|
24
src/main/java/org/alfresco/com/site/RMSiteCompliance.java
Normal file
24
src/main/java/org/alfresco/com/site/RMSiteCompliance.java
Normal file
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* License rights for this program may be obtained from Alfresco Software, Ltd.
|
||||
* pursuant to a written agreement and any use of this program without such an
|
||||
* agreement is prohibited.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.com.site;
|
||||
|
||||
/**
|
||||
* RM Site compliance
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @since 1.0
|
||||
*/
|
||||
public enum RMSiteCompliance
|
||||
{
|
||||
STANDARD,
|
||||
DOD5015
|
||||
}
|
37
src/main/java/org/alfresco/com/site/RMSiteFields.java
Normal file
37
src/main/java/org/alfresco/com/site/RMSiteFields.java
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* License rights for this program may be obtained from Alfresco Software, Ltd.
|
||||
* pursuant to a written agreement and any use of this program without such an
|
||||
* agreement is prohibited.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.com.site;
|
||||
|
||||
/**
|
||||
*RM Site properties from the RM Model Schema
|
||||
*"entry": {
|
||||
* "id": "string",
|
||||
* "guid": "string",
|
||||
* "title": "string",
|
||||
* "description": "string",
|
||||
* "visibility": "{@link org.springframework.social.alfresco.api.entities.Site.Visibility}",
|
||||
* "compliance": "{@link RMSiteCompliance}",
|
||||
* "role": "{@link org.alfresco.utility.constants.UserRole}"
|
||||
*}
|
||||
* @author Tuna Aksoy
|
||||
* @author Rodica Sutu
|
||||
* @since 1.0
|
||||
*/
|
||||
public class RMSiteFields
|
||||
{
|
||||
public static final String ID = "id";
|
||||
public static final String COMPLIANCE = "compliance";
|
||||
public static final String TITLE = "title";
|
||||
public static final String DESCRIPTION = "description";
|
||||
public static final String VISIBILITY ="visibility";
|
||||
public static final String ROLE = "role";
|
||||
}
|
@@ -9,9 +9,9 @@
|
||||
* agreement is prohibited.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.model;
|
||||
package org.alfresco.rest.model.fileplancomponents;
|
||||
|
||||
import static org.alfresco.com.FilePlanComponentFields.PROPERTIES;
|
||||
import static org.alfresco.com.fileplancomponents.FilePlanComponentFields.PROPERTIES;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
@@ -9,11 +9,11 @@
|
||||
* agreement is prohibited.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.model;
|
||||
package org.alfresco.rest.model.fileplancomponents;
|
||||
|
||||
import static org.alfresco.com.FilePlanComponentFields.PROPERTIES_HOLD_REASON;
|
||||
import static org.alfresco.com.FilePlanComponentFields.PROPERTIES_TITLE;
|
||||
import static org.alfresco.com.FilePlanComponentFields.PROPERTIES_VITAL_RECORD_INDICATOR;
|
||||
import static org.alfresco.com.fileplancomponents.FilePlanComponentFields.PROPERTIES_HOLD_REASON;
|
||||
import static org.alfresco.com.fileplancomponents.FilePlanComponentFields.PROPERTIES_TITLE;
|
||||
import static org.alfresco.com.fileplancomponents.FilePlanComponentFields.PROPERTIES_VITAL_RECORD_INDICATOR;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
47
src/main/java/org/alfresco/rest/model/site/RMSite.java
Normal file
47
src/main/java/org/alfresco/rest/model/site/RMSite.java
Normal file
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* License rights for this program may be obtained from Alfresco Software, Ltd.
|
||||
* pursuant to a written agreement and any use of this program without such an
|
||||
* agreement is prohibited.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.model.site;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
import org.alfresco.com.site.RMSiteCompliance;
|
||||
import org.alfresco.rest.model.RestSiteModel;
|
||||
|
||||
/**
|
||||
* POJO for RM Site component
|
||||
*
|
||||
* @author Rodica Sutu
|
||||
* @since 1.0
|
||||
*/
|
||||
public class RMSite extends RestSiteModel
|
||||
{
|
||||
@JsonProperty (required = true)
|
||||
private RMSiteCompliance compliance;
|
||||
|
||||
/**
|
||||
* Helper method to set RM site compliance
|
||||
* @param compliance {@link RMSiteCompliance} the compliance to set
|
||||
*/
|
||||
public void setCompliance(RMSiteCompliance compliance)
|
||||
{
|
||||
this.compliance = compliance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to get RM site compliance
|
||||
* @return compliance the RM Site compliance to get
|
||||
*/
|
||||
public RMSiteCompliance getCompliance()
|
||||
{
|
||||
return compliance;
|
||||
}
|
||||
}
|
123
src/main/java/org/alfresco/rest/requests/RMSiteAPI.java
Normal file
123
src/main/java/org/alfresco/rest/requests/RMSiteAPI.java
Normal file
@@ -0,0 +1,123 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* License rights for this program may be obtained from Alfresco Software, Ltd.
|
||||
* pursuant to a written agreement and any use of this program without such an
|
||||
* agreement is prohibited.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.requests;
|
||||
|
||||
import static org.alfresco.rest.core.RestRequest.requestWithBody;
|
||||
import static org.alfresco.rest.core.RestRequest.simpleRequest;
|
||||
import static org.springframework.http.HttpMethod.DELETE;
|
||||
import static org.springframework.http.HttpMethod.GET;
|
||||
import static org.springframework.http.HttpMethod.POST;
|
||||
import static org.springframework.http.HttpMethod.PUT;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
|
||||
import org.alfresco.rest.core.RestAPI;
|
||||
import org.alfresco.rest.model.site.RMSite;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* File plan component REST API Wrapper
|
||||
*
|
||||
* @author Tuna Aksoy
|
||||
* @author Rodica Sutu
|
||||
* @since 1.0
|
||||
*/
|
||||
@Component
|
||||
@Scope (value = "prototype")
|
||||
public class RMSiteAPI extends RestAPI
|
||||
{
|
||||
/**
|
||||
* Get the RM site
|
||||
*
|
||||
* @return The {@link RMSite} for the given file plan component id
|
||||
* @throws Exception for the following cases:
|
||||
* <ul>
|
||||
* <li>Api Response code 400 Invalid parameter: GET request is supported only for the RM site</li>
|
||||
* <li>Api Response code 401 If authentication failed</li>
|
||||
* <li>Api Response code 409 If RM Site does not exist</li>
|
||||
* <li>Api Response code default Unexpected error</li>
|
||||
* </ul>
|
||||
*/
|
||||
public RMSite getSite() throws Exception
|
||||
{
|
||||
return usingRestWrapper().processModel(RMSite.class, simpleRequest(
|
||||
GET,
|
||||
"sites/rm"
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the RM site
|
||||
*
|
||||
* @param rmSiteProperties The properties of the rm site to be created
|
||||
* @return The {@link RMSite} with the given properties
|
||||
* @throws Exception for the following cases:
|
||||
* <ul>
|
||||
* <li>Api Response code 400 Invalid parameter: title, or description exceed the maximum length; or siteBodyCreate invalid</li>
|
||||
* <li>Api Response code 401 If authentication failed</
|
||||
* <li>Api Response code 409 RM Site already exists</li>
|
||||
* <li>Api Response code default Unexpected error</li>
|
||||
* </ul>
|
||||
*/
|
||||
public RMSite createRMSite(JsonObject rmSiteProperties) throws Exception
|
||||
{
|
||||
return usingRestWrapper().processModel(RMSite.class, requestWithBody(
|
||||
POST,
|
||||
rmSiteProperties.toString(),
|
||||
"sites"
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete RM site
|
||||
* @throws Exception for the following cases:
|
||||
* <ul>
|
||||
* <li>Api Response code 400 Invalid parameter: DELETE request is supported only for the RM site</li>
|
||||
* <li>Api Response code 401 If authentication failed</
|
||||
* <li>Api Response code 403 Current user does not have permission to delete the site that is visible to them.</li>
|
||||
* <li>Api Response code 404 RM site does not exist</li>
|
||||
* <li>Api Response code default Unexpected error</li>
|
||||
* </ul>
|
||||
*/
|
||||
public void deleteRMSite() throws Exception
|
||||
{
|
||||
usingRestWrapper().processEmptyModel(simpleRequest(
|
||||
DELETE,
|
||||
"sites/rm"
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update RM site
|
||||
*
|
||||
* @param rmSiteProperties The properties to be updated
|
||||
* @return The updated {@link RMSite}
|
||||
* @throws Exception for the following cases:
|
||||
* <ul>
|
||||
* <li>Api Response code 400 the update request is invalid {@code rmSiteProperties} is invalid</li>
|
||||
* <li>Api Response code 401 If authentication fails</li>
|
||||
* <li>Api Response code 403 does not have permission to update {@code RMSite}</li>
|
||||
* <li>Api Response code 404 {@code RMSite} does not exist</li>
|
||||
* <li>Api Response code default Unexpected error,model integrity exception</li>
|
||||
* </ul>
|
||||
*/
|
||||
public RMSite updateRMSite(JsonObject rmSiteProperties) throws Exception
|
||||
{
|
||||
return usingRestWrapper().processModel(RMSite.class, requestWithBody(
|
||||
PUT,
|
||||
rmSiteProperties.toString(),
|
||||
"sites/rm"
|
||||
));
|
||||
}
|
||||
|
||||
}
|
@@ -13,11 +13,25 @@ package org.alfresco.rest;
|
||||
|
||||
import static java.lang.Integer.parseInt;
|
||||
|
||||
import static org.alfresco.com.site.RMSiteCompliance.STANDARD;
|
||||
import static org.alfresco.com.site.RMSiteFields.COMPLIANCE;
|
||||
import static org.alfresco.com.site.RMSiteFields.DESCRIPTION;
|
||||
import static org.alfresco.com.site.RMSiteFields.TITLE;
|
||||
import static org.jglue.fluentjson.JsonBuilderFactory.buildObject;
|
||||
import static org.springframework.http.HttpStatus.CREATED;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import com.jayway.restassured.RestAssured;
|
||||
|
||||
import org.alfresco.dataprep.SiteService;
|
||||
import org.alfresco.rest.core.RestWrapper;
|
||||
import org.alfresco.rest.requests.RMSiteAPI;
|
||||
import org.alfresco.utility.data.DataUser;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.PropertySource;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
|
||||
/**
|
||||
@@ -32,18 +46,29 @@ import org.testng.annotations.BeforeClass;
|
||||
@PropertySource(value = "classpath:local.properties", ignoreResourceNotFound = true)
|
||||
public class BaseRestTest extends RestTest
|
||||
{
|
||||
@Value("${alfresco.rm.scheme}")
|
||||
@Value ("${alfresco.rm.scheme}")
|
||||
private String scheme;
|
||||
|
||||
@Value("${alfresco.rm.host}")
|
||||
@Value ("${alfresco.rm.host}")
|
||||
private String host;
|
||||
|
||||
@Value("${alfresco.rm.port}")
|
||||
@Value ("${alfresco.rm.port}")
|
||||
private String port;
|
||||
|
||||
@Value("${alfresco.rm.basePath}")
|
||||
@Value ("${alfresco.rm.basePath}")
|
||||
private String basePath;
|
||||
|
||||
@Autowired
|
||||
public RMSiteAPI rmSiteAPI;
|
||||
|
||||
@Autowired
|
||||
public DataUser dataUser;
|
||||
|
||||
private static final String RM_ID = "rm";
|
||||
|
||||
@Autowired
|
||||
private SiteService siteService;
|
||||
|
||||
/**
|
||||
* @see org.alfresco.rest.RestTest#checkServerHealth()
|
||||
*/
|
||||
@@ -54,5 +79,43 @@ public class BaseRestTest extends RestTest
|
||||
RestAssured.baseURI = scheme + "://" + host;
|
||||
RestAssured.port = parseInt(port);
|
||||
RestAssured.basePath = basePath;
|
||||
//create RM Site if not exist
|
||||
createRMSiteIfNotExists();
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Helper method to create the RM Site via the POST request
|
||||
* if the site doesn't exist
|
||||
*/
|
||||
public void createRMSiteIfNotExists() throws Exception
|
||||
{
|
||||
final String RM_TITLE = "Records Management";
|
||||
final String RM_DESCRIPTION = "Records Management Site";
|
||||
//check RM site doesn't exist
|
||||
if (!siteRMExist())
|
||||
{
|
||||
rmSiteAPI.usingRestWrapper().authenticateUser(dataUser.getAdminUser());
|
||||
// Build the RM site properties
|
||||
JsonObject rmSiteProperties = buildObject()
|
||||
.add(TITLE, RM_TITLE)
|
||||
.add(DESCRIPTION, RM_DESCRIPTION)
|
||||
.add(COMPLIANCE, STANDARD.toString())
|
||||
.getJson();
|
||||
// Create the RM site
|
||||
rmSiteAPI.createRMSite(rmSiteProperties);
|
||||
|
||||
// Verify the status code
|
||||
rmSiteAPI.usingRestWrapper().assertStatusCodeIs(CREATED);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check the RM site exist via the GET request
|
||||
*/
|
||||
public boolean siteRMExist() throws Exception
|
||||
{
|
||||
RestWrapper restWrapper=rmSiteAPI.usingRestWrapper().authenticateUser(dataUser.getAdminUser());
|
||||
rmSiteAPI.getSite();
|
||||
return restWrapper.getStatusCode().equals(HttpStatus.OK.toString());
|
||||
}
|
||||
}
|
@@ -0,0 +1,155 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Records Management Module
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* License rights for this program may be obtained from Alfresco Software, Ltd.
|
||||
* pursuant to a written agreement and any use of this program without such an
|
||||
* agreement is prohibited.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.rest.fileplancomponents;
|
||||
|
||||
import static org.alfresco.com.site.RMSiteCompliance.STANDARD;
|
||||
import static org.alfresco.com.site.RMSiteFields.COMPLIANCE;
|
||||
import static org.alfresco.com.site.RMSiteFields.DESCRIPTION;
|
||||
import static org.alfresco.com.site.RMSiteFields.TITLE;
|
||||
import static org.jglue.fluentjson.JsonBuilderFactory.buildObject;
|
||||
import static org.springframework.http.HttpStatus.CONFLICT;
|
||||
import static org.springframework.http.HttpStatus.CREATED;
|
||||
import static org.springframework.http.HttpStatus.NOT_FOUND;
|
||||
import static org.springframework.http.HttpStatus.NO_CONTENT;
|
||||
import static org.springframework.http.HttpStatus.OK;
|
||||
import static org.springframework.social.alfresco.api.entities.Site.Visibility.PUBLIC;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
|
||||
import org.alfresco.rest.BaseRestTest;
|
||||
import org.alfresco.rest.core.RestWrapper;
|
||||
import org.alfresco.rest.model.site.RMSite;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
/**
|
||||
* FIXME: Document me :)
|
||||
* FIXME: Should we use dependent tests or not?
|
||||
* They were removed here but there is no guarantee for the test execution order.
|
||||
* In {@link RecordCategoryTest} we create a record category first to delete it.
|
||||
* Probbaly something to think about again.
|
||||
*
|
||||
* @author Rodica Sutu
|
||||
* @since 1.0
|
||||
*/
|
||||
public class RMSiteTests extends BaseRestTest
|
||||
{
|
||||
|
||||
// Constants
|
||||
private static final String RM_ID = "rm";
|
||||
private static final String RM_TITLE = "Records Management";
|
||||
private static final String RM_DESCRIPTION = "Records Management Site";
|
||||
|
||||
@Test
|
||||
(
|
||||
description = "Create RM site as admin user with standard Compliance"
|
||||
)
|
||||
public void createRMSiteAsAdminUser() throws Exception
|
||||
{
|
||||
RestWrapper restWrapper = rmSiteAPI.usingRestWrapper().authenticateUser(dataUser.getAdminUser());
|
||||
if (siteRMExist())
|
||||
{
|
||||
//Delete the RM site
|
||||
rmSiteAPI.deleteRMSite();
|
||||
}
|
||||
// Build the RM site properties
|
||||
JsonObject rmSiteProperties = buildObject().
|
||||
add(TITLE, RM_TITLE).
|
||||
add(DESCRIPTION, RM_DESCRIPTION).
|
||||
add(COMPLIANCE, STANDARD.toString()).
|
||||
getJson();
|
||||
|
||||
// Create the RM site
|
||||
RMSite rmSite = rmSiteAPI.createRMSite(rmSiteProperties);
|
||||
|
||||
// Verify the status code
|
||||
rmSiteAPI.usingRestWrapper().assertStatusCodeIs(CREATED);
|
||||
|
||||
// Verify the returned file plan component
|
||||
assertEquals(rmSite.getId(), RM_ID);
|
||||
assertEquals(rmSite.getTitle(), RM_TITLE);
|
||||
assertEquals(rmSite.getDescription(), RM_DESCRIPTION);
|
||||
assertEquals(rmSite.getCompliance(), STANDARD);
|
||||
assertEquals(rmSite.getVisibility(), PUBLIC);
|
||||
}
|
||||
|
||||
@Test
|
||||
(
|
||||
description = "Create RM site when site already exist with admin user"
|
||||
)
|
||||
public void createRMSiteWhenSiteExists() throws Exception
|
||||
{
|
||||
rmSiteAPI.usingRestWrapper().authenticateUser(dataUser.getAdminUser());
|
||||
createRMSiteIfNotExists();
|
||||
RestWrapper restWrapper = rmSiteAPI.usingRestWrapper().authenticateUser(dataUser.getAdminUser());
|
||||
|
||||
// Construct new properties
|
||||
String newTitle = RM_TITLE + "createRMSiteWhenSiteExists";
|
||||
String newDescription = RM_DESCRIPTION + "createRMSiteWhenSiteExists";
|
||||
|
||||
// Build the RM site properties
|
||||
JsonObject rmSiteProperties = buildObject().
|
||||
add(TITLE, newTitle).
|
||||
add(DESCRIPTION, newDescription).
|
||||
add(COMPLIANCE, STANDARD.toString()).
|
||||
getJson();
|
||||
|
||||
// Create the RM site
|
||||
rmSiteAPI.createRMSite(rmSiteProperties);
|
||||
|
||||
// Verify the status code
|
||||
restWrapper.assertStatusCodeIs(CONFLICT);
|
||||
}
|
||||
|
||||
@Test
|
||||
(
|
||||
description = "Delete RM site as admin user"
|
||||
)
|
||||
public void deleteRMSite() throws Exception
|
||||
{
|
||||
RestWrapper restWrapper = rmSiteAPI.usingRestWrapper().authenticateUser(dataUser.getAdminUser());
|
||||
|
||||
// Delete the RM site
|
||||
rmSiteAPI.deleteRMSite();
|
||||
|
||||
// Verify the status code
|
||||
restWrapper.assertStatusCodeIs(NO_CONTENT);
|
||||
}
|
||||
|
||||
@Test
|
||||
(
|
||||
description = "GET RM site as admin user"
|
||||
)
|
||||
public void getRMSite() throws Exception
|
||||
{
|
||||
RestWrapper restWrapper = rmSiteAPI.usingRestWrapper().authenticateUser(dataUser.getAdminUser());
|
||||
|
||||
// Get the RM site
|
||||
RMSite rmSite=rmSiteAPI.getSite();
|
||||
|
||||
if (!siteRMExist())
|
||||
{
|
||||
// Verify the status code
|
||||
restWrapper.assertStatusCodeIs(NOT_FOUND);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Verify the status code
|
||||
restWrapper.assertStatusCodeIs(OK);
|
||||
assertEquals(rmSite.getId(), RM_ID);
|
||||
assertEquals(rmSite.getDescription(), RM_DESCRIPTION);
|
||||
assertEquals(rmSite.getCompliance(), STANDARD);
|
||||
assertEquals(rmSite.getVisibility(), PUBLIC);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user