blob: a6e980ae737b863caba5fee69f9fd6c651b9cf12 [file] [log] [blame]
/********************************************************************************
* Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
*
* See the NOTICE file(s) distributed with this work for additional
* information regarding copyright ownership.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
********************************************************************************/
package org.eclipse.mdm.preferences.controller;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.security.Principal;
import java.util.List;
import javax.ejb.SessionContext;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.assertj.core.groups.Tuple;
import org.eclipse.mdm.preferences.entity.Preference;
import org.eclipse.mdm.preferences.entity.PreferenceMessage;
import org.eclipse.mdm.preferences.entity.PreferenceMessage.Scope;
import org.eclipse.persistence.config.PersistenceUnitProperties;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.google.common.collect.ImmutableMap;
public class PreferenceServiceTest {
private EntityManagerFactory factory;
private EntityManager em;
private SessionContext sessionContext = mock(SessionContext.class);
private PreferenceService service;
@Before
public void init() {
factory = Persistence.createEntityManagerFactory("preferenceTest", ImmutableMap
.of(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, "META-INF/persistence-test.xml"));
em = factory.createEntityManager();
Principal principal = mock(Principal.class);
when(principal.getName()).thenReturn("testUser");
when(sessionContext.getCallerPrincipal()).thenReturn(principal);
service = new PreferenceService(em, sessionContext);
}
@After
public void destroy() {
factory.close();
}
private void initData(Preference... preferences) {
EntityManager emgr = factory.createEntityManager();
emgr.getTransaction().begin();
emgr.createQuery("delete from Preference").executeUpdate();
for (Preference p : preferences) {
emgr.persist(p);
}
emgr.getTransaction().commit();
emgr.close();
}
@Test
public void testGetPreferences() {
initData(new Preference(null, null, "testGetPreferences", "myValue1"),
new Preference("MDMTEST", null, "testGetPreferences", "myValue2"),
new Preference(null, "testUser", "testGetPreferences", "myValue3"),
new Preference(null, "otherUser", "testGetPreferences", "myValue4"),
new Preference(null, null, "otherKey", "myValue5"));
assertThat(service.getPreferences(null, "testGetPreferences"))
.extracting("scope", "source", "user", "key", "value")
.containsExactlyInAnyOrder(new Tuple(Scope.SYSTEM, null, null, "testGetPreferences", "myValue1"),
new Tuple(Scope.SOURCE, "MDMTEST", null, "testGetPreferences", "myValue2"),
new Tuple(Scope.USER, null, "testUser", "testGetPreferences", "myValue3"));
}
@Test
public void testGetPreferencesForSystem() {
initData(new Preference(null, null, "testGetPreferencesSystem", "myValue"),
new Preference("MDMTEST", null, "testGetPreferencesSystem", "myValue"));
assertThat(service.getPreferences("system", "testGetPreferencesSystem"))
.extracting("scope", "source", "user", "key", "value")
.containsExactly(new Tuple(Scope.SYSTEM, null, null, "testGetPreferencesSystem", "myValue"));
}
@Test
public void testGetPreferencesForSource() {
initData(new Preference(null, "testUser", "testGetPreferencesForSource", "myValue"),
new Preference("MDM_OTHER", null, "testGetPreferencesForSource", "myValue"),
new Preference("MDMTEST", null, "testGetPreferencesForSource", "myValue"));
assertThat(service.getPreferences("source", "testGetPreferencesForSource"))
.extracting("scope", "source", "user", "key", "value").containsExactlyInAnyOrder(
new Tuple(Scope.SOURCE, "MDM_OTHER", null, "testGetPreferencesForSource", "myValue"),
new Tuple(Scope.SOURCE, "MDMTEST", null, "testGetPreferencesForSource", "myValue"));
}
@Test
public void testGetPreferencesForUser() {
initData(new Preference(null, "other", "testGetPreferencesForUser", "myValue"),
new Preference(null, "testUser", "testGetPreferencesForUser", "myValue"),
new Preference("MDMTEST", null, "testGetPreferencesForUser", "myValue"));
assertThat(service.getPreferences("user", "testGetPreferencesForUser"))
.extracting("scope", "source", "user", "key", "value")
.containsExactly(new Tuple(Scope.USER, null, "other", "testGetPreferencesForUser", "myValue"),
new Tuple(Scope.USER, null, "testUser", "testGetPreferencesForUser", "myValue"));
}
@Test
public void testGetPreferencesBySource() {
initData(new Preference("MDMTEST", null, "testGetPreferencesSource", "myValue"),
new Preference("MDM_OTHER", null, "testGetPreferencesSource", "myValue"));
assertThat(service.getPreferencesBySource("MDMTEST", "testGetPreferencesSource")).hasSize(1)
.extracting("scope", "source", "user", "key", "value")
.containsExactly(new Tuple(Scope.SOURCE, "MDMTEST", null, "testGetPreferencesSource", "myValue"));
}
@Test
public void testGetPreferencesBySourceKeyEmpty() {
initData(new Preference("MDMTEST", null, "testGetPreferencesSourceKeyEmpty", "myValue"),
new Preference("MDM_OTHER", null, "testGetPreferencesSourceKeyEmpty", "myValue"));
assertThat(service.getPreferencesBySource("MDMTEST", "")).hasSize(1)
.extracting("scope", "source", "user", "key", "value").containsExactly(
new Tuple(Scope.SOURCE, "MDMTEST", null, "testGetPreferencesSourceKeyEmpty", "myValue"));
}
@Test
public void testDeletePreference() {
initData(new Preference(null, null, "testDeletePreference", "myValue"));
List<PreferenceMessage> listBeforeDelete = service.getPreferences("system", "testDeletePreference");
assertThat(listBeforeDelete).hasSize(1);
em.getTransaction().begin();
service.deletePreference(listBeforeDelete.get(0).getId());
em.getTransaction().commit();
List<PreferenceMessage> listAfterDelete = service.getPreferences("system", "testDeletePreference");
assertThat(listAfterDelete).hasSize(0);
}
@Test
public void testSaveSystemScope() {
PreferenceMessage pref = new PreferenceMessage();
pref.setScope(Scope.SYSTEM);
pref.setKey("testSaveSystemScope");
pref.setValue("myValue");
em.getTransaction().begin();
PreferenceMessage saved = service.save(pref);
em.getTransaction().commit();
assertThat(saved).hasNoNullFieldsOrPropertiesExcept("source", "user")
.hasFieldOrPropertyWithValue("scope", Scope.SYSTEM)
.hasFieldOrPropertyWithValue("key", "testSaveSystemScope")
.hasFieldOrPropertyWithValue("value", "myValue");
}
@Test
public void testSaveSourceScope() {
PreferenceMessage pref = new PreferenceMessage();
pref.setScope(Scope.SOURCE);
pref.setSource("MDMTEST");
pref.setKey("testSaveSourceScope");
pref.setValue("myValue");
em.getTransaction().begin();
PreferenceMessage saved = service.save(pref);
em.getTransaction().commit();
assertThat(saved).hasNoNullFieldsOrPropertiesExcept("user").hasFieldOrPropertyWithValue("scope", Scope.SOURCE)
.hasFieldOrPropertyWithValue("source", "MDMTEST")
.hasFieldOrPropertyWithValue("key", "testSaveSourceScope")
.hasFieldOrPropertyWithValue("value", "myValue");
}
@Test
public void testSaveUserScope() {
PreferenceMessage pref = new PreferenceMessage();
pref.setScope(Scope.USER);
pref.setKey("testSaveUserScope");
pref.setValue("myValue");
em.getTransaction().begin();
PreferenceMessage saved = service.save(pref);
em.getTransaction().commit();
assertThat(saved).hasNoNullFieldsOrPropertiesExcept("source").hasFieldOrPropertyWithValue("scope", Scope.USER)
.hasFieldOrPropertyWithValue("user", "testUser").hasFieldOrPropertyWithValue("key", "testSaveUserScope")
.hasFieldOrPropertyWithValue("value", "myValue");
}
@Test
public void testSaveOverrideExisting() {
initData(new Preference(null, null, "testSaveOverrideExisting", "myValue"));
PreferenceMessage pref = new PreferenceMessage();
pref.setScope(Scope.SYSTEM);
pref.setKey("testSaveOverrideExisting");
pref.setValue("myValue");
em.getTransaction().begin();
PreferenceMessage saved = service.save(pref);
em.getTransaction().commit();
assertThat(saved).hasNoNullFieldsOrPropertiesExcept("source", "user")
.hasFieldOrPropertyWithValue("scope", Scope.SYSTEM)
.hasFieldOrPropertyWithValue("key", "testSaveOverrideExisting")
.hasFieldOrPropertyWithValue("value", "myValue");
assertThat(service.getPreferences("System", "testSaveOverrideExisting")).hasSize(1);
}
}