/*
* Copyright 2007 Sun Microsystems, Inc.
*
* 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.
*/
package com.rometools.propono.atom.common;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
/**
* Tests reading and writing of service document, no server needed.
*/
public class AtomServiceTest extends TestCase {
public AtomServiceTest(final String testName) {
super(testName);
}
@Override
protected void setUp() throws Exception {
}
@Override
protected void tearDown() throws Exception {
}
public static Test suite() {
final TestSuite suite = new TestSuite(AtomServiceTest.class);
return suite;
}
/**
* Test of documentToService method, of class AtomService.
*/
public void testDocumentToService() {
try {
// Load service document from disk
final SAXBuilder builder = new SAXBuilder();
final Document document = builder.build(this.getClass().getResourceAsStream("/servicedoc1.xml"));
assertNotNull(document);
final AtomService service = AtomService.documentToService(document);
int workspaceCount = 0;
// Verify that service contains expected workspaces, collections and categories
for (final Object element : service.getWorkspaces()) {
final Workspace space = (Workspace) element;
assertNotNull(space.getTitle());
workspaceCount++;
for (final Object element2 : space.getCollections()) {
final Collection col = (Collection) element2;
assertNotNull(col.getTitle());
assertNotNull(col.getHrefResolved());
int catCount = 0;
if (!col.getCategories().isEmpty()) {
for (final Object element3 : col.getCategories()) {
final Categories cats = (Categories) element3;
catCount += cats.getCategories().size();
assertTrue(catCount > 0);
}
}
}
}
assertTrue(workspaceCount > 0);
} catch (final Exception e) {
e.printStackTrace();
fail();
}
}
/**
* Test of documentToService method, of class AtomService.
*/
public void testServiceToDocument() {
try {
// Create service with workspace and collections
final AtomService service = new AtomService();
final Workspace workspace1 = new Workspace("workspace1", null);
final Workspace workspace2 = new Workspace("workspace1", null);
service.addWorkspace(workspace1);
service.addWorkspace(workspace2);
final Collection collection11 = new Collection("collection11", null, "http://example.com/app/col11");
final Collection collection12 = new Collection("collection12", null, "http://example.com/app/col12");
workspace1.addCollection(collection11);
workspace1.addCollection(collection12);
final Collection collection21 = new Collection("collection21", null, "http://example.com/app/col21");
final Collection collection22 = new Collection("collection22", null, "http://example.com/app/col22");
workspace2.addCollection(collection21);
workspace2.addCollection(collection22);
// TODO: add categories at collection level
// Convert to JDOM document
final Document document = service.serviceToDocument();
// verify that JDOM document contains service, workspace and collection
assertEquals("service", document.getRootElement().getName());
int workspaceCount = 0;
for (final Object element : document.getRootElement().getChildren()) {
final Element elem = (Element) element;
if ("workspace".equals(elem.getName())) {
workspaceCount++;
}
boolean workspaceTitle = false;
int collectionCount = 0;
for (final Object element2 : elem.getChildren()) {
final Element colelem = (Element) element2;
if ("title".equals(colelem.getName())) {
workspaceTitle = true;
} else if ("collection".equals(colelem.getName())) {
collectionCount++;
}
// TODO: test for categories at the collection level
}
assertTrue(workspaceTitle);
assertTrue(collectionCount > 0);
}
assertTrue(workspaceCount > 0);
} catch (final Exception e) {
e.printStackTrace();
fail();
}
}
}