001    /**
002     * Copyright 2005-2011 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.rice.kew.docmentlink;
017    
018    import static org.junit.Assert.assertEquals;
019    import static org.junit.Assert.assertNotNull;
020    import static org.junit.Assert.assertTrue;
021    import static org.junit.Assert.fail;
022    
023    import java.util.List;
024    
025    import org.apache.log4j.Logger;
026    import org.junit.Test;
027    import org.kuali.rice.kew.api.KewApiServiceLocator;
028    import org.kuali.rice.kew.api.document.DocumentLink;
029    import org.kuali.rice.kew.api.document.WorkflowDocumentService;
030    import org.kuali.rice.kew.test.KEWTestCase;
031    import org.kuali.rice.test.BaselineTestCase;
032    
033    /**
034     * This is a description of what this class does - g1zhang don't forget to fill this in. 
035     * 
036     * @author Kuali Rice Team (kuali-rice@googlegroups.com)
037     *
038     */
039    @BaselineTestCase.BaselineMode(BaselineTestCase.Mode.NONE)
040    public class DocumentLinkTest extends KEWTestCase {
041    
042            private static final Logger LOG = Logger.getLogger(DocumentLinkTest.class);
043            
044            private WorkflowDocumentService service;
045    
046            @Override
047            protected void setUpAfterDataLoad() throws Exception {
048                    super.setUpAfterDataLoad();
049                    this.service = KewApiServiceLocator.getWorkflowDocumentService();
050            }
051    
052            @Test public void testAddLinkBTW2DocsSucess() throws Exception {
053    
054                    // Test add link
055                    DocumentLink testDocLink1 = DocumentLink.Builder.create("5000", "6000").build();
056                    
057                    
058                    testDocLink1 = service.addDocumentLink(testDocLink1);
059                    assertNotNull(testDocLink1.getId());
060                    assertEquals("5000", testDocLink1.getOriginatingDocumentId());
061                    assertEquals("6000", testDocLink1.getDestinationDocumentId());
062    
063                    // ensure that a corresponding link was created with the other document
064                    List<DocumentLink> outgoingLinks = service.getOutgoingDocumentLinks("6000");
065                    assertEquals(1, outgoingLinks.size());
066                    DocumentLink testDocLink2 = outgoingLinks.get(0);
067                    
068                    assertEquals(testDocLink1.getOriginatingDocumentId(), testDocLink2.getDestinationDocumentId());
069                    assertEquals(testDocLink2.getOriginatingDocumentId(), testDocLink1.getDestinationDocumentId());
070    
071            }
072    
073            @Test public void testAddDuplicatedLinkBTW2DocsFailure() throws Exception {
074    
075                    DocumentLink testDocLink = DocumentLink.Builder.create("5000", "6000").build();
076    
077                    DocumentLink testDocLinkAdded = service.addDocumentLink(testDocLink);
078                    assertNotNull(testDocLinkAdded);
079                    assertNotNull(testDocLinkAdded.getId());
080    
081                    List<DocumentLink> links1 = service.getOutgoingDocumentLinks("5000");
082                    assertEquals(1, links1.size());
083    
084                    DocumentLink testDocLinkAdded2 = service.addDocumentLink(testDocLink);
085                    assertNotNull(testDocLinkAdded);
086                    assertNotNull(testDocLinkAdded.getId());
087                    assertEquals(testDocLinkAdded2, testDocLinkAdded);
088    
089                    List<DocumentLink> links2 = service.getOutgoingDocumentLinks("5000");
090                    assertEquals(1, links2.size());
091    
092                    assertEquals(links1.size(), links2.size());
093    
094            }
095    
096            @Test public void testAddIncomplelteLinkBTW2DocsFailure() throws Exception {
097    
098                    try {
099                            DocumentLink.Builder.create(null, null);
100                            fail();
101                    } catch (IllegalArgumentException e) {}
102    
103                    try{
104                            DocumentLink.Builder.create("6000", null);
105                            fail();
106                    } catch (IllegalArgumentException e){
107                            assertTrue(e.getMessage().contains("was null or blank"));
108                    }
109    
110            }
111    
112            @Test public void testGetLinkBTW2DocsSucess() throws Exception {
113    
114                    DocumentLink testDocLink = DocumentLink.Builder.create("5000", "6000").build();
115    
116                    DocumentLink link1 = service.addDocumentLink(testDocLink);
117    
118                    
119                    link1 = service.getDocumentLink(link1.getId());
120    
121                    assertNotNull(link1);
122                    assertEquals(testDocLink.getOriginatingDocumentId(), link1.getOriginatingDocumentId());
123                    assertEquals(testDocLink.getDestinationDocumentId(), link1.getDestinationDocumentId());
124    
125            }
126    
127            @Test public void testGetLinkBTW2DocsFailure() throws Exception {
128    
129    
130                    DocumentLink testDocLink = DocumentLink.Builder.create("5000", "6000").build();
131    
132                    service.addDocumentLink(testDocLink);
133    
134                    List<DocumentLink> links = service.getOutgoingDocumentLinks("5001");
135    
136                    assertTrue(links.isEmpty());
137    
138            }
139    
140            @Test public void testGetAllLinksFromOrgnDocSucess() throws Exception {
141    
142                    DocumentLink link1 = DocumentLink.Builder.create("5000", "6000").build();
143                    service.addDocumentLink(link1);
144                    
145                    DocumentLink link2 = DocumentLink.Builder.create("5009", "6009").build();
146                    service.addDocumentLink(link2);
147                    
148                    DocumentLink link3 = DocumentLink.Builder.create("5000", "6003").build();
149                    service.addDocumentLink(link3);
150                    
151                    DocumentLink link4 = DocumentLink.Builder.create("5000", "6004").build();
152                    service.addDocumentLink(link4);
153                    
154                    List<DocumentLink> links = service.getOutgoingDocumentLinks("5000");
155                    assertEquals(3, links.size());
156    
157            }
158    
159            @Test public void testGetAllLinksFromOrgnDocFailure()throws Exception {
160    
161                    DocumentLink link1 = DocumentLink.Builder.create("5000", "6000").build();
162                    service.addDocumentLink(link1);
163    
164                    DocumentLink link2 = DocumentLink.Builder.create("5009", "6009").build();
165                    service.addDocumentLink(link2);
166                    
167                    DocumentLink link3 = DocumentLink.Builder.create("5000", "6003").build();
168                    service.addDocumentLink(link3);
169    
170                    List<DocumentLink> links = service.getOutgoingDocumentLinks("8000");
171    
172                    assertEquals(0, links.size());
173    
174            }
175    
176            @Test public void testRemoveLinkBTW2DocsSucess() throws Exception{
177    
178                    DocumentLink link1 = DocumentLink.Builder.create("5000", "6000").build();
179                    link1 = service.addDocumentLink(link1);
180    
181                    List<DocumentLink> links1 = service.getOutgoingDocumentLinks("5000");
182    
183                    assertEquals(1, links1.size());
184    
185                    List<DocumentLink> links2 = service.getOutgoingDocumentLinks("6000");
186    
187                    assertEquals(1, links2.size());
188    
189                    DocumentLink deletedLink = service.deleteDocumentLink(link1.getId());
190                    assertNotNull(deletedLink);
191    
192                    List<DocumentLink> links3 = service.getOutgoingDocumentLinks("5000");
193    
194                    assertEquals(0, links3.size());
195            }
196    
197            @Test public void testRemoveAllLinksFromOrgnDocSucess() throws Exception {
198    
199                    DocumentLink link1 = DocumentLink.Builder.create("5000", "6000").build();
200                    link1 = service.addDocumentLink(link1);
201    
202                    DocumentLink link2 = DocumentLink.Builder.create("5000", "6002").build();
203                    link2 = service.addDocumentLink(link2);
204    
205                    List<DocumentLink> links01 = service.getOutgoingDocumentLinks("5000");
206                    List<DocumentLink> links02 = service.getOutgoingDocumentLinks("6000");
207                    List<DocumentLink> links03 = service.getOutgoingDocumentLinks("6002");
208    
209                    assertEquals(2, links01.size());
210                    assertEquals(1, links02.size());
211                    assertEquals(1, links03.size());
212    
213    
214                    List<DocumentLink> deletedDocuments = service.deleteDocumentLinksByDocumentId("5000");
215                    assertEquals(2, deletedDocuments.size());
216    
217                    links01 = service.getOutgoingDocumentLinks("5000");
218                    links02 = service.getOutgoingDocumentLinks("6000");
219                    links03 = service.getOutgoingDocumentLinks("6002");
220    
221                    assertEquals(0, links01.size());
222                    assertEquals(0, links02.size());
223                    assertEquals(0, links03.size());
224    
225            }
226            
227            @Test public void testDocLinktoItself() throws Exception {
228                    try{                    
229                            DocumentLink.Builder.create("5000", "5000");
230                            fail();
231                    } catch(IllegalArgumentException e){
232                            assertTrue(e.getMessage().contains("cannot link a document with itself"));
233                    }
234            }
235    
236    }