/** * */ package org.minnal.core; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNull; import static org.testng.Assert.assertTrue; import io.netty.handler.codec.http.HttpRequest; import java.net.URI; import org.minnal.core.config.ApplicationConfiguration; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; /** * @author ganeshs * */ public class ApplicationMappingTest { private ApplicationMapping applicationMapping; private Application<ApplicationConfiguration> application1; private Application<ApplicationConfiguration> application2; private ApplicationConfiguration configuration1; private ApplicationConfiguration configuration2; @SuppressWarnings("unchecked") @BeforeMethod public void setup() { applicationMapping = new ApplicationMapping("/test"); application1 = mock(Application.class); application2 = mock(Application.class); configuration1 = mock(ApplicationConfiguration.class); configuration2 = mock(ApplicationConfiguration.class); when(application1.getConfiguration()).thenReturn(configuration1); when(application2.getConfiguration()).thenReturn(configuration2); } @Test public void shouldStructureBasePath() { ApplicationMapping mapping = new ApplicationMapping(""); assertEquals(mapping.getBasePath(), "/"); mapping = new ApplicationMapping("test"); assertEquals(mapping.getBasePath(), "/test"); mapping = new ApplicationMapping("test/"); assertEquals(mapping.getBasePath(), "/test"); mapping = new ApplicationMapping("test/test1/"); assertEquals(mapping.getBasePath(), "/test/test1"); } @Test public void shouldAddApplication() { when(configuration1.getBasePath()).thenReturn("/app1"); when(configuration2.getBasePath()).thenReturn("/app2"); applicationMapping.addApplication(application1); applicationMapping.addApplication(application2); assertEquals(applicationMapping.getApplications().size(), 2); } @Test public void shouldSetApplicationPathWhenAdded() { when(configuration1.getBasePath()).thenReturn("/app"); applicationMapping.addApplication(application1); verify(application1).setPath(URI.create("/test/app")); } @Test(expectedExceptions=IllegalArgumentException.class) public void shouldNotAddApplicationIfMountPathIsAlreadyUsed() { when(configuration1.getBasePath()).thenReturn("/app"); when(configuration2.getBasePath()).thenReturn("/app"); applicationMapping.addApplication(application1); applicationMapping.addApplication(application2); } @Test(expectedExceptions=IllegalArgumentException.class) public void shouldNotAddApplicationIfApplicationIsAlreadyAdded() { when(configuration1.getBasePath()).thenReturn("/app1"); when(configuration1.getBasePath()).thenReturn("/app2"); applicationMapping.addApplication(application1); applicationMapping.addApplication(application1); } @Test public void shouldRemoveApplicationByMountPath() { when(configuration1.getBasePath()).thenReturn("/app"); applicationMapping.addApplication(application1); applicationMapping.removeApplication("/app"); assertTrue(applicationMapping.getApplications().isEmpty()); } @Test(expectedExceptions=IllegalArgumentException.class) public void shouldThrowExceptionIfApplicationIsAlreadyRemoved() { when(configuration1.getBasePath()).thenReturn("/app"); applicationMapping.addApplication(application1); applicationMapping.removeApplication("/app"); applicationMapping.removeApplication("/app"); } @Test public void shouldResolveRequestToApplication() { when(configuration1.getBasePath()).thenReturn("/app1"); when(configuration2.getBasePath()).thenReturn("/app2"); applicationMapping.addApplication(application1); applicationMapping.addApplication(application2); HttpRequest request = mock(HttpRequest.class); when(request.getUri()).thenReturn("/test/app1/test123"); assertEquals(applicationMapping.resolve(request), application1); } @Test public void shouldNotResolveRequestToApplication() { when(configuration1.getBasePath()).thenReturn("/app1"); applicationMapping.addApplication(application1); HttpRequest request = mock(HttpRequest.class); when(request.getUri()).thenReturn("/test/invalidapp/test123"); assertNull(applicationMapping.resolve(request)); } }