/*
* See the NOTICE file distributed with this work for additional
* information regarding copyright ownership.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package com.celements.common.classes;
import static com.celements.common.test.CelementsTestUtils.*;
import static org.easymock.EasyMock.*;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.xwiki.configuration.ConfigurationSource;
import com.celements.common.test.AbstractComponentTest;
import com.celements.model.access.IModelAccessFacade;
import com.celements.model.classes.ClassDefinition;
import com.celements.model.classes.ClassPackage;
import com.celements.model.classes.TestClassDefinition;
import com.celements.model.classes.TestClassPackage;
import com.celements.model.classes.TestClassDefinitionRole;
import com.celements.model.classes.fields.ClassField;
import com.xpn.xwiki.doc.XWikiDocument;
import com.xpn.xwiki.objects.BaseCollection;
import com.xpn.xwiki.web.Utils;
public class DefaultXClassCreatorTest extends AbstractComponentTest {
private XClassCreator creator;
private ClassPackage classPackage;
private ClassDefinition classDef;
@Override
@Before
public void setUp() throws Exception {
super.setUp();
registerComponentMock(IModelAccessFacade.class);
registerComponentMock(ConfigurationSource.class);
creator = Utils.getComponent(XClassCreator.class);
classPackage = Utils.getComponent(ClassPackage.class,
TestClassPackage.NAME);
classDef = Utils.getComponent(TestClassDefinitionRole.class, TestClassDefinition.NAME);
}
@Test
public void test_createXClasses_notActive() throws Exception {
expect(getMock(ConfigurationSource.class).getProperty(
ClassPackage.CFG_SRC_KEY)).andReturn(Collections.emptyList()).anyTimes();
replayDefault();
creator.createXClasses();
verifyDefault();
}
@Test
public void test_createXClasses_blacklisted() throws Exception {
expect(getMock(ConfigurationSource.class).getProperty(
ClassPackage.CFG_SRC_KEY)).andReturn(Arrays.asList(
classPackage.getName())).anyTimes();
expect(getMock(ConfigurationSource.class).getProperty(ClassDefinition.CFG_SRC_KEY)).andReturn(
Arrays.asList(classDef.getName())).anyTimes();
replayDefault();
creator.createXClasses();
verifyDefault();
}
@Test
public void test_createXClasses() throws Exception {
XWikiDocument doc = new XWikiDocument(classDef.getClassRef());
expect(getMock(ConfigurationSource.class).getProperty(
ClassPackage.CFG_SRC_KEY)).andReturn(Arrays.asList(
classPackage.getName())).anyTimes();
expect(getMock(ConfigurationSource.class).getProperty(ClassDefinition.CFG_SRC_KEY)).andReturn(
null).anyTimes();
expect(getMock(IModelAccessFacade.class).exists(classDef.getClassRef())).andReturn(true).times(
2);
expect(getMock(IModelAccessFacade.class).getOrCreateDocument(eq(
classDef.getClassRef()))).andReturn(doc).times(2);
getMock(IModelAccessFacade.class).saveDocument(same(doc), eq("updated XClass"));
expectLastCall().once();
replayDefault();
creator.createXClasses();
creator.createXClasses(); // save is only called once
verifyDefault();
assertEquals(classDef.isInternalMapping(), doc.getXClass().hasInternalCustomMapping());
@SuppressWarnings("unchecked")
List<BaseCollection> xFields = new ArrayList<>(doc.getXClass().getFieldList());
assertEquals(classDef.getFields().size(), xFields.size());
int count = 0;
for (ClassField<?> field : classDef.getFields()) {
BaseCollection xField = xFields.get(count++);
assertNotNull(xField);
assertEquals(field.getName(), xField.getName());
}
}
}