This project has retired. For details please refer to its Attic page.
VersioningSmokeTest xref

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   * http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.chemistry.opencmis.tck.tests.versioning;
20  
21  import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.FAILURE;
22  import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.SKIPPED;
23  import static org.apache.chemistry.opencmis.tck.CmisTestResultStatus.WARNING;
24  
25  import java.util.List;
26  import java.util.Map;
27  
28  import org.apache.chemistry.opencmis.client.api.Document;
29  import org.apache.chemistry.opencmis.client.api.Folder;
30  import org.apache.chemistry.opencmis.client.api.ObjectId;
31  import org.apache.chemistry.opencmis.client.api.Session;
32  import org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
33  import org.apache.chemistry.opencmis.tck.CmisTestResult;
34  import org.apache.chemistry.opencmis.tck.impl.AbstractSessionTest;
35  
36  /**
37   * Checked out test.
38   */
39  public class VersioningSmokeTest extends AbstractSessionTest {
40  
41      @Override
42      public void init(Map<String, String> parameters) {
43          super.init(parameters);
44          setName("Versioning Smoke Test");
45          setDescription("Creates a document, checks it out, cancels the check out, checks it out again and finally checks it in.");
46      }
47  
48      @Override
49      public void run(Session session) {
50          CmisTestResult f;
51  
52          try {
53              // create folder and document
54              Folder testFolder = createTestFolder(session);
55              Document doc = createDocument(session, testFolder, "versioningtest.txt", "versioning");
56              DocumentTypeDefinition docType = (DocumentTypeDefinition) doc.getType();
57  
58              if (!docType.isVersionable()) {
59                  addResult(createResult(SKIPPED, "Test type is not versionable. Test skipped!"));
60                  doc.delete(true);
61                  return;
62              }
63  
64              // check out
65              ObjectId pwcId = doc.checkOut();
66              Document pwc = (Document) session.getObject(pwcId, SELECT_ALL_NO_CACHE_OC);
67  
68              addResult(checkObject(session, pwc, getAllProperties(pwc), "PWC spec compliance - test 1"));
69  
70              checkCheckedOut(pwc);
71  
72              // cancel checkout
73              pwc.cancelCheckOut();
74  
75              doc.refresh();
76              checkCheckedIn(doc);
77  
78              // check out again
79              pwcId = doc.checkOut();
80              pwc = (Document) session.getObject(pwcId, SELECT_ALL_NO_CACHE_OC);
81  
82              addResult(checkObject(session, pwc, getAllProperties(pwc), "PWC spec compliance - test 2"));
83  
84              checkCheckedOut(pwc);
85  
86              // check in
87              ObjectId newVersionId = pwc.checkIn(true, null, null, "Test Version 2");
88              Document newVersion = (Document) session.getObject(newVersionId, SELECT_ALL_NO_CACHE_OC);
89  
90              addResult(checkObject(session, newVersion, getAllProperties(newVersion), "New version compliance"));
91  
92              checkCheckedIn(newVersion);
93  
94              // check version history
95              List<Document> versions = newVersion.getAllVersions();
96              f = createResult(FAILURE, "Version series should have 2 versions but has " + versions.size() + "!");
97              addResult(assertEquals(2, versions.size(), null, f));
98  
99              if (versions.size() > 0) {
100                 f = createResult(FAILURE,
101                         "Version history order is incorrect! The first version should be the new version.");
102                 addResult(assertEquals(newVersion.getId(), versions.get(0).getId(), null, f));
103             }
104 
105             if (versions.size() > 1) {
106                 f = createResult(FAILURE,
107                         "Version history order is incorrect! The second version should be the origin document.");
108                 addResult(assertEquals(doc.getId(), versions.get(1).getId(), null, f));
109             }
110 
111             // remove the document
112             deleteObject(doc);
113         } finally {
114             deleteTestFolder();
115         }
116     }
117 
118     private void checkCheckedOut(Document pwc) {
119         CmisTestResult f;
120 
121         f = createResult(FAILURE, "Version series has a PWC but cmis:isVersionSeriesCheckedOut is not TRUE!");
122         addResult(assertIsTrue(pwc.isVersionSeriesCheckedOut(), null, f));
123 
124         if (pwc.getVersionSeriesCheckedOutId() == null) {
125             addResult(createResult(WARNING, "cmis:versionSeriesCheckedOutId is not set!"));
126         } else {
127             f = createResult(FAILURE, "PWC id and cmis:versionSeriesCheckedOutId don't match!");
128             addResult(assertEquals(pwc.getId(), pwc.getVersionSeriesCheckedOutId(), null, f));
129         }
130 
131         f = createResult(WARNING, "PWC does not have a value for cmis:versionSeriesCheckedOutBy!");
132         addResult(assertStringNotEmpty(pwc.getVersionSeriesCheckedOutBy(), null, f));
133     }
134 
135     private void checkCheckedIn(Document doc) {
136         CmisTestResult f;
137 
138         f = createResult(FAILURE, "Version series is not checked out but cmis:isVersionSeriesCheckedOut is not FALSE!");
139         addResult(assertIsFalse(doc.isVersionSeriesCheckedOut(), null, f));
140 
141         f = createResult(FAILURE, "Version series is not checked out but cmis:versionSeriesCheckedOutId has a value!");
142         addResult(assertNull(doc.getVersionSeriesCheckedOutId(), null, f));
143 
144         f = createResult(FAILURE, "Version series is not checked out but cmis:versionSeriesCheckedOutBy has a value!");
145         addResult(assertNull(doc.getVersionSeriesCheckedOutBy(), null, f));
146     }
147 }