package fr.acxio.tools.agia.alfresco.dao;
/*
* Copyright 2014 Acxio
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import static org.junit.Assert.*;
import java.io.FileInputStream;
import java.util.Date;
import javax.sql.DataSource;
import org.dbunit.DataSourceDatabaseTester;
import org.dbunit.IDatabaseTester;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
import org.hibernate.SessionFactory;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;
import fr.acxio.tools.agia.alfresco.configuration.AlfrescoNamespaceContext;
import fr.acxio.tools.agia.alfresco.domain.Aspect;
import fr.acxio.tools.agia.alfresco.domain.Document;
import fr.acxio.tools.agia.alfresco.domain.Folder;
import fr.acxio.tools.agia.alfresco.domain.Node;
import fr.acxio.tools.agia.alfresco.domain.Property;
import fr.acxio.tools.agia.alfresco.domain.QName;
import fr.acxio.tools.agia.alfresco.domain.QueryAssociation;
import fr.acxio.tools.agia.alfresco.domain.RefAssociation;
@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@TransactionConfiguration
@Transactional
public class HibernateNodeDaoTest extends AbstractTransactionalJUnit4SpringContextTests {
@Autowired
private NodeDao nodeDao;
@Autowired
private DataSource businessDataSource;
@Autowired
private SessionFactory businessSessionFactory;
protected IDatabaseTester dbTester;
private AlfrescoNamespaceContext namespaceContext = new AlfrescoNamespaceContext();
@Before
public void setUp() throws Exception {
dbTester = new DataSourceDatabaseTester(businessDataSource);
FlatXmlDataSetBuilder aBuilder = new FlatXmlDataSetBuilder();
FileInputStream aDTDStream = new FileInputStream("src/test/resources/db/dataset.dtd");
FileInputStream aDataStream = new FileInputStream("src/test/resources/db/dataset.xml");
aBuilder.setMetaDataSetFromDtd(aDTDStream);
IDataSet dataSet = aBuilder.build(aDataStream);
aDTDStream.close();
aDataStream.close();
dbTester.setDataSet(dataSet);
dbTester.onSetup();
}
@Test
@DirtiesContext
public void testFindById() throws Exception {
Node aNode = nodeDao.findById(1);
assertEquals("company_home", aNode.getName());
assertEquals("{http://www.alfresco.org/model/content/1.0}folder", aNode.getType().toString());
assertEquals(0, aNode.getAspects().size());
assertEquals(1, aNode.getProperties().size());
assertEquals("{http://www.alfresco.org/model/content/1.0}name", aNode.getProperties().get(0).getName().toString());
assertEquals("company_home", aNode.getProperties().get(0).getValues().get(0));
assertTrue(aNode instanceof Folder);
Folder aFolder = (Folder)aNode;
assertEquals(0, aFolder.getDocuments().size());
assertEquals(1, aFolder.getFolders().size());
Folder aSubFolder = aFolder.getFolders().get(0);
assertEquals("Test Batch Writer", aSubFolder.getName());
assertEquals("{http://www.alfresco.org/model/content/1.0}folder", aSubFolder.getType().toString());
assertEquals(1, aSubFolder.getDocuments().size());
assertEquals(0, aSubFolder.getFolders().size());
Document aDocument = aSubFolder.getDocuments().get(0);
assertEquals("Test Batch Writer Content", aDocument.getName());
assertEquals("{http://www.alfresco.org/model/content/1.0}content", aDocument.getType().toString());
assertEquals(1, aDocument.getAspects().size());
assertEquals(2, aDocument.getProperties().size());
assertEquals(2, aDocument.getAssociations().size());
assertEquals("{http://www.alfresco.org/model/content/1.0}titled", aDocument.getAspects().get(0).getName().toString());
assertTrue(aDocument.getAssociations().get(0) instanceof RefAssociation);
RefAssociation aRefAssociation = (RefAssociation)aDocument.getAssociations().get(0);
assertEquals("{http://www.alfresco.org/model/content/1.0}rel", aRefAssociation.getType().toString());
assertEquals("1", aRefAssociation.getReference().toString());
assertTrue(aDocument.getAssociations().get(1) instanceof QueryAssociation);
QueryAssociation aQueryAssociation = (QueryAssociation)aDocument.getAssociations().get(1);
assertEquals("{http://www.alfresco.org/model/content/1.0}rel", aQueryAssociation.getType().toString());
assertEquals("lucene", aQueryAssociation.getQueryLanguage().toString());
assertEquals("ASPECT:\"custom:otheraspect\"", aQueryAssociation.getQuery().toString());
}
@Test
@DirtiesContext
public void testSaveOrUpdate() throws Exception {
QName aQNFolder = new QName("cm:folder", namespaceContext);
QName aQNName = new QName("cm:name", namespaceContext);
QName aQNAssoc = new QName("cm:rel", namespaceContext);
Folder aRootFolder = new Folder();
aRootFolder.setParent(null);
aRootFolder.setType(aQNFolder);
aRootFolder.addProperty(new Property(aQNName, "company_home"));
aRootFolder.setPathElement("app:company_home");
aRootFolder.setAddedTimestamp(new Date());
Folder aTestFolder = new Folder();
aTestFolder.setParent(aRootFolder);
aRootFolder.addFolder(aTestFolder);
aTestFolder.setType(aQNFolder);
aTestFolder.addProperty(new Property(aQNName, "Test Batch Writer"));
aTestFolder.setPathElement("cm:Test_x0020_Batch_x0020_Writer");
aTestFolder.setAddedTimestamp(new Date());
Document aDocument = new Document();
aDocument.setParent(aTestFolder);
aTestFolder.addDocument(aDocument);
aDocument.setType(new QName("cm:content", namespaceContext));
aDocument.addProperty(new Property(aQNName, "Test Batch Writer Content"));
aDocument.addProperty(new Property(new QName("cm:title", namespaceContext), "Text content"));
aDocument.addAspect(new Aspect(new QName("cm:titled", namespaceContext)));
aDocument.addAssociation(new RefAssociation(aQNAssoc, "1"));
aDocument.addAssociation(new QueryAssociation(aQNAssoc, "lucene", "ASPECT:\"custom:otheraspect\""));
aDocument.setContentPath("src/test/resources/testFiles/content1.pdf");
aDocument.setMimeType("application/pdf");
aDocument.setPathElement("cm:Test_x0020_Batch_x0020_Writer_x0020_Content");
aDocument.setAddedTimestamp(new Date());
nodeDao.saveOrUpdate(aRootFolder);
businessSessionFactory.getCurrentSession().flush();
businessSessionFactory.getCurrentSession().clear();
}
@Test
@DirtiesContext
public void testDelete() throws Exception {
Node aNode = nodeDao.findById(1);
nodeDao.delete(aNode);
}
}