diff --git a/.gitignore b/.gitignore index 14fa51a730e6ca3c26ac75cf6d1b35d0bef8187b..09127ca386abb011a63d31df83aca28ae68bc207 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ bin/ .sts4-cache ### IntelliJ IDEA ### +.idea *.iws *.iml *.ipr diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index b4208d1f50f3d62744b4eb594d81fb029e332ed4..0000000000000000000000000000000000000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml -/sonarlint/ diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml deleted file mode 100644 index c7b7b708dab82c08c005e3bdd77c6b202f9676d5..0000000000000000000000000000000000000000 --- a/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,75 +0,0 @@ -<component name="ProjectCodeStyleConfiguration"> - <code_scheme name="Project" version="173"> - <JavaCodeStyleSettings> - <option name="GENERATE_FINAL_PARAMETERS" value="true" /> - <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" /> - <option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="1" /> - <option name="IMPORT_LAYOUT_TABLE"> - <value> - <package name="" withSubpackages="true" static="true" /> - <emptyLine /> - <package name="java" withSubpackages="true" static="false" /> - <emptyLine /> - <package name="jakarta" withSubpackages="true" static="false" /> - <package name="javax" withSubpackages="true" static="false" /> - <emptyLine /> - <package name="org" withSubpackages="true" static="false" /> - <emptyLine /> - <package name="com" withSubpackages="true" static="false" /> - <emptyLine /> - <package name="" withSubpackages="true" static="false" /> - </value> - </option> - <option name="ALIGN_MULTILINE_RECORDS" value="false" /> - <option name="ALIGN_TYPES_IN_MULTI_CATCH" value="false" /> - <option name="JD_P_AT_EMPTY_LINES" value="false" /> - <option name="JD_DO_NOT_WRAP_ONE_LINE_COMMENTS" value="true" /> - </JavaCodeStyleSettings> - <JetCodeStyleSettings> - <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" /> - </JetCodeStyleSettings> - <codeStyleSettings language="JAVA"> - <option name="RIGHT_MARGIN" value="150" /> - <option name="KEEP_FIRST_COLUMN_COMMENT" value="false" /> - <option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" /> - <option name="KEEP_BLANK_LINES_IN_DECLARATIONS" value="1" /> - <option name="KEEP_BLANK_LINES_IN_CODE" value="1" /> - <option name="KEEP_BLANK_LINES_BETWEEN_PACKAGE_DECLARATION_AND_HEADER" value="1" /> - <option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="1" /> - <option name="INDENT_CASE_FROM_SWITCH" value="false" /> - <option name="ALIGN_MULTILINE_PARAMETERS" value="false" /> - <option name="ALIGN_MULTILINE_RESOURCES" value="false" /> - <option name="ALIGN_MULTILINE_FOR" value="false" /> - <option name="SPACE_WITHIN_ARRAY_INITIALIZER_BRACES" value="true" /> - <option name="SPACE_BEFORE_ARRAY_INITIALIZER_LBRACE" value="true" /> - <option name="CALL_PARAMETERS_WRAP" value="1" /> - <option name="METHOD_PARAMETERS_WRAP" value="1" /> - <option name="RESOURCE_LIST_WRAP" value="5" /> - <option name="EXTENDS_LIST_WRAP" value="1" /> - <option name="THROWS_LIST_WRAP" value="1" /> - <option name="EXTENDS_KEYWORD_WRAP" value="1" /> - <option name="THROWS_KEYWORD_WRAP" value="1" /> - <option name="METHOD_CALL_CHAIN_WRAP" value="1" /> - <option name="BINARY_OPERATION_WRAP" value="1" /> - <option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" /> - <option name="TERNARY_OPERATION_WRAP" value="5" /> - <option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" /> - <option name="ARRAY_INITIALIZER_WRAP" value="1" /> - <option name="WRAP_COMMENTS" value="true" /> - <option name="ASSERT_STATEMENT_COLON_ON_NEXT_LINE" value="true" /> - <option name="ENUM_CONSTANTS_WRAP" value="1" /> - <indentOptions> - <option name="CONTINUATION_INDENT_SIZE" value="2" /> - <option name="USE_TAB_CHARACTER" value="true" /> - </indentOptions> - </codeStyleSettings> - <codeStyleSettings language="XML"> - <indentOptions> - <option name="USE_TAB_CHARACTER" value="true" /> - </indentOptions> - </codeStyleSettings> - <codeStyleSettings language="kotlin"> - <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" /> - </codeStyleSettings> - </code_scheme> -</component> \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml deleted file mode 100644 index 79ee123c2b23e069e35ed634d687e17f731cc702..0000000000000000000000000000000000000000 --- a/.idea/codeStyles/codeStyleConfig.xml +++ /dev/null @@ -1,5 +0,0 @@ -<component name="ProjectCodeStyleConfiguration"> - <state> - <option name="USE_PER_PROJECT_SETTINGS" value="true" /> - </state> -</component> \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index a0654ae09e17f0f5fff33dc7aff32511e7628ad8..0000000000000000000000000000000000000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,39 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="CompilerConfiguration"> - <annotationProcessing> - <profile default="true" name="Default" enabled="true" /> - <profile name="Gradle Imported" enabled="true"> - <outputRelativeToContentRoot value="true" /> - <processorPath useClasspath="false"> - <entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.18.30/f195ee86e6c896ea47a1d39defbe20eb59cd149d/lombok-1.18.30.jar" /> - </processorPath> - </profile> - <profile name="Maven default annotation processors profile" enabled="true"> - <sourceOutputDir name="target/generated-sources/annotations" /> - <sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> - <outputRelativeToContentRoot value="true" /> - </profile> - <profile name="Annotation profile for OZG-Cloud Antragsraum" enabled="true"> - <sourceOutputDir name="target/generated-sources/annotations" /> - <sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> - <outputRelativeToContentRoot value="true" /> - <processorPath useClasspath="false"> - <entry name="$MAVEN_REPOSITORY$/org/projectlombok/lombok/1.18.34/lombok-1.18.34.jar" /> - <entry name="$MAVEN_REPOSITORY$/org/mapstruct/mapstruct-processor/1.6.0/mapstruct-processor-1.6.0.jar" /> - <entry name="$MAVEN_REPOSITORY$/org/mapstruct/mapstruct/1.6.0/mapstruct-1.6.0.jar" /> - <entry name="$MAVEN_REPOSITORY$/org/projectlombok/lombok/1.18.34/lombok-1.18.34.jar" /> - <entry name="$MAVEN_REPOSITORY$/org/mapstruct/mapstruct-processor/1.6.0/mapstruct-processor-1.6.0.jar" /> - <entry name="$MAVEN_REPOSITORY$/org/mapstruct/mapstruct/1.6.0/mapstruct-1.6.0.jar" /> - </processorPath> - <module name="antragsraum-server" /> - </profile> - </annotationProcessing> - <bytecodeTargetLevel target="21" /> - </component> - <component name="JavacSettings"> - <option name="ADDITIONAL_OPTIONS_OVERRIDE"> - <module name="antragsraum-server" options="-parameters -Amapstruct.defaultComponentModel=spring -Amapstruct.unmappedTargetPolicy=WARN" /> - </option> - </component> -</project> \ No newline at end of file diff --git a/.idea/copyright/Eupl1_2.xml b/.idea/copyright/Eupl1_2.xml deleted file mode 100644 index 8b51bb2301fbdd90e6ee5801f4f7713a2a0dac5a..0000000000000000000000000000000000000000 --- a/.idea/copyright/Eupl1_2.xml +++ /dev/null @@ -1,6 +0,0 @@ -<component name="CopyrightManager"> - <copyright> - <option name="notice" value="Copyright (c) &#36;originalComment.match("Copyright \(c\) (\d+)", 1, "-", "&#36;today.year")&#36;today.year. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. Lizenziert unter der EUPL, Version 1.2 oder - sobald diese von der Europäischen Kommission genehmigt wurden - Folgeversionen der EUPL ("Lizenz"); Sie dürfen dieses Werk ausschließlich gemäß dieser Lizenz nutzen. Eine Kopie der Lizenz finden Sie hier: https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 Sofern nicht durch anwendbare Rechtsvorschriften gefordert oder in schriftlicher Form vereinbart, wird die unter der Lizenz verbreitete Software "so wie sie ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - ausdrücklich oder stillschweigend - verbreitet. Die sprachspezifischen Genehmigungen und Beschränkungen unter der Lizenz sind dem Lizenztext zu entnehmen. " /> - <option name="myName" value="Eupl1.2" /> - </copyright> -</component> \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml deleted file mode 100644 index 4c8996918f5c5ce3236fb74f10a56f1ba8bf84fa..0000000000000000000000000000000000000000 --- a/.idea/copyright/profiles_settings.xml +++ /dev/null @@ -1,7 +0,0 @@ -<component name="CopyrightManager"> - <settings> - <module2copyright> - <element module="Project Files" copyright="Eupl1.2" /> - </module2copyright> - </settings> -</component> \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index 0dabbbf7bffc5e2c9d4af51b7ab52fb15673d093..0000000000000000000000000000000000000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="Encoding" defaultCharsetForPropertiesFiles="UTF-8"> - <file url="file://$PROJECT_DIR$/server/src/main/java" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/server/target/generated-sources/openapi" charset="UTF-8" /> - </component> -</project> \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml deleted file mode 100644 index 3e3960b71eaef30230fcaeef29ebc18216501448..0000000000000000000000000000000000000000 --- a/.idea/gradle.xml +++ /dev/null @@ -1,4 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="GradleMigrationSettings" migrationVersion="1" /> -</project> \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml deleted file mode 100644 index 2f42e537a699dc92219bd00691e0e37d4200b562..0000000000000000000000000000000000000000 --- a/.idea/jarRepositories.xml +++ /dev/null @@ -1,85 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="RemoteRepositoriesConfiguration"> - <remote-repository> - <option name="id" value="shibboleth" /> - <option name="name" value="Shibboleth Maven Repo" /> - <option name="url" value="https://build.shibboleth.net/nexus/content/repositories/releases" /> - </remote-repository> - <remote-repository> - <option name="id" value="central" /> - <option name="name" value="Central Repository" /> - <option name="url" value="https://repo.maven.apache.org/maven2" /> - </remote-repository> - <remote-repository> - <option name="id" value="shibboleth-releases" /> - <option name="name" value="Shibboleth Releases Repository" /> - <option name="url" value="https://build.shibboleth.net/maven/releases/" /> - </remote-repository> - <remote-repository> - <option name="id" value="central" /> - <option name="name" value="Maven Central" /> - <option name="url" value="https://repo1.maven.org/maven2/" /> - </remote-repository> - <remote-repository> - <option name="id" value="central" /> - <option name="name" value="Maven Central repository" /> - <option name="url" value="https://repo1.maven.org/maven2" /> - </remote-repository> - <remote-repository> - <option name="id" value="nexus" /> - <option name="name" value="Ozg nexus" /> - <option name="url" value="https://nexus.ozg-sh.de/repository/ozg-ozg-releases" /> - </remote-repository> - <remote-repository> - <option name="id" value="maven" /> - <option name="name" value="maven" /> - <option name="url" value="https://artifacts.mgm-tp.com/artifactory/maven-repos" /> - </remote-repository> - <remote-repository> - <option name="id" value="maven2" /> - <option name="name" value="maven2" /> - <option name="url" value="https://build.shibboleth.net/nexus/content/repositories/releases/" /> - </remote-repository> - <remote-repository> - <option name="id" value="MavenRepo" /> - <option name="name" value="MavenRepo" /> - <option name="url" value="https://repo.maven.apache.org/maven2/" /> - </remote-repository> - <remote-repository> - <option name="id" value="project-repository" /> - <option name="name" value="project-repository" /> - <option name="url" value="file://$PROJECT_DIR$/server/tmpRepo" /> - </remote-repository> - <remote-repository> - <option name="id" value="jboss.community" /> - <option name="name" value="JBoss Community repository" /> - <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" /> - </remote-repository> - <remote-repository> - <option name="id" value="ozg-snapshots-nexus" /> - <option name="name" value="ozg-snapshots" /> - <option name="url" value="https://nexus.ozg-sh.de/repository/ozg-snapshots/" /> - </remote-repository> - <remote-repository> - <option name="id" value="local-repo" /> - <option name="name" value="local-repo" /> - <option name="url" value="file://$PROJECT_DIR$/server/lib" /> - </remote-repository> - <remote-repository> - <option name="id" value="ozg-nexus" /> - <option name="name" value="ozg-releases" /> - <option name="url" value="https://nexus.ozg-sh.de/repository/ozg-releases/" /> - </remote-repository> - <remote-repository> - <option name="id" value="shibboleth-thirdparty" /> - <option name="name" value="Shibboleth Thirdparty Repository" /> - <option name="url" value="https://build.shibboleth.net/maven/thirdparty/" /> - </remote-repository> - <remote-repository> - <option name="id" value="nexus" /> - <option name="name" value="Ozg nexus" /> - <option name="url" value="https://nexus.ozg-sh.de/repository/ozg-releases" /> - </remote-repository> - </component> -</project> \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 290d6c7b10d9725454ff8e20c97a70786d11f5eb..0000000000000000000000000000000000000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="ExternalStorageConfigurationManager" enabled="true" /> - <component name="FrameworkDetectionExcludesConfiguration"> - <file type="web" url="file://$PROJECT_DIR$" /> - </component> - <component name="MavenProjectsManager"> - <option name="originalFiles"> - <list> - <option value="$PROJECT_DIR$/pom.xml" /> - </list> - </option> - </component> - <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK" /> -</project> \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index b8776654896d4d1276d75b8ea0891a1231fab966..0000000000000000000000000000000000000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="ProjectModuleManager"> - <modules> - <module fileurl="file://$PROJECT_DIR$/.idea/modules/ozg-antragsraum.iml" filepath="$PROJECT_DIR$/.idea/modules/ozg-antragsraum.iml" /> - <module fileurl="file://$PROJECT_DIR$/.idea/modules/ozg-antragsraum.integrationTest.iml" filepath="$PROJECT_DIR$/.idea/modules/ozg-antragsraum.integrationTest.iml" /> - <module fileurl="file://$PROJECT_DIR$/.idea/modules/ozg-antragsraum.main.iml" filepath="$PROJECT_DIR$/.idea/modules/ozg-antragsraum.main.iml" /> - <module fileurl="file://$PROJECT_DIR$/.idea/modules/ozg-antragsraum-server/ozg-antragsraum.ozg-antragsraum-server.iml" filepath="$PROJECT_DIR$/.idea/modules/ozg-antragsraum-server/ozg-antragsraum.ozg-antragsraum-server.iml" /> - <module fileurl="file://$PROJECT_DIR$/.idea/modules/ozg-antragsraum-server/ozg-antragsraum.ozg-antragsraum-server.integrationTest.iml" filepath="$PROJECT_DIR$/.idea/modules/ozg-antragsraum-server/ozg-antragsraum.ozg-antragsraum-server.integrationTest.iml" /> - <module fileurl="file://$PROJECT_DIR$/.idea/modules/ozg-antragsraum-server/ozg-antragsraum.ozg-antragsraum-server.main.iml" filepath="$PROJECT_DIR$/.idea/modules/ozg-antragsraum-server/ozg-antragsraum.ozg-antragsraum-server.main.iml" /> - <module fileurl="file://$PROJECT_DIR$/.idea/modules/ozg-antragsraum-server/ozg-antragsraum.ozg-antragsraum-server.test.iml" filepath="$PROJECT_DIR$/.idea/modules/ozg-antragsraum-server/ozg-antragsraum.ozg-antragsraum-server.test.iml" /> - <module fileurl="file://$PROJECT_DIR$/.idea/modules/keycloak/ozg-antragsraum.ozg-keycloak.iml" filepath="$PROJECT_DIR$/.idea/modules/keycloak/ozg-antragsraum.ozg-keycloak.iml" /> - <module fileurl="file://$PROJECT_DIR$/.idea/modules/ozg-antragsraum.test.iml" filepath="$PROJECT_DIR$/.idea/modules/ozg-antragsraum.test.iml" /> - </modules> - </component> -</project> \ No newline at end of file diff --git a/.idea/sonarlint.xml b/.idea/sonarlint.xml deleted file mode 100644 index 0e83d2e68b218e8d268a339d9812aec0b616780e..0000000000000000000000000000000000000000 --- a/.idea/sonarlint.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="SonarLintProjectSettings"> - <option name="bindingEnabled" value="true" /> - <option name="projectKey" value="de.ozgcloud:antragsraum" /> - <option name="serverId" value="ozg-cloud" /> - </component> -</project> \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml deleted file mode 100644 index 2b63946d5b31084bbb7dda418ceb3d75eb686373..0000000000000000000000000000000000000000 --- a/.idea/uiDesigner.xml +++ /dev/null @@ -1,124 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="Palette2"> - <group name="Swing"> - <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false"> - <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" /> - </item> - <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false"> - <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" /> - </item> - <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false"> - <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" /> - </item> - <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true"> - <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" /> - </item> - <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false"> - <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" /> - <initial-values> - <property name="text" value="Button" /> - </initial-values> - </item> - <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false"> - <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> - <initial-values> - <property name="text" value="RadioButton" /> - </initial-values> - </item> - <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false"> - <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> - <initial-values> - <property name="text" value="CheckBox" /> - </initial-values> - </item> - <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false"> - <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" /> - <initial-values> - <property name="text" value="Label" /> - </initial-values> - </item> - <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> - <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> - <preferred-size width="150" height="-1" /> - </default-constraints> - </item> - <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> - <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> - <preferred-size width="150" height="-1" /> - </default-constraints> - </item> - <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> - <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> - <preferred-size width="150" height="-1" /> - </default-constraints> - </item> - <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true"> - <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> - <preferred-size width="150" height="50" /> - </default-constraints> - </item> - <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true"> - <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> - <preferred-size width="150" height="50" /> - </default-constraints> - </item> - <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true"> - <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> - <preferred-size width="150" height="50" /> - </default-constraints> - </item> - <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true"> - <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" /> - </item> - <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false"> - <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> - <preferred-size width="150" height="50" /> - </default-constraints> - </item> - <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false"> - <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3"> - <preferred-size width="150" height="50" /> - </default-constraints> - </item> - <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false"> - <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> - <preferred-size width="150" height="50" /> - </default-constraints> - </item> - <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false"> - <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> - <preferred-size width="200" height="200" /> - </default-constraints> - </item> - <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false"> - <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> - <preferred-size width="200" height="200" /> - </default-constraints> - </item> - <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true"> - <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> - </item> - <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false"> - <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> - </item> - <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false"> - <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" /> - </item> - <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false"> - <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" /> - </item> - <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false"> - <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1"> - <preferred-size width="-1" height="20" /> - </default-constraints> - </item> - <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false"> - <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" /> - </item> - <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false"> - <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" /> - </item> - </group> - </component> -</project> \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1ddfbbc029bcab630581847471d7f238ec53..0000000000000000000000000000000000000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="VcsDirectoryMappings"> - <mapping directory="" vcs="Git" /> - </component> -</project> \ No newline at end of file diff --git a/server/src/main/java/de/ozgcloud/antragsraum/AntragsRaumApplication.java b/server/src/main/java/de/ozgcloud/antragsraum/AntragsRaumApplication.java index d8ff86da4ecf385df4be32a08c1849600056d916..6a3c79bc2ce622697eaf11da6ee6efcb4b933644 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/AntragsRaumApplication.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/AntragsRaumApplication.java @@ -40,6 +40,7 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc; @EnableScheduling @EnableAspectJAutoProxy(proxyTargetClass = true) public class AntragsRaumApplication { + public static void main(String[] args) { SpringApplication.run(AntragsRaumApplication.class, args); } @@ -54,4 +55,5 @@ public class AntragsRaumApplication { return customizer -> customizer.setTaskDecorator(DelegatingSecurityContextRunnable::new); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/OpenApiConfiguration.java b/server/src/main/java/de/ozgcloud/antragsraum/OpenApiConfiguration.java index db6792078563c84453afc413d8bc05be8dafb53d..5d680cd7700bca22cee22b6f97bc98117f21777e 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/OpenApiConfiguration.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/OpenApiConfiguration.java @@ -22,15 +22,17 @@ package de.ozgcloud.antragsraum; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; + import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; import io.swagger.v3.oas.annotations.info.Info; import io.swagger.v3.oas.annotations.security.SecurityScheme; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @OpenAPIDefinition(info = @Info(title = "Antragsraum", - description = "Backend for loading messages from the OZG-Cloud backend, sending replies and uploading files", version = "v1")) + description = "Backend for loading messages from the OZG-Cloud backend, sending replies and uploading files", version = "v1")) @SecurityScheme(name = "security_auth", type = SecuritySchemeType.HTTP, bearerFormat = "JWT", scheme = "bearer") @ConditionalOnProperty(name = "ozgcloud.mock.auth") public class OpenApiConfiguration { + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/Root.java b/server/src/main/java/de/ozgcloud/antragsraum/Root.java index 0ccab0061e9408b70ef24aef63e4e2c716c74f85..181bc6aedbab9245aa91ae8df4cf319b9818b900 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/Root.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/Root.java @@ -20,12 +20,20 @@ package de.ozgcloud.antragsraum; +import java.time.Instant; + import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.Builder; -import java.time.Instant; +import lombok.Builder; @Builder @JsonInclude(JsonInclude.Include.NON_NULL) -public record Root(String version, Instant buildTime, String javaVersion, String name, boolean isProduction) { +public record Root( + String version, + Instant buildTime, + String javaVersion, + String name, + boolean isProduction +) { + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/RootController.java b/server/src/main/java/de/ozgcloud/antragsraum/RootController.java index 0b0ddff8e6512b46f8ce8142d886d925efafe3ff..92742853f72a2927f908d8b21d29c13d2b39317e 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/RootController.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/RootController.java @@ -33,7 +33,9 @@ import lombok.RequiredArgsConstructor; @RestController(RootController.PATH) @RequiredArgsConstructor public class RootController { - static final String PATH = "/"; + + static final String PATH = "/"; // NOSONAR + private static final String JAVA_VERSION_PROPERTY_NAME = "java.version"; private final BuildProperties buildProperties; @Value("${ozgcloud.stage.production:#{true}}") @@ -45,10 +47,11 @@ public class RootController { .version(isNull(buildProperties) ? null : buildProperties.getVersion()) .buildTime(isNull(buildProperties) ? null : buildProperties.getTime()) .name(isNull(buildProperties) ? null : buildProperties.getName()) - .javaVersion(System.getProperty("java.version")) + .javaVersion(System.getProperty(JAVA_VERSION_PROPERTY_NAME)) .isProduction(production) .build(); return ResponseEntity.ok(root); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/SecurityConfiguration.java b/server/src/main/java/de/ozgcloud/antragsraum/SecurityConfiguration.java index 77cf8627f99d762fed6a68edd572fd767a0efc83..3a504feba31e708d0fb22ee6227f5b066ad37b1a 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/SecurityConfiguration.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/SecurityConfiguration.java @@ -53,6 +53,7 @@ import lombok.RequiredArgsConstructor; @EnableWebSecurity @RequiredArgsConstructor public class SecurityConfiguration { + private static final String OPTIONS = "OPTIONS"; private static final String GET = "GET"; private static final String POLICY_DIRECTIVES = "object-src 'none'; child-src 'self'; frame-ancestors 'none'; base-uri 'none'; upgrade-insecure-requests; require-trusted-types-for 'script'"; @@ -137,4 +138,5 @@ public class SecurityConfiguration { } }; } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/SwaggerCorsConfiguration.java b/server/src/main/java/de/ozgcloud/antragsraum/SwaggerCorsConfiguration.java index 46501cbc10a5e242d516eb5c23529d2feb0bac4f..facdf245e341ca04f73c39322c7a6afb5518aca2 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/SwaggerCorsConfiguration.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/SwaggerCorsConfiguration.java @@ -28,20 +28,21 @@ import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; - @Configuration public class SwaggerCorsConfiguration { - @Bean - public CorsConfigurationSource corsFilter() { - // Allow anyone and anything access. Probably ok for Swagger spec - var config = new CorsConfiguration(); - config.setAllowCredentials(true); - config.addAllowedOrigin("*"); - config.addAllowedHeader("*"); - config.addAllowedMethod("*"); - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - source.registerCorsConfiguration("/**", config); - return source; - } + @Bean + public CorsConfigurationSource corsFilter() { + // Allow anyone and anything access. Probably ok for Swagger spec + var config = new CorsConfiguration(); + config.setAllowCredentials(true); + config.addAllowedOrigin("*"); + config.addAllowedHeader("*"); + config.addAllowedMethod("*"); + + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", config); + return source; + } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/WebConfiguration.java b/server/src/main/java/de/ozgcloud/antragsraum/WebConfiguration.java index e34e7bf78e42aeb5d1976dd7513916cf52c72615..848c43d2d5cd9a7d3ee0849e613627da617dbc91 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/WebConfiguration.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/WebConfiguration.java @@ -34,6 +34,7 @@ import org.springframework.web.client.RestTemplate; @Configuration public class WebConfiguration { + public static final String INFO_MANAGER_REST_CLIENT = "infomanagerRestClient"; public static final String NACHRICHT_REST_CLIENT = "nachrichtRestClient"; public static final String X_OZG_CLIENT = "X-OZG-CLIENT"; @@ -70,4 +71,5 @@ public class WebConfiguration { .defaultHeader(X_OZG_CLIENT, ANTRAGSRAUM) .build(); } + } \ No newline at end of file diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileController.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileController.java index 850d16c480a8d57553c3109da01fc9bd2598d1d3..bbe62e4392b2e29ae302db55f225e7c3a2e441db 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileController.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileController.java @@ -55,6 +55,7 @@ import lombok.extern.log4j.Log4j2; @RequiredArgsConstructor @SecurityRequirement(name = "security_auth") public class FileController { + static final String PATH = "/api/file/"; // NOSONAR static final String PATH_PATTERN = PATH + "%s/%s"; @@ -127,4 +128,5 @@ public class FileController { throw new InvalidFileTypeException(file.getName()); } } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileIdentificationData.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileIdentificationData.java index f7a44c19cd3a0fae91e5d34ae353929c39b1f5b5..30522a261ac6b97af7094f92f4970cfa847f349d 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileIdentificationData.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileIdentificationData.java @@ -28,5 +28,7 @@ import lombok.Builder; public record FileIdentificationData( String fileId, String nachrichtId, - String nachrichtEventId) { + String nachrichtEventId +) { + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileProperties.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileProperties.java index 1f2a2411396c18c1ba6ebb282588e5d50a2d5afd..56164c46846009b093aa59fb3ee93d52197569e8 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileProperties.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileProperties.java @@ -20,19 +20,22 @@ package de.ozgcloud.antragsraum.attachments; -import lombok.Getter; -import lombok.Setter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; import org.springframework.util.unit.DataSize; +import lombok.Getter; +import lombok.Setter; + @Getter @Setter @Configuration @ConfigurationProperties(FileProperties.PREFIX) class FileProperties { - static final String PREFIX = "ozgcloud.upload"; - private DataSize maxFileSize; - private String[] blockedContentTypes; + static final String PREFIX = "ozgcloud.upload"; + + private DataSize maxFileSize; + private String[] blockedContentTypes; + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRemoteService.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRemoteService.java index 387b57e63d78e5fe377a49e310fce26848e3ac2a..ecdcdf41917155e3453570f83b74ede2819b915d 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRemoteService.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRemoteService.java @@ -34,6 +34,7 @@ import lombok.extern.log4j.Log4j2; @Service @RequiredArgsConstructor class FileRemoteService { + private final @NonNull FileRestClient restClient; private final @NonNull OzgFileMapper ozgFileMapper; @@ -58,4 +59,5 @@ class FileRemoteService { void downloadFileContent(FileIdentificationData fileIdentificationData, String address, OutputStream out) { restClient.downloadFileContent(fileIdentificationData, address, out); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRestClient.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRestClient.java index 9f9eb98599cefa037b2ce5623706d6164aecb9ce..78d53042ad1152fd8936357a525177731929f77a 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRestClient.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRestClient.java @@ -52,6 +52,7 @@ import lombok.extern.log4j.Log4j2; @Log4j2 @Component class FileRestClient { + static final String FIND_FILE_METADATA_API = "/api/v1/file/metadata"; static final String GET_FILE_CONTENT_API = "/api/v1/file/content"; static final String UPLOAD_FILE_API = "/api/v1/file"; @@ -145,4 +146,5 @@ class FileRestClient { throw new TechnicalException(e); } } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileService.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileService.java index f1c616aceebd4325dcb2f8c5ff1743e3d5d9b828..300d239e094e1f8292c5f657e3a2fc8e4fdcbdd3 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileService.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileService.java @@ -36,6 +36,7 @@ import lombok.extern.log4j.Log4j2; @Service @RequiredArgsConstructor public class FileService { + private final @NonNull FileRemoteService fileRemoteService; private final @NonNull VirusScannerClient scanner; private final @NonNull NachrichtEventService nachrichtEventService; @@ -75,4 +76,5 @@ public class FileService { boolean isClean(MultipartFile file) { return scanner.scan(file).isEmpty(); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileValidator.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileValidator.java index e99a8f7590902c8e51c4cfcc28e580b0e7563a32..5b82907087341aa11847100f3e9fcd9fa40176bd 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileValidator.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileValidator.java @@ -31,6 +31,7 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @Component class FileValidator { + private final FileProperties fileProperties; boolean isValid(MultipartFile file) { @@ -48,4 +49,5 @@ class FileValidator { return !Arrays.asList(fileProperties.getBlockedContentTypes()).contains(contentType); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/OzgFile.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/OzgFile.java index 8d8a5c657aeb1174dbc5cf4073442b5277475312..20faaa5f0b506248c8cc60d47d38e3d65df4ef57 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/OzgFile.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/OzgFile.java @@ -50,5 +50,7 @@ public record OzgFile( type = "string", example = "text/plain" ) - String contentType) { + String contentType +) { + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/OzgUploadFile.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/OzgUploadFile.java index 690a2372a2b9e86ff20e32ee797b7c3251800306..6809d04b5b86b066ddb4e458c16294c4709047b5 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/OzgUploadFile.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/OzgUploadFile.java @@ -28,4 +28,5 @@ import lombok.Builder; @Validated @Builder record OzgUploadFile(String vorgangId, MultipartFile file) { + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/VirusScannerClient.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/VirusScannerClient.java index 4085c550fd58f8bd9597731b265cea39e6941109..531c3df8d497e79e89c4e819b767e728f7301183 100755 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/VirusScannerClient.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/VirusScannerClient.java @@ -46,6 +46,7 @@ import lombok.extern.log4j.Log4j2; @Service @RequiredArgsConstructor class VirusScannerClient { + private static final String FILE_REQUEST_KEY = "FILES"; @Value("${clamav.scanUrl}") @@ -88,22 +89,29 @@ class VirusScannerClient { @Getter @Setter static class VirusScanResponse { + private VirusScanData data; private boolean success; + } @Getter @Setter static class VirusScanData { + private VirusScanResult[] result; + } @Getter @Setter static class VirusScanResult { + private String name; @JsonProperty("is_infected") private boolean infected; private String[] viruses; + } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/command/Command.java b/server/src/main/java/de/ozgcloud/antragsraum/command/Command.java index aa5345399859e458d9962ab7269292fcb46be814..c60eb0c7ecbbf7da35bedb2df9a721bb316d0d01 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/command/Command.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/command/Command.java @@ -46,5 +46,7 @@ record Command( @Min(0) long createdAt, @Schema(description = "The date on which the command was completed.") - Long finishedAt) { + Long finishedAt +) { + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandController.java b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandController.java index f9d2e37cf287b7681956fa9e3aab6ff8cdb66fc5..d72e5ae4a991e264de829931c72fe49c72d7943a 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandController.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandController.java @@ -37,6 +37,7 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @SecurityRequirement(name = "security_auth") class CommandController { + static final String PATH = "/api"; // NOSONAR private final @NonNull CommandService service; @@ -48,4 +49,5 @@ class CommandController { @Parameter(description = "The id of the NachrichtEvent the command belongs to", example = "60af924b4f1a2560298b4567") @PathVariable String nachrichtEventId) { return service.getCommand(commandId, nachrichtEventId); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandMapper.java b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandMapper.java index f66378a0bda86e8f833a22c826e4959a8a66af85..b573e3c4bda5c18f7fede762bd98cbe6a86e7be5 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandMapper.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandMapper.java @@ -23,32 +23,32 @@ package de.ozgcloud.antragsraum.command; import java.time.ZonedDateTime; -import java.util.Objects; + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; import de.ozgcloud.antragsraum.proxy.AntragraumproxyGrpcCommand; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -@NoArgsConstructor(access = AccessLevel.PRIVATE) -class CommandMapper { - public static final int IN_MILLISECONDS = 1000; +@Mapper +interface CommandMapper { + + int IN_MILLISECONDS = 1000; - static Command fromRestCommand(final AntragraumproxyGrpcCommand command, String nachrichtEventId) { - var createdAt = ZonedDateTime.now().toEpochSecond() + IN_MILLISECONDS; - if (Objects.nonNull(command.getCreatedAt())) { - createdAt = ZonedDateTime.parse(command.getCreatedAt()).toEpochSecond() * IN_MILLISECONDS; - } + @Mapping(target = "createdAt", expression = "java(convertCreatedAt(command.getCreatedAt()))") + @Mapping(target = "finishedAt", expression = "java(convertFinishedAt(command.getFinishedAt()))") + @Mapping(target = "nachrichtEventId", source = "nachrichtEventId") + Command fromRestCommand(AntragraumproxyGrpcCommand command, String nachrichtEventId); - var finishedAt = Objects.isNull(command.getFinishedAt()) || command.getFinishedAt().isEmpty() + default Long convertCreatedAt(String createdAt) { + return createdAt != null + ? ZonedDateTime.parse(createdAt).toEpochSecond() * IN_MILLISECONDS + : ZonedDateTime.now().toEpochSecond() * IN_MILLISECONDS; + } + + default Long convertFinishedAt(String finishedAt) { + return (finishedAt == null || finishedAt.isEmpty()) ? null - : ZonedDateTime.parse(command.getFinishedAt()).toEpochSecond() * IN_MILLISECONDS; - - return Command.builder() - .id(command.getId()) - .nachrichtEventId(nachrichtEventId) - .status(command.getStatus()) - .createdAt(createdAt) - .finishedAt(finishedAt) - .build(); + : ZonedDateTime.parse(finishedAt).toEpochSecond() * IN_MILLISECONDS; } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandReference.java b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandReference.java index 00e112bc6046822f5d898629f46651866c1a23ba..7480d5df5b1d703de1e07c4aa6b594319b5bc6fd 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandReference.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandReference.java @@ -38,5 +38,7 @@ public record CommandReference( type = "string", example = "60af924b4f1a2560298b4567" ) - String nachrichtEventId) { + String nachrichtEventId +) { + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandRemoteService.java b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandRemoteService.java index 51793b97671f9656ddf97d1c0c03a4d8203a1563..de5d0ad4ef587b1d083f275d9b5b29bb4956bc2b 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandRemoteService.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandRemoteService.java @@ -33,11 +33,14 @@ import lombok.extern.log4j.Log4j2; @Service @RequiredArgsConstructor class CommandRemoteService { + private final @NonNull CommandRestClient restClient; + private final @NonNull CommandMapper commandMapper; Command getCommand(NachrichtEvent nachrichtEvent, String commandId) { var response = restClient.getCommand(commandId, nachrichtEvent.address()); - return CommandMapper.fromRestCommand(response, nachrichtEvent.id()); + return commandMapper.fromRestCommand(response, nachrichtEvent.id()); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandRestClient.java b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandRestClient.java index 8bb9b294d01055b9bbf6ac6549e07b08c4007f56..4f217db9f3ef3edbda1907d4534f5c0c840b41e3 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandRestClient.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandRestClient.java @@ -34,6 +34,7 @@ import lombok.extern.log4j.Log4j2; @Log4j2 @Component class CommandRestClient { + static final String COMMAND_URI = "/api/v1/command/{commandId}"; private final RestClient restClient; @@ -48,4 +49,5 @@ class CommandRestClient { .header(X_GRPC_ADDRESS, RestClientUtils.sanitizeAddress(address)) .retrieve().toEntity(AntragraumproxyGrpcCommand.class).getBody(); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandService.java b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandService.java index 999f22bdc9fcebf6f0235bc643b60cebd4df035d..f59b2dec58481dab4bc55e449aa482db021a7cd3 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/command/CommandService.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/command/CommandService.java @@ -33,6 +33,7 @@ import lombok.extern.log4j.Log4j2; @Service @RequiredArgsConstructor class CommandService { + private final @NonNull CommandRemoteService commandRemoteService; private final @NonNull NachrichtEventService nachrichtEventService; @@ -41,4 +42,5 @@ class CommandService { return commandRemoteService.getCommand(nachrichtEvent, commandId); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/AddressNotFoundAdvice.java b/server/src/main/java/de/ozgcloud/antragsraum/common/AddressNotFoundAdvice.java deleted file mode 100644 index 600933f2dcafc71ef2ce984d0f90101e7e8665cb..0000000000000000000000000000000000000000 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/AddressNotFoundAdvice.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ - -package de.ozgcloud.antragsraum.common; - -import jakarta.annotation.Priority; -import lombok.extern.log4j.Log4j2; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -@ControllerAdvice -@Log4j2 -@Priority(value = 0) -public class AddressNotFoundAdvice extends ResponseEntityExceptionHandler { - @ResponseBody - @ExceptionHandler(AddressNotFoundException.class) - @ResponseStatus(HttpStatus.NOT_FOUND) - String addressNotFoundHandler(AddressNotFoundException ex) { - LOG.error("Error getting address of target OZG-Cloud instance. Message: " + ex.getMessage(), ex); - return "Target address not found"; - } -} diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/AddressNotFoundException.java b/server/src/main/java/de/ozgcloud/antragsraum/common/AddressNotFoundException.java index 0d596dbcc01e16dd7bf99a360450694857642f9b..20fb9f3e29400e5594be46dfef5f6cd567893bd2 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/AddressNotFoundException.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/common/AddressNotFoundException.java @@ -1,6 +1,6 @@ /* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. * * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - @@ -23,9 +23,11 @@ package de.ozgcloud.antragsraum.common; public class AddressNotFoundException extends RuntimeException { - private static final String MESSAGE_TEMPLATE = "No NachrichtEvent for id '%s' found"; - public AddressNotFoundException(String replyToId) { - super(String.format(MESSAGE_TEMPLATE, replyToId)); - } + private static final String MESSAGE_TEMPLATE = "No NachrichtEvent for id '%s' found"; + + public AddressNotFoundException(String replyToId) { + super(String.format(MESSAGE_TEMPLATE, replyToId)); + } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/AttachmentNotFoundAdvice.java b/server/src/main/java/de/ozgcloud/antragsraum/common/AttachmentNotFoundAdvice.java deleted file mode 100644 index a3064ebfd134d95e1b20826789a30e8dbf10caf0..0000000000000000000000000000000000000000 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/AttachmentNotFoundAdvice.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ - -package de.ozgcloud.antragsraum.common; - -import jakarta.annotation.Priority; -import lombok.extern.log4j.Log4j2; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -@ControllerAdvice -@Log4j2 -@Priority(value = 0) -public class AttachmentNotFoundAdvice extends ResponseEntityExceptionHandler { - @ResponseBody - @ExceptionHandler(NotFoundException.class) - @ResponseStatus(HttpStatus.NOT_FOUND) - String handleNotFound(NotFoundException ex) { - LOG.error("Error loading attachment.", ex); - return "Attachment not found"; - } -} diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/ExceptionController.java b/server/src/main/java/de/ozgcloud/antragsraum/common/ExceptionController.java new file mode 100644 index 0000000000000000000000000000000000000000..d1a6505accb751a92867d34131bcf392d4e5e978 --- /dev/null +++ b/server/src/main/java/de/ozgcloud/antragsraum/common/ExceptionController.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ + +package de.ozgcloud.antragsraum.common; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.context.request.WebRequest; +import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; + +import lombok.extern.log4j.Log4j2; + +@Log4j2 +@ControllerAdvice +public class ExceptionController extends ResponseEntityExceptionHandler { + + @ResponseBody + @ExceptionHandler(AddressNotFoundException.class) + @ResponseStatus(HttpStatus.NOT_FOUND) + String handleAddressNotFoundException(AddressNotFoundException ex) { + LOG.error("Error getting address of target OZG-Cloud instance. Message: {}", ex.getMessage(), ex); + return "Target address not found"; + } + + @ResponseBody + @ExceptionHandler(NotFoundException.class) + @ResponseStatus(HttpStatus.NOT_FOUND) + String handleNotFoundException(NotFoundException ex) { + LOG.error("Error loading attachment.", ex); + return "Attachment not found"; + } + + @ExceptionHandler(value = { RuntimeException.class, TechnicalException.class }) + @ResponseBody + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) + String handleGeneralException(RuntimeException ex) { + LOG.error("General error.", ex); + return "General error processing your request."; + } + + @ExceptionHandler(value = { InvalidFileTypeException.class }) + ResponseEntity<Object> handleInvalidFileTypeException(RuntimeException ex, WebRequest request) { + LOG.error("Uploaded file is not valid.", ex); + return handleExceptionInternal(ex, "File not acceptable", new HttpHeaders(), HttpStatus.NOT_ACCEPTABLE, request); + } + + @ExceptionHandler(value = { VirusFoundException.class }) + ResponseEntity<Object> handleVirusFoundException(RuntimeException ex, WebRequest request) { + LOG.error("Virus found in uploaded file.", ex); + return handleExceptionInternal(ex, "Virus found", new HttpHeaders(), HttpStatus.NOT_ACCEPTABLE, request); + } + +} diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/GeneralExceptionAdvice.java b/server/src/main/java/de/ozgcloud/antragsraum/common/GeneralExceptionAdvice.java deleted file mode 100755 index 57e7374408a86c008afb86479291fadc96b5fe88..0000000000000000000000000000000000000000 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/GeneralExceptionAdvice.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ - -package de.ozgcloud.antragsraum.common; - -import jakarta.annotation.Priority; -import lombok.extern.log4j.Log4j2; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -@ControllerAdvice -@Log4j2 -@Priority(value = 9) -public class GeneralExceptionAdvice extends ResponseEntityExceptionHandler { - @ExceptionHandler(value = {RuntimeException.class, TechnicalException.class}) - @ResponseBody - @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) - String handleException(RuntimeException ex) { - LOG.error("General error.", ex); - return "General error processing your request."; - } -} diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/InvalidFileAdvice.java b/server/src/main/java/de/ozgcloud/antragsraum/common/InvalidFileAdvice.java deleted file mode 100755 index e24bea7c2cd28b6e85cf79cc0d37d40c86a69552..0000000000000000000000000000000000000000 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/InvalidFileAdvice.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2023-2024. - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ - -package de.ozgcloud.antragsraum.common; - -import jakarta.annotation.Priority; - -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.context.request.WebRequest; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -import lombok.extern.log4j.Log4j2; - -@ControllerAdvice -@Log4j2 -@Priority(value = 0) -public class InvalidFileAdvice extends ResponseEntityExceptionHandler { - @ExceptionHandler(value = { InvalidFileTypeException.class }) - protected ResponseEntity<Object> handleInvalidFile(RuntimeException ex, WebRequest request) { - LOG.error("Uploaded file is not valid.", ex); - return handleExceptionInternal(ex, "File not acceptable", new HttpHeaders(), HttpStatus.NOT_ACCEPTABLE, request); - } -} diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/InvalidFileTypeException.java b/server/src/main/java/de/ozgcloud/antragsraum/common/InvalidFileTypeException.java index ef2d2293003de12924bc282b13dd1edf25e7f924..bfab6ca9557804c82f7d0c9e66177ab248cbd87e 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/InvalidFileTypeException.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/common/InvalidFileTypeException.java @@ -1,5 +1,7 @@ /* - * Copyright (c) 2023-2024. + * Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. + * * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - * Folgeversionen der EUPL ("Lizenz"); @@ -21,9 +23,11 @@ package de.ozgcloud.antragsraum.common; public class InvalidFileTypeException extends RuntimeException { - private static final String MESSAGE_TEMPLATE = "File '%s' has an unsupported file type"; - public InvalidFileTypeException(String fileName) { - super(String.format(MESSAGE_TEMPLATE, fileName)); - } + private static final String MESSAGE_TEMPLATE = "File '%s' has an unsupported file type"; + + public InvalidFileTypeException(String fileName) { + super(String.format(MESSAGE_TEMPLATE, fileName)); + } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/NotAccessibleException.java b/server/src/main/java/de/ozgcloud/antragsraum/common/NotAccessibleException.java index 88398b40b1b089bb25a30a9250b27c377311542c..2d974e5ae9f9857d48f679f9b1b6927527bb6520 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/NotAccessibleException.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/common/NotAccessibleException.java @@ -23,9 +23,11 @@ package de.ozgcloud.antragsraum.common; public class NotAccessibleException extends RuntimeException { + private static final String MESSAGE_TEMPLATE = "Current user does not have the required trust level for the Rueckfrage with id '%s'."; public NotAccessibleException(String rueckfrageId) { super(String.format(MESSAGE_TEMPLATE, rueckfrageId)); } + } \ No newline at end of file diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/NotFoundException.java b/server/src/main/java/de/ozgcloud/antragsraum/common/NotFoundException.java index 543be5a1a1b074101087f240a9d8c6f05402616b..a0cbaf2a8e30db5e707ff81f4c8bea54eecaf4c8 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/NotFoundException.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/common/NotFoundException.java @@ -1,6 +1,6 @@ /* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. * * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - @@ -23,9 +23,11 @@ package de.ozgcloud.antragsraum.common; public class NotFoundException extends RuntimeException { - private static final String MESSAGE_TEMPLATE = "Object '%s' with id '%s' not found."; - public NotFoundException(Class<?> resource, String id) { - super(String.format(MESSAGE_TEMPLATE, resource.getSimpleName(), id)); - } + private static final String MESSAGE_TEMPLATE = "Object '%s' with id '%s' not found."; + + public NotFoundException(Class<?> resource, String id) { + super(String.format(MESSAGE_TEMPLATE, resource.getSimpleName(), id)); + } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/RestClientUtils.java b/server/src/main/java/de/ozgcloud/antragsraum/common/RestClientUtils.java index c0930e849f62a161560d89545be020db837020a9..b94e1cf8dcfc20485636d3efb72e032f0498b549 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/RestClientUtils.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/common/RestClientUtils.java @@ -27,9 +27,11 @@ import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) public class RestClientUtils { + public static String sanitizeAddress(String address) { address = address.replaceAll(":\\d{4}$", ""); address = address.replaceAll("^static://", ""); return address; } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/SendTimeoutAdvice.java b/server/src/main/java/de/ozgcloud/antragsraum/common/SendTimeoutAdvice.java deleted file mode 100755 index 39ee5a627bc762039f6ff9414f21fd46258e595f..0000000000000000000000000000000000000000 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/SendTimeoutAdvice.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ - -package de.ozgcloud.antragsraum.common; - -import jakarta.annotation.Priority; -import lombok.extern.log4j.Log4j2; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -@ControllerAdvice -@Log4j2 -@Priority(value = 0) -public class SendTimeoutAdvice extends ResponseEntityExceptionHandler { - @ResponseBody - @ExceptionHandler(SendTimeoutException.class) - @ResponseStatus(HttpStatus.GATEWAY_TIMEOUT) - String sendTimeoutHandler(SendTimeoutException ex) { - LOG.error("Timeout while sending answer. Message: " + ex.getMessage(), ex); - return "Timeout while sending answer"; - } -} diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/TechnicalException.java b/server/src/main/java/de/ozgcloud/antragsraum/common/TechnicalException.java index f3fd6b1923808c818b893c2879c3e002f129d950..ecb333f0bb1c2092ce7a3297678dbc053eed88bf 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/TechnicalException.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/common/TechnicalException.java @@ -1,6 +1,6 @@ /* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. * * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - @@ -23,9 +23,11 @@ package de.ozgcloud.antragsraum.common; public class TechnicalException extends RuntimeException { - private static final String MESSAGE_TEMPLATE = "TechnicalException happened! Message: "; - public TechnicalException(Throwable ex) { - super(MESSAGE_TEMPLATE + ex.getMessage(), ex); - } + private static final String MESSAGE_TEMPLATE = "TechnicalException happened! Message: "; + + public TechnicalException(Throwable ex) { + super(MESSAGE_TEMPLATE + ex.getMessage(), ex); + } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/VirusFoundAdvice.java b/server/src/main/java/de/ozgcloud/antragsraum/common/VirusFoundAdvice.java deleted file mode 100755 index 6dc0b12e0e0ed8e2b511b9d43a9158b395a16568..0000000000000000000000000000000000000000 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/VirusFoundAdvice.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ - -package de.ozgcloud.antragsraum.common; - -import jakarta.annotation.Priority; -import lombok.extern.log4j.Log4j2; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.context.request.WebRequest; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -@ControllerAdvice -@Log4j2 -@Priority(value = 0) -public class VirusFoundAdvice extends ResponseEntityExceptionHandler { - @ExceptionHandler(value = {VirusFoundException.class}) - protected ResponseEntity<Object> handleVirusFound(RuntimeException ex, WebRequest request) { - LOG.error("Virus found in uploaded file.", ex); - return handleExceptionInternal(ex, "Virus found", new HttpHeaders(), HttpStatus.NOT_ACCEPTABLE, request); - } -} diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/VirusFoundException.java b/server/src/main/java/de/ozgcloud/antragsraum/common/VirusFoundException.java old mode 100755 new mode 100644 index 6ca6e78da97efc6fe13a267e446a3553efea24c2..d5e3887f4151542b0ac10c97c8c3de4daf5ec1a1 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/VirusFoundException.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/common/VirusFoundException.java @@ -1,6 +1,6 @@ /* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. * * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - @@ -23,9 +23,11 @@ package de.ozgcloud.antragsraum.common; public class VirusFoundException extends RuntimeException { - private static final String MESSAGE_TEMPLATE = "File with nachrichtId '%s' contains virus."; - public VirusFoundException(String id) { - super(String.format(MESSAGE_TEMPLATE, id)); - } + private static final String MESSAGE_TEMPLATE = "File with nachrichtId '%s' contains virus."; + + public VirusFoundException(String id) { + super(String.format(MESSAGE_TEMPLATE, id)); + } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/VirusScanException.java b/server/src/main/java/de/ozgcloud/antragsraum/common/VirusScanException.java index f130b513e469ebc25ef9be032e1a0f2165de0267..14a0a555549f4106a8b769e61966780ea55e62dc 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/VirusScanException.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/common/VirusScanException.java @@ -1,6 +1,6 @@ /* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. * * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - @@ -23,9 +23,11 @@ package de.ozgcloud.antragsraum.common; public class VirusScanException extends RuntimeException { + private static final String MESSAGE_TEMPLATE = "Virus scan for file with name '%s' failed."; public VirusScanException(String fileName) { super(String.format(MESSAGE_TEMPLATE, fileName)); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/logging/RepositoryAspectPointcut.java b/server/src/main/java/de/ozgcloud/antragsraum/common/logging/RepositoryAspectPointcut.java index 47f0bcdda4fca053d060bed639c87e17a27441aa..e0ffdb8515551923824ea2fb583d0dae677d5db0 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/logging/RepositoryAspectPointcut.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/common/logging/RepositoryAspectPointcut.java @@ -31,4 +31,5 @@ public class RepositoryAspectPointcut { void anyPublicRepositoryMethod() { // aspect pointcut - no implementation needed } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/logging/RepositoryLoggingAspect.java b/server/src/main/java/de/ozgcloud/antragsraum/common/logging/RepositoryLoggingAspect.java index efb41906f2b1771743030b3fd3fdbd6d50aaa9c9..4a2566afc52badce37d5a0d754e614f7fc9f01da 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/logging/RepositoryLoggingAspect.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/common/logging/RepositoryLoggingAspect.java @@ -36,4 +36,5 @@ public class RepositoryLoggingAspect extends RepositoryAspectPointcut { public void onRepositoryMethod(JoinPoint joinPoint) { AspectLoggingUtils.log(joinPoint); } + } \ No newline at end of file diff --git a/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEvent.java b/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEvent.java index d325c2f78edc7c1b6787af994bd89f801cb89b56..247b36bdabafc355c6927906172857bbfd895953 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEvent.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEvent.java @@ -25,5 +25,10 @@ package de.ozgcloud.antragsraum.events; import lombok.Builder; @Builder -public record NachrichtEvent(String id, String postfachId, String address) { +public record NachrichtEvent( + String id, + String postfachId, + String address +) { + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventMapper.java b/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventMapper.java index a64e190a789629c4d91611db79d84e129542bb5c..c1b013a79074b4e1c0da05f69379e636fb2921e7 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventMapper.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventMapper.java @@ -32,4 +32,5 @@ interface NachrichtEventMapper { @Mapping(target = "address", source = "ozgCloudAddress") NachrichtEvent fromRest(InfoGrpcInformationNachricht nachricht); + } \ No newline at end of file diff --git a/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteService.java b/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteService.java index a21c383991d39b6e92e74e8d431f84cb826e9275..3d303df62378a24f15901e2e2cf14fade8cf589f 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteService.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteService.java @@ -30,6 +30,7 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @Service class NachrichtEventRemoteService { + private final NachrichtEventRestClient restClient; private final NachrichtEventMapper mapper; @@ -48,4 +49,5 @@ class NachrichtEventRemoteService { return response.getNachrichten().stream().map(mapper::fromRest).toList(); } + } \ No newline at end of file diff --git a/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventRestClient.java b/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventRestClient.java index 31903a7b6a622a524d1687b5a1159a09d422e6bf..190e7cffe94049e3a4f5b95b77483bfec46b0fa7 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventRestClient.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventRestClient.java @@ -11,6 +11,7 @@ import de.ozgcloud.common.errorhandling.TechnicalException; @Component class NachrichtEventRestClient { + static final String INFORMATION_LIST_ENDPOINT = "api/v1/informations/{postfachId}"; static final String INFORMATION_ENDPOINT = "api/v1/information/{id}"; @@ -39,4 +40,5 @@ class NachrichtEventRestClient { throw new TechnicalException("Error retrieving data from grpc using restclient.", e); } } + } \ No newline at end of file diff --git a/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventService.java b/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventService.java index 76381359342b253c907249f5c0b7a68fcaae86ce..e6fb6b676e6aa5d73657c29bbbe49a7a019e4b97 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventService.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventService.java @@ -32,6 +32,7 @@ import lombok.RequiredArgsConstructor; @Service @RequiredArgsConstructor public class NachrichtEventService { + private final @NonNull NachrichtEventRemoteService remoteService; public NachrichtEvent getNachrichtEventById(String id) { @@ -41,4 +42,5 @@ public class NachrichtEventService { public List<NachrichtEvent> getNachrichtEventsOfPostfachId(String postfachId) { return remoteService.getNachrichtEventsByPostfach(postfachId); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/AntragraumProxyMapper.java b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/AntragraumProxyMapper.java index d88c4a1f26d78c819dd373d5651120cc7647eb20..b67bc4dcb635415c77cfd6209968b7061910427c 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/AntragraumProxyMapper.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/AntragraumProxyMapper.java @@ -45,4 +45,5 @@ interface AntragraumProxyMapper { return nachricht.attachments().stream().map(OzgFile::id).toList(); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/AttachmentMapper.java b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/AttachmentMapper.java index 45e6bbca1c99b482ca81396d51f231221a40d2a4..90cacbcddfbdf5fe7b0b3530ae5db06790eb205d 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/AttachmentMapper.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/AttachmentMapper.java @@ -27,6 +27,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) class AttachmentMapper { + static OzgFile fromGrpcBinaryFile(GrpcBinaryFile file) { return OzgFile.builder() .id(file.getId()) @@ -34,4 +35,5 @@ class AttachmentMapper { .fileSize(file.getSize()) .contentType(file.getContentType()).build(); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/Nachricht.java b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/Nachricht.java index 6d762929c6627ff46c0185b01c58e75cb594c938..218e433a1db9b03c909215a344b72cdfeb9e329d 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/Nachricht.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/Nachricht.java @@ -119,4 +119,5 @@ record Nachricht( ", status='" + status + '\'' + '}'; } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtHeader.java b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtHeader.java index d72c3066c4949998c3e35dd70546f1899a364ded..af5f444cd6bcfd22889300c4b6c3ed357c2780c7 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtHeader.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtHeader.java @@ -79,4 +79,5 @@ record NachrichtHeader( type = "String" ) String status) { + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtHeaderMapper.java b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtHeaderMapper.java index 032a097056123aa9e662f0375df4b78221aa6bed..5b0886fb37eff7f7881233be4dd1858f1e7e28ff 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtHeaderMapper.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtHeaderMapper.java @@ -34,6 +34,7 @@ import lombok.extern.log4j.Log4j2; @Log4j2 @NoArgsConstructor(access = AccessLevel.PRIVATE) class NachrichtHeaderMapper { + private static long toMillisecondsTimestamp(String dateString) { long timestamp = 0; try { @@ -63,4 +64,5 @@ class NachrichtHeaderMapper { return builder.build(); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapper.java b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapper.java index f2fec2a82099a67d9fa676afdb548798b57908d4..0e7f66a1844ba29aa5402502306e0eed0d9a6ef3 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapper.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapper.java @@ -42,6 +42,7 @@ import lombok.extern.log4j.Log4j2; @Service @RequiredArgsConstructor class NachrichtMapper { + private final @NonNull FileService fileService; private List<OzgFile> getAttachments(List<String> fileIds, String nachrichtId, String nachrichtEventId) { @@ -126,4 +127,5 @@ class NachrichtMapper { return antwort; } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtenController.java b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtenController.java index f81cb4bb84d67d7189e9ed5809dfb88ecd7903fc..b5cd8e3926bf5374103243abc5033b282e40db3f 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtenController.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtenController.java @@ -44,6 +44,7 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @SecurityRequirement(name = "security_auth") class NachrichtenController { + static final String PATH = "/api"; // NOSONAR private final @NonNull NachrichtenService service; @@ -69,4 +70,5 @@ class NachrichtenController { CommandReference sendNachricht(@Parameter(description = "The Nachricht content as JSON") @RequestBody @Valid ReplyNachricht nachricht) { return service.sendRueckfrageAnswer(nachricht); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteService.java b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteService.java index 3fb1be48928fdafb737c6d1771a0d35dc34366da..4d3bc500c45635ee622d99998e1a6162ef2fc7f0 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteService.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteService.java @@ -38,6 +38,7 @@ import lombok.extern.log4j.Log4j2; @Log4j2 @RequiredArgsConstructor class NachrichtenRemoteService { + private final NachrichtenRestClient nachrichtenRestClient; private final NachrichtMapper nachrichtMapper; private final AntragraumProxyMapper antragraumProxyMapper; @@ -80,4 +81,5 @@ class NachrichtenRemoteService { .nachrichtEventId(nachricht.nachrichtEventId()) .build(); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRestClient.java b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRestClient.java index de64f5d6445c07f34cdb0ac76e3649ff4d995e12..d8a357d1ee977dc486f8ae9fb15a28a018de5f50 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRestClient.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRestClient.java @@ -42,6 +42,7 @@ import lombok.extern.log4j.Log4j2; @Log4j2 @Component public class NachrichtenRestClient { + static final String GET_RUECKFRAGEN_URI = "api/v1/rueckfragen"; static final String GET_RUECKFRAGE_URI = "api/v1/rueckfrage"; static final String SEND_ANTWORT_URI = "api/v1/antworten"; @@ -108,4 +109,5 @@ public class NachrichtenRestClient { throw e; } } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtenService.java b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtenService.java index b1a9b37f695f2cfd90675e5cd719aabe8e747f28..22ff98978d9c52c08d03b7a78c776a177c87209c 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtenService.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtenService.java @@ -47,6 +47,7 @@ import lombok.extern.log4j.Log4j2; @Validated @RequiredArgsConstructor class NachrichtenService { + static final String RUECKFRAGE_LINK_RELATIONSHIP_NAME = "rueckfrage"; private final @NonNull NachrichtEventService nachrichtEventService; @@ -112,4 +113,5 @@ class NachrichtenService { throw new TechnicalException(new ConstraintViolationException(validationResult)); } } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/ReplyNachricht.java b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/ReplyNachricht.java index 071cc1ad752021b551f7844c3dd1952f66a12b73..51d89d93c3f4eb8f80844b6ffd14112b54c8837b 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/ReplyNachricht.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/ReplyNachricht.java @@ -86,4 +86,5 @@ record ReplyNachricht( ", message=<...masked for privacy..>" + '}'; } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/ReplyOption.java b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/ReplyOption.java index dffc73fe9ce861758b54d6435a1a284c084d5bde..bf360a1307c04ec6cc6cf56bbd6c45e4004dd718 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/ReplyOption.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/ReplyOption.java @@ -23,5 +23,7 @@ package de.ozgcloud.antragsraum.nachricht; enum ReplyOption { - FORBIDDEN, ALLOWED, UNDEFINED + FORBIDDEN, + ALLOWED, + UNDEFINED } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/Rueckfrage.java b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/Rueckfrage.java index b4d28c83bf61673b91420dc13ba1509b3684aa3a..bd37ac515eb534a65b1a6c04161cdccae1685d54 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/Rueckfrage.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/Rueckfrage.java @@ -31,6 +31,7 @@ import lombok.Getter; @Builder @Getter class Rueckfrage { + @Schema(description = "The title of the Rueckfrage. This is the title of the Vorgang", name = "title", type = "string", @@ -75,4 +76,5 @@ class Rueckfrage { ", antworten=<...masked for privacy..>" + '}'; } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/RueckfrageHeader.java b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/RueckfrageHeader.java index c170953aef7180725de8e11fe81c36966aa253ba..12566f7a9ee5d52663581e5e773c386208ee4a4d 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/RueckfrageHeader.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/RueckfrageHeader.java @@ -33,6 +33,7 @@ import lombok.Getter; @Getter @EqualsAndHashCode(callSuper = true) class RueckfrageHeader extends RepresentationModel<RueckfrageHeader> { + @Schema(description = "The title of the rueckfrage. This is the title of the Vorgang", name = "title", type = "string", @@ -59,4 +60,5 @@ class RueckfrageHeader extends RepresentationModel<RueckfrageHeader> { type = "String" ) String status; + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/RueckfrageHeaderMapper.java b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/RueckfrageHeaderMapper.java index bddbc759e27ed37a944ea46994bedb132b263e19..165dd526a6c339485b22cdd4c4b301cf92809b94 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/RueckfrageHeaderMapper.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/RueckfrageHeaderMapper.java @@ -32,6 +32,7 @@ import lombok.extern.log4j.Log4j2; @Log4j2 @NoArgsConstructor(access = AccessLevel.PRIVATE) class RueckfrageHeaderMapper { + static List<RueckfrageHeader> fromNachrichtHeaders(Collection<NachrichtHeader> nachrichtHeaders) { return nachrichtHeaders.stream().map(RueckfrageHeaderMapper::fromNachrichtHeader).toList(); } @@ -45,4 +46,5 @@ class RueckfrageHeaderMapper { .status(nachrichtHeader.status()) .build(); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/RueckfrageMapper.java b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/RueckfrageMapper.java index d147533bde77d21fb1a2385df12dcbaaba24e714..25cccb4f6dcfc2fe2ecf7d8895ef05ee40d5b62a 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/RueckfrageMapper.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/RueckfrageMapper.java @@ -29,6 +29,7 @@ import lombok.extern.log4j.Log4j2; @Log4j2 @NoArgsConstructor(access = AccessLevel.PRIVATE) class RueckfrageMapper { + static Rueckfrage fromNachricht(Nachricht nachricht) { var clerkNachricht = nachricht.toBuilder().replyNachrichten(null).build(); @@ -41,4 +42,5 @@ class RueckfrageMapper { .antworten(nachricht.replyNachrichten()) .build(); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/TrustLevelMapper.java b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/TrustLevelMapper.java index 0ebc5b668b8433b5d29b38b695217b1e89e03e48..6368e2d480f621dd452ffe43284506052b867ed6 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/TrustLevelMapper.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/TrustLevelMapper.java @@ -29,6 +29,7 @@ import lombok.extern.log4j.Log4j2; @Log4j2 @NoArgsConstructor(access = AccessLevel.PRIVATE) class TrustLevelMapper { + static final String TRUST_LEVEL_STORK_QAA_LEVEL_1 = "STORK-QAA-Level-1"; static final String TRUST_LEVEL_STORK_QAA_LEVEL_2 = "STORK-QAA-Level-2"; static final String TRUST_LEVEL_STORK_QAA_LEVEL_3 = "STORK-QAA-Level-3"; @@ -53,4 +54,5 @@ class TrustLevelMapper { LOG.debug("Mapping trust level {} to {}", trustLevel, result); return result; } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/AntragsraumLogoutSuccessHandler.java b/server/src/main/java/de/ozgcloud/antragsraum/security/AntragsraumLogoutSuccessHandler.java index 13194163562cdf160a387f750ffa3aa21482b202..93ffdf3c51feae0b5714670bec83b546410d3029 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/AntragsraumLogoutSuccessHandler.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/AntragsraumLogoutSuccessHandler.java @@ -20,27 +20,32 @@ package de.ozgcloud.antragsraum.security; +import java.io.IOException; +import java.util.Objects; + import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import lombok.RequiredArgsConstructor; + import org.springframework.security.core.Authentication; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.web.authentication.AbstractAuthenticationTargetUrlRequestHandler; import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; -import java.io.IOException; -import java.util.Objects; +import lombok.RequiredArgsConstructor; @RequiredArgsConstructor public class AntragsraumLogoutSuccessHandler extends AbstractAuthenticationTargetUrlRequestHandler implements LogoutSuccessHandler { + private final UserDetailsService userDetailService; - public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { + public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) + throws IOException, ServletException { if (Objects.nonNull(authentication) && authentication.getPrincipal() instanceof User user) { ((InMemoryUserDetailService) userDetailService).logout(user); } super.handle(request, response, authentication); } + } \ No newline at end of file diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/AntragsraumProperties.java b/server/src/main/java/de/ozgcloud/antragsraum/security/AntragsraumProperties.java index 622d80609f1624c358abcb81b3b404c66efb342c..b61c326a28477111f71399d5bc1aa64b17451a3c 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/AntragsraumProperties.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/AntragsraumProperties.java @@ -20,16 +20,19 @@ package de.ozgcloud.antragsraum.security; +import org.springframework.boot.context.properties.ConfigurationProperties; + import lombok.Getter; import lombok.Setter; -import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix = "ozgcloud.antragsraum") @Getter @Setter public class AntragsraumProperties { - private String[] authOrigins; - private String[] apiOrigins; - private String[] otherOrigins; - private String logoutSuccessUrl = "http://localhost:8082/?logout"; + + private String[] authOrigins; + private String[] apiOrigins; + private String[] otherOrigins; + private String logoutSuccessUrl = "http://localhost:8082/?logout"; + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/AuthCode.java b/server/src/main/java/de/ozgcloud/antragsraum/security/AuthCode.java index 7e999c8addc7dab9bb3b9afedf915a8ee43725ff..577c939fe1f732dd2ba0ea445b6f923a579e2869 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/AuthCode.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/AuthCode.java @@ -21,4 +21,5 @@ package de.ozgcloud.antragsraum.security; record AuthCode(String code) { + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/AuthenticationController.java b/server/src/main/java/de/ozgcloud/antragsraum/security/AuthenticationController.java index 4bb26808b2b6fdd104747a3703164c3edfce0ec7..9dffaa14506a950d1c659c47206f3adabb612bcb 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/AuthenticationController.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/AuthenticationController.java @@ -41,6 +41,7 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @RequestMapping(AuthenticationController.PATH) class AuthenticationController { + static final String PATH = "/auth"; // NOSONAR private final InMemoryUserDetailService userDetailsService; @@ -84,4 +85,5 @@ class AuthenticationController { return ResponseEntity.ok("Success"); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/AuthenticationHelper.java b/server/src/main/java/de/ozgcloud/antragsraum/security/AuthenticationHelper.java index 6f20f2ffd44b48379d2517fbe28d4c56e03c971c..f58309a0464337f779d106bd13b13964749c8115 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/AuthenticationHelper.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/AuthenticationHelper.java @@ -38,6 +38,7 @@ import lombok.extern.log4j.Log4j2; @NoArgsConstructor(access = AccessLevel.PRIVATE) @Log4j2 public class AuthenticationHelper { + static final String NO_SAML_TOKEN = "--not set--"; private static final AuthenticationTrustResolver TRUST_RESOLVER = new AuthenticationTrustResolverImpl(); private static final Predicate<Authentication> TRUSTED = auth -> !TRUST_RESOLVER.isAnonymous(auth); @@ -59,4 +60,5 @@ public class AuthenticationHelper { return tokenValue; } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/BayernIdProperties.java b/server/src/main/java/de/ozgcloud/antragsraum/security/BayernIdProperties.java index 46b8ac67857cf2bb0aacfb495f60377f643e23da..4dc3b76571a55a0c535a11d23eab5fd864757cae 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/BayernIdProperties.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/BayernIdProperties.java @@ -32,8 +32,10 @@ import lombok.Setter; @Getter @Setter public class BayernIdProperties { + private String organizationDisplayName; private Map<String, String> authnMethods; private List<String> requestedAttributeUrns; private String redirectUrl; + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/BayernIdSaml2Extension.java b/server/src/main/java/de/ozgcloud/antragsraum/security/BayernIdSaml2Extension.java index 384fc1a0c7c4f151f323824c29b703bf6b8e6474..c3fedb32615650eeac35b39c85b5c3a8a16b7d26 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/BayernIdSaml2Extension.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/BayernIdSaml2Extension.java @@ -36,6 +36,7 @@ import lombok.RequiredArgsConstructor; @Component @RequiredArgsConstructor public class BayernIdSaml2Extension { + @NonNull private final BayernIdProperties properties; @@ -116,4 +117,5 @@ public class BayernIdSaml2Extension { return displayInformationElement; } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/DefaultRole.java b/server/src/main/java/de/ozgcloud/antragsraum/security/DefaultRole.java index abe82eea8a056970ebd68e3763dc8c2836128829..9cb16a5c056f4fa68a608b65217de6a91e5fac27 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/DefaultRole.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/DefaultRole.java @@ -23,10 +23,12 @@ package de.ozgcloud.antragsraum.security; import org.springframework.security.core.GrantedAuthority; class DefaultRole implements GrantedAuthority { + public static final String ROLE = "ROLE_USER"; @Override public String getAuthority() { return ROLE; } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/InMemoryUserDetailService.java b/server/src/main/java/de/ozgcloud/antragsraum/security/InMemoryUserDetailService.java index 3cf3fb6d54c788490d00144859e396445259deb5..c89d01e0f220079c9bb9a36bbf59e8d01df32b0d 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/InMemoryUserDetailService.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/InMemoryUserDetailService.java @@ -49,6 +49,7 @@ import lombok.extern.log4j.Log4j2; @NoArgsConstructor @Log4j2 public class InMemoryUserDetailService implements UserDetailsService { + @Value("${ozgcloud.code.expire.seconds:10}") private long codeExpireSeconds; @Value("${ozgcloud.jwt.expiration.minutes}") @@ -138,4 +139,5 @@ public class InMemoryUserDetailService implements UserDetailsService { public void logout(User user) { usersMap.remove(user.getId()); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenFilter.java b/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenFilter.java index 866c00c3968dca9881b5790ed5be38b66d3c42bc..c9a898a13cbf2617af2137c514314dbb6bf1e9fa 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenFilter.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenFilter.java @@ -48,6 +48,7 @@ import lombok.extern.log4j.Log4j2; @RequiredArgsConstructor @Component public class JwtTokenFilter extends OncePerRequestFilter { + public static final String TOKEN_HEADER = "Authorization"; public static final String TOKEN_PREFIX = "Bearer "; @@ -92,4 +93,5 @@ public class JwtTokenFilter extends OncePerRequestFilter { } return Optional.empty(); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenProvider.java b/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenProvider.java index b6121fe95ea03d98664ccfc036fffbeee7885a08..284eae0916a1f33f9c7e4a49b689f1f287fad371 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenProvider.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenProvider.java @@ -37,6 +37,7 @@ import lombok.extern.log4j.Log4j2; @Log4j2 @Component class JwtTokenProvider { + public static final String TOKEN_TYPE = "JWT"; public static final String TOKEN_ISSUER = "antragsraum-api"; public static final String TOKEN_AUDIENCE = "antragsraum-app"; @@ -80,4 +81,5 @@ class JwtTokenProvider { .claim("trustlevel", user.getTrustLevel()) .compact(); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenVerifier.java b/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenVerifier.java index d8be96e1db725759e2edb0edbbfe9077a6b775bf..db2cab22ae9281e45ff18c93f4c670fd898929c1 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenVerifier.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenVerifier.java @@ -40,6 +40,7 @@ import lombok.extern.log4j.Log4j2; @Log4j2 @Component class JwtTokenVerifier { + @Value("${ozgcloud.jwt.secret}") private String jwtSecret; @@ -72,4 +73,5 @@ class JwtTokenVerifier { } return Optional.empty(); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/SHA256withRSAAndMGF1SignatureAlgorithm.java b/server/src/main/java/de/ozgcloud/antragsraum/security/SHA256withRSAAndMGF1SignatureAlgorithm.java index 7e5cea725cb7905e0acb74dd020c1c99fd0bfc0d..c3becbbe4b7e1b67cf965f05be301eb090d4f6e8 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/SHA256withRSAAndMGF1SignatureAlgorithm.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/SHA256withRSAAndMGF1SignatureAlgorithm.java @@ -29,6 +29,7 @@ import lombok.NonNull; @NoArgsConstructor final class SHA256withRSAAndMGF1SignatureAlgorithm implements SignatureAlgorithm { + static final String RSA_ALGORITHM_ID = "RSA"; static final String RSA_SHA256_MGF1_ALGORITHM_URL = "http://www.w3.org/2007/05/xmldsig-more#sha256-rsa-MGF1"; static final String RSA_SHA256_MGF1_ALGORITHM_ID = "SHA256withRSAandMGF1"; @@ -58,4 +59,5 @@ final class SHA256withRSAAndMGF1SignatureAlgorithm implements SignatureAlgorithm public String getDigest() { return SHA256_ALGORITHM_ID; } + } \ No newline at end of file diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/SamlRedirectStrategy.java b/server/src/main/java/de/ozgcloud/antragsraum/security/SamlRedirectStrategy.java index ee7e5b6bd3032cb53f5748763cb19ef185fd9ac0..8f8570fd23b4bd41187cb69f2bc42590bb1999a2 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/SamlRedirectStrategy.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/SamlRedirectStrategy.java @@ -36,6 +36,7 @@ import lombok.extern.log4j.Log4j2; @Log4j2 class SamlRedirectStrategy extends DefaultRedirectStrategy { + private final UserDetailsService userDetailsService; private final String redirectUrl; private String onetimeToken; @@ -72,4 +73,5 @@ class SamlRedirectStrategy extends DefaultRedirectStrategy { response.sendRedirect(calculateRedirectUrl); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/SamlUrlAuthenticationSuccessHandler.java b/server/src/main/java/de/ozgcloud/antragsraum/security/SamlUrlAuthenticationSuccessHandler.java index 0f125093103b170604199e9b56868b47d99fe21f..4df724fd16a4c98538454a95ee55e26709ac60d6 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/SamlUrlAuthenticationSuccessHandler.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/SamlUrlAuthenticationSuccessHandler.java @@ -40,6 +40,7 @@ import lombok.extern.log4j.Log4j2; @Log4j2 public class SamlUrlAuthenticationSuccessHandler implements AuthenticationSuccessHandler { + private final SamlRedirectStrategy redirectStrategy; private final Map<String, String> roleTargetUrlMap = new HashMap<>(); @@ -97,4 +98,5 @@ public class SamlUrlAuthenticationSuccessHandler implements AuthenticationSucces session.removeAttribute(WebAttributes.AUTHENTICATION_EXCEPTION); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/SecurityProvider.java b/server/src/main/java/de/ozgcloud/antragsraum/security/SecurityProvider.java index 98ef48877071818e013cc6b844805e30a3d60c3a..c824b38d0fb3867619940ca9e588ab37d24e36fc 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/SecurityProvider.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/SecurityProvider.java @@ -30,6 +30,7 @@ import org.opensaml.xmlsec.algorithm.AlgorithmRegistry; import org.springframework.beans.factory.InitializingBean; public class SecurityProvider implements InitializingBean { + @Override public void afterPropertiesSet() { Security.addProvider(new BouncyCastleProvider()); @@ -45,4 +46,5 @@ public class SecurityProvider implements InitializingBean { ConfigurationService.register(AlgorithmRegistry.class, algorithmRegistry); } } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/User.java b/server/src/main/java/de/ozgcloud/antragsraum/security/User.java index 42317167610d4f52bda6da394047b0b7f43c285b..0ba59b2957e46dc0f07d099c32ea51a8da353edf 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/User.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/User.java @@ -39,6 +39,7 @@ import lombok.Getter; @Builder(toBuilder = true) @Getter class User implements UserDetails { + private String id; private String samlToken; private String firstName; @@ -89,4 +90,5 @@ class User implements UserDetails { PasswordEncoder passwordEncoder() { return PasswordEncoderFactories.createDelegatingPasswordEncoder(); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/UserMapper.java b/server/src/main/java/de/ozgcloud/antragsraum/security/UserMapper.java index a95d1fbf3e2b73819acb1eceefc458a0f8e048e9..3a922ee1b9d62c759c2d0e211453123e2db84c83 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/UserMapper.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/UserMapper.java @@ -34,6 +34,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) class UserMapper { + public static final String POSTKORB_HANDLE_URN = "urn:oid:2.5.4.18"; public static final String BK2_URN = "urn:oid:1.3.6.1.4.1.25484.494450.3"; public static final String VORNAME_URN = "urn:oid:2.5.4.42"; @@ -76,4 +77,5 @@ class UserMapper { static List<Map.Entry<String, List<Object>>> getUnknownAttributes(Map<String, List<Object>> attributes) { return attributes.entrySet().stream().filter(entry -> !ArrayUtils.contains(KNOWN_ATTRIBUTES, entry.getKey())).toList(); } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationITCase.java b/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationITCase.java index 78fb758a9c6525d24f1cb0b991bfdd28a30e9384..482bf22b125002bf4e58c43c5539123c5b8f723a 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationITCase.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationITCase.java @@ -29,7 +29,9 @@ import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; @SpringBootTest @SpringJUnitConfig(classes = { AntragsRaumApplicationTestConfiguration.class }) class AntragsRaumApplicationITCase { + @Test void shouldLoadContext() { // NOSONAR } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationTest.java b/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationTest.java index b647f91329747354a7dc7a27ec1b56ed185126b4..3598fd6eb03285fb06f180371f99f5d52ef28495 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationTest.java @@ -31,6 +31,7 @@ import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) class AntragsRaumApplicationTest { + @Spy @InjectMocks private AntragsRaumApplication application; @@ -48,4 +49,5 @@ class AntragsRaumApplicationTest { assertThat(customizer).isNotNull(); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationTestConfiguration.java b/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationTestConfiguration.java index 7b89a3b2058a115712ffbd5f6b075662daccdb9d..b86fff38b890c940a692a539e10c3b88d3c8f505 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationTestConfiguration.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationTestConfiguration.java @@ -30,4 +30,5 @@ import org.springframework.context.annotation.FilterType; @ComponentScan(value = { "de.ozgcloud" }, excludeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = ".*[TestConfiguration].*")) public class AntragsRaumApplicationTestConfiguration { + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/ModularityTests.java b/server/src/test/java/de/ozgcloud/antragsraum/ModularityTests.java index 7d54ea70fee3ee21b459a0f583393b10d2d98d73..98da49dd5da79ee8fa42c60e89e6a25b3168f34f 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/ModularityTests.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/ModularityTests.java @@ -26,6 +26,7 @@ import org.springframework.modulith.core.ApplicationModules; import org.springframework.modulith.docs.Documenter; class ModularityTests { + @Test void verifyModularity() { // NOSONAR ApplicationModules.of(AntragsRaumApplication.class); @@ -39,4 +40,5 @@ class ModularityTests { .writeModulesAsPlantUml() .writeIndividualModulesAsPlantUml(); } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/RootControllerTest.java b/server/src/test/java/de/ozgcloud/antragsraum/RootControllerTest.java index 471db6a140b1984afeb11161d887d857670a6744..d36b85060ea61957f668c835901d8cf3f3dab791 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/RootControllerTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/RootControllerTest.java @@ -39,6 +39,7 @@ class RootControllerTest { @Nested class TestWithBuildProperties { + @Mock private BuildProperties buildProperties; @@ -121,10 +122,12 @@ class RootControllerTest { assertThat(root.isProduction()).isTrue(); } + } @Nested - class TestWithOutBuildProperties { + class TestWithoutBuildProperties { + private final RootController rootController = new RootController(null); @Test @@ -175,5 +178,7 @@ class RootControllerTest { assertThat(root.isProduction()).isTrue(); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/SecurityConfigurationTest.java b/server/src/test/java/de/ozgcloud/antragsraum/SecurityConfigurationTest.java index cd4b8c89ddaed198489fb792692d79632c81731b..2642fbcdba7afa61d08f53b1f8ad79a67f2b372d 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/SecurityConfigurationTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/SecurityConfigurationTest.java @@ -45,6 +45,7 @@ import de.ozgcloud.antragsraum.security.SecurityProvider; @ExtendWith(MockitoExtension.class) class SecurityConfigurationTest { + @Mock private BayernIdSaml2Extension bayernIdSaml2Extension; @@ -83,6 +84,7 @@ class SecurityConfigurationTest { @Nested class TestHttpSecurity { + private HttpSecurity httpSecurity; @BeforeEach @@ -123,10 +125,12 @@ class SecurityConfigurationTest { verify(httpSecurity, times(2)).headers(any()); } + } @Nested class TestAuthenticationRequestResolver { + @Mock private RelyingPartyRegistrationRepository registrations; @@ -136,10 +140,12 @@ class SecurityConfigurationTest { assertThat(authResolver).isInstanceOf(Saml2AuthenticationRequestResolver.class); } + } @Nested class TestSamlFilterChain { + @Mock HttpSecurity security; @@ -166,10 +172,12 @@ class SecurityConfigurationTest { verify(security).saml2Logout(any()); } + } @Nested class TestLogoutHandler { + @Test void shouldCreateLogoutHandler() { when(corsProperties.getLogoutSuccessUrl()).thenReturn("/"); @@ -178,25 +186,31 @@ class SecurityConfigurationTest { assertThat(handler).isInstanceOf(AntragsraumLogoutSuccessHandler.class); } + } @Nested class TestSuccessHandler { + @Test void shouldCreateSuccessHandler() { var handler = securityConfiguration.getSamlUrlAuthenticationSuccessHandler(); assertThat(handler).isInstanceOf(SamlUrlAuthenticationSuccessHandler.class); } + } @Nested class TestCorsConfigurer { + @Test void shouldCreateCorsConfigurer() { var corsConfigurer = securityConfiguration.corsConfigurer(); assertThat(corsConfigurer).isInstanceOf(WebMvcConfigurer.class); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/SwaggerCorsConfigurationTest.java b/server/src/test/java/de/ozgcloud/antragsraum/SwaggerCorsConfigurationTest.java index 100fa9c4b6109be7d324d81107e539eef4e3d00e..b52943a4745bc0cb894437002a7d24e075784bcf 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/SwaggerCorsConfigurationTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/SwaggerCorsConfigurationTest.java @@ -21,18 +21,19 @@ */ package de.ozgcloud.antragsraum; -import org.junit.jupiter.api.Test; - import static org.assertj.core.api.Assertions.*; +import org.junit.jupiter.api.Test; + class SwaggerCorsConfigurationTest { - private final SwaggerCorsConfiguration configuration = new SwaggerCorsConfiguration(); - @Test - void shouldCreateCorsFilter() { - var configSource = configuration.corsFilter(); + private final SwaggerCorsConfiguration configuration = new SwaggerCorsConfiguration(); + + @Test + void shouldCreateCorsFilter() { + var configSource = configuration.corsFilter(); - assertThat(configSource).isNotNull(); - } + assertThat(configSource).isNotNull(); + } } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/WebConfigurationTest.java b/server/src/test/java/de/ozgcloud/antragsraum/WebConfigurationTest.java index 75d5c2033bc75fe6fd676e0a1a7568a0107d6b69..a5cad8c14c560fa416bf1e1c6950be1c53138bf8 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/WebConfigurationTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/WebConfigurationTest.java @@ -29,6 +29,7 @@ import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.web.client.RestTemplate; class WebConfigurationTest { + @Test void shouldCreateRestTemplate() { WebConfiguration configuration = new WebConfiguration(); @@ -36,4 +37,5 @@ class WebConfigurationTest { assertThat(template).isNotNull(); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/AntragraumGrpcFileMetadataTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/AntragraumGrpcFileMetadataTestFactory.java index 4506cc650b89cb9b2ca6c0c34b9f31145824736f..47bee689e55b261d618869330dbfc5e1d7dc2fba 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/AntragraumGrpcFileMetadataTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/AntragraumGrpcFileMetadataTestFactory.java @@ -25,6 +25,7 @@ import static de.ozgcloud.antragsraum.attachments.OzgFileTestFactory.*; import de.ozgcloud.antragsraum.proxy.AntragraumGrpcFileMetadata; public class AntragraumGrpcFileMetadataTestFactory { + static AntragraumGrpcFileMetadata create() { var file = new AntragraumGrpcFileMetadata(); file.setContentType(CONTENT_TYPE); @@ -33,4 +34,5 @@ public class AntragraumGrpcFileMetadataTestFactory { return file; } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/AntragraumGrpcGetAttachmentMetadataResponseTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/AntragraumGrpcGetAttachmentMetadataResponseTestFactory.java index 784fa6e1fb2e74ff1a730a3d1cee59f67fbeff23..cbde318ddeb62a353de25626a1483505116fb646 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/AntragraumGrpcGetAttachmentMetadataResponseTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/AntragraumGrpcGetAttachmentMetadataResponseTestFactory.java @@ -28,9 +28,11 @@ import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) class AntragraumGrpcGetAttachmentMetadataResponseTestFactory { + static AntragraumGrpcGetAttachmentMetadataResponse create() { var response = new AntragraumGrpcGetAttachmentMetadataResponse(); response.setFileMetadata(AntragraumGrpcFileMetadataTestFactory.create()); return response; } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileControllerITCase.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileControllerITCase.java index 5be8c6bce51110148ce61c128b48762bac4fc825..ab6e7d610e81a622a73e7c5c7717c406722cea94 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileControllerITCase.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileControllerITCase.java @@ -65,6 +65,7 @@ import de.ozgcloud.antragsraum.common.VirusFoundException; "ozgcloud.upload.blocked-content-types=application/vnd.microsoft.portable-executable" }) public class FileControllerITCase { + @SpyBean private FileController controller; @@ -82,6 +83,7 @@ public class FileControllerITCase { @Nested class TestDownloadingFileContent { + @BeforeEach void init() { when(fileService.getFile(any(FileIdentificationData.class))).thenReturn(OzgFileTestFactory.create()); @@ -92,10 +94,12 @@ public class FileControllerITCase { void shouldGetFileContent() throws Exception { performRequest().andExpect(status().isOk()); } + } @Nested class TestFileNotFoundError { + @BeforeEach void init() { doThrow(NotFoundException.class).when(fileService).getFile(any(FileIdentificationData.class)); @@ -106,10 +110,12 @@ public class FileControllerITCase { void shouldReturn404() throws Exception { performRequest().andExpect(status().isNotFound()); } + } @Nested class TestInternalError { + @Test @WithMockUser void shouldReturn500ByTechnicalException() throws Exception { @@ -125,10 +131,12 @@ public class FileControllerITCase { performRequest().andExpect(status().isInternalServerError()); } + } @Nested class TestNotAcceptable { + @BeforeEach void init() { doThrow(VirusFoundException.class).when(fileService).getFile(any(FileIdentificationData.class)); @@ -139,6 +147,7 @@ public class FileControllerITCase { void shouldReturn406ByVirusFoundException() throws Exception { performRequest().andExpect(status().isNotAcceptable()); } + } ResultActions performRequest() throws Exception { @@ -150,6 +159,7 @@ public class FileControllerITCase { @Nested class TestFileUpload { + private final CompletableFuture<String> fileIdFuture = CompletableFuture.completedFuture(FILE_ID); @BeforeEach @@ -200,5 +210,7 @@ public class FileControllerITCase { .andExpect(request().asyncStarted()) .andReturn(); } + } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileControllerTest.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileControllerTest.java index 7fea74c9db5808ae1514c66bd67118290a541748..00ab3bca340375fc9dffc58798ca3d28f905128d 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileControllerTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileControllerTest.java @@ -45,6 +45,7 @@ import de.ozgcloud.antragsraum.common.InvalidFileTypeException; @ExtendWith(MockitoExtension.class) class FileControllerTest { + @Spy @InjectMocks private FileController fileController; @@ -57,6 +58,7 @@ class FileControllerTest { @Nested class TestGetFileContent { + @BeforeEach void init() { lenient().when(fileService.getFile(any(FileIdentificationData.class))).thenReturn(OzgFileTestFactory.create()); @@ -110,10 +112,12 @@ class FileControllerTest { assertThat(contentDisposition).hasToString("attachment; filename=\"" + FILE_NAME + "\""); } + } @Nested class TestGetFile { + private static final FileIdentificationData FILE_IDENTIFICATION_DATA = FileIdentificationDataTestFactory.create(); @Test @@ -122,10 +126,12 @@ class FileControllerTest { verify(fileService).getFile(FILE_IDENTIFICATION_DATA); } + } @Nested class TestFileUpload { + private final CompletableFuture<String> fileIdFuture = CompletableFuture.completedFuture(FILE_ID); @Mock @@ -143,10 +149,12 @@ class FileControllerTest { verify(fileService).upload(anyString(), anyString(), any(MultipartFile.class)); } + } @Nested class TestFileUploadExceptions { + @Mock private MultipartFile multipartFile; @@ -169,5 +177,7 @@ class FileControllerTest { assertThatExceptionOfType(InvalidFileTypeException.class).isThrownBy( () -> fileController.uploadFile(VORGANG_ID, NACHRICHT_EVENT_ID, multipartFile)); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileControllerTestConfiguration.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileControllerTestConfiguration.java index 006f96223eda9846b73a87120795f8541414d0c1..fd8ee4a3591aa11771c225d90c0223461a77da4d 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileControllerTestConfiguration.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileControllerTestConfiguration.java @@ -48,4 +48,5 @@ public class FileControllerTestConfiguration { RestClient restClient() { return restClientBuilder().build(); } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceITCase.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceITCase.java index 4f8bbbf0b30bda4191a595694ac68b9b090e130b..a516925dbe4259f3e7c2c907e3fe8eeec764fb87 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceITCase.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceITCase.java @@ -42,6 +42,7 @@ import lombok.extern.log4j.Log4j2; @SpringJUnitConfig(classes = { FileRemoteServiceTestConfiguration.class }) @Log4j2 public class FileRemoteServiceITCase { + private static final FileIdentificationData FILE_IDENTIFICATION_DATA = FileIdentificationDataTestFactory.create(); private static final String ADDRESS = "http://localhost:8088"; @@ -62,6 +63,7 @@ public class FileRemoteServiceITCase { fail(e.getMessage()); } } + } @Nested @@ -82,6 +84,7 @@ public class FileRemoteServiceITCase { assertThat(file).isEqualTo(OzgFileTestFactory.create()); } + } @Nested @@ -95,5 +98,7 @@ public class FileRemoteServiceITCase { assertThat(out.size()).isEqualTo(DATA.length); } + } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceTest.java index a519703c1c6ee78029865dbf8aecadc4525e50b9..6fb29ab1e6dd0daa9c9455f7995b72ebd90c865b 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceTest.java @@ -44,6 +44,7 @@ import de.ozgcloud.antragsraum.proxy.AntragraumGrpcFileMetadata; @ExtendWith(MockitoExtension.class) class FileRemoteServiceTest { + private static final FileIdentificationData FILE_IDENTIFICATION_DATA = FileIdentificationDataTestFactory.create(); @Spy @@ -58,6 +59,7 @@ class FileRemoteServiceTest { @Nested class TestLoadingFile { + @BeforeEach void init() { lenient().when(restClient.getFileMetadata(any(FileIdentificationData.class), anyString())).thenReturn( @@ -112,10 +114,12 @@ class FileRemoteServiceTest { assertThat(file).isNull(); } + } @Nested class TestDownloadFileContent { + private final ByteArrayOutputStream output = new ByteArrayOutputStream(); @Test @@ -124,15 +128,19 @@ class FileRemoteServiceTest { verify(restClient).downloadFileContent(eq(FILE_IDENTIFICATION_DATA), eq(CHANNEL_ADDRESS), any(OutputStream.class)); } + } @Nested class TestUploadFile { + @Test void shouldCallRestClient() { remoteService.uploadFile(OzgUploadFileTestFactory.create(), CHANNEL_ADDRESS); verify(restClient).uploadFile(any(OzgUploadFile.class), eq(CHANNEL_ADDRESS), any()); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceTestConfiguration.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceTestConfiguration.java index abbf945050ddad9e86310c2b1525351c4de070a7..daf5380aa2f33a07043103cf3e95bedc55acc157 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceTestConfiguration.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceTestConfiguration.java @@ -38,6 +38,7 @@ import de.ozgcloud.antragsraum.events.NachrichtEventService; classes = { FileControllerTestConfiguration.class, FileController.class, FileRestClientTestConfiguration.class })) @Configuration public class FileRemoteServiceTestConfiguration { + @Bean FileRestClient fileRestClient() { return new StubFileRestClient(); @@ -60,4 +61,5 @@ public class FileRemoteServiceTestConfiguration { @MockBean NachrichtEventService nachrichtEventService; + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRestClientTest.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRestClientTest.java index dc60cc51bac544490fae72ff1bdd86fdfdf46573..8e8e65537102597878a5bf48c581045216031218 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRestClientTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRestClientTest.java @@ -56,6 +56,7 @@ import de.ozgcloud.antragsraum.security.UserTestFactory; @SpringJUnitConfig(classes = { FileRestClientTestConfiguration.class }) @RestClientTest(FileRestClient.class) class FileRestClientTest { + private static final FileIdentificationData FILE_IDENTIFICATION_DATA = FileIdentificationDataTestFactory.create(); static final String ADDRESS = "http://localhost:8382"; @@ -107,6 +108,7 @@ class FileRestClientTest { () -> fileRestClient.getFileMetadata(FILE_IDENTIFICATION_DATA, ADDRESS + GET_FILE_CONTENT_API)); } } + } @Nested @@ -133,6 +135,7 @@ class FileRestClientTest { assertThat(fileId).withFailMessage(NO_FILE_ID_RECEIVED_MESSAGE).isCompletedExceptionally(); } + } @Nested @@ -181,5 +184,7 @@ class FileRestClientTest { mock(ByteArrayOutputStream.class))); } } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRestClientTestConfiguration.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRestClientTestConfiguration.java index 73d964c9b5375a27e8ba58413ea843d2324bb41a..cf12190d48fabd31ab5b7ba131eedb67e2382711 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRestClientTestConfiguration.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRestClientTestConfiguration.java @@ -41,6 +41,7 @@ import de.ozgcloud.antragsraum.events.NachrichtEventService; classes = { FileControllerTestConfiguration.class, FileController.class, FileRemoteServiceTestConfiguration.class })) @Configuration public class FileRestClientTestConfiguration { + @MockBean FileService fileService; diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileServiceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileServiceTest.java index 7abb90873e0ec47906f26a79f3b012e3499cb057..119f61c30282fa7047c45aff9e23ccae74a73df7 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileServiceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileServiceTest.java @@ -47,6 +47,7 @@ import de.ozgcloud.antragsraum.events.NachrichtEventService; import de.ozgcloud.antragsraum.events.NachrichtEventTestFactory; class FileServiceTest { + private static final FileIdentificationData FILE_IDENTIFICATION_DATA = FileIdentificationDataTestFactory.create(); @Spy @@ -64,6 +65,7 @@ class FileServiceTest { @Nested class TestFileUpload { + @Spy private MultipartFile multipartFile = OzgUploadFileTestFactory.MULTIPART_FILE; @@ -72,7 +74,7 @@ class FileServiceTest { when(remoteService.uploadFile(any(OzgUploadFile.class), anyString())).thenReturn( CompletableFuture.completedFuture(FILE_ID)); - when(nachrichtEventService.getNachrichtEventById(NACHRICHT_EVENT_ID)).thenReturn(NachrichtEventTestFactory.createNachrichtEvent()); + when(nachrichtEventService.getNachrichtEventById(NACHRICHT_EVENT_ID)).thenReturn(NachrichtEventTestFactory.create()); } @Test @@ -92,29 +94,33 @@ class FileServiceTest { fail("Exception happened! " + e.getMessage()); } } + } @Nested class TestExceptionWhenSendingFile { + @Spy private final MultipartFile multipartFile = OzgUploadFileTestFactory.MULTIPART_FILE; @Test void shouldThrowTechnicalExceptionOnUpload() { - when(nachrichtEventService.getNachrichtEventById(NACHRICHT_EVENT_ID)).thenReturn(NachrichtEventTestFactory.createNachrichtEvent()); + when(nachrichtEventService.getNachrichtEventById(NACHRICHT_EVENT_ID)).thenReturn(NachrichtEventTestFactory.create()); doThrow(TechnicalException.class).when(remoteService).uploadFile(any(), anyString()); assertThatExceptionOfType(TechnicalException.class).isThrownBy( () -> fileService.upload(VORGANG_ID, NACHRICHT_EVENT_ID, multipartFile)); } + } @Nested class TestLoadingFile { + @BeforeEach void init() { when(remoteService.getFile(any(FileIdentificationData.class), anyString())).thenReturn(OzgFileTestFactory.create()); - when(nachrichtEventService.getNachrichtEventById(NACHRICHT_EVENT_ID)).thenReturn(NachrichtEventTestFactory.createNachrichtEvent()); + when(nachrichtEventService.getNachrichtEventById(NACHRICHT_EVENT_ID)).thenReturn(NachrichtEventTestFactory.create()); } @Test @@ -123,13 +129,15 @@ class FileServiceTest { assertThat(file).isNotNull(); } + } @Nested class TestDownloadingFileContent { + @BeforeEach void init() { - when(nachrichtEventService.getNachrichtEventById(NACHRICHT_EVENT_ID)).thenReturn(NachrichtEventTestFactory.createNachrichtEvent()); + when(nachrichtEventService.getNachrichtEventById(NACHRICHT_EVENT_ID)).thenReturn(NachrichtEventTestFactory.create()); } @Test @@ -138,10 +146,12 @@ class FileServiceTest { verify(remoteService).downloadFileContent(any(FileIdentificationData.class), anyString(), any(OutputStream.class)); } + } @Nested class TestVirusScanning { + @Mock private MultipartFile multipartFile; @@ -152,5 +162,7 @@ class FileServiceTest { assertThatExceptionOfType(VirusFoundException.class).isThrownBy( () -> fileService.createUploadFile(VORGANG_ID, multipartFile)); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileValidatorTest.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileValidatorTest.java index 97ef3384b172d94a275d632bc07c5c5e15c3f4d1..0fdaccce90cb9d55f58d6430b38c0c3b30bca679 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileValidatorTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileValidatorTest.java @@ -36,6 +36,7 @@ import org.springframework.util.unit.DataSize; @ExtendWith(MockitoExtension.class) class FileValidatorTest { + static final MockMultipartFile TEST_FILE = new MockMultipartFile("file", FILE_NAME, CONTENT_TYPE, DATA); static final MockMultipartFile TEST_INVALID_FILE = new MockMultipartFile("file", FILE_NAME, INVALID_CONTENT_TYPE, DATA); static final MockMultipartFile TEST_TOO_LARGE_FILE = new MockMultipartFile("file", FILE_NAME, CONTENT_TYPE, new byte[150_000_000]); @@ -48,6 +49,7 @@ class FileValidatorTest { @Nested class TestFileSizeIsValid { + @BeforeEach void init() { when(fileProperties.getMaxFileSize()).thenReturn(DataSize.ofMegabytes(100)); @@ -66,10 +68,12 @@ class FileValidatorTest { assertThat(result).isFalse(); } + } @Nested class TestFileContentTypeIsValid { + @Test void shouldBeValid() { when(fileProperties.getBlockedContentTypes()).thenReturn(new String[] { INVALID_CONTENT_TYPE }); @@ -94,10 +98,12 @@ class FileValidatorTest { assertThat(result).isFalse(); } + } @Nested class TestIsValid { + @BeforeEach void init() { when(fileProperties.getMaxFileSize()).thenReturn(DataSize.ofMegabytes(100)); @@ -127,5 +133,7 @@ class FileValidatorTest { assertThat(result).isTrue(); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/OzgFileMapperTest.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/OzgFileMapperTest.java index 0bf371ff7788306ad627870860cc620d1de8e438..ba6a55b68a5dee4ffebe276fb80faa5aa5793fcb 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/OzgFileMapperTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/OzgFileMapperTest.java @@ -37,6 +37,7 @@ class OzgFileMapperTest { @Nested class TestMappingGrpcOzgFile { + private final AntragraumGrpcFileMetadata grpcOzgFile = AntragraumGrpcFileMetadataTestFactory.create(); @Test @@ -66,6 +67,7 @@ class OzgFileMapperTest { assertThat(file.id()).isEqualTo(FILE_ID); } + } } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/OzgFileTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/OzgFileTestFactory.java index 97c8a98d5f72da9a2e5c11f5f2fdafaee13cfb35..6411af33509eb604e6c848a7fce9d934e2630886 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/OzgFileTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/OzgFileTestFactory.java @@ -25,6 +25,7 @@ import java.util.UUID; import org.apache.http.entity.ContentType; public class OzgFileTestFactory { + static final String FILE_ID = UUID.randomUUID().toString(); static final String VORGANG_ID = UUID.randomUUID().toString(); static final String CONTENT_TYPE = ContentType.APPLICATION_OCTET_STREAM.toString(); @@ -48,4 +49,5 @@ public class OzgFileTestFactory { .fileSize(FILE_SIZE) .fileName(FILE_NAME); } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/OzgUploadFileTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/OzgUploadFileTestFactory.java index 040bdd6d9660e967369f342433827aed70f0726e..39926754f1a57e1d727d59eb4c9e07007e7fa8f7 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/OzgUploadFileTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/OzgUploadFileTestFactory.java @@ -33,6 +33,7 @@ import org.springframework.http.MediaType; import org.springframework.web.multipart.MultipartFile; public class OzgUploadFileTestFactory { + public final static MultipartFile MULTIPART_FILE = new TestMultipartFile(); static OzgUploadFile create() { @@ -46,6 +47,7 @@ public class OzgUploadFileTestFactory { } static class TestMultipartFile implements MultipartFile { + @Override public @NotNull String getName() { return "test.txt"; @@ -87,5 +89,7 @@ public class OzgUploadFileTestFactory { fos.write(DATA); } } + } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/StubFileRestClient.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/StubFileRestClient.java index 46a80b56b36b90c082fbe3948e98668bb4eeb0c4..613f3657235e2f96a928369f6e7ea0cec2849791 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/StubFileRestClient.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/StubFileRestClient.java @@ -31,6 +31,7 @@ import java.util.concurrent.CompletableFuture; import de.ozgcloud.antragsraum.proxy.AntragraumGrpcGetAttachmentMetadataResponse; class StubFileRestClient extends FileRestClient { + public StubFileRestClient() { super(null); } @@ -50,4 +51,5 @@ class StubFileRestClient extends FileRestClient { throw new RuntimeException(e); } } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/VirusScannerClientTest.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/VirusScannerClientTest.java index 2ffd3a934b5ff641a4b8a27446825eae5193162f..2e28a158933aacf12b6768ab1ab1ea7a978003d5 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/VirusScannerClientTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/VirusScannerClientTest.java @@ -22,11 +22,9 @@ package de.ozgcloud.antragsraum.attachments; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; +import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; @@ -45,78 +43,82 @@ import org.springframework.web.client.RestTemplate; @ExtendWith(MockitoExtension.class) public class VirusScannerClientTest { - private static final String CLAMAV_SCAN_URL = "TestClamAVScanUrl"; - private static final String FILE_NAME = "MockFileName.pdf"; - - @Spy - @InjectMocks - private VirusScannerClient virusScannerClient; - - @Mock - private RestTemplate restTemplate; - - @BeforeEach - void setup() { - ReflectionTestUtils.setField(virusScannerClient, "clamAVScanUrl", CLAMAV_SCAN_URL); - } - - @Nested - class TestVirusScanNotSuccessful { - - @Test - void shouldThrowRuntimeExceptionOnClamAVCall() { - var file = new MockMultipartFile(FILE_NAME, new byte[0]); - var status = HttpStatus.INTERNAL_SERVER_ERROR; - var response = new ResponseEntity<>(VirusScannerClientTestFactory.createVirusScanResponse(), status); - - when(restTemplate.postForEntity(eq(CLAMAV_SCAN_URL), any(HttpEntity.class), - eq(VirusScannerClient.VirusScanResponse.class))).thenReturn(response); - - assertThatExceptionOfType(RuntimeException.class).isThrownBy(() -> virusScannerClient.scan(file)); - } - - @Test - void shouldThrowRuntimeExceptionOnScan() { - var file = new MockMultipartFile(FILE_NAME, new byte[0]); - var status = HttpStatus.OK; - var response = - new ResponseEntity<>(VirusScannerClientTestFactory.createVirusScanResponse(false, false), status); - - when(restTemplate.postForEntity(eq(CLAMAV_SCAN_URL), any(HttpEntity.class), - eq(VirusScannerClient.VirusScanResponse.class))).thenReturn(response); - - assertThatExceptionOfType(RuntimeException.class).isThrownBy(() -> virusScannerClient.scan(file)); - } - } - - @Nested - class TestVirusScanSuccessful { - - @Test - void shouldHaveTwoVirusesInResult() { - var file = new MockMultipartFile(FILE_NAME, new byte[0]); - var status = HttpStatus.OK; - var response = - new ResponseEntity<>(VirusScannerClientTestFactory.createVirusScanResponse(true, true), status); - - when(restTemplate.postForEntity(eq(CLAMAV_SCAN_URL), any(HttpEntity.class), - eq(VirusScannerClient.VirusScanResponse.class))).thenReturn(response); - - var result = virusScannerClient.scan(file); - assertThat(result).hasSize(2); - } - - @Test - void shouldHaveEmptyResult() { - var file = new MockMultipartFile(FILE_NAME, new byte[0]); - var status = HttpStatus.OK; - var response = new ResponseEntity<>(VirusScannerClientTestFactory.createVirusScanResponse(), status); - - when(restTemplate.postForEntity(eq(CLAMAV_SCAN_URL), any(HttpEntity.class), - eq(VirusScannerClient.VirusScanResponse.class))).thenReturn(response); - - var result = virusScannerClient.scan(file); - assertThat(result).isEmpty(); - } - } + + private static final String CLAMAV_SCAN_URL = "TestClamAVScanUrl"; + private static final String FILE_NAME = "MockFileName.pdf"; + + @Spy + @InjectMocks + private VirusScannerClient virusScannerClient; + + @Mock + private RestTemplate restTemplate; + + @BeforeEach + void setup() { + ReflectionTestUtils.setField(virusScannerClient, "clamAVScanUrl", CLAMAV_SCAN_URL); + } + + @Nested + class TestVirusScanNotSuccessful { + + @Test + void shouldThrowRuntimeExceptionOnClamAVCall() { + var file = new MockMultipartFile(FILE_NAME, new byte[0]); + var status = HttpStatus.INTERNAL_SERVER_ERROR; + var response = new ResponseEntity<>(VirusScannerClientTestFactory.createVirusScanResponse(), status); + + when(restTemplate.postForEntity(eq(CLAMAV_SCAN_URL), any(HttpEntity.class), + eq(VirusScannerClient.VirusScanResponse.class))).thenReturn(response); + + assertThatExceptionOfType(RuntimeException.class).isThrownBy(() -> virusScannerClient.scan(file)); + } + + @Test + void shouldThrowRuntimeExceptionOnScan() { + var file = new MockMultipartFile(FILE_NAME, new byte[0]); + var status = HttpStatus.OK; + var response = + new ResponseEntity<>(VirusScannerClientTestFactory.createVirusScanResponse(false, false), status); + + when(restTemplate.postForEntity(eq(CLAMAV_SCAN_URL), any(HttpEntity.class), + eq(VirusScannerClient.VirusScanResponse.class))).thenReturn(response); + + assertThatExceptionOfType(RuntimeException.class).isThrownBy(() -> virusScannerClient.scan(file)); + } + + } + + @Nested + class TestVirusScanSuccessful { + + @Test + void shouldHaveTwoVirusesInResult() { + var file = new MockMultipartFile(FILE_NAME, new byte[0]); + var status = HttpStatus.OK; + var response = + new ResponseEntity<>(VirusScannerClientTestFactory.createVirusScanResponse(true, true), status); + + when(restTemplate.postForEntity(eq(CLAMAV_SCAN_URL), any(HttpEntity.class), + eq(VirusScannerClient.VirusScanResponse.class))).thenReturn(response); + + var result = virusScannerClient.scan(file); + assertThat(result).hasSize(2); + } + + @Test + void shouldHaveEmptyResult() { + var file = new MockMultipartFile(FILE_NAME, new byte[0]); + var status = HttpStatus.OK; + var response = new ResponseEntity<>(VirusScannerClientTestFactory.createVirusScanResponse(), status); + + when(restTemplate.postForEntity(eq(CLAMAV_SCAN_URL), any(HttpEntity.class), + eq(VirusScannerClient.VirusScanResponse.class))).thenReturn(response); + + var result = virusScannerClient.scan(file); + assertThat(result).isEmpty(); + } + + } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/VirusScannerClientTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/VirusScannerClientTestFactory.java index 29809c1e1da9b64940b679d471413bf465392420..3f594577981f32d0f927e0a66cddebac3bd281a8 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/VirusScannerClientTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/VirusScannerClientTestFactory.java @@ -23,25 +23,27 @@ package de.ozgcloud.antragsraum.attachments; class VirusScannerClientTestFactory { - static final String FILE_NAME = "TestFileName.pdf"; - static VirusScannerClient.VirusScanResponse createVirusScanResponse() { - return createVirusScanResponse(true, false); - } + static final String FILE_NAME = "TestFileName.pdf"; - static VirusScannerClient.VirusScanResponse createVirusScanResponse(boolean successful, boolean infected) { - VirusScannerClient.VirusScanResult result = new VirusScannerClient.VirusScanResult(); - result.setName(FILE_NAME); - result.setInfected(infected); - result.setViruses(infected ? new String[] {"VirusA", "VirusB"} : new String[] {}); + static VirusScannerClient.VirusScanResponse createVirusScanResponse() { + return createVirusScanResponse(true, false); + } - VirusScannerClient.VirusScanData data = new VirusScannerClient.VirusScanData(); - data.setResult(new VirusScannerClient.VirusScanResult[] {result}); + static VirusScannerClient.VirusScanResponse createVirusScanResponse(boolean successful, boolean infected) { + VirusScannerClient.VirusScanResult result = new VirusScannerClient.VirusScanResult(); + result.setName(FILE_NAME); + result.setInfected(infected); + result.setViruses(infected ? new String[] { "VirusA", "VirusB" } : new String[] {}); - VirusScannerClient.VirusScanResponse response = new VirusScannerClient.VirusScanResponse(); - response.setData(data); - response.setSuccess(successful); + VirusScannerClient.VirusScanData data = new VirusScannerClient.VirusScanData(); + data.setResult(new VirusScannerClient.VirusScanResult[] { result }); + + VirusScannerClient.VirusScanResponse response = new VirusScannerClient.VirusScanResponse(); + response.setData(data); + response.setSuccess(successful); + + return response; + } - return response; - } } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/AntragraumproxyGrpcCommandTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/command/AntragraumproxyGrpcCommandTestFactory.java index 0221cc6cf0132dfa0ccaacf2f759b8ec3f1a25a1..e0262ceba979d63b5f76a82a8a77a64e67814879 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/AntragraumproxyGrpcCommandTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/AntragraumproxyGrpcCommandTestFactory.java @@ -30,6 +30,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) class AntragraumproxyGrpcCommandTestFactory { + public static final String ID = CommandTestFactory.ID; static final String CREATED_BY = UUID.randomUUID().toString(); static final String STATUS = CommandTestFactory.STATUS; @@ -45,4 +46,5 @@ class AntragraumproxyGrpcCommandTestFactory { command.setStatus(STATUS); return command; } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerITCase.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerITCase.java index c098e33402df2c5f57766133ea662e033f2c11b0..4e35daad68c1c58a6bbf4d5bf02fb9c43b359e3f 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerITCase.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerITCase.java @@ -46,6 +46,7 @@ import de.ozgcloud.antragsraum.events.NachrichtEventTestFactory; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK) @SpringJUnitConfig(classes = { CommandControllerTestConfiguration.class }) public class CommandControllerITCase { + @SpyBean private CommandController commandController; @@ -57,9 +58,10 @@ public class CommandControllerITCase { @Nested class TestGetCommand { + @BeforeEach void init() { - when(commandService.getCommand(CommandTestFactory.ID, NachrichtEventTestFactory.ID)).thenReturn(CommandTestFactory.createCommand()); + when(commandService.getCommand(CommandTestFactory.ID, NachrichtEventTestFactory.ID)).thenReturn(CommandTestFactory.create()); } @Test @@ -96,5 +98,7 @@ public class CommandControllerITCase { get(CommandController.PATH + "/command/" + CommandTestFactory.ID + "/" + NachrichtEventTestFactory.ID) .contentType(MediaType.APPLICATION_JSON).characterEncoding(Charset.defaultCharset())); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerTest.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerTest.java index 4506a65dbd117175714cbb81faa648938dddff2f..ae25cb8b8aff51bff1641b9f5959a4807eb21d37 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerTest.java @@ -37,6 +37,7 @@ import de.ozgcloud.antragsraum.events.NachrichtEventTestFactory; @ExtendWith(MockitoExtension.class) class CommandControllerTest { + @Spy @InjectMocks private CommandController commandController; @@ -46,9 +47,10 @@ class CommandControllerTest { @Nested class TestGetCommand { + @BeforeEach void init() { - when(commandService.getCommand(CommandTestFactory.ID, NachrichtEventTestFactory.ID)).thenReturn(CommandTestFactory.createCommand()); + when(commandService.getCommand(CommandTestFactory.ID, NachrichtEventTestFactory.ID)).thenReturn(CommandTestFactory.create()); } @Test @@ -64,5 +66,7 @@ class CommandControllerTest { assertThat(result).isInstanceOf(Command.class); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerTestConfiguration.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerTestConfiguration.java index a2d0064a158a0e4f45f9e96485a0376792bd06c8..f3d9409416143b4900cbbca3e1c7be1640cbeab5 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerTestConfiguration.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandControllerTestConfiguration.java @@ -39,6 +39,7 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc; classes = { CommandRestClientTestConfiguration.class, CommandRemoteServiceTestConfiguration.class })) @Configuration public class CommandControllerTestConfiguration { + @Bean CommandRestClient commandRestClient() { CommandRestClient restClient = mock(CommandRestClient.class); @@ -48,4 +49,5 @@ public class CommandControllerTestConfiguration { return restClient; } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandMapperTest.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandMapperTest.java index ee9fb45a00233b7a08b60ce17135f73cab983fe3..7b99cc596b8267862aaefd85d478b2be5b250502 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandMapperTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandMapperTest.java @@ -25,47 +25,54 @@ import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; import de.ozgcloud.antragsraum.proxy.AntragraumproxyGrpcCommand; class CommandMapperTest { + + private final CommandMapper mapper = Mappers.getMapper(CommandMapper.class); + @Nested - class TestFromGrpcCommand { - private final AntragraumproxyGrpcCommand restCommand = CommandTestFactory.createRestCommand(); + class TestFromRestCommand { + + private final AntragraumproxyGrpcCommand restCommand = GrpcCommandTestFactory.create(); @Test void shouldMapCommandId() { - var command = CommandMapper.fromRestCommand(restCommand, CommandTestFactory.NACHRICHT_EVENT_ID); + var command = mapper.fromRestCommand(restCommand, CommandTestFactory.NACHRICHT_EVENT_ID); assertThat(command.id()).isEqualTo(CommandTestFactory.ID); } @Test void shouldMapNachrichtEventId() { - var command = CommandMapper.fromRestCommand(restCommand, CommandTestFactory.NACHRICHT_EVENT_ID); + var command = mapper.fromRestCommand(restCommand, CommandTestFactory.NACHRICHT_EVENT_ID); assertThat(command.nachrichtEventId()).isEqualTo(CommandTestFactory.NACHRICHT_EVENT_ID); } @Test void shouldMapStatus() { - var command = CommandMapper.fromRestCommand(restCommand, CommandTestFactory.NACHRICHT_EVENT_ID); + var command = mapper.fromRestCommand(restCommand, CommandTestFactory.NACHRICHT_EVENT_ID); assertThat(command.status()).isEqualTo(CommandTestFactory.STATUS); } @Test void shouldMapCreatedAt() { - var command = CommandMapper.fromRestCommand(restCommand, CommandTestFactory.NACHRICHT_EVENT_ID); + var command = mapper.fromRestCommand(restCommand, CommandTestFactory.NACHRICHT_EVENT_ID); assertThat(command.createdAt()).isEqualTo(CommandTestFactory.CREATED_AT_DATE); } @Test void shouldMapFinishedAt() { - var command = CommandMapper.fromRestCommand(restCommand, CommandTestFactory.NACHRICHT_EVENT_ID); + var command = mapper.fromRestCommand(restCommand, CommandTestFactory.NACHRICHT_EVENT_ID); assertThat(command.finishedAt()).isEqualTo(CommandTestFactory.FINISHED_AT_DATE); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandReferenceTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandReferenceTestFactory.java index 1dfbd06d5d538f4e3bbc9c2037ab6f2e715d0257..76e0b6a45f33470ecd378c5559286536c6e0eb97 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandReferenceTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandReferenceTestFactory.java @@ -24,6 +24,7 @@ package de.ozgcloud.antragsraum.command; import java.util.UUID; public class CommandReferenceTestFactory { + public static final String ID = UUID.randomUUID().toString(); public static final String NACHRICHT_EVENT_ID = UUID.randomUUID().toString(); @@ -36,4 +37,5 @@ public class CommandReferenceTestFactory { .id(ID) .nachrichtEventId(NACHRICHT_EVENT_ID); } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceITCase.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceITCase.java index 180813913c99c8814157a618ce77ca2b1d953ca4..7f4425defaae4bb7f1cceb61b7ddb31c5ec826ad 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceITCase.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceITCase.java @@ -41,6 +41,7 @@ import lombok.extern.log4j.Log4j2; @DirtiesContext @Log4j2 class CommandRemoteServiceITCase { + private static final String ADDRESS = "http://localhost:8080"; @SpyBean @@ -48,7 +49,8 @@ class CommandRemoteServiceITCase { @Nested class TestGetCommand { - private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createNachrichtEventBuilder().address(ADDRESS).build(); + + private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createBuilder().address(ADDRESS).build(); @BeforeEach void setup() { @@ -98,5 +100,7 @@ class CommandRemoteServiceITCase { assertThat(command.finishedAt()).isEqualTo(CommandTestFactory.FINISHED_AT_DATE); } + } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceTest.java index 0e015886e2bf1122a211ccd0ae926e9bdcaf2b83..6dbc661203bd015c6332bbd683f65b45e5bc621d 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceTest.java @@ -36,9 +36,11 @@ import org.mockito.junit.jupiter.MockitoExtension; import de.ozgcloud.antragsraum.common.AddressNotFoundException; import de.ozgcloud.antragsraum.events.NachrichtEventTestFactory; +import de.ozgcloud.antragsraum.proxy.AntragraumproxyGrpcCommand; @ExtendWith(MockitoExtension.class) public class CommandRemoteServiceTest { + @Spy @InjectMocks private CommandRemoteService commandRemoteService; @@ -46,23 +48,30 @@ public class CommandRemoteServiceTest { @Mock private CommandRestClient commandRestClient; + @Mock + private CommandMapper commandMapper; + @Nested class TestGetCommand { + @BeforeEach void init() { - when(commandRestClient.getCommand(anyString(), anyString())).thenReturn(CommandTestFactory.createRestCommand()); + when(commandRestClient.getCommand(anyString(), anyString())).thenReturn(GrpcCommandTestFactory.create()); + when(commandMapper.fromRestCommand(any(AntragraumproxyGrpcCommand.class), anyString())).thenReturn(CommandTestFactory.create()); } @Test void shouldLoadCommand() { - var command = commandRemoteService.getCommand(NachrichtEventTestFactory.createNachrichtEvent(), CommandTestFactory.ID); + var command = commandRemoteService.getCommand(NachrichtEventTestFactory.create(), CommandTestFactory.ID); assertThat(command).isInstanceOf(Command.class); } + } @Nested class TestNoTargetAddressAvailable { + @BeforeEach void init() { doThrow(AddressNotFoundException.class).when(commandRestClient).getCommand(anyString(), anyString()); @@ -70,10 +79,12 @@ public class CommandRemoteServiceTest { @Test void shouldThrowAddressNotFoundException() { - var nachrichtEvent = NachrichtEventTestFactory.createNachrichtEvent(); + var nachrichtEvent = NachrichtEventTestFactory.create(); assertThatExceptionOfType(AddressNotFoundException.class).isThrownBy( () -> commandRemoteService.getCommand(nachrichtEvent, CommandTestFactory.ID)); } + } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceTestConfiguration.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceTestConfiguration.java index 7287f61a8b30a51d20ffb55778b98e0b3d8bd187..644d54ff8bcdf41e5acefcb5ee46d81a6c0fbcbd 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceTestConfiguration.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceTestConfiguration.java @@ -40,7 +40,8 @@ public class CommandRemoteServiceTestConfiguration { private NachrichtEventService nachrichtEventService; @Bean - CommandRemoteService commandRemoteService(@Autowired CommandRestClient commandRestClient) { - return new CommandRemoteService(commandRestClient); + CommandRemoteService commandRemoteService(@Autowired CommandRestClient commandRestClient, @Autowired CommandMapper commandMapper) { + return new CommandRemoteService(commandRestClient, commandMapper); } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRestClientTest.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRestClientTest.java index 0a99eff18ed770c6f34b8d255f3542aede8d704d..119ecda83dff1969b4d40dd34a62621d6c9f9d74 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRestClientTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRestClientTest.java @@ -44,6 +44,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; @SpringJUnitConfig(classes = { CommandRestClientTestConfiguration.class }) @RestClientTest(CommandRestClient.class) class CommandRestClientTest { + final static String ADDRESS = "http://localhost:8382"; private static final String COMMAND_ID = UUID.randomUUID().toString(); @@ -76,4 +77,5 @@ class CommandRestClientTest { assertThat(command.getId()).isEqualTo(AntragraumproxyGrpcCommandTestFactory.ID); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandServiceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandServiceTest.java index 9b92ed59efcc385dc9ce8058e79af86d101e962e..9e4fff94316261f2d5fdb6ca5d4d17b37ea3e066 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandServiceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandServiceTest.java @@ -39,6 +39,7 @@ import de.ozgcloud.antragsraum.events.NachrichtEventTestFactory; @ExtendWith(MockitoExtension.class) class CommandServiceTest { + @Spy @InjectMocks private CommandService commandService; @@ -49,11 +50,12 @@ class CommandServiceTest { @Nested class TestGetCommand { + @BeforeEach void init() { - final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createNachrichtEvent(); + final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.create(); when(nachrichtEventService.getNachrichtEventById(NachrichtEventTestFactory.ID)).thenReturn(nachrichtEvent); - when(commandRemoteService.getCommand(nachrichtEvent, CommandTestFactory.ID)).thenReturn(CommandTestFactory.createCommand()); + when(commandRemoteService.getCommand(nachrichtEvent, CommandTestFactory.ID)).thenReturn(CommandTestFactory.create()); } @Test @@ -62,5 +64,7 @@ class CommandServiceTest { assertThat(result).isInstanceOf(Command.class); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandTestFactory.java index d76c60e82c839b8f2c17037e00d80ee653826ec0..b732c1bbf7491761ca74909b78254395b48ee26c 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandTestFactory.java @@ -24,9 +24,8 @@ package de.ozgcloud.antragsraum.command; import java.time.ZonedDateTime; import java.util.UUID; -import de.ozgcloud.antragsraum.proxy.AntragraumproxyGrpcCommand; - public class CommandTestFactory { + public static final String ID = UUID.randomUUID().toString(); static final String NACHRICHT_EVENT_ID = UUID.randomUUID().toString(); static final String STATUS = "FINISHED"; @@ -35,11 +34,11 @@ public class CommandTestFactory { static final String FINISHED_AT = "2024-06-24T08:10:13.076Z"; static final long FINISHED_AT_DATE = ZonedDateTime.parse(FINISHED_AT).toEpochSecond() * 1000; - static Command createCommand() { - return createCommandBuilder().build(); + static Command create() { + return createBuilder().build(); } - static Command.CommandBuilder createCommandBuilder() { + static Command.CommandBuilder createBuilder() { return Command.builder() .id(ID) .nachrichtEventId(NACHRICHT_EVENT_ID) @@ -48,12 +47,4 @@ public class CommandTestFactory { .finishedAt(FINISHED_AT_DATE); } - public static AntragraumproxyGrpcCommand createRestCommand() { - var command = new AntragraumproxyGrpcCommand(); - command.setId(ID); - command.setStatus(STATUS); - command.setCreatedAt(CREATED_AT); - command.setFinishedAt(FINISHED_AT); - return command; - } } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/common/SendTimeoutException.java b/server/src/test/java/de/ozgcloud/antragsraum/command/GrpcCommandTestFactory.java old mode 100755 new mode 100644 similarity index 70% rename from server/src/main/java/de/ozgcloud/antragsraum/common/SendTimeoutException.java rename to server/src/test/java/de/ozgcloud/antragsraum/command/GrpcCommandTestFactory.java index 88db4a8b78b738b2ecddffd6c43a4d703e40ddf1..94d697dc208efbb84e888c3bafe256bacc704462 --- a/server/src/main/java/de/ozgcloud/antragsraum/common/SendTimeoutException.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/GrpcCommandTestFactory.java @@ -19,13 +19,18 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ +package de.ozgcloud.antragsraum.command; -package de.ozgcloud.antragsraum.common; +import de.ozgcloud.antragsraum.proxy.AntragraumproxyGrpcCommand; -public class SendTimeoutException extends RuntimeException { - private static final String MESSAGE_TEMPLATE = "A timeout sending a nachricht happened. Command %s did not finish in time! Message: %s"; +public class GrpcCommandTestFactory { + + public static AntragraumproxyGrpcCommand create() { + return new AntragraumproxyGrpcCommand() + .id(CommandTestFactory.ID) + .status(CommandTestFactory.STATUS) + .createdAt(CommandTestFactory.CREATED_AT) + .finishedAt(CommandTestFactory.FINISHED_AT); + } - public SendTimeoutException(String commandId, Throwable ex) { - super(String.format(MESSAGE_TEMPLATE, commandId, ex.getMessage()), ex); - } } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/common/AddressNotFoundExceptionTest.java b/server/src/test/java/de/ozgcloud/antragsraum/common/AddressNotFoundExceptionTest.java index 91ea19e6768b7ac0053a1806e8e7a276eef50224..b8c3673735227e6794ed440dcf942720df7f54d0 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/common/AddressNotFoundExceptionTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/common/AddressNotFoundExceptionTest.java @@ -29,6 +29,7 @@ import java.util.UUID; import org.junit.jupiter.api.Test; class AddressNotFoundExceptionTest { + @Test void shouldCreateException() { var id = UUID.randomUUID().toString(); @@ -36,4 +37,5 @@ class AddressNotFoundExceptionTest { assertThat(exception.getMessage()).isEqualTo("No NachrichtEvent for id '" + id + "' found"); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/common/ExceptionControllerTest.java b/server/src/test/java/de/ozgcloud/antragsraum/common/ExceptionControllerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..ef54f0c33aaa737db155c9d91557b689fcdedd56 --- /dev/null +++ b/server/src/test/java/de/ozgcloud/antragsraum/common/ExceptionControllerTest.java @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ + +package de.ozgcloud.antragsraum.common; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.Nested; +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.jupiter.MockitoExtension; +import org.springframework.http.HttpStatus; +import org.springframework.web.context.request.WebRequest; + +@ExtendWith(MockitoExtension.class) +public class ExceptionControllerTest { + + @InjectMocks + private ExceptionController exceptionController; + + @Nested + class TestHandleAddressNotFoundException { + + @Mock + private AddressNotFoundException exception; + + @Test + void shouldReturnMessage() { + var message = exceptionController.handleAddressNotFoundException(exception); + + assertThat(message).isNotNull(); + } + + } + + @Nested + class TestHandleNotFoundException { + + @Mock + private NotFoundException exception; + + @Test + void shouldReturnMessage() { + var message = exceptionController.handleNotFoundException(exception); + + assertThat(message).isNotNull(); + } + + } + + @Nested + class TestHandleGeneralException { + + @Mock + private TechnicalException exception; + + @Test + void shouldReturnMessage() { + var message = exceptionController.handleGeneralException(exception); + + assertThat(message).isNotNull(); + } + + } + + @Nested + class TestHandleInvalidFileTypeException { + + @Mock + private InvalidFileTypeException exception; + + @Mock + private WebRequest webRequest; + + @Test + void shouldHaveResponse() { + var response = exceptionController.handleInvalidFileTypeException(exception, webRequest); + + assertThat(response).isNotNull(); + } + + @Test + void shouldHaveNotAcceptableError() { + var response = exceptionController.handleInvalidFileTypeException(exception, webRequest); + + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.NOT_ACCEPTABLE); + } + + @Test + void shouldHaveMessage() { + var response = exceptionController.handleInvalidFileTypeException(exception, webRequest); + + assertThat(response.getBody()).isEqualTo("File not acceptable"); + } + + } + + @Nested + class TestHandleVirusFoundException { + + @Mock + private VirusFoundException exception; + + @Mock + private WebRequest webRequest; + + @Test + void shouldHaveResponse() { + var response = exceptionController.handleVirusFoundException(exception, webRequest); + + assertThat(response).isNotNull(); + } + + @Test + void shouldHaveNotAcceptableError() { + var response = exceptionController.handleVirusFoundException(exception, webRequest); + + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.NOT_ACCEPTABLE); + } + + @Test + void shouldHaveMessage() { + var response = exceptionController.handleVirusFoundException(exception, webRequest); + + assertThat(response.getBody()).isEqualTo("Virus found"); + } + + } + +} diff --git a/server/src/test/java/de/ozgcloud/antragsraum/common/SendTimeoutExceptionTest.java b/server/src/test/java/de/ozgcloud/antragsraum/common/InvalidFileTypeExceptionTest.java old mode 100755 new mode 100644 similarity index 58% rename from server/src/test/java/de/ozgcloud/antragsraum/common/SendTimeoutExceptionTest.java rename to server/src/test/java/de/ozgcloud/antragsraum/common/InvalidFileTypeExceptionTest.java index 214bd6489c4373acab84799313461113b57c2cb2..22080cff4396d21d72d38f5fbb321bf97e872c31 --- a/server/src/test/java/de/ozgcloud/antragsraum/common/SendTimeoutExceptionTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/common/InvalidFileTypeExceptionTest.java @@ -1,6 +1,6 @@ /* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * Copyright (c) 2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. * * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - @@ -19,21 +19,21 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ + package de.ozgcloud.antragsraum.common; -import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.*; -import java.util.UUID; +import org.junit.jupiter.api.Test; -import static org.assertj.core.api.Assertions.*; +class InvalidFileTypeExceptionTest { -class SendTimeoutExceptionTest { + @Test + void shouldCreateException() { + var fileName = "TestFileName.txt"; + var exception = new InvalidFileTypeException(fileName); - @Test - void shouldCreateException() { - var id = UUID.randomUUID().toString(); - var exception = new SendTimeoutException(id, new RuntimeException("test")); + assertThat(exception.getMessage()).isEqualTo("File '" + fileName + "' has an unsupported file type"); + } - assertThat(exception.getMessage()).isEqualTo("A timeout sending a nachricht happened. Command " + id + " did not finish in time! Message: test"); - } } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/common/NotAccessibleExceptionTest.java b/server/src/test/java/de/ozgcloud/antragsraum/common/NotAccessibleExceptionTest.java index 1c92b68d628b88f86c5b02d2c430d7b2e76298ec..4a12239c858106bf36abb41620d65c6172e3bcee 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/common/NotAccessibleExceptionTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/common/NotAccessibleExceptionTest.java @@ -28,6 +28,7 @@ import java.util.UUID; import org.junit.jupiter.api.Test; class NotAccessibleExceptionTest { + @Test void shouldCreateException() { var rueckfrageId = UUID.randomUUID().toString(); @@ -36,4 +37,5 @@ class NotAccessibleExceptionTest { assertThat(exception.getMessage()).isEqualTo( "Current user does not have the required trust level for the Rueckfrage with id '" + rueckfrageId + "'."); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/common/NotFoundExceptionTest.java b/server/src/test/java/de/ozgcloud/antragsraum/common/NotFoundExceptionTest.java index d2837d49881c9e4664d6c488742b7bdc31691ec5..e9d06570fb61c928367a306ab8213e809eb072a5 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/common/NotFoundExceptionTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/common/NotFoundExceptionTest.java @@ -1,6 +1,6 @@ /* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. * * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - @@ -21,18 +21,20 @@ */ package de.ozgcloud.antragsraum.common; -import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.*; import java.util.UUID; -import static org.assertj.core.api.Assertions.*; +import org.junit.jupiter.api.Test; class NotFoundExceptionTest { - @Test - void shouldCreateException() { - var id = UUID.randomUUID().toString(); - var exception = new NotFoundException(String.class, id); - assertThat(exception.getMessage()).isEqualTo("Object 'String' with id '" + id + "' not found."); - } + @Test + void shouldCreateException() { + var id = UUID.randomUUID().toString(); + var exception = new NotFoundException(String.class, id); + + assertThat(exception.getMessage()).isEqualTo("Object 'String' with id '" + id + "' not found."); + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/common/RestClientUtilsTest.java b/server/src/test/java/de/ozgcloud/antragsraum/common/RestClientUtilsTest.java index f5aace46e9de92e679393dd642abc16448a8e799..cf2495fb69dde5b67935ef59cb204fd79c9b957b 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/common/RestClientUtilsTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/common/RestClientUtilsTest.java @@ -26,24 +26,19 @@ import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Spy; - -import de.ozgcloud.antragsraum.nachricht.NachrichtenRestClient; class RestClientUtilsTest { - @Spy - @InjectMocks - private NachrichtenRestClient restClient; @Nested class TestGrpcAddressSanitizer { + @Test void shouldSanitizeAddress() { var address = RestClientUtils.sanitizeAddress("static://localhost:9090"); assertThat(address).isEqualTo("localhost"); } + } } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/common/TechnicalExceptionTest.java b/server/src/test/java/de/ozgcloud/antragsraum/common/TechnicalExceptionTest.java index 44ed5387a84695c615d5c30433a08991f3994834..83e4e79c4446bc587ab803f25296e90452cdb3cf 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/common/TechnicalExceptionTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/common/TechnicalExceptionTest.java @@ -39,4 +39,5 @@ class TechnicalExceptionTest { assertThat(exception.getMessage()).isEqualTo("TechnicalException happened! Message: " + MESSAGE); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/common/SecurityExceptionAdviceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/common/VirusFoundExceptionTest.java similarity index 64% rename from server/src/test/java/de/ozgcloud/antragsraum/common/SecurityExceptionAdviceTest.java rename to server/src/test/java/de/ozgcloud/antragsraum/common/VirusFoundExceptionTest.java index 36be2b73108e9f4aa4d2d63fab7967d25e08f033..820a0ee56a095ac79173328e735243335d384cc9 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/common/SecurityExceptionAdviceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/common/VirusFoundExceptionTest.java @@ -1,5 +1,7 @@ /* - * Copyright (c) 2024. + * Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. + * * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - * Folgeversionen der EUPL ("Lizenz"); @@ -17,23 +19,22 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ - package de.ozgcloud.antragsraum.common; -import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.*; import java.util.UUID; -import static org.assertj.core.api.Assertions.*; +import org.junit.jupiter.api.Test; -class SecurityExceptionAdviceTest { - @Test - void shouldCreateException() { - var message = UUID.randomUUID().toString(); +class VirusFoundExceptionTest { - var exception = new SecurityException(message, new RuntimeException("test")); + @Test + void shouldCreateException() { + var id = UUID.randomUUID().toString(); + var exception = new VirusFoundException(id); - assertThat(exception.getMessage()).isEqualTo(message); - } + assertThat(exception.getMessage()).isEqualTo("File with nachrichtId '" + id + "' contains virus."); + } } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/common/VirusScanExceptionTest.java b/server/src/test/java/de/ozgcloud/antragsraum/common/VirusScanExceptionTest.java index 340b6336c0b7b29554fbb7630c5f151df077f519..0d5515b02cc1c3d7162ac93a1e5395d72eb4df24 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/common/VirusScanExceptionTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/common/VirusScanExceptionTest.java @@ -1,6 +1,6 @@ /* - * Copyright (c) 2023-2024. - * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. * * Lizenziert unter der EUPL, Version 1.2 oder - sobald * diese von der Europäischen Kommission genehmigt wurden - @@ -26,6 +26,7 @@ import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.Test; class VirusScanExceptionTest { + @Test void shouldCreateException() { var fileName = "TestFileName.pdf"; @@ -33,4 +34,5 @@ class VirusScanExceptionTest { assertThat(exception.getMessage()).isEqualTo("Virus scan for file with name '" + fileName + "' failed."); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/events/GrpcInformationByIdResponseFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/events/GrpcInformationByIdResponseFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..c61f9b60854907b6736a9e93690910bdc8a6dafb --- /dev/null +++ b/server/src/test/java/de/ozgcloud/antragsraum/events/GrpcInformationByIdResponseFactory.java @@ -0,0 +1,14 @@ +package de.ozgcloud.antragsraum.events; + +import de.ozgcloud.antragsraum.proxy.InfoGrpcInformationByIdResponse; +import de.ozgcloud.antragsraum.proxy.InfoGrpcInformationNachricht; + +public class GrpcInformationByIdResponseFactory { + + private static final InfoGrpcInformationNachricht NACHRICHT = GrpcNachrichtEventTestFactory.create(); + + public static InfoGrpcInformationByIdResponse create() { + return new InfoGrpcInformationByIdResponse().nachricht(NACHRICHT); + } + +} diff --git a/server/src/test/java/de/ozgcloud/antragsraum/events/GrpcInformationResponseTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/events/GrpcInformationResponseTestFactory.java index 59dc4743b931a483a30ed9e8d7fa33f141f15e45..6ef03e4c8dab40a8b044266620a9744961d77482 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/events/GrpcInformationResponseTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/events/GrpcInformationResponseTestFactory.java @@ -7,11 +7,10 @@ import de.ozgcloud.antragsraum.proxy.InfoGrpcInformationResponse; public class GrpcInformationResponseTestFactory { - public static final InfoGrpcInformationNachricht NACHRICHT = NachrichtEventTestFactory.createInfoGrpcInformationNachricht(); + public static final InfoGrpcInformationNachricht NACHRICHT = GrpcNachrichtEventTestFactory.create(); - public static InfoGrpcInformationResponse createResponse() { - var response = new InfoGrpcInformationResponse(); - response.setNachrichten(List.of(NACHRICHT)); - return response; + public static InfoGrpcInformationResponse create() { + return new InfoGrpcInformationResponse().nachrichten(List.of(NACHRICHT)); } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/events/GrpcNachrichtEventTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/events/GrpcNachrichtEventTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..705e6c80ec9cbe2c9e09c8712e40994adf286eb3 --- /dev/null +++ b/server/src/test/java/de/ozgcloud/antragsraum/events/GrpcNachrichtEventTestFactory.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.antragsraum.events; + +import de.ozgcloud.antragsraum.proxy.InfoGrpcInformationNachricht; + +public class GrpcNachrichtEventTestFactory { + + public static InfoGrpcInformationNachricht create() { + return new InfoGrpcInformationNachricht() + .id(NachrichtEventTestFactory.ID) + .postfachId(NachrichtEventTestFactory.POSTFACH_ID) + .ozgCloudAddress(NachrichtEventTestFactory.URL); + } + +} \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventMapperTest.java b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventMapperTest.java index 0ccc15a580aae511ed6ce9fc3d10407fd19f8dd6..d2c430da11105b66e65f56ae9813ae96dfb8f523 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventMapperTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventMapperTest.java @@ -38,13 +38,15 @@ class NachrichtEventMapperTest { @Nested class TestFromGrpc { - private final InfoGrpcInformationNachricht grpcInformationNachricht = NachrichtEventTestFactory.createInfoGrpcInformationNachricht(); + private final InfoGrpcInformationNachricht grpcInformationNachricht = GrpcNachrichtEventTestFactory.create(); @Test void shouldMap() { var mapped = mapper.fromRest(grpcInformationNachricht); - assertThat(mapped).usingRecursiveComparison().isEqualTo(NachrichtEventTestFactory.createNachrichtEvent()); + assertThat(mapped).usingRecursiveComparison().isEqualTo(NachrichtEventTestFactory.create()); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteServiceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteServiceTest.java index e6684256bb43cb6465e6450842be9b1dd7f6fe46..1ff63c3ecea529fab068cd1d2b064e4c0dc31760 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteServiceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteServiceTest.java @@ -46,11 +46,11 @@ class NachrichtEventRemoteServiceTest { @Nested class TestGetNachrichtEventById { - private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createNachrichtEvent(); + private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.create(); @BeforeEach void init() { - when(restClient.getNachrichtEventById(any())).thenReturn(RestInformationByIdResponseTestFactory.createResponse()); + when(restClient.getNachrichtEventById(any())).thenReturn(GrpcInformationByIdResponseFactory.create()); when(mapper.fromRest(any())).thenReturn(nachrichtEvent); } @@ -74,17 +74,18 @@ class NachrichtEventRemoteServiceTest { assertThat(mappedResult).usingRecursiveComparison().isEqualTo(nachrichtEvent); } + } @DisplayName("Get nachricht events by postfach") @Nested class TestGetNachrichtEventsByPostfach { - private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createNachrichtEvent(); + private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.create(); @BeforeEach void mock() { - when(restClient.getNachrichtEventsByPostfach(any())).thenReturn(GrpcInformationResponseTestFactory.createResponse()); + when(restClient.getNachrichtEventsByPostfach(any())).thenReturn(GrpcInformationResponseTestFactory.create()); when(mapper.fromRest(any())).thenReturn(nachrichtEvent); } @@ -108,5 +109,7 @@ class NachrichtEventRemoteServiceTest { assertThat(mappedResult).containsExactly(nachrichtEvent); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteTestConfiguration.java b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteTestConfiguration.java index 72c0ab4ef8cb2a8c4b1cda87388df3ba6dd60ac3..04a7983d484f0c1e041971456cdda0593a080c04 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteTestConfiguration.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteTestConfiguration.java @@ -27,10 +27,12 @@ import org.springframework.context.annotation.Configuration; @Configuration public class NachrichtEventRemoteTestConfiguration { + @Bean NachrichtEventRemoteService nachrichtEventRemoteService() { var restClient = mock(NachrichtEventRestClient.class); var mapper = Mappers.getMapper(NachrichtEventMapper.class); return new NachrichtEventRemoteService(restClient, mapper); } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRestClientTest.java b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRestClientTest.java index 0d37e26a2e7c5bde4d6da3f316b9def879d60629..26e627ccd1db40717bd49aec8e90caa0a43db766 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRestClientTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRestClientTest.java @@ -32,7 +32,7 @@ class NachrichtEventRestClientTest { @Nested class TestGetNachrichtEventsByPostfach { - private final InfoGrpcInformationResponse grpcResponse = GrpcInformationResponseTestFactory.createResponse(); + private final InfoGrpcInformationResponse grpcResponse = GrpcInformationResponseTestFactory.create(); @BeforeEach void init() { @@ -53,13 +53,14 @@ class NachrichtEventRestClientTest { assertThat(response).isEqualTo(grpcResponse); } + } @DisplayName("Get nachricht event by id") @Nested class TestGetNachrichtEventById { - private final InfoGrpcInformationByIdResponse grpcResponse = RestInformationByIdResponseTestFactory.createResponse(); + private final InfoGrpcInformationByIdResponse grpcResponse = GrpcInformationByIdResponseFactory.create(); @BeforeEach void init() { @@ -80,6 +81,7 @@ class NachrichtEventRestClientTest { assertThat(response).isEqualTo(grpcResponse); } + } @DisplayName("Build get request") @@ -105,5 +107,7 @@ class NachrichtEventRestClientTest { void shouldThrowException() { assertThrows(TechnicalException.class, () -> nachrichtClient.get("dummyEndpoint", Object.class)); } + } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventServiceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventServiceTest.java index fe45a7e063048647eaf6266f917062b25c631e8e..f19915d0882726613fea6480ee74c919654d2359 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventServiceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventServiceTest.java @@ -34,6 +34,7 @@ import de.ozgcloud.antragsraum.nachricht.NachrichtTestFactory; @ExtendWith(MockitoExtension.class) class NachrichtEventServiceTest { + @Spy @InjectMocks private NachrichtEventService service; @@ -53,4 +54,5 @@ class NachrichtEventServiceTest { verify(remoteService).getNachrichtEventById(anyString()); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventTestFactory.java index f316fb7afa0971e94fe74d0f228f5bbfd333c17f..b69044983c5669f25199ab0e567e513b249d7043 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventTestFactory.java @@ -23,29 +23,21 @@ package de.ozgcloud.antragsraum.events; import java.util.UUID; -import de.ozgcloud.antragsraum.proxy.InfoGrpcInformationNachricht; - public class NachrichtEventTestFactory { + public static final String ID = UUID.randomUUID().toString(); public static final String POSTFACH_ID = UUID.randomUUID().toString(); public static final String URL = "http://localhost"; - public static NachrichtEvent createNachrichtEvent() { - return createNachrichtEventBuilder().build(); + public static NachrichtEvent create() { + return createBuilder().build(); } - public static NachrichtEvent.NachrichtEventBuilder createNachrichtEventBuilder() { + public static NachrichtEvent.NachrichtEventBuilder createBuilder() { return NachrichtEvent.builder() .id(ID) .postfachId(POSTFACH_ID) .address(URL); } - public static InfoGrpcInformationNachricht createInfoGrpcInformationNachricht() { - var nachricht = new InfoGrpcInformationNachricht(); - nachricht.setId(ID); - nachricht.setPostfachId(POSTFACH_ID); - nachricht.setOzgCloudAddress(URL); - return nachricht; - } } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/events/RestInformationByIdResponseTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/events/RestInformationByIdResponseTestFactory.java deleted file mode 100644 index 387f0db15c112b5aada5071ea7ae33ee9b841954..0000000000000000000000000000000000000000 --- a/server/src/test/java/de/ozgcloud/antragsraum/events/RestInformationByIdResponseTestFactory.java +++ /dev/null @@ -1,19 +0,0 @@ -package de.ozgcloud.antragsraum.events; - -import de.ozgcloud.antragsraum.proxy.InfoGrpcInformationByIdResponse; -import de.ozgcloud.antragsraum.proxy.InfoGrpcInformationNachricht; - -public class RestInformationByIdResponseTestFactory { - - private static final InfoGrpcInformationNachricht NACHRICHT = NachrichtEventTestFactory.createInfoGrpcInformationNachricht(); - - public static InfoGrpcInformationByIdResponse createResponse() { - return createInfoGrpcInformationByIdResponse(); - } - - public static InfoGrpcInformationByIdResponse createInfoGrpcInformationByIdResponse() { - var response = new InfoGrpcInformationByIdResponse(); - response.setNachricht(NACHRICHT); - return response; - } -} diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/AntragraumProxyMapperTest.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/AntragraumProxyMapperTest.java index 66cad5b1ef50dceb4e8677734614761e580d057e..9bcffac2907f1b7ad766d475fea0268eb5ca759f 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/AntragraumProxyMapperTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/AntragraumProxyMapperTest.java @@ -36,6 +36,7 @@ class AntragraumProxyMapperTest { @Nested class TestToRestProxyAntwort { + private final ReplyNachricht replyNachricht = ReplyNachrichtTestFactory.create(); @Test @@ -58,6 +59,7 @@ class AntragraumProxyMapperTest { assertThat(grpcRueckfrageAnswer.getAttachmentFileId()).isEqualTo(Collections.emptyList()); } + } } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/AntragraumproxyGrpcRueckfrageTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/AntragraumproxyGrpcRueckfrageTestFactory.java index 7d85279f39764541af9e381c0d3447f844840277..65859bb2856f3803b7fc13c712349886a89d7f9a 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/AntragraumproxyGrpcRueckfrageTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/AntragraumproxyGrpcRueckfrageTestFactory.java @@ -36,6 +36,7 @@ import de.ozgcloud.antragsraum.proxy.AntragraumproxyGrpcRueckfrageHead; import de.ozgcloud.antragsraum.proxy.AntragraumproxyGrpcSendRueckfrageAnswerResponse; public class AntragraumproxyGrpcRueckfrageTestFactory { + public static final String RUECKFRAGE_ID = UUID.randomUUID().toString(); public static final String VORGANG_ID = UUID.randomUUID().toString(); public static final String VORGANG_NAME = NachrichtTestFactory.VORGANG_TITLE; @@ -124,4 +125,5 @@ public class AntragraumproxyGrpcRueckfrageTestFactory { response.setCommandId(CommandTestFactory.ID); return response; } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/AttachmentMapperTest.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/AttachmentMapperTest.java index 9a1efc4633fcbf52c99b344deac883e20bc1f455..5207a7bc5cb9a7c0d8acd1084ed8f3e34202ebd5 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/AttachmentMapperTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/AttachmentMapperTest.java @@ -32,6 +32,7 @@ import org.junit.jupiter.api.Test; import de.ozgcloud.vorgang.grpc.binaryFile.GrpcBinaryFile; class AttachmentMapperTest { + static final String ID = UUID.randomUUID().toString(); static final String CONTENT_TYPE = ContentType.APPLICATION_OCTET_STREAM.toString(); static final long FILE_SIZE = 10; @@ -46,6 +47,7 @@ class AttachmentMapperTest { @Nested class MapFromGrpcBinaryFile { + @Test void shouldMapAttachment() { var res = AttachmentMapper.fromGrpcBinaryFile(file); @@ -80,5 +82,7 @@ class AttachmentMapperTest { assertThat(res).isEqualTo(CONTENT_TYPE); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtHeaderMapperTest.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtHeaderMapperTest.java index a32975ad800ab85abcd0415ee39fe70899b814d0..a20f76e228bd65ab6b79f917be15fb39531a6129 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtHeaderMapperTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtHeaderMapperTest.java @@ -28,6 +28,7 @@ import org.junit.jupiter.api.Test; import de.ozgcloud.antragsraum.proxy.AntragraumproxyGrpcRueckfrageHead; class NachrichtHeaderMapperTest { + private final AntragraumproxyGrpcRueckfrageHead rueckfrageHead = AntragraumproxyGrpcRueckfrageTestFactory.createRueckfrageHead(); @Test @@ -101,4 +102,5 @@ class NachrichtHeaderMapperTest { assertThat(nachrichtHeader.status()).isEqualTo(AntragraumproxyGrpcRueckfrageTestFactory.STATUS); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapperTest.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapperTest.java index 8b70b50ce731fb640bbb99052b63ebfeb34e5808..dfaf66c36cd42c7072d9014abd518d175a2d8564 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapperTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapperTest.java @@ -43,6 +43,7 @@ import de.ozgcloud.antragsraum.proxy.AntragraumproxyGrpcRueckfrage; @ExtendWith(MockitoExtension.class) class NachrichtMapperTest { + @Mock private FileService fileService; @@ -60,6 +61,7 @@ class NachrichtMapperTest { @Nested class TestFromRestRueckfrage { + private final AntragraumproxyGrpcRueckfrage rueckfrage = AntragraumproxyGrpcRueckfrageTestFactory.createRueckfrage(); private final AntragraumproxyGrpcRueckfrage answeredRueckfrage = AntragraumproxyGrpcRueckfrageTestFactory.createRueckfrageWithReply(); @@ -213,10 +215,12 @@ class NachrichtMapperTest { assertThat(nachricht.status()).isEqualTo(NachrichtTestFactory.STATUS); } + } @Nested class TestToGrpcRueckfrageAnswer { + @Test void shouldMapNachrichtText() { var nachricht = mapper.toRestRueckfrageAnswer(ReplyNachrichtTestFactory.create()); @@ -249,5 +253,7 @@ class NachrichtMapperTest { assertThat(nachricht.attachments()).isEmpty(); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtServiceTestConfiguration.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtServiceTestConfiguration.java index 69b632c38601e06fb675ec4a35cd2d301b1d375a..bf821c3cea0f3fb24599077c620aab157eaf00c1 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtServiceTestConfiguration.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtServiceTestConfiguration.java @@ -42,6 +42,7 @@ import de.ozgcloud.antragsraum.WebConfiguration; NachrichtenControllerTestConfiguration.class })) @Configuration public class NachrichtServiceTestConfiguration { + @Bean(name = WebConfiguration.NACHRICHT_REST_CLIENT) public RestClient restClient() { return RestClient.builder() @@ -53,4 +54,5 @@ public class NachrichtServiceTestConfiguration { public Validator defaultValidator() { return new LocalValidatorFactoryBean(); } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtTest.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtTest.java index 200b613a84fa15bcc10bd25b3685b304af9b3fc2..d13a2cfd5b62bc8f8f2d50f156da37072d0c11a8 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtTest.java @@ -27,6 +27,7 @@ import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.Test; class NachrichtTest { + private final Nachricht nachricht = NachrichtTestFactory.createNachricht(); @Test @@ -35,4 +36,5 @@ class NachrichtTest { assertThat(nachrichtString).doesNotContain(NachrichtTestFactory.TEXT); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtTestFactory.java index a90b4c4b403ca74a37ef03cff5f5f75b7305fef4..36e7504b6c28b253434f955d7623be7f866160ef 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtTestFactory.java @@ -27,6 +27,7 @@ import java.util.List; import java.util.UUID; public class NachrichtTestFactory { + public static final String ID = UUID.randomUUID().toString(); public static final String NACHRICHT_EVENT_ID = UUID.randomUUID().toString(); public static final String POSTFACH_ID = UUID.randomUUID().toString(); @@ -89,4 +90,5 @@ public class NachrichtTestFactory { .accessible(ACCESSIBLE) .status(STATUS); } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenControllerITCase.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenControllerITCase.java index e56cb39db2d08a57d4fca5adb36323daef352f8a..75ec631e94bae9a3053e32b2e07e36cda9a37aac 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenControllerITCase.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenControllerITCase.java @@ -56,6 +56,7 @@ import de.ozgcloud.antragsraum.common.TechnicalException; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK) @SpringJUnitConfig(classes = { NachrichtenControllerTestConfiguration.class }) public class NachrichtenControllerITCase { + @SpyBean private NachrichtenController nachrichtenController; @@ -70,6 +71,7 @@ public class NachrichtenControllerITCase { @Nested class TestLoadingRueckfrageHeaders { + @Test @WithMockUser void shouldLoadRueckfragenHeader() throws Exception { @@ -143,10 +145,12 @@ public class NachrichtenControllerITCase { get(NachrichtenController.PATH + "/rueckfragen/" + NachrichtTestFactory.POSTFACH_ID) .contentType(MediaType.APPLICATION_JSON).characterEncoding(Charset.defaultCharset())); } + } @Nested class TestLoadingRueckfrage { + @BeforeEach void init() { when(nachrichtenService.getRueckfrage(NachrichtTestFactory.ID, NachrichtTestFactory.NACHRICHT_EVENT_ID)).thenReturn( @@ -188,10 +192,12 @@ public class NachrichtenControllerITCase { get(NachrichtenController.PATH + "/rueckfrage/" + NachrichtTestFactory.ID + "/" + NachrichtTestFactory.NACHRICHT_EVENT_ID) .contentType(MediaType.APPLICATION_JSON).characterEncoding(Charset.defaultCharset())); } + } @Nested class TestSendingNachricht { + private final ObjectMapper mapper = new ObjectMapper(); private final ReplyNachricht msg = ReplyNachrichtTestFactory.create(); private final CommandReference commandReference = CommandReferenceTestFactory.create(); @@ -228,6 +234,7 @@ public class NachrichtenControllerITCase { @Nested class TestSendingInvalidReply { + @Test @WithMockUser void shouldNotSendNachrichtBlankRueckfrageId() throws Exception { @@ -267,6 +274,7 @@ public class NachrichtenControllerITCase { performPutRequest(mapper.writeValueAsString(invalidMsg)).andExpect(status().isBadRequest()); } + } ResultActions performPutRequest(String body) throws Exception { @@ -277,5 +285,7 @@ public class NachrichtenControllerITCase { .characterEncoding(Charset.defaultCharset()) .content(body)); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenControllerTest.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenControllerTest.java index 4cbade4e3e0ad583f973d91afc5a2bff75d02f92..b04f71d2daace4ceb88d4df43e3e658c880a398a 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenControllerTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenControllerTest.java @@ -37,6 +37,7 @@ import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) class NachrichtenControllerTest { + @Spy @InjectMocks private NachrichtenController nachrichtenController; @@ -46,6 +47,7 @@ class NachrichtenControllerTest { @Nested class TestLoadingRueckfrageHeaders { + @BeforeEach void init() { when(nachrichtenService.getRueckfrageHeadersOfPostfach(NachrichtTestFactory.POSTFACH_ID)).thenReturn( @@ -65,10 +67,12 @@ class NachrichtenControllerTest { verify(nachrichtenService).getRueckfrageHeadersOfPostfach(anyString()); } + } @Nested class TestLoadingRueckfrage { + @BeforeEach void init() { when(nachrichtenService.getRueckfrage(NachrichtTestFactory.ID, NachrichtTestFactory.NACHRICHT_EVENT_ID)).thenReturn( @@ -88,15 +92,19 @@ class NachrichtenControllerTest { verify(nachrichtenService).getRueckfrage(anyString(), anyString()); } + } @Nested class TestSendingAnswer { + @Test void shouldCallService() { nachrichtenController.sendNachricht(ReplyNachrichtTestFactory.create()); verify(nachrichtenService).sendRueckfrageAnswer(any(ReplyNachricht.class)); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenControllerTestConfiguration.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenControllerTestConfiguration.java index 0b87eca4ef6aa7b48974d7976d95ac82c989cdf3..2ac99b2703aba6e496696d7d1324a5ba865903fb 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenControllerTestConfiguration.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenControllerTestConfiguration.java @@ -39,10 +39,12 @@ import de.ozgcloud.antragsraum.WebConfiguration; NachrichtServiceTestConfiguration.class })) @Configuration public class NachrichtenControllerTestConfiguration { + @Bean(name = WebConfiguration.NACHRICHT_REST_CLIENT) public RestClient restClient() { return RestClient.builder() .baseUrl("http//localhost:8080") .build(); } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteServiceITCase.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteServiceITCase.java index c5ac08da5e41efce5a6b6bc66598c146e0609652..3efbdd4a46e6453a280cff38e70a274eac18279f 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteServiceITCase.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteServiceITCase.java @@ -45,6 +45,7 @@ import lombok.extern.log4j.Log4j2; @SpringJUnitConfig(classes = { NachrichtenRemoteServiceTestConfiguration.class }) @Log4j2 class NachrichtenRemoteServiceITCase { + public static final String ADDRESS = "localhost"; String samlResponse; @@ -63,7 +64,8 @@ class NachrichtenRemoteServiceITCase { @Nested class TestGetNachrichtHeaders { - private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createNachrichtEventBuilder().address(ADDRESS).build(); + + private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createBuilder().address(ADDRESS).build(); @BeforeEach void setup() { @@ -87,11 +89,13 @@ class NachrichtenRemoteServiceITCase { assertThat(nachrichtHeaders.getFirst().id()).isEqualTo(RUECKFRAGE_ID); } + } @Nested class TestGetNachricht { - private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createNachrichtEventBuilder().address(ADDRESS).build(); + + private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createBuilder().address(ADDRESS).build(); @BeforeEach void setup() { @@ -111,10 +115,12 @@ class NachrichtenRemoteServiceITCase { assertThat(nachricht.id()).isEqualTo(RUECKFRAGE_ID); } + } @Nested class TestSendNachricht { + @Test void shouldSendNachricht() { initUserPasswordToken(); @@ -127,10 +133,12 @@ class NachrichtenRemoteServiceITCase { throw new RuntimeException(e); } } + } private void initUserPasswordToken() { UsernamePasswordAuthenticationToken authentication = mock(UsernamePasswordAuthenticationToken.class); SecurityContextHolder.getContext().setAuthentication(authentication); } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteServiceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteServiceTest.java index d866a13274a88ad3014c042adaee4d1a65d5cf25..fc06837b82bc97be2a30c08e4a0c9c8b36965af7 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteServiceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteServiceTest.java @@ -57,6 +57,7 @@ import io.grpc.StatusRuntimeException; @ExtendWith(MockitoExtension.class) public class NachrichtenRemoteServiceTest { + public static final String ADDRESS = "test"; @Spy @@ -83,7 +84,8 @@ public class NachrichtenRemoteServiceTest { @Nested class TestNachrichtenAvailable { - private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createNachrichtEvent(); + + private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.create(); @BeforeEach void init() { @@ -118,10 +120,12 @@ public class NachrichtenRemoteServiceTest { verify(nachrichtenRestClient).getFindRueckfragen(anyString(), anyString(), anyString()); } + } @Nested class TestNoNachrichtenAvailable { + @BeforeEach void init() { doThrow(StatusRuntimeException.class).when(nachrichtenRestClient).getFindRueckfragen(anyString(), anyString(), anyString()); @@ -129,14 +133,16 @@ public class NachrichtenRemoteServiceTest { @Test void shouldHandleStatusRuntimeException() { - var nachrichtHeaders = nachrichtenRemoteService.findRueckfrageHeads(NachrichtEventTestFactory.createNachrichtEvent()); + var nachrichtHeaders = nachrichtenRemoteService.findRueckfrageHeads(NachrichtEventTestFactory.create()); assertThat(nachrichtHeaders).isEmpty(); } + } @Nested class TestNoTargetAddressAvailable { + @BeforeEach void init() { doThrow(AddressNotFoundException.class).when(nachrichtenRestClient) @@ -145,15 +151,17 @@ public class NachrichtenRemoteServiceTest { @Test void shouldThrowAddressNotFoundException() { - var nachrichtEvent = NachrichtEventTestFactory.createNachrichtEvent(); + var nachrichtEvent = NachrichtEventTestFactory.create(); assertThatExceptionOfType(AddressNotFoundException.class).isThrownBy(() -> nachrichtenRemoteService.findRueckfrageHeads(nachrichtEvent)); } + } @Nested class TestGetNachricht { - private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createNachrichtEvent(); + + private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.create(); @BeforeEach void init() { @@ -176,17 +184,19 @@ public class NachrichtenRemoteServiceTest { verify(nachrichtenRestClient).getGetRueckfrage(anyString(), anyString(), anyString()); } + } @Nested class TestGetNachrichtError { + @Test void shouldHandleNullRueckfrage() { when(nachrichtenRestClient.getGetRueckfrage(anyString(), anyString(), anyString())).thenReturn( new AntragraumproxyGrpcGetRueckfrageResponse()); nachrichtenRemoteService.getRueckfrage(AntragraumproxyGrpcRueckfrageTestFactory.RUECKFRAGE_ID, - NachrichtEventTestFactory.createNachrichtEvent()); + NachrichtEventTestFactory.create()); verify(nachrichtenRestClient).getGetRueckfrage(anyString(), anyString(), anyString()); } @@ -197,14 +207,16 @@ public class NachrichtenRemoteServiceTest { new StatusRuntimeException(Status.CANCELLED)); nachrichtenRemoteService.getRueckfrage(AntragraumproxyGrpcRueckfrageTestFactory.RUECKFRAGE_ID, - NachrichtEventTestFactory.createNachrichtEvent()); + NachrichtEventTestFactory.create()); verify(nachrichtenRestClient).getGetRueckfrage(anyString(), anyString(), anyString()); } + } @Nested class TestSendAnswer { + private final ReplyNachricht reply = ReplyNachrichtTestFactory.create(); @BeforeEach @@ -237,5 +249,7 @@ public class NachrichtenRemoteServiceTest { verify(nachrichtenRestClient).answerRueckfrage(any(AntragraumproxyGrpcRueckfrageAnswer.class), anyString(), anyString()); } + } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteServiceTestConfiguration.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteServiceTestConfiguration.java index 21f2bd81161301c657450d428e0a7523e6822b53..69bffac07e707260d47270df315e92d3d3496d4e 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteServiceTestConfiguration.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteServiceTestConfiguration.java @@ -45,6 +45,7 @@ import de.ozgcloud.antragsraum.proxy.AntragraumproxyGrpcSendRueckfrageAnswerResp NachrichtServiceTestConfiguration.class })) @Configuration public class NachrichtenRemoteServiceTestConfiguration { + @MockBean private FileService fileService; @MockBean diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRestClientTest.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRestClientTest.java index d8da0cfa0efd193972a659ca091d8a159a2113de..643cf8930b8c5e46dfb18af71bd625f6a3f90ad3 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRestClientTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRestClientTest.java @@ -44,6 +44,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; @SpringJUnitConfig(classes = { NachrichtenRestClientTestConfiguration.class }) @RestClientTest(NachrichtenRestClient.class) class NachrichtenRestClientTest { + final static String ADDRESS = "http://localhost:8382/"; private final static String TOKEN = "saml_token"; @@ -64,6 +65,7 @@ class NachrichtenRestClientTest { @Nested class TestRueckfrageAnswer { + @BeforeEach void setup() throws JsonProcessingException { customizer.customize(restClientBuilder); @@ -79,10 +81,12 @@ class NachrichtenRestClientTest { assertThat(response).isNotNull(); } + } @Nested class TestFindRueckfragen { + @BeforeEach void setup() throws JsonProcessingException { customizer.customize(restClientBuilder); @@ -98,10 +102,12 @@ class NachrichtenRestClientTest { assertThat(response).isNotNull(); } + } @Nested class TestGetRueckfrage { + @BeforeEach void setup() throws JsonProcessingException { customizer.customize(restClientBuilder); @@ -117,7 +123,9 @@ class NachrichtenRestClientTest { assertThat(response).isNotNull(); } + } + } } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRestClientTestConfiguration.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRestClientTestConfiguration.java index e39f0412df4f61466aea73e25a78437b5d91396b..2666770b5d7a3548ec9765484589008386153881 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRestClientTestConfiguration.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRestClientTestConfiguration.java @@ -43,6 +43,7 @@ import de.ozgcloud.antragsraum.events.NachrichtEventService; NachrichtServiceTestConfiguration.class })) @Configuration public class NachrichtenRestClientTestConfiguration { + @MockBean FileService fileService; diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenServiceITCase.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenServiceITCase.java index ff7af87fd603945c9e75d1b5bdb7db7c0148229d..6e5847c6d948ba32a6349b6cbfc761a442bfaf06 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenServiceITCase.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenServiceITCase.java @@ -47,6 +47,7 @@ import de.ozgcloud.antragsraum.events.NachrichtEventTestFactory; @SpringBootTest @SpringJUnitConfig(classes = { NachrichtServiceTestConfiguration.class }) class NachrichtenServiceITCase { + public static final int OVERSIZED_EVENT_ID = 25; public static final int OVERSIZED_ID = 25; public static final int OVERSIZED_POSTFACH_ID = UUID.randomUUID().toString().length() + 1; @@ -65,9 +66,10 @@ class NachrichtenServiceITCase { @Nested class TestSendNachricht { + @BeforeEach void init() { - when(nachrichtEventService.getNachrichtEventById(anyString())).thenReturn(NachrichtEventTestFactory.createNachrichtEvent()); + when(nachrichtEventService.getNachrichtEventById(anyString())).thenReturn(NachrichtEventTestFactory.create()); when(nachrichtenRemoteService.sendAnswer(any(ReplyNachricht.class), anyString())).thenReturn(CommandReferenceTestFactory.create()); } @@ -127,6 +129,9 @@ class NachrichtenServiceITCase { assertThatExceptionOfType(TechnicalException.class).isThrownBy(() -> nachrichtenService.sendRueckfrageAnswer(msg)) .withMessageStartingWith("TechnicalException happened! Message: attachments: size must be between 0 and 20"); } + } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenServiceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenServiceTest.java index 536d887582fb096165912c23dc0fa96de27ea71c..be2a9f4a0b3102e32b0461b10eec0178a3f6f677 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenServiceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenServiceTest.java @@ -51,6 +51,7 @@ import de.ozgcloud.antragsraum.events.NachrichtEventTestFactory; @ExtendWith(MockitoExtension.class) class NachrichtenServiceTest { + @Spy @InjectMocks private NachrichtenService nachrichtenService; @@ -63,10 +64,11 @@ class NachrichtenServiceTest { @Nested class TestGetRueckfrageHeadersOfPostfach { + @BeforeEach void init() { when(nachrichtEventService.getNachrichtEventsOfPostfachId(anyString())).thenReturn( - List.of(NachrichtEventTestFactory.createNachrichtEvent())); + List.of(NachrichtEventTestFactory.create())); when(nachrichtenRemoteService.findRueckfrageHeads(any())).thenReturn(List.of(NachrichtTestFactory.createNachrichtHeader())); } @@ -101,11 +103,13 @@ class NachrichtenServiceTest { assertThat(result.getFirst().getLinks()).isEqualTo(fullyLinkedHeader.getLinks()); } + } @Nested class TestGetRueckfrage { - private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createNachrichtEvent(); + + private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.create(); @BeforeEach void init() { @@ -131,11 +135,13 @@ class NachrichtenServiceTest { () -> nachrichtenService.getRueckfrage(NachrichtTestFactory.ID, NachrichtTestFactory.NACHRICHT_EVENT_ID)) .withMessage("Current user does not have the required trust level for the Rueckfrage with id '" + NachrichtTestFactory.ID + "'."); } + } @Nested class TestGetNachrichtHeadersOfPostfachWithNachrichtenEventAvailable { - final NachrichtEvent event = NachrichtEventTestFactory.createNachrichtEvent(); + + final NachrichtEvent event = NachrichtEventTestFactory.create(); @BeforeEach void init() { @@ -164,10 +170,12 @@ class NachrichtenServiceTest { assertThat(nachrichtHeaders.stream().findFirst()).isPresent().map(NachrichtHeader::postfachId).hasValue(event.postfachId()); } + } @Nested class TestGetNachrichtHeadersOfPostfachWithNoNachrichtenEventAvailable { + @BeforeEach void init() { when(nachrichtEventService.getNachrichtEventsOfPostfachId(anyString())).thenReturn(List.of()); @@ -186,15 +194,17 @@ class NachrichtenServiceTest { verify(nachrichtenRemoteService, never()).findRueckfrageHeads(any(NachrichtEvent.class)); } + } @Nested class TestSendNachricht { + ReplyNachricht msg = ReplyNachrichtTestFactory.create(); @BeforeEach void init() { - when(nachrichtEventService.getNachrichtEventById(anyString())).thenReturn(NachrichtEventTestFactory.createNachrichtEvent()); + when(nachrichtEventService.getNachrichtEventById(anyString())).thenReturn(NachrichtEventTestFactory.create()); when(nachrichtenRemoteService.sendAnswer(any(ReplyNachricht.class), anyString())).thenReturn(CommandReferenceTestFactory.create()); } @@ -211,10 +221,12 @@ class NachrichtenServiceTest { assertThat(result).isInstanceOf(CommandReference.class); } + } @Nested class TestValidation { + @Test @SuppressWarnings("unchecked") void shouldNotCallSendOnValidationError() { @@ -222,5 +234,7 @@ class NachrichtenServiceTest { assertThatException().isThrownBy(() -> nachrichtenService.sendRueckfrageAnswer(ReplyNachrichtTestFactory.create())); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/ReplyNachrichtTest.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/ReplyNachrichtTest.java index ca1cad65796e8514201319ec56e8c7663e9e5f0b..d4de599e420541a2907597549e92d72ccf9aa973 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/ReplyNachrichtTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/ReplyNachrichtTest.java @@ -27,6 +27,7 @@ import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.Test; class ReplyNachrichtTest { + final ReplyNachricht replyNachricht = ReplyNachrichtTestFactory.create(); @Test @@ -35,4 +36,5 @@ class ReplyNachrichtTest { assertThat(replyNachrichtText).doesNotContain(ReplyNachrichtTestFactory.TEXT); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/ReplyNachrichtTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/ReplyNachrichtTestFactory.java index e0b0bf7a544a6a045a0a26076cad35a9a9bc65d0..6937001db1e02e5bb0a269bd7793449bc9b616d1 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/ReplyNachrichtTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/ReplyNachrichtTestFactory.java @@ -22,6 +22,7 @@ package de.ozgcloud.antragsraum.nachricht; public class ReplyNachrichtTestFactory { + public static final String ID = "60af924b4f1a2560298b4567"; public static final String RUECKFRAGE_ID = "60af924b4f1a2560298b4568"; public static final String NACHRICHT_EVENT_ID = "60af924b4f1a2560298b4569"; @@ -39,4 +40,5 @@ public class ReplyNachrichtTestFactory { .postfachId(NachrichtTestFactory.POSTFACH_ID) .message(TEXT); } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/RueckfrageHeaderMapperTest.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/RueckfrageHeaderMapperTest.java index c8fa4a617e0f8c8c0201683b179e445e0e5f8f21..857a199fbe20ca847cda9f4e44cea5453fc5ef4b 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/RueckfrageHeaderMapperTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/RueckfrageHeaderMapperTest.java @@ -28,6 +28,7 @@ import java.util.List; import org.junit.jupiter.api.Test; class RueckfrageHeaderMapperTest { + private final List<NachrichtHeader> nachrichtHeaders = List.of(NachrichtTestFactory.createNachrichtHeader(), NachrichtTestFactory.createNachrichtHeader()); @@ -85,4 +86,5 @@ class RueckfrageHeaderMapperTest { assertThat(headers.getFirst().getStatus()).isEqualTo(NachrichtTestFactory.STATUS); assertThat(headers.get(1).getStatus()).isEqualTo(NachrichtTestFactory.STATUS); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/RueckfrageMapperTest.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/RueckfrageMapperTest.java index 52b78297f13704bc48a891ec386e47c49a8a3ea0..612fd4ca9edf1f5dc2614c8c32750bf57ef6b307 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/RueckfrageMapperTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/RueckfrageMapperTest.java @@ -26,6 +26,7 @@ import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.Test; class RueckfrageMapperTest { + private final Nachricht nachricht = NachrichtTestFactory.createNachricht(); @Test @@ -83,4 +84,5 @@ class RueckfrageMapperTest { assertThat(rueckfrage.getTrustLevel()).isEqualTo(NachrichtTestFactory.TRUST_LEVEL); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/RueckfrageTest.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/RueckfrageTest.java index 402647a4bba932e22064aa6f11e52e966def688b..f98120a016bf2bc5c310f0b5316bae3b20dbbe1f 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/RueckfrageTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/RueckfrageTest.java @@ -27,6 +27,7 @@ import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.Test; class RueckfrageTest { + final Rueckfrage rueckfrage = RueckfrageTestFactory.createRueckfrage(); @Test @@ -42,4 +43,5 @@ class RueckfrageTest { assertThat(rueckfrageString).contains("antworten=<...masked for privacy..>"); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/RueckfrageTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/RueckfrageTestFactory.java index 497c391de992ada4a9b524437ad1bc5a1b7b25de..3a42b06a22801225da63ead5eabacb31f293f5cb 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/RueckfrageTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/RueckfrageTestFactory.java @@ -26,6 +26,7 @@ import static de.ozgcloud.antragsraum.nachricht.NachrichtTestFactory.*; import java.util.Collections; public class RueckfrageTestFactory { + public static final String VORGANG_TITLE = "Vorgang Test "; public static final String TRUST_LEVEL = "LOW"; @@ -53,4 +54,5 @@ public class RueckfrageTestFactory { .accessible(true) .trustLevel(TRUST_LEVEL); } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/TrustLevelMapperTest.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/TrustLevelMapperTest.java index f147beb31e0736e63f6e78ae8725504b2cd6aa06..a7ab094feadbd266dc6e64c281ab8b8b7a4752ec 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/TrustLevelMapperTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/TrustLevelMapperTest.java @@ -26,6 +26,7 @@ import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.Test; class TrustLevelMapperTest { + @Test void shouldMapLowTrustLevel() { assertThat(TrustLevelMapper.map(TrustLevelMapper.TRUST_LEVEL_LOW)).isEqualTo(TrustLevelMapper.TRUST_LEVEL_LOW); @@ -60,4 +61,5 @@ class TrustLevelMapperTest { void shouldMapLevel4TrustLevel() { assertThat(TrustLevelMapper.map(TrustLevelMapper.TRUST_LEVEL_STORK_QAA_LEVEL_4)).isEqualTo(TrustLevelMapper.TRUST_LEVEL_HIGH); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/AntragsraumLogoutSuccessHandlerTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/AntragsraumLogoutSuccessHandlerTest.java index a40f9dc9777133746a647db1d604a2db877fb481..e7d4f8d78ed84e5b3c1a9bab816b0896ac1f76cc 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/AntragsraumLogoutSuccessHandlerTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/AntragsraumLogoutSuccessHandlerTest.java @@ -20,9 +20,14 @@ package de.ozgcloud.antragsraum.security; +import static org.mockito.Mockito.*; + +import java.io.IOException; + import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; + import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -31,12 +36,9 @@ import org.mockito.Spy; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.security.core.Authentication; -import java.io.IOException; - -import static org.mockito.Mockito.*; - @ExtendWith(MockitoExtension.class) class AntragsraumLogoutSuccessHandlerTest { + @Spy @InjectMocks private AntragsraumLogoutSuccessHandler antragsraumLogoutSuccessHandler; @@ -59,4 +61,5 @@ class AntragsraumLogoutSuccessHandlerTest { verify(userDetailService, never()).logout(any(User.class)); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/AuthenticationControllerTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/AuthenticationControllerTest.java index 9ab867230769f1fd56ddea5eee1a880c39c8f39a..b7efda21a70dd79b82156dbf663353936afe9f9e 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/AuthenticationControllerTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/AuthenticationControllerTest.java @@ -41,6 +41,7 @@ import org.springframework.security.web.authentication.logout.SecurityContextLog @ExtendWith(MockitoExtension.class) class AuthenticationControllerTest { + @Spy @InjectMocks private AuthenticationController authenticationController; @@ -56,6 +57,7 @@ class AuthenticationControllerTest { @Nested class TestLogin { + private AuthCode code; @BeforeEach @@ -114,6 +116,7 @@ class AuthenticationControllerTest { @Nested class TestRefresh { + private AuthCode code; @BeforeEach @@ -145,10 +148,12 @@ class AuthenticationControllerTest { verify(inMemoryUserDetailService).updateRefreshCodeOf(any(User.class)); } + } @Nested class TestLogout { + private final MockHttpServletRequest request = new MockHttpServletRequest(); private final MockHttpServletResponse response = new MockHttpServletResponse(); private final User user = UserTestFactory.create(); @@ -180,5 +185,7 @@ class AuthenticationControllerTest { verify(logoutHandler).logout(eq(request), eq(response), any()); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/AuthenticationHelperTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/AuthenticationHelperTest.java index ddc9500135309d5539da86d9d516a7ab8a27cd36..46dd1caa2b3ced82b33bf55ec3ac64b24c50b389 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/AuthenticationHelperTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/AuthenticationHelperTest.java @@ -34,8 +34,10 @@ import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; class AuthenticationHelperTest { + @Nested class TestGetAuthentication { + @Test void shouldGetAuthenticatedUser() { var authenticated = mock(RememberMeAuthenticationToken.class); @@ -57,10 +59,12 @@ class AuthenticationHelperTest { assertThatExceptionOfType(IllegalStateException.class).isThrownBy(AuthenticationHelper::getAuthentication); } + } @Nested class TestGetSamlToken { + @Test void shouldGetAuthenticatedSamlToken() { var authenticated = mock(UsernamePasswordAuthenticationToken.class); @@ -98,5 +102,7 @@ class AuthenticationHelperTest { assertThat(samlToken).isEqualTo(AuthenticationHelper.NO_SAML_TOKEN); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/BayernIdSaml2ExtensionTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/BayernIdSaml2ExtensionTest.java index c0a5af1dbde1e7e2f71350f1add19cee851f2e80..894ced0076f331efdf0e4b489111ab009cedb83d 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/BayernIdSaml2ExtensionTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/BayernIdSaml2ExtensionTest.java @@ -43,6 +43,7 @@ import org.opensaml.saml.saml2.core.Extensions; @ExtendWith(MockitoExtension.class) class BayernIdSaml2ExtensionTest { + private static final String URN_1_1 = "urn:1.1"; private static final String URN_2_2 = "urn.2.2"; private static final String ORGANIZATION_DISPLAY_NAME = "TestOrganizationDisplayName"; @@ -109,6 +110,7 @@ class BayernIdSaml2ExtensionTest { private XSAny getChild(XMLObject authMethodElement) { return (XSAny) authMethodElement.getOrderedChildren().getFirst(); } + } @Nested @@ -159,6 +161,7 @@ class BayernIdSaml2ExtensionTest { ((XSAny) child).getUnknownAttributes().containsValue(name) ).findFirst(); } + } @Nested @@ -225,6 +228,7 @@ class BayernIdSaml2ExtensionTest { private XSAny getGrandChild(XMLObject authMethodElement) { return (XSAny) authMethodElement.getOrderedChildren().getFirst().getOrderedChildren().getFirst(); } + } @Nested @@ -284,6 +288,7 @@ class BayernIdSaml2ExtensionTest { child.getElementQName().getLocalPart().equals(localName) ).findFirst(); } + } } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/InMemoryUserDetailServiceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/InMemoryUserDetailServiceTest.java index 5c7b9c4e01c945e78df70090b05b5a88fb7c9558..dbd09ac941481cf5be6739df4f92d0892e1b3607 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/InMemoryUserDetailServiceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/InMemoryUserDetailServiceTest.java @@ -20,9 +20,14 @@ package de.ozgcloud.antragsraum.security; -import com.google.common.cache.CacheBuilder; -import com.google.common.testing.FakeTicker; -import de.ozgcloud.antragsraum.common.NotFoundException; +import static org.assertj.core.api.Assertions.*; + +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.util.Date; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -30,214 +35,226 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.test.util.ReflectionTestUtils; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.Date; -import java.util.UUID; -import java.util.concurrent.TimeUnit; +import com.google.common.cache.CacheBuilder; +import com.google.common.testing.FakeTicker; -import static org.assertj.core.api.Assertions.*; +import de.ozgcloud.antragsraum.common.NotFoundException; @ExtendWith(MockitoExtension.class) class InMemoryUserDetailServiceTest { - private final InMemoryUserDetailService userDetailService = new InMemoryUserDetailService(); - private final static String TEMP_ID = UUID.randomUUID().toString(); - private User user; - - @Nested - class TestAddingUser { - @BeforeEach - void setup() { - ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); - user = UserTestFactory.create(); - userDetailService.tmpTokenUserIdCache = CacheBuilder.newBuilder() - .expireAfterAccess(10, TimeUnit.SECONDS) - .build(); - userDetailService.addUser(TEMP_ID, user); - } - - @Test - void shouldAddUser() { - assertThat(userDetailService.getUser(UserTestFactory.USER_ID)).isNotNull(); - } - - @Test - void shouldSetExpiryTimeDateWhenAddUser() { - var date = ZonedDateTime.now(ZoneId.of("UTC")).plusMinutes(30L).toInstant(); - assertThat(userDetailService.getUser(UserTestFactory.USER_ID).getTokenExpiresAt()).isCloseTo(date, 10); - } - - @Test - void shouldGetUserByCode() { - assertThat(userDetailService.getUserByCode(TEMP_ID)).isNotNull(); - } - - @Test - void shouldThrowNotFoundExceptionWrongTempId() { - assertThatExceptionOfType(NotFoundException.class).isThrownBy(() -> userDetailService.getUserByCode("OTHER")); - } - - @Test - void shouldLoadUser() { - userDetailService.addUser(TEMP_ID, user); - - assertThat(userDetailService.loadUserByUsername(UserTestFactory.USER_NAME)).isNotNull(); - } - } - - @Nested - class TestSetUser { - @BeforeEach - void setup() { - ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); - user = UserTestFactory.create(); - userDetailService.tmpTokenUserIdCache = CacheBuilder.newBuilder() - .expireAfterAccess(10, TimeUnit.SECONDS) - .build(); - userDetailService.setUser(TEMP_ID, user); - } - - @Test - void shouldSetUser() { - assertThat(userDetailService.getUser(UserTestFactory.USER_ID)).isNotNull(); - } - - @Test - void shouldNotSetExpiryTimeDateWhenSetUser() { - assertThat(userDetailService.getUser(UserTestFactory.USER_ID).getTokenExpiresAt()).isEqualTo(user.getTokenExpiresAt()); - } - } - - @Nested - class TestExpiringCodeCache { - FakeTicker ticker = new FakeTicker(); - - @BeforeEach - void setup() { - ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); - - user = UserTestFactory.create(); - userDetailService.tmpTokenUserIdCache = CacheBuilder.newBuilder() - .expireAfterAccess(1, TimeUnit.SECONDS) - .ticker(ticker) - .build(); - userDetailService.addUser(TEMP_ID, user); - - userDetailService.getUserByCode(TEMP_ID); - ticker.advance(2, TimeUnit.SECONDS); - } - - @Test - void shouldThrowExceptionWhenGetUserByCode() { - assertThatExceptionOfType(NotFoundException.class).isThrownBy(() -> userDetailService.getUserByCode(TEMP_ID)); - } - } - - @Nested - class TestUninitializedCache { - @Test - void shouldThrowExceptionWhenGetUserByCode() { - assertThatExceptionOfType(NotFoundException.class).isThrownBy(() -> userDetailService.getUserByCode(TEMP_ID)); - } - } - - @Nested - class TestLoadingSamlToken { - @BeforeEach - void setup() { - user = UserTestFactory.create(); - - ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); - userDetailService.addUser(TEMP_ID, user); - } - - @Test - void shouldReturnToken() { - assertThat(userDetailService.getSamlTokenOfUser(user.getId())).isEqualTo(UserTestFactory.SAML_TOKEN); - } - } - - @Nested - class TestHandlingRefreshToken { - @BeforeEach - void setup() { - user = UserTestFactory.create(); - ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); - userDetailService.addUser(UUID.randomUUID().toString(), user); - } - - - @Test - void shouldGetUser() { - var updatedUser = userDetailService.getUser(new AuthCode(user.getRefreshCode())); - - assertThat(updatedUser).isPresent(); - } - - @Test - void shouldNotGetUserBecauseUnknownRefreshCode() { - var user = userDetailService.getUser(new AuthCode(UUID.randomUUID().toString())); - - assertThat(user).isNotPresent(); - } - - @Test - void shouldNotGetUserBecauseRefreshCodeExpired() { - var localUser = UserTestFactory.createBuilder() - .tokenExpiresAt(Date.from(ZonedDateTime.now(ZoneId.of("UTC")).minusMinutes(31L).toInstant())) - .build(); - userDetailService.setUser(UUID.randomUUID().toString(), localUser); - - var userOptional = userDetailService.getUser(new AuthCode(localUser.getRefreshCode())); - - assertThat(userOptional).isNotPresent(); - } - - @Test - void shouldUpdateRefreshCode() { - var user = UserTestFactory.create(); - userDetailService.updateRefreshCodeOf(user); - - var updatedUser = userDetailService.getUser(user.getId()); - assertThat(updatedUser.getRefreshCode()).isNotEqualTo(user.getRefreshCode()); - } - } - - @Nested - class TestUserMapCleanUp { - private User expiredUser; - private User validUser; - - @BeforeEach - void setup() { - ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); - validUser = UserTestFactory.create(); - userDetailService.setUser(UUID.randomUUID().toString(), validUser); - expiredUser = UserTestFactory.createBuilder() - .id(UUID.randomUUID().toString()) - .tokenExpiresAt(Date.from(ZonedDateTime.now(ZoneId.of("UTC")).minusMinutes(5L).toInstant())).build(); - userDetailService.setUser(UUID.randomUUID().toString(), expiredUser); - } - - @Test - void shouldRemoveExpiredUser() { - userDetailService.userCleanUp(); - - assertThat(userDetailService.getUser(expiredUser.getId())).isNull(); - } - - @Test - void shouldNotRemoveValidUser() { - userDetailService.userCleanUp(); - - assertThat(userDetailService.getUser(validUser.getId())).isNotNull(); - } - - @Test - void shouldRemoveOnLogout() { - userDetailService.logout(validUser); - - assertThat(userDetailService.getUser(validUser.getId())).isNull(); - } - } + + private final InMemoryUserDetailService userDetailService = new InMemoryUserDetailService(); + private final static String TEMP_ID = UUID.randomUUID().toString(); + private User user; + + @Nested + class TestAddingUser { + + @BeforeEach + void setup() { + ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); + user = UserTestFactory.create(); + userDetailService.tmpTokenUserIdCache = CacheBuilder.newBuilder() + .expireAfterAccess(10, TimeUnit.SECONDS) + .build(); + userDetailService.addUser(TEMP_ID, user); + } + + @Test + void shouldAddUser() { + assertThat(userDetailService.getUser(UserTestFactory.USER_ID)).isNotNull(); + } + + @Test + void shouldSetExpiryTimeDateWhenAddUser() { + var date = ZonedDateTime.now(ZoneId.of("UTC")).plusMinutes(30L).toInstant(); + assertThat(userDetailService.getUser(UserTestFactory.USER_ID).getTokenExpiresAt()).isCloseTo(date, 10); + } + + @Test + void shouldGetUserByCode() { + assertThat(userDetailService.getUserByCode(TEMP_ID)).isNotNull(); + } + + @Test + void shouldThrowNotFoundExceptionWrongTempId() { + assertThatExceptionOfType(NotFoundException.class).isThrownBy(() -> userDetailService.getUserByCode("OTHER")); + } + + @Test + void shouldLoadUser() { + userDetailService.addUser(TEMP_ID, user); + + assertThat(userDetailService.loadUserByUsername(UserTestFactory.USER_NAME)).isNotNull(); + } + + } + + @Nested + class TestSetUser { + + @BeforeEach + void setup() { + ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); + user = UserTestFactory.create(); + userDetailService.tmpTokenUserIdCache = CacheBuilder.newBuilder() + .expireAfterAccess(10, TimeUnit.SECONDS) + .build(); + userDetailService.setUser(TEMP_ID, user); + } + + @Test + void shouldSetUser() { + assertThat(userDetailService.getUser(UserTestFactory.USER_ID)).isNotNull(); + } + + @Test + void shouldNotSetExpiryTimeDateWhenSetUser() { + assertThat(userDetailService.getUser(UserTestFactory.USER_ID).getTokenExpiresAt()).isEqualTo(user.getTokenExpiresAt()); + } + + } + + @Nested + class TestExpiringCodeCache { + + FakeTicker ticker = new FakeTicker(); + + @BeforeEach + void setup() { + ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); + + user = UserTestFactory.create(); + userDetailService.tmpTokenUserIdCache = CacheBuilder.newBuilder() + .expireAfterAccess(1, TimeUnit.SECONDS) + .ticker(ticker) + .build(); + userDetailService.addUser(TEMP_ID, user); + + userDetailService.getUserByCode(TEMP_ID); + ticker.advance(2, TimeUnit.SECONDS); + } + + @Test + void shouldThrowExceptionWhenGetUserByCode() { + assertThatExceptionOfType(NotFoundException.class).isThrownBy(() -> userDetailService.getUserByCode(TEMP_ID)); + } + + } + + @Nested + class TestUninitializedCache { + + @Test + void shouldThrowExceptionWhenGetUserByCode() { + assertThatExceptionOfType(NotFoundException.class).isThrownBy(() -> userDetailService.getUserByCode(TEMP_ID)); + } + + } + + @Nested + class TestLoadingSamlToken { + + @BeforeEach + void setup() { + user = UserTestFactory.create(); + + ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); + userDetailService.addUser(TEMP_ID, user); + } + + @Test + void shouldReturnToken() { + assertThat(userDetailService.getSamlTokenOfUser(user.getId())).isEqualTo(UserTestFactory.SAML_TOKEN); + } + + } + + @Nested + class TestHandlingRefreshToken { + + @BeforeEach + void setup() { + user = UserTestFactory.create(); + ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); + userDetailService.addUser(UUID.randomUUID().toString(), user); + } + + @Test + void shouldGetUser() { + var updatedUser = userDetailService.getUser(new AuthCode(user.getRefreshCode())); + + assertThat(updatedUser).isPresent(); + } + + @Test + void shouldNotGetUserBecauseUnknownRefreshCode() { + var user = userDetailService.getUser(new AuthCode(UUID.randomUUID().toString())); + + assertThat(user).isNotPresent(); + } + + @Test + void shouldNotGetUserBecauseRefreshCodeExpired() { + var localUser = UserTestFactory.createBuilder() + .tokenExpiresAt(Date.from(ZonedDateTime.now(ZoneId.of("UTC")).minusMinutes(31L).toInstant())) + .build(); + userDetailService.setUser(UUID.randomUUID().toString(), localUser); + + var userOptional = userDetailService.getUser(new AuthCode(localUser.getRefreshCode())); + + assertThat(userOptional).isNotPresent(); + } + + @Test + void shouldUpdateRefreshCode() { + var user = UserTestFactory.create(); + userDetailService.updateRefreshCodeOf(user); + + var updatedUser = userDetailService.getUser(user.getId()); + assertThat(updatedUser.getRefreshCode()).isNotEqualTo(user.getRefreshCode()); + } + + } + + @Nested + class TestUserMapCleanUp { + + private User expiredUser; + private User validUser; + + @BeforeEach + void setup() { + ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); + validUser = UserTestFactory.create(); + userDetailService.setUser(UUID.randomUUID().toString(), validUser); + expiredUser = UserTestFactory.createBuilder() + .id(UUID.randomUUID().toString()) + .tokenExpiresAt(Date.from(ZonedDateTime.now(ZoneId.of("UTC")).minusMinutes(5L).toInstant())).build(); + userDetailService.setUser(UUID.randomUUID().toString(), expiredUser); + } + + @Test + void shouldRemoveExpiredUser() { + userDetailService.userCleanUp(); + + assertThat(userDetailService.getUser(expiredUser.getId())).isNull(); + } + + @Test + void shouldNotRemoveValidUser() { + userDetailService.userCleanUp(); + + assertThat(userDetailService.getUser(validUser.getId())).isNotNull(); + } + + @Test + void shouldRemoveOnLogout() { + userDetailService.logout(validUser); + + assertThat(userDetailService.getUser(validUser.getId())).isNull(); + } + + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenFilterTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenFilterTest.java index 1f21b06deca298ab3cb73b86c8a76b6256dbc06c..0a3a680eb721dadb63ffa165cbc425b427133496 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenFilterTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenFilterTest.java @@ -51,6 +51,7 @@ import io.jsonwebtoken.JwtParser; @ExtendWith(MockitoExtension.class) class JwtTokenFilterTest { + @Mock HttpServletRequest request; @Mock @@ -164,10 +165,12 @@ class JwtTokenFilterTest { when(tokenVerifier.getJws(any(), any())).thenReturn(Optional.of(jws)); when(userDetailService.loadUserByUsername(any())).thenReturn(UserTestFactory.create()); } + } @Nested class TestSettingSecurityContext { + @BeforeEach void setup() { User user = UserTestFactory.create(); @@ -214,10 +217,12 @@ class JwtTokenFilterTest { assertThat(((UsernamePasswordAuthenticationToken) auth).getAuthorities()).isNotNull(); } + } @Nested class TestLoadingTokenFromRequest { + @BeforeEach void setup() { User user = UserTestFactory.create(); @@ -252,10 +257,12 @@ class JwtTokenFilterTest { assertThat(tokenOptional).isPresent().map(tokenValue -> assertThat(tokenValue).isEqualTo(token)); } + } @Nested class TestNullHandling { + @Test void shouldThrowIllegalStateException() { assertThatIllegalArgumentException().isThrownBy(() -> tokenFilter.createAuthentication(null, null, null)); @@ -265,5 +272,7 @@ class JwtTokenFilterTest { void shouldThrowIllegalArgumentException() { assertThatIllegalArgumentException().isThrownBy(() -> tokenFilter.doFilterInternal(null, null, null)); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenProviderTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenProviderTest.java index a27a25c9fe947249770ef935d7a59f83e2b6520f..57a5a35b524bdfbe880f1576d7ef9cde7b5a3783 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenProviderTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenProviderTest.java @@ -37,6 +37,7 @@ import org.springframework.test.util.ReflectionTestUtils; @ExtendWith(MockitoExtension.class) class JwtTokenProviderTest { + private static final String SECRET = RandomStringUtils.random(256); JwtTokenProvider provider = new JwtTokenProvider(); @@ -48,6 +49,7 @@ class JwtTokenProviderTest { @Nested class TestJwtGeneration { + @Test void shouldGenerateToken() { assertThat(provider.generate(UserTestFactory.create())).isNotNull(); @@ -68,5 +70,7 @@ class JwtTokenProviderTest { var expIndex = token.indexOf("\"exp\":"); return Long.valueOf(token.substring(expIndex + 6, expIndex + 16)); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenVerifierTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenVerifierTest.java index d03f3a4473bface487b6ec5ce37d5d8aa5423a3e..da1d500f6f22ff938e388203a224c5634a0f5d68 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenVerifierTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenVerifierTest.java @@ -40,6 +40,7 @@ import io.jsonwebtoken.security.Keys; import io.jsonwebtoken.security.SignatureException; class JwtTokenVerifierTest { + private static final String SECRET = RandomStringUtils.random(256); JwtTokenVerifier verifier = new JwtTokenVerifier(); @@ -113,5 +114,7 @@ class JwtTokenVerifierTest { .claim("trustlevel", UserTestFactory.TRUST_LEVEL) .compact(); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/SHA256withRSAAndMGF1SignatureAlgorithmTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/SHA256withRSAAndMGF1SignatureAlgorithmTest.java index b8f40ffe89f7d9a50fe2795378dbab1127eb3ec1..b36e4940cf5f0dc9f4a26f8ae7b052573dd3bc94 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/SHA256withRSAAndMGF1SignatureAlgorithmTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/SHA256withRSAAndMGF1SignatureAlgorithmTest.java @@ -26,6 +26,7 @@ import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.Test; class SHA256withRSAAndMGF1SignatureAlgorithmTest { + @Test void shouldGetKey() { var algorithm = new SHA256withRSAAndMGF1SignatureAlgorithm(); @@ -60,4 +61,5 @@ class SHA256withRSAAndMGF1SignatureAlgorithmTest { assertThat(algorithm.getDigest()).isEqualTo(SHA256_ALGORITHM_ID); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/SamlRedirectStrategyTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/SamlRedirectStrategyTest.java index ac62a9da2d523997529fc7722e205813e6120d1f..6dbc3332ad4bde38b6223f76897077330f83ff3c 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/SamlRedirectStrategyTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/SamlRedirectStrategyTest.java @@ -41,6 +41,7 @@ import org.springframework.security.saml2.provider.service.authentication.Saml2A @ExtendWith(MockitoExtension.class) class SamlRedirectStrategyTest { + private static final String URL = "http://test"; @Mock @@ -62,6 +63,7 @@ class SamlRedirectStrategyTest { @Nested class TestRedirect { + @BeforeEach void setup() { when(request.getContextPath()).thenReturn(URL); @@ -96,10 +98,12 @@ class SamlRedirectStrategyTest { verify(response).sendRedirect(matches(URL + "\\?code=*")); } + } @Nested class TestRedirectWithConfiguredUrl { + private final String CONFIGURED_REDIRECT_URL = "https://redirect.me"; @BeforeEach @@ -114,5 +118,7 @@ class SamlRedirectStrategyTest { verify(response).sendRedirect(CONFIGURED_REDIRECT_URL + "?code=abc"); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/SamlUrlAuthenticationSuccessHandlerTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/SamlUrlAuthenticationSuccessHandlerTest.java index f498d5a97bffb753474c414be1010cb92dc5814c..93585b4c090235ffbd48b40e71d039483e47c4d9 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/SamlUrlAuthenticationSuccessHandlerTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/SamlUrlAuthenticationSuccessHandlerTest.java @@ -44,6 +44,7 @@ import org.springframework.security.core.userdetails.UserDetailsService; @ExtendWith(MockitoExtension.class) class SamlUrlAuthenticationSuccessHandlerTest { + private static final String HTTP_TEST = "http://test"; private static final String REDIRECT_URL = "http://redirect"; @@ -54,6 +55,7 @@ class SamlUrlAuthenticationSuccessHandlerTest { @Nested class TestOnSuccess { + @Mock private HttpServletRequest request; @Mock @@ -83,10 +85,12 @@ class SamlUrlAuthenticationSuccessHandlerTest { verify(handler).clearAuthenticationAttributes(any()); } + } @Nested class TestInit { + @Test void shouldGetRedirectUrl() { successHandler = new SamlUrlAuthenticationSuccessHandler(REDIRECT_URL, userService); @@ -104,10 +108,12 @@ class SamlUrlAuthenticationSuccessHandlerTest { assertThat(url).isEqualTo("/"); } + } @Nested class TestWithAuthentication { + @Mock private Authentication authentication; @@ -133,10 +139,12 @@ class SamlUrlAuthenticationSuccessHandlerTest { assertThatExceptionOfType(IllegalStateException.class).isThrownBy(() -> successHandler.determineTargetUrl(authentication)) .withMessage("Invalid role! User is missing role ROLE_USER"); } + } @Nested class TestClearLoginSession { + @Mock private HttpServletRequest request; @@ -161,10 +169,12 @@ class SamlUrlAuthenticationSuccessHandlerTest { verify(request, times(1)).getSession(false); verify(session).removeAttribute(any()); } + } @Nested class TestHandle { + @Mock private HttpServletRequest request; @Mock @@ -199,6 +209,7 @@ class SamlUrlAuthenticationSuccessHandlerTest { verify(response, never()).sendRedirect(anyString()); } + } } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/SecurityProviderTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/SecurityProviderTest.java index 395077c2c3afec293d50030690e71833bf1e79f6..67a3fe4324e5b5aaeff4897975baa652b3f7111a 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/SecurityProviderTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/SecurityProviderTest.java @@ -36,12 +36,14 @@ import org.opensaml.core.config.ConfigurationService; import org.opensaml.xmlsec.algorithm.AlgorithmRegistry; public class SecurityProviderTest { + private static final String BOUNCY_CASTLE_PROVIDER_ID = "BC"; private final SecurityProvider securityProvider = new SecurityProvider(); @Nested class TestAfterPropertiesSet { + @BeforeEach void init() { Security.removeProvider(BOUNCY_CASTLE_PROVIDER_ID); @@ -86,5 +88,7 @@ public class SecurityProviderTest { SHA256withRSAAndMGF1SignatureAlgorithm.class); } } + } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/UserMapperTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/UserMapperTest.java index 219af424a39ab69a503186c94ddff007ab35be0e..a12042e77f7fb21f0c70d894555277d5176163a2 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/UserMapperTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/UserMapperTest.java @@ -20,6 +20,13 @@ package de.ozgcloud.antragsraum.security; +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -28,100 +35,95 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.security.saml2.provider.service.authentication.DefaultSaml2AuthenticatedPrincipal; import org.springframework.security.saml2.provider.service.authentication.Saml2Authentication; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - @ExtendWith(MockitoExtension.class) class UserMapperTest { - static final String SAML_TOKEN = "token"; - @Mock - private Saml2Authentication auth; - Map<String, List<Object>> attributes; + static final String SAML_TOKEN = "token"; + @Mock + private Saml2Authentication auth; + + Map<String, List<Object>> attributes; + + @BeforeEach + void setup() { + when(auth.getSaml2Response()).thenReturn(SAML_TOKEN); - @BeforeEach - void setup() { - when(auth.getSaml2Response()).thenReturn(SAML_TOKEN); + attributes = new HashMap<>(); + attributes.put(UserMapper.NACHNAME_URN, List.of(UserTestFactory.LAST_NAME)); + attributes.put(UserMapper.VORNAME_URN, List.of(UserTestFactory.FIRST_NAME)); + attributes.put(UserMapper.POSTKORB_HANDLE_URN, List.of(UserTestFactory.POSTKORB_HANDLE)); + attributes.put(UserMapper.VERTRAUENSNIVEAU_URN, List.of(UserTestFactory.TRUST_LEVEL)); + attributes.put(UserMapper.BK2_URN, List.of(UserTestFactory.USER_NAME)); - attributes = new HashMap<>(); - attributes.put(UserMapper.NACHNAME_URN, List.of(UserTestFactory.LAST_NAME)); - attributes.put(UserMapper.VORNAME_URN, List.of(UserTestFactory.FIRST_NAME)); - attributes.put(UserMapper.POSTKORB_HANDLE_URN, List.of(UserTestFactory.POSTKORB_HANDLE)); - attributes.put(UserMapper.VERTRAUENSNIVEAU_URN, List.of(UserTestFactory.TRUST_LEVEL)); - attributes.put(UserMapper.BK2_URN, List.of(UserTestFactory.USER_NAME)); + var principal = new DefaultSaml2AuthenticatedPrincipal(UserTestFactory.USER_ID, attributes); + when(auth.getPrincipal()).thenReturn(principal); + } - var principal = new DefaultSaml2AuthenticatedPrincipal(UserTestFactory.USER_ID, attributes); - when(auth.getPrincipal()).thenReturn(principal); - } + @Test + void shouldGetUsername() { + var user = UserMapper.map(auth); - @Test - void shouldGetUsername() { - var user = UserMapper.map(auth); + assertThat(user.getUsername()).isEqualTo(UserTestFactory.USER_ID); + } - assertThat(user.getUsername()).isEqualTo(UserTestFactory.USER_ID); - } + @Test + void shouldGetFirstName() { + var user = UserMapper.map(auth); - @Test - void shouldGetFirstName() { - var user = UserMapper.map(auth); + assertThat(user.getFirstName()).isEqualTo(UserTestFactory.FIRST_NAME); + } - assertThat(user.getFirstName()).isEqualTo(UserTestFactory.FIRST_NAME); - } + @Test + void shouldGetLastName() { + var user = UserMapper.map(auth); - @Test - void shouldGetLastName() { - var user = UserMapper.map(auth); + assertThat(user.getLastName()).isEqualTo(UserTestFactory.LAST_NAME); + } - assertThat(user.getLastName()).isEqualTo(UserTestFactory.LAST_NAME); - } + @Test + void shouldGetPostkornHandle() { + var user = UserMapper.map(auth); - @Test - void shouldGetPostkornHandle() { - var user = UserMapper.map(auth); + assertThat(user.getPostkorbHandle()).isEqualTo(UserTestFactory.POSTKORB_HANDLE); + } - assertThat(user.getPostkorbHandle()).isEqualTo(UserTestFactory.POSTKORB_HANDLE); - } + @Test + void shouldGetTrustLevel() { + var user = UserMapper.map(auth); - @Test - void shouldGetTrustLevel() { - var user = UserMapper.map(auth); + assertThat(user.getTrustLevel()).isEqualTo(UserTestFactory.TRUST_LEVEL); + } - assertThat(user.getTrustLevel()).isEqualTo(UserTestFactory.TRUST_LEVEL); - } + @Test + void shouldGetSaml2Token() { + var user = UserMapper.map(auth); - @Test - void shouldGetSaml2Token() { - var user = UserMapper.map(auth); + assertThat(user.getSamlToken()).isEqualTo(SAML_TOKEN); + } - assertThat(user.getSamlToken()).isEqualTo(SAML_TOKEN); - } + @Test + void shouldGetUnknownAttributesEmpty() { + var user = UserMapper.map(auth); - @Test - void shouldGetUnknownAttributesEmpty() { - var user = UserMapper.map(auth); + assertThat(user.getUnknownAttributes()).isEmpty(); + } - assertThat(user.getUnknownAttributes()).isEmpty(); - } + @Test + void shouldGetUnknownAttributes() { + attributes.put("other", List.of("value")); + var principal = new DefaultSaml2AuthenticatedPrincipal(UserTestFactory.USER_ID, attributes); + when(auth.getPrincipal()).thenReturn(principal); - @Test - void shouldGetUnknownAttributes() { - attributes.put("other", List.of("value")); - var principal = new DefaultSaml2AuthenticatedPrincipal(UserTestFactory.USER_ID, attributes); - when(auth.getPrincipal()).thenReturn(principal); + var user = UserMapper.map(auth); - var user = UserMapper.map(auth); + assertThat(user.getUnknownAttributes()).isNotEmpty().hasSize(1); + } - assertThat(user.getUnknownAttributes()).isNotEmpty().hasSize(1); - } + @Test + void shouldSetRefreshCode() { + var user = UserMapper.map(auth); - @Test - void shouldSetRefreshCode() { - var user = UserMapper.map(auth); + assertThat(user.getRefreshCode()).isNotEmpty(); + } - assertThat(user.getRefreshCode()).isNotEmpty(); - } } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/UserTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/UserTest.java index 715c7b9af3cf2868b15ca14420aa5140194beef7..ce0085d74911400b7814e73a1b4131b51f21163d 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/UserTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/UserTest.java @@ -20,35 +20,37 @@ package de.ozgcloud.antragsraum.security; -import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.*; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.util.Date; -import static org.assertj.core.api.Assertions.*; +import org.junit.jupiter.api.Test; class UserTest { - @Test - void getAuthorities() { - var user = UserTestFactory.create(); + @Test + void getAuthorities() { + var user = UserTestFactory.create(); + + assertThat(user.getAuthorities()).isNotNull(); + assertThat(user.getAuthorities().iterator().next().getAuthority()).isEqualTo(DefaultRole.ROLE); + } - assertThat(user.getAuthorities()).isNotNull(); - assertThat(user.getAuthorities().iterator().next().getAuthority()).isEqualTo(DefaultRole.ROLE); - } + @Test + void credentialsShouldBeExpired() { + var expiredUser = UserTestFactory.createBuilder().tokenExpiresAt(Date.from(LocalDateTime.now().minusDays(1).toInstant(ZoneOffset.UTC))) + .build(); - @Test - void credentialsShouldBeExpired() { - var expiredUser = UserTestFactory.createBuilder().tokenExpiresAt(Date.from(LocalDateTime.now().minusDays(1).toInstant(ZoneOffset.UTC))).build(); + assertThat(expiredUser.isCredentialsNonExpired()).isFalse(); + } - assertThat(expiredUser.isCredentialsNonExpired()).isFalse(); - } + @Test + void credentialsShouldNotBeExpired() { + var user = UserTestFactory.createBuilder().tokenExpiresAt(Date.from(LocalDateTime.now().plusHours(1).toInstant(ZoneOffset.UTC))).build(); - @Test - void credentialsShouldNotBeExpired() { - var user = UserTestFactory.createBuilder().tokenExpiresAt(Date.from(LocalDateTime.now().plusHours(1).toInstant(ZoneOffset.UTC))).build(); + assertThat(user.isCredentialsNonExpired()).isTrue(); + } - assertThat(user.isCredentialsNonExpired()).isTrue(); - } } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/UserTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/security/UserTestFactory.java index 60a2d0bf1ae9d583c26e7385f6421235846ffb11..f4f7046fbd17d01d2d1500f020d09329c1c98507 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/UserTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/UserTestFactory.java @@ -26,6 +26,7 @@ import java.util.Date; import java.util.UUID; public class UserTestFactory { + static final String USER_ID = UUID.randomUUID().toString(); static final String REFRESH_TOKEN = UUID.randomUUID().toString(); static final String FIRST_NAME = "Paul"; @@ -52,4 +53,5 @@ public class UserTestFactory { .tokenExpiresAt(TOKEN_EXPIRATION) .trustLevel(TRUST_LEVEL); } + }