summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorg Pfuetzenreuter2022-05-13 20:09:42 +0200
committerGeorg Pfuetzenreuter2022-05-13 20:09:42 +0200
commit2ff99d29bc8873afa9c7cd9da57a7a7cf2072ea5 (patch)
tree4c460f1c5db9e1df06acefde5347a154b32010e8
parentbf6f91520f9a0ebb2a1ba2182a2ddc3043325c37 (diff)
downloadpubsh-web-2ff99d29bc8873afa9c7cd9da57a7a7cf2072ea5.tar.gz
pubsh-web-2ff99d29bc8873afa9c7cd9da57a7a7cf2072ea5.tar.bz2
pubsh-web-2ff99d29bc8873afa9c7cd9da57a7a7cf2072ea5.zip
Init unit tests
Signed-off-by: Georg Pfuetzenreuter <mail@georg-pfuetzenreuter.net>
-rw-r--r--pom.xml15
-rw-r--r--src/test/java/net/libertacasa/pubsh/web/WebApplicationTest.java81
-rw-r--r--src/test/java/net/libertacasa/pubsh/web/WebApplicationTests.java13
-rw-r--r--src/test/resources/application.properties11
-rw-r--r--src/test/resources/schema.sql14
5 files changed, 120 insertions, 14 deletions
diff --git a/pom.xml b/pom.xml
index 14f9b93..94abe9f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -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