/* vim: set ts=2 et sw=2 cindent fo=qroca: */ package com.globant.katari.sample.wicket.view; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.expectLastCall; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.createNiceMock; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import org.apache.wicket.spring.test.ApplicationContextMock; import org.junit.Before; import org.junit.Test; import org.springframework.beans.DirectFieldAccessor; import com.globant.katari.hibernate.coreuser.domain.Role; import com.globant.katari.sample.testsupport.SecurityTestUtils; import com.globant.katari.user.application.DeleteUserCommand; import com.globant.katari.user.application.Password; import com.globant.katari.user.application.Profile; import com.globant.katari.user.application.SaveUserCommand; import com.globant.katari.user.application.UserFilterCommand; import com.globant.katari.user.domain.User; import com.globant.katari.user.domain.filter.Paging; import com.globant.katari.tools.KatariWicketTester; public class UserListPageTest { private KatariWicketTester tester; private DeleteUserCommand deleteUser; @Before public void setUp() { User user = new User("admin", "admin@none"); // Change the id, otherwise the delete button will always be disabled. new DirectFieldAccessor(user).setPropertyValue("id", 1000); SecurityTestUtils.setContextUser(user); List<User> firstPage = new LinkedList<User>(); firstPage.add(new User("name1", "email1")); firstPage.add(new User("name2", "email2")); firstPage.add(new User("name3", "email3")); firstPage.add(new User("name4", "email4")); firstPage.add(new User("name5", "email5")); UserFilterCommand emptyFilter = createNiceMock(UserFilterCommand.class); expect(emptyFilter.getPaging()).andReturn(new Paging()); expectLastCall().anyTimes(); expect(emptyFilter.execute()).andReturn(firstPage); expectLastCall().anyTimes(); replay(emptyFilter); deleteUser = createMock(DeleteUserCommand.class); deleteUser.setUserId(0); expect(deleteUser.execute()).andReturn(null); replay(deleteUser); Profile profile = createMock(Profile.class); expect(profile.getName()).andReturn("name1"); expect(profile.getEmail()).andReturn("email1"); expect(profile.getRoles()).andReturn(new ArrayList<Role>()); expectLastCall().anyTimes(); replay(profile); Password password = createMock(Password.class); expect(password.getNewPassword()).andReturn("none"); expect(password.getConfirmedPassword()).andReturn("none"); replay(password); List<Role> theRoles = new ArrayList<Role>(); theRoles.add(new Role("test")); theRoles.add(new Role("test2")); SaveUserCommand saveUser = createMock(SaveUserCommand.class); saveUser.setUserId(0); saveUser.init(); expect(saveUser.getProfile()).andReturn(profile); expectLastCall().anyTimes(); expect(saveUser.getPassword()).andReturn(password); expectLastCall().anyTimes(); expect(saveUser.execute()).andReturn(null); expect(saveUser.getRoles()).andReturn(theRoles).anyTimes(); replay(saveUser); ApplicationContextMock applicationContext = new ApplicationContextMock(); applicationContext.putBean("userFilterCommand", emptyFilter); applicationContext.putBean("deleteUserCommand", deleteUser); applicationContext.putBean("saveUserCommand", saveUser); tester = new KatariWicketTester(applicationContext); tester.startPage(new UserListPage()); } @Test public void testUserList() { // Looks like the data view starts counting from 1. tester.assertLabel("users:1:name", "name1"); tester.assertLabel("users:1:email", "email1"); tester.assertLabel("users:5:name", "name5"); tester.assertLabel("users:5:email", "email5"); } @Test public void testUserDelete() { // deletes a user. Does nothing in the page, but executes the delete // command. tester.clickLink("users:1:delete"); tester.assertRenderedPage(UserListPage.class); verify(deleteUser); } @Test public void testUserEdit() { tester.clickLink("users:1:edit"); tester.assertRenderedPage(UserPage.class); } }