package com.idega.content.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javax.jcr.Credentials;
import javax.jcr.ItemExistsException;
import javax.jcr.LoginException;
import javax.jcr.Node;
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.SimpleCredentials;
import javax.jcr.lock.LockException;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.nodetype.NoSuchNodeTypeException;
import javax.jcr.version.VersionException;
import junit.textui.TestRunner;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.idega.core.content.IdegaRepository;
import com.idega.core.test.base.IdegaBaseTest;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class RepositoryTest extends IdegaBaseTest{
@Autowired
private IdegaRepository repository;
private Session session;
Credentials credentials = new SimpleCredentials("root","".toCharArray());
@Override
@Before
public void setUp() throws Exception {
createNewSession();
}
private void createNewSession() throws LoginException, RepositoryException {
session = repository.login(credentials);
}
private Session getSession(){
return session;
}
@Test
public void testRepositoryNodeCreate() throws RepositoryException{
Node filesNode = getSession().getRootNode().getNode("files");
Node testNode;
try{
testNode = filesNode.getNode("testNode");
}
catch(PathNotFoundException pe){
testNode = filesNode.addNode("testNode");
testNode.save();
getSession().save();
}
assertNotNull(testNode);
}
@Test
public void testRepositoryFolderCreate() throws RepositoryException{
Node testFolder = createOrFindTestFolder();
assertNotNull(testFolder);
}
private Node createOrFindTestFolder() throws PathNotFoundException,
RepositoryException, ItemExistsException, NoSuchNodeTypeException,
LockException, VersionException, ConstraintViolationException {
Node filesNode = getSession().getRootNode().getNode("files");
Node testFolder;
try{
testFolder = filesNode.getNode("testFolder");
testFolder.save();
}
catch(PathNotFoundException pe){
testFolder = filesNode.addNode("testFolder","nt:folder");
}
return testFolder;
}
@Test
public void testRepositoryFolderDelete() throws RepositoryException{
Node testFolder=createOrFindTestFolder();
testFolder.remove();
//getSession().save();
Node filesNode = getSession().getRootNode().getNode("files");
boolean deleted=false;
try{
testFolder = filesNode.getNode("testFolder");
}
catch(PathNotFoundException pe){
//testFolder = filesNode.addNode("testFolder","nt:folder");
deleted=true;
}
assertTrue(deleted);
}
@Test
public void testRepositoryFileCreate() throws PathNotFoundException, ItemExistsException, NoSuchNodeTypeException, LockException, VersionException, ConstraintViolationException, RepositoryException, FileNotFoundException{
repositoryFileCreateOrUpdate(false);
}
@Test
public void testRepositoryFileUpdate() throws PathNotFoundException, ItemExistsException, NoSuchNodeTypeException, LockException, VersionException, ConstraintViolationException, RepositoryException, FileNotFoundException{
repositoryFileCreateOrUpdate(true);
}
@Test
public void testRepositoryFileUpdateWithNewSession() throws PathNotFoundException, ItemExistsException, NoSuchNodeTypeException, LockException, VersionException, ConstraintViolationException, RepositoryException, FileNotFoundException{
createNewSession();
repositoryFileCreateOrUpdate(true);
}
public void repositoryFileCreateOrUpdate(boolean alreadyExists) throws PathNotFoundException, ItemExistsException, NoSuchNodeTypeException, LockException, VersionException, ConstraintViolationException, RepositoryException, FileNotFoundException{
Node testFolder=createOrFindTestFolder();
Node fileNode;
Node contentNode;
String fileTestPath = "src/test/resources/testfile.pdf";
try{
try{
//fileNode = rootNode.getNode("/files/cms/themes/Multi_FreeStyle_III/Multi_FreeStyle_III.rwtheme/Contents/css/font/font1.css");
fileNode = testFolder.getNode("testfile.pdf");
if(alreadyExists){
assertEquals(alreadyExists, true);
}
System.out.println("Node="+fileNode.getName()+" found");
String nodeType = fileNode.getPrimaryNodeType().getName();
if(nodeType.equals("nt:file")){
System.out.println("NodeType of "+fileNode.getName()+" is "+nodeType);
}
else{
System.err.println("Error: NodeType of "+fileNode.getName()+" is "+nodeType);
}
}
catch(PathNotFoundException ne){
if(alreadyExists){
assertEquals(alreadyExists, false);
}
fileNode = testFolder.addNode("testfile.pdf", "nt:file");
System.out.println("Node="+fileNode.getName()+" not found - created");
//fileNode.save();
}
try{
//fileNode = rootNode.getNode("/files/cms/themes/Multi_FreeStyle_III/Multi_FreeStyle_III.rwtheme/Contents/css/font/font1.css");
contentNode = fileNode.getNode("jcr:content");
System.out.println("Node="+contentNode.getName()+" found");
}
catch(PathNotFoundException ne){
contentNode = fileNode.addNode("jcr:content","nt:unstructured");
System.out.println("Node="+contentNode.getName()+" not found - created");
}
FileInputStream fileinstream = new FileInputStream(new File(fileTestPath));
contentNode.setProperty("jcr:data",fileinstream);
contentNode.setProperty("jcr:mimetype","application/pdf");
contentNode.save();
assertNotNull(contentNode);
}
finally{}
}
public static void main(String[] args) throws Exception{
//SpringJUnit4ClassRunner classRunner = new SpringJUnit4ClassRunner(RepositoryTest.class);
//classRunner.run(notifier)
TestRunner.run(new RepositoryTest());
}
}