diff options
-rw-r--r-- | pom.xml | 15 | ||||
-rw-r--r-- | src/test/java/net/libertacasa/pubsh/web/WebApplicationTest.java | 81 | ||||
-rw-r--r-- | src/test/java/net/libertacasa/pubsh/web/WebApplicationTests.java | 13 | ||||
-rw-r--r-- | src/test/resources/application.properties | 11 | ||||
-rw-r--r-- | src/test/resources/schema.sql | 14 |
5 files changed, 120 insertions, 14 deletions
@@ -100,7 +100,13 @@ <dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> - </dependency> + </dependency> + + <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + <scope>test</scope> + </dependency> <dependency> <groupId>org.springframework.boot</groupId> @@ -124,6 +130,13 @@ <artifactId>spring-boot-starter-logging</artifactId> </dependency> + <dependency> + <groupId>com.c4-soft.springaddons</groupId> + <artifactId>spring-addons-keycloak</artifactId> + <version>4.1.10</version> + <scope>test</scope> + </dependency> + </dependencies> <dependencyManagement> diff --git a/src/test/java/net/libertacasa/pubsh/web/WebApplicationTest.java b/src/test/java/net/libertacasa/pubsh/web/WebApplicationTest.java new file mode 100644 index 0000000..70a69b3 --- /dev/null +++ b/src/test/java/net/libertacasa/pubsh/web/WebApplicationTest.java @@ -0,0 +1,81 @@ +package net.libertacasa.pubsh.web; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.startsWith; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.forwardedUrl; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrl; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + +import com.c4_soft.springaddons.security.oauth2.test.annotations.Claims; +import com.c4_soft.springaddons.security.oauth2.test.annotations.OpenIdClaims; +import com.c4_soft.springaddons.security.oauth2.test.annotations.StringClaim; +import com.c4_soft.springaddons.security.oauth2.test.annotations.keycloak.WithMockKeycloakAuth; + +//@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@SpringBootTest +@AutoConfigureMockMvc +class WebApplicationTest { + + @Test + void contextLoads() { + } + + @Autowired + private MockMvc mvc; + + @Test + public void getRoot() throws Exception { + mvc.perform(MockMvcRequestBuilders.get("/")) + .andExpect(status().isFound()) + .andExpect(redirectedUrl("/portal")); + } + + @Test + public void getPortalNoAuth() throws Exception { + mvc.perform(MockMvcRequestBuilders.get("/portal")) + .andExpect(status().isFound()) + .andExpect(redirectedUrl("/sso/login")); + } + + @Test + public void getAdminNoAuth() throws Exception { + mvc.perform(MockMvcRequestBuilders.get("/admin")) + .andExpect(status().isFound()) + .andExpect(redirectedUrl("/sso/login")); + } + + @Test + @WithMockKeycloakAuth("TotallyLegitUserWithZeroAdministrativePermissions") + public void getAdminWrongAuth() throws Exception { + mvc.perform(MockMvcRequestBuilders.get("/admin")) + .andExpect(status().isForbidden()); + } + + @Test + @WithMockKeycloakAuth( + authorities = { "devel-user" }, + claims = @OpenIdClaims( + sub = "12345", + email = "regular-user@example.com", + emailVerified = true, + //nickName = "TotallyLegitUserWithSuperPowers", + //preferredUsername = "TotallyLegitUserWithSuperPowers", + otherClaims = @Claims(stringClaims = @StringClaim(name = "username", value = "regular-user")))) + public void getPortalWithAuth() throws Exception { + mvc.perform(MockMvcRequestBuilders.get("/portal")) + .andExpect(status().isOk()) + .andExpect(content().string(startsWith("<!DOCTYPE html>"))) + .andExpect(content().string(containsString("Hello, <span>regular-user</span>."))) + .andExpect(content().string(containsString("Generate new throw-away shell:"))); + } + +} diff --git a/src/test/java/net/libertacasa/pubsh/web/WebApplicationTests.java b/src/test/java/net/libertacasa/pubsh/web/WebApplicationTests.java deleted file mode 100644 index ffb21f0..0000000 --- a/src/test/java/net/libertacasa/pubsh/web/WebApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package net.libertacasa.pubsh.web; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class WebApplicationTests { - - @Test - void contextLoads() { - } - -} diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties new file mode 100644 index 0000000..8161d6c --- /dev/null +++ b/src/test/resources/application.properties @@ -0,0 +1,11 @@ +spring.datasource.driver-class-name=org.h2.Driver +spring.datasource.jdbc-url=jdbc:h2:mem:pubshweb;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false +spring.jpa.show-sql=true +spring.jpa.generate-ddl=true +# This is a bogus endpoint, the results are mocked, but the Keycloak library does not know that: +keycloak.auth-server-url=http://127.0.0.9:98765/ +keycloak.realm=local-devel +keycloak.resource=portal-app +keycloak.public-client=true +### VERY BAD, TO-DO: mock Docker results: +lysergic.docker.endpoint=tcp://sweetsuse:2375
\ No newline at end of file diff --git a/src/test/resources/schema.sql b/src/test/resources/schema.sql new file mode 100644 index 0000000..a369f62 --- /dev/null +++ b/src/test/resources/schema.sql @@ -0,0 +1,14 @@ +CREATE TABLE scheduled_tasks ( + task_name varchar(40) not null, + task_instance varchar(100) not null, + task_data blob, + execution_time timestamp(6) not null, + picked BOOLEAN not null, + picked_by varchar(50), + last_success timestamp(6) null, + last_failure timestamp(6) null, + consecutive_failures INT, + last_heartbeat timestamp(6) null, + version BIGINT not null, + PRIMARY KEY (task_name, task_instance) +);
\ No newline at end of file |