/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.master.user.impl;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.fail;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.opengamma.DataDuplicationException;
import com.opengamma.DataNotFoundException;
import com.opengamma.DataVersionException;
import com.opengamma.id.ExternalId;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.id.ObjectId;
import com.opengamma.id.UniqueId;
import com.opengamma.master.user.ManageableUser;
import com.opengamma.util.test.TestGroup;
/**
* Test {@link InMemoryUserMaster}.
*/
@Test(groups = TestGroup.UNIT)
public class InMemoryUserMasterTest {
private static final String TEST_USER_1 = "testuser1";
private static final String TEST_USER_2 = "testuser2";
private static final String EMAIL_ADDRESS = "info@opengamma.com";
private static final ExternalId BLOOMBERG_SID = ExternalId.of("BloombergSid", "837283");
private static final ExternalId OTHER_USER_ID1 = ExternalId.of("OtherUserId", "sk03e47s");
private static final ExternalId OTHER_USER_ID2 = ExternalId.of("OtherUserId", "352378");
private static final ExternalIdBundle BUNDLE_FULL = ExternalIdBundle.of(BLOOMBERG_SID, OTHER_USER_ID1);
private InMemoryUserMaster master;
private ManageableUser addedUser1;
private ManageableUser addedUser2;
@BeforeMethod
public void setUp() {
master = new InMemoryUserMaster();
addedUser1 = new ManageableUser(TEST_USER_1);
addedUser1.setAlternateIds(BUNDLE_FULL);
addedUser1.setEmailAddress(EMAIL_ADDRESS);
UniqueId addedId1 = master.add(addedUser1);
addedUser1.setUniqueId(addedId1);
addedUser2 = new ManageableUser(TEST_USER_2);
addedUser2.setAlternateIds(OTHER_USER_ID2.toBundle());
UniqueId addedId2 = master.add(addedUser2);
addedUser2.setUniqueId(addedId2);
}
//-------------------------------------------------------------------------
public void test_getByName_match1() {
ManageableUser result = master.getByName(TEST_USER_1);
assertEquals(UniqueId.of("MemUsr", "1", "1"), result.getUniqueId());
assertEquals(addedUser1, result);
}
public void test_getByName_match2() {
ManageableUser result = master.getByName(TEST_USER_2);
assertEquals(UniqueId.of("MemUsr", "2", "1"), result.getUniqueId());
assertEquals(addedUser2, result);
}
public void test_getByName_matchCaseInsensitive() {
ManageableUser result = master.getByName("TestUser1");
assertEquals(UniqueId.of("MemUsr", "1", "1"), result.getUniqueId());
assertEquals(addedUser1, result);
}
@Test(expectedExceptions = DataNotFoundException.class)
public void test_getByName_noMatch() {
master.getByName("notfound");
}
//-------------------------------------------------------------------------
public void test_getById_match() {
ManageableUser result = master.getById(addedUser1.getObjectId());
assertEquals(UniqueId.of("MemUsr", "1", "1"), result.getUniqueId());
assertEquals(addedUser1, result);
}
@Test(expectedExceptions = DataNotFoundException.class)
public void test_getById_noMatch() {
master.getById(ObjectId.of("A", "B"));
}
//-------------------------------------------------------------------------
@Test
public void test_add() {
ManageableUser user = new ManageableUser("newuser");
UniqueId uniqueId = master.add(user);
user.setUniqueId(uniqueId);
assertEquals(user, master.getByName("newuser"));
assertEquals(addedUser1, master.getByName(TEST_USER_1));
assertEquals(addedUser2, master.getByName(TEST_USER_2));
}
@Test(expectedExceptions = DataDuplicationException.class)
public void test_add_alreadyExists() {
master.add(new ManageableUser(TEST_USER_1));
}
//-------------------------------------------------------------------------
@Test
public void test_update() {
ManageableUser updatedUser = addedUser1.clone();
updatedUser.setPasswordHash("foo");
UniqueId uniqueId = master.update(updatedUser);
updatedUser.setUniqueId(uniqueId);
assertEquals(UniqueId.of("MemUsr", "1", "2"), uniqueId);
assertEquals(updatedUser, master.getByName(TEST_USER_1));
assertEquals(addedUser2, master.getByName(TEST_USER_2));
}
@Test
public void test_update_rename() {
ManageableUser updatedUser = addedUser1.clone();
updatedUser.setUserName("newuser");
UniqueId uniqueId = master.update(updatedUser);
updatedUser.setUniqueId(uniqueId);
assertEquals(UniqueId.of("MemUsr", "1", "2"), uniqueId);
assertEquals(updatedUser, master.getByName("newuser"));
assertEquals(updatedUser, master.getByName(TEST_USER_1));
assertEquals(addedUser2, master.getByName(TEST_USER_2));
}
@Test(expectedExceptions = DataVersionException.class)
public void test_update_badVersion() {
ManageableUser updatedUser = addedUser1.clone();
updatedUser.setUniqueId(UniqueId.of("MemUsr", "1", "9"));
master.update(updatedUser);
}
@Test(expectedExceptions = DataDuplicationException.class)
public void test_update_rename_alreadyExists() {
ManageableUser updatedUser = addedUser1.clone();
updatedUser.setUserName(TEST_USER_2);
master.update(updatedUser);
}
//-------------------------------------------------------------------------
@Test
public void test_removeByName() {
master.removeByName(TEST_USER_1);
assertEquals(addedUser2, master.getByName(TEST_USER_2));
try {
master.getByName(TEST_USER_1);
fail();
} catch (DataNotFoundException ex) {
// expected
}
try {
master.getById(addedUser1.getObjectId());
fail();
} catch (DataNotFoundException ex) {
// expected
}
}
@Test(expectedExceptions = DataNotFoundException.class)
public void test_removeByName_notFound() {
master.removeByName("notfound");
}
//-------------------------------------------------------------------------
@Test
public void test_removeById() {
master.removeById(addedUser1.getObjectId());
assertEquals(addedUser2, master.getByName(TEST_USER_2));
try {
master.getById(addedUser1.getObjectId());
fail();
} catch (DataNotFoundException ex) {
// expected
}
try {
master.getByName(TEST_USER_1);
fail();
} catch (DataNotFoundException ex) {
// expected
}
master.removeById(addedUser1.getObjectId()); // idempotent
}
@Test(expectedExceptions = DataNotFoundException.class)
public void test_removeById_notFound() {
master.removeById(ObjectId.of("NOT", "FOUND"));
}
}