// $HeadURL$
// $Id$
//
// Copyright © 2006, 2010, 2011, 2012 by the President and Fellows of Harvard College.
//
// Screensaver is an open-source project developed by the ICCB-L and NSRB labs
// at Harvard Medical School. This software is distributed under the terms of
// the GNU General Public License.
package edu.harvard.med.screensaver.ui.users;
import java.util.List;
import java.util.Map;
import javax.faces.model.DataModel;
import org.apache.log4j.Logger;
import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import edu.harvard.med.screensaver.db.GenericEntityDAO;
import edu.harvard.med.screensaver.db.SchemaUtil;
import edu.harvard.med.screensaver.db.UsersDAO;
import edu.harvard.med.screensaver.model.users.AdministratorUser;
import edu.harvard.med.screensaver.model.users.ChecklistItem;
import edu.harvard.med.screensaver.model.users.ChecklistItemEvent;
import edu.harvard.med.screensaver.model.users.ChecklistItemGroup;
import edu.harvard.med.screensaver.model.users.ScreeningRoomUser;
import edu.harvard.med.screensaver.policy.CurrentScreensaverUser;
import edu.harvard.med.screensaver.ui.arch.util.Messages;
import edu.harvard.med.screensaver.ui.arch.view.AbstractBackingBeanTest;
import edu.harvard.med.screensaver.util.CryptoUtils;
public class UserViewerTest extends AbstractBackingBeanTest
{
private static Logger log = Logger.getLogger(UserViewerTest.class);
@Autowired
protected CurrentScreensaverUser currentScreensaverUser;
@Autowired
protected UsersDAO usersDao;
@Autowired
protected GenericEntityDAO genericEntityDao;
@Autowired
protected SchemaUtil schemaUtil;
@Autowired
protected Messages messages;
@Autowired
protected UserViewer userViewer;
private AdministratorUser _admin;
public void setUp() throws Exception
{
super.setUp();
_admin = new AdministratorUser("Admin", "User");
genericEntityDao.persistEntity(_admin);
currentScreensaverUser.setScreensaverUser(_admin);
genericEntityDao.persistEntity(new ChecklistItem("lab access", true, ChecklistItemGroup.FORMS, 1));
genericEntityDao.persistEntity(new ChecklistItem("trained", false, ChecklistItemGroup.NON_HARVARD_SCREENERS, 1));
genericEntityDao.persistEntity(new ChecklistItem("ID assigned", true, ChecklistItemGroup.NON_HARVARD_SCREENERS, 2));
genericEntityDao.persistEntity(new ChecklistItem("legacy", true, ChecklistItemGroup.LEGACY, 1));
}
public void testVirginChecklistItemsDataModel()
{
ScreeningRoomUser user = new ScreeningRoomUser("Test", "User");
genericEntityDao.persistEntity(user);
user = genericEntityDao.reloadEntity(user);
userViewer.setEntity(user);
Map<ChecklistItemGroup,DataModel> checklistItemDataModels = userViewer.getChecklistItems().getChecklistItemsDataModelMap();
assertEquals(4, checklistItemDataModels.size());
assertFalse(checklistItemDataModels.containsKey(ChecklistItemGroup.LEGACY));
final List<Map.Entry<ChecklistItem,ChecklistItemEvent>> group1 = (List<Map.Entry<ChecklistItem,ChecklistItemEvent>>) checklistItemDataModels.get(ChecklistItemGroup.FORMS).getWrappedData();
final List<Map.Entry<ChecklistItem,ChecklistItemEvent>> group2 = (List<Map.Entry<ChecklistItem,ChecklistItemEvent>>) checklistItemDataModels.get(ChecklistItemGroup.NON_HARVARD_SCREENERS).getWrappedData();
assertNotNull(group1);
assertNotNull(group2);
assertEquals("lab access", group1.get(0).getKey().getItemName());
assertNull("lab access", group1.get(0).getValue());
assertEquals("trained", group2.get(0).getKey().getItemName());
assertNull("trained", group2.get(0).getValue());
assertEquals("ID assigned", group2.get(1).getKey().getItemName());
assertNull("ID assigned", group2.get(1).getValue());
}
public void testPopulatedChecklistItemsDataModel()
{
LocalDate today = new LocalDate();
ScreeningRoomUser user = new ScreeningRoomUser("Test", "User");
ChecklistItem checklistItemIdAssigned = genericEntityDao.findEntityByProperty(ChecklistItem.class, "itemName", "ID assigned");
user.createChecklistItemActivationEvent(checklistItemIdAssigned, today, _admin);
user = genericEntityDao.mergeEntity(user);
userViewer.setEntity(user);
Map<ChecklistItemGroup,DataModel> checklistItemDataModels = userViewer.getChecklistItems().getChecklistItemsDataModelMap();
List<Map.Entry<ChecklistItem,ChecklistItemEvent>> group = (List<Map.Entry<ChecklistItem,ChecklistItemEvent>>) checklistItemDataModels.get(ChecklistItemGroup.NON_HARVARD_SCREENERS).getWrappedData();
assertEquals("trained", group.get(0).getKey().getItemName());
assertNull("trained", group.get(0).getValue());
assertEquals("ID assigned", group.get(1).getKey().getItemName());
assertEquals(today, group.get(1).getValue().getDatePerformed());
assertEquals("Admin User", group.get(1).getValue().getCreatedBy().getFullNameFirstLast());
assertFalse(group.get(1).getValue().isExpiration());
user = genericEntityDao.reloadEntity(user, true, ScreeningRoomUser.checklistItemEvents.to(ChecklistItemEvent.checklistItem));
ChecklistItemEvent activation = user.getChecklistItemEvents().first();
try { Thread.sleep(1000); } catch (InterruptedException e) {}
ChecklistItemEvent expirationEvent = activation.createChecklistItemExpirationEvent(today, genericEntityDao.reloadEntity(_admin));
genericEntityDao.saveOrUpdateEntity(expirationEvent);
userViewer.setEntity(activation.getScreeningRoomUser());
Map<ChecklistItemGroup,DataModel> checklistItemDataModels2 = userViewer.getChecklistItems().getChecklistItemsDataModelMap();
List<Map.Entry<ChecklistItem,ChecklistItemEvent>> group2 = (List<Map.Entry<ChecklistItem,ChecklistItemEvent>>) checklistItemDataModels2.get(ChecklistItemGroup.NON_HARVARD_SCREENERS).getWrappedData();
assertEquals("ID assigned", group2.get(1).getKey().getItemName());
assertEquals(today, group2.get(1).getValue().getDatePerformed());
assertEquals("Admin User", group2.get(1).getValue().getCreatedBy().getFullNameFirstLast());
assertTrue(group2.get(1).getValue().isExpiration());
}
public void testUpdateLoginIdAndPassword()
{
ScreeningRoomUser user = new ScreeningRoomUser("Test", "User");
genericEntityDao.persistEntity(user);
userViewer.setEntity(user);
userViewer.getEntity().setLoginId("loginId");
userViewer.save();
user = genericEntityDao.reloadEntity(user);
assertNull("new login ID cannot be set without password", user.getLoginId());
assertNull("new login ID cannot be set without password", user.getDigestedPassword());
userViewer.setEntity(user);
userViewer.getEntity().setLoginId("loginId");
userViewer.setNewPassword1("xyz");
userViewer.setNewPassword2("xy");
userViewer.save();
user = genericEntityDao.reloadEntity(user);
assertNull("passwords must match", user.getLoginId());
assertNull("passwords must match", user.getDigestedPassword());
userViewer.setEntity(user);
userViewer.setNewPassword1("xyz");
userViewer.setNewPassword2("xyz");
userViewer.save();
user = genericEntityDao.reloadEntity(user);
assertNull("passwords cannot be entered w/o login ID", user.getLoginId());
assertNull("passwords cannot be entered w/o login ID", user.getDigestedPassword());
userViewer.setEntity(user);
userViewer.getEntity().setLoginId("loginId");
userViewer.setNewPassword1("xyz");
userViewer.setNewPassword2("xyz");
userViewer.save();
user = genericEntityDao.reloadEntity(user);
assertEquals("loginId", user.getLoginId());
assertEquals(CryptoUtils.digest("xyz"), user.getDigestedPassword());
userViewer.setEntity(user);
userViewer.getEntity().setLoginId(null);
userViewer.save();
user = genericEntityDao.reloadEntity(user);
assertNull("loginId", user.getLoginId());
assertNull("clearing login ID also clears password", user.getDigestedPassword());
}
}