MNT-22036 : REST API always applies versioning

Changed property String versioningState to boolean versioningEnabled
   Add versioningEnabled to node creation using JSON
  Add unit tests for node creation using JSON.
This commit is contained in:
Epure Alexandru-Eusebiu
2020-11-13 17:02:28 +02:00
parent 12f645a71c
commit 5017b305fb
3 changed files with 228 additions and 66 deletions

View File

@@ -1848,6 +1848,19 @@ public class NodesImpl implements Nodes
{
versionMajor = Boolean.valueOf(str);
}
String versioningEnabledStringValue = parameters.getParameter("versioningEnabled");
if(null != versioningEnabledStringValue)
{
boolean versioningEnabled = Boolean.parseBoolean(versioningEnabledStringValue);
if(versioningEnabled)
{
versionMajor = (null != versionMajor) ? versionMajor : true;
}
else
{
versionMajor = null;
}
}
String versionComment = parameters.getParameter(PARAM_VERSION_COMMENT);
// Create the node
@@ -2914,7 +2927,7 @@ public class NodesImpl implements Nodes
String versionComment = null;
String relativePath = null;
String renditionNames = null;
String versioningState = null;
boolean versioningEnabled = true;
Map<String, Object> qnameStrProps = new HashMap<>();
Map<QName, Serializable> properties = null;
@@ -2972,8 +2985,12 @@ public class NodesImpl implements Nodes
renditionNames = getStringOrNull(field.getValue());
break;
case "versioningstate":
versioningState = getStringOrNull(field.getValue());
case "versioningenabled":
String versioningEnabledStringValue = getStringOrNull(field.getValue());
if(null != versioningEnabledStringValue)
{
versioningEnabled = !versioningEnabledStringValue.equalsIgnoreCase("false");
}
break;
default:
@@ -3053,22 +3070,8 @@ public class NodesImpl implements Nodes
{
versionMajor = true;
}
// MNT-22036 add versioningState property for newly created nodes.
if (null != versioningState)
{
switch (versioningState)
{
case "none":
versionMajor = null;
break;
case "major":
versionMajor = true;
break;
default:
versionMajor = false;
}
}
// MNT-22036 add versioningEnabled property for newly created nodes.
versionMajor = versioningEnabled ? versionMajor : null;
// Create a new file.
NodeRef nodeRef = createNewFile(parentNodeRef, fileName, nodeTypeQName, content, properties, assocTypeQName, parameters, versionMajor, versionComment);

View File

@@ -5613,12 +5613,22 @@ public class NodeApiTest extends AbstractSingleNetworkSiteTest
}
@Test
public void versioningStatePropetyMultipartUploadTest() throws Exception
public void versioningEnabledMultipartNodeCreationTest() throws Exception
{
setRequestContext(user1);
String myNodeId = getMyNodeId();
// Test Scenarios:
// 1: majorVersion not set - versioningEnabled not set Expect: MAJOR version
// 2: majorVersion not set - versioningEnabled false Expect: versioning disabled
// 3: majorVersion true - versioningEnabled false Expect: versioning disabled
// 4: majorVersion false - versioningEnabled false Expect: versioning disabled
// 5: majorVersion not set - versioningEnabled true Expect: MAJOR version
// 6: majorVersion true - versioningEnabled true Expect: MAJOR version
// 7: majorVersion false - versioningEnabled true Expect: Minor version
// 8: majorVersion not set - versioningEnabled False Expect: versioning disabled
// 9: majorVersion not set - versioningEnabled False1 Expect: MAJOR version
// Scenario 1 majorVersion and versionState multipart values are not set.
// Scenario 1:
String fileName = "myfile" + UUID.randomUUID() + ".txt";
File file = getResourceFile("quick-2.pdf");
MultiPartBuilder multiPartBuilder = MultiPartBuilder.create().setFileData(new FileData(fileName, file));
@@ -5633,10 +5643,10 @@ public class NodeApiTest extends AbstractSingleNetworkSiteTest
assertEquals("MAJOR", documentProperties.get("cm:versionType"));
assertEquals("1.0", documentProperties.get("cm:versionLabel"));
// Scenario 2 majorVersion is not set versionState is set to none.
// Scenario 2:
fileName = "myfile" + UUID.randomUUID() + ".txt";
multiPartBuilder = MultiPartBuilder.create().setFileData(new FileData(fileName, file));
multiPartBuilder.setVersioningState("none");
multiPartBuilder.setVersioningEnabled("false");
reqBody = multiPartBuilder.build();
response = post(getNodeChildrenUrl(myNodeId), reqBody.getBody(), null, reqBody.getContentType(), 201);
@@ -5645,11 +5655,11 @@ public class NodeApiTest extends AbstractSingleNetworkSiteTest
documentProperties = documentResponse.getProperties();
assertNull(documentProperties);
// Scenario 3 majorVersion is set to true and versionState is set to none.
// Scenario 3:
fileName = "myfile" + UUID.randomUUID() + ".txt";
multiPartBuilder = MultiPartBuilder.create().setFileData(new FileData(fileName, file));
multiPartBuilder.setMajorVersion(true);
multiPartBuilder.setVersioningState("none");
multiPartBuilder.setVersioningEnabled("false");
reqBody = multiPartBuilder.build();
response = post(getNodeChildrenUrl(myNodeId), reqBody.getBody(), null, reqBody.getContentType(), 201);
@@ -5658,11 +5668,11 @@ public class NodeApiTest extends AbstractSingleNetworkSiteTest
documentProperties = documentResponse.getProperties();
assertNull(documentProperties);
// Scenario 4 majorVersion is set to false and versionState is set to none.
// Scenario 4:
fileName = "myfile" + UUID.randomUUID() + ".txt";
multiPartBuilder = MultiPartBuilder.create().setFileData(new FileData(fileName, file));
multiPartBuilder.setMajorVersion(false);
multiPartBuilder.setVersioningState("none");
multiPartBuilder.setVersioningEnabled("false");
reqBody = multiPartBuilder.build();
response = post(getNodeChildrenUrl(myNodeId), reqBody.getBody(), null, reqBody.getContentType(), 201);
@@ -5671,39 +5681,10 @@ public class NodeApiTest extends AbstractSingleNetworkSiteTest
documentProperties = documentResponse.getProperties();
assertNull(documentProperties);
// Scenario 5 majorVersion is not set versionState is set to minor.
// Scenario 5:
fileName = "myfile" + UUID.randomUUID() + ".txt";
multiPartBuilder = MultiPartBuilder.create().setFileData(new FileData(fileName, file));
multiPartBuilder.setVersioningState("minor");
reqBody = multiPartBuilder.build();
response = post(getNodeChildrenUrl(myNodeId), reqBody.getBody(), null, reqBody.getContentType(), 201);
documentResponse = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
documentProperties = documentResponse.getProperties();
assertEquals(2, documentProperties.size());
assertEquals("MINOR", documentProperties.get("cm:versionType"));
assertEquals("0.1", documentProperties.get("cm:versionLabel"));
// Scenario 6 majorVersion is set to true and versionState is set to minor.
fileName = "myfile" + UUID.randomUUID() + ".txt";
multiPartBuilder = MultiPartBuilder.create().setFileData(new FileData(fileName, file));
multiPartBuilder.setMajorVersion(true);
multiPartBuilder.setVersioningState("minor");
reqBody = multiPartBuilder.build();
response = post(getNodeChildrenUrl(myNodeId), reqBody.getBody(), null, reqBody.getContentType(), 201);
documentResponse = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
documentProperties = documentResponse.getProperties();
assertEquals(2, documentProperties.size());
assertEquals("MINOR", documentProperties.get("cm:versionType"));
assertEquals("0.1", documentProperties.get("cm:versionLabel"));
// Scenario 7 majorVersion is not set versionState is set to major.
fileName = "myfile" + UUID.randomUUID() + ".txt";
multiPartBuilder = MultiPartBuilder.create().setFileData(new FileData(fileName, file));
multiPartBuilder.setVersioningState("major");
multiPartBuilder.setVersioningEnabled("true");
reqBody = multiPartBuilder.build();
response = post(getNodeChildrenUrl(myNodeId), reqBody.getBody(), null, reqBody.getContentType(), 201);
@@ -5714,11 +5695,11 @@ public class NodeApiTest extends AbstractSingleNetworkSiteTest
assertEquals("MAJOR", documentProperties.get("cm:versionType"));
assertEquals("1.0", documentProperties.get("cm:versionLabel"));
// Scenario 8 majorVersion is set to false and versionState is set to major.
// Scenario 6:
fileName = "myfile" + UUID.randomUUID() + ".txt";
multiPartBuilder = MultiPartBuilder.create().setFileData(new FileData(fileName, file));
multiPartBuilder.setMajorVersion(false);
multiPartBuilder.setVersioningState("major");
multiPartBuilder.setMajorVersion(true);
multiPartBuilder.setVersioningEnabled("true");
reqBody = multiPartBuilder.build();
response = post(getNodeChildrenUrl(myNodeId), reqBody.getBody(), null, reqBody.getContentType(), 201);
@@ -5728,6 +5709,184 @@ public class NodeApiTest extends AbstractSingleNetworkSiteTest
assertEquals(2, documentProperties.size());
assertEquals("MAJOR", documentProperties.get("cm:versionType"));
assertEquals("1.0", documentProperties.get("cm:versionLabel"));
// Scenario 7:
fileName = "myfile" + UUID.randomUUID() + ".txt";
multiPartBuilder = MultiPartBuilder.create().setFileData(new FileData(fileName, file));
multiPartBuilder.setMajorVersion(false);
multiPartBuilder.setVersioningEnabled("true");
reqBody = multiPartBuilder.build();
response = post(getNodeChildrenUrl(myNodeId), reqBody.getBody(), null, reqBody.getContentType(), 201);
documentResponse = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
documentProperties = documentResponse.getProperties();
assertEquals(2, documentProperties.size());
assertEquals("MINOR", documentProperties.get("cm:versionType"));
assertEquals("0.1", documentProperties.get("cm:versionLabel"));
// Scenario 8:
fileName = "myfile" + UUID.randomUUID() + ".txt";
multiPartBuilder = MultiPartBuilder.create().setFileData(new FileData(fileName, file));
multiPartBuilder.setVersioningEnabled("False");
reqBody = multiPartBuilder.build();
response = post(getNodeChildrenUrl(myNodeId), reqBody.getBody(), null, reqBody.getContentType(), 201);
documentResponse = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
documentProperties = documentResponse.getProperties();
assertNull(documentProperties);
// Scenario 9:
fileName = "myfile" + UUID.randomUUID() + ".txt";
multiPartBuilder = MultiPartBuilder.create().setFileData(new FileData(fileName, file));
multiPartBuilder.setVersioningEnabled("False1");
reqBody = multiPartBuilder.build();
response = post(getNodeChildrenUrl(myNodeId), reqBody.getBody(), null, reqBody.getContentType(), 201);
documentResponse = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
documentProperties = documentResponse.getProperties();
assertEquals("MAJOR", documentProperties.get("cm:versionType"));
assertEquals("1.0", documentProperties.get("cm:versionLabel"));
}
@Test
public void versioningEnabledJSONNodeCreationTest() throws Exception
{
setRequestContext(user1);
String myNodeId = getMyNodeId();
// Test Scenarios:
// 1: majorVersion not set - versioningEnabled not set Expect: versioning disabled
// 2: majorVersion not set - versioningEnabled false Expect: versioning disabled
// 3: majorVersion true - versioningEnabled false Expect: versioning disabled
// 4: majorVersion false - versioningEnabled false Expect: versioning disabled
// 5: majorVersion not set - versioningEnabled true Expect: MAJOR version
// 6: majorVersion true - versioningEnabled true Expect: MAJOR version
// 7: majorVersion false - versioningEnabled true Expect: Minor version
// 8: majorVersion not set - versioningEnabled False Expect: versioning disabled
// 9: majorVersion not set - versioningEnabled False1 Expect: versioning disabled
// 10 majorVersion not set - versioningenabled true Expect: versioning disabled
Document d1 = new Document();
Map<String, String> requestHeaders = new HashMap<>();
//Scenario 1:
d1.setName("testDoc" + UUID.randomUUID());
d1.setNodeType(TYPE_CM_CONTENT);
HttpResponse response = post(getNodeChildrenUrl(myNodeId), toJsonAsStringNonNull(d1),requestHeaders, null, null, 201);
Document documentResponse = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
Map<String, Object> documentProperties = documentResponse.getProperties();
assertNull(documentProperties);
//Scenario 2:
d1.setName("testDoc" + UUID.randomUUID());
requestHeaders = new HashMap<>();
requestHeaders.put("versioningEnabled","false");
response = post(getNodeChildrenUrl(myNodeId), toJsonAsStringNonNull(d1),requestHeaders, null, null, 201);
documentResponse = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
documentProperties = documentResponse.getProperties();
assertNull(documentProperties);
//Scenario 3:
d1.setName("testDoc" + UUID.randomUUID());
requestHeaders = new HashMap<>();
requestHeaders.put("versioningEnabled","false");
requestHeaders.put("majorVersion","true");
response = post(getNodeChildrenUrl(myNodeId), toJsonAsStringNonNull(d1),requestHeaders, null, null, 201);
documentResponse = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
documentProperties = documentResponse.getProperties();
assertNull(documentProperties);
//Scenario 4:
d1.setName("testDoc" + UUID.randomUUID());
requestHeaders = new HashMap<>();
requestHeaders.put("versioningEnabled","false");
requestHeaders.put("majorVersion","false");
response = post(getNodeChildrenUrl(myNodeId), toJsonAsStringNonNull(d1),requestHeaders, null, null, 201);
documentResponse = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
documentProperties = documentResponse.getProperties();
assertNull(documentProperties);
//Scenario 5:
d1.setName("testDoc" + UUID.randomUUID());
requestHeaders = new HashMap<>();
requestHeaders.put("versioningEnabled","true");
response = post(getNodeChildrenUrl(myNodeId), toJsonAsStringNonNull(d1),requestHeaders, null, null, 201);
documentResponse = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
documentProperties = documentResponse.getProperties();
assertEquals("MAJOR", documentProperties.get("cm:versionType"));
assertEquals("1.0", documentProperties.get("cm:versionLabel"));
//Scenario 6:
d1.setName("testDoc" + UUID.randomUUID());
requestHeaders = new HashMap<>();
requestHeaders.put("versioningEnabled","true");
requestHeaders.put("majorVersion","true");
response = post(getNodeChildrenUrl(myNodeId), toJsonAsStringNonNull(d1),requestHeaders, null, null, 201);
documentResponse = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
documentProperties = documentResponse.getProperties();
assertEquals("MAJOR", documentProperties.get("cm:versionType"));
assertEquals("1.0", documentProperties.get("cm:versionLabel"));
//Scenario 7:
d1.setName("testDoc" + UUID.randomUUID());
requestHeaders = new HashMap<>();
requestHeaders.put("versioningEnabled","true");
requestHeaders.put("majorVersion","false");
response = post(getNodeChildrenUrl(myNodeId), toJsonAsStringNonNull(d1),requestHeaders, null, null, 201);
documentResponse = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
documentProperties = documentResponse.getProperties();
assertEquals("MINOR", documentProperties.get("cm:versionType"));
assertEquals("0.1", documentProperties.get("cm:versionLabel"));
//Scenario 8:
d1.setName("testDoc" + UUID.randomUUID());
requestHeaders = new HashMap<>();
requestHeaders.put("versioningEnabled","False");
response = post(getNodeChildrenUrl(myNodeId), toJsonAsStringNonNull(d1),requestHeaders, null, null, 201);
documentResponse = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
documentProperties = documentResponse.getProperties();
assertNull(documentProperties);
//Scenario 9:
d1.setName("testDoc" + UUID.randomUUID());
requestHeaders = new HashMap<>();
requestHeaders.put("versioningEnabled","False1");
response = post(getNodeChildrenUrl(myNodeId), toJsonAsStringNonNull(d1),requestHeaders, null, null, 201);
documentResponse = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
documentProperties = documentResponse.getProperties();
assertNull(documentProperties);
//Scenario 10:
d1.setName("testDoc" + UUID.randomUUID());
requestHeaders = new HashMap<>();
requestHeaders.put("versioningenabled","true");
response = post(getNodeChildrenUrl(myNodeId), toJsonAsStringNonNull(d1),requestHeaders, null, null, 201);
documentResponse = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
documentProperties = documentResponse.getProperties();
assertNull(documentProperties);
}
@Test public void testAuditableProperties() throws Exception

View File

@@ -56,7 +56,7 @@ public class MultiPartBuilder
private String updateNodeRef;
private String description;
private String contentTypeQNameStr;
private String versioningState;
private String versioningEnabled;
private List<String> aspects = Collections.emptyList();
private Boolean majorVersion;
private Boolean overwrite;
@@ -76,7 +76,7 @@ public class MultiPartBuilder
this.updateNodeRef = that.updateNodeRef;
this.description = that.description;
this.contentTypeQNameStr = that.contentTypeQNameStr;
this.versioningState = that.versioningState;
this.versioningEnabled = that.versioningEnabled;
this.aspects = new ArrayList<>(that.aspects);
this.majorVersion = that.majorVersion;
this.overwrite = that.overwrite;
@@ -126,9 +126,9 @@ public class MultiPartBuilder
return this;
}
public MultiPartBuilder setVersioningState(String versioningState)
public MultiPartBuilder setVersioningEnabled(String versioningEnabled)
{
this.versioningState = versioningState;
this.versioningEnabled = versioningEnabled;
return this;
}
@@ -285,7 +285,7 @@ public class MultiPartBuilder
addPartIfNotNull(parts, "updatenoderef", updateNodeRef);
addPartIfNotNull(parts, "description", description);
addPartIfNotNull(parts, "contenttype", contentTypeQNameStr);
addPartIfNotNull(parts, "versioningstate", versioningState);
addPartIfNotNull(parts, "versioningenabled", versioningEnabled);
addPartIfNotNull(parts, "aspects", getCommaSeparated(aspects));
addPartIfNotNull(parts, "majorversion", majorVersion);
addPartIfNotNull(parts, "overwrite", overwrite);