/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.content; import java.util.Calendar; import java.util.Date; import org.junit.Before; import org.junit.Test; import com.enonic.cms.core.security.user.UserEntity; import com.enonic.cms.core.security.user.UserKey; import static org.junit.Assert.*; /** * Created by IntelliJ IDEA. * User: rmh * Date: Jun 22, 2010 * Time: 8:53:51 AM */ public class AssignmentActionResolverTest { UserEntity assignee1; UserEntity assignee2; UserEntity assigner1; UserEntity assigner2; Date now = Calendar.getInstance().getTime(); AssignmentActionResolver actionResolver; @Before public void setUp() { assignee1 = createUser( "assignee1" ); assignee2 = createUser( "assignee2" ); assigner1 = createUser( "assigner1" ); assigner2 = createUser( "assigner2" ); actionResolver = new AssignmentActionResolver(); } @Test public void testNewAssigneSubmitted() { ContentEntity originalContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, "descr", now ); ContentEntity submittedContent = createContent( true, new ContentKey( "1" ), assignee2, assigner1, "descr", now ); AssignmentAction action = actionResolver.resolveAssignmentAction( submittedContent, submittedContent.getDraftVersion(), originalContent ); assertEquals( action, AssignmentAction.REASSIGN ); } @Test public void testAssignerChanged() { ContentEntity originalContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, "descr", now ); ContentEntity submittedContent = createContent( true, new ContentKey( "1" ), assignee1, assigner2, "descr", now ); AssignmentAction action = actionResolver.resolveAssignmentAction( submittedContent, submittedContent.getDraftVersion(), originalContent ); assertEquals( "Should not affect anything, since this is not really valid", action, AssignmentAction.DONT_TOUCH ); } @Test public void testNoChanges() { ContentEntity originalContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, "descr", now ); ContentEntity submittedContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, "descr", now ); AssignmentAction action = actionResolver.resolveAssignmentAction( submittedContent, submittedContent.getDraftVersion(), originalContent ); assertEquals( action, AssignmentAction.DONT_TOUCH ); } @Test public void testOnlyDescrChanged() { ContentEntity originalContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, "descr", now ); ContentEntity submittedContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, "descr2", now ); AssignmentAction action = actionResolver.resolveAssignmentAction( submittedContent, submittedContent.getDraftVersion(), originalContent ); assertEquals( action, AssignmentAction.UPDATE_ASSIGNMENT ); } @Test public void testOnlyDuedateChanged() { Date newDate = new Date( 123456789 ); ContentEntity originalContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, "descr", now ); ContentEntity submittedContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, "descr", newDate ); AssignmentAction action = actionResolver.resolveAssignmentAction( submittedContent, submittedContent.getDraftVersion(), originalContent ); assertEquals( action, AssignmentAction.UPDATE_ASSIGNMENT ); } @Test public void testEmptyAssigneeSubmitted() { ContentEntity originalContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, "descr", now ); ContentEntity submittedContent = createContent( true, new ContentKey( "1" ), null, null, null, null ); AssignmentAction action = actionResolver.resolveAssignmentAction( submittedContent, submittedContent.getDraftVersion(), originalContent ); assertEquals( action, AssignmentAction.UNASSIGN ); } @Test public void testNoOriginalAssignmentThenSubmitted() { ContentEntity originalContent = createContent( true, new ContentKey( "1" ), null, null, null, null ); ContentEntity submittedContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, "descr", now ); AssignmentAction action = actionResolver.resolveAssignmentAction( submittedContent, submittedContent.getDraftVersion(), originalContent ); assertEquals( action, AssignmentAction.ASSIGN ); } @Test public void testNoOriginalAssignmentNoSubmitted() { ContentEntity originalContent = createContent( true, new ContentKey( "1" ), null, null, null, null ); ContentEntity submittedContent = createContent( true, new ContentKey( "1" ), null, null, null, null ); AssignmentAction action = actionResolver.resolveAssignmentAction( submittedContent, submittedContent.getDraftVersion(), originalContent ); assertEquals( action, AssignmentAction.DONT_TOUCH ); } @Test public void testUnassignedOnApproved() { ContentEntity originalContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, "descr", now ); ContentEntity submittedContent = createContent( false, new ContentKey( "1" ), assignee1, assigner1, "descr", now ); AssignmentAction action = actionResolver.resolveAssignmentAction( submittedContent, submittedContent.getMainVersion(), originalContent ); assertEquals( action, AssignmentAction.UNASSIGN_SINCE_APPROVED ); } @Test public void testMetadataNullValues() { ContentEntity originalContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, null, now ); ContentEntity submittedContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, null, now ); AssignmentAction action = actionResolver.resolveAssignmentAction( submittedContent, submittedContent.getDraftVersion(), originalContent ); assertEquals( action, AssignmentAction.DONT_TOUCH ); originalContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, null, now ); submittedContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, "descr", now ); action = actionResolver.resolveAssignmentAction( submittedContent, submittedContent.getDraftVersion(), originalContent ); assertEquals( action, AssignmentAction.UPDATE_ASSIGNMENT ); originalContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, "descr", now ); submittedContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, null, now ); action = actionResolver.resolveAssignmentAction( submittedContent, submittedContent.getDraftVersion(), originalContent ); assertEquals( action, AssignmentAction.UPDATE_ASSIGNMENT ); originalContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, "descr", null ); submittedContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, "descr", null ); action = actionResolver.resolveAssignmentAction( submittedContent, submittedContent.getDraftVersion(), originalContent ); assertEquals( action, AssignmentAction.DONT_TOUCH ); originalContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, "descr", null ); submittedContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, "descr", now ); action = actionResolver.resolveAssignmentAction( submittedContent, submittedContent.getDraftVersion(), originalContent ); assertEquals( action, AssignmentAction.UPDATE_ASSIGNMENT ); originalContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, "descr", now ); submittedContent = createContent( true, new ContentKey( "1" ), assignee1, assigner1, "descr", null ); action = actionResolver.resolveAssignmentAction( submittedContent, submittedContent.getDraftVersion(), originalContent ); assertEquals( action, AssignmentAction.UPDATE_ASSIGNMENT ); } private UserEntity createUser( String username ) { UserEntity user = new UserEntity(); user.setKey( new UserKey( username ) ); user.setName( username ); user.setDisplayName( username ); return user; } private ContentEntity createContent( boolean hasDraft, ContentKey contentKey, UserEntity assignee, UserEntity assigner, String assignmentDescription, Date assignDuedate ) { ContentEntity content = new ContentEntity(); content.setKey( contentKey ); content.setAssignmentDescription( assignmentDescription ); content.setAssignee( assignee ); content.setAssigner( assigner ); content.setAssignmentDueDate( assignDuedate ); ContentVersionEntity version = new ContentVersionEntity(); version.setKey( new ContentVersionKey( "1" ) ); version.setStatus( hasDraft ? ContentStatus.DRAFT : ContentStatus.APPROVED ); content.addVersion( version ); content.setDraftVersion( hasDraft ? version : null ); content.setMainVersion( version ); return content; } }