Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
Expand All @@ -23,7 +24,7 @@
<dependency>
<groupId>it.aboutbits</groupId>
<artifactId>spring-boot-toolbox</artifactId>
<version>1.6.0</version>
<version>1.7.0</version>
</dependency>
</dependencies>
</dependencyManagement>
Expand All @@ -39,6 +40,12 @@
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>


<!-- Utilities -->
<dependency>
<groupId>org.projectlombok</groupId>
Expand All @@ -47,6 +54,10 @@
</dependency>

<!-- Testing -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package it.aboutbits.springboot.testing.web.request;

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.NonNull;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;

import static org.springframework.http.MediaType.APPLICATION_JSON;

public class Delete extends Request<MockHttpServletRequestBuilder> {
Delete(
@NonNull MockMvc mockMvc,
@NonNull ObjectMapper objectMapper,
@NonNull String url,
@NonNull Object... pathVariables
) {
super(mockMvc, objectMapper, url, APPLICATION_JSON, pathVariables);
}

@Override
protected @NonNull MockHttpServletRequestBuilder getRequestBuilder(@NonNull UrlWithVariables url) {
return MockMvcRequestBuilders.delete(url.url(), url.pathVariables());
}

@Override
protected boolean useCsrf() {
return true;
}
}
30 changes: 30 additions & 0 deletions src/main/java/it/aboutbits/springboot/testing/web/request/Get.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package it.aboutbits.springboot.testing.web.request;

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.NonNull;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;

import static org.springframework.http.MediaType.APPLICATION_JSON;

public class Get extends Request<MockHttpServletRequestBuilder> {
Get(
@NonNull MockMvc mockMvc,
@NonNull ObjectMapper objectMapper,
@NonNull String url,
@NonNull Object... pathVariables
) {
super(mockMvc, objectMapper, url, APPLICATION_JSON, pathVariables);
}

@Override
protected @NonNull MockHttpServletRequestBuilder getRequestBuilder(@NonNull UrlWithVariables url) {
return MockMvcRequestBuilders.get(url.url(), url.pathVariables());
}

@Override
protected boolean useCsrf() {
return false;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package it.aboutbits.springboot.testing.web.request;

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;

@RequiredArgsConstructor
public class HttpTestClient {
private final MockMvc mockMvc;
private final ObjectMapper objectMapper;

public Request<MockHttpServletRequestBuilder> get(@NonNull String url, Object... pathVariables) {
return new Get(mockMvc, objectMapper, url, pathVariables);
}

public Request<MockHttpServletRequestBuilder> put(@NonNull String url, Object... pathVariables) {
return new Put(mockMvc, objectMapper, url, pathVariables);
}

public MultipartRequest putMultipart(@NonNull String url, Object... pathVariables) {
return new PutMultipart(mockMvc, objectMapper, url, pathVariables);
}

public Request<MockHttpServletRequestBuilder> post(@NonNull String url, Object... pathVariables) {
return new Post(mockMvc, objectMapper, url, pathVariables);
}

public MultipartRequest postMultipart(@NonNull String url, Object... pathVariables) {
return new PostMultipart(mockMvc, objectMapper, url, pathVariables);
}

public Request<MockHttpServletRequestBuilder> patch(@NonNull String url, Object... pathVariables) {
return new Patch(mockMvc, objectMapper, url, pathVariables);
}

public MultipartRequest patchMultipart(@NonNull String url, Object... pathVariables) {
return new PatchMultipart(mockMvc, objectMapper, url, pathVariables);
}

public Request<MockHttpServletRequestBuilder> delete(@NonNull String url, Object... pathVariables) {
return new Delete(mockMvc, objectMapper, url, pathVariables);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
package it.aboutbits.springboot.testing.web.request;

import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import org.springframework.mock.web.MockMultipartFile;

import static it.aboutbits.springboot.testing.web.request.RequestSecurityAssert.assertThatRequest;

@Getter
@RequiredArgsConstructor
public class HttpTestSecurity {
private final HttpTestClient httpTestClient;

public void assertGetGranted(@NonNull String url, Object... pathVariables) {
var result = httpTestClient.get(url, pathVariables)
.returnRaw();

assertThatRequest(result).wasGranted();
}

public void assertGetDenied(@NonNull String url, Object... pathVariables) {
var result = httpTestClient.get(url, pathVariables)
.returnRaw();

assertThatRequest(result).wasDenied();
}

public void assertPostGranted(@NonNull String url, Object... pathVariables) {
var result = httpTestClient.post(url, pathVariables)
.body("{}")
.returnRaw();

assertThatRequest(result).wasGranted();
}

public void assertPostDenied(@NonNull String url, Object... pathVariables) {
var result = httpTestClient.post(url, pathVariables)
.body("{}")
.returnRaw();

assertThatRequest(result).wasDenied();
}

public void assertPostMultipartGranted(
@NonNull String url,
@NonNull MockMultipartFile multipartFile,
Object... pathVariables
) {
var result = httpTestClient.postMultipart(url, pathVariables)
.file(multipartFile)
.returnRaw();

assertThatRequest(result).wasGranted();
}

public void assertPostMultipartDenied(
@NonNull String url,
@NonNull MockMultipartFile multipartFile,
Object... pathVariables
) {
var result = httpTestClient.postMultipart(url, pathVariables)
.file(multipartFile)
.returnRaw();

assertThatRequest(result).wasDenied();
}

public void assertPutGranted(@NonNull String url, Object... pathVariables) {
var result = httpTestClient.put(url, pathVariables)
.body("{}")
.returnRaw();

assertThatRequest(result).wasGranted();
}

public void assertPutDenied(@NonNull String url, Object... pathVariables) {
var result = httpTestClient.put(url, pathVariables)
.body("{}")
.returnRaw();

assertThatRequest(result).wasDenied();
}

public void assertPutMultipartGranted(
@NonNull String url,
@NonNull MockMultipartFile multipartFile,
Object... pathVariables
) {
var result = httpTestClient.putMultipart(url, pathVariables)
.file(multipartFile)
.returnRaw();

assertThatRequest(result).wasGranted();
}

public void assertPutMultipartDenied(
@NonNull String url,
@NonNull MockMultipartFile multipartFile,
Object... pathVariables
) {
var result = httpTestClient.putMultipart(url, pathVariables)
.file(multipartFile)
.returnRaw();

assertThatRequest(result).wasDenied();
}

public void assertPatchGranted(@NonNull String url, Object... pathVariables) {
var result = httpTestClient.patch(url, pathVariables)
.body("{}")
.returnRaw();

assertThatRequest(result).wasGranted();
}

public void assertPatchDenied(@NonNull String url, Object... pathVariables) {
var result = httpTestClient.patch(url, pathVariables)
.body("{}")
.returnRaw();

assertThatRequest(result).wasDenied();
}

public void assertPatchMultipartGranted(
@NonNull String url,
@NonNull MockMultipartFile multipartFile,
Object... pathVariables
) {
var result = httpTestClient.patchMultipart(url, pathVariables)
.file(multipartFile)
.returnRaw();

assertThatRequest(result).wasGranted();
}

public void assertPatchMultipartDenied(
@NonNull String url,
@NonNull MockMultipartFile multipartFile,
Object... pathVariables
) {
var result = httpTestClient.patchMultipart(url, pathVariables)
.file(multipartFile)
.returnRaw();

assertThatRequest(result).wasDenied();
}

public void assertDeleteGranted(@NonNull String url, Object... pathVariables) {
var result = httpTestClient.delete(url, pathVariables)
.body("{}")
.returnRaw();

assertThatRequest(result).wasGranted();
}

public void assertDeleteDenied(@NonNull String url, Object... pathVariables) {
var result = httpTestClient.delete(url, pathVariables)
.body("{}")
.returnRaw();

assertThatRequest(result).wasDenied();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package it.aboutbits.springboot.testing.web.request;

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.NonNull;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.mock.web.MockPart;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMultipartHttpServletRequestBuilder;

import java.util.ArrayList;
import java.util.List;

import static org.springframework.http.MediaType.MULTIPART_FORM_DATA;

public abstract class MultipartRequest extends Request<MockMultipartHttpServletRequestBuilder> {
protected List<MockPart> parts = new ArrayList<>();
protected List<MockMultipartFile> files = new ArrayList<>();

MultipartRequest(
@NonNull MockMvc mockMvc,
@NonNull ObjectMapper objectMapper,
@NonNull String url,
@NonNull Object... pathVariables
) {
super(mockMvc, objectMapper, url, MULTIPART_FORM_DATA, pathVariables);
}

public MultipartRequest part(@NonNull MockPart part) {
parts.add(part);
return this;
}

public MultipartRequest file(@NonNull MockMultipartFile file) {
files.add(file);
return this;
}

@Override
protected @NonNull MockMultipartHttpServletRequestBuilder prepareRequestBuilder() {
var requestBuilder = super.prepareRequestBuilder();

for (var file : files) {
requestBuilder.file(file);
}
for (var part : parts) {
requestBuilder.part(part);
}

return requestBuilder;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package it.aboutbits.springboot.testing.web.request;

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.NonNull;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;

import static org.springframework.http.MediaType.APPLICATION_JSON;

public class Patch extends Request<MockHttpServletRequestBuilder> {
Patch(
@NonNull MockMvc mockMvc,
@NonNull ObjectMapper objectMapper,
@NonNull String url,
@NonNull Object... pathVariables
) {
super(mockMvc, objectMapper, url, APPLICATION_JSON, pathVariables);
}

@Override
protected @NonNull MockHttpServletRequestBuilder getRequestBuilder(@NonNull UrlWithVariables url) {
return MockMvcRequestBuilders.patch(url.url(), url.pathVariables());
}

@Override
protected boolean useCsrf() {
return true;
}
}
Loading