package com.github.dynamicextensionsalfresco.models;
import org.alfresco.repo.dictionary.DictionaryDAO;
import org.alfresco.repo.dictionary.M2Model;
import org.jetbrains.annotations.NotNull;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import java.util.List;
import static java.util.Arrays.asList;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.*;
/**
* {@link ModelRegistrar} unit test.
*
* @author Laurent Van der Linden
*
*/
public class ModelRegistrarTest {
private DAOModelRegistrar daoModelRegistrar;
private DictionaryDAO dictionaryDAOMock;
private List<M2ModelResource> models;
@Before
public void setup() {
dictionaryDAOMock = mock(DictionaryDAO.class);
daoModelRegistrar = new DAOModelRegistrar(dictionaryDAOMock, new M2ModelListProvider() {
@NotNull
@Override
public List<M2ModelResource> getModels() {
return models;
}
});
}
/**
* Tests {@link ModelRegistrar#registerModels()}.
*/
@Test
public void testRegisterDependantModels() {
// test regular dependant models
final M2Model user = M2Model.createModel("user");
final M2Model provider = M2Model.createModel("provider");
final M2Model superProvider = M2Model.createModel("superprovider");
models = asList(
new M2ModelResource(null, user),
new M2ModelResource(null, provider),
new M2ModelResource(null, superProvider)
);
user.createImport("http://www.alfresco.org/model/provider/1.0", "provider");
provider.createNamespace("http://www.alfresco.org/model/provider/1.0", "provider");
provider.createImport("http://www.alfresco.org/model/superprovider/1.0", "superprovider");
superProvider.createNamespace("http://www.alfresco.org/model/superprovider/1.0", "superprovider");
final ArgumentCaptor<M2Model> modelParameter = ArgumentCaptor.forClass(M2Model.class);
daoModelRegistrar.registerModels();
verify(dictionaryDAOMock, times(3)).putModel(modelParameter.capture());
final List<M2Model> allValues = modelParameter.getAllValues();
assertEquals(superProvider, allValues.get(0));
assertEquals(provider, allValues.get(1));
assertEquals(user, allValues.get(2));
}
/**
* Tests {@link ModelRegistrar#registerModels()}.
*/
@Test(expected = IllegalArgumentException.class)
public void testCircularReferenceModels() {
final M2Model user = M2Model.createModel("user");
final M2Model provider = M2Model.createModel("provider");
models = asList(
new M2ModelResource(null, user),
new M2ModelResource(null, provider)
);
// create bidirectional dependency between provider and user
user.createNamespace("http://www.alfresco.org/model/user/1.0", "provider");
user.createImport("http://www.alfresco.org/model/provider/1.0", "provider");
provider.createNamespace("http://www.alfresco.org/model/provider/1.0", "provider");
provider.createImport("http://www.alfresco.org/model/user/1.0", "user");
daoModelRegistrar.registerModels();
}
}