blob: a6adacab09a7759526ad0f866badfde60886eb79 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011-2019 EclipseSource Muenchen GmbH and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Lucas Koehler - initial API and implementation
* Christian W. Damus - bug 546974
******************************************************************************/
package org.eclipse.emfforms.internal.core.services.datatemplate;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.IOException;
import java.util.Set;
import javax.inject.Named;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IContributor;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emfforms.bazaar.Bid;
import org.eclipse.emfforms.bazaar.Create;
import org.eclipse.emfforms.core.services.datatemplate.TemplateLoaderService;
import org.eclipse.emfforms.core.services.datatemplate.test.model.audit.AdminUser;
import org.eclipse.emfforms.core.services.datatemplate.test.model.audit.AuditFactory;
import org.eclipse.emfforms.core.services.datatemplate.test.model.audit.AuditPackage;
import org.eclipse.emfforms.core.services.datatemplate.test.model.audit.GuestUser;
import org.eclipse.emfforms.core.services.datatemplate.test.model.audit.RegisteredUser;
import org.eclipse.emfforms.core.services.datatemplate.test.model.audit.User;
import org.eclipse.emfforms.core.services.datatemplate.test.model.audit.UserGroup;
import org.eclipse.emfforms.datatemplate.DataTemplateFactory;
import org.eclipse.emfforms.datatemplate.Template;
import org.eclipse.emfforms.spi.common.report.ReportService;
import org.junit.Before;
import org.junit.Test;
/**
* JUnit tests for {@link XmiTemplateProvider}.
*
* @author Lucas Koehler
*
*/
public class XmiTemplateProvider_Test {
private XmiTemplateProvider provider;
private Template adminTemplate;
private Template guestTemplate;
private Template registeredTemplate;
@Before
public void setUp() {
adminTemplate = DataTemplateFactory.eINSTANCE.createTemplate();
adminTemplate.setName("Admin Template"); //$NON-NLS-1$
guestTemplate = DataTemplateFactory.eINSTANCE.createTemplate();
guestTemplate.setName("Guest Template"); //$NON-NLS-1$
registeredTemplate = DataTemplateFactory.eINSTANCE.createTemplate();
registeredTemplate.setName("Registered Template"); //$NON-NLS-1$
final AdminUser adminUser = AuditFactory.eINSTANCE.createAdminUser();
adminUser.setLogin("admin"); //$NON-NLS-1$
final GuestUser guestUser = AuditFactory.eINSTANCE.createGuestUser();
guestUser.setLogin("guest"); //$NON-NLS-1$
final RegisteredUser registeredUser = AuditFactory.eINSTANCE.createRegisteredUser();
registeredUser.setLogin("registered"); //$NON-NLS-1$
adminTemplate.setInstance(adminUser);
guestTemplate.setInstance(guestUser);
registeredTemplate.setInstance(registeredUser);
provider = new XmiTemplateProvider();
provider.setReportService(mock(ReportService.class));
provider.registerTemplate(adminTemplate);
provider.registerTemplate(guestTemplate);
provider.registerTemplate(registeredTemplate);
}
@Test
public void testCanProvideTemplates() {
final UserGroup group = AuditFactory.eINSTANCE.createUserGroup();
assertTrue(provider.canProvideTemplates(group, AuditPackage.Literals.USER_GROUP__ADMINS));
assertTrue(provider.canProvideTemplates(group, AuditPackage.Literals.USER_GROUP__USERS));
assertTrue(provider.canProvideTemplates(group, AuditPackage.Literals.USER__DELEGATES));
assertFalse(provider.canProvideTemplates(group, AuditPackage.Literals.USER__SUB_USERS));
}
@Test
public void testProvideTemplates() {
final UserGroup group = AuditFactory.eINSTANCE.createUserGroup();
final User user = AuditFactory.eINSTANCE.createGuestUser();
// Only the template for admin matches
final Set<Template> adminSet = provider.provideTemplates(group, AuditPackage.Literals.USER_GROUP__ADMINS);
assertEquals(1, adminSet.size());
assertEquals(adminTemplate, adminSet.iterator().next());
// Only the template for guest matches
final Set<Template> guestSet = provider.provideTemplates(group, AuditPackage.Literals.USER_GROUP__GUESTS);
assertEquals(1, guestSet.size());
assertEquals(guestTemplate, guestSet.iterator().next());
// The templates for registered and admin (sub class of registered) match
final Set<Template> registeredSet = provider.provideTemplates(group,
AuditPackage.Literals.USER_GROUP__REGISTERED_USERS);
assertEquals(2, registeredSet.size());
assertTrue(registeredSet.contains(adminTemplate));
assertTrue(registeredSet.contains(registeredTemplate));
// The template for admin (sub class of privileged) matches
final Set<Template> privilegedSet = provider.provideTemplates(group, AuditPackage.Literals.USER_GROUP__ADMINS);
assertEquals(1, privilegedSet.size());
assertEquals(adminTemplate, privilegedSet.iterator().next());
// All templates match (all other user classes are sub classes of User)
final Set<Template> userSet = provider.provideTemplates(group, AuditPackage.Literals.USER_GROUP__USERS);
assertEquals(3, userSet.size());
assertTrue(userSet.contains(adminTemplate));
assertTrue(userSet.contains(registeredTemplate));
assertTrue(userSet.contains(guestTemplate));
// No templates matches for sub-user
final Set<Template> userGroupSet = provider.provideTemplates(user, AuditPackage.Literals.USER__SUB_USERS);
assertEquals(0, userGroupSet.size());
}
@SuppressWarnings("nls")
@Test
public void testTemplateLoaders() throws IOException {
final IExtensionRegistry reg = mock(IExtensionRegistry.class);
final URI uri = URI.createPlatformPluginURI("datatemplate.test/templates/whatever.xmi", true);
final String contributorID = "datatemplate.test";
final IConfigurationElement config = mock(IConfigurationElement.class);
final IContributor contributor = mock(IContributor.class);
when(contributor.getName()).thenReturn(contributorID);
when(config.getContributor()).thenReturn(contributor);
when(config.getAttribute("file")).thenReturn("/templates/whatever.xmi");
final IConfigurationElement[] configs = { config };
when(reg.getConfigurationElementsFor("org.eclipse.emfforms.core.services.datatemplate.xmi"))
.thenReturn(configs);
provider.setExtensionRegistry(reg);
final TemplateLoaderService loader = mock(TemplateLoaderService.class);
class LoaderProvider implements TemplateLoaderService.Provider {
@Bid
public double bid(@Named(CONTRIBUTOR_ID) String contributor, URI uri) {
return Double.POSITIVE_INFINITY;
}
@Create
public TemplateLoaderService create() {
return loader;
}
}
final LoaderProvider loaderProvider = spy(new LoaderProvider());
provider.addLoaderServiceProvider(loaderProvider);
provider.activate();
verify(loaderProvider).bid(contributorID, uri);
verify(loader).loadTemplates(uri);
}
}