/*******************************************************************************
* 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.model.impl;
import com.google.common.collect.ImmutableMap;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import java.util.ArrayList;
import java.util.HashMap;
import static java.util.Collections.singletonList;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
/**
* Tests for {@link UserImpl} and {@link ProfileImpl}.
*
* @author Yevhenii Voevodin
*/
public class DataObjectsTest {
@Test
public void testUserCreation() {
final UserImpl user = new UserImpl("user123",
"user@company.com",
"user_name",
"password",
singletonList("google:id"));
assertEquals(user.getId(), "user123");
assertEquals(user.getEmail(), "user@company.com");
assertEquals(user.getName(), "user_name");
assertEquals(user.getPassword(), "password");
assertEquals(user.getAliases(), singletonList("google:id"));
}
@Test
public void testUserModification() throws Exception {
final UserImpl user = new UserImpl("user123",
"user@company.com",
"user_name",
"password",
singletonList("google:id"));
user.setName("new_name");
user.setEmail("new_email@company.com");
user.setPassword("new-password");
user.setAliases(singletonList("new-alias"));
assertEquals(user.getName(), "new_name");
assertEquals(user.getEmail(), "new_email@company.com");
assertEquals(user.getPassword(), "new-password");
assertEquals(user.getAliases(), singletonList("new-alias"));
}
@Test
public void testUserCopyConstructor() throws Exception {
final UserImpl user = new UserImpl("user123",
"user@company.com",
"user_name",
"password",
new ArrayList<>(singletonList("google:id")));
final UserImpl copy = new UserImpl(user);
user.getAliases().add("new-alias");
assertEquals(copy.getName(), "user_name");
assertEquals(copy.getEmail(), "user@company.com");
assertEquals(copy.getPassword(), "password");
assertEquals(copy.getAliases(), singletonList("google:id"));
assertFalse(copy.getAliases().contains("new-alias"));
}
@Test
public void testProfileCreation() {
final ProfileImpl profile = new ProfileImpl("user123",
ImmutableMap.of("attribute1", "value1",
"attribute2", "value2",
"attribute3", "value3"));
assertEquals(profile.getUserId(), "user123");
assertEquals(profile.getAttributes(), ImmutableMap.of("attribute1", "value1",
"attribute2", "value2",
"attribute3", "value3"));
}
@Test
public void testProfileModification() throws Exception {
final ProfileImpl profile = new ProfileImpl("user123",
ImmutableMap.of("attribute1", "value1",
"attribute2", "value2",
"attribute3", "value3"));
profile.setAttributes(ImmutableMap.of("attribute1", "value1"));
assertEquals(profile.getAttributes(), ImmutableMap.of("attribute1", "value1"));
}
@Test
public void testProfileCopyConstructor() throws Exception {
final ProfileImpl profile = new ProfileImpl("user123",
new HashMap<>(ImmutableMap.of("attribute1", "value1",
"attribute2", "value2",
"attribute3", "value3")));
final ProfileImpl copy = new ProfileImpl(profile);
profile.getAttributes().put("new-attribute", "new-value");
assertEquals(copy.getUserId(), "user123");
assertEquals(copy.getAttributes(), ImmutableMap.of("attribute1", "value1",
"attribute2", "value2",
"attribute3", "value3"));
assertFalse(copy.getAttributes().containsKey("new-attribute"));
}
@Test(dataProvider = "reflexivenessProvider")
@SuppressWarnings("all")
public void testReflexiveness(Object obj) throws Exception {
assertTrue(obj.equals(obj));
}
@Test(dataProvider = "symmetryDataProvider")
public void testSymmetry(Object object1, Object object2) throws Exception {
assertTrue(object1.equals(object2));
assertTrue(object2.equals(object1));
}
@Test(dataProvider = "transitivityDataProvider")
public void testTransitivity(Object object1, Object object2, Object object3) {
assertTrue(object1.equals(object2));
assertTrue(object2.equals(object3));
assertTrue(object3.equals(object1));
}
@Test(dataProvider = "consistencyDataProvider")
public void testConsistency(Object object1, Object object2) {
assertTrue(object1.equals(object2));
}
@Test(dataProvider = "reflexivenessProvider")
@SuppressWarnings("all")
public void testNotEqualityToNull(Object object) throws Exception {
assertFalse(object.equals(null));
}
@Test(dependsOnMethods = {"testReflexiveness", "testSymmetry", "testTransitivity", "testConsistency", "testNotEqualityToNull"})
public void testHashCodeContract() throws Exception {
final UserImpl user1 = new UserImpl("user123",
"user@company.com",
"user_name",
"password",
null);
final UserImpl user2 = new UserImpl("user123",
"user@company.com",
"user_name",
"password",
new ArrayList<>());
assertEquals(user1.hashCode(), user2.hashCode());
}
@DataProvider(name = "reflexivenessProvider")
public Object[][] singleObjectProvider() {
return new Object[][] {
{
new UserImpl("user123", "user@company.com", "user_name", "password", singletonList("google:id"))
},
{
new ProfileImpl("user123", ImmutableMap.of("attribute1", "value1",
"attribute2", "value2",
"attribute3", "value3"))
}
};
}
@DataProvider(name = "symmetryDataProvider")
public Object[][] symmetryDataProvider() {
return new Object[][] {
{
new UserImpl("user123", "user@company.com", "user_name", "password", singletonList("google:id")),
new UserImpl("user123", "user@company.com", "user_name", "password", singletonList("google:id"))
},
{
new ProfileImpl("user123", ImmutableMap.of("attribute1", "value1")),
new ProfileImpl("user123", ImmutableMap.of("attribute1", "value1"))
}
};
}
@DataProvider(name = "transitivityDataProvider")
public Object[][] transitivityDataProvider() {
return new Object[][] {
{
new UserImpl("user123", "user@company.com", "user_name", "password", null),
new UserImpl("user123", "user@company.com", "user_name", "password", new ArrayList<>()),
new UserImpl("user123", "user@company.com", "user_name", "password", null)
},
{
new ProfileImpl("user123", ImmutableMap.of("attribute1", "value1")),
new ProfileImpl("user123", ImmutableMap.of("attribute1", "value1")),
new ProfileImpl("user123", ImmutableMap.of("attribute1", "value1"))
}
};
}
@DataProvider(name = "consistencyDataProvider")
public Object[][] consistencyDatProvider() {
return new Object[][] {
{
new UserImpl("user123", "user@company.com", "user_name", "password", null),
new UserImpl("user123", "user@company.com", "user_name", "password", new ArrayList<>())
},
{
new ProfileImpl("user123", null),
new ProfileImpl("user123", new HashMap<>())
}
};
}
}