package com.whatsthatlight.teamcity.hipchat.test; import com.whatsthatlight.teamcity.hipchat.*; import jetbrains.buildServer.serverSide.auth.SecurityContext; import org.apache.log4j.BasicConfigurator; import org.testng.annotations.AfterMethod; import org.testng.annotations.Test; import org.testng.annotations.BeforeMethod; import org.testng.AssertJUnit; import static org.mockito.Mockito.when; import static org.mockito.Matchers.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; import javax.servlet.http.HttpServletRequest; import jetbrains.buildServer.controllers.WebFixture; import jetbrains.buildServer.serverSide.SProject; import jetbrains.buildServer.serverSide.impl.BaseServerTestCase; import jetbrains.buildServer.users.SUser; import jetbrains.buildServer.web.openapi.PagePlaces; import jetbrains.buildServer.web.openapi.PluginDescriptor; public class HipChatProjectSettingsTest extends BaseServerTestCase { private WebFixture webFixture; @BeforeMethod @Override protected void setUp() throws Exception { super.setUp(); webFixture = new WebFixture(this.myFixture); BasicConfigurator.configure(); } @AfterMethod protected void tearDown() throws Exception { super.clearFailure(); super.tearDown(); } @SuppressWarnings("unchecked") @Test public void testFillModel() throws Exception { // Test parameters int expectedModelSize = 5; String expectedRoomId = "room1"; String expectedRoomName = "test room"; boolean expectedNotifyStatus = true; boolean expectedIsRootProject = true; String expectedProjectId = "project1"; TreeMap<String, String> expectedRoomIdList = new TreeMap<String, String>(); expectedRoomIdList.put(expectedRoomName, expectedRoomId); HipChatProjectConfiguration projectConfiguration = new HipChatProjectConfiguration(expectedProjectId, expectedRoomId, expectedNotifyStatus); HipChatConfiguration configuration = new HipChatConfiguration(); configuration.setProjectConfiguration(projectConfiguration); // Expected rooms int startIndex = 0; int maxResults = 1; List<HipChatRoom> roomItems = new ArrayList<HipChatRoom>(); roomItems.add(new HipChatRoom(expectedRoomId, null, expectedRoomName)); HipChatApiResultLinks roomLinks = new HipChatApiResultLinks(); HipChatRooms rooms = new HipChatRooms(roomItems, startIndex, maxResults, roomLinks); // Project mocks SProject parentProject = org.mockito.Mockito.mock(SProject.class); when(parentProject.getProjectId()).thenReturn("_Root"); SProject project = org.mockito.Mockito.mock(SProject.class); when(project.getParentProject()).thenReturn(parentProject); when(project.getProjectId()).thenReturn(expectedProjectId); // HttpServletRequest mock HttpServletRequest request = org.mockito.Mockito.mock(HttpServletRequest.class); when(request.getAttribute("currentProject")).thenReturn(project); // Processor mock HipChatApiProcessor processor = org.mockito.Mockito.mock(HipChatApiProcessor.class); when(processor.getRooms(0)).thenReturn(rooms); // Other page dependencies PagePlaces pagePlaces = webFixture.getPagePlaces(); PluginDescriptor descriptor = org.mockito.Mockito.mock(PluginDescriptor.class); when(descriptor.getPluginResourcesPath(anyString())).thenReturn(""); SecurityContext securityContext = org.mockito.Mockito.mock(SecurityContext.class); // The test page HipChatProjectSettings myPage = new HipChatProjectSettings(pagePlaces, descriptor, securityContext, configuration, processor); // Execute Map<String, Object> model = new HashMap<String, Object>(); myPage.fillModel(model, request); // Test AssertJUnit.assertEquals(expectedModelSize, model.size()); AssertJUnit.assertEquals(expectedRoomId, model.get("roomId")); AssertJUnit.assertEquals(expectedNotifyStatus, model.get("notify")); AssertJUnit.assertEquals(expectedIsRootProject, model.get("isRootProject")); AssertJUnit.assertEquals(expectedProjectId, model.get("projectId")); TreeMap<String, String> actualRoomIdList = (TreeMap<String, String>)model.get("roomIdList"); AssertJUnit.assertEquals(expectedRoomIdList.size(), actualRoomIdList.size()); AssertJUnit.assertEquals(expectedRoomIdList.get(expectedRoomId), actualRoomIdList.get(expectedRoomId)); } @SuppressWarnings("unchecked") @Test public void testFillModelNoConfigurationAndIsRootProject() throws Exception { // Test parameters int expectedModelSize = 5; String expectedRoomId = "default"; String expectedRoomName = "test room"; boolean expectedNotifyStatus = false; boolean expectedIsRootProject = true; String expectedProjectId = "project1"; String availableRoomId = "some_room"; String availableRoomName = "Some Room"; TreeMap<String, String> expectedRoomIdList = new TreeMap<String, String>(); expectedRoomIdList.put(availableRoomName, availableRoomId); HipChatConfiguration configuration = new HipChatConfiguration(); configuration.setNotifyStatus(expectedNotifyStatus); // Expected rooms int startIndex = 0; int maxResults = 1; List<HipChatRoom> roomItems = new ArrayList<HipChatRoom>(); roomItems.add(new HipChatRoom(availableRoomId, null, expectedRoomName)); HipChatApiResultLinks roomLinks = new HipChatApiResultLinks(); HipChatRooms rooms = new HipChatRooms(roomItems, startIndex, maxResults, roomLinks); // Project mocks SProject parentProject = org.mockito.Mockito.mock(SProject.class); when(parentProject.getProjectId()).thenReturn("_Root"); SProject project = org.mockito.Mockito.mock(SProject.class); when(project.getParentProject()).thenReturn(parentProject); when(project.getProjectId()).thenReturn(expectedProjectId); // HttpServletRequest mock HttpServletRequest request = org.mockito.Mockito.mock(HttpServletRequest.class); when(request.getAttribute("currentProject")).thenReturn(project); // Processor mock HipChatApiProcessor processor = org.mockito.Mockito.mock(HipChatApiProcessor.class); when(processor.getRooms(0)).thenReturn(rooms); // Other page dependencies SUser user = org.mockito.Mockito.mock(SUser.class); PagePlaces pagePlaces = webFixture.getPagePlaces(); PluginDescriptor descriptor = org.mockito.Mockito.mock(PluginDescriptor.class); when(descriptor.getPluginResourcesPath(anyString())).thenReturn(""); SecurityContext securityContext = org.mockito.Mockito.mock(SecurityContext.class); // The test page HipChatProjectSettings myPage = new HipChatProjectSettings(pagePlaces, descriptor, securityContext, configuration, processor); // Execute Map<String, Object> model = new HashMap<String, Object>(); myPage.fillModel(model, request); // Test AssertJUnit.assertEquals(expectedModelSize, model.size()); AssertJUnit.assertEquals(expectedRoomId, model.get("roomId")); AssertJUnit.assertEquals(expectedNotifyStatus, model.get("notify")); AssertJUnit.assertEquals(expectedIsRootProject, model.get("isRootProject")); AssertJUnit.assertEquals(expectedProjectId, model.get("projectId")); TreeMap<String, String> actualRoomIdList = (TreeMap<String, String>)model.get("roomIdList"); AssertJUnit.assertEquals(expectedRoomIdList.size(), actualRoomIdList.size()); AssertJUnit.assertEquals(expectedRoomIdList.get(availableRoomId), actualRoomIdList.get(availableRoomId)); } @SuppressWarnings("unchecked") @Test public void testFillModelNoConfigurationAndNotRootProject() throws Exception { // Test parameters int expectedModelSize = 5; String expectedRoomId = "parent"; String expectedRoomName = "test room"; boolean expectedNotifyStatus = false; boolean expectedIsRootProject = false; String expectedProjectId = "project1"; String expectedParentProjectId = "project2"; String availableRoomId = "some_room"; String availableRoomName = "Some Room"; TreeMap<String, String> expectedRoomIdList = new TreeMap<String, String>(); expectedRoomIdList.put(availableRoomName, availableRoomId); HipChatConfiguration configuration = new HipChatConfiguration(); // Expected rooms int startIndex = 0; int maxResults = 1; List<HipChatRoom> roomItems = new ArrayList<HipChatRoom>(); roomItems.add(new HipChatRoom(availableRoomId, null, expectedRoomName)); HipChatApiResultLinks roomLinks = new HipChatApiResultLinks(); HipChatRooms rooms = new HipChatRooms(roomItems, startIndex, maxResults, roomLinks); // Project mocks SProject parentProject = org.mockito.Mockito.mock(SProject.class); when(parentProject.getProjectId()).thenReturn(expectedParentProjectId); SProject project = org.mockito.Mockito.mock(SProject.class); when(project.getParentProject()).thenReturn(parentProject); when(project.getProjectId()).thenReturn(expectedProjectId); // HttpServletRequest mock HttpServletRequest request = org.mockito.Mockito.mock(HttpServletRequest.class); when(request.getAttribute("currentProject")).thenReturn(project); // Processor mock HipChatApiProcessor processor = org.mockito.Mockito.mock(HipChatApiProcessor.class); when(processor.getRooms(0)).thenReturn(rooms); // Other page dependencies SUser user = org.mockito.Mockito.mock(SUser.class); PagePlaces pagePlaces = webFixture.getPagePlaces(); PluginDescriptor descriptor = org.mockito.Mockito.mock(PluginDescriptor.class); when(descriptor.getPluginResourcesPath(anyString())).thenReturn(""); SecurityContext securityContext = org.mockito.Mockito.mock(SecurityContext.class); // The test page HipChatProjectSettings myPage = new HipChatProjectSettings(pagePlaces, descriptor, securityContext, configuration, processor); // Execute Map<String, Object> model = new HashMap<String, Object>(); myPage.fillModel(model, request); // Test AssertJUnit.assertEquals(expectedModelSize, model.size()); AssertJUnit.assertEquals(expectedRoomId, model.get("roomId")); AssertJUnit.assertEquals(expectedNotifyStatus, model.get("notify")); AssertJUnit.assertEquals(expectedIsRootProject, model.get("isRootProject")); AssertJUnit.assertEquals(expectedProjectId, model.get("projectId")); TreeMap<String, String> actualRoomIdList = (TreeMap<String, String>)model.get("roomIdList"); AssertJUnit.assertEquals(expectedRoomIdList.size(), actualRoomIdList.size()); AssertJUnit.assertEquals(expectedRoomIdList.get(availableRoomId), actualRoomIdList.get(availableRoomId)); } }