/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.api.user.server.spi.tck;
import com.google.common.collect.ImmutableMap;
import org.eclipse.che.api.user.server.model.impl.UserImpl;
import org.eclipse.che.api.user.server.spi.PreferenceDao;
import org.eclipse.che.commons.lang.Pair;
import org.eclipse.che.commons.test.tck.TckListener;
import org.eclipse.che.commons.test.tck.repository.TckRepository;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
import javax.inject.Inject;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static java.util.Collections.emptyList;
import static java.util.Collections.emptyMap;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
/**
* Tests {@link PreferenceDao} contract.
*
* @author Anton Korneta
*/
@Listeners(TckListener.class)
@Test(suiteName = PreferenceDaoTest.SUITE_NAME)
public class PreferenceDaoTest {
public static final String SUITE_NAME = "PreferenceDaoTck";
private static final int ENTRY_COUNT = 5;
private List<Pair<String, Map<String, String>>> userPreferences;
@Inject
private PreferenceDao preferenceDao;
@Inject
private TckRepository<UserImpl> userTckRepository;
@Inject
private TckRepository<Pair<String, Map<String, String>>> preferenceTckRepository;
@BeforeMethod
private void setUp() throws Exception {
userPreferences = new ArrayList<>(ENTRY_COUNT);
UserImpl[] users = new UserImpl[ENTRY_COUNT];
for (int index = 0; index < ENTRY_COUNT; index++) {
String userId = "userId_" + index;
users[index] = new UserImpl(userId, "email_" + userId, "name_" + userId, "password", emptyList());
final Map<String, String> prefs = new HashMap<>();
prefs.put("preference1", "value");
prefs.put("preference2", "value");
prefs.put("preference3", "value");
userPreferences.add(Pair.of(userId, prefs));
}
userTckRepository.createAll(Arrays.asList(users));
preferenceTckRepository.createAll(userPreferences);
}
@AfterMethod
private void cleanUp() throws Exception {
preferenceTckRepository.removeAll();
userTckRepository.removeAll();
}
@Test(dependsOnMethods = {"shouldGetPreference", "shouldRemovePreference"})
public void shouldSetPreference() throws Exception {
final String userId = userPreferences.get(0).first;
final Map<String, String> prefs = ImmutableMap.of("key", "value");
preferenceDao.remove(userId);
preferenceDao.setPreferences(userId, prefs);
assertEquals(preferenceDao.getPreferences(userId), prefs);
}
@Test(expectedExceptions = NullPointerException.class)
public void shouldThrowNpeWhenSetPreferenceUserNull() throws Exception {
preferenceDao.setPreferences(null, ImmutableMap.of("key", "value"));
}
@Test(expectedExceptions = NullPointerException.class)
public void shouldThrowNpeWhenSetPreferenceUpdateNull() throws Exception {
preferenceDao.setPreferences(userPreferences.get(0).first, null);
}
@Test(dependsOnMethods = "shouldGetPreference")
public void shouldOverridePreference() throws Exception {
final String userId = userPreferences.get(0).first;
final Map<String, String> update = ImmutableMap.of("key", "value");
preferenceDao.setPreferences(userId, update);
assertEquals(preferenceDao.getPreferences(userId), update);
}
@Test(dependsOnMethods = "shouldGetPreference")
public void shouldUpdatePreference() throws Exception {
final String userId = userPreferences.get(0).first;
final Map<String, String> update = userPreferences.get(0).second;
userPreferences.get(0).second.put("preference4", "value");
preferenceDao.setPreferences(userId, update);
assertEquals(preferenceDao.getPreferences(userId), update);
}
@Test(dependsOnMethods = "shouldGetPreference")
public void shouldRemovePreferenceWhenUpdateIsEmpty() throws Exception {
final String userId = userPreferences.get(0).first;
final Map<String, String> update = emptyMap();
preferenceDao.setPreferences(userId, update);
assertEquals(preferenceDao.getPreferences(userId), update);
}
@Test
public void shouldGetPreference() throws Exception {
final Pair<String, Map<String, String>> prefs = userPreferences.get(0);
assertEquals(preferenceDao.getPreferences(prefs.first), prefs.second);
}
@Test
public void shouldGetPreferenceWithFilter() throws Exception {
final Pair<String, Map<String, String>> prefs = userPreferences.get(0);
assertEquals(preferenceDao.getPreferences(prefs.first, "\\w*"), prefs.second);
}
@Test(expectedExceptions = NullPointerException.class)
public void shouldThrowNpeWhenGetPreferenceWithNullFilter() throws Exception {
preferenceDao.getPreferences(userPreferences.get(0).first, null);
}
@Test(expectedExceptions = NullPointerException.class)
public void shouldThrowNpeWhenGetPreferenceWithFilterAndNullUser() throws Exception {
preferenceDao.getPreferences(null, "\\w*");
}
@Test
public void shouldReturnEmptyPreferenceMapWhenNoMatchedResults() throws Exception {
assertEquals(preferenceDao.getPreferences(userPreferences.get(0).first, "pattern"), emptyMap());
}
@Test(dependsOnMethods = "shouldRemovePreference")
public void shouldReturnEmptyPreferenceMapWhenNoPreferenceUserFound() throws Exception {
final String userId = userPreferences.get(0).first;
preferenceDao.remove(userId);
assertEquals(preferenceDao.getPreferences(userId, "\\w*"), emptyMap());
}
@Test
public void shouldReturnPreferenceWhenFilterEmpty() throws Exception {
assertEquals(preferenceDao.getPreferences(userPreferences.get(0).first, ""),
userPreferences.get(0).second);
}
@Test
public void shouldReturnFilteredPreferences() throws Exception {
final String userId = userPreferences.get(0).first;
final Map.Entry<String, String> preference = userPreferences.get(0).second.entrySet()
.iterator()
.next();
assertEquals(preferenceDao.getPreferences(userId, preference.getKey()),
ImmutableMap.of(preference.getKey(), preference.getValue()));
}
@Test(dependsOnMethods = {"shouldGetPreference", "shouldRemovePreferenceWhenUpdateIsEmpty"})
public void shouldGetEmptyPreferenceMapWhenPreferenceForUserNotFound() throws Exception {
final String userId = userPreferences.get(0).first;
preferenceDao.setPreferences(userId, emptyMap());
assertTrue(preferenceDao.getPreferences(userId).isEmpty());
}
@Test(expectedExceptions = NullPointerException.class)
public void shouldThrowNpeWhenGetPreferenceUserNull() throws Exception {
preferenceDao.getPreferences(null);
}
@Test(dependsOnMethods = "shouldGetPreference")
public void shouldRemovePreference() throws Exception {
final String userId = userPreferences.get(0).first;
preferenceDao.remove(userId);
assertTrue(preferenceDao.getPreferences(userId).isEmpty());
}
@Test(expectedExceptions = NullPointerException.class)
public void shouldThrowNpeWhenRemovePreferenceUserNull() throws Exception {
preferenceDao.remove(null);
}
}