loggingMethod) {
super(loggingMethod);
}
-
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/facade/EmailNotificationFacade.java b/src/main/java/de/caritas/cob/uploadservice/api/facade/EmailNotificationFacade.java
index 1528485..5f0df5f 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/facade/EmailNotificationFacade.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/facade/EmailNotificationFacade.java
@@ -4,7 +4,6 @@
import de.caritas.cob.uploadservice.api.helper.EmailNotificationHelper;
import de.caritas.cob.uploadservice.api.tenant.TenantContext;
import java.util.Optional;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@@ -23,7 +22,6 @@ public class EmailNotificationFacade {
@Value("${user.service.api.new.feedback.message.notification}")
private String userServiceApiSendNewFeedbackMessageNotificationUrl;
- @Autowired
public EmailNotificationFacade(
EmailNotificationHelper emailNotificationHelper, AuthenticatedUser authenticatedUser) {
this.emailNotificationHelper = emailNotificationHelper;
@@ -52,6 +50,7 @@ public void sendEmailNotification(String rcGroupId) {
public void sendFeedbackEmailNotification(String rcGroupId) {
emailNotificationHelper.sendEmailFeedbackNotificationViaUserService(
rcGroupId,
- authenticatedUser.getAccessToken(), Optional.ofNullable(TenantContext.getCurrentTenant()));
+ authenticatedUser.getAccessToken(),
+ Optional.ofNullable(TenantContext.getCurrentTenant()));
}
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/facade/UploadFacade.java b/src/main/java/de/caritas/cob/uploadservice/api/facade/UploadFacade.java
index 7dbbf78..396254c 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/facade/UploadFacade.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/facade/UploadFacade.java
@@ -54,20 +54,24 @@ public class UploadFacade {
* If the statistics function is enabled, the assignment of the enquired is processed as
* statistical event.
*
- * @param rocketChatCredentials {@link RocketChatCredentials} container
+ * @param rocketChatCredentials {@link RocketChatCredentials} container
* @param rocketChatUploadParameter {@link RocketChatUploadParameter} container
*/
public void uploadFileToRoom(
RocketChatCredentials rocketChatCredentials,
RocketChatUploadParameter rocketChatUploadParameter,
- boolean sendNotification, String type, String fileHeader) {
+ boolean sendNotification,
+ String type,
+ String fileHeader) {
this.uploadTrackingService.validateUploadLimit(rocketChatUploadParameter.getRoomId());
sanitizeAndEncryptParametersAndUploadToRocketChatRoom(
rocketChatCredentials, rocketChatUploadParameter, type, fileHeader);
- this.liveEventNotificationService.sendLiveEvent(rocketChatUploadParameter.getRoomId(),
- authenticatedUser.getAccessToken(), TenantContext.getCurrentTenantOption());
+ this.liveEventNotificationService.sendLiveEvent(
+ rocketChatUploadParameter.getRoomId(),
+ authenticatedUser.getAccessToken(),
+ TenantContext.getCurrentTenantOption());
this.uploadTrackingService.trackUploadedFileForUser(rocketChatUploadParameter.getRoomId());
if (sendNotification) {
@@ -92,20 +96,24 @@ private UserRole resolveUserRole(AuthenticatedUser authenticatedUser) {
* Upload a file with a message to a Rocket.Chat feedback room. The message and the description
* are encrypted before it is sent to Rocket.Chat.
*
- * @param rocketChatCredentials {@link RocketChatCredentials} container
+ * @param rocketChatCredentials {@link RocketChatCredentials} container
* @param rocketChatUploadParameter {@link RocketChatUploadParameter} container
*/
public void uploadFileToFeedbackRoom(
RocketChatCredentials rocketChatCredentials,
RocketChatUploadParameter rocketChatUploadParameter,
- boolean sendNotification, String type, String fileHeader) {
+ boolean sendNotification,
+ String type,
+ String fileHeader) {
this.uploadTrackingService.validateUploadLimit(rocketChatUploadParameter.getRoomId());
sanitizeAndEncryptParametersAndUploadToRocketChatRoom(
rocketChatCredentials, rocketChatUploadParameter, type, fileHeader);
- this.liveEventNotificationService.sendLiveEvent(rocketChatUploadParameter.getRoomId(),
- authenticatedUser.getAccessToken(), TenantContext.getCurrentTenantOption());
+ this.liveEventNotificationService.sendLiveEvent(
+ rocketChatUploadParameter.getRoomId(),
+ authenticatedUser.getAccessToken(),
+ TenantContext.getCurrentTenantOption());
this.uploadTrackingService.trackUploadedFileForUser(rocketChatUploadParameter.getRoomId());
if (sendNotification) {
@@ -115,7 +123,9 @@ public void uploadFileToFeedbackRoom(
private void sanitizeAndEncryptParametersAndUploadToRocketChatRoom(
RocketChatCredentials rocketChatCredentials,
- RocketChatUploadParameter rocketChatUploadParameter, String type, String fileHeader) {
+ RocketChatUploadParameter rocketChatUploadParameter,
+ String type,
+ String fileHeader) {
rocketChatUploadParameterSanitizer.sanitize(rocketChatUploadParameter);
@@ -140,11 +150,12 @@ private void sanitizeAndEncryptParametersAndUploadToRocketChatRoom(
throw new InternalServerErrorException(e, LogService::logEncryptionServiceError);
}
- FullUploadResponseDto uploadResponse = rocketChatService.roomsUpload(rocketChatCredentials,
- encryptedRocketChatUploadParameter);
+ FullUploadResponseDto uploadResponse =
+ rocketChatService.roomsUpload(rocketChatCredentials, encryptedRocketChatUploadParameter);
if (doAttachmentE2e) {
- if (uploadResponse.getMessage() == null || !StringUtils.hasText(uploadResponse.getMessage().getId())) {
+ if (uploadResponse.getMessage() == null
+ || !StringUtils.hasText(uploadResponse.getMessage().getId())) {
throw new InternalServerErrorException(
new Exception("Upload response message payload or id was empty!"),
LogService::logInternalServerError);
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/helper/AuthenticatedUser.java b/src/main/java/de/caritas/cob/uploadservice/api/helper/AuthenticatedUser.java
index 906bb2e..40e6584 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/helper/AuthenticatedUser.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/helper/AuthenticatedUser.java
@@ -7,25 +7,20 @@
import lombok.NonNull;
import lombok.Setter;
-/**
- * Representation of the via Keyclcoak authentificated user
- */
+/** Representation of the via Keyclcoak authentificated user */
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class AuthenticatedUser {
- @NonNull
- private String userId;
+ @NonNull private String userId;
- @NonNull
- private String username;
+ @NonNull private String username;
private Set roles;
- @NonNull
- private String accessToken;
+ @NonNull private String accessToken;
private Set grantedAuthorities;
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/helper/CustomOffsetDateTime.java b/src/main/java/de/caritas/cob/uploadservice/api/helper/CustomOffsetDateTime.java
index 0d4eec3..58d4da9 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/helper/CustomOffsetDateTime.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/helper/CustomOffsetDateTime.java
@@ -16,5 +16,4 @@ private CustomOffsetDateTime() {}
public static OffsetDateTime nowInUtc() {
return OffsetDateTime.now(ZoneOffset.UTC);
}
-
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/helper/EmailNotificationHelper.java b/src/main/java/de/caritas/cob/uploadservice/api/helper/EmailNotificationHelper.java
index e426d13..c85cf03 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/helper/EmailNotificationHelper.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/helper/EmailNotificationHelper.java
@@ -9,7 +9,6 @@
import de.caritas.cob.uploadservice.userservice.generated.web.model.NewMessageNotificationDTO;
import java.util.Optional;
import java.util.function.Consumer;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
@@ -25,8 +24,8 @@ public class EmailNotificationHelper {
private final TenantHeaderSupplier tenantHeaderSupplier;
private final UserServiceApiControllerFactory userServiceApiControllerFactory;
- @Autowired
- public EmailNotificationHelper(ServiceHelper serviceHelper,
+ public EmailNotificationHelper(
+ ServiceHelper serviceHelper,
TenantHeaderSupplier tenantHeaderSupplier,
UserServiceApiControllerFactory userServiceApiControllerFactory) {
this.serviceHelper = serviceHelper;
@@ -42,8 +41,7 @@ public EmailNotificationHelper(ServiceHelper serviceHelper,
*/
@Async
public void sendEmailNotificationViaUserService(
- String rcGroupId, String accessToken,
- Optional currentTenant) {
+ String rcGroupId, String accessToken, Optional currentTenant) {
var userControllerApi = userServiceApiControllerFactory.createControllerApi();
addDefaultHeaders(userControllerApi.getApiClient(), accessToken, currentTenant);
sendEmailNotificationCallingMethod(rcGroupId, userControllerApi::sendNewMessageNotification);
@@ -51,18 +49,18 @@ public void sendEmailNotificationViaUserService(
@Async
public void sendEmailFeedbackNotificationViaUserService(
- String rcGroupId, String accessToken,
- Optional currentTenant) {
+ String rcGroupId, String accessToken, Optional currentTenant) {
var userControllerApi = userServiceApiControllerFactory.createControllerApi();
addDefaultHeaders(userControllerApi.getApiClient(), accessToken, currentTenant);
- sendEmailNotificationCallingMethod(rcGroupId,
- userControllerApi::sendNewFeedbackMessageNotification);
+ sendEmailNotificationCallingMethod(
+ rcGroupId, userControllerApi::sendNewFeedbackMessageNotification);
}
- private void sendEmailNotificationCallingMethod(String rcGroupId, Consumer newMessageNotificationConsumerMethod) {
+ private void sendEmailNotificationCallingMethod(
+ String rcGroupId, Consumer newMessageNotificationConsumerMethod) {
try {
- NewMessageNotificationDTO notificationDto = new NewMessageNotificationDTO().rcGroupId(
- rcGroupId);
+ NewMessageNotificationDTO notificationDto =
+ new NewMessageNotificationDTO().rcGroupId(rcGroupId);
newMessageNotificationConsumerMethod.accept(notificationDto);
TenantContext.clear();
} catch (RestClientException ex) {
@@ -70,10 +68,10 @@ private void sendEmailNotificationCallingMethod(String rcGroupId, Consumer currentTenant) {
- HttpHeaders headers = this.serviceHelper.getKeycloakAndCsrfHttpHeaders(accessToken,
- currentTenant);
+ private void addDefaultHeaders(
+ ApiClient apiClient, String accessToken, Optional currentTenant) {
+ HttpHeaders headers =
+ this.serviceHelper.getKeycloakAndCsrfHttpHeaders(accessToken, currentTenant);
addTenantHeaderIfPresent(currentTenant, headers);
headers.forEach((key, value) -> apiClient.addDefaultHeader(key, value.iterator().next()));
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/helper/FileSanitizer.java b/src/main/java/de/caritas/cob/uploadservice/api/helper/FileSanitizer.java
index a170fec..500847b 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/helper/FileSanitizer.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/helper/FileSanitizer.java
@@ -3,7 +3,7 @@
import static org.apache.commons.lang3.StringUtils.isBlank;
import org.apache.commons.io.FilenameUtils;
-import org.springframework.util.StringUtils;
+import org.springframework.util.ObjectUtils;
public class FileSanitizer {
@@ -22,7 +22,7 @@ public class FileSanitizer {
*/
public static String sanitizeFileName(String fileName) {
- if (StringUtils.isEmpty(FilenameUtils.getExtension(fileName))) {
+ if (ObjectUtils.isEmpty(FilenameUtils.getExtension(fileName))) {
return null;
}
@@ -37,7 +37,9 @@ public static String sanitizeFileName(String fileName) {
private static String removeSpecialChars(final String fileName) {
- return fileName.trim().replaceAll(REGEX_REMOVE_ALL_DOTS_EXCEPT_LAST, "")
+ return fileName
+ .trim()
+ .replaceAll(REGEX_REMOVE_ALL_DOTS_EXCEPT_LAST, "")
.replaceAll(REGEX_REMOVE_NOT_ALLOWED_SPECIAL_CHARS, "");
}
@@ -46,9 +48,12 @@ private static String limitFileNameLength(final String fileName) {
final String extension = "." + FilenameUtils.getExtension(fileName);
final String fileNameWithoutExtension = fileNameWithoutExtension(fileName);
- return fileNameWithoutExtension.substring(0,
- fileName.length() > MAX_FILE_NAME_LENGTH ? MAX_FILE_NAME_LENGTH - extension.length()
- : fileNameWithoutExtension.length()) + extension;
+ return fileNameWithoutExtension.substring(
+ 0,
+ fileName.length() > MAX_FILE_NAME_LENGTH
+ ? MAX_FILE_NAME_LENGTH - extension.length()
+ : fileNameWithoutExtension.length())
+ + extension;
}
private static boolean isFileNameEmpty(String fileName) {
@@ -56,10 +61,9 @@ private static boolean isFileNameEmpty(String fileName) {
}
private static String fileNameWithoutExtension(String fileName) {
- return fileName
- .substring(0, fileName.length() - (FilenameUtils.getExtension(fileName).length() + 1));
+ return fileName.substring(
+ 0, fileName.length() - (FilenameUtils.getExtension(fileName).length() + 1));
}
- private FileSanitizer() {
- }
-}
\ No newline at end of file
+ private FileSanitizer() {}
+}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/helper/Helper.java b/src/main/java/de/caritas/cob/uploadservice/api/helper/Helper.java
index b01f072..10414c5 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/helper/Helper.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/helper/Helper.java
@@ -31,7 +31,8 @@ public static String removeHtmFromText(String text) {
try {
text = Jsoup.clean(text, StringUtils.EMPTY, Whitelist.none(), outputSettings);
} catch (Exception exception) {
- throw new InternalServerErrorException("Error while removing HTML from text", exception, LogService::logInternalServerError);
+ throw new InternalServerErrorException(
+ "Error while removing HTML from text", exception, LogService::logInternalServerError);
}
return text;
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/helper/JsonStringToObjectConverter.java b/src/main/java/de/caritas/cob/uploadservice/api/helper/JsonStringToObjectConverter.java
index 1e35e23..546a18c 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/helper/JsonStringToObjectConverter.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/helper/JsonStringToObjectConverter.java
@@ -15,7 +15,7 @@ public class JsonStringToObjectConverter {
* Convert a JSON string to an object.
*
* @param jsonAsString JSON as String
- * @param classType Class type
+ * @param classType Class type
* @return if success, instance of classType or null, otherwise null
*/
public T convert(String jsonAsString, Class classType) {
@@ -24,8 +24,8 @@ public T convert(String jsonAsString, Class classType) {
return objectMapper.readValue(jsonAsString, classType);
} catch (IOException | NullPointerException exception) {
LogService.logInternalServerError(
- String.format(
- "Error while converting JSON string to generic object type %s", classType.toString()),
+ "Error while converting JSON string to generic object type %s"
+ .formatted(classType.toString()),
exception);
return null;
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/helper/RocketChatUploadParameterEncrypter.java b/src/main/java/de/caritas/cob/uploadservice/api/helper/RocketChatUploadParameterEncrypter.java
index e9e5459..0053c50 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/helper/RocketChatUploadParameterEncrypter.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/helper/RocketChatUploadParameterEncrypter.java
@@ -3,7 +3,6 @@
import de.caritas.cob.uploadservice.api.container.RocketChatUploadParameter;
import de.caritas.cob.uploadservice.api.exception.CustomCryptoException;
import de.caritas.cob.uploadservice.api.service.EncryptionService;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
@@ -14,7 +13,6 @@ public class RocketChatUploadParameterEncrypter {
private final EncryptionService encryptionService;
- @Autowired
public RocketChatUploadParameterEncrypter(EncryptionService encryptionService) {
this.encryptionService = encryptionService;
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/helper/UserHelper.java b/src/main/java/de/caritas/cob/uploadservice/api/helper/UserHelper.java
index d1a4bb9..ebcc56f 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/helper/UserHelper.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/helper/UserHelper.java
@@ -28,7 +28,7 @@ private String base32EncodeUsername(String username) {
.replace(BASE32_PLACEHOLDER, BASE32_PLACEHOLDER_REPLACE_STRING);
} catch (Exception exception) {
// Catch generic exception because of lack of base32 documentation
- throw new HelperException(String.format("Could not encode username %s", username), exception);
+ throw new HelperException("Could not encode username %s".formatted(username), exception);
}
}
@@ -49,7 +49,7 @@ private String base32DecodeUsername(String username) {
.replace(BASE32_PLACEHOLDER_REPLACE_STRING, BASE32_PLACEHOLDER)));
} catch (Exception exception) {
// Catch generic exception because of lack of base32 documentation
- throw new HelperException(String.format("Could not decode username %s", username), exception);
+ throw new HelperException("Could not decode username %s".formatted(username), exception);
}
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/model/NewMessageNotificationDto.java b/src/main/java/de/caritas/cob/uploadservice/api/model/NewMessageNotificationDto.java
index 1a1ff16..2e97d5d 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/model/NewMessageNotificationDto.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/model/NewMessageNotificationDto.java
@@ -10,5 +10,6 @@
@Getter
@Setter
public class NewMessageNotificationDto {
+
private String rcGroupId;
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/model/UploadByUser.java b/src/main/java/de/caritas/cob/uploadservice/api/model/UploadByUser.java
index a9fcdae..44a8cf3 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/model/UploadByUser.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/model/UploadByUser.java
@@ -1,13 +1,13 @@
package de.caritas.cob.uploadservice.api.model;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.SequenceGenerator;
+import jakarta.persistence.Table;
import java.time.LocalDateTime;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@@ -35,5 +35,4 @@ public class UploadByUser {
@Column(name = "create_date", nullable = false)
private LocalDateTime createDate;
-
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/DataDto.java b/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/DataDto.java
index 4745263..eeefae9 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/DataDto.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/DataDto.java
@@ -11,6 +11,7 @@
@NoArgsConstructor
@AllArgsConstructor
public class DataDto {
+
private String userId;
private String authToken;
private MeDto me;
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/EmailsDto.java b/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/EmailsDto.java
index 5b524d3..39677c1 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/EmailsDto.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/EmailsDto.java
@@ -9,6 +9,7 @@
@Setter
@NoArgsConstructor
public class EmailsDto {
+
private String address;
private boolean verified;
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/LoginResponseDto.java b/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/LoginResponseDto.java
index 8add687..da8495f 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/LoginResponseDto.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/LoginResponseDto.java
@@ -14,6 +14,7 @@
@NoArgsConstructor
@AllArgsConstructor
public class LoginResponseDto {
+
private String status;
private DataDto data;
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/MeDto.java b/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/MeDto.java
index dcdb18b..7fdfac8 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/MeDto.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/MeDto.java
@@ -10,6 +10,7 @@
@Setter
@NoArgsConstructor
public class MeDto {
+
private String username;
private String _id;
private String status;
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/PreferencesDto.java b/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/PreferencesDto.java
index a48440f..37801a4 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/PreferencesDto.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/PreferencesDto.java
@@ -9,6 +9,7 @@
@Setter
@NoArgsConstructor
public class PreferencesDto {
+
private String sidebarViewMode;
private String sidebarGroupByType;
private String sidebarHideAvatar;
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/SettingsDto.java b/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/SettingsDto.java
index 155482c..3051c8c 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/SettingsDto.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/model/rocket/chat/login/SettingsDto.java
@@ -9,5 +9,6 @@
@Setter
@NoArgsConstructor
public class SettingsDto {
+
private PreferencesDto preferences;
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/repository/UploadByUserRepository.java b/src/main/java/de/caritas/cob/uploadservice/api/repository/UploadByUserRepository.java
index c1a492d..1504d71 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/repository/UploadByUserRepository.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/repository/UploadByUserRepository.java
@@ -6,5 +6,4 @@
public interface UploadByUserRepository extends CrudRepository {
Integer countAllByUserIdAndSessionId(String userId, String sessionId);
-
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/service/EncryptionService.java b/src/main/java/de/caritas/cob/uploadservice/api/service/EncryptionService.java
index 8621dc7..fd6b7f3 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/service/EncryptionService.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/service/EncryptionService.java
@@ -7,10 +7,8 @@
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Base64;
-import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/service/FileService.java b/src/main/java/de/caritas/cob/uploadservice/api/service/FileService.java
index 769acc4..463f858 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/service/FileService.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/service/FileService.java
@@ -18,6 +18,7 @@
public class FileService {
private final MimeTypeDetector mimeTypeDetector;
+
@Value("#{${mime-type-whitelist}}")
private final Set mimeTypeWhitelist;
@@ -31,7 +32,8 @@ public void verifyMimeType(MultipartFile multipartFile) {
mimeType = mimeTypeDetector.detect(multipartFile.getInputStream());
} catch (Exception e) {
throw new InternalServerErrorException(
- "failed to detect mime type of file " + multipartFile.getOriginalFilename(), e,
+ "failed to detect mime type of file " + multipartFile.getOriginalFilename(),
+ e,
LogService::logInternalServerError);
}
if (mimeType.isEmpty() || !mimeTypeWhitelist.contains(mimeType.get())) {
@@ -50,7 +52,8 @@ public void verifyFileHeaderMimeType(InputStream fileHeaderInputStream) {
mimeType = mimeTypeDetector.detect(fileHeaderInputStream);
} catch (Exception e) {
throw new InternalServerErrorException(
- "failed to detect mime type of fileHeader " + fileHeaderInputStream, e,
+ "failed to detect mime type of fileHeader " + fileHeaderInputStream,
+ e,
LogService::logInternalServerError);
}
if (mimeType.isEmpty() || !mimeTypeWhitelist.contains(mimeType.get())) {
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/service/LiveEventNotificationService.java b/src/main/java/de/caritas/cob/uploadservice/api/service/LiveEventNotificationService.java
index 963270b..3569c60 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/service/LiveEventNotificationService.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/service/LiveEventNotificationService.java
@@ -13,9 +13,7 @@
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestClientException;
-/**
- * Service class to provide live event triggers to the live proxy endpoint in user service.
- */
+/** Service class to provide live event triggers to the live proxy endpoint in user service. */
@Service
@RequiredArgsConstructor
public class LiveEventNotificationService {
@@ -32,13 +30,14 @@ public class LiveEventNotificationService {
@Async
public void sendLiveEvent(String rcGroupId, String accessToken, Optional tenantId) {
if (isNotBlank(rcGroupId)) {
- LiveproxyControllerApi liveproxyControllerApi = liveProxyApiControllerFactory.createControllerApi();
+ LiveproxyControllerApi liveproxyControllerApi =
+ liveProxyApiControllerFactory.createControllerApi();
addDefaultHeaders(liveproxyControllerApi.getApiClient(), accessToken, tenantId);
try {
liveproxyControllerApi.sendLiveEvent(rcGroupId);
} catch (RestClientException e) {
LogService.logInternalServerError(
- String.format("Unable to trigger live event for rc group id %s", rcGroupId), e);
+ "Unable to trigger live event for rc group id %s".formatted(rcGroupId), e);
}
}
}
@@ -47,5 +46,4 @@ private void addDefaultHeaders(ApiClient apiClient, String accessToken, Optional
var headers = serviceHelper.getKeycloakAndCsrfHttpHeaders(accessToken, tenantId);
headers.forEach((key, value) -> apiClient.addDefaultHeader(key, value.iterator().next()));
}
-
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/service/LogService.java b/src/main/java/de/caritas/cob/uploadservice/api/service/LogService.java
index d8af61a..892e7e0 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/service/LogService.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/service/LogService.java
@@ -18,9 +18,10 @@ public class LogService {
private static final String INTERNAL_SERVER_ERROR_TEXT = "Internal Server Error: ";
private static final String BAD_REQUEST_TEXT = "Bad Request: ";
private static final String UPLOAD_SERVICE_API_TEXT = "UploadService API: {}";
- private static final String STATISTICS_EVENT_PROCESSING_ERROR = "StatisticsEventProcessing error: ";
- private static final String STATISTICS_EVENT_PROCESSING_WARNING = "StatisticsEventProcessing warning: ";
-
+ private static final String STATISTICS_EVENT_PROCESSING_ERROR =
+ "StatisticsEventProcessing error: ";
+ private static final String STATISTICS_EVENT_PROCESSING_WARNING =
+ "StatisticsEventProcessing warning: ";
private LogService() {}
@@ -183,6 +184,4 @@ public static void logStatisticsEventError(Exception exception) {
public static void logStatisticsEventWarning(String message) {
LOGGER.warn("{}{}", STATISTICS_EVENT_PROCESSING_WARNING, message);
}
-
-
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/service/MongoDbService.java b/src/main/java/de/caritas/cob/uploadservice/api/service/MongoDbService.java
index 68b0491..351fbb5 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/service/MongoDbService.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/service/MongoDbService.java
@@ -28,7 +28,8 @@ public class MongoDbService {
* @param messageId ID of the message
*/
public void setE2eType(String messageId) {
- MongoCollection messageCollection = mongoClient.getDatabase("rocketchat").getCollection("rocketchat_message");
+ MongoCollection messageCollection =
+ mongoClient.getDatabase("rocketchat").getCollection("rocketchat_message");
Bson filter = eq("_id", messageId);
Bson update = set("t", "e2e");
UpdateResult result = messageCollection.updateOne(filter, update);
@@ -40,5 +41,4 @@ public void setE2eType(String messageId) {
LogService::logInternalServerError);
}
}
-
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/service/RocketChatService.java b/src/main/java/de/caritas/cob/uploadservice/api/service/RocketChatService.java
index eea1480..124df7b 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/service/RocketChatService.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/service/RocketChatService.java
@@ -100,7 +100,7 @@ public void markGroupAsReadForSystemUser(String rcGroupId)
} else {
LogService.logRocketChatServiceError(
- String.format("Could not set messages as read for system user in group %s", rcGroupId));
+ "Could not set messages as read for system user in group %s".formatted(rcGroupId));
}
}
@@ -110,8 +110,7 @@ private void markGroupAsRead(String rcToken, String rcUserId, String rcGroupId)
try {
HttpHeaders headers = getRocketChatHeader(rcToken, rcUserId);
PostGroupAsReadDto postGroupAsReadDto = new PostGroupAsReadDto(rcGroupId);
- HttpEntity request =
- new HttpEntity<>(postGroupAsReadDto, headers);
+ HttpEntity request = new HttpEntity<>(postGroupAsReadDto, headers);
restTemplate.postForObject(rcPostGroupMessagesRead, request, StandardResponseDto.class);
} catch (Exception ex) {
@@ -142,8 +141,7 @@ public FullUploadResponseDto roomsUpload(
MultiValueMap map =
getParameterMapForUploadRequest(
rocketChatUploadParameter, rocketChatCredentials.getRocketChatUserId());
- HttpEntity> request =
- new HttpEntity<>(map, headers);
+ HttpEntity> request = new HttpEntity<>(map, headers);
response = restTemplate.postForObject(uploadUrl, request, FullUploadResponseDto.class);
@@ -192,7 +190,8 @@ private MultiValueMap getParameterMapForUploadRequest(
throw new InternalServerErrorException(
String.format(
"Could not access file to upload to room with id %s for user with id %s",
- rocketChatUploadParameter.getRoomId(), rcUserId), ex,
+ rocketChatUploadParameter.getRoomId(), rcUserId),
+ ex,
LogService::logInternalServerError);
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/service/TenantHeaderSupplier.java b/src/main/java/de/caritas/cob/uploadservice/api/service/TenantHeaderSupplier.java
index 338b01d..b47f258 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/service/TenantHeaderSupplier.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/service/TenantHeaderSupplier.java
@@ -1,8 +1,8 @@
package de.caritas.cob.uploadservice.api.service;
import de.caritas.cob.uploadservice.api.tenant.TenantContext;
+import jakarta.servlet.http.HttpServletRequest;
import java.util.Optional;
-import javax.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/service/TenantService.java b/src/main/java/de/caritas/cob/uploadservice/api/service/TenantService.java
index df1f9d1..fe95b1b 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/service/TenantService.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/service/TenantService.java
@@ -1,21 +1,31 @@
package de.caritas.cob.uploadservice.api.service;
import de.caritas.cob.uploadservice.config.CacheManagerConfig;
-import de.caritas.cob.uploadservice.tenantservice.generated.web.TenantControllerApi;
+import de.caritas.cob.uploadservice.config.TenantServiceApiControllerFactory;
import de.caritas.cob.uploadservice.tenantservice.generated.web.model.RestrictedTenantDTO;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
+@Slf4j
public class TenantService {
- private final @NonNull TenantControllerApi tenantControllerApi;
+ private final @NonNull TenantServiceApiControllerFactory tenantServiceApiControllerFactory;
@Cacheable(cacheNames = CacheManagerConfig.TENANT_CACHE, key = "#subdomain")
public RestrictedTenantDTO getRestrictedTenantDataBySubdomain(String subdomain) {
- return tenantControllerApi.getRestrictedTenantDataBySubdomainWithHttpInfo(subdomain).getBody();
+ return getRestrictedTenantDto(subdomain);
+ }
+
+ private RestrictedTenantDTO getRestrictedTenantDto(String subdomain) {
+ log.debug("Calling tenant service to get tenant data for subdomain {}", subdomain);
+ return tenantServiceApiControllerFactory
+ .createControllerApi()
+ .getRestrictedTenantDataBySubdomainWithHttpInfo(subdomain)
+ .getBody();
}
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/service/UploadTrackingService.java b/src/main/java/de/caritas/cob/uploadservice/api/service/UploadTrackingService.java
index 0672661..1387ecd 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/service/UploadTrackingService.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/service/UploadTrackingService.java
@@ -11,9 +11,7 @@
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
-/**
- * Service to track uploaded files per user and validate against configurated limit.
- */
+/** Service to track uploaded files per user and validate against configurated limit. */
@Service
@RequiredArgsConstructor
public class UploadTrackingService {
@@ -32,8 +30,8 @@ public class UploadTrackingService {
*/
public void validateUploadLimit(String sessionId) {
String userId = this.authenticatedUser.getUserId();
- Integer uploadCount = this.uploadByUserRepository
- .countAllByUserIdAndSessionId(userId, sessionId);
+ Integer uploadCount =
+ this.uploadByUserRepository.countAllByUserIdAndSessionId(userId, sessionId);
if (uploadCount >= this.uploadLimit) {
throw new QuotaReachedException(LogService::logInfo);
}
@@ -46,11 +44,12 @@ public void validateUploadLimit(String sessionId) {
*/
public void trackUploadedFileForUser(String sessionId) {
String userId = this.authenticatedUser.getUserId();
- UploadByUser uploadByUser = UploadByUser.builder()
- .userId(userId)
- .sessionId(sessionId)
- .createDate(LocalDateTime.now())
- .build();
+ UploadByUser uploadByUser =
+ UploadByUser.builder()
+ .userId(userId)
+ .sessionId(sessionId)
+ .createDate(LocalDateTime.now())
+ .build();
this.uploadByUserRepository.save(uploadByUser);
}
@@ -64,5 +63,4 @@ public void cleanUpFileLimits() {
this.uploadByUserRepository.deleteAll();
LogService.logInfo("File restrictions are reset!");
}
-
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/service/helper/HttpUrlUtils.java b/src/main/java/de/caritas/cob/uploadservice/api/service/helper/HttpUrlUtils.java
index 928cc27..d97d367 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/service/helper/HttpUrlUtils.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/service/helper/HttpUrlUtils.java
@@ -2,7 +2,6 @@
import static org.apache.commons.lang3.Validate.notNull;
-
public class HttpUrlUtils {
private HttpUrlUtils() {}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/service/helper/RocketChatCredentialsHelper.java b/src/main/java/de/caritas/cob/uploadservice/api/service/helper/RocketChatCredentialsHelper.java
index a539389..37dc4c6 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/service/helper/RocketChatCredentialsHelper.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/service/helper/RocketChatCredentialsHelper.java
@@ -7,7 +7,6 @@
import de.caritas.cob.uploadservice.api.model.rocket.chat.logout.LogoutResponseDto;
import de.caritas.cob.uploadservice.api.service.LogService;
import java.time.LocalDateTime;
-import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
@@ -157,13 +156,12 @@ public ResponseEntity loginUser(String username, String passwo
map.add("username", username);
map.add("password", password);
- HttpEntity> request =
- new HttpEntity<>(map, headers);
+ HttpEntity> request = new HttpEntity<>(map, headers);
return restTemplate.postForEntity(rocketChatApiUserLogin, request, LoginResponseDto.class);
} catch (Exception ex) {
LogService.logRocketChatServiceError(
- String.format("Could not login user (%s) in Rocket.Chat", username), ex);
+ "Could not login user (%s) in Rocket.Chat".formatted(username), ex);
throw new RocketChatLoginException(ex);
}
}
@@ -189,7 +187,7 @@ public boolean logoutUser(String rcUserId, String rcAuthToken) {
} catch (Exception ex) {
LogService.logRocketChatServiceError(
- String.format("Could not log out user id (%s) from Rocket.Chat", rcUserId), ex);
+ "Could not log out user id (%s) from Rocket.Chat".formatted(rcUserId), ex);
return false;
}
@@ -215,7 +213,7 @@ private void logoutUser(RocketChatCredentials user) {
private HttpHeaders getStandardHttpHeaders(String rcToken, String rcUserId) {
HttpHeaders httpHeaders = new HttpHeaders();
- httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
+ httpHeaders.setContentType(MediaType.APPLICATION_JSON);
httpHeaders.add(rocketChatHeaderAuthToken, rcToken);
httpHeaders.add(rocketChatHeaderUserId, rcUserId);
return httpHeaders;
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/service/helper/ServiceHelper.java b/src/main/java/de/caritas/cob/uploadservice/api/service/helper/ServiceHelper.java
index af76879..bdf4fc9 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/service/helper/ServiceHelper.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/service/helper/ServiceHelper.java
@@ -51,7 +51,7 @@ private void addAuthorizationHeader(HttpHeaders headers, String accessToken) {
private HttpHeaders addCsrfValues(HttpHeaders httpHeaders) {
String csrfToken = UUID.randomUUID().toString();
- httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
+ httpHeaders.setContentType(MediaType.APPLICATION_JSON);
httpHeaders.add("Cookie", csrfCookieProperty + "=" + csrfToken);
httpHeaders.add(csrfHeaderProperty, csrfToken);
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/statistics/StatisticsService.java b/src/main/java/de/caritas/cob/uploadservice/api/statistics/StatisticsService.java
index f30dd0d..02c9378 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/statistics/StatisticsService.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/statistics/StatisticsService.java
@@ -2,8 +2,8 @@
import de.caritas.cob.uploadservice.api.service.LogService;
import de.caritas.cob.uploadservice.api.statistics.event.StatisticsEvent;
+import jakarta.validation.constraints.NotNull;
import java.nio.charset.StandardCharsets;
-import javax.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.core.MessageBuilder;
@@ -46,9 +46,8 @@ public void fireEvent(StatisticsEvent statisticsEvent) {
.build()),
() ->
LogService.logStatisticsEventWarning(
- String.format(
- "Empty statistics event message payload for type %s received",
- statisticsEvent.getClass().getSimpleName())));
+ "Empty statistics event message payload for type %s received"
+ .formatted(statisticsEvent.getClass().getSimpleName())));
}
}
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/statistics/event/CreateMessageStatisticsEvent.java b/src/main/java/de/caritas/cob/uploadservice/api/statistics/event/CreateMessageStatisticsEvent.java
index f381f9b..0da598a 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/statistics/event/CreateMessageStatisticsEvent.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/statistics/event/CreateMessageStatisticsEvent.java
@@ -34,8 +34,7 @@ public EventType getEventType() {
return EVENT_TYPE;
}
- private CreateMessageStatisticsEventMessage
- createCreateMessageStatisticsEventMessage() {
+ private CreateMessageStatisticsEventMessage createCreateMessageStatisticsEventMessage() {
return new CreateMessageStatisticsEventMessage()
.eventType(EVENT_TYPE)
.userId(userId)
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/tenant/AccessTokenTenantResolver.java b/src/main/java/de/caritas/cob/uploadservice/api/tenant/AccessTokenTenantResolver.java
index 0d79788..0a72c15 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/tenant/AccessTokenTenantResolver.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/tenant/AccessTokenTenantResolver.java
@@ -1,15 +1,15 @@
package de.caritas.cob.uploadservice.api.tenant;
+import jakarta.servlet.http.HttpServletRequest;
import java.util.Map;
import java.util.Optional;
-import javax.servlet.http.HttpServletRequest;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.keycloak.KeycloakSecurityContext;
-import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.oauth2.jwt.Jwt;
import org.springframework.stereotype.Component;
-
@AllArgsConstructor
@Component
@Slf4j
@@ -19,35 +19,40 @@ public class AccessTokenTenantResolver implements TenantResolver {
@Override
public Optional resolve(HttpServletRequest request) {
- return resolveTenantIdFromTokenClaims(request);
+ return resolveTenantIdFromTokenClaims();
}
- private Optional resolveTenantIdFromTokenClaims(HttpServletRequest request) {
- Map claimMap = getClaimMap(request);
+ private Optional resolveTenantIdFromTokenClaims() {
+ Map claimMap = getClaimMap();
log.debug("Found tenantId in claim : " + claimMap.toString());
return getUserTenantIdAttribute(claimMap);
}
private Optional getUserTenantIdAttribute(Map claimMap) {
if (claimMap.containsKey(TENANT_ID)) {
- Integer tenantId = (Integer) claimMap.get(TENANT_ID);
- return Optional.of(Long.valueOf(tenantId));
- } else {
- return Optional.empty();
+ Object tenantIdObject = claimMap.get(TENANT_ID);
+ if (tenantIdObject instanceof Long tenantId) {
+ return Optional.of(tenantId);
+ }
+ if (tenantIdObject instanceof Integer tenantId) {
+ return Optional.of(Long.valueOf(tenantId));
+ }
}
+ return Optional.empty();
}
- private Map getClaimMap(HttpServletRequest request) {
- KeycloakSecurityContext keycloakSecContext =
- ((KeycloakAuthenticationToken) request.getUserPrincipal()).getAccount()
- .getKeycloakSecurityContext();
- return keycloakSecContext.getToken().getOtherClaims();
+ private Map getClaimMap() {
+ Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+ if (authentication != null) {
+ var jwt = (Jwt) authentication.getPrincipal();
+ return jwt.getClaims();
+ } else {
+ return Map.of();
+ }
}
@Override
public boolean canResolve(HttpServletRequest request) {
return resolve(request).isPresent();
}
-
-
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/tenant/CustomHeaderTenantResolver.java b/src/main/java/de/caritas/cob/uploadservice/api/tenant/CustomHeaderTenantResolver.java
index a61e9c1..489aad2 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/tenant/CustomHeaderTenantResolver.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/tenant/CustomHeaderTenantResolver.java
@@ -1,9 +1,8 @@
package de.caritas.cob.uploadservice.api.tenant;
-
import de.caritas.cob.uploadservice.api.service.TenantHeaderSupplier;
+import jakarta.servlet.http.HttpServletRequest;
import java.util.Optional;
-import javax.servlet.http.HttpServletRequest;
import lombok.AllArgsConstructor;
import lombok.NonNull;
import org.springframework.stereotype.Component;
@@ -11,6 +10,7 @@
@Component
@AllArgsConstructor
public class CustomHeaderTenantResolver implements TenantResolver {
+
private final @NonNull TenantHeaderSupplier tenantHeaderSupplier;
@Override
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/tenant/SubdomainTenantResolver.java b/src/main/java/de/caritas/cob/uploadservice/api/tenant/SubdomainTenantResolver.java
index 89c0ffd..0845d5e 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/tenant/SubdomainTenantResolver.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/tenant/SubdomainTenantResolver.java
@@ -5,13 +5,12 @@
import de.caritas.cob.uploadservice.api.service.TenantService;
import de.caritas.cob.uploadservice.filter.SubdomainExtractor;
+import jakarta.servlet.http.HttpServletRequest;
import java.util.Optional;
-import javax.servlet.http.HttpServletRequest;
import lombok.AllArgsConstructor;
import lombok.NonNull;
import org.springframework.stereotype.Component;
-
@AllArgsConstructor
@Component
public class SubdomainTenantResolver implements TenantResolver {
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/tenant/TechnicalUserTenantResolver.java b/src/main/java/de/caritas/cob/uploadservice/api/tenant/TechnicalUserTenantResolver.java
index e7bf4bf..829e505 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/tenant/TechnicalUserTenantResolver.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/tenant/TechnicalUserTenantResolver.java
@@ -1,9 +1,16 @@
package de.caritas.cob.uploadservice.api.tenant;
+import com.google.common.collect.Lists;
+import de.caritas.cob.uploadservice.api.authorization.UserRole;
+import jakarta.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
import java.util.Optional;
-import javax.servlet.http.HttpServletRequest;
-import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken;
import org.keycloak.representations.AccessToken;
+import org.springframework.security.oauth2.jwt.Jwt;
+import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken;
import org.springframework.stereotype.Component;
@Component
@@ -14,10 +21,36 @@ public Optional resolve(HttpServletRequest request) {
return isTechnicalUserRole(request) ? Optional.of(0L) : Optional.empty();
}
+ public Collection extractRealmRoles(Jwt jwt) {
+ Map realmAccess = (Map) jwt.getClaims().get("realm_access");
+ if (realmAccess != null) {
+ var roles = (List) realmAccess.get("roles");
+ System.out.println("Extracted roles: " + roles); // Debug logging
+ if (roles != null) {
+ return roles;
+ }
+ }
+ return Lists.newArrayList();
+ }
+
+ private boolean containsAnyRole(HttpServletRequest request, String... expectedRoles) {
+ if (request.getUserPrincipal() == null) {
+ return false;
+ }
+ JwtAuthenticationToken token = (JwtAuthenticationToken) request.getUserPrincipal();
+ if (token.getToken() == null) {
+ return false;
+ }
+ var roles = extractRealmRoles(token.getToken());
+ return !roles.isEmpty() && containsAny(roles, expectedRoles);
+ }
+
+ private boolean containsAny(Collection roles, String... expectedRoles) {
+ return Arrays.stream(expectedRoles).anyMatch(roles::contains);
+ }
+
private boolean isTechnicalUserRole(HttpServletRequest request) {
- AccessToken token = ((KeycloakAuthenticationToken) request.getUserPrincipal()).getAccount()
- .getKeycloakSecurityContext().getToken();
- return hasRoles(token) && token.getRealmAccess().getRoles().contains("technical");
+ return containsAnyRole(request, UserRole.TECHNICAL.getValue());
}
private boolean hasRoles(AccessToken accessToken) {
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/tenant/TenantContext.java b/src/main/java/de/caritas/cob/uploadservice/api/tenant/TenantContext.java
index 9626b0c..603e268 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/tenant/TenantContext.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/tenant/TenantContext.java
@@ -4,9 +4,7 @@
public class TenantContext {
- private TenantContext() {
-
- }
+ private TenantContext() {}
private static ThreadLocal currentTenant = new ThreadLocal<>();
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/tenant/TenantResolver.java b/src/main/java/de/caritas/cob/uploadservice/api/tenant/TenantResolver.java
index 833005a..46fc666 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/tenant/TenantResolver.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/tenant/TenantResolver.java
@@ -1,7 +1,7 @@
package de.caritas.cob.uploadservice.api.tenant;
+import jakarta.servlet.http.HttpServletRequest;
import java.util.Optional;
-import javax.servlet.http.HttpServletRequest;
public interface TenantResolver {
diff --git a/src/main/java/de/caritas/cob/uploadservice/api/tenant/TenantResolverService.java b/src/main/java/de/caritas/cob/uploadservice/api/tenant/TenantResolverService.java
index 8fcd396..88923ce 100644
--- a/src/main/java/de/caritas/cob/uploadservice/api/tenant/TenantResolverService.java
+++ b/src/main/java/de/caritas/cob/uploadservice/api/tenant/TenantResolverService.java
@@ -2,16 +2,18 @@
import static com.google.common.collect.Lists.newArrayList;
+import jakarta.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
-import javax.servlet.http.HttpServletRequest;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.security.access.AccessDeniedException;
+import org.springframework.security.core.context.SecurityContext;
+import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
@Slf4j
@@ -20,17 +22,13 @@
@Component
public class TenantResolverService {
- @NonNull
- CustomHeaderTenantResolver customHeaderTenantResolver;
+ @NonNull CustomHeaderTenantResolver customHeaderTenantResolver;
- @NonNull
- SubdomainTenantResolver subdomainTenantResolver;
+ @NonNull SubdomainTenantResolver subdomainTenantResolver;
- @NonNull
- TechnicalUserTenantResolver technicalUserTenantResolver;
+ @NonNull TechnicalUserTenantResolver technicalUserTenantResolver;
- @NonNull
- AccessTokenTenantResolver accessTokenTenantResolver;
+ @NonNull AccessTokenTenantResolver accessTokenTenantResolver;
@Value("${feature.multitenancy.with.single.domain.enabled}")
private boolean multitenancyWithSingleDomain;
@@ -61,8 +59,8 @@ private Long resolveForAuthenticatedUser(HttpServletRequest request) {
return tenantId.orElseThrow();
} else {
if (shouldValidateResolvedTenant(tenantId)) {
- Optional tenantIdFromCustomHeaderOrSubdomain = getFirstResolvedTenant(request,
- tenantIdCrossValidationResolvers());
+ Optional tenantIdFromCustomHeaderOrSubdomain =
+ getFirstResolvedTenant(request, tenantIdCrossValidationResolvers());
validateResolvedTenantMatch(tenantId, tenantIdFromCustomHeaderOrSubdomain);
}
return tenantId.orElseThrow();
@@ -85,8 +83,8 @@ private Long resolveForNonAuthenticatedUser(HttpServletRequest request) {
return tenantId.get();
}
- private void validateResolvedTenantMatch(Optional tenantId,
- Optional tenantIdFromHeaderOrSubdomain) {
+ private void validateResolvedTenantMatch(
+ Optional tenantId, Optional tenantIdFromHeaderOrSubdomain) {
if (tenantId.isPresent() && tenantIdFromHeaderOrSubdomain.isPresent()) {
if (!tenantId.get().equals(tenantIdFromHeaderOrSubdomain.get())) {
throw new AccessDeniedException("Tenant id from claim and subdomain not same.");
@@ -96,8 +94,8 @@ private void validateResolvedTenantMatch(Optional tenantId,
}
}
- private Optional getFirstResolvedTenant(HttpServletRequest request,
- List tenantResolvers) {
+ private Optional getFirstResolvedTenant(
+ HttpServletRequest request, List tenantResolvers) {
for (TenantResolver tenantResolver : tenantResolvers) {
if (tenantResolver.canResolve(request)) {
return tenantResolver.resolve(request);
@@ -107,6 +105,10 @@ private Optional getFirstResolvedTenant(HttpServletRequest request,
}
private boolean userIsAuthenticated(HttpServletRequest request) {
- return request.getUserPrincipal() != null;
+ /* after upgrade to oauth2ResourceServer security configuration (spring 6.x upgrade)
+ for authenticated users request.getUserPrincipal() might be still null at the time of HttpTenantFilter is executed
+ but BearerTokenAuthenticationFilter has already set the principal in the SecurityContext */
+ SecurityContext context = SecurityContextHolder.getContext();
+ return context.getAuthentication() != null && context.getAuthentication().isAuthenticated();
}
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/config/AppConfig.java b/src/main/java/de/caritas/cob/uploadservice/config/AppConfig.java
index 05fa5df..63b2d0a 100644
--- a/src/main/java/de/caritas/cob/uploadservice/config/AppConfig.java
+++ b/src/main/java/de/caritas/cob/uploadservice/config/AppConfig.java
@@ -8,17 +8,14 @@
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.web.client.RestTemplate;
-/**
- * Contains some general spring boot application configurations
- *
- */
+/** Contains some general spring boot application configurations */
@Configuration
@ComponentScan(basePackages = {"de.caritas.cob.uploadservice"})
public class AppConfig {
/**
* Activate the messages.properties for validation messages.
- *
+ *
* @param messageSource
* @return
*/
diff --git a/src/main/java/de/caritas/cob/uploadservice/config/AuthorisationService.java b/src/main/java/de/caritas/cob/uploadservice/config/AuthorisationService.java
new file mode 100644
index 0000000..5c8a40e
--- /dev/null
+++ b/src/main/java/de/caritas/cob/uploadservice/config/AuthorisationService.java
@@ -0,0 +1,49 @@
+package de.caritas.cob.uploadservice.config;
+
+import com.google.common.collect.Lists;
+import de.caritas.cob.uploadservice.api.authorization.RoleAuthorizationAuthorityMapper;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.oauth2.jwt.Jwt;
+import org.springframework.stereotype.Service;
+
+@Service
+public class AuthorisationService {
+
+ private final RoleAuthorizationAuthorityMapper roleAuthorizationAuthorityMapper =
+ new RoleAuthorizationAuthorityMapper();
+
+ public Object getUsername() {
+ return getPrincipal().getClaims().get("username");
+ }
+
+ private Authentication getAuthentication() {
+ return SecurityContextHolder.getContext().getAuthentication();
+ }
+
+ private Jwt getPrincipal() {
+ return (Jwt) getAuthentication().getPrincipal();
+ }
+
+ public Collection extractRealmAuthorities(Jwt jwt) {
+ var roles = extractRealmRoles(jwt);
+ return roleAuthorizationAuthorityMapper.mapAuthorities(
+ roles.stream().collect(Collectors.toSet()));
+ }
+
+ public Collection extractRealmRoles(Jwt jwt) {
+ Map realmAccess = (Map) jwt.getClaims().get("realm_access");
+ if (realmAccess != null) {
+ var roles = (List) realmAccess.get("roles");
+ if (roles != null) {
+ return roles;
+ }
+ }
+ return Lists.newArrayList();
+ }
+}
diff --git a/src/main/java/de/caritas/cob/uploadservice/config/CacheManagerConfig.java b/src/main/java/de/caritas/cob/uploadservice/config/CacheManagerConfig.java
index 883f3fd..da438f3 100644
--- a/src/main/java/de/caritas/cob/uploadservice/config/CacheManagerConfig.java
+++ b/src/main/java/de/caritas/cob/uploadservice/config/CacheManagerConfig.java
@@ -1,10 +1,12 @@
package de.caritas.cob.uploadservice.config;
+import java.util.Collection;
+import java.util.List;
import net.sf.ehcache.config.CacheConfiguration;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
-import org.springframework.cache.ehcache.EhCacheCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -48,5 +50,18 @@ private CacheConfiguration buildTenantCacheConfiguration() {
return tenantCacheConfiguration;
}
+ private class EhCacheCacheManager implements CacheManager {
+ public EhCacheCacheManager(net.sf.ehcache.CacheManager cacheManager) {}
+
+ @Override
+ public Cache getCache(String name) {
+ return null;
+ }
+
+ @Override
+ public Collection getCacheNames() {
+ return List.of();
+ }
+ }
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/config/CustomSwaggerUiPathWebMvcConfigurer.java b/src/main/java/de/caritas/cob/uploadservice/config/CustomSwaggerUiPathWebMvcConfigurer.java
index f2d220f..6cf22a4 100644
--- a/src/main/java/de/caritas/cob/uploadservice/config/CustomSwaggerUiPathWebMvcConfigurer.java
+++ b/src/main/java/de/caritas/cob/uploadservice/config/CustomSwaggerUiPathWebMvcConfigurer.java
@@ -13,8 +13,9 @@ public class CustomSwaggerUiPathWebMvcConfigurer implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
- registry.addResourceHandler(docuPath + "/swagger-ui/**")
- .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/");
+ registry
+ .addResourceHandler(docuPath + "/swagger-ui/**")
+ .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/");
registry
.addResourceHandler(docuPath + "/**")
.addResourceLocations("classpath:/META-INF/resources/");
diff --git a/src/main/java/de/caritas/cob/uploadservice/config/GlobalMethodSecurityConfig.java b/src/main/java/de/caritas/cob/uploadservice/config/GlobalMethodSecurityConfig.java
index da9e377..4f698b8 100644
--- a/src/main/java/de/caritas/cob/uploadservice/config/GlobalMethodSecurityConfig.java
+++ b/src/main/java/de/caritas/cob/uploadservice/config/GlobalMethodSecurityConfig.java
@@ -1,33 +1,33 @@
package de.caritas.cob.uploadservice.config;
import de.caritas.cob.uploadservice.api.authorization.Authority.AuthorityValue;
-import java.util.ArrayList;
import java.util.List;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.access.AccessDecisionManager;
import org.springframework.security.access.AccessDecisionVoter;
+import org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler;
import org.springframework.security.access.expression.method.ExpressionBasedPreInvocationAdvice;
import org.springframework.security.access.vote.AffirmativeBased;
import org.springframework.security.access.vote.AuthenticatedVoter;
import org.springframework.security.access.vote.RoleVoter;
-import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
-import org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration;
+import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.core.GrantedAuthorityDefaults;
@Configuration
-@EnableGlobalMethodSecurity(securedEnabled = true)
-public class GlobalMethodSecurityConfig extends GlobalMethodSecurityConfiguration {
+@EnableMethodSecurity(securedEnabled = true, prePostEnabled = false)
+public class GlobalMethodSecurityConfig {
- @Override
- protected AccessDecisionManager accessDecisionManager() {
- List> decisionVoters = new ArrayList<>();
+ @Bean
+ public AccessDecisionManager accessDecisionManager() {
ExpressionBasedPreInvocationAdvice expressionAdvice = new ExpressionBasedPreInvocationAdvice();
- expressionAdvice.setExpressionHandler(getExpressionHandler());
+ expressionAdvice.setExpressionHandler(methodSecurityExpressionHandler());
+
RoleVoter roleVoter = new RoleVoter();
- roleVoter.setRolePrefix("");
- decisionVoters.add(roleVoter);
- decisionVoters.add(new AuthenticatedVoter());
+ roleVoter.setRolePrefix(""); // Remove default "ROLE_" prefix
+
+ List> decisionVoters = List.of(roleVoter, new AuthenticatedVoter());
+
return new AffirmativeBased(decisionVoters);
}
@@ -35,4 +35,9 @@ protected AccessDecisionManager accessDecisionManager() {
public GrantedAuthorityDefaults grantedAuthorityDefaults() {
return new GrantedAuthorityDefaults(AuthorityValue.PREFIX);
}
+
+ @Bean
+ public DefaultMethodSecurityExpressionHandler methodSecurityExpressionHandler() {
+ return new DefaultMethodSecurityExpressionHandler();
+ }
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/config/JwtAuthConverter.java b/src/main/java/de/caritas/cob/uploadservice/config/JwtAuthConverter.java
new file mode 100644
index 0000000..e3309d8
--- /dev/null
+++ b/src/main/java/de/caritas/cob/uploadservice/config/JwtAuthConverter.java
@@ -0,0 +1,60 @@
+package de.caritas.cob.uploadservice.config;
+
+import java.util.Collection;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
+import org.springframework.core.convert.converter.Converter;
+import org.springframework.security.authentication.AbstractAuthenticationToken;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.oauth2.jwt.Jwt;
+import org.springframework.security.oauth2.jwt.JwtClaimNames;
+import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken;
+import org.springframework.security.oauth2.server.resource.authentication.JwtGrantedAuthoritiesConverter;
+import org.springframework.stereotype.Component;
+
+@Component
+@RequiredArgsConstructor
+public class JwtAuthConverter implements Converter {
+
+ private final @NonNull AuthorisationService authorisationService;
+
+ private final JwtGrantedAuthoritiesConverter jwtGrantedAuthoritiesConverter =
+ new JwtGrantedAuthoritiesConverter();
+
+ private final JwtAuthConverterProperties properties;
+
+ public JwtAuthConverter(
+ JwtAuthConverterProperties properties, AuthorisationService authorisationService) {
+ this.properties = properties;
+ this.authorisationService = authorisationService;
+ }
+
+ @Override
+ public AbstractAuthenticationToken convert(Jwt jwt) {
+ var authorities = getGrantedAuthorities(jwt);
+ return new JwtAuthenticationToken(jwt, authorities, getPrincipalClaimName(jwt));
+ }
+
+ private Collection getGrantedAuthorities(Jwt jwt) {
+ Collection convertedGrantedAuthorities =
+ jwtGrantedAuthoritiesConverter.convert(jwt);
+ if (convertedGrantedAuthorities != null) {
+ return Stream.concat(
+ convertedGrantedAuthorities.stream(),
+ authorisationService.extractRealmAuthorities(jwt).stream())
+ .collect(Collectors.toSet());
+ } else {
+ return authorisationService.extractRealmAuthorities(jwt);
+ }
+ }
+
+ private String getPrincipalClaimName(Jwt jwt) {
+ String claimName = JwtClaimNames.SUB;
+ if (properties.getPrincipalAttribute() != null) {
+ claimName = properties.getPrincipalAttribute();
+ }
+ return jwt.getClaim(claimName);
+ }
+}
diff --git a/src/main/java/de/caritas/cob/uploadservice/config/JwtAuthConverterProperties.java b/src/main/java/de/caritas/cob/uploadservice/config/JwtAuthConverterProperties.java
new file mode 100644
index 0000000..82ba14f
--- /dev/null
+++ b/src/main/java/de/caritas/cob/uploadservice/config/JwtAuthConverterProperties.java
@@ -0,0 +1,16 @@
+package de.caritas.cob.uploadservice.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.validation.annotation.Validated;
+
+@Data
+@Validated
+@Configuration
+@ConfigurationProperties(prefix = "jwt.auth.converter")
+public class JwtAuthConverterProperties {
+
+ private String resourceId;
+ private String principalAttribute;
+}
diff --git a/src/main/java/de/caritas/cob/uploadservice/config/KeycloakConfiguration.java b/src/main/java/de/caritas/cob/uploadservice/config/KeycloakConfiguration.java
index ef69a8a..71fa672 100644
--- a/src/main/java/de/caritas/cob/uploadservice/config/KeycloakConfiguration.java
+++ b/src/main/java/de/caritas/cob/uploadservice/config/KeycloakConfiguration.java
@@ -6,10 +6,11 @@
@Configuration
public class KeycloakConfiguration {
+
/**
- * Use the KeycloakSpringBootConfigResolver to be able to save the Keycloak settings in the spring
- * application properties.
- */
+ * Use the KeycloakSpringBootConfigResolver to be able to save the Keycloak settings in the spring
+ * application properties.
+ */
@Bean
public KeycloakSpringBootConfigResolver KeycloakConfigResolver() {
return new KeycloakSpringBootConfigResolver();
diff --git a/src/main/java/de/caritas/cob/uploadservice/config/MongoDbConfig.java b/src/main/java/de/caritas/cob/uploadservice/config/MongoDbConfig.java
index d006c4e..e28ac9f 100644
--- a/src/main/java/de/caritas/cob/uploadservice/config/MongoDbConfig.java
+++ b/src/main/java/de/caritas/cob/uploadservice/config/MongoDbConfig.java
@@ -17,10 +17,8 @@ public class MongoDbConfig {
@Bean
public MongoClient mongoClient() {
final ConnectionString connectionString = new ConnectionString(mongoUri);
- final MongoClientSettings mongoClientSettings = MongoClientSettings.builder()
- .applyConnectionString(connectionString)
- .build();
+ final MongoClientSettings mongoClientSettings =
+ MongoClientSettings.builder().applyConnectionString(connectionString).build();
return MongoClients.create(mongoClientSettings);
}
-
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/config/SecurityConfig.java b/src/main/java/de/caritas/cob/uploadservice/config/SecurityConfig.java
index 0d089c7..2e3721d 100644
--- a/src/main/java/de/caritas/cob/uploadservice/config/SecurityConfig.java
+++ b/src/main/java/de/caritas/cob/uploadservice/config/SecurityConfig.java
@@ -6,44 +6,31 @@
import static de.caritas.cob.uploadservice.api.authorization.Authority.AuthorityValue.USER_DEFAULT;
import static de.caritas.cob.uploadservice.api.authorization.Authority.AuthorityValue.USE_FEEDBACK;
-import de.caritas.cob.uploadservice.api.authorization.RoleAuthorizationAuthorityMapper;
import de.caritas.cob.uploadservice.filter.HttpTenantFilter;
import de.caritas.cob.uploadservice.filter.StatelessCsrfFilter;
-import org.keycloak.adapters.AdapterDeploymentContext;
-import org.keycloak.adapters.KeycloakConfigResolver;
-import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver;
-import org.keycloak.adapters.springsecurity.AdapterDeploymentContextFactoryBean;
+import lombok.RequiredArgsConstructor;
import org.keycloak.adapters.springsecurity.KeycloakConfiguration;
-import org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider;
-import org.keycloak.adapters.springsecurity.client.KeycloakClientRequestFactory;
-import org.keycloak.adapters.springsecurity.config.KeycloakSpringConfigResolverWrapper;
-import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter;
-import org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticatedActionsFilter;
-import org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter;
-import org.keycloak.adapters.springsecurity.filter.KeycloakPreAuthActionsFilter;
-import org.keycloak.adapters.springsecurity.filter.KeycloakSecurityContextRequestFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.context.annotation.Primary;
-import org.springframework.core.env.Environment;
-import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
+import org.springframework.security.oauth2.server.resource.web.authentication.BearerTokenAuthenticationFilter;
+import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.session.NullAuthenticatedSessionStrategy;
import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy;
import org.springframework.security.web.csrf.CsrfFilter;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-/**
- * Provides the Keycloak/Spring Security configuration.
- */
+@Configuration
@KeycloakConfiguration
-public class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter {
-
- @SuppressWarnings("unused")
- private final KeycloakClientRequestFactory keycloakClientRequestFactory;
+@EnableWebSecurity
+@EnableMethodSecurity
+@RequiredArgsConstructor
+public class SecurityConfig implements WebMvcConfigurer {
@Value("${csrf.cookie.property}")
private String csrfCookieProperty;
@@ -54,138 +41,76 @@ public class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter {
@Value("${csrf.whitelist.header.property}")
private String csrfWhitelistHeaderProperty;
- @Autowired
- private Environment environment;
-
@Autowired(required = false)
private HttpTenantFilter httpTenantFilter;
@Value("${multitenancy.enabled}")
private boolean multitenancy;
- /**
- * Processes HTTP requests and checks for a valid spring security authentication for the
- * (Keycloak) principal (authorization header).
- */
- public SecurityConfig(KeycloakClientRequestFactory keycloakClientRequestFactory) {
- this.keycloakClientRequestFactory = keycloakClientRequestFactory;
- }
+ // Whitelist for Swagger, Actuator endpoints, etc.
+ public static final String[] WHITE_LIST = {
+ "/uploads/docs",
+ "/uploads/docs/**",
+ "/v2/api-docs",
+ "/configuration/ui",
+ "/swagger-resources/**",
+ "/configuration/security",
+ "/swagger-ui",
+ "/swagger-ui/**",
+ "/webjars/**",
+ "/actuator/health",
+ "/actuator/health/**"
+ };
+
+ @Autowired AuthorisationService authorisationService;
+
+ @Autowired JwtAuthConverterProperties jwtAuthConverterProperties;
+
+ /** Defines our SecurityFilterChain (the new style in Spring Security 6). */
+ @Bean
+ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
- /**
- * Configure spring security filter chain: disable default Spring Boot CSRF token behavior and add
- * custom {@link StatelessCsrfFilter}, set all sessions to be fully stateless, define necessary
- * Keycloak roles for specific REST API paths
- */
- @Override
- protected void configure(HttpSecurity http) throws Exception {
- super.configure(http);
-
- HttpSecurity httpSecurity = http.csrf()
- .disable()
+ http.csrf(csrf -> csrf.disable())
.addFilterBefore(
- new StatelessCsrfFilter(csrfCookieProperty, csrfHeaderProperty,
- csrfWhitelistHeaderProperty), CsrfFilter.class);
+ new StatelessCsrfFilter(
+ csrfCookieProperty, csrfHeaderProperty, csrfWhitelistHeaderProperty),
+ CsrfFilter.class);
- if (multitenancy) {
- httpSecurity = httpSecurity
- .addFilterAfter(httpTenantFilter, KeycloakAuthenticatedActionsFilter.class);
+ if (multitenancy && httpTenantFilter != null) {
+ http.addFilterAfter(httpTenantFilter, BearerTokenAuthenticationFilter.class);
}
- httpSecurity
- .sessionManagement()
- .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
- .sessionAuthenticationStrategy(sessionAuthenticationStrategy())
- .and()
- .authorizeRequests()
- .antMatchers(SpringFoxConfig.WHITE_LIST)
- .permitAll()
- .antMatchers("/uploads/messages/key")
- .hasAuthority(TECHNICAL_DEFAULT)
- .antMatchers("/uploads/new/{roomId:[0-9A-Za-z]+}")
- .hasAnyAuthority(USER_DEFAULT, CONSULTANT_DEFAULT, ANONYMOUS_DEFAULT)
- .antMatchers("/uploads/feedback/new/{feedbackRoomId:[0-9A-Za-z]+}")
- .hasAnyAuthority(USE_FEEDBACK)
- .anyRequest()
- .denyAll();
+ http.sessionManagement(
+ session ->
+ session
+ .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
+ .sessionAuthenticationStrategy(sessionAuthenticationStrategy()));
+
+ http.authorizeHttpRequests(
+ auth ->
+ auth.requestMatchers(WHITE_LIST)
+ .permitAll()
+ .requestMatchers("/uploads/messages/key")
+ .hasAuthority(TECHNICAL_DEFAULT)
+ .requestMatchers("/uploads/new/{roomId:[0-9A-Za-z]+}")
+ .hasAnyAuthority(USER_DEFAULT, CONSULTANT_DEFAULT, ANONYMOUS_DEFAULT)
+ .requestMatchers("/uploads/feedback/new/{feedbackRoomId:[0-9A-Za-z]+}")
+ .hasAuthority(USE_FEEDBACK)
+ .anyRequest()
+ .denyAll())
+ .oauth2ResourceServer(
+ oauth2 -> oauth2.jwt(jwt -> jwt.jwtAuthenticationConverter(jwtAuthConverter())));
+ return http.build();
}
- /**
- * Change springs authentication strategy to be stateless (no session is being created).
- */
@Bean
- @Override
- protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
- return new NullAuthenticatedSessionStrategy();
- }
-
- /**
- * Change the default AuthenticationProvider to KeycloakAuthenticationProvider and register it in
- * the spring security context. Set the GrantedAuthoritiesMapper to map the Keycloak roles to the
- * granted authorities.
- */
- @Autowired
- public void configureGlobal(
- final AuthenticationManagerBuilder auth, RoleAuthorizationAuthorityMapper authorityMapper) {
- KeycloakAuthenticationProvider keyCloakAuthProvider = keycloakAuthenticationProvider();
- keyCloakAuthProvider.setGrantedAuthoritiesMapper(authorityMapper);
- auth.authenticationProvider(keyCloakAuthProvider);
+ public JwtAuthConverter jwtAuthConverter() {
+ return new JwtAuthConverter(jwtAuthConverterProperties, authorisationService);
}
- /**
- * From the Keycloag documentation: "Spring Boot attempts to eagerly register filter beans with
- * the web application context. Therefore, when running the Keycloak Spring Security adapter in a
- * Spring Boot environment, it may be necessary to add FilterRegistrationBeans to your security
- * configuration to prevent the Keycloak filters from being registered twice."
- *
- * https://github.com/keycloak/keycloak-documentation/blob/master/securing_apps/topics/oidc/java/spring-security-adapter.adoc
- *
- *
{@link package.class label}
- */
- @SuppressWarnings({"rawtypes", "unchecked"})
+ /** Use a NullAuthenticatedSessionStrategy for stateless sessions. */
@Bean
- public FilterRegistrationBean keycloakAuthenticationProcessingFilterRegistrationBean(
- KeycloakAuthenticationProcessingFilter filter) {
- FilterRegistrationBean registrationBean = new FilterRegistrationBean(filter);
- registrationBean.setEnabled(false);
- return registrationBean;
- }
-
- /**
- * see above: {@link SecurityConfig#keycloakAuthenticationProcessingFilterRegistrationBean
- * (KeycloakAuthenticationProcessingFilter)
- */
- @SuppressWarnings({"rawtypes", "unchecked"})
- @Bean
- public FilterRegistrationBean keycloakPreAuthActionsFilterRegistrationBean(
- KeycloakPreAuthActionsFilter filter) {
- FilterRegistrationBean registrationBean = new FilterRegistrationBean(filter);
- registrationBean.setEnabled(false);
- return registrationBean;
- }
-
- /**
- * see above: {@link SecurityConfig#keycloakAuthenticationProcessingFilterRegistrationBean
- * (KeycloakAuthenticationProcessingFilter)
- */
- @SuppressWarnings({"rawtypes", "unchecked"})
- @Bean
- public FilterRegistrationBean keycloakAuthenticatedActionsFilterBean(
- KeycloakAuthenticatedActionsFilter filter) {
- FilterRegistrationBean registrationBean = new FilterRegistrationBean(filter);
- registrationBean.setEnabled(false);
- return registrationBean;
- }
-
- /**
- * see above: {@link SecurityConfig#keycloakAuthenticationProcessingFilterRegistrationBean
- * (KeycloakAuthenticationProcessingFilter)
- */
- @SuppressWarnings({"rawtypes", "unchecked"})
- @Bean
- public FilterRegistrationBean keycloakSecurityContextRequestFilterBean(
- KeycloakSecurityContextRequestFilter filter) {
- FilterRegistrationBean registrationBean = new FilterRegistrationBean(filter);
- registrationBean.setEnabled(false);
- return registrationBean;
+ protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
+ return new NullAuthenticatedSessionStrategy();
}
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/config/SpringFoxConfig.java b/src/main/java/de/caritas/cob/uploadservice/config/SpringFoxConfig.java
index a25bf32..1ed4123 100644
--- a/src/main/java/de/caritas/cob/uploadservice/config/SpringFoxConfig.java
+++ b/src/main/java/de/caritas/cob/uploadservice/config/SpringFoxConfig.java
@@ -1,85 +1,41 @@
package de.caritas.cob.uploadservice.config;
-import static java.util.Collections.singletonList;
-
-import java.util.Collections;
import java.util.HashSet;
-import java.util.List;
import java.util.Set;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
-import springfox.documentation.builders.PathSelectors;
-import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.service.ApiInfo;
-import springfox.documentation.service.ApiKey;
-import springfox.documentation.service.AuthorizationScope;
-import springfox.documentation.service.Contact;
-import springfox.documentation.service.SecurityReference;
-import springfox.documentation.service.SecurityScheme;
-import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spi.service.contexts.SecurityContext;
-import springfox.documentation.spring.web.plugins.Docket;
-/**
- * Provides the SpringFox (API documentation generation) configuration.
- *
- */
+/** Provides the SpringFox (API documentation generation) configuration. */
@Configuration
-@Import(BeanValidatorPluginsConfiguration.class)
public class SpringFoxConfig {
@Value("${springfox.docuTitle}")
private String docuTitle;
+
@Value("${springfox.docuDescription}")
private String docuDescription;
+
@Value("${springfox.docuVersion}")
private String docuVersion;
+
@Value("${springfox.docuTermsUrl}")
private String docuTermsUrl;
+
@Value("${springfox.docuContactName}")
private String docuContactName;
+
@Value("${springfox.docuContactUrl}")
private String docuContactUrl;
+
@Value("${springfox.docuContactEmail}")
private String docuContactEmail;
+
@Value("${springfox.docuLicense}")
private String docuLicense;
+
@Value("${springfox.docuLicenseUrl}")
private String docuLicenseUrl;
- // White list for path patterns that should be white listed so that swagger UI can be accessed
- // without authorization
- public static final String[] WHITE_LIST = new String[]{"/uploads/docs", "/uploads/docs/**",
- "/v2/api-docs", "/configuration/ui",
- "/swagger-resources/**", "/configuration/security", "/swagger-ui", "/swagger-ui/**",
- "/webjars/**", "/actuator/health", "/actuator/health/**"};
-
- @Bean
- public Docket apiDocket() {
- return new Docket(DocumentationType.SWAGGER_2).select()
- .apis(RequestHandlerSelectors.basePackage("de.caritas.cob.uploadservice.api")).build()
- .consumes(getContentTypes()).produces(getContentTypes()).apiInfo(getApiInfo())
- .useDefaultResponseMessages(false).protocols(protocols()).securitySchemes(securitySchemes())
- .securityContexts(securityContexts());
- }
-
- private List securityContexts() {
- return singletonList(SecurityContext.builder()
- .forPaths(PathSelectors.any()).securityReferences(securityReferences()).build());
- }
-
- private List securityReferences() {
- return singletonList(
- SecurityReference.builder().reference("token").scopes(new AuthorizationScope[0]).build());
- }
-
- private List securitySchemes() {
- return singletonList(new ApiKey("Bearer", "Authorization", "header"));
- }
-
/**
* Returns the API protocols (for documentation)
*
@@ -92,23 +48,10 @@ private Set protocols() {
return protocols;
}
- /**
- * Returns all content types which should be consumed/produced
- */
+ /** Returns all content types which should be consumed/produced */
private Set getContentTypes() {
Set contentTypes = new HashSet<>();
contentTypes.add("application/json");
return contentTypes;
}
-
- /**
- * Returns the API information (defined in application.properties)
- *
- * @return
- */
- private ApiInfo getApiInfo() {
- return new ApiInfo(docuTitle, docuDescription, docuVersion, docuTermsUrl,
- new Contact(docuContactName, docuContactUrl, docuContactEmail), docuLicense, docuLicenseUrl,
- Collections.emptyList());
- }
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/config/TenantServiceApiClient.java b/src/main/java/de/caritas/cob/uploadservice/config/TenantServiceApiClient.java
index a374606..66b5c93 100644
--- a/src/main/java/de/caritas/cob/uploadservice/config/TenantServiceApiClient.java
+++ b/src/main/java/de/caritas/cob/uploadservice/config/TenantServiceApiClient.java
@@ -1,26 +1,12 @@
package de.caritas.cob.uploadservice.config;
-import static java.util.Objects.isNull;
-import static java.util.Objects.nonNull;
-import static org.apache.commons.lang3.StringUtils.isEmpty;
-
-import de.caritas.cob.uploadservice.api.exception.httpresponses.InternalServerErrorException;
-import java.beans.IntrospectionException;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.util.Arrays;
import java.util.Collection;
-import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
-/**
- * Extension of the generated UserService API client to adapt the handling of parameter values.
- */
-public class TenantServiceApiClient extends
- de.caritas.cob.uploadservice.tenantservice.generated.ApiClient {
-
- private static final String FILTER_NAME = "filter";
+/** Extension of the generated UserService API client to adapt the handling of parameter values. */
+public class TenantServiceApiClient
+ extends de.caritas.cob.uploadservice.tenantservice.generated.ApiClient {
public TenantServiceApiClient(RestTemplate restTemplate) {
super(restTemplate);
@@ -31,54 +17,18 @@ public TenantServiceApiClient(RestTemplate restTemplate) {
* which are not {@link Collection} for filter query params.
*
* @param collectionFormat The format to convert to
- * @param name The name of the parameter
- * @param value The parameter's value
+ * @param name The name of the parameter
+ * @param value The parameter's value
* @return a Map containing non-null String value(s) of the input parameter
*/
@Override
public MultiValueMap parameterToMultiValueMap(
CollectionFormat collectionFormat, String name, Object value) {
- if (noValidFilterParams(name, value)) {
+ if (TenantServiceHelper.noValidFilterParams(name, value)) {
return super.parameterToMultiValueMap(collectionFormat, name, value);
}
- return obtainQueryParameters(value);
- }
-
- private boolean noValidFilterParams(String queryName, Object queryValue) {
- return isEmpty(queryName) || !queryName.equals(FILTER_NAME) || isNull(queryValue);
- }
-
- private MultiValueMap obtainQueryParameters(Object queryValue) {
- MultiValueMap paramMap = new LinkedMultiValueMap<>();
-
- try {
- Arrays.asList(Introspector.getBeanInfo(queryValue.getClass(), Object.class)
- .getPropertyDescriptors())
- .stream()
- .filter(descriptor -> nonNull(descriptor.getReadMethod()))
- .forEach(descriptor -> setMethodKeyValuePairs(queryValue, paramMap, descriptor));
- return paramMap;
-
- } catch (IntrospectionException exception) {
- throw new InternalServerErrorException(
- String.format("Could not obtain method properties of %s", queryValue.toString()),
- exception);
- }
- }
-
- private void setMethodKeyValuePairs(Object queryValue, MultiValueMap map,
- PropertyDescriptor descriptor) {
- try {
- Object value = descriptor.getReadMethod().invoke(queryValue);
- if (nonNull(value)) {
- map.add(descriptor.getName(), value.toString());
- }
- } catch (Exception exception) {
- throw new InternalServerErrorException(
- String.format("Could not obtain method key value pairs of %s", queryValue.toString()),
- exception);
- }
+ return TenantServiceHelper.obtainQueryParameters(value);
}
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/config/TenantServiceApiClientConfig.java b/src/main/java/de/caritas/cob/uploadservice/config/TenantServiceApiClientConfig.java
deleted file mode 100644
index c999bdb..0000000
--- a/src/main/java/de/caritas/cob/uploadservice/config/TenantServiceApiClientConfig.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package de.caritas.cob.uploadservice.config;
-
-import de.caritas.cob.uploadservice.tenantservice.generated.ApiClient;
-import de.caritas.cob.uploadservice.tenantservice.generated.web.TenantControllerApi;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Primary;
-import org.springframework.stereotype.Component;
-import org.springframework.web.client.RestTemplate;
-
-@Component
-@ConditionalOnExpression("${multitenancy.enabled:true}")
-public class TenantServiceApiClientConfig {
-
- @Value("${tenant.service.api.url}")
- private String tenantServiceApiUrl;
-
- @Bean
- public TenantControllerApi tenantControllerApi(
- ApiClient apiClient) {
- return new TenantControllerApi(apiClient);
- }
-
- @Bean
- @Primary
- public ApiClient tenantApiClient(RestTemplate restTemplate) {
- ApiClient apiClient = new TenantServiceApiClient(restTemplate);
- apiClient.setBasePath(this.tenantServiceApiUrl);
- return apiClient;
- }
-}
\ No newline at end of file
diff --git a/src/main/java/de/caritas/cob/uploadservice/config/TenantServiceApiControllerFactory.java b/src/main/java/de/caritas/cob/uploadservice/config/TenantServiceApiControllerFactory.java
new file mode 100644
index 0000000..5e2243c
--- /dev/null
+++ b/src/main/java/de/caritas/cob/uploadservice/config/TenantServiceApiControllerFactory.java
@@ -0,0 +1,23 @@
+package de.caritas.cob.uploadservice.config;
+
+import de.caritas.cob.uploadservice.tenantservice.generated.web.TenantControllerApi;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+@Component
+public class TenantServiceApiControllerFactory {
+
+ @Value("${tenant.service.api.url}")
+ private String tenantServiceApiUrl;
+
+ @Autowired private RestTemplate restTemplate;
+
+ public TenantControllerApi createControllerApi() {
+ var apiClient = new TenantServiceApiClient(restTemplate).setBasePath(this.tenantServiceApiUrl);
+ TenantControllerApi controllerApi = new TenantControllerApi(apiClient);
+ controllerApi.setApiClient(apiClient);
+ return controllerApi;
+ }
+}
diff --git a/src/main/java/de/caritas/cob/uploadservice/config/TenantServiceHelper.java b/src/main/java/de/caritas/cob/uploadservice/config/TenantServiceHelper.java
new file mode 100644
index 0000000..45147e1
--- /dev/null
+++ b/src/main/java/de/caritas/cob/uploadservice/config/TenantServiceHelper.java
@@ -0,0 +1,57 @@
+package de.caritas.cob.uploadservice.config;
+
+import static java.util.Objects.isNull;
+import static java.util.Objects.nonNull;
+import static org.apache.commons.lang3.StringUtils.isEmpty;
+
+import de.caritas.cob.uploadservice.api.exception.httpresponses.InternalServerErrorException;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.util.Arrays;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+
+public class TenantServiceHelper {
+
+ private static final String FILTER_NAME = "filter";
+
+ private TenantServiceHelper() { // hide public constructor
+ }
+
+ public static boolean noValidFilterParams(String queryName, Object queryValue) {
+ return isEmpty(queryName) || !queryName.equals(FILTER_NAME) || isNull(queryValue);
+ }
+
+ public static MultiValueMap obtainQueryParameters(Object queryValue) {
+ MultiValueMap paramMap = new LinkedMultiValueMap<>();
+
+ try {
+ Arrays.asList(
+ Introspector.getBeanInfo(queryValue.getClass(), Object.class)
+ .getPropertyDescriptors())
+ .stream()
+ .filter(descriptor -> nonNull(descriptor.getReadMethod()))
+ .forEach(descriptor -> setMethodKeyValuePairs(queryValue, paramMap, descriptor));
+ return paramMap;
+
+ } catch (IntrospectionException exception) {
+ throw new InternalServerErrorException(
+ "Could not obtain method properties of %s".formatted(queryValue.toString()), exception);
+ }
+ }
+
+ private static void setMethodKeyValuePairs(
+ Object queryValue, MultiValueMap map, PropertyDescriptor descriptor) {
+ try {
+ Object value = descriptor.getReadMethod().invoke(queryValue);
+ if (nonNull(value)) {
+ map.add(descriptor.getName(), value.toString());
+ }
+ } catch (Exception exception) {
+ throw new InternalServerErrorException(
+ "Could not obtain method key value pairs of %s".formatted(queryValue.toString()),
+ exception);
+ }
+ }
+}
diff --git a/src/main/java/de/caritas/cob/uploadservice/config/apiclient/LiveProxyApiControllerFactory.java b/src/main/java/de/caritas/cob/uploadservice/config/apiclient/LiveProxyApiControllerFactory.java
index fad1e46..85da652 100644
--- a/src/main/java/de/caritas/cob/uploadservice/config/apiclient/LiveProxyApiControllerFactory.java
+++ b/src/main/java/de/caritas/cob/uploadservice/config/apiclient/LiveProxyApiControllerFactory.java
@@ -12,8 +12,8 @@ public class LiveProxyApiControllerFactory {
@Value("${user.service.api.liveproxy.url}")
private String liveProxyApiUrl;
- @Autowired
- private RestTemplate restTemplate;
+
+ @Autowired private RestTemplate restTemplate;
public LiveproxyControllerApi createControllerApi() {
var apiClient = new ApiClient(restTemplate).setBasePath(this.liveProxyApiUrl);
diff --git a/src/main/java/de/caritas/cob/uploadservice/config/apiclient/UserServiceApiControllerFactory.java b/src/main/java/de/caritas/cob/uploadservice/config/apiclient/UserServiceApiControllerFactory.java
index 2d11cef..fead3d7 100644
--- a/src/main/java/de/caritas/cob/uploadservice/config/apiclient/UserServiceApiControllerFactory.java
+++ b/src/main/java/de/caritas/cob/uploadservice/config/apiclient/UserServiceApiControllerFactory.java
@@ -12,8 +12,8 @@ public class UserServiceApiControllerFactory {
@Value("${user.service.api.url}")
private String userServiceApiUrl;
- @Autowired
- private RestTemplate restTemplate;
+
+ @Autowired private RestTemplate restTemplate;
public UserControllerApi createControllerApi() {
var apiClient = new ApiClient(restTemplate).setBasePath(this.userServiceApiUrl);
diff --git a/src/main/java/de/caritas/cob/uploadservice/filter/HttpTenantFilter.java b/src/main/java/de/caritas/cob/uploadservice/filter/HttpTenantFilter.java
index 698153c..9599789 100644
--- a/src/main/java/de/caritas/cob/uploadservice/filter/HttpTenantFilter.java
+++ b/src/main/java/de/caritas/cob/uploadservice/filter/HttpTenantFilter.java
@@ -1,16 +1,15 @@
package de.caritas.cob.uploadservice.filter;
import de.caritas.cob.uploadservice.api.tenant.TenantContext;
-import de.caritas.cob.uploadservice.api.tenant.TenantResolver;
import de.caritas.cob.uploadservice.api.tenant.TenantResolverService;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
@@ -18,10 +17,7 @@
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
-
-/**
- * Sets tenantId for current thread needed for tenant feature.
- */
+/** Sets tenantId for current thread needed for tenant feature. */
@Component
@ConditionalOnExpression("${multitenancy.enabled:true}")
@RequiredArgsConstructor
@@ -36,8 +32,9 @@ public class HttpTenantFilter extends OncePerRequestFilter {
new DefaultRequiresTenantFilterMatcher();
@Override
- protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
- FilterChain filterChain) throws ServletException, IOException {
+ protected void doFilterInternal(
+ HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
+ throws ServletException, IOException {
if (requiresTenantFilterMatcher.matches(request)) {
log.debug("Trying to resolve tenant for request coming from URI {}", request.getRequestURI());
Long tenantId = tenantResolverService.resolve(request);
@@ -54,6 +51,7 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
}
class DefaultRequiresTenantFilterMatcher implements RequestMatcher {
+
@Override
public boolean matches(HttpServletRequest request) {
@@ -66,4 +64,4 @@ private boolean belongsToWhitelist(HttpServletRequest request, List tena
.anyMatch(request.getRequestURI().toLowerCase()::contains);
}
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/de/caritas/cob/uploadservice/filter/StatelessCsrfFilter.java b/src/main/java/de/caritas/cob/uploadservice/filter/StatelessCsrfFilter.java
index e2156e4..73128d8 100644
--- a/src/main/java/de/caritas/cob/uploadservice/filter/StatelessCsrfFilter.java
+++ b/src/main/java/de/caritas/cob/uploadservice/filter/StatelessCsrfFilter.java
@@ -1,16 +1,16 @@
package de.caritas.cob.uploadservice.filter;
-import static de.caritas.cob.uploadservice.config.SpringFoxConfig.WHITE_LIST;
import static org.apache.commons.lang3.StringUtils.isNotBlank;
+import de.caritas.cob.uploadservice.config.SecurityConfig;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.regex.Pattern;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import org.springframework.security.access.AccessDeniedException;
@@ -19,9 +19,7 @@
import org.springframework.security.web.util.matcher.RequestMatcher;
import org.springframework.web.filter.OncePerRequestFilter;
-/**
- * This custom filter checks CSRF cookie and header token for equality
- */
+/** This custom filter checks CSRF cookie and header token for equality */
public class StatelessCsrfFilter extends OncePerRequestFilter {
private final RequestMatcher requireCsrfProtectionMatcher;
@@ -29,8 +27,8 @@ public class StatelessCsrfFilter extends OncePerRequestFilter {
private final String csrfCookieProperty;
private final String csrfHeaderProperty;
- public StatelessCsrfFilter(String cookieProperty, String headerProperty,
- String csrfWhitelistHeaderProperty) {
+ public StatelessCsrfFilter(
+ String cookieProperty, String headerProperty, String csrfWhitelistHeaderProperty) {
this.csrfCookieProperty = cookieProperty;
this.csrfHeaderProperty = headerProperty;
this.requireCsrfProtectionMatcher = new DefaultRequiresCsrfMatcher(csrfWhitelistHeaderProperty);
@@ -75,7 +73,7 @@ public boolean matches(HttpServletRequest request) {
}
private boolean isWhiteListUrl(HttpServletRequest request) {
- return Arrays.asList(WHITE_LIST).parallelStream()
+ return Arrays.asList(SecurityConfig.WHITE_LIST).parallelStream()
.anyMatch(request.getRequestURI().toLowerCase()::contains);
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/filter/SubdomainExtractor.java b/src/main/java/de/caritas/cob/uploadservice/filter/SubdomainExtractor.java
index 58cc196..74a6760 100644
--- a/src/main/java/de/caritas/cob/uploadservice/filter/SubdomainExtractor.java
+++ b/src/main/java/de/caritas/cob/uploadservice/filter/SubdomainExtractor.java
@@ -1,13 +1,12 @@
package de.caritas.cob.uploadservice.filter;
-
import static java.util.Optional.empty;
import static java.util.Optional.of;
import com.google.common.net.InternetDomainName;
import de.caritas.cob.uploadservice.api.service.helper.HttpUrlUtils;
+import jakarta.servlet.http.HttpServletRequest;
import java.util.Optional;
-import javax.servlet.http.HttpServletRequest;
import lombok.AllArgsConstructor;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
@@ -35,4 +34,3 @@ public Optional getSubdomain(String url) {
return of(domain.parts().get(0));
}
}
-
diff --git a/src/main/java/de/caritas/cob/uploadservice/media/MimeTypeDetector.java b/src/main/java/de/caritas/cob/uploadservice/media/MimeTypeDetector.java
index 6910258..4fb0c97 100644
--- a/src/main/java/de/caritas/cob/uploadservice/media/MimeTypeDetector.java
+++ b/src/main/java/de/caritas/cob/uploadservice/media/MimeTypeDetector.java
@@ -6,5 +6,4 @@
public interface MimeTypeDetector {
Optional detect(InputStream input);
-
}
diff --git a/src/main/java/de/caritas/cob/uploadservice/scheduler/RocketChatCredentialsHelperScheduler.java b/src/main/java/de/caritas/cob/uploadservice/scheduler/RocketChatCredentialsHelperScheduler.java
index 326b210..149c34a 100644
--- a/src/main/java/de/caritas/cob/uploadservice/scheduler/RocketChatCredentialsHelperScheduler.java
+++ b/src/main/java/de/caritas/cob/uploadservice/scheduler/RocketChatCredentialsHelperScheduler.java
@@ -4,7 +4,7 @@
import de.caritas.cob.uploadservice.api.exception.httpresponses.InternalServerErrorException;
import de.caritas.cob.uploadservice.api.service.LogService;
import de.caritas.cob.uploadservice.api.service.helper.RocketChatCredentialsHelper;
-import javax.annotation.PostConstruct;
+import jakarta.annotation.PostConstruct;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Profile;
diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties
index b635665..0c9752f 100644
--- a/src/main/resources/application-local.properties
+++ b/src/main/resources/application-local.properties
@@ -3,7 +3,6 @@ logging.level.root=INFO
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
logging.level.de.caritas.cob.uploadservice.scheduler=DEBUG
-
# Keycloak
keycloak.auth-server-url=
keycloak.realm=
@@ -15,7 +14,6 @@ keycloakService.techuser.id=
keycloakService.admin.username=
keycloakService.admin.password=
keycloakService.admin.clientId=admin-cli
-
# Rocket.Chat
rocket.systemuser.username=
rocket.systemuser.password=
diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties
index ea0f4ec..f626cc1 100644
--- a/src/main/resources/application-prod.properties
+++ b/src/main/resources/application-prod.properties
@@ -2,7 +2,6 @@
logging.level.root=INFO
logging.level.org.springframework.web=INFO
logging.level.org.hibernate=ERROR
-
# Keycloak
keycloak.auth-server-url=
keycloak.realm=
diff --git a/src/main/resources/application-testing.properties b/src/main/resources/application-testing.properties
index 5718586..8beb046 100644
--- a/src/main/resources/application-testing.properties
+++ b/src/main/resources/application-testing.properties
@@ -1,10 +1,8 @@
# Testing profile for unit tests
spring.main.allow-bean-definition-overriding=true
-
# Logging: SLF4J (via Lombok)
logging.level.root=INFO
logging.level.org.springframework.web=DEBUG
-
# Keycloak
keycloak.auth-server-url=
keycloak.realm=
@@ -29,14 +27,12 @@ user.service.api.liveproxy.url=:
spring.liquibase.enabled=false
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
-spring.datasource.schema=classpath*:database/UploadDatabase.sql
+spring.sql.init.schema-locations=classpath*:database/UploadDatabase.sql
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.open-in-view=false
spring.jpa.hibernate.ddl-auto=none
spring.data.jpa.repositories.bootstrap-mode=default
-
upload.file.perday.limit=7
-
# Statistics
statistics.enabled=true
spring.mongodb.embedded.version=3.5.5
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index d34afcc..4195331 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -5,8 +5,8 @@ spring.profiles.active=@activeSpringProfile@
spring.main.allow-bean-definition-overriding=true
# General app settings
server.port=8080
-spring.mvc.locale=de_DE
-spring.mvc.pathmatch.matching-strategy = ANT_PATH_MATCHER
+spring.web.locale=de_DE
+spring.mvc.pathmatch.matching-strategy=ANT_PATH_MATCHER
spring.jackson.time-zone=Europe/Berlin
service.encryption.appkey=
# Logging: SLF4J (via Lombok)
@@ -77,34 +77,33 @@ spring.liquibase.change-log=classpath:db/changelog/uploadservice-local-master.xm
spring.liquibase.user=root
spring.liquibase.password=root
spring.liquibase.default-schema=uploadservice
-
# RabbitMQ
spring.rabbitmq.host=rabbitmq
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin
-
# Statistics
statistics.enabled=false
statistics.rabbitmq.exchange.name=statistics.topic
-
# MongoDB
mongodb.uri=mongodb://:@mongodb:27017/rocketchat?retryWrites=false
-
# MIME type whitelist for file upload. Supports png, jpeg, doc, docx and pdf.
mime-type-whitelist={'image/png','image/jpeg','application/msword','application/vnd.openxmlformats-officedocument.wordprocessingml.document','application/pdf','application/x-tika-ooxml'}
cache.tenant.configuration.maxEntriesLocalHeap=100
cache.tenant.configuration.eternal=false
cache.tenant.configuration.timeToIdleSeconds=0
cache.tenant.configuration.timeToLiveSeconds=86400
-
multitenancy.enabled=false
tenant.service.api.url=
feature.multitenancy.with.single.domain.enabled=false
-
management.endpoint.health.enabled=true
management.endpoint.health.show-details=never
management.endpoints.web.exposure.include=health
-management.health.probes.enabled=true
+management.endpoint.health.probes.enabled=true
management.metrics.mongo.command.enabled=false
-management.metrics.mongo.connectionpool.enabled=false
\ No newline at end of file
+management.metrics.mongo.connectionpool.enabled=false
+
+spring.security.oauth2.resourceserver.jwt.issuer-uri=https://localhost/auth/realms/onlineberatung
+spring.security.oauth2.resourceserver.jwt.jwk-set-uri=https://localhost/auth/realms/onlineberatung/protocol/openid-connect/certs
+spring.jwt.auth.converter.resource-id: app
+spring.jwt.auth.converter.principal-attribute: preferred_username
\ No newline at end of file
diff --git a/src/main/resources/db/changelog/changeset/0001_initsql/initSql.xml b/src/main/resources/db/changelog/changeset/0001_initsql/initSql.xml
index e23426f..aaaa807 100644
--- a/src/main/resources/db/changelog/changeset/0001_initsql/initSql.xml
+++ b/src/main/resources/db/changelog/changeset/0001_initsql/initSql.xml
@@ -1,9 +1,11 @@
-
-
-
-
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
+
+
+
+
+
+
diff --git a/src/main/resources/db/changelog/changeset/0002_alter_upload_by_user_add_session_id/0002_changeSet.xml b/src/main/resources/db/changelog/changeset/0002_alter_upload_by_user_add_session_id/0002_changeSet.xml
index 8cf6c8a..ee4871e 100644
--- a/src/main/resources/db/changelog/changeset/0002_alter_upload_by_user_add_session_id/0002_changeSet.xml
+++ b/src/main/resources/db/changelog/changeset/0002_alter_upload_by_user_add_session_id/0002_changeSet.xml
@@ -1,13 +1,15 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/src/main/resources/db/changelog/uploadservice-dev-master.xml b/src/main/resources/db/changelog/uploadservice-dev-master.xml
index 0c844fa..c33c35b 100644
--- a/src/main/resources/db/changelog/uploadservice-dev-master.xml
+++ b/src/main/resources/db/changelog/uploadservice-dev-master.xml
@@ -1,12 +1,12 @@
-
+
-
-
-
-
+
+
+
+
diff --git a/src/main/resources/db/changelog/uploadservice-local-master.xml b/src/main/resources/db/changelog/uploadservice-local-master.xml
index c47e7de..c33c35b 100644
--- a/src/main/resources/db/changelog/uploadservice-local-master.xml
+++ b/src/main/resources/db/changelog/uploadservice-local-master.xml
@@ -1,12 +1,12 @@
-
+
-
-
-
+
+
+
diff --git a/src/main/resources/db/changelog/uploadservice-prod-master.xml b/src/main/resources/db/changelog/uploadservice-prod-master.xml
index 97128ee..bf4e5d0 100644
--- a/src/main/resources/db/changelog/uploadservice-prod-master.xml
+++ b/src/main/resources/db/changelog/uploadservice-prod-master.xml
@@ -1,4 +1,4 @@
-
+
+
roles =
- Sets.newSet(
- UserRole.USER.getValue(),
- UserRole.CONSULTANT.getValue(),
- UserRole.PEER_CONSULTANT.getValue(),
- UserRole.ANONYMOUS.getValue());
+ Stream.of(UserRole.values()).map(UserRole::getValue).collect(Collectors.toSet());
@Test
- public void roleAuthorizationAuthorityMapper_Should_GrantCorrectAuthorities() {
-
- Principal principal = mock(Principal.class);
- RefreshableKeycloakSecurityContext securityContext =
- mock(RefreshableKeycloakSecurityContext.class);
- KeycloakAccount account = new SimpleKeycloakAccount(principal, roles, securityContext);
-
- KeycloakAuthenticationToken token = new KeycloakAuthenticationToken(account, false);
+ void roleAuthorizationAuthorityMapper_Should_GrantCorrectAuthorities() {
RoleAuthorizationAuthorityMapper roleAuthorizationAuthorityMapper =
new RoleAuthorizationAuthorityMapper();
- provider.setGrantedAuthoritiesMapper(roleAuthorizationAuthorityMapper);
- Authentication result = provider.authenticate(token);
+ var result = roleAuthorizationAuthorityMapper.mapAuthorities(roles);
Set expectedGrantendAuthorities = new HashSet<>();
- roles.forEach(roleName -> {
- expectedGrantendAuthorities.addAll(Authority
- .getAuthoritiesByUserRole(UserRole.getRoleByValue(roleName).get()).stream()
- .map(SimpleGrantedAuthority::new).collect(Collectors.toSet()));
- });
-
- assertThat(expectedGrantendAuthorities, containsInAnyOrder(result.getAuthorities().toArray()));
+ roles.forEach(
+ roleName -> {
+ expectedGrantendAuthorities.addAll(
+ Authority.getAuthoritiesByUserRole(UserRole.getRoleByValue(roleName).get()).stream()
+ .map(SimpleGrantedAuthority::new)
+ .collect(Collectors.toSet()));
+ });
+
+ assertThat(expectedGrantendAuthorities).isEqualTo(result);
}
}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/controller/ActuatorControllerIT.java b/src/test/java/de/caritas/cob/uploadservice/api/controller/ActuatorControllerIT.java
index 657f4e2..975b2ea 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/controller/ActuatorControllerIT.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/controller/ActuatorControllerIT.java
@@ -1,6 +1,6 @@
package de.caritas.cob.uploadservice.api.controller;
-import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
+import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON;
import static org.hamcrest.Matchers.is;
import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/controller/UploadControllerAuthorizationTestIT.java b/src/test/java/de/caritas/cob/uploadservice/api/controller/UploadControllerAuthorizationTestIT.java
index fdbc05d..764e343 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/controller/UploadControllerAuthorizationTestIT.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/controller/UploadControllerAuthorizationTestIT.java
@@ -20,10 +20,9 @@
import de.caritas.cob.uploadservice.api.facade.UploadFacade;
import de.caritas.cob.uploadservice.api.service.EncryptionService;
import de.caritas.cob.uploadservice.api.service.RocketChatService;
-import javax.servlet.http.Cookie;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import jakarta.servlet.http.Cookie;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase.Replace;
@@ -34,31 +33,25 @@
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.context.TestPropertySource;
-import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
-@RunWith(SpringRunner.class)
@TestPropertySource(properties = "spring.profiles.active=testing")
@SpringBootTest
@AutoConfigureMockMvc
@AutoConfigureTestDatabase(replace = Replace.ANY)
public class UploadControllerAuthorizationTestIT {
- @Autowired
- private MockMvc mvc;
+ @Autowired private MockMvc mvc;
- @MockBean
- private RocketChatService rocketChatService;
+ @MockBean private RocketChatService rocketChatService;
- @MockBean
- private EncryptionService encryptionService;
+ @MockBean private EncryptionService encryptionService;
- @MockBean
- private UploadFacade uploadFacade;
+ @MockBean private UploadFacade uploadFacade;
private Cookie csrfCookie;
- @Before
+ @BeforeEach
public void setUp() {
csrfCookie = new Cookie(CSRF_COOKIE, CSRF_VALUE);
}
@@ -68,11 +61,11 @@ public void updateKey_Should_ReturnUnauthorizedAndCallNoMethods_WhenNoKeycloakAu
throws Exception {
mvc.perform(
- post(PATH_UPDATE_KEY)
- .cookie(csrfCookie)
- .header(CSRF_HEADER, CSRF_VALUE)
- .contentType(MediaType.APPLICATION_JSON)
- .accept(MediaType.APPLICATION_JSON))
+ post(PATH_UPDATE_KEY)
+ .cookie(csrfCookie)
+ .header(CSRF_HEADER, CSRF_VALUE)
+ .contentType(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON))
.andExpect(status().isUnauthorized());
verifyNoMoreInteractions(encryptionService);
@@ -84,11 +77,11 @@ public void updateKey_Should_ReturnForbiddenAndCallNoMethods_WhenNoTechnicalDefa
throws Exception {
mvc.perform(
- post(PATH_UPDATE_KEY)
- .cookie(csrfCookie)
- .header(CSRF_HEADER, CSRF_VALUE)
- .contentType(MediaType.APPLICATION_JSON)
- .accept(MediaType.APPLICATION_JSON))
+ post(PATH_UPDATE_KEY)
+ .cookie(csrfCookie)
+ .header(CSRF_HEADER, CSRF_VALUE)
+ .contentType(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON))
.andExpect(status().isForbidden());
verifyNoMoreInteractions(encryptionService);
@@ -99,24 +92,25 @@ public void updateKey_Should_ReturnForbiddenAndCallNoMethods_WhenNoTechnicalDefa
public void updateKey_Should_ReturnForbiddenAndCallNoMethods_WhenNoCsrfTokens() throws Exception {
mvc.perform(
- post(PATH_UPDATE_KEY)
- .contentType(MediaType.APPLICATION_JSON)
- .accept(MediaType.APPLICATION_JSON))
+ post(PATH_UPDATE_KEY)
+ .contentType(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON))
.andExpect(status().isForbidden());
verifyNoMoreInteractions(encryptionService);
}
@Test
- public void uploadFileToRoom_Should_ReturnUnauthorizedAndCallNoMethods_WhenNoKeycloakAuthorization()
- throws Exception {
+ public void
+ uploadFileToRoom_Should_ReturnUnauthorizedAndCallNoMethods_WhenNoKeycloakAuthorization()
+ throws Exception {
mvc.perform(
- post(PATH_UPLOAD_FILE_TO_ROOM + "/" + RC_ROOM_ID)
- .cookie(csrfCookie)
- .header(CSRF_HEADER, CSRF_VALUE)
- .contentType(MediaType.APPLICATION_JSON)
- .accept(MediaType.APPLICATION_JSON))
+ post(PATH_UPLOAD_FILE_TO_ROOM + "/" + RC_ROOM_ID)
+ .cookie(csrfCookie)
+ .header(CSRF_HEADER, CSRF_VALUE)
+ .contentType(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON))
.andExpect(status().isUnauthorized());
verifyNoMoreInteractions(rocketChatService);
@@ -125,15 +119,16 @@ public void uploadFileToRoom_Should_ReturnUnauthorizedAndCallNoMethods_WhenNoKey
@Test
@WithMockUser
- public void uploadFileToRoom_Should_ReturnForbiddenAndCallNoMethods_WhenNoUserOrConsultantAuthority()
- throws Exception {
+ public void
+ uploadFileToRoom_Should_ReturnForbiddenAndCallNoMethods_WhenNoUserOrConsultantAuthority()
+ throws Exception {
mvc.perform(
- post(PATH_UPLOAD_FILE_TO_ROOM + "/" + RC_ROOM_ID)
- .cookie(csrfCookie)
- .header(CSRF_HEADER, CSRF_VALUE)
- .contentType(MediaType.APPLICATION_JSON)
- .accept(MediaType.APPLICATION_JSON))
+ post(PATH_UPLOAD_FILE_TO_ROOM + "/" + RC_ROOM_ID)
+ .cookie(csrfCookie)
+ .header(CSRF_HEADER, CSRF_VALUE)
+ .contentType(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON))
.andExpect(status().isForbidden());
verifyNoMoreInteractions(rocketChatService);
@@ -146,9 +141,9 @@ public void uploadFileToRoom_Should_ReturnForbiddenAndCallNoMethods_WhenNoCsrfTo
throws Exception {
mvc.perform(
- post(PATH_UPLOAD_FILE_TO_ROOM + "/" + RC_ROOM_ID)
- .contentType(MediaType.APPLICATION_JSON)
- .accept(MediaType.APPLICATION_JSON))
+ post(PATH_UPLOAD_FILE_TO_ROOM + "/" + RC_ROOM_ID)
+ .contentType(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON))
.andExpect(status().isForbidden());
verifyNoMoreInteractions(rocketChatService);
@@ -156,15 +151,16 @@ public void uploadFileToRoom_Should_ReturnForbiddenAndCallNoMethods_WhenNoCsrfTo
}
@Test
- public void uploadFileToFeedbackRoom_Should_Return401AndCallNoMethods_WhenNoKeycloakAuthorization()
- throws Exception {
+ public void
+ uploadFileToFeedbackRoom_Should_Return401AndCallNoMethods_WhenNoKeycloakAuthorization()
+ throws Exception {
mvc.perform(
- post(PATH_UPLOAD_FILE_TO_FEEDBACK_ROOM + "/" + RC_ROOM_ID)
- .cookie(csrfCookie)
- .header(CSRF_HEADER, CSRF_VALUE)
- .contentType(MediaType.APPLICATION_JSON)
- .accept(MediaType.APPLICATION_JSON))
+ post(PATH_UPLOAD_FILE_TO_FEEDBACK_ROOM + "/" + RC_ROOM_ID)
+ .cookie(csrfCookie)
+ .header(CSRF_HEADER, CSRF_VALUE)
+ .contentType(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON))
.andExpect(status().isUnauthorized());
verifyNoMoreInteractions(rocketChatService);
@@ -173,15 +169,16 @@ public void uploadFileToFeedbackRoom_Should_Return401AndCallNoMethods_WhenNoKeyc
@Test
@WithMockUser
- public void uploadFileToFeedbackRoom_Should_Return403AndCallNoMethods_WhenNoUserOrConsultantAuthority()
- throws Exception {
+ public void
+ uploadFileToFeedbackRoom_Should_Return403AndCallNoMethods_WhenNoUserOrConsultantAuthority()
+ throws Exception {
mvc.perform(
- post(PATH_UPLOAD_FILE_TO_FEEDBACK_ROOM + "/" + RC_ROOM_ID)
- .cookie(csrfCookie)
- .header(CSRF_HEADER, CSRF_VALUE)
- .contentType(MediaType.APPLICATION_JSON)
- .accept(MediaType.APPLICATION_JSON))
+ post(PATH_UPLOAD_FILE_TO_FEEDBACK_ROOM + "/" + RC_ROOM_ID)
+ .cookie(csrfCookie)
+ .header(CSRF_HEADER, CSRF_VALUE)
+ .contentType(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON))
.andExpect(status().isForbidden());
verifyNoMoreInteractions(rocketChatService);
@@ -194,9 +191,9 @@ public void uploadFileToFeedbackRoom_Should_ReturnForbiddenAndCallNoMethods_When
throws Exception {
mvc.perform(
- post(PATH_UPLOAD_FILE_TO_FEEDBACK_ROOM + "/" + RC_ROOM_ID)
- .contentType(MediaType.APPLICATION_JSON)
- .accept(MediaType.APPLICATION_JSON))
+ post(PATH_UPLOAD_FILE_TO_FEEDBACK_ROOM + "/" + RC_ROOM_ID)
+ .contentType(MediaType.APPLICATION_JSON)
+ .accept(MediaType.APPLICATION_JSON))
.andExpect(status().isForbidden());
verifyNoMoreInteractions(rocketChatService);
@@ -205,22 +202,20 @@ public void uploadFileToFeedbackRoom_Should_ReturnForbiddenAndCallNoMethods_When
@Test
@WithMockUser(authorities = {AuthorityValue.ANONYMOUS_DEFAULT})
- public void uploadFileToRoom_Should_ReturnCreated_When_AnonymousAuthority()
- throws Exception {
- MockMultipartFile file = new MockMultipartFile("file", "filename", "text/plain",
- "content".getBytes());
+ public void uploadFileToRoom_Should_ReturnCreated_When_AnonymousAuthority() throws Exception {
+ MockMultipartFile file =
+ new MockMultipartFile("file", "filename", "text/plain", "content".getBytes());
mvc.perform(
- multipart(PATH_UPLOAD_FILE_TO_ROOM + "/" + RC_ROOM_ID)
- .file(file)
- .param("sendNotification", "true")
- .cookie(csrfCookie)
- .header(CSRF_HEADER, CSRF_VALUE)
- .header(RC_TOKEN_HEADER_PARAMETER_NAME, RC_TOKEN)
- .header(RC_USER_ID_HEADER_PARAMETER_NAME, RC_USER_ID)
- .contentType(MediaType.MULTIPART_FORM_DATA)
- .accept(MediaType.APPLICATION_JSON))
+ multipart(PATH_UPLOAD_FILE_TO_ROOM + "/" + RC_ROOM_ID)
+ .file(file)
+ .param("sendNotification", "true")
+ .cookie(csrfCookie)
+ .header(CSRF_HEADER, CSRF_VALUE)
+ .header(RC_TOKEN_HEADER_PARAMETER_NAME, RC_TOKEN)
+ .header(RC_USER_ID_HEADER_PARAMETER_NAME, RC_USER_ID)
+ .contentType(MediaType.MULTIPART_FORM_DATA)
+ .accept(MediaType.APPLICATION_JSON))
.andExpect(status().isCreated());
}
-
}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/controller/UploadControllerTest.java b/src/test/java/de/caritas/cob/uploadservice/api/controller/UploadControllerTest.java
index 6616c39..1839ae4 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/controller/UploadControllerTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/controller/UploadControllerTest.java
@@ -4,30 +4,27 @@
import static de.caritas.cob.uploadservice.helper.MethodAndParameterConstants.UPLOAD_FILE_TO_FEEDBACK_ROOM_METHOD_PARAMS;
import static de.caritas.cob.uploadservice.helper.MethodAndParameterConstants.UPLOAD_FILE_TO_ROOM_METHOD_NAME;
import static de.caritas.cob.uploadservice.helper.MethodAndParameterConstants.UPLOAD_FILE_TO_ROOM_METHOD_PARAMS;
-import static org.junit.Assert.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
import de.caritas.cob.uploadservice.api.aspect.TempCleanup;
import de.caritas.cob.uploadservice.api.facade.UploadFacade;
import de.caritas.cob.uploadservice.api.service.EncryptionService;
import java.lang.reflect.Method;
-import lombok.NonNull;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import java.util.Arrays;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
public class UploadControllerTest {
- @InjectMocks
- private UploadController uploadController;
+ @InjectMocks private UploadController uploadController;
- @Mock
- private UploadFacade uploadFacade;
+ @Mock private UploadFacade uploadFacade;
- @Mock
- private EncryptionService encryptionService;
+ @Mock private EncryptionService encryptionService;
@Test
public void test_Should_Fail_WhenMethodUploadFileToRoomDoesNotHaveTempCleanupAnnotation()
@@ -46,9 +43,20 @@ public void test_Should_Fail_WhenMethodUploadFileToFeedbackRoomDoesNotHaveTempCl
throws NoSuchMethodException {
Class classToTest = uploadController.getClass();
+
+ System.out.println("Declared Methods: ");
+ for (Method method : classToTest.getDeclaredMethods()) {
+ System.out.println(method.getName());
+ }
+
+ for (Method method : classToTest.getMethods()) {
+ System.out.println(method.getName() + " -> " + Arrays.toString(method.getParameterTypes()));
+ }
+
Method methodToTest =
classToTest.getMethod(
UPLOAD_FILE_TO_FEEDBACK_ROOM_METHOD_NAME, UPLOAD_FILE_TO_FEEDBACK_ROOM_METHOD_PARAMS);
+
TempCleanup annotation = methodToTest.getAnnotation(TempCleanup.class);
assertNotNull(annotation);
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/controller/UploadControllerTestIT.java b/src/test/java/de/caritas/cob/uploadservice/api/controller/UploadControllerTestIT.java
index 822c7f1..82e841c 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/controller/UploadControllerTestIT.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/controller/UploadControllerTestIT.java
@@ -39,8 +39,7 @@
import de.caritas.cob.uploadservice.api.service.EncryptionService;
import de.caritas.cob.uploadservice.api.service.LogService;
import de.caritas.cob.uploadservice.api.service.RocketChatService;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+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.autoconfigure.web.servlet.WebMvcTest;
@@ -48,32 +47,24 @@
import org.springframework.http.MediaType;
import org.springframework.mock.web.MockPart;
import org.springframework.test.context.TestPropertySource;
-import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
-@RunWith(SpringRunner.class)
@WebMvcTest(UploadController.class)
@AutoConfigureMockMvc(addFilters = false)
@TestPropertySource(properties = "spring.profiles.active=testing")
public class UploadControllerTestIT {
- @Autowired
- private MockMvc mvc;
+ @Autowired private MockMvc mvc;
- @MockBean
- private RocketChatService rocketChatService;
+ @MockBean private RocketChatService rocketChatService;
- @MockBean
- private EncryptionService encryptionService;
+ @MockBean private EncryptionService encryptionService;
- @MockBean
- private LogService logService;
+ @MockBean private LogService logService;
- @MockBean
- private UploadFacade uploadFacade;
+ @MockBean private UploadFacade uploadFacade;
- @MockBean
- private RoleAuthorizationAuthorityMapper roleAuthorizationAuthorityMapper;
+ @MockBean private RoleAuthorizationAuthorityMapper roleAuthorizationAuthorityMapper;
@Test
public void uploadFileToRoom_Should_ReturnNotFound_WhenRoomIdIsMissing() throws Exception {
@@ -276,8 +267,13 @@ public void uploadFileToFeedbackRoom_Should_ReturnOk_When_notRequiredParamsAreMi
public void uploadFileToRoom_Should_ReturnForbiddenWithCustomHeader_When_quotaLimitIsReached()
throws Exception {
doThrow(new QuotaReachedException(LogService::logWarning))
- .when(this.uploadFacade).uploadFileToRoom(any(RocketChatCredentials.class),
- any(RocketChatUploadParameter.class), anyBoolean(), nullable(String.class), nullable(String.class));
+ .when(this.uploadFacade)
+ .uploadFileToRoom(
+ any(RocketChatCredentials.class),
+ any(RocketChatUploadParameter.class),
+ anyBoolean(),
+ nullable(String.class),
+ nullable(String.class));
MockPart fileToUpload = new MockPart(FORM_PARAM_FILE, "fileToUpload", "content".getBytes());
@@ -298,9 +294,14 @@ public void uploadFileToRoom_Should_ReturnForbiddenWithCustomHeader_When_quotaLi
@Test
public void uploadFileToRoom_should_return_unsupported_media_type_on_InvalidFileTypeException()
throws Exception {
- doThrow(InvalidFileTypeException.class).when(uploadFacade)
- .uploadFileToRoom(any(RocketChatCredentials.class), any(RocketChatUploadParameter.class),
- anyBoolean(), nullable(String.class), nullable(String.class));
+ doThrow(InvalidFileTypeException.class)
+ .when(uploadFacade)
+ .uploadFileToRoom(
+ any(RocketChatCredentials.class),
+ any(RocketChatUploadParameter.class),
+ anyBoolean(),
+ nullable(String.class),
+ nullable(String.class));
MockPart fileToUpload = new MockPart(FORM_PARAM_FILE, "fileToUpload", "content".getBytes());
mvc.perform(
@@ -317,11 +318,17 @@ public void uploadFileToRoom_should_return_unsupported_media_type_on_InvalidFile
}
@Test
- public void uploadFileToFeedbackRoom_should_return_unsupported_media_type_on_InvalidFileTypeException()
- throws Exception {
- doThrow(InvalidFileTypeException.class).when(uploadFacade)
- .uploadFileToFeedbackRoom(any(RocketChatCredentials.class),
- any(RocketChatUploadParameter.class), anyBoolean(), nullable(String.class), nullable(String.class));
+ public void
+ uploadFileToFeedbackRoom_should_return_unsupported_media_type_on_InvalidFileTypeException()
+ throws Exception {
+ doThrow(InvalidFileTypeException.class)
+ .when(uploadFacade)
+ .uploadFileToFeedbackRoom(
+ any(RocketChatCredentials.class),
+ any(RocketChatUploadParameter.class),
+ anyBoolean(),
+ nullable(String.class),
+ nullable(String.class));
MockPart fileToUpload = new MockPart(FORM_PARAM_FILE, "fileToUpload", "content".getBytes());
mvc.perform(
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/facade/EmailNotificationFacadeTest.java b/src/test/java/de/caritas/cob/uploadservice/api/facade/EmailNotificationFacadeTest.java
index 403cce0..3be6a47 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/facade/EmailNotificationFacadeTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/facade/EmailNotificationFacadeTest.java
@@ -9,15 +9,15 @@
import de.caritas.cob.uploadservice.api.helper.EmailNotificationHelper;
import de.caritas.cob.uploadservice.api.tenant.TenantContext;
import java.util.Optional;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.test.util.ReflectionTestUtils;
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
public class EmailNotificationFacadeTest {
private static final String FIELD_NAME_NEW_MESSAGE_NOTIFICATION =
@@ -34,10 +34,14 @@ public class EmailNotificationFacadeTest {
@Mock private AuthenticatedUser authenticatedUser;
@InjectMocks private EmailNotificationFacade emailNotificationFacade;
- @Before
+ @BeforeEach
public void setup() throws NoSuchFieldException, SecurityException {
- ReflectionTestUtils.setField(emailNotificationFacade, FIELD_NAME_NEW_MESSAGE_NOTIFICATION, NOTIFICATION_API_URL);
- ReflectionTestUtils.setField(emailNotificationFacade, FIELD_NAME_NEW_FEEDBACK_MESSAGE_NOTIFICATION, FEEDBACK_NOTIFICATION_API_URL);
+ ReflectionTestUtils.setField(
+ emailNotificationFacade, FIELD_NAME_NEW_MESSAGE_NOTIFICATION, NOTIFICATION_API_URL);
+ ReflectionTestUtils.setField(
+ emailNotificationFacade,
+ FIELD_NAME_NEW_FEEDBACK_MESSAGE_NOTIFICATION,
+ FEEDBACK_NOTIFICATION_API_URL);
}
@Test
@@ -49,7 +53,9 @@ public void sendEmailNotification_Should_PassSendNewMessageNotificationUrl2Notif
verify(emailNotificationHelper, times(1))
.sendEmailNotificationViaUserService(
- RC_GROUP_ID, KEYCLOAK_ACCESS_TOKEN, Optional.ofNullable((TenantContext.getCurrentTenant())));
+ RC_GROUP_ID,
+ KEYCLOAK_ACCESS_TOKEN,
+ Optional.ofNullable((TenantContext.getCurrentTenant())));
}
@Test
@@ -62,6 +68,8 @@ public void sendEmailNotification_Should_PassSendNewMessageNotificationUrl2Notif
verify(emailNotificationHelper, times(1))
.sendEmailFeedbackNotificationViaUserService(
- RC_GROUP_ID, KEYCLOAK_ACCESS_TOKEN, Optional.ofNullable(TenantContext.getCurrentTenant()));
+ RC_GROUP_ID,
+ KEYCLOAK_ACCESS_TOKEN,
+ Optional.ofNullable(TenantContext.getCurrentTenant()));
}
}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/facade/TestMultipartFile.java b/src/test/java/de/caritas/cob/uploadservice/api/facade/TestMultipartFile.java
index b98d31f..22fb0b0 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/facade/TestMultipartFile.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/facade/TestMultipartFile.java
@@ -44,7 +44,5 @@ public InputStream getInputStream() throws IOException {
}
@Override
- public void transferTo(File file) throws IOException, IllegalStateException {
-
- }
+ public void transferTo(File file) throws IOException, IllegalStateException {}
}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/facade/UploadFacadeTest.java b/src/test/java/de/caritas/cob/uploadservice/api/facade/UploadFacadeTest.java
index 5fb6bd7..a61fd45 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/facade/UploadFacadeTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/facade/UploadFacadeTest.java
@@ -3,6 +3,7 @@
import static de.caritas.cob.uploadservice.helper.TestConstants.CONSULTANT_ID;
import static de.caritas.cob.uploadservice.helper.TestConstants.RC_ROOM_ID;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
@@ -31,64 +32,49 @@
import java.util.Objects;
import org.apache.commons.collections4.SetUtils;
import org.hamcrest.Matchers;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.ArgumentCaptor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.test.util.ReflectionTestUtils;
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
public class UploadFacadeTest {
- @InjectMocks
- UploadFacade uploadFacade;
+ @InjectMocks UploadFacade uploadFacade;
- @Mock
- RocketChatService rocketChatService;
+ @Mock RocketChatService rocketChatService;
- @Mock
- EmailNotificationFacade emailNotificationFacade;
+ @Mock EmailNotificationFacade emailNotificationFacade;
- @Mock
- RocketChatUploadParameterSanitizer rocketChatUploadParameterSanitizer;
+ @Mock RocketChatUploadParameterSanitizer rocketChatUploadParameterSanitizer;
- @Mock
- RocketChatUploadParameterEncrypter rocketChatUploadParameterEncrypter;
+ @Mock RocketChatUploadParameterEncrypter rocketChatUploadParameterEncrypter;
- @Mock
- private LiveEventNotificationService liveEventNotificationService;
+ @Mock private LiveEventNotificationService liveEventNotificationService;
- @Mock
- RocketChatCredentials rocketChatCredentials;
+ @Mock RocketChatCredentials rocketChatCredentials;
- @Mock
- RocketChatUploadParameter rocketChatUploadParameter;
+ @Mock RocketChatUploadParameter rocketChatUploadParameter;
- @Mock
- private UploadTrackingService uploadTrackingService;
+ @Mock private UploadTrackingService uploadTrackingService;
- @Mock
- private StatisticsService statisticsService;
+ @Mock private StatisticsService statisticsService;
- @Mock
- private AuthenticatedUser authenticatedUser;
+ @Mock private AuthenticatedUser authenticatedUser;
- @Mock
- private FileService fileService;
+ @Mock private FileService fileService;
- @Mock
- private MongoDbService mongoDbService;
+ @Mock private MongoDbService mongoDbService;
private TestMultipartFile multipartFile;
- /**
- * Method: uploadFileToRoom
- */
- @Before
+ /** Method: uploadFileToRoom */
+ @BeforeEach
public void setup() throws CustomCryptoException {
when(rocketChatUploadParameter.getRoomId()).thenReturn(RC_ROOM_ID);
when(rocketChatUploadParameterSanitizer.sanitize(rocketChatUploadParameter))
@@ -99,22 +85,22 @@ public void setup() throws CustomCryptoException {
when(rocketChatUploadParameter.getFile()).thenReturn(multipartFile);
when(authenticatedUser.getRoles())
.thenReturn(SetUtils.unmodifiableSet(UserRole.CONSULTANT.getValue()));
- when(authenticatedUser.getUserId())
- .thenReturn(CONSULTANT_ID);
+ when(authenticatedUser.getUserId()).thenReturn(CONSULTANT_ID);
}
@Test
public void uploadFileToRoom_Should_UseServicesCorrectly_WhenNoExceptionIsThrown()
throws Exception {
- uploadFacade.uploadFileToRoom(rocketChatCredentials, rocketChatUploadParameter, false, null, null);
+ uploadFacade.uploadFileToRoom(
+ rocketChatCredentials, rocketChatUploadParameter, false, null, null);
verify(rocketChatUploadParameterSanitizer, times(1)).sanitize(rocketChatUploadParameter);
verify(rocketChatUploadParameterEncrypter, times(1)).encrypt(rocketChatUploadParameter);
- verify(rocketChatService, times(1)).roomsUpload(rocketChatCredentials,
- rocketChatUploadParameter);
- verify(rocketChatService, times(1)).markGroupAsReadForSystemUser(
- rocketChatUploadParameter.getRoomId());
+ verify(rocketChatService, times(1))
+ .roomsUpload(rocketChatCredentials, rocketChatUploadParameter);
+ verify(rocketChatService, times(1))
+ .markGroupAsReadForSystemUser(rocketChatUploadParameter.getRoomId());
verify(uploadTrackingService, times(1)).validateUploadLimit(any());
verify(uploadTrackingService, times(1)).trackUploadedFileForUser(any());
verify(fileService).verifyMimeType(multipartFile);
@@ -123,7 +109,8 @@ public void uploadFileToRoom_Should_UseServicesCorrectly_WhenNoExceptionIsThrown
@Test
public void uploadFileToRoom_Should_sendEmailNotification_WhenParamIsTrue() {
- uploadFacade.uploadFileToRoom(rocketChatCredentials, rocketChatUploadParameter, true, null, null);
+ uploadFacade.uploadFileToRoom(
+ rocketChatCredentials, rocketChatUploadParameter, true, null, null);
verify(emailNotificationFacade, times(1)).sendEmailNotification(RC_ROOM_ID);
}
@@ -131,31 +118,34 @@ public void uploadFileToRoom_Should_sendEmailNotification_WhenParamIsTrue() {
@Test
public void uploadFileToRoom_Should_FireUploadFileStatisticsEvent() {
- uploadFacade.uploadFileToRoom(rocketChatCredentials, rocketChatUploadParameter, true, null, null);
+ uploadFacade.uploadFileToRoom(
+ rocketChatCredentials, rocketChatUploadParameter, true, null, null);
- verify(statisticsService, times(1))
- .fireEvent(any(CreateMessageStatisticsEvent.class));
+ verify(statisticsService, times(1)).fireEvent(any(CreateMessageStatisticsEvent.class));
- ArgumentCaptor captor = ArgumentCaptor.forClass(
- CreateMessageStatisticsEvent.class);
+ ArgumentCaptor captor =
+ ArgumentCaptor.forClass(CreateMessageStatisticsEvent.class);
verify(statisticsService, times(1)).fireEvent(captor.capture());
- String userId = Objects.requireNonNull(
- ReflectionTestUtils.getField(captor.getValue(), "userId")).toString();
+ String userId =
+ Objects.requireNonNull(ReflectionTestUtils.getField(captor.getValue(), "userId"))
+ .toString();
assertThat(userId, Matchers.is(CONSULTANT_ID));
- String userRole = Objects.requireNonNull(
- ReflectionTestUtils.getField(captor.getValue(), "userRole")).toString();
+ String userRole =
+ Objects.requireNonNull(ReflectionTestUtils.getField(captor.getValue(), "userRole"))
+ .toString();
assertThat(userRole, Matchers.is(UserRole.CONSULTANT.toString()));
- String rcGroupId = Objects.requireNonNull(
- ReflectionTestUtils.getField(captor.getValue(), "rcGroupId")).toString();
+ String rcGroupId =
+ Objects.requireNonNull(ReflectionTestUtils.getField(captor.getValue(), "rcGroupId"))
+ .toString();
assertThat(rcGroupId, Matchers.is(RC_ROOM_ID));
-
}
@Test
public void uploadFileToRoom_Should_markGroupAsReadForSystemUser()
throws RocketChatPostMarkGroupAsReadException {
- uploadFacade.uploadFileToRoom(rocketChatCredentials, rocketChatUploadParameter, false, null, null);
+ uploadFacade.uploadFileToRoom(
+ rocketChatCredentials, rocketChatUploadParameter, false, null, null);
verify(rocketChatService, times(1)).markGroupAsReadForSystemUser(RC_ROOM_ID);
}
@@ -163,7 +153,8 @@ public void uploadFileToRoom_Should_markGroupAsReadForSystemUser()
@Test
public void uploadFileToRoom_Should_uploadToRocketChat() {
- uploadFacade.uploadFileToRoom(rocketChatCredentials, rocketChatUploadParameter, false, null, null);
+ uploadFacade.uploadFileToRoom(
+ rocketChatCredentials, rocketChatUploadParameter, false, null, null);
verify(rocketChatService, times(1))
.roomsUpload(
@@ -173,7 +164,8 @@ public void uploadFileToRoom_Should_uploadToRocketChat() {
@Test
public void uploadFileToRoom_Should_EncryptRocketChatParameters() throws CustomCryptoException {
- uploadFacade.uploadFileToRoom(rocketChatCredentials, rocketChatUploadParameter, false, null, null);
+ uploadFacade.uploadFileToRoom(
+ rocketChatCredentials, rocketChatUploadParameter, false, null, null);
verify(rocketChatUploadParameterEncrypter, times(1)).encrypt(rocketChatUploadParameter);
}
@@ -181,7 +173,8 @@ public void uploadFileToRoom_Should_EncryptRocketChatParameters() throws CustomC
@Test
public void uploadFileToRoom_Should_SanitizeRocketChatParameter() {
- uploadFacade.uploadFileToRoom(rocketChatCredentials, rocketChatUploadParameter, false, null, null);
+ uploadFacade.uploadFileToRoom(
+ rocketChatCredentials, rocketChatUploadParameter, false, null, null);
verify(rocketChatUploadParameterSanitizer, times(1)).sanitize(rocketChatUploadParameter);
}
@@ -189,35 +182,43 @@ public void uploadFileToRoom_Should_SanitizeRocketChatParameter() {
@Test
public void uploadFileToRoom_Should_sendLiveNotification_When_UploadSucceeds() {
- uploadFacade.uploadFileToRoom(rocketChatCredentials, rocketChatUploadParameter, false, null, null);
+ uploadFacade.uploadFileToRoom(
+ rocketChatCredentials, rocketChatUploadParameter, false, null, null);
verify(this.liveEventNotificationService, times(1))
.sendLiveEvent(eq(rocketChatUploadParameter.getRoomId()), any(), any());
}
- @Test(expected = InternalServerErrorException.class)
- public void uploadFileToRoom_Should_ThrowInternalServerErrorException_WhenCustomCryptoExceptionIsThrown()
- throws Exception {
-
- when(rocketChatUploadParameterEncrypter.encrypt(any()))
- .thenThrow(mock(CustomCryptoException.class));
-
- uploadFacade.uploadFileToRoom(rocketChatCredentials, rocketChatUploadParameter, false, null, null);
+ @Test
+ public void
+ uploadFileToRoom_Should_ThrowInternalServerErrorException_WhenCustomCryptoExceptionIsThrown() {
+ assertThrows(
+ InternalServerErrorException.class,
+ () -> {
+ when(rocketChatUploadParameterEncrypter.encrypt(any()))
+ .thenThrow(mock(CustomCryptoException.class));
+
+ uploadFacade.uploadFileToRoom(
+ rocketChatCredentials, rocketChatUploadParameter, false, null, null);
+ });
}
- @Test(expected = InternalServerErrorException.class)
- public void uploadFileToRoom_Should_ThrowInternalServerErrorException_WheRocketChatPostMarkGroupAsReadExceptionIsThrown()
- throws Exception {
-
- doThrow(mock(RocketChatPostMarkGroupAsReadException.class)).when(rocketChatService)
- .markGroupAsReadForSystemUser(anyString());
-
- uploadFacade.uploadFileToRoom(rocketChatCredentials, rocketChatUploadParameter, false, null, null);
+ @Test
+ public void
+ uploadFileToRoom_Should_ThrowInternalServerErrorException_WheRocketChatPostMarkGroupAsReadExceptionIsThrown() {
+ assertThrows(
+ InternalServerErrorException.class,
+ () -> {
+ doThrow(mock(RocketChatPostMarkGroupAsReadException.class))
+ .when(rocketChatService)
+ .markGroupAsReadForSystemUser(anyString());
+
+ uploadFacade.uploadFileToRoom(
+ rocketChatCredentials, rocketChatUploadParameter, false, null, null);
+ });
}
- /**
- * Method: uploadFileToFeedbackRoom
- */
+ /** Method: uploadFileToFeedbackRoom */
@Test
public void uploadFileToFeedbackRoom_Should_CallServicesCorrectly_WhenNoExceptionIsThrown()
throws Exception {
@@ -227,10 +228,10 @@ public void uploadFileToFeedbackRoom_Should_CallServicesCorrectly_WhenNoExceptio
verify(rocketChatUploadParameterSanitizer, times(1)).sanitize(rocketChatUploadParameter);
verify(rocketChatUploadParameterEncrypter, times(1)).encrypt(rocketChatUploadParameter);
- verify(rocketChatService, times(1)).roomsUpload(rocketChatCredentials,
- rocketChatUploadParameter);
- verify(rocketChatService, times(1)).markGroupAsReadForSystemUser(
- rocketChatUploadParameter.getRoomId());
+ verify(rocketChatService, times(1))
+ .roomsUpload(rocketChatCredentials, rocketChatUploadParameter);
+ verify(rocketChatService, times(1))
+ .markGroupAsReadForSystemUser(rocketChatUploadParameter.getRoomId());
verify(uploadTrackingService, times(1)).validateUploadLimit(any());
verify(uploadTrackingService, times(1)).trackUploadedFileForUser(any());
verify(fileService).verifyMimeType(multipartFile);
@@ -288,7 +289,8 @@ public void uploadFileToFeedbackRoom_Should_SanitizeRocketChatParameter() {
@Test
public void uploadFileToFeedbackRoom_Should_sendLiveNotification_When_UploadSucceeds() {
- uploadFacade.uploadFileToFeedbackRoom(rocketChatCredentials, rocketChatUploadParameter, false, null, null);
+ uploadFacade.uploadFileToFeedbackRoom(
+ rocketChatCredentials, rocketChatUploadParameter, false, null, null);
verify(this.liveEventNotificationService, times(1))
.sendLiveEvent(eq(rocketChatUploadParameter.getRoomId()), any(), any());
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/helper/AuthenticatedUserHelperTest.java b/src/test/java/de/caritas/cob/uploadservice/api/helper/AuthenticatedUserHelperTest.java
index 8796365..73a09e4 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/helper/AuthenticatedUserHelperTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/helper/AuthenticatedUserHelperTest.java
@@ -5,11 +5,11 @@
import de.caritas.cob.uploadservice.api.authorization.UserRole;
import org.apache.commons.collections4.SetUtils;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
public class AuthenticatedUserHelperTest {
@Test
@@ -33,5 +33,4 @@ public void isConsultant_Should_ReturnFalse_IfAuthenticatedUserIsNotConsultant()
assertThat(result, is(false));
}
-
}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/helper/AuthenticatedUserTest.java b/src/test/java/de/caritas/cob/uploadservice/api/helper/AuthenticatedUserTest.java
index d5992aa..5b3b6d4 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/helper/AuthenticatedUserTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/helper/AuthenticatedUserTest.java
@@ -1,36 +1,50 @@
package de.caritas.cob.uploadservice.api.helper;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
+import static org.junit.jupiter.api.Assertions.assertThrows;
-@RunWith(MockitoJUnitRunner.class)
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+@ExtendWith(MockitoExtension.class)
public class AuthenticatedUserTest {
- @Test(expected = NullPointerException.class)
- public void AuthenticatedUser_Should_ThrowNullPointerExceptionWhenArgumentsAreNull()
- throws Exception {
- new AuthenticatedUser(null, null, null, null, null);
+ @Test
+ public void AuthenticatedUser_Should_ThrowNullPointerExceptionWhenArgumentsAreNull() {
+ assertThrows(
+ NullPointerException.class,
+ () -> {
+ new AuthenticatedUser(null, null, null, null, null);
+ });
}
- @Test(expected = NullPointerException.class)
- public void AuthenticatedUser_Should_ThrowNullPointerExceptionWhenUserIdIsNull()
- throws Exception {
- AuthenticatedUser authenticatedUser = new AuthenticatedUser();
- authenticatedUser.setUserId(null);
+ @Test
+ public void AuthenticatedUser_Should_ThrowNullPointerExceptionWhenUserIdIsNull() {
+ assertThrows(
+ NullPointerException.class,
+ () -> {
+ AuthenticatedUser authenticatedUser = new AuthenticatedUser();
+ authenticatedUser.setUserId(null);
+ });
}
- @Test(expected = NullPointerException.class)
- public void AuthenticatedUser_Should_ThrowNullPointerExceptionWhenUsernameIsNull()
- throws Exception {
- AuthenticatedUser authenticatedUser = new AuthenticatedUser();
- authenticatedUser.setUsername(null);
+ @Test
+ public void AuthenticatedUser_Should_ThrowNullPointerExceptionWhenUsernameIsNull() {
+ assertThrows(
+ NullPointerException.class,
+ () -> {
+ AuthenticatedUser authenticatedUser = new AuthenticatedUser();
+ authenticatedUser.setUsername(null);
+ });
}
- @Test(expected = NullPointerException.class)
- public void AuthenticatedUser_Should_ThrowNullPointerExceptionWhenAccessTokenIsNull()
- throws Exception {
- AuthenticatedUser authenticatedUser = new AuthenticatedUser();
- authenticatedUser.setAccessToken(null);
+ @Test
+ public void AuthenticatedUser_Should_ThrowNullPointerExceptionWhenAccessTokenIsNull() {
+ assertThrows(
+ NullPointerException.class,
+ () -> {
+ AuthenticatedUser authenticatedUser = new AuthenticatedUser();
+ authenticatedUser.setAccessToken(null);
+ });
}
}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/helper/EmailNotificationHelperTest.java b/src/test/java/de/caritas/cob/uploadservice/api/helper/EmailNotificationHelperTest.java
index 3cb8bf2..0f7b081 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/helper/EmailNotificationHelperTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/helper/EmailNotificationHelperTest.java
@@ -7,9 +7,7 @@
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import static org.powermock.reflect.Whitebox.setInternalState;
-import de.caritas.cob.uploadservice.api.service.LogService;
import de.caritas.cob.uploadservice.api.service.TenantHeaderSupplier;
import de.caritas.cob.uploadservice.api.service.helper.ServiceHelper;
import de.caritas.cob.uploadservice.api.tenant.TenantContext;
@@ -17,19 +15,19 @@
import de.caritas.cob.uploadservice.userservice.generated.web.UserControllerApi;
import de.caritas.cob.uploadservice.userservice.generated.web.model.NewMessageNotificationDTO;
import java.util.Optional;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
import org.slf4j.Logger;
import org.springframework.http.HttpHeaders;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
public class EmailNotificationHelperTest {
private static final String RC_GROUP_ID = "fR2Rz7dmWmHdXE8uz";
@@ -37,29 +35,19 @@ public class EmailNotificationHelperTest {
"http://caritas.local/service/user/mails/new";
private static final String ERROR = "error";
- @Mock
- private RestTemplate restTemplate;
-
- @Mock
- private UserControllerApi userControllerApi;
- @Mock
- private de.caritas.cob.uploadservice.userservice.generated.ApiClient apiClient;
- @Mock
- private ServiceHelper serviceHelper;
- @Mock
- private Logger logger;
- @Mock
- private TenantHeaderSupplier tenantHeaderSupplier;
-
- @Mock
- private UserServiceApiControllerFactory userServiceApiControllerFactory;
- @InjectMocks
- private EmailNotificationHelper emailNotificationHelper;
-
- @Before
- public void setup() {
- setInternalState(LogService.class, "LOGGER", logger);
- }
+ @Mock private RestTemplate restTemplate;
+
+ @Mock private UserControllerApi userControllerApi;
+ @Mock private de.caritas.cob.uploadservice.userservice.generated.ApiClient apiClient;
+ @Mock private ServiceHelper serviceHelper;
+ @Mock private Logger logger;
+ @Mock private TenantHeaderSupplier tenantHeaderSupplier;
+
+ @Mock private UserServiceApiControllerFactory userServiceApiControllerFactory;
+ @InjectMocks private EmailNotificationHelper emailNotificationHelper;
+
+ @BeforeEach
+ public void setup() {}
@Test
public void sendEmailNotificationViaUserService_Should_LogException_OnError()
@@ -68,16 +56,16 @@ public void sendEmailNotificationViaUserService_Should_LogException_OnError()
// given
RestClientException exception = new RestClientException(ERROR);
when(userControllerApi.getApiClient()).thenReturn(apiClient);
- when(serviceHelper.getKeycloakAndCsrfHttpHeaders(Mockito.anyString(), any())).thenReturn(
- new HttpHeaders());
+ when(serviceHelper.getKeycloakAndCsrfHttpHeaders(Mockito.anyString(), any()))
+ .thenReturn(new HttpHeaders());
when(userServiceApiControllerFactory.createControllerApi()).thenReturn(userControllerApi);
- doThrow(exception).when(userControllerApi)
+ doThrow(exception)
+ .when(userControllerApi)
.sendNewMessageNotification(Mockito.any(NewMessageNotificationDTO.class));
// when
emailNotificationHelper.sendEmailNotificationViaUserService(
- RC_GROUP_ID, KEYCLOAK_ACCESS_TOKEN,
- Optional.ofNullable(TenantContext.getCurrentTenant()));
+ RC_GROUP_ID, KEYCLOAK_ACCESS_TOKEN, Optional.ofNullable(TenantContext.getCurrentTenant()));
// then
verify(logger, times(1)).error(anyString(), anyString());
@@ -89,15 +77,14 @@ public void sendEmailNotificationViaUserService_Should_CallUserServiceWithGiveUr
HttpHeaders headers = new HttpHeaders();
headers.add("authorization", "Bearer XYZ");
- when(serviceHelper.getKeycloakAndCsrfHttpHeaders(Mockito.anyString(), any())).thenReturn(
- headers);
+ when(serviceHelper.getKeycloakAndCsrfHttpHeaders(Mockito.anyString(), any()))
+ .thenReturn(headers);
when(userServiceApiControllerFactory.createControllerApi()).thenReturn(userControllerApi);
when(userControllerApi.getApiClient()).thenReturn(apiClient);
// when
emailNotificationHelper.sendEmailNotificationViaUserService(
- RC_GROUP_ID, KEYCLOAK_ACCESS_TOKEN,
- Optional.ofNullable(TenantContext.getCurrentTenant()));
+ RC_GROUP_ID, KEYCLOAK_ACCESS_TOKEN, Optional.ofNullable(TenantContext.getCurrentTenant()));
// then
verify(userControllerApi, times(1))
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/helper/FileSanitizerTest.java b/src/test/java/de/caritas/cob/uploadservice/api/helper/FileSanitizerTest.java
index 89776d6..3c123a8 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/helper/FileSanitizerTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/helper/FileSanitizerTest.java
@@ -6,13 +6,13 @@
import static de.caritas.cob.uploadservice.helper.TestConstants.FILE_NAME_SANITIZED_WITH_SPACES;
import static de.caritas.cob.uploadservice.helper.TestConstants.FILE_NAME_UNSANITIZED;
import static de.caritas.cob.uploadservice.helper.TestConstants.FILE_NAME_UNSANITIZED_WITH_SPACES;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
public class FileSanitizerTest {
@Test
@@ -22,7 +22,8 @@ public void sanitizeFileName_Should_ReturnSanitizedFileName() {
@Test
public void sanitizeFileName_Should_RemoveLeadingAndTrailingSpacesFromFilename() {
- assertEquals(FILE_NAME_SANITIZED_WITH_SPACES,
+ assertEquals(
+ FILE_NAME_SANITIZED_WITH_SPACES,
FileSanitizer.sanitizeFileName(FILE_NAME_UNSANITIZED_WITH_SPACES));
}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/helper/HelperTest.java b/src/test/java/de/caritas/cob/uploadservice/api/helper/HelperTest.java
index 5c55143..cec4004 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/helper/HelperTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/helper/HelperTest.java
@@ -1,12 +1,12 @@
package de.caritas.cob.uploadservice.api.helper;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
public class HelperTest {
private static String TEXT = "Lorem Ipsum";
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/helper/JsonHelperTest.java b/src/test/java/de/caritas/cob/uploadservice/api/helper/JsonHelperTest.java
index aa099ae..9d4e321 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/helper/JsonHelperTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/helper/JsonHelperTest.java
@@ -15,7 +15,7 @@
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Optional;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
public class JsonHelperTest {
@@ -35,8 +35,8 @@ public void serializeWithOffsetDateTimeAsString_Should_returnOptionalWithSeriali
.timestamp(offsetDateTime);
Optional result =
- JsonHelper.serializeWithOffsetDateTimeAsString(createMessageStatisticsEventMessage,
- LogService::logStatisticsEventError);
+ JsonHelper.serializeWithOffsetDateTimeAsString(
+ createMessageStatisticsEventMessage, LogService::logStatisticsEventError);
assertThat(result.isPresent(), is(true));
@@ -61,7 +61,6 @@ public void serializeWithOffsetDateTimeAsString_Should_returnOptionalWithSeriali
+ "}";
assertThat(result.get(), jsonEquals(expectedJson));
-
}
@Test
@@ -72,10 +71,9 @@ public void serialize_Should_returnOptionalEmpty_When_jsonStringCanNotBeConverte
Mockito.when(om.writeValueAsString(Object.class)).thenThrow(new JsonProcessingException("") {});
Optional result =
- JsonHelper.serializeWithOffsetDateTimeAsString(new Object(),
- LogService::logInternalServerError);
+ JsonHelper.serializeWithOffsetDateTimeAsString(
+ new Object(), LogService::logInternalServerError);
assertThat(result.isPresent(), is(false));
}
-
}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/helper/JsonStringToObjectConverterTest.java b/src/test/java/de/caritas/cob/uploadservice/api/helper/JsonStringToObjectConverterTest.java
index e92929d..005bf13 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/helper/JsonStringToObjectConverterTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/helper/JsonStringToObjectConverterTest.java
@@ -2,32 +2,31 @@
import static de.caritas.cob.uploadservice.helper.TestConstants.INVALID_JSON_BODY;
import static de.caritas.cob.uploadservice.helper.TestConstants.RC_UPLOAD_ERROR_RESPONSE_BODY;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
-import static org.powermock.reflect.Whitebox.setInternalState;
import de.caritas.cob.uploadservice.api.model.rocket.chat.UploadResponseDto;
import de.caritas.cob.uploadservice.api.service.LogService;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
import org.slf4j.Logger;
+import org.springframework.test.util.ReflectionTestUtils;
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
public class JsonStringToObjectConverterTest {
@Mock private Logger logger;
- @Before
+ @BeforeEach
public void setup() {
- setInternalState(LogService.class, "LOGGER", logger);
+ ReflectionTestUtils.setField(LogService.class, "LOGGER", logger);
}
@Test
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/helper/RocketChatUploadParameterEncrypterTest.java b/src/test/java/de/caritas/cob/uploadservice/api/helper/RocketChatUploadParameterEncrypterTest.java
index c5f7a08..80f44b4 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/helper/RocketChatUploadParameterEncrypterTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/helper/RocketChatUploadParameterEncrypterTest.java
@@ -11,13 +11,13 @@
import de.caritas.cob.uploadservice.api.container.RocketChatUploadParameter;
import de.caritas.cob.uploadservice.api.exception.CustomCryptoException;
import de.caritas.cob.uploadservice.api.service.EncryptionService;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
public class RocketChatUploadParameterEncrypterTest {
@Mock EncryptionService encryptionService;
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/helper/RocketChatUploadParameterSanitizerTest.java b/src/test/java/de/caritas/cob/uploadservice/api/helper/RocketChatUploadParameterSanitizerTest.java
index 941edeb..3266077 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/helper/RocketChatUploadParameterSanitizerTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/helper/RocketChatUploadParameterSanitizerTest.java
@@ -9,20 +9,20 @@
import static de.caritas.cob.uploadservice.helper.TestConstants.RC_TMID;
import static de.caritas.cob.uploadservice.helper.TestConstants.RC_TMID_WITH_HTML;
import static de.caritas.cob.uploadservice.helper.TestConstants.UPLOAD_FILE;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import de.caritas.cob.uploadservice.api.container.RocketChatUploadParameter;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
public class RocketChatUploadParameterSanitizerTest {
private RocketChatUploadParameterSanitizer rocketChatUploadParameterSanitizer;
- @Before
+ @BeforeEach
public void setup() {
rocketChatUploadParameterSanitizer = new RocketChatUploadParameterSanitizer();
}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/helper/UserHelperTest.java b/src/test/java/de/caritas/cob/uploadservice/api/helper/UserHelperTest.java
index 2ff05f3..8cbd0e6 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/helper/UserHelperTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/helper/UserHelperTest.java
@@ -2,26 +2,25 @@
import static de.caritas.cob.uploadservice.helper.TestConstants.USERNAME_DECODED;
import static de.caritas.cob.uploadservice.helper.TestConstants.USERNAME_ENCODED;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
public class UserHelperTest {
private UserHelper userHelper;
- @Before
+ @BeforeEach
public void setup() {
this.userHelper = new UserHelper();
}
@Test
- public void
- encodeUsername_Should_ReturnEncodedUsername_WhenDecodedUsernameIsGiven() {
+ public void encodeUsername_Should_ReturnEncodedUsername_WhenDecodedUsernameIsGiven() {
assertEquals(USERNAME_ENCODED, userHelper.encodeUsername(USERNAME_DECODED));
}
@@ -39,5 +38,4 @@ public void decodeUsername_Should_ReturnDecodedUsername_WhenEncodedUsernameIsGiv
public void decodeUsername_Should_ReturnDecodedUsername_WhenDecodedUsernameIsGiven() {
assertEquals(USERNAME_DECODED, userHelper.decodeUsername(USERNAME_DECODED));
}
-
}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/model/jsondeserializer/DecodeUsernameJsonDeserializerTest.java b/src/test/java/de/caritas/cob/uploadservice/api/model/jsondeserializer/DecodeUsernameJsonDeserializerTest.java
index 0ba985f..402f7d0 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/model/jsondeserializer/DecodeUsernameJsonDeserializerTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/model/jsondeserializer/DecodeUsernameJsonDeserializerTest.java
@@ -2,8 +2,8 @@
import static de.caritas.cob.uploadservice.helper.TestConstants.USERNAME_DECODED;
import static de.caritas.cob.uploadservice.helper.TestConstants.USERNAME_ENCODED;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
@@ -13,20 +13,20 @@
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.util.ClassUtils;
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
public class DecodeUsernameJsonDeserializerTest {
private ObjectMapper objectMapper;
private DecodeUsernameJsonDeserializer decodeUsernameJsonDeserializer;
private UserHelper userHelper;
- @Before
+ @BeforeEach
public void setup() {
userHelper = new UserHelper();
objectMapper = new ObjectMapper();
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/service/EncryptionServiceTest.java b/src/test/java/de/caritas/cob/uploadservice/api/service/EncryptionServiceTest.java
index b0fc69f..c24c2d2 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/service/EncryptionServiceTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/service/EncryptionServiceTest.java
@@ -1,27 +1,21 @@
package de.caritas.cob.uploadservice.api.service;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
import de.caritas.cob.uploadservice.api.exception.CustomCryptoException;
-import java.io.UnsupportedEncodingException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import javax.crypto.BadPaddingException;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.NoSuchPaddingException;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.test.util.ReflectionTestUtils;
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
public class EncryptionServiceTest {
private static final String KEY_MASTER = "MasterKeyTestKey";
@@ -37,7 +31,7 @@ public class EncryptionServiceTest {
@Mock private LogService logService;
- @Before
+ @BeforeEach
public void setup() throws NoSuchFieldException {
ReflectionTestUtils.setField(encryptionService, "fragment_applicationKey", KEY_APPLICATION);
encryptionService.updateMasterKey(KEY_MASTER);
@@ -45,39 +39,39 @@ public void setup() throws NoSuchFieldException {
@Test
public void check_setup() {
- assertEquals("MasterKey was not properly set", KEY_MASTER, encryptionService.getMasterKey());
+ assertEquals(KEY_MASTER, encryptionService.getMasterKey(), "MasterKey was not properly set");
assertEquals(
- "ApplicationKey was not properly set",
KEY_APPLICATION,
- encryptionService.getApplicationKey());
+ encryptionService.getApplicationKey(),
+ "ApplicationKey was not properly set");
}
@Test
public void updateMasterKey_Should_UpdateMasterKeyFragment() {
encryptionService.updateMasterKey(KEY_MASTER);
- assertEquals("Cannot properly set MasterKey", KEY_MASTER, encryptionService.getMasterKey());
+ assertEquals(KEY_MASTER, encryptionService.getMasterKey(), "Cannot properly set MasterKey");
}
@Test
public void encrypt_Should_ReturnEncryptedText_WhenProvidedWithValidParameters()
throws Exception {
String encryptMessage = encryptionService.encrypt(MESSAGE_PLAIN, KEY_SESSION);
- assertEquals("Did not get the expected encryption result.", MESSAGE_ENCRYPTED, encryptMessage);
+ assertEquals(MESSAGE_ENCRYPTED, encryptMessage, "Did not get the expected encryption result.");
}
@Test
public void encrypt_Should_ReturnWrongEncryptedText_WhenProvidedWithInvalidParameters()
throws Exception {
String encryptMessage = encryptionService.encrypt(MESSAGE_PLAIN, KEY_SESSION_WRONG);
- Assert.assertNotEquals(
- "Did not get the expected encryption result.", MESSAGE_ENCRYPTED, encryptMessage);
+ Assertions.assertNotEquals(
+ MESSAGE_ENCRYPTED, encryptMessage, "Did not get the expected encryption result.");
}
@Test
public void decrypt_Should_ReturnDecryptedText_WhenProvidedWithValidParameters()
throws Exception {
String decryptedMessage = encryptionService.decrypt(MESSAGE_ENCRYPTED, KEY_SESSION);
- assertEquals("Did not get the expected decrypted result.", MESSAGE_PLAIN, decryptedMessage);
+ assertEquals(MESSAGE_PLAIN, decryptedMessage, "Did not get the expected decrypted result.");
}
@Test
@@ -87,7 +81,7 @@ public void decrypt_Should_ReturnWrongDecryptedText_WhenProvidedWithInvalidParam
encryptionService.decrypt(MESSAGE_ENCRYPTED, KEY_SESSION_WRONG);
fail("The expected BadPaddingException due to wrong password was not thrown.");
} catch (CustomCryptoException ex) {
- assertTrue("Expected BadPaddingException thrown", true);
+ assertTrue(true, "Expected BadPaddingException thrown");
}
}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/service/FileServiceTest.java b/src/test/java/de/caritas/cob/uploadservice/api/service/FileServiceTest.java
index 62bb846..4b339c8 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/service/FileServiceTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/service/FileServiceTest.java
@@ -1,6 +1,6 @@
package de.caritas.cob.uploadservice.api.service;
-
+import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
@@ -13,8 +13,8 @@
import java.io.InputStream;
import java.util.Optional;
import java.util.Set;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
public class FileServiceTest {
@@ -22,7 +22,7 @@ public class FileServiceTest {
private FileService fileService;
private InputStream testInputStream;
- @Before
+ @BeforeEach
public void setUp() throws Exception {
mimeTypeDetector = mock(MimeTypeDetector.class);
fileService = new FileService(mimeTypeDetector, Set.of("application/jpeg"));
@@ -36,25 +36,37 @@ public void verifyMimeType_should_verify_that_mime_type_is_whitelisted() {
fileService.verifyMimeType(new TestMultipartFile());
}
- @Test(expected = InvalidFileTypeException.class)
+ @Test
public void verifyMimeType_should_fail_when_mime_type_of_file_is_not_whitelisted() {
- when(mimeTypeDetector.detect(any())).thenReturn(Optional.of("application/octet-stream"));
+ assertThrows(
+ InvalidFileTypeException.class,
+ () -> {
+ when(mimeTypeDetector.detect(any())).thenReturn(Optional.of("application/octet-stream"));
- fileService.verifyMimeType(new TestMultipartFile());
+ fileService.verifyMimeType(new TestMultipartFile());
+ });
}
- @Test(expected = InvalidFileTypeException.class)
+ @Test
public void verifyMimeType_should_fail_when_mime_type_is_empty() {
- when(mimeTypeDetector.detect(any())).thenReturn(Optional.empty());
+ assertThrows(
+ InvalidFileTypeException.class,
+ () -> {
+ when(mimeTypeDetector.detect(any())).thenReturn(Optional.empty());
- fileService.verifyMimeType(new TestMultipartFile());
+ fileService.verifyMimeType(new TestMultipartFile());
+ });
}
- @Test(expected = InternalServerErrorException.class)
+ @Test
public void verifyMimeType_should_fail_if_input_reading_fails() {
- doThrow(RuntimeException.class).when(mimeTypeDetector).detect(any());
+ assertThrows(
+ InternalServerErrorException.class,
+ () -> {
+ doThrow(RuntimeException.class).when(mimeTypeDetector).detect(any());
- fileService.verifyMimeType(new TestMultipartFile());
+ fileService.verifyMimeType(new TestMultipartFile());
+ });
}
@Test
@@ -69,30 +81,41 @@ public void verifyFileHeaderMimeType_should_verify_that_mime_type_is_whitelisted
fileService.verifyFileHeaderMimeType(testInputStream);
}
- @Test(expected = InvalidFileTypeException.class)
+ @Test
public void verifyFileHeaderMimeType_should_fail_when_mime_type_of_file_is_not_whitelisted() {
- when(mimeTypeDetector.detect(any())).thenReturn(Optional.of("application/octet-stream"));
+ assertThrows(
+ InvalidFileTypeException.class,
+ () -> {
+ when(mimeTypeDetector.detect(any())).thenReturn(Optional.of("application/octet-stream"));
- fileService.verifyFileHeaderMimeType(testInputStream);
+ fileService.verifyFileHeaderMimeType(testInputStream);
+ });
}
- @Test(expected = InvalidFileTypeException.class)
+ @Test
public void verifyFileHeaderMimeType_should_fail_when_mime_type_is_empty() {
- when(mimeTypeDetector.detect(any())).thenReturn(Optional.empty());
+ assertThrows(
+ InvalidFileTypeException.class,
+ () -> {
+ when(mimeTypeDetector.detect(any())).thenReturn(Optional.empty());
- fileService.verifyFileHeaderMimeType(testInputStream);
+ fileService.verifyFileHeaderMimeType(testInputStream);
+ });
}
- @Test(expected = InternalServerErrorException.class)
+ @Test
public void verifyFileHeaderMimeType_should_fail_if_input_reading_fails() {
- doThrow(RuntimeException.class).when(mimeTypeDetector).detect(any());
+ assertThrows(
+ InternalServerErrorException.class,
+ () -> {
+ doThrow(RuntimeException.class).when(mimeTypeDetector).detect(any());
- fileService.verifyFileHeaderMimeType(testInputStream);
+ fileService.verifyFileHeaderMimeType(testInputStream);
+ });
}
@Test
public void verifyFileHeaderMimeType_should_do_nothing_if_file_is_null() {
fileService.verifyFileHeaderMimeType(null);
}
-
-}
\ No newline at end of file
+}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/service/LiveEventNotificationServiceIT.java b/src/test/java/de/caritas/cob/uploadservice/api/service/LiveEventNotificationServiceIT.java
index f5e795f..596ee5a 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/service/LiveEventNotificationServiceIT.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/service/LiveEventNotificationServiceIT.java
@@ -6,46 +6,34 @@
import static org.mockito.Mockito.when;
import de.caritas.cob.uploadservice.api.helper.AuthenticatedUser;
-import de.caritas.cob.uploadservice.config.SecurityConfig;
import de.caritas.cob.uploadservice.userservice.generated.ApiClient;
import de.caritas.cob.uploadservice.userservice.generated.web.LiveproxyControllerApi;
import java.lang.management.ManagementFactory;
import java.util.Optional;
import org.apache.commons.lang3.RandomStringUtils;
import org.junit.jupiter.api.Test;
-import org.keycloak.adapters.KeycloakConfigResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
-import org.springframework.security.config.annotation.SecurityBuilder;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ActiveProfiles;
-import springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper;
@SpringBootTest
@ActiveProfiles("testing")
@DirtiesContext
class LiveEventNotificationServiceIT {
- @Autowired
- private LiveEventNotificationService underTest;
+ @Autowired private LiveEventNotificationService underTest;
@MockBean
@Qualifier("liveproxyControllerApi")
@SuppressWarnings("unused")
private LiveproxyControllerApi liveproxyControllerApi;
+ @MockBean private AuthenticatedUser authenticatedUser;
- @MockBean
- private AuthenticatedUser authenticatedUser;
-
- @MockBean
- private ApiClient apiClient;
-
- @MockBean
- private DocumentationPluginsBootstrapper documentationPluginsBootstrapper;
-
+ @MockBean private ApiClient apiClient;
@Test
void sendLiveEventShouldRunInAnotherThread() {
@@ -55,8 +43,7 @@ void sendLiveEventShouldRunInAnotherThread() {
underTest.sendLiveEvent(
RandomStringUtils.randomAlphanumeric(16),
RandomStringUtils.randomAlphanumeric(16),
- Optional.of(Long.valueOf(RandomStringUtils.randomNumeric(1)))
- );
+ Optional.of(Long.valueOf(RandomStringUtils.randomNumeric(1))));
assertEquals(threadCount + 1, ManagementFactory.getThreadMXBean().getThreadCount());
}
@@ -68,11 +55,9 @@ void sendLiveEventShouldNeverCallAuthenticatedUserMethodsWhenAccessTokenGiven()
underTest.sendLiveEvent(
RandomStringUtils.randomAlphanumeric(16),
RandomStringUtils.randomAlphanumeric(16),
- Optional.of(Long.valueOf(RandomStringUtils.randomNumeric(1)))
- );
+ Optional.of(Long.valueOf(RandomStringUtils.randomNumeric(1))));
- verify(authenticatedUser, timeout(1000).times(0))
- .getAccessToken();
+ verify(authenticatedUser, timeout(1000).times(0)).getAccessToken();
}
@Test
@@ -82,8 +67,7 @@ void sendLiveEventShouldCallAuthenticatedUserMethodsWhenAccessTokenMissing() {
underTest.sendLiveEvent(
RandomStringUtils.randomAlphanumeric(16),
null,
- Optional.of(Long.valueOf(RandomStringUtils.randomNumeric(1)))
- );
+ Optional.of(Long.valueOf(RandomStringUtils.randomNumeric(1))));
verify(authenticatedUser, timeout(1000)).getAccessToken();
}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/service/LiveEventNotificationServiceTest.java b/src/test/java/de/caritas/cob/uploadservice/api/service/LiveEventNotificationServiceTest.java
index 5b5b582..ddc15e3 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/service/LiveEventNotificationServiceTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/service/LiveEventNotificationServiceTest.java
@@ -8,47 +8,41 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
-import static org.powermock.reflect.Whitebox.setInternalState;
import de.caritas.cob.uploadservice.api.service.helper.ServiceHelper;
import de.caritas.cob.uploadservice.config.apiclient.LiveProxyApiControllerFactory;
import de.caritas.cob.uploadservice.userservice.generated.ApiClient;
import de.caritas.cob.uploadservice.userservice.generated.web.LiveproxyControllerApi;
import java.util.Optional;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
import org.slf4j.Logger;
import org.springframework.http.HttpHeaders;
+import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.web.client.RestClientException;
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
public class LiveEventNotificationServiceTest {
- @InjectMocks
- private LiveEventNotificationService liveEventNotificationService;
+ @InjectMocks private LiveEventNotificationService liveEventNotificationService;
- @Mock
- private LiveproxyControllerApi liveproxyControllerApi;
+ @Mock private LiveproxyControllerApi liveproxyControllerApi;
- @Mock
- private ServiceHelper serviceHelper;
+ @Mock private ServiceHelper serviceHelper;
- @Mock
- private TenantHeaderSupplier tenantHeaderSupplier;
+ @Mock private TenantHeaderSupplier tenantHeaderSupplier;
- @Mock
- private Logger logger;
+ @Mock private Logger logger;
- @Mock
- private LiveProxyApiControllerFactory liveProxyApiControllerFactory;
+ @Mock private LiveProxyApiControllerFactory liveProxyApiControllerFactory;
- @Before
+ @BeforeEach
public void setup() {
- setInternalState(LogService.class, "LOGGER", logger);
+ ReflectionTestUtils.setField(LogService.class, "LOGGER", logger);
}
@Test
@@ -77,7 +71,8 @@ public void sendLiveEvent_Should_triggerLiveEventWithHeaders_When_rcGroupIdIsVal
headers.add("header 1", "value 1");
headers.add("header 2", "value 2");
when(this.serviceHelper.getKeycloakAndCsrfHttpHeaders(anyString(), any())).thenReturn(headers);
- when(this.liveProxyApiControllerFactory.createControllerApi()).thenReturn(liveproxyControllerApi);
+ when(this.liveProxyApiControllerFactory.createControllerApi())
+ .thenReturn(liveproxyControllerApi);
this.liveEventNotificationService.sendLiveEvent("valid", "", Optional.empty());
@@ -88,17 +83,17 @@ public void sendLiveEvent_Should_triggerLiveEventWithHeaders_When_rcGroupIdIsVal
@Test
public void sendLiveEvent_Should_logError_When_apiClientThrowsRestClientException() {
- doThrow(new RestClientException("")).when(this.liveproxyControllerApi)
+ doThrow(new RestClientException(""))
+ .when(this.liveproxyControllerApi)
.sendLiveEvent(anyString());
when(this.liveproxyControllerApi.getApiClient()).thenReturn(mock(ApiClient.class));
when(this.serviceHelper.getKeycloakAndCsrfHttpHeaders(anyString(), any()))
.thenReturn(new HttpHeaders());
- when(this.liveProxyApiControllerFactory.createControllerApi()).thenReturn(liveproxyControllerApi);
+ when(this.liveProxyApiControllerFactory.createControllerApi())
+ .thenReturn(liveproxyControllerApi);
this.liveEventNotificationService.sendLiveEvent("valid", "", Optional.empty());
-
verify(this.logger, times(1)).error(anyString(), anyString(), anyString());
}
-
}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/service/LogServiceTest.java b/src/test/java/de/caritas/cob/uploadservice/api/service/LogServiceTest.java
index 23a6394..52299f5 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/service/LogServiceTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/service/LogServiceTest.java
@@ -7,41 +7,39 @@
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
-import static org.powermock.reflect.Whitebox.setInternalState;
import java.io.PrintWriter;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
import org.slf4j.Logger;
import org.springframework.http.HttpStatus;
+import org.springframework.test.util.ReflectionTestUtils;
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
public class LogServiceTest {
private static final String ERROR_MESSAGE = "error";
private static final String RC_SERVICE_ERROR_TEXT = "Rocket.Chat service error: ";
private static final String INTERNAL_SERVER_ERROR_TEXT = "Internal Server Error: ";
private static final String BAD_REQUEST_TEXT = "Bad Request: ";
- private static final String STATISTICS_EVENT_PROCESSING_ERROR = "StatisticsEventProcessing error: ";
- private static final String STATISTICS_EVENT_PROCESSING_WARNING = "StatisticsEventProcessing warning: ";
+ private static final String STATISTICS_EVENT_PROCESSING_ERROR =
+ "StatisticsEventProcessing error: ";
+ private static final String STATISTICS_EVENT_PROCESSING_WARNING =
+ "StatisticsEventProcessing warning: ";
- @Mock
- Exception exception;
+ @Mock Exception exception;
- @Mock
- private Logger logger;
+ @Mock private Logger logger;
- @Before
+ @BeforeEach
public void setup() {
- setInternalState(LogService.class, "LOGGER", logger);
+ ReflectionTestUtils.setField(LogService.class, "LOGGER", logger);
}
- /**
- * Tests for method: logRocketChatServiceError
- */
+ /** Tests for method: logRocketChatServiceError */
@Test
public void logRocketChatServiceError_Should_LogExceptionStackTrace() {
@@ -53,22 +51,18 @@ public void logRocketChatServiceError_Should_LogExceptionStackTrace() {
public void logRocketChatServiceError_Should_LogErrorMessage() {
LogService.logRocketChatServiceError(ERROR_MESSAGE);
- verify(logger, times(1)).error(RC_SERVICE_ERROR_TEXT + "{}",
- ERROR_MESSAGE);
+ verify(logger, times(1)).error(RC_SERVICE_ERROR_TEXT + "{}", ERROR_MESSAGE);
}
@Test
public void logRocketChatServiceError_Should_LogErrorMessageAndExceptionStackTrace() {
LogService.logRocketChatServiceError(ERROR_MESSAGE, exception);
- verify(logger, times(1)).error(RC_SERVICE_ERROR_TEXT + "{}",
- ERROR_MESSAGE);
+ verify(logger, times(1)).error(RC_SERVICE_ERROR_TEXT + "{}", ERROR_MESSAGE);
verify(exception, atLeastOnce()).printStackTrace(any(PrintWriter.class));
}
- /**
- * Tests for method: logUserServiceHelperError
- */
+ /** Tests for method: logUserServiceHelperError */
@Test
public void logUserServiceHelperError_Should_LogExceptionStackTrace() {
@@ -76,9 +70,7 @@ public void logUserServiceHelperError_Should_LogExceptionStackTrace() {
verify(exception, atLeastOnce()).printStackTrace(any(PrintWriter.class));
}
- /**
- * Tests for method: logInfo
- */
+ /** Tests for method: logInfo */
@Test
public void logInfo_Should_LogMessage() {
@@ -86,9 +78,7 @@ public void logInfo_Should_LogMessage() {
verify(logger, times(1)).info(ERROR_MESSAGE);
}
- /**
- * Tests for method: logInfo
- */
+ /** Tests for method: logInfo */
@Test
public void logInfo_Should_LogExceptionStackTrace() {
@@ -96,9 +86,7 @@ public void logInfo_Should_LogExceptionStackTrace() {
verify(logger, times(1)).info(getStackTrace(exception));
}
- /**
- * Tests for method: logEncryptionServiceError
- */
+ /** Tests for method: logEncryptionServiceError */
@Test
public void logEncryptionServiceError_Should_LogExceptionStackTrace() {
@@ -106,9 +94,7 @@ public void logEncryptionServiceError_Should_LogExceptionStackTrace() {
verify(exception, atLeastOnce()).printStackTrace(any(PrintWriter.class));
}
- /**
- * Tests for method: logRocketChatBadRequestError
- */
+ /** Tests for method: logRocketChatBadRequestError */
@Test
public void logRocketChatBadRequestError_Should_LogExceptionStackTrace() {
@@ -116,15 +102,12 @@ public void logRocketChatBadRequestError_Should_LogExceptionStackTrace() {
verify(exception, atLeastOnce()).printStackTrace(any(PrintWriter.class));
}
- /**
- * Tests for method: logInternalServerError
- */
+ /** Tests for method: logInternalServerError */
@Test
public void logInternalServerError_Should_LogErrorMessageAndExceptionStackTrace() {
LogService.logInternalServerError(ERROR_MESSAGE, exception);
- verify(logger, times(1))
- .error(anyString(), eq(INTERNAL_SERVER_ERROR_TEXT), eq(ERROR_MESSAGE));
+ verify(logger, times(1)).error(anyString(), eq(INTERNAL_SERVER_ERROR_TEXT), eq(ERROR_MESSAGE));
verify(exception, atLeastOnce()).printStackTrace(any(PrintWriter.class));
}
@@ -136,15 +119,12 @@ public void logInternalServerError_Should_LogExceptionStackTrace() {
verify(exception, atLeastOnce()).printStackTrace(any(PrintWriter.class));
}
- /**
- * Tests for method: logInfo
- */
+ /** Tests for method: logInfo */
@Test
public void logBadRequest_Should_LogMessage() {
LogService.logBadRequest(ERROR_MESSAGE);
- verify(logger, times(1)).error(BAD_REQUEST_TEXT + "{}",
- ERROR_MESSAGE);
+ verify(logger, times(1)).error(BAD_REQUEST_TEXT + "{}", ERROR_MESSAGE);
}
@Test
@@ -160,8 +140,8 @@ public void logWarning_Should_LogMessageAndStatus() {
LogService.logWarning(HttpStatus.ACCEPTED, exception);
verify(exception, atLeastOnce()).printStackTrace(any(PrintWriter.class));
- verify(logger, times(1)).warn(anyString(), eq(HttpStatus.ACCEPTED.getReasonPhrase()),
- anyString());
+ verify(logger, times(1))
+ .warn(anyString(), eq(HttpStatus.ACCEPTED.getReasonPhrase()), anyString());
}
@Test
@@ -183,8 +163,7 @@ public void logDebug_Should_LogMessage() {
public void logStatisticEventError_Should_LogExceptionStackTraceAndErrorMessage() {
LogService.logStatisticsEventError(exception);
- verify(logger, times(1))
- .error(anyString(), eq(STATISTICS_EVENT_PROCESSING_ERROR), anyString());
+ verify(logger, times(1)).error(anyString(), eq(STATISTICS_EVENT_PROCESSING_ERROR), anyString());
verify(exception, atLeastOnce()).printStackTrace(any(PrintWriter.class));
}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/service/RocketChatServiceTest.java b/src/test/java/de/caritas/cob/uploadservice/api/service/RocketChatServiceTest.java
index 0c49902..3343e0b 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/service/RocketChatServiceTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/service/RocketChatServiceTest.java
@@ -31,15 +31,14 @@
import static de.caritas.cob.uploadservice.helper.TestConstants.UNSANITIZED_UPLOAD_FILE;
import static de.caritas.cob.uploadservice.helper.TestConstants.UPLOAD_FILE;
import static org.assertj.core.api.Assertions.fail;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import static org.powermock.reflect.Whitebox.setInternalState;
import de.caritas.cob.uploadservice.api.container.RocketChatCredentials;
import de.caritas.cob.uploadservice.api.container.RocketChatUploadParameter;
@@ -53,16 +52,16 @@
import de.caritas.cob.uploadservice.api.service.helper.RocketChatCredentialsHelper;
import de.caritas.cob.uploadservice.rocketchat.generated.web.model.FullUploadResponseDto;
import java.nio.charset.StandardCharsets;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.ArgumentCaptor;
import org.mockito.ArgumentMatchers;
import org.mockito.Captor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
import org.slf4j.Logger;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpStatus;
@@ -75,22 +74,16 @@
import org.springframework.web.multipart.MaxUploadSizeExceededException;
import org.springframework.web.multipart.MultipartException;
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
public class RocketChatServiceTest {
- @InjectMocks
- private RocketChatService rocketChatService;
- @Mock
- private RocketChatCredentialsHelper rcCredentialsHelper;
- @Mock
- private RestTemplate restTemplate;
- @Mock
- private Logger logger;
- @Mock
- private UploadErrorHelper uploadErrorHelper;
+ @InjectMocks private RocketChatService rocketChatService;
+ @Mock private RocketChatCredentialsHelper rcCredentialsHelper;
+ @Mock private RestTemplate restTemplate;
+ @Mock private Logger logger;
+ @Mock private UploadErrorHelper uploadErrorHelper;
- @Captor
- private ArgumentCaptor>> mapArgumentCaptor;
+ @Captor private ArgumentCaptor>> mapArgumentCaptor;
private RocketChatCredentials rocketChatCredentials;
private RocketChatUploadParameter rocketChatUploadParameter;
@@ -98,15 +91,18 @@ public class RocketChatServiceTest {
@InjectMocks private EmailNotificationFacade emailNotificationFacade;
- /**
- * Setup method.
- */
- @Before
+ /** Setup method. */
+ @BeforeEach
public void setup() throws NoSuchFieldException, SecurityException {
- ReflectionTestUtils.setField(emailNotificationFacade, FIELD_NAME_RC_HEADER_AUTH_TOKEN, RC_TOKEN);
+ ReflectionTestUtils.setField(
+ emailNotificationFacade, FIELD_NAME_RC_HEADER_AUTH_TOKEN, RC_TOKEN);
ReflectionTestUtils.setField(emailNotificationFacade, FIELD_NAME_RC_HEADER_USER_ID, RC_USER_ID);
- ReflectionTestUtils.setField(emailNotificationFacade, FIELD_NAME_RC_POST_GROUP_MESSAGES_READ, FIELD_VALUE_RC_POST_GROUP_MESSAGES_READ);
- ReflectionTestUtils.setField(emailNotificationFacade, FIELD_NAME_RC_ROOMS_UPLOAD_URL, FIELD_VALUE_RC_ROOMS_UPLOAD_URL);
+ ReflectionTestUtils.setField(
+ emailNotificationFacade,
+ FIELD_NAME_RC_POST_GROUP_MESSAGES_READ,
+ FIELD_VALUE_RC_POST_GROUP_MESSAGES_READ);
+ ReflectionTestUtils.setField(
+ emailNotificationFacade, FIELD_NAME_RC_ROOMS_UPLOAD_URL, FIELD_VALUE_RC_ROOMS_UPLOAD_URL);
rocketChatCredentials =
RocketChatCredentials.builder()
@@ -131,29 +127,28 @@ public void setup() throws NoSuchFieldException, SecurityException {
.roomId(RC_ROOM_ID)
.tmId(RC_TMID)
.build();
-
- setInternalState(LogService.class, "LOGGER", logger);
}
/* Method: markGroupAsReadForSystemUser */
@Test
- public void markGroupAsReadForSystemUser_Should_ThrowRocketChatPostMarkGroupAsReadException_WhenMarkGroupAsReadFails()
- throws Exception {
+ public void
+ markGroupAsReadForSystemUser_Should_ThrowRocketChatPostMarkGroupAsReadException_WhenMarkGroupAsReadFails()
+ throws Exception {
when(rcCredentialsHelper.getSystemUser()).thenReturn(RC_SYSTEM_USER);
RestClientException ex = new RestClientException(ERROR_MSG);
when(restTemplate.postForObject(
- ArgumentMatchers.anyString(),
- any(),
- ArgumentMatchers.>any()))
+ ArgumentMatchers.anyString(),
+ any(),
+ ArgumentMatchers.>any()))
.thenThrow(ex);
try {
rocketChatService.markGroupAsReadForSystemUser(RC_ROOM_ID);
fail("Expected exception: RocketChatPostMarkGroupAsReadException");
} catch (RocketChatPostMarkGroupAsReadException rocketChatPostMarkGroupAsReadException) {
- assertTrue("Expected RocketChatPostMarkGroupAsReadException thrown", true);
+ assertTrue(true, "Expected RocketChatPostMarkGroupAsReadException thrown");
}
}
@@ -164,9 +159,9 @@ public void markGroupAsReadForSystemUser_Should_MarkGroupAsRead_WhenProvidedWith
when(rcCredentialsHelper.getSystemUser()).thenReturn(RC_SYSTEM_USER);
when(restTemplate.postForObject(
- ArgumentMatchers.anyString(),
- any(),
- ArgumentMatchers.>any()))
+ ArgumentMatchers.anyString(),
+ any(),
+ ArgumentMatchers.>any()))
.thenReturn(STANDARD_SUCCESS_RESPONSE_DTO);
rocketChatService.markGroupAsReadForSystemUser(RC_ROOM_ID);
@@ -175,8 +170,9 @@ public void markGroupAsReadForSystemUser_Should_MarkGroupAsRead_WhenProvidedWith
}
@Test
- public void markGroupAsReadForSystemUser_Should_LogError_WhenProvidedWithInvalidRChatSysUserCredentials()
- throws Exception {
+ public void
+ markGroupAsReadForSystemUser_Should_LogError_WhenProvidedWithInvalidRChatSysUserCredentials()
+ throws Exception {
when(rcCredentialsHelper.getSystemUser()).thenReturn(INVALID_RC_SYSTEM_USER);
@@ -186,7 +182,8 @@ public void markGroupAsReadForSystemUser_Should_LogError_WhenProvidedWithInvalid
/* Method: roomsUpload */
@Test
- public void roomsUpload_Should_ThrowMaxUploadSizeExceededException_WhenRcErrorTypeIsFileTooLarge() {
+ public void
+ roomsUpload_Should_ThrowMaxUploadSizeExceededException_WhenRcErrorTypeIsFileTooLarge() {
HttpStatusCodeException httpStatusCodeException =
new HttpServerErrorException(
@@ -195,25 +192,23 @@ public void roomsUpload_Should_ThrowMaxUploadSizeExceededException_WhenRcErrorTy
RC_UPLOAD_ERROR_RESPONSE_BODY_ENTITY_TOO_LARGE.getBytes(),
StandardCharsets.UTF_8);
when(restTemplate.postForObject(
- ArgumentMatchers.anyString(),
- any(),
- ArgumentMatchers.>any()))
+ ArgumentMatchers.anyString(), any(), ArgumentMatchers.>any()))
.thenThrow(httpStatusCodeException);
when(uploadErrorHelper.getParsedErrorResponse(
- httpStatusCodeException.getResponseBodyAsString()))
+ httpStatusCodeException.getResponseBodyAsString()))
.thenReturn(RC_UPLOAD_ERROR_RESPONSE_DTO_ENTITY_TOO_LARGE);
when(uploadErrorHelper.getErrorFromUploadResponse(
- Mockito.eq(RC_UPLOAD_ERROR_RESPONSE_DTO_ENTITY_TOO_LARGE),
- Mockito.anyString(),
- Mockito.anyString()))
+ Mockito.eq(RC_UPLOAD_ERROR_RESPONSE_DTO_ENTITY_TOO_LARGE),
+ Mockito.anyString(),
+ Mockito.anyString()))
.thenReturn(RC_UPLOAD_ERROR_ENTITY_TOO_LARGE);
try {
rocketChatService.roomsUpload(rocketChatCredentials, rocketChatUploadParameter);
fail("Expected exception: MaxUploadSizeExceededException");
} catch (MaxUploadSizeExceededException maxUploadSizeExceededException) {
- assertTrue("Expected MaxUploadSizeExceededException thrown", true);
+ assertTrue(true, "Expected MaxUploadSizeExceededException thrown");
}
}
@@ -227,25 +222,23 @@ public void roomsUpload_Should_ThrowInvalidFileTypeException_WhenRcErrorTypeIsIn
RC_UPLOAD_ERROR_RESPONSE_BODY_INVALID_FILE_TYPE.getBytes(),
StandardCharsets.UTF_8);
when(restTemplate.postForObject(
- ArgumentMatchers.anyString(),
- any(),
- ArgumentMatchers.>any()))
+ ArgumentMatchers.anyString(), any(), ArgumentMatchers.>any()))
.thenThrow(httpStatusCodeException);
when(uploadErrorHelper.getParsedErrorResponse(
- httpStatusCodeException.getResponseBodyAsString()))
+ httpStatusCodeException.getResponseBodyAsString()))
.thenReturn(RC_UPLOAD_ERROR_RESPONSE_DTO_INVALID_FILE_TYPE);
when(uploadErrorHelper.getErrorFromUploadResponse(
- Mockito.eq(RC_UPLOAD_ERROR_RESPONSE_DTO_INVALID_FILE_TYPE),
- Mockito.anyString(),
- Mockito.anyString()))
+ Mockito.eq(RC_UPLOAD_ERROR_RESPONSE_DTO_INVALID_FILE_TYPE),
+ Mockito.anyString(),
+ Mockito.anyString()))
.thenReturn(RC_UPLOAD_ERROR_INVALID_FILE_TYPE);
try {
rocketChatService.roomsUpload(rocketChatCredentials, rocketChatUploadParameter);
fail("Expected exception: InvalidFileTypeException");
} catch (InvalidFileTypeException invalidFileTypeException) {
- assertTrue("Expected InvalidFileTypeException thrown", true);
+ assertTrue(true, "Expected InvalidFileTypeException thrown");
}
}
@@ -259,25 +252,23 @@ public void roomsUpload_Should_ThrowMultipartException_WhenRcErrorIsUnknown() {
RC_UPLOAD_ERROR_RESPONSE_BODY_UNKNOWN_ERROR.getBytes(),
StandardCharsets.UTF_8);
when(restTemplate.postForObject(
- ArgumentMatchers.anyString(),
- any(),
- ArgumentMatchers.>any()))
+ ArgumentMatchers.anyString(), any(), ArgumentMatchers.>any()))
.thenThrow(httpStatusCodeException);
when(uploadErrorHelper.getParsedErrorResponse(
- httpStatusCodeException.getResponseBodyAsString()))
+ httpStatusCodeException.getResponseBodyAsString()))
.thenReturn(RC_UPLOAD_ERROR_RESPONSE_DTO_UNKNOWN_ERROR);
when(uploadErrorHelper.getErrorFromUploadResponse(
- Mockito.eq(RC_UPLOAD_ERROR_RESPONSE_DTO_UNKNOWN_ERROR),
- Mockito.anyString(),
- Mockito.anyString()))
+ Mockito.eq(RC_UPLOAD_ERROR_RESPONSE_DTO_UNKNOWN_ERROR),
+ Mockito.anyString(),
+ Mockito.anyString()))
.thenReturn(RC_UPLOAD_ERROR_UNKNOWN_ERROR);
try {
rocketChatService.roomsUpload(rocketChatCredentials, rocketChatUploadParameter);
fail("Expected exception: MultipartException");
} catch (MultipartException multipartException) {
- assertTrue("Expected MultipartException thrown", true);
+ assertTrue(true, "Expected MultipartException thrown");
}
}
@@ -285,16 +276,16 @@ public void roomsUpload_Should_ThrowMultipartException_WhenRcErrorIsUnknown() {
public void roomsUpload_Should_ThrowMultipartException_WhenResponseIsNotSuccess() {
when(restTemplate.postForObject(
- ArgumentMatchers.anyString(),
- any(),
- ArgumentMatchers.>any()))
+ ArgumentMatchers.anyString(),
+ any(),
+ ArgumentMatchers.>any()))
.thenReturn(RC_FULL_UPLOAD_ERROR_RESPONSE_DTO_UNKNOWN_ERROR);
try {
rocketChatService.roomsUpload(rocketChatCredentials, rocketChatUploadParameter);
fail("Expected exception: MultipartException");
} catch (MultipartException multipartException) {
- assertTrue("Expected MultipartException thrown", true);
+ assertTrue(true, "Expected MultipartException thrown");
}
}
@@ -302,16 +293,14 @@ public void roomsUpload_Should_ThrowMultipartException_WhenResponseIsNotSuccess(
public void roomsUpload_Should_ThrowMultipartException_WhenResponseIsNull() {
when(restTemplate.postForObject(
- ArgumentMatchers.anyString(),
- any(),
- ArgumentMatchers.>any()))
+ ArgumentMatchers.anyString(), any(), ArgumentMatchers.>any()))
.thenReturn(null);
try {
rocketChatService.roomsUpload(rocketChatCredentials, rocketChatUploadParameter);
fail("Expected exception: MultipartException");
} catch (MultipartException multipartException) {
- assertTrue("Expected MultipartException thrown", true);
+ assertTrue(true, "Expected MultipartException thrown");
}
}
@@ -319,9 +308,9 @@ public void roomsUpload_Should_ThrowMultipartException_WhenResponseIsNull() {
public void roomsUpload_Should_NotThrowException_WhenResponseIsSuccess() {
when(restTemplate.postForObject(
- ArgumentMatchers.anyString(),
- any(),
- ArgumentMatchers.>any()))
+ ArgumentMatchers.anyString(),
+ any(),
+ ArgumentMatchers.>any()))
.thenReturn(RC_FULL_UPLOAD_ERROR_RESPONSE_DTO_SUCCESS);
try {
@@ -335,19 +324,22 @@ public void roomsUpload_Should_NotThrowException_WhenResponseIsSuccess() {
public void roomsUpload_Should_UploadFileWithSanitizedFileName() {
when(restTemplate.postForObject(
- ArgumentMatchers.anyString(),
- any(),
- ArgumentMatchers.>any()))
+ ArgumentMatchers.anyString(),
+ any(),
+ ArgumentMatchers.>any()))
.thenReturn(RC_FULL_UPLOAD_ERROR_RESPONSE_DTO_SUCCESS);
- rocketChatService
- .roomsUpload(rocketChatCredentials, rocketChatUploadParameterWithUnsanitizedFileName);
+ rocketChatService.roomsUpload(
+ rocketChatCredentials, rocketChatUploadParameterWithUnsanitizedFileName);
- verify(restTemplate).postForObject(ArgumentMatchers.anyString(), mapArgumentCaptor.capture(),
- ArgumentMatchers.>any());
+ verify(restTemplate)
+ .postForObject(
+ ArgumentMatchers.anyString(),
+ mapArgumentCaptor.capture(),
+ ArgumentMatchers.>any());
- MultipartInputStreamFileResource file = (MultipartInputStreamFileResource) mapArgumentCaptor
- .getValue().getBody().get(null).get(3);
+ MultipartInputStreamFileResource file =
+ (MultipartInputStreamFileResource) mapArgumentCaptor.getValue().getBody().get(null).get(3);
assertEquals(FILE_NAME_SANITIZED, file.getFilename());
}
}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/service/UploadTrackingServiceIT.java b/src/test/java/de/caritas/cob/uploadservice/api/service/UploadTrackingServiceIT.java
index e11c407..454f823 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/service/UploadTrackingServiceIT.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/service/UploadTrackingServiceIT.java
@@ -3,22 +3,21 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.fail;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import static org.powermock.reflect.Whitebox.setInternalState;
import de.caritas.cob.uploadservice.UploadServiceApplication;
import de.caritas.cob.uploadservice.api.exception.httpresponses.QuotaReachedException;
import de.caritas.cob.uploadservice.api.helper.AuthenticatedUser;
import de.caritas.cob.uploadservice.api.model.UploadByUser;
import de.caritas.cob.uploadservice.api.repository.UploadByUserRepository;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
@@ -27,33 +26,28 @@
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.TestPropertySource;
-import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.util.ReflectionTestUtils;
-@RunWith(SpringRunner.class)
@SpringBootTest(classes = UploadServiceApplication.class)
@TestPropertySource(properties = "spring.profiles.active=testing")
@AutoConfigureTestDatabase(replace = Replace.ANY)
public class UploadTrackingServiceIT {
- @Autowired
- private UploadTrackingService uploadTrackingService;
+ @Autowired private UploadTrackingService uploadTrackingService;
- @Autowired
- private UploadByUserRepository uploadByUserRepository;
+ @Autowired private UploadByUserRepository uploadByUserRepository;
- @MockBean
- private AuthenticatedUser authenticatedUser;
+ @MockBean private AuthenticatedUser authenticatedUser;
- @Mock
- private Logger logger;
+ @Mock private Logger logger;
- @Before
+ @BeforeEach
public void setup() {
when(this.authenticatedUser.getUserId()).thenReturn("userId");
- setInternalState(LogService.class, "LOGGER", logger);
+ ReflectionTestUtils.setField(LogService.class, "LOGGER", logger);
}
- @After
+ @AfterEach
public void cleanDatabase() {
this.uploadByUserRepository.deleteAll();
}
@@ -80,8 +74,8 @@ public void trackUploadedFileForUser_Should_persistTrackingEntries_When_trackMul
trackUploadedFile(10);
assertThat(this.uploadByUserRepository.count(), is(10L));
- assertThat(this.uploadByUserRepository.countAllByUserIdAndSessionId("userId", "sessionId"),
- is(10));
+ assertThat(
+ this.uploadByUserRepository.countAllByUserIdAndSessionId("userId", "sessionId"), is(10));
}
@Test
@@ -95,15 +89,20 @@ public void validateUploadLimit_Should_notThrowQuotaException_When_limitIsNotRea
}
}
- @Test(expected = QuotaReachedException.class)
+ @Test
public void validateUploadLimit_Should_throwQuotaReachedException_When_limitIsReached() {
- trackUploadedFile(7);
+ assertThrows(
+ QuotaReachedException.class,
+ () -> {
+ trackUploadedFile(7);
- this.uploadTrackingService.validateUploadLimit("sessionId");
+ this.uploadTrackingService.validateUploadLimit("sessionId");
+ });
}
@Test
- public void validateUploadLimit_Should_notThrowQuotaException_When_limitIsNotReachedForGivenSession() {
+ public void
+ validateUploadLimit_Should_notThrowQuotaException_When_limitIsNotReachedForGivenSession() {
trackUploadedFile(7);
try {
@@ -130,5 +129,4 @@ public void cleanUpFileLimits_Should_logExpectedInfoMessage() {
verify(this.logger, times(1)).info(eq("File restrictions are reset!"));
}
-
}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/service/helper/RocketChatCredentialsHelperTest.java b/src/test/java/de/caritas/cob/uploadservice/api/service/helper/RocketChatCredentialsHelperTest.java
index 769d080..67e9ae9 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/service/helper/RocketChatCredentialsHelperTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/service/helper/RocketChatCredentialsHelperTest.java
@@ -1,28 +1,27 @@
package de.caritas.cob.uploadservice.api.service.helper;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import de.caritas.cob.uploadservice.api.container.RocketChatCredentials;
-import de.caritas.cob.uploadservice.api.exception.RocketChatLoginException;
import de.caritas.cob.uploadservice.api.exception.RocketChatUserNotInitializedException;
import de.caritas.cob.uploadservice.api.model.rocket.chat.login.DataDto;
import de.caritas.cob.uploadservice.api.model.rocket.chat.login.LoginResponseDto;
import de.caritas.cob.uploadservice.api.model.rocket.chat.logout.LogoutResponseDto;
import java.time.LocalDateTime;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.ArgumentMatchers;
import org.mockito.InjectMocks;
import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
@@ -33,7 +32,7 @@
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
public class RocketChatCredentialsHelperTest {
/** FIELD Names */
@@ -95,14 +94,23 @@ public class RocketChatCredentialsHelperTest {
@Mock private RestTemplate restTemplate;
- @Before
+ @BeforeEach
public void setup() throws NoSuchFieldException {
- ReflectionTestUtils.setField(rcCredentialHelper, FIELD_NAME_SYSTEM_USERNAME, SYSTEM_USER_USERNAME);
+ ReflectionTestUtils.setField(
+ rcCredentialHelper, FIELD_NAME_SYSTEM_USERNAME, SYSTEM_USER_USERNAME);
ReflectionTestUtils.setField(rcCredentialHelper, FIELD_NAME_SYSTEM_PASSWORD, SYSTEM_USER_PW);
- ReflectionTestUtils.setField(rcCredentialHelper, FIELD_NAME_ROCKET_CHAT_API_POST_USER_LOGIN, RC_URL_CHAT_USER_LOGIN);
- ReflectionTestUtils.setField(rcCredentialHelper, FIELD_NAME_ROCKET_CHAT_API_POST_USER_LOGOUT, RC_URL_CHAT_USER_LOGOUT);
- ReflectionTestUtils.setField(rcCredentialHelper, FIELD_NAME_ROCKET_CHAT_HEADER_AUTH_TOKEN, FIELD_VALUE_ROCKET_CHAT_HEADER_AUTH_TOKEN);
- ReflectionTestUtils.setField(rcCredentialHelper, FIELD_NAME_ROCKET_CHAT_HEADER_USER_ID, FIELD_VALUE_ROCKET_CHAT_HEADER_USER_ID);
+ ReflectionTestUtils.setField(
+ rcCredentialHelper, FIELD_NAME_ROCKET_CHAT_API_POST_USER_LOGIN, RC_URL_CHAT_USER_LOGIN);
+ ReflectionTestUtils.setField(
+ rcCredentialHelper, FIELD_NAME_ROCKET_CHAT_API_POST_USER_LOGOUT, RC_URL_CHAT_USER_LOGOUT);
+ ReflectionTestUtils.setField(
+ rcCredentialHelper,
+ FIELD_NAME_ROCKET_CHAT_HEADER_AUTH_TOKEN,
+ FIELD_VALUE_ROCKET_CHAT_HEADER_AUTH_TOKEN);
+ ReflectionTestUtils.setField(
+ rcCredentialHelper,
+ FIELD_NAME_ROCKET_CHAT_HEADER_USER_ID,
+ FIELD_VALUE_ROCKET_CHAT_HEADER_USER_ID);
}
/** Method: updateCredentials */
@@ -195,7 +203,6 @@ public void updateCredentials_Should_LogoutAndReLoginBUsers_WhenAllUsersArePrese
.build();
ReflectionTestUtils.setField(rcCredentialHelper, FIELD_NAME_SYSTEM_USER_A, systemA);
-
// create and set system B user
RocketChatCredentials systemB =
RocketChatCredentials.builder()
@@ -208,7 +215,7 @@ public void updateCredentials_Should_LogoutAndReLoginBUsers_WhenAllUsersArePrese
// prepare logout intercept for system user
HttpHeaders headersLogoutSys = new HttpHeaders();
- headersLogoutSys.setContentType(MediaType.APPLICATION_JSON_UTF8);
+ headersLogoutSys.setContentType(MediaType.APPLICATION_JSON);
headersLogoutSys.add(FIELD_VALUE_ROCKET_CHAT_HEADER_AUTH_TOKEN, SYSTEM_USER_A_TOKEN);
headersLogoutSys.add(FIELD_VALUE_ROCKET_CHAT_HEADER_USER_ID, SYSTEM_USER_A_ID);
HttpEntity requestSysLogout = new HttpEntity(headersLogoutSys);
@@ -255,7 +262,7 @@ public void updateCredentials_Should_LogoutAndReLoginBUsers_WhenAllUsersArePrese
rcCredentialHelper.getSystemUser();
fail("Expected exception: RocketChatUserNotInitializedException");
} catch (RocketChatUserNotInitializedException ex) {
- assertTrue("Excepted RocketChatUserNotInitializedException thrown", true);
+ assertTrue(true, "Excepted RocketChatUserNotInitializedException thrown");
}
}
@@ -318,7 +325,6 @@ public void getSystemUser_Should_ReturnUserA_WhenUserAIsNewer() throws Exception
.timeStampCreated(LocalDateTime.now().minusMinutes(5))
.build();
-
ReflectionTestUtils.setField(rcCredentialHelper, FIELD_NAME_SYSTEM_USER_B, sysUserB);
// Get User from Class (actual test)
@@ -342,7 +348,6 @@ public void getSystemUser_Should_ReturnUserB_WhenUserBIsNewer() throws Exception
ReflectionTestUtils.setField(rcCredentialHelper, FIELD_NAME_SYSTEM_USER_A, sysUserA);
-
// Prepare User B
RocketChatCredentials sysUserB =
RocketChatCredentials.builder()
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/service/helper/ServiceHelperTest.java b/src/test/java/de/caritas/cob/uploadservice/api/service/helper/ServiceHelperTest.java
index c84cf60..de755b4 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/service/helper/ServiceHelperTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/service/helper/ServiceHelperTest.java
@@ -7,26 +7,26 @@
import static de.caritas.cob.uploadservice.helper.TestConstants.AUTHORIZATION;
import static de.caritas.cob.uploadservice.helper.TestConstants.BEARER;
import static de.caritas.cob.uploadservice.helper.TestConstants.KEYCLOAK_ACCESS_TOKEN;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.when;
import de.caritas.cob.uploadservice.api.helper.AuthenticatedUser;
import de.caritas.cob.uploadservice.api.service.TenantHeaderSupplier;
import java.util.Optional;
import org.apache.commons.lang3.RandomStringUtils;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.test.util.ReflectionTestUtils;
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
public class ServiceHelperTest {
@InjectMocks private ServiceHelper serviceHelper;
@@ -37,86 +37,88 @@ public class ServiceHelperTest {
@SuppressWarnings("unused")
private TenantHeaderSupplier tenantHeaderSupplier;
- @Before
+ @BeforeEach
public void setup() throws NoSuchFieldException, SecurityException {
- ReflectionTestUtils.setField(serviceHelper,
- FIELD_NAME_CSRF_TOKEN_HEADER_PROPERTY, CSRF_TOKEN_HEADER_VALUE
- );
- ReflectionTestUtils.setField(serviceHelper,
- FIELD_NAME_CSRF_TOKEN_COOKIE_PROPERTY, CSRF_TOKEN_COOKIE_VALUE
- );
+ ReflectionTestUtils.setField(
+ serviceHelper, FIELD_NAME_CSRF_TOKEN_HEADER_PROPERTY, CSRF_TOKEN_HEADER_VALUE);
+ ReflectionTestUtils.setField(
+ serviceHelper, FIELD_NAME_CSRF_TOKEN_COOKIE_PROPERTY, CSRF_TOKEN_COOKIE_VALUE);
}
- /**
- * Tests for method: getKeycloakAndCsrfHttpHeaders()
- */
+ /** Tests for method: getKeycloakAndCsrfHttpHeaders() */
@Test
public void getKeycloakAndCsrfHttpHeaders_Should_Return_HeaderWithCorrectContentType() {
- HttpHeaders result = serviceHelper.getKeycloakAndCsrfHttpHeaders(
- RandomStringUtils.randomAlphanumeric(16), Optional.empty()
- );
- assertEquals(MediaType.APPLICATION_JSON_UTF8, result.getContentType());
+ HttpHeaders result =
+ serviceHelper.getKeycloakAndCsrfHttpHeaders(
+ RandomStringUtils.randomAlphanumeric(16), Optional.empty());
+ assertEquals(MediaType.APPLICATION_JSON, result.getContentType());
}
@Test
- public void getKeycloakAndCsrfHttpHeaders_Should_Return_HeaderWithCookiePropertyNameFromProperties() {
+ public void
+ getKeycloakAndCsrfHttpHeaders_Should_Return_HeaderWithCookiePropertyNameFromProperties() {
- HttpHeaders result = serviceHelper.getKeycloakAndCsrfHttpHeaders(
- RandomStringUtils.randomAlphanumeric(16), Optional.empty()
- );
+ HttpHeaders result =
+ serviceHelper.getKeycloakAndCsrfHttpHeaders(
+ RandomStringUtils.randomAlphanumeric(16), Optional.empty());
assertTrue(result.get("Cookie").toString().startsWith("[" + CSRF_TOKEN_COOKIE_VALUE + "="));
}
@Test
public void getKeycloakAndCsrfHttpHeaders_Should_Return_HeaderWithPropertyNameFromProperties() {
- HttpHeaders result = serviceHelper.getKeycloakAndCsrfHttpHeaders(
- RandomStringUtils.randomAlphanumeric(16), Optional.empty()
- );
+ HttpHeaders result =
+ serviceHelper.getKeycloakAndCsrfHttpHeaders(
+ RandomStringUtils.randomAlphanumeric(16), Optional.empty());
assertNotNull(result.get(CSRF_TOKEN_HEADER_VALUE));
}
@Test
- public void getKeycloakAndCsrfHttpHeaders_Should_Return_HeaderWithBearerTokenForCurrentlyAuthenticatedUser() {
+ public void
+ getKeycloakAndCsrfHttpHeaders_Should_Return_HeaderWithBearerTokenForCurrentlyAuthenticatedUser() {
when(authenticatedUser.getAccessToken()).thenReturn(KEYCLOAK_ACCESS_TOKEN);
- HttpHeaders result = serviceHelper.getKeycloakAndCsrfHttpHeaders(
- null, Optional.empty()
- );
+ HttpHeaders result = serviceHelper.getKeycloakAndCsrfHttpHeaders(null, Optional.empty());
assertNotNull(result.get(AUTHORIZATION));
assertEquals(BEARER + KEYCLOAK_ACCESS_TOKEN, result.get(AUTHORIZATION).get(0));
}
- /**
- * Test for method: getKeycloakAndCsrfHttpHeaders(String accessToken)
- */
+ /** Test for method: getKeycloakAndCsrfHttpHeaders(String accessToken) */
@Test
- public void getKeycloakAndCsrfHttpHeadersWithTokenParam_Should_Return_HeaderWithCorrectContentType() {
+ public void
+ getKeycloakAndCsrfHttpHeadersWithTokenParam_Should_Return_HeaderWithCorrectContentType() {
- HttpHeaders result = serviceHelper.getKeycloakAndCsrfHttpHeaders(KEYCLOAK_ACCESS_TOKEN, Optional.empty());
- assertEquals(MediaType.APPLICATION_JSON_UTF8, result.getContentType());
+ HttpHeaders result =
+ serviceHelper.getKeycloakAndCsrfHttpHeaders(KEYCLOAK_ACCESS_TOKEN, Optional.empty());
+ assertEquals(MediaType.APPLICATION_JSON, result.getContentType());
}
@Test
- public void getKeycloakAndCsrfHttpHeadersWithTokenParam_Should_Return_HeaderWithCookiePropertyNameFromProperties() {
+ public void
+ getKeycloakAndCsrfHttpHeadersWithTokenParam_Should_Return_HeaderWithCookiePropertyNameFromProperties() {
- HttpHeaders result = serviceHelper.getKeycloakAndCsrfHttpHeaders(KEYCLOAK_ACCESS_TOKEN, Optional.empty());
+ HttpHeaders result =
+ serviceHelper.getKeycloakAndCsrfHttpHeaders(KEYCLOAK_ACCESS_TOKEN, Optional.empty());
assertTrue(result.get("Cookie").toString().startsWith("[" + CSRF_TOKEN_COOKIE_VALUE + "="));
}
@Test
- public void getKeycloakAndCsrfHttpHeadersWithTokenParam_Should_Return_HeaderWithPropertyNameFromProperties() {
+ public void
+ getKeycloakAndCsrfHttpHeadersWithTokenParam_Should_Return_HeaderWithPropertyNameFromProperties() {
- HttpHeaders result = serviceHelper.getKeycloakAndCsrfHttpHeaders(KEYCLOAK_ACCESS_TOKEN, Optional.empty());
+ HttpHeaders result =
+ serviceHelper.getKeycloakAndCsrfHttpHeaders(KEYCLOAK_ACCESS_TOKEN, Optional.empty());
assertNotNull(result.get(CSRF_TOKEN_HEADER_VALUE));
}
@Test
- public void getKeycloakAndCsrfHttpHeadersWithTokenParam_Should_Return_HeaderWithBearerTokenForCurrentlyAuthenticatedUser() {
+ public void
+ getKeycloakAndCsrfHttpHeadersWithTokenParam_Should_Return_HeaderWithBearerTokenForCurrentlyAuthenticatedUser() {
- HttpHeaders result = serviceHelper.getKeycloakAndCsrfHttpHeaders(KEYCLOAK_ACCESS_TOKEN, Optional.empty());
+ HttpHeaders result =
+ serviceHelper.getKeycloakAndCsrfHttpHeaders(KEYCLOAK_ACCESS_TOKEN, Optional.empty());
assertNotNull(result.get(AUTHORIZATION));
assertEquals(BEARER + KEYCLOAK_ACCESS_TOKEN, result.get(AUTHORIZATION).get(0));
}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/statistics/StatisticsServiceIT.java b/src/test/java/de/caritas/cob/uploadservice/api/statistics/StatisticsServiceIT.java
index 91ae666..4b2a496 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/statistics/StatisticsServiceIT.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/statistics/StatisticsServiceIT.java
@@ -14,8 +14,7 @@
import de.caritas.cob.uploadservice.testconfig.RabbitMqTestConfig;
import java.io.IOException;
import org.apache.commons.io.IOUtils;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.core.Message;
import org.springframework.beans.factory.annotation.Autowired;
@@ -23,10 +22,7 @@
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase.Replace;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
-import org.springframework.test.context.junit4.SpringRunner;
-import org.springframework.test.util.ReflectionTestUtils;
-@RunWith(SpringRunner.class)
@TestPropertySource(properties = "spring.profiles.active=testing")
@SpringBootTest(classes = UploadServiceApplication.class)
@AutoConfigureTestDatabase(replace = Replace.ANY)
@@ -34,21 +30,15 @@ public class StatisticsServiceIT {
private static final long MAX_TIMEOUT_MILLIS = 5000;
- @Autowired
- StatisticsService statisticsService;
- @Autowired
- AmqpTemplate amqpTemplate;
+ @Autowired StatisticsService statisticsService;
+ @Autowired AmqpTemplate amqpTemplate;
@Test
public void fireEvent_Should_Send_ExpectedUploadFileStatisticsEventMessageToQueue()
throws IOException {
CreateMessageStatisticsEvent createMessageStatisticsEvent =
- new CreateMessageStatisticsEvent(
- CONSULTANT_ID,
- UserRole.CONSULTANT,
- RC_ROOM_ID,
- true);
+ new CreateMessageStatisticsEvent(CONSULTANT_ID, UserRole.CONSULTANT, RC_ROOM_ID, true);
statisticsService.fireEvent(createMessageStatisticsEvent);
Message message =
@@ -83,5 +73,4 @@ public void fireEvent_Should_Send_ExpectedUploadFileStatisticsEventMessageToQueu
private String extractBodyFromAmpQMessage(Message message) throws IOException {
return IOUtils.toString(message.getBody(), UTF_8);
}
-
}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/statistics/StatisticsServiceTest.java b/src/test/java/de/caritas/cob/uploadservice/api/statistics/StatisticsServiceTest.java
index cb6a9d5..f5c18e1 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/statistics/StatisticsServiceTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/statistics/StatisticsServiceTest.java
@@ -5,7 +5,6 @@
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import static org.powermock.reflect.Whitebox.setInternalState;
import static org.springframework.test.util.ReflectionTestUtils.setField;
import de.caritas.cob.uploadservice.api.service.LogService;
@@ -13,19 +12,20 @@
import de.caritas.cob.uploadservice.statisticsservice.generated.web.model.EventType;
import java.nio.charset.StandardCharsets;
import java.util.Optional;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
import org.slf4j.Logger;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.core.MessageProperties;
+import org.springframework.test.util.ReflectionTestUtils;
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
public class StatisticsServiceTest {
private static final String FIELD_NAME_STATISTICS_ENABLED = "statisticsEnabled";
@@ -38,13 +38,14 @@ public class StatisticsServiceTest {
@InjectMocks private StatisticsService statisticsService;
@Mock private AmqpTemplate amqpTemplate;
- @Before
+ @BeforeEach
public void setup() {
createMessageStatisticsEvent = Mockito.mock(CreateMessageStatisticsEvent.class);
when(createMessageStatisticsEvent.getEventType()).thenReturn(eventType);
when(createMessageStatisticsEvent.getPayload()).thenReturn(Optional.of(PAYLOAD));
- setInternalState(LogService.class, "LOGGER", logger);
- setField(statisticsService, FIELD_NAME_RABBIT_EXCHANGE_NAME, RABBIT_EXCHANGE_NAME);
+ ReflectionTestUtils.setField(
+ statisticsService, FIELD_NAME_RABBIT_EXCHANGE_NAME, RABBIT_EXCHANGE_NAME);
+ ReflectionTestUtils.setField(LogService.class, "LOGGER", logger);
}
@Test
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/statistics/event/CreateMessageStatisticsEventTest.java b/src/test/java/de/caritas/cob/uploadservice/api/statistics/event/CreateMessageStatisticsEventTest.java
index 47ccdc7..196264f 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/statistics/event/CreateMessageStatisticsEventTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/statistics/event/CreateMessageStatisticsEventTest.java
@@ -9,27 +9,21 @@
import de.caritas.cob.uploadservice.api.helper.CustomOffsetDateTime;
import de.caritas.cob.uploadservice.statisticsservice.generated.web.model.EventType;
import de.caritas.cob.uploadservice.statisticsservice.generated.web.model.UserRole;
-import java.time.OffsetDateTime;
-import java.util.Objects;
import java.util.Optional;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
-@RunWith(MockitoJUnitRunner.class)
+@ExtendWith(MockitoExtension.class)
public class CreateMessageStatisticsEventTest {
private CreateMessageStatisticsEvent createMessageStatisticsEvent;
- @Before
+ @BeforeEach
public void setup() throws NoSuchFieldException, IllegalAccessException {
createMessageStatisticsEvent =
- new CreateMessageStatisticsEvent(
- CONSULTANT_ID,
- UserRole.CONSULTANT,
- RC_ROOM_ID,
- true);
+ new CreateMessageStatisticsEvent(CONSULTANT_ID, UserRole.CONSULTANT, RC_ROOM_ID, true);
}
@Test
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/tenant/AccessTokenTenantResolverTest.java b/src/test/java/de/caritas/cob/uploadservice/api/tenant/AccessTokenTenantResolverTest.java
index 1b32569..abf0fd3 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/tenant/AccessTokenTenantResolverTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/tenant/AccessTokenTenantResolverTest.java
@@ -4,36 +4,49 @@
import static org.mockito.Mockito.when;
import com.google.common.collect.Maps;
+import jakarta.servlet.http.HttpServletRequest;
+import java.time.Instant;
import java.util.HashMap;
+import java.util.Map;
import java.util.Optional;
-import javax.servlet.http.HttpServletRequest;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken;
-import org.mockito.Answers;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContext;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.oauth2.jwt.Jwt;
@ExtendWith(MockitoExtension.class)
class AccessTokenTenantResolverTest {
- @Mock
- HttpServletRequest authenticatedRequest;
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- KeycloakAuthenticationToken token;
+ @InjectMocks AccessTokenTenantResolver accessTokenTenantResolver;
- @InjectMocks
- AccessTokenTenantResolver accessTokenTenantResolver;
+ @Mock SecurityContext mockSecurityContext;
+
+ @Mock Authentication mockAuthentication;
+
+ @Mock HttpServletRequest authenticatedRequest;
+
+ @AfterEach
+ public void tearDown() {
+ SecurityContextHolder.clearContext();
+ }
+
+ private void givenUserIsAuthenticated() {
+ SecurityContextHolder.setContext(mockSecurityContext);
+ when(mockSecurityContext.getAuthentication()).thenReturn(mockAuthentication);
+ Jwt jwt = buildJwt();
+ when(mockAuthentication.getPrincipal()).thenReturn(jwt);
+ }
@Test
void resolve_Should_ResolveTenantId_When_TenantIdInAccessTokenClaim() {
// given
- when(authenticatedRequest.getUserPrincipal()).thenReturn(token);
-
- HashMap claimMap = givenClaimMapContainingTenantId(1);
- when(token.getAccount().getKeycloakSecurityContext().getToken().getOtherClaims())
- .thenReturn(claimMap);
+ givenUserIsAuthenticated();
// when
Optional resolvedTenantId = accessTokenTenantResolver.resolve(authenticatedRequest);
@@ -42,9 +55,21 @@ void resolve_Should_ResolveTenantId_When_TenantIdInAccessTokenClaim() {
assertThat(resolvedTenantId).isEqualTo(Optional.of(1L));
}
+ private Jwt buildJwt() {
+ Map headers = new HashMap<>();
+ headers.put("alg", "HS256"); // Signature algorithm
+ headers.put("typ", "JWT"); // Token type
+ return new Jwt(
+ "token",
+ Instant.now(),
+ Instant.now().plusSeconds(1),
+ headers,
+ givenClaimMapContainingTenantId(1));
+ }
+
private HashMap givenClaimMapContainingTenantId(Integer tenantId) {
HashMap claimMap = Maps.newHashMap();
claimMap.put("tenantId", tenantId);
return claimMap;
}
-}
\ No newline at end of file
+}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/tenant/CustomHeaderTenantResolverTest.java b/src/test/java/de/caritas/cob/uploadservice/api/tenant/CustomHeaderTenantResolverTest.java
index c9f3fc6..d97fb0e 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/tenant/CustomHeaderTenantResolverTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/tenant/CustomHeaderTenantResolverTest.java
@@ -4,8 +4,8 @@
import static org.mockito.Mockito.when;
import de.caritas.cob.uploadservice.api.service.TenantHeaderSupplier;
+import jakarta.servlet.http.HttpServletRequest;
import java.util.Optional;
-import javax.servlet.http.HttpServletRequest;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
@@ -14,13 +14,11 @@
@ExtendWith(MockitoExtension.class)
class CustomHeaderTenantResolverTest {
- @Mock
- HttpServletRequest request;
- @Mock
- TenantHeaderSupplier tenantHeaderSupplier;
- @InjectMocks
- CustomHeaderTenantResolver customHeaderTenantResolver;
+ @Mock HttpServletRequest request;
+ @Mock TenantHeaderSupplier tenantHeaderSupplier;
+
+ @InjectMocks CustomHeaderTenantResolver customHeaderTenantResolver;
@Test
void resolve_Should_ResolveTenantId_When_SupplierCanResolveTenantId() {
@@ -39,4 +37,4 @@ void resolve_Should_NotResolveTenantId_When_SupplierCannotResolveTenantId() {
// then
assertThat(resolved).isEmpty();
}
-}
\ No newline at end of file
+}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/tenant/SubdomainTenantResolverTest.java b/src/test/java/de/caritas/cob/uploadservice/api/tenant/SubdomainTenantResolverTest.java
index 80d922f..4506fc0 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/tenant/SubdomainTenantResolverTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/tenant/SubdomainTenantResolverTest.java
@@ -5,8 +5,8 @@
import de.caritas.cob.uploadservice.api.service.TenantService;
import de.caritas.cob.uploadservice.filter.SubdomainExtractor;
+import jakarta.servlet.http.HttpServletRequest;
import java.util.Optional;
-import javax.servlet.http.HttpServletRequest;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
@@ -16,25 +16,23 @@
@ExtendWith(MockitoExtension.class)
class SubdomainTenantResolverTest {
- @Mock
- SubdomainExtractor subdomainExtractor;
+ @Mock SubdomainExtractor subdomainExtractor;
- @Mock
- TenantService tenantService;
+ @Mock TenantService tenantService;
- @Mock
- HttpServletRequest httpServletRequest;
+ @Mock HttpServletRequest httpServletRequest;
- @InjectMocks
- SubdomainTenantResolver subdomainTenantResolver;
+ @InjectMocks SubdomainTenantResolver subdomainTenantResolver;
@Test
void resolve_should_resolveTenantId_When_SubdomainCouldBeDetermined() {
// given
- when(subdomainExtractor.getCurrentSubdomain(httpServletRequest)).thenReturn(Optional.of("mucoviscidose"));
- when(tenantService.getRestrictedTenantDataBySubdomain("mucoviscidose")).thenReturn(
- new de.caritas.cob.uploadservice.tenantservice.generated.web.model.RestrictedTenantDTO()
- .id(1L));
+ when(subdomainExtractor.getCurrentSubdomain(httpServletRequest))
+ .thenReturn(Optional.of("mucoviscidose"));
+ when(tenantService.getRestrictedTenantDataBySubdomain("mucoviscidose"))
+ .thenReturn(
+ new de.caritas.cob.uploadservice.tenantservice.generated.web.model.RestrictedTenantDTO()
+ .id(1L));
// when
Optional resolve = subdomainTenantResolver.resolve(httpServletRequest);
@@ -54,5 +52,4 @@ void resolve_should_NotResolve_When_SubdomainIsEmpty() {
// then
assertThat(resolve).isEmpty();
}
-
-}
\ No newline at end of file
+}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/tenant/TechnicalUserTenantResolverTest.java b/src/test/java/de/caritas/cob/uploadservice/api/tenant/TechnicalUserTenantResolverTest.java
index 7d48f66..f958d3e 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/tenant/TechnicalUserTenantResolverTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/tenant/TechnicalUserTenantResolverTest.java
@@ -1,47 +1,57 @@
package de.caritas.cob.uploadservice.api.tenant;
-
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.when;
-import javax.servlet.http.HttpServletRequest;
-import org.assertj.core.util.Sets;
+import com.google.common.collect.Lists;
+import jakarta.servlet.http.HttpServletRequest;
+import org.assertj.core.util.Maps;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken;
-import org.keycloak.representations.AccessToken;
-import org.keycloak.representations.AccessToken.Access;
-import org.mockito.Answers;
import org.mockito.InjectMocks;
import org.mockito.Mock;
+import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
+import org.springframework.security.oauth2.jwt.Jwt;
+import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken;
@ExtendWith(MockitoExtension.class)
class TechnicalUserTenantResolverTest {
+
public static final long TECHNICAL_CONTEXT = 0L;
- @Mock
- HttpServletRequest authenticatedRequest;
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- KeycloakAuthenticationToken token;
+ @Mock HttpServletRequest authenticatedRequest;
+
+ @Mock JwtAuthenticationToken token;
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- AccessToken accessToken;
+ @Mock Jwt accessToken;
- @Mock
- Access access;
+ @InjectMocks TechnicalUserTenantResolver technicalUserTenantResolver;
- @InjectMocks
- TechnicalUserTenantResolver technicalUserTenantResolver;
+ @BeforeEach
+ public void setUp() {
+ // Configure deep stubs for token and accessToken so that nested calls work as expected.
+ token = Mockito.mock(JwtAuthenticationToken.class, Mockito.RETURNS_DEEP_STUBS);
+ accessToken = Mockito.mock(Jwt.class, Mockito.RETURNS_DEEP_STUBS);
+ }
@Test
void resolve_should_ResolveTechnicalTenantId_ForTechnicalUserRole() {
// given
when(authenticatedRequest.getUserPrincipal()).thenReturn(token);
- when(token.getAccount()
- .getKeycloakSecurityContext().getToken()).thenReturn(accessToken);
- when(accessToken.getRealmAccess().getRoles()).thenReturn(Sets.newLinkedHashSet("technical"));
+ System.out.println(
+ "Principal class: " + authenticatedRequest.getUserPrincipal().getClass().getName());
+ when(token.getToken()).thenReturn(accessToken);
+ // Simulate a JWT with a "realm_access" claim containing the role "technical"
+ when(accessToken.getClaims())
+ .thenReturn(
+ Maps.newHashMap(
+ "realm_access", Maps.newHashMap("roles", Lists.newArrayList("technical"))));
+
+ // when
var resolved = technicalUserTenantResolver.resolve(authenticatedRequest);
+
// then
assertThat(resolved).contains(TECHNICAL_CONTEXT);
}
@@ -50,11 +60,14 @@ void resolve_should_ResolveTechnicalTenantId_ForTechnicalUserRole() {
void resolve_should_NotResolveTenantId_When_NonTechnicalUserRole() {
// given
when(authenticatedRequest.getUserPrincipal()).thenReturn(token);
- when(token.getAccount()
- .getKeycloakSecurityContext().getToken()).thenReturn(accessToken);
- when(accessToken.getRealmAccess().getRoles()).thenReturn(Sets.newLinkedHashSet("another-role"));
+ when(token.getToken()).thenReturn(accessToken);
+ when(accessToken.getClaims())
+ .thenReturn(
+ Maps.newHashMap(
+ "realm_access", Maps.newHashMap("roles", Lists.newArrayList("non-technical"))));
+ // when
var resolved = technicalUserTenantResolver.resolve(authenticatedRequest);
// then
assertThat(resolved).isEmpty();
}
-}
\ No newline at end of file
+}
diff --git a/src/test/java/de/caritas/cob/uploadservice/api/tenant/TenantResolverServiceTest.java b/src/test/java/de/caritas/cob/uploadservice/api/tenant/TenantResolverServiceTest.java
index 77bf7bf..1a78d05 100644
--- a/src/test/java/de/caritas/cob/uploadservice/api/tenant/TenantResolverServiceTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/api/tenant/TenantResolverServiceTest.java
@@ -4,45 +4,46 @@
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.when;
+import jakarta.servlet.http.HttpServletRequest;
import java.util.Optional;
-import javax.servlet.http.HttpServletRequest;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken;
-import org.mockito.Answers;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.security.access.AccessDeniedException;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContext;
+import org.springframework.security.core.context.SecurityContextHolder;
@ExtendWith(MockitoExtension.class)
class TenantResolverServiceTest {
public static final long TECHNICAL_CONTEXT = 0L;
- @Mock
- SubdomainTenantResolver subdomainTenantResolver;
+ @Mock SubdomainTenantResolver subdomainTenantResolver;
- @Mock
- AccessTokenTenantResolver accessTokenTenantResolver;
+ @Mock AccessTokenTenantResolver accessTokenTenantResolver;
- @Mock
- HttpServletRequest authenticatedRequest;
+ @Mock HttpServletRequest authenticatedRequest;
- @Mock
- HttpServletRequest nonAuthenticatedRequest;
+ @Mock HttpServletRequest nonAuthenticatedRequest;
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- KeycloakAuthenticationToken token;
+ @InjectMocks TenantResolverService tenantResolverService;
- @InjectMocks
- TenantResolverService tenantResolverService;
+ @Mock private CustomHeaderTenantResolver customHeaderTenantResolver;
- @Mock
- private CustomHeaderTenantResolver customHeaderTenantResolver;
+ @Mock private TechnicalUserTenantResolver technicalUserTenantResolver;
- @Mock
- private TechnicalUserTenantResolver technicalUserTenantResolver;
+ @Mock private SecurityContext mockSecurityContext;
+
+ @Mock private Authentication mockAuthentication;
+
+ @AfterEach
+ void tearDown() {
+ SecurityContextHolder.clearContext();
+ }
@Test
void resolve_Should_ResolveFromAccessTokenForAuthenticatedUser_And_PassValidation() {
@@ -61,11 +62,14 @@ void resolve_Should_ResolveFromAccessTokenForAuthenticatedUser_And_PassValidatio
}
private void givenUserIsAuthenticated() {
- when(authenticatedRequest.getUserPrincipal()).thenReturn(token);
+ SecurityContextHolder.setContext(mockSecurityContext);
+ when(mockSecurityContext.getAuthentication()).thenReturn(mockAuthentication);
+ when(mockAuthentication.isAuthenticated()).thenReturn(true);
}
@Test
- void resolve_Should_ThrowAccessDeniedException_ForAuthenticatedUser_When_SubdomainTenantIdDoesNotMatchTenantIdFromToken() {
+ void
+ resolve_Should_ThrowAccessDeniedException_ForAuthenticatedUser_When_SubdomainTenantIdDoesNotMatchTenantIdFromToken() {
// given
givenUserIsAuthenticated();
@@ -75,26 +79,30 @@ void resolve_Should_ThrowAccessDeniedException_ForAuthenticatedUser_When_Subdoma
when(subdomainTenantResolver.resolve(authenticatedRequest)).thenReturn(Optional.of(2L));
// when, then
- assertThrows(AccessDeniedException.class, () -> tenantResolverService.resolve(authenticatedRequest));
+ assertThrows(
+ AccessDeniedException.class, () -> tenantResolverService.resolve(authenticatedRequest));
}
@Test
- void resolve_Should_ThrowAccessDeniedExceptionForAuthenticatedUser_IfAccessTokenResolverCannotResolveTenant() {
+ void
+ resolve_Should_ThrowAccessDeniedExceptionForAuthenticatedUser_IfAccessTokenResolverCannotResolveTenant() {
// given
givenUserIsAuthenticated();
when(accessTokenTenantResolver.canResolve(authenticatedRequest)).thenReturn(false);
// when, then
- assertThrows(AccessDeniedException.class, () -> tenantResolverService.resolve(authenticatedRequest));
+ assertThrows(
+ AccessDeniedException.class, () -> tenantResolverService.resolve(authenticatedRequest));
}
@Test
- void resolve_Should_ThrowAccessDeniedExceptionForNotAuthenticatedUser_IfSubdomainCouldNotBeDetermined() {
+ void
+ resolve_Should_ThrowAccessDeniedExceptionForNotAuthenticatedUser_IfSubdomainCouldNotBeDetermined() {
// given
when(subdomainTenantResolver.canResolve(nonAuthenticatedRequest)).thenReturn(false);
// when, then
- assertThrows(AccessDeniedException.class,
- () -> tenantResolverService.resolve(nonAuthenticatedRequest));
+ assertThrows(
+ AccessDeniedException.class, () -> tenantResolverService.resolve(nonAuthenticatedRequest));
}
@Test
@@ -113,7 +121,8 @@ void resolve_Should_ResolveTenantId_ForTechnicalUserRole() {
// given
givenUserIsAuthenticated();
when(technicalUserTenantResolver.canResolve(authenticatedRequest)).thenReturn(true);
- when(technicalUserTenantResolver.resolve(authenticatedRequest)).thenReturn(Optional.of(TECHNICAL_CONTEXT));
+ when(technicalUserTenantResolver.resolve(authenticatedRequest))
+ .thenReturn(Optional.of(TECHNICAL_CONTEXT));
Long resolved = tenantResolverService.resolve(authenticatedRequest);
// then
@@ -132,5 +141,4 @@ void resolve_Should_ResolveTenantId_FromHeader() {
// then
assertThat(resolved).isEqualTo(2L);
}
-
-}
\ No newline at end of file
+}
diff --git a/src/test/java/de/caritas/cob/uploadservice/filter/HttpTenantFilterTest.java b/src/test/java/de/caritas/cob/uploadservice/filter/HttpTenantFilterTest.java
index a4000f2..c0369be 100644
--- a/src/test/java/de/caritas/cob/uploadservice/filter/HttpTenantFilterTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/filter/HttpTenantFilterTest.java
@@ -1,11 +1,11 @@
package de.caritas.cob.uploadservice.filter;
import de.caritas.cob.uploadservice.api.tenant.TenantResolverService;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
diff --git a/src/test/java/de/caritas/cob/uploadservice/filter/SubdomainExtractorTest.java b/src/test/java/de/caritas/cob/uploadservice/filter/SubdomainExtractorTest.java
index 5df1ac9..c4310e5 100644
--- a/src/test/java/de/caritas/cob/uploadservice/filter/SubdomainExtractorTest.java
+++ b/src/test/java/de/caritas/cob/uploadservice/filter/SubdomainExtractorTest.java
@@ -1,11 +1,10 @@
package de.caritas.cob.uploadservice.filter;
-
import static java.util.Optional.of;
+import jakarta.servlet.http.HttpServletRequest;
import java.net.URISyntaxException;
import java.util.Enumeration;
-import javax.servlet.http.HttpServletRequest;
import org.assertj.core.api.AssertionsForClassTypes;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -19,21 +18,18 @@ class SubdomainExtractorTest {
private static final String MUCOVISCIDOSE = "mucoviscidose";
private static final String ONLINBEBERATUNG_DE = ".onlineberatung.de";
- @Mock
- HttpServletRequest request;
+ @Mock HttpServletRequest request;
- @Mock
- Enumeration headerNames;
+ @Mock Enumeration headerNames;
- @InjectMocks
- SubdomainExtractor subdomainExtractor;
+ @InjectMocks SubdomainExtractor subdomainExtractor;
@Test
void resolveSubdomain_Should_resolveSubdomain() throws URISyntaxException {
// given
String url = MUCOVISCIDOSE + ONLINBEBERATUNG_DE;
// when, then
- AssertionsForClassTypes.assertThat(subdomainExtractor.getSubdomain(url)).isEqualTo(of("mucoviscidose"));
+ AssertionsForClassTypes.assertThat(subdomainExtractor.getSubdomain(url))
+ .isEqualTo(of("mucoviscidose"));
}
-
-}
\ No newline at end of file
+}
diff --git a/src/test/java/de/caritas/cob/uploadservice/helper/FieldConstants.java b/src/test/java/de/caritas/cob/uploadservice/helper/FieldConstants.java
index 3e482e9..fa92009 100644
--- a/src/test/java/de/caritas/cob/uploadservice/helper/FieldConstants.java
+++ b/src/test/java/de/caritas/cob/uploadservice/helper/FieldConstants.java
@@ -2,10 +2,9 @@
public class FieldConstants {
- /**
- * RocketChatService
- */
+ /** RocketChatService */
public static final String FIELD_NAME_RC_POST_GROUP_MESSAGES_READ = "rcPostGroupMessagesRead";
+
public static final String FIELD_VALUE_RC_POST_GROUP_MESSAGES_READ = "/api/v1/subscriptions.read";
public static final String FIELD_NAME_RC_HEADER_AUTH_TOKEN = "rcHeaderAuthToken";
public static final String FIELD_NAME_RC_HEADER_USER_ID = "rcHeaderUserId";
@@ -13,10 +12,9 @@ public class FieldConstants {
public static final String FIELD_VALUE_RC_ROOMS_UPLOAD_URL =
"http://localhost/api/v1/rooms.upload";
- /**
- * ServiceHelper
- */
+ /** ServiceHelper */
public static final String FIELD_NAME_CSRF_TOKEN_HEADER_PROPERTY = "csrfHeaderProperty";
+
public static final String FIELD_NAME_CSRF_TOKEN_COOKIE_PROPERTY = "csrfCookieProperty";
public static final String CSRF_TOKEN_HEADER_VALUE = "X-CSRF-TOKEN";
public static final String CSRF_TOKEN_COOKIE_VALUE = "CSRF-TOKEN";
diff --git a/src/test/java/de/caritas/cob/uploadservice/helper/TestConstants.java b/src/test/java/de/caritas/cob/uploadservice/helper/TestConstants.java
index 3ada1ab..4343caa 100644
--- a/src/test/java/de/caritas/cob/uploadservice/helper/TestConstants.java
+++ b/src/test/java/de/caritas/cob/uploadservice/helper/TestConstants.java
@@ -47,11 +47,13 @@ public class TestConstants {
public static final String RC_TMID = "jkadsjk833";
public static final String RC_TMID_WITH_HTML = "jkadsjk833";
public static final String RC_UPLOAD_ERROR_RESPONSE_BODY =
- "{\n"
- + " \"success\": false,\n"
- + " \"error\": \"Invalid room [error-invalid-room]\",\n"
- + " \"errorType\": \"error-invalid-room\"\n"
- + "}";
+ """
+ {
+ "success": false,
+ "error": "Invalid room [error-invalid-room]",
+ "errorType": "error-invalid-room"
+ }\
+ """;
public static final String RC_TOKEN_HEADER_PARAMETER_NAME = "RCToken";
public static final String RC_USER_ID_HEADER_PARAMETER_NAME = "RCUserId";
public static final String RC_TOKEN = "2fUGwNSqvpiEDTsMJQ54XeYdx0XzzCWdu0PP0lXFNu8";
@@ -155,8 +157,10 @@ public class TestConstants {
public static final String FORM_PARAM_FILE_HEADER_EMPTY = "";
public static final String FORM_PARAM_TYPE = "t";
public static final String FORM_PARAM_TYPE_EMPTY = "";
- public static final String FILE_NAME_UNSANITIZED = "äöüßÄÖÜt!\"e...~´´`::.jpg;.jpg;st-+_#$1.jpg.doc";
- public static final String FILE_NAME_UNSANITIZED_WITH_SPACES = " äöüßÄÖÜt!\"e ...~´´`::.jpg;.jpg;st-+_#$1.jpg.doc ";
+ public static final String FILE_NAME_UNSANITIZED =
+ "äöüßÄÖÜt!\"e...~´´`::.jpg;.jpg;st-+_#$1.jpg.doc";
+ public static final String FILE_NAME_UNSANITIZED_WITH_SPACES =
+ " äöüßÄÖÜt!\"e ...~´´`::.jpg;.jpg;st-+_#$1.jpg.doc ";
public static final String FILE_NAME_SANITIZED = "äöüßÄÖÜtejpgjpgst-+#1jpg.doc";
public static final String FILE_NAME_SANITIZED_WITH_SPACES = "äöüßÄÖÜte jpgjpgst-+#1jpg.doc";
public static final String FILE_NAME_ONLY_SPECIAL_CHARS = "!...~´´`.;;;§%%%_$.jpg";
@@ -164,6 +168,6 @@ public class TestConstants {
public static final MockMultipartFile UPLOAD_FILE =
new MockMultipartFile("uploadFile", "uploadFile.txt", "text/plain", "content".getBytes());
public static final MockMultipartFile UNSANITIZED_UPLOAD_FILE =
- new MockMultipartFile("uploadFile", FILE_NAME_UNSANITIZED, "text/plain",
- "content".getBytes());
+ new MockMultipartFile(
+ "uploadFile", FILE_NAME_UNSANITIZED, "text/plain", "content".getBytes());
}
diff --git a/src/test/java/de/caritas/cob/uploadservice/testconfig/RabbitMqTestConfig.java b/src/test/java/de/caritas/cob/uploadservice/testconfig/RabbitMqTestConfig.java
index e254ca9..c11169d 100644
--- a/src/test/java/de/caritas/cob/uploadservice/testconfig/RabbitMqTestConfig.java
+++ b/src/test/java/de/caritas/cob/uploadservice/testconfig/RabbitMqTestConfig.java
@@ -18,7 +18,8 @@ public class RabbitMqTestConfig {
private static final String QUEUE_PREFIX = "statistics.";
public static final String QUEUE_NAME_CREATE_MESSAGE = QUEUE_PREFIX + EventType.CREATE_MESSAGE;
- @Bean ConnectionFactory connectionFactory() {
+ @Bean
+ ConnectionFactory connectionFactory() {
return new CachingConnectionFactory(new MockConnectionFactory());
}
@@ -31,9 +32,8 @@ public Declarables topicBindings() {
return new Declarables(
assignSessionStatisticEventQueue,
topicExchange,
- BindingBuilder
- .bind(assignSessionStatisticEventQueue)
- .to(topicExchange).with(
- EventType.CREATE_MESSAGE));
+ BindingBuilder.bind(assignSessionStatisticEventQueue)
+ .to(topicExchange)
+ .with(EventType.CREATE_MESSAGE));
}
}