diff --git a/.github/workflows/mimock-backend.yml b/.github/workflows/mimock-backend.yml
index 52c2813d..754c9397 100644
--- a/.github/workflows/mimock-backend.yml
+++ b/.github/workflows/mimock-backend.yml
@@ -18,32 +18,23 @@ jobs:
MIMOCK_CURRENT_VERSION: ${{ secrets.MIMOCK_CURRENT_VERSION }}
steps:
- name: Check out code
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
+
+ - uses: gradle/wrapper-validation-action@v1
- - name: Cache local Maven repository
- uses: actions/cache@v2
- with:
- path: ~/.m2/repository
- key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
- restore-keys: |
- ${{ runner.os }}-maven-
+ - name: Gradle Cache
+ uses: burrunan/gradle-cache-action@v1
- name: Check format using checkstyle
working-directory: mimock-backend
- run: ./mvnw -ntp -Drevision=$MIMOCK_CURRENT_VERSION checkstyle:check
-
- - name: Generate checkstyle report
- working-directory: mimock-backend
- run: ./mvnw -ntp -Drevision=$MIMOCK_CURRENT_VERSION clean site
+ run: ./gradlew checkstyleMain
- name: Publish style report
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
with:
name: checkstyle-report
path: |
- mimock-backend/target/site/css
- mimock-backend/target/site/images
- mimock-backend/target/site/checkstyle.html
+ mimock-backend/build/reports/checkstyle/*
test:
needs:
@@ -54,32 +45,27 @@ jobs:
MIMOCK_CURRENT_VERSION: ${{ secrets.MIMOCK_CURRENT_VERSION }}
steps:
- name: Check out code
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
- - name: Cache local Maven repository
- uses: actions/cache@v2
- with:
- path: ~/.m2/repository
- key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
- restore-keys: |
- ${{ runner.os }}-maven-
+ - name: Gradle Cache
+ uses: burrunan/gradle-cache-action@v1
- name: Run mimock tests in CI mode
working-directory: mimock-backend
- run: ./mvnw -ntp clean initialize verify -P startDatabase -P coverage -Drevision=$MIMOCK_CURRENT_VERSION -Dspring.config.location=classpath:/application.yml
+ run: ./gradlew clean startDatabase jacocoTestCoverageVerification -Drevision=$MIMOCK_CURRENT_VERSION -Dspring.config.location=classpath:/application.yml
- name: Publish coverage report codecov
- uses: codecov/codecov-action@v2
+ uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
commit_parent: ${{ github.sha }}
- name: Publish coverage report
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
with:
name: mimock-coverage-report
path: |
- mimock-backend/target/site/jacoco/*
+ mimock-backend/build/reports/jacoco/test/html/*
package-app:
needs:
@@ -90,28 +76,23 @@ jobs:
MIMOCK_CURRENT_VERSION: ${{ secrets.MIMOCK_CURRENT_VERSION }}
steps:
- name: Check out code
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
- - name: Cache local Maven repository
- uses: actions/cache@v2
- with:
- path: ~/.m2/repository
- key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
- restore-keys: |
- ${{ runner.os }}-maven-
+ - name: Gradle Cache
+ uses: burrunan/gradle-cache-action@v1
- name: Build Mimock JAR
working-directory: mimock-backend
- run: ./mvnw -ntp clean package -P packageJar -Drevision=$MIMOCK_CURRENT_VERSION -Dmaven.test.skip=true
+ run: ./gradlew clean bootJar
- name: Publish JAR
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
with:
name: mimock-jar
path: |
- mimock-backend/target/mimock-*.jar
+ mimock-backend/build/libs/*
- name: Build mimock docker image
run: |
- docker build -t mimock-backend:${{ github.sha }} . -f ./Dockerfile.min && echo "Docker image build validated"
+ docker build -t mimock-backend:${{ github.sha }} . -f ./Dockerfile.slim --build-arg MIMOCK_CURRENT_VERSION=$MIMOCK_CURRENT_VERSION && echo "Docker image build validated"
docker system prune && docker image prune --all
diff --git a/.github/workflows/mimock-bundle.yml b/.github/workflows/mimock-bundle.yml
index d9a531c3..6d145383 100644
--- a/.github/workflows/mimock-bundle.yml
+++ b/.github/workflows/mimock-bundle.yml
@@ -10,7 +10,9 @@ jobs:
MIMOCK_CURRENT_VERSION: ${{ secrets.MIMOCK_CURRENT_VERSION }}
steps:
- name: Check out code
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
+
+ - uses: gradle/wrapper-validation-action@v1
- name: Build Mimock app
run: |
@@ -18,7 +20,7 @@ jobs:
- name: Build platform bundles
run: |
- cp -p ./mimock-backend/target/mimock-${{ secrets.MIMOCK_CURRENT_VERSION }}.jar ./installation/lib/mimock.jar
+ cp -p ./mimock-backend/build/libs/mimock-${{ secrets.MIMOCK_CURRENT_VERSION }}.jar ./installation/lib/mimock.jar
cd ./installation
zip -r mimock-${{ secrets.MIMOCK_CURRENT_VERSION }}.zip lib/*
@@ -28,21 +30,21 @@ jobs:
tar czf mimock-${{ secrets.MIMOCK_CURRENT_VERSION }}.tar.gz --directory=installation lib start mimock.properties setup_database psql_setup.sql
- name: Publish JAR
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
with:
name: mimock-${{ secrets.MIMOCK_CURRENT_VERSION }}-jar.zip
path: |
- ./mimock-backend/target/mimock-${{ secrets.MIMOCK_CURRENT_VERSION }}.jar
+ ./mimock-backend/build/libs/mimock-${{ secrets.MIMOCK_CURRENT_VERSION }}.jar
- name: Publish Linux Bundle
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
with:
name: mimock-${{ secrets.MIMOCK_CURRENT_VERSION }}.tar.gz
path: |
mimock-${{ secrets.MIMOCK_CURRENT_VERSION }}.tar.gz
- name: Publish Windows Bundle
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
with:
name: mimock-${{ secrets.MIMOCK_CURRENT_VERSION }}.zip
path: |
@@ -81,7 +83,7 @@ jobs:
docker build -t mimock/mimock:slim . -f ./Dockerfile.slim
docker tag mimock/mimock:slim mimock/mimock:${{ secrets.MIMOCK_CURRENT_VERSION }}-slim
- docker build -t mimock/mimock:latest . -f ./Dockerfile.complete
+ docker build -t mimock/mimock:latest . -f ./Dockerfile.complete --build-arg MIMOCK_VERSION=${{ secrets.MIMOCK_CURRENT_VERSION }}
docker tag mimock/mimock:latest mimock/mimock:${{ secrets.MIMOCK_CURRENT_VERSION }}
- name: Log in to Docker Hub
diff --git a/Dockerfile b/Dockerfile
index 67c26695..dde3ee2e 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -9,9 +9,9 @@ RUN chmod 755 -R .
RUN apk add openjdk11
RUN apk add openjdk11-jre
-RUN sed -i 's/\r$//' mvnw
-RUN ./mvnw clean package -P packageJar -Dmaven.test.skip=true
+RUN sed -i 's/\r$//' gradlew
+RUN ./gradlew bootJar
EXPOSE 8080
-ENTRYPOINT ["java","-jar","./target/mimock-0.0.1.jar"]
+ENTRYPOINT ["java","-jar","./target/mimock-0.0.0.jar"]
diff --git a/Dockerfile.complete b/Dockerfile.complete
index b14b8149..e5ce59fc 100644
--- a/Dockerfile.complete
+++ b/Dockerfile.complete
@@ -2,7 +2,9 @@ FROM alpine:3.15.0
WORKDIR /home/mimock
-COPY ${PWD}/mimock-backend/target/mimock*.jar mimock.jar
+ARG MIMOCK_CURRENT_VERSION=0.0.0
+
+COPY ${PWD}/mimock-backend/build/libs/mimock-${MIMOCK_CURRENT_VERSION}.jar mimock.jar
RUN apk add openjdk11-jre
RUN apk add postgresql13
diff --git a/Dockerfile.slim b/Dockerfile.slim
index 604ea426..9d373363 100644
--- a/Dockerfile.slim
+++ b/Dockerfile.slim
@@ -2,7 +2,9 @@ FROM eclipse-temurin:11.0.16.1_1-jre
WORKDIR /home/mimock
-COPY ${PWD}/mimock-backend/target/mimock*.jar mimock.jar
+ARG MIMOCK_CURRENT_VERSION=0.0.0
+
+COPY ${PWD}/mimock-backend/build/libs/mimock-${MIMOCK_CURRENT_VERSION}.jar mimock.jar
EXPOSE 8080
diff --git a/Makefile b/Makefile
index 59a6d48a..3b8e952d 100644
--- a/Makefile
+++ b/Makefile
@@ -10,11 +10,11 @@ STATIC_DIR := '../mimock-backend/src/main/resources/static/mimock-ui'
VERSION := $$MIMOCK_CURRENT_VERSION
ifdef SKIP_TESTS
-BUILD_BACKEND := cd ./mimock-backend && ./mvnw -ntp clean package -Dmaven.test.skip=true -Drevision=$(VERSION) && cd ..
+BUILD_BACKEND := cd ./mimock-backend && ./gradlew build -x test && cd ..
BUILD_UI := cd ./mimock-ui && yarn && NODE_NEV=production yarn build
else
BUILD_UI := cd ./mimock-ui && yarn && yarn test && NODE_NEV=production yarn build
-BUILD_BACKEND := cd ./mimock-backend && ./mvnw -ntp clean package -Drevision=$(VERSION) && cd ..
+BUILD_BACKEND := cd ./mimock-backend && ./gradlew build && cd ..
endif
cd_backend:
@@ -32,16 +32,13 @@ start-database: create-network
@docker inspect mimock-db --format "imageName: {{.Id}}" || docker run --name mimock-db -p 5432:5432 --network mimock-network -d mimock-pg-database
start-app-local: start-database
- ./mimock-backend/mvnw clean spring-boot:run -Dspring.config.location=$(APP_CONFIG_FILE) -Dspring.datasource.url=$(APP_DB_URL)
+ ./mimock-backend/gradlew bootRun -Dspring.config.location=$(APP_CONFIG_FILE) -Dspring.datasource.url=$(APP_DB_URL)
format-check:
- ./mimock-backend/mvnw checkstyle:check
-
-format-report:
- ./mimock-backend/mvnw clean site
+ ./mimock-backend/gradlew checkstyleMain
test-local: start-database
- ./mimock-backend/mvnw clean test -Dspring.config.location=$(TEST_CONFIG_FILE) -Dspring.datasource.url=$(TEST_DB_URL) -P startDatabase
+ ./mimock-backend/gradlew test -Dspring.config.location=$(TEST_CONFIG_FILE) -Dspring.datasource.url=$(TEST_DB_URL) -P startDatabase
test-ci:
docker-compose -f docker-compose.test.yml up --abort-on-container-exit --exit-code-from mimock-test
@@ -57,7 +54,7 @@ bundle-app: start-database build-app
build-docker-image:
@echo "Building docker image" && \
- docker build -t mimock/mimock:$(VERSION) . -f ./Dockerfile.slim
+ docker build -t mimock/mimock:$(VERSION) . -f ./Dockerfile.slim --build-arg MIMOCK_CURRENT_VERSION=$(VERSION)
generate-keystore:
@echo "Generating keystore" && \
diff --git a/mimock-backend/.gitignore b/mimock-backend/.gitignore
index 9fc9022b..d79cee2d 100644
--- a/mimock-backend/.gitignore
+++ b/mimock-backend/.gitignore
@@ -34,4 +34,7 @@ build/
/src/main/resources/keystore/*.p12
/src/main/resources/static/**/*
-!/src/main/resources/static/.gitkeep
\ No newline at end of file
+!/src/main/resources/static/.gitkeep
+.mvn/
+build/
+.gradle/
diff --git a/mimock-backend/.jpb/jpb-settings.xml b/mimock-backend/.jpb/jpb-settings.xml
deleted file mode 100644
index ae03b0cf..00000000
--- a/mimock-backend/.jpb/jpb-settings.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
- postgres
-
-
-
-
\ No newline at end of file
diff --git a/mimock-backend/.mvn/wrapper/MavenWrapperDownloader.java b/mimock-backend/.mvn/wrapper/MavenWrapperDownloader.java
deleted file mode 100644
index b901097f..00000000
--- a/mimock-backend/.mvn/wrapper/MavenWrapperDownloader.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright 2007-present the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import java.net.*;
-import java.io.*;
-import java.nio.channels.*;
-import java.util.Properties;
-
-public class MavenWrapperDownloader {
-
- private static final String WRAPPER_VERSION = "0.5.6";
- /**
- * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
- */
- private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
- + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
-
- /**
- * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
- * use instead of the default one.
- */
- private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
- ".mvn/wrapper/maven-wrapper.properties";
-
- /**
- * Path where the maven-wrapper.jar will be saved to.
- */
- private static final String MAVEN_WRAPPER_JAR_PATH =
- ".mvn/wrapper/maven-wrapper.jar";
-
- /**
- * Name of the property which should be used to override the default download url for the wrapper.
- */
- private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
-
- public static void main(String args[]) {
- System.out.println("- Downloader started");
- File baseDirectory = new File(args[0]);
- System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
-
- // If the maven-wrapper.properties exists, read it and check if it contains a custom
- // wrapperUrl parameter.
- File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
- String url = DEFAULT_DOWNLOAD_URL;
- if(mavenWrapperPropertyFile.exists()) {
- FileInputStream mavenWrapperPropertyFileInputStream = null;
- try {
- mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
- Properties mavenWrapperProperties = new Properties();
- mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
- url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
- } catch (IOException e) {
- System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
- } finally {
- try {
- if(mavenWrapperPropertyFileInputStream != null) {
- mavenWrapperPropertyFileInputStream.close();
- }
- } catch (IOException e) {
- // Ignore ...
- }
- }
- }
- System.out.println("- Downloading from: " + url);
-
- File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
- if(!outputFile.getParentFile().exists()) {
- if(!outputFile.getParentFile().mkdirs()) {
- System.out.println(
- "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
- }
- }
- System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
- try {
- downloadFileFromURL(url, outputFile);
- System.out.println("Done");
- System.exit(0);
- } catch (Throwable e) {
- System.out.println("- Error downloading");
- e.printStackTrace();
- System.exit(1);
- }
- }
-
- private static void downloadFileFromURL(String urlString, File destination) throws Exception {
- if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
- String username = System.getenv("MVNW_USERNAME");
- char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
- Authenticator.setDefault(new Authenticator() {
- @Override
- protected PasswordAuthentication getPasswordAuthentication() {
- return new PasswordAuthentication(username, password);
- }
- });
- }
- URL website = new URL(urlString);
- ReadableByteChannel rbc;
- rbc = Channels.newChannel(website.openStream());
- FileOutputStream fos = new FileOutputStream(destination);
- fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
- fos.close();
- rbc.close();
- }
-
-}
diff --git a/mimock-backend/.mvn/wrapper/maven-wrapper.jar b/mimock-backend/.mvn/wrapper/maven-wrapper.jar
deleted file mode 100644
index 2cc7d4a5..00000000
Binary files a/mimock-backend/.mvn/wrapper/maven-wrapper.jar and /dev/null differ
diff --git a/mimock-backend/.mvn/wrapper/maven-wrapper.properties b/mimock-backend/.mvn/wrapper/maven-wrapper.properties
deleted file mode 100644
index 642d572c..00000000
--- a/mimock-backend/.mvn/wrapper/maven-wrapper.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
-wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
diff --git a/mimock-backend/.run/Coverage.run.xml b/mimock-backend/.run/Coverage.run.xml
new file mode 100644
index 00000000..af9e13f0
--- /dev/null
+++ b/mimock-backend/.run/Coverage.run.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+
+
+
\ No newline at end of file
diff --git a/mimock-backend/.run/Dev.run.xml b/mimock-backend/.run/Dev.run.xml
new file mode 100644
index 00000000..8886af62
--- /dev/null
+++ b/mimock-backend/.run/Dev.run.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/mimock-backend/.run/MimockApplication.run.xml b/mimock-backend/.run/MimockApplication.run.xml
new file mode 100644
index 00000000..b67f172a
--- /dev/null
+++ b/mimock-backend/.run/MimockApplication.run.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/mimock-backend/.run/Test.run.xml b/mimock-backend/.run/Test.run.xml
new file mode 100644
index 00000000..37eb8578
--- /dev/null
+++ b/mimock-backend/.run/Test.run.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+
+
+
\ No newline at end of file
diff --git a/mimock-backend/.run/build.run.xml b/mimock-backend/.run/build.run.xml
new file mode 100644
index 00000000..0e47d997
--- /dev/null
+++ b/mimock-backend/.run/build.run.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ true
+ false
+
+
+
\ No newline at end of file
diff --git a/mimock-backend/build.gradle b/mimock-backend/build.gradle
new file mode 100644
index 00000000..6bc24fb6
--- /dev/null
+++ b/mimock-backend/build.gradle
@@ -0,0 +1,121 @@
+plugins {
+ id 'java-library'
+ id 'java'
+ id 'org.springframework.boot' version '2.6.6'
+
+ id 'checkstyle'
+ id 'jacoco'
+ id 'org.liquibase.gradle' version '2.0.4'
+ id 'io.freefair.lombok' version '8.0.1'
+}
+
+repositories {
+ mavenCentral()
+ mavenLocal()
+ maven {
+ url = uri('https://repo.maven.apache.org/maven2/')
+ }
+}
+
+group = 'com.arbindo'
+version = System.getenv('MIMOCK_CURRENT_VERSION') ?: '0.0.0-SNAPSHOT'
+description = 'mimock'
+java.sourceCompatibility = JavaVersion.VERSION_11
+
+dependencies {
+ implementation 'org.springframework.boot:spring-boot-starter-jdbc:2.6.6'
+ implementation 'org.springframework.boot:spring-boot-starter-security:2.6.6'
+ implementation 'org.springframework.boot:spring-boot-starter-web:2.6.6'
+ implementation 'org.springframework.boot:spring-boot-starter-validation:2.6.6'
+ implementation 'org.apache.commons:commons-lang3:3.12.0'
+ implementation 'org.springdoc:springdoc-openapi-ui:1.6.11'
+ implementation 'org.springdoc:springdoc-openapi-security:1.6.12'
+ implementation 'org.liquibase:liquibase-core:4.8.0'
+ implementation 'org.projectlombok:lombok:1.18.22'
+ implementation 'org.hibernate:hibernate-core:5.6.7.Final'
+ implementation 'org.springframework.boot:spring-boot-test:2.6.6'
+ implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.2'
+ implementation 'net.sf.supercsv:super-csv:2.4.0'
+ implementation 'org.springframework.boot:spring-boot-starter-data-jpa:2.6.6'
+ implementation 'net.lbruun.springboot:preliquibase-spring-boot-starter:1.2.1'
+ implementation 'com.google.guava:guava:31.1-jre'
+ implementation 'com.vladmihalcea:hibernate-types-55:2.20.0'
+ implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
+ implementation 'org.springframework.boot:spring-boot-starter-actuator:2.7.4'
+ implementation 'org.springframework.boot:spring-boot-starter-cache:2.6.6'
+ implementation 'com.github.ben-manes.caffeine:caffeine:3.1.5'
+ runtimeOnly 'org.springframework.boot:spring-boot-devtools:2.6.6'
+ runtimeOnly 'org.postgresql:postgresql:42.3.8'
+ runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'
+ runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5'
+ runtimeOnly 'io.micrometer:micrometer-registry-prometheus:1.9.4'
+ runtimeOnly 'com.h2database:h2:2.1.214'
+ testImplementation 'org.springframework.boot:spring-boot-starter-test:2.6.6'
+ testImplementation 'org.springframework.security:spring-security-test:5.6.2'
+ testImplementation 'org.awaitility:awaitility:4.1.1'
+ testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
+ testImplementation 'org.mockito:mockito-inline:4.8.0'
+ testImplementation 'org.mockito:mockito-junit-jupiter:4.6.1'
+ testImplementation 'junit:junit:4.13.2'
+ compileOnly 'org.projectlombok:lombok:1.18.22'
+ annotationProcessor 'org.projectlombok:lombok:1.18.22'
+}
+
+test {
+ useJUnitPlatform()
+ finalizedBy jacocoTestReport
+}
+
+jacoco {
+ toolVersion = "0.8.7"
+}
+
+jacocoTestReport {
+ dependsOn test
+ reports {
+ xml.required = true
+ html.required = true
+ }
+}
+
+jacocoTestCoverageVerification {
+ violationRules {
+ rule {
+ element = 'PACKAGE'
+ limit {
+ counter = 'LINE'
+ value = 'COVEREDRATIO'
+ minimum = 0.9
+ }
+ }
+ }
+
+ finalizedBy jacocoTestReport
+}
+
+tasks.register("coverage") {
+ dependsOn("jacocoTestCoverageVerification")
+}
+
+checkstyle {
+ toolVersion '10.3.3'
+ ignoreFailures false
+ showViolations true
+ maxWarnings 0
+ sourceSets = [sourceSets.main]
+}
+
+tasks.register('startDatabase') {
+ doFirst {
+ exec {
+ commandLine 'docker', 'build', '-t', 'mimock-pg-database', '../', '-f', '../Dockerfile.pg'
+ }
+ }
+ doLast {
+ exec {
+ commandLine 'docker', 'run', '-d', '-p', '5432:5432', '--name', 'mimock-db', 'mimock-pg-database'
+ }
+ }
+}
+
+
diff --git a/mimock-backend/src/main/resources/checkstyle.xml b/mimock-backend/config/checkstyle/checkstyle.xml
similarity index 100%
rename from mimock-backend/src/main/resources/checkstyle.xml
rename to mimock-backend/config/checkstyle/checkstyle.xml
diff --git a/mimock-backend/gradle/wrapper/gradle-wrapper.jar b/mimock-backend/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 00000000..c1962a79
Binary files /dev/null and b/mimock-backend/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/mimock-backend/gradle/wrapper/gradle-wrapper.properties b/mimock-backend/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..37aef8d3
--- /dev/null
+++ b/mimock-backend/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
+networkTimeout=10000
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/mimock-backend/gradlew b/mimock-backend/gradlew
new file mode 100755
index 00000000..aeb74cbb
--- /dev/null
+++ b/mimock-backend/gradlew
@@ -0,0 +1,245 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC3045
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC3045
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command;
+# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+# shell script including quotes and variable substitutions, so put them in
+# double quotes to make sure that they get re-expanded; and
+# * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/mimock-backend/gradlew.bat b/mimock-backend/gradlew.bat
new file mode 100644
index 00000000..93e3f59f
--- /dev/null
+++ b/mimock-backend/gradlew.bat
@@ -0,0 +1,92 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/mimock-backend/mvnw b/mimock-backend/mvnw
deleted file mode 100755
index 41c0f0c2..00000000
--- a/mimock-backend/mvnw
+++ /dev/null
@@ -1,310 +0,0 @@
-#!/bin/sh
-# ----------------------------------------------------------------------------
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-# ----------------------------------------------------------------------------
-
-# ----------------------------------------------------------------------------
-# Maven Start Up Batch script
-#
-# Required ENV vars:
-# ------------------
-# JAVA_HOME - location of a JDK home dir
-#
-# Optional ENV vars
-# -----------------
-# M2_HOME - location of maven2's installed home dir
-# MAVEN_OPTS - parameters passed to the Java VM when running Maven
-# e.g. to debug Maven itself, use
-# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
-# ----------------------------------------------------------------------------
-
-if [ -z "$MAVEN_SKIP_RC" ] ; then
-
- if [ -f /etc/mavenrc ] ; then
- . /etc/mavenrc
- fi
-
- if [ -f "$HOME/.mavenrc" ] ; then
- . "$HOME/.mavenrc"
- fi
-
-fi
-
-# OS specific support. $var _must_ be set to either true or false.
-cygwin=false;
-darwin=false;
-mingw=false
-case "`uname`" in
- CYGWIN*) cygwin=true ;;
- MINGW*) mingw=true;;
- Darwin*) darwin=true
- # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
- # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
- if [ -z "$JAVA_HOME" ]; then
- if [ -x "/usr/libexec/java_home" ]; then
- export JAVA_HOME="`/usr/libexec/java_home`"
- else
- export JAVA_HOME="/Library/Java/Home"
- fi
- fi
- ;;
-esac
-
-if [ -z "$JAVA_HOME" ] ; then
- if [ -r /etc/gentoo-release ] ; then
- JAVA_HOME=`java-config --jre-home`
- fi
-fi
-
-if [ -z "$M2_HOME" ] ; then
- ## resolve links - $0 may be a link to maven's home
- PRG="$0"
-
- # need this for relative symlinks
- while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG="`dirname "$PRG"`/$link"
- fi
- done
-
- saveddir=`pwd`
-
- M2_HOME=`dirname "$PRG"`/..
-
- # make it fully qualified
- M2_HOME=`cd "$M2_HOME" && pwd`
-
- cd "$saveddir"
- # echo Using m2 at $M2_HOME
-fi
-
-# For Cygwin, ensure paths are in UNIX format before anything is touched
-if $cygwin ; then
- [ -n "$M2_HOME" ] &&
- M2_HOME=`cygpath --unix "$M2_HOME"`
- [ -n "$JAVA_HOME" ] &&
- JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
- [ -n "$CLASSPATH" ] &&
- CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
-fi
-
-# For Mingw, ensure paths are in UNIX format before anything is touched
-if $mingw ; then
- [ -n "$M2_HOME" ] &&
- M2_HOME="`(cd "$M2_HOME"; pwd)`"
- [ -n "$JAVA_HOME" ] &&
- JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
-fi
-
-if [ -z "$JAVA_HOME" ]; then
- javaExecutable="`which javac`"
- if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
- # readlink(1) is not available as standard on Solaris 10.
- readLink=`which readlink`
- if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
- if $darwin ; then
- javaHome="`dirname \"$javaExecutable\"`"
- javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
- else
- javaExecutable="`readlink -f \"$javaExecutable\"`"
- fi
- javaHome="`dirname \"$javaExecutable\"`"
- javaHome=`expr "$javaHome" : '\(.*\)/bin'`
- JAVA_HOME="$javaHome"
- export JAVA_HOME
- fi
- fi
-fi
-
-if [ -z "$JAVACMD" ] ; then
- if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- else
- JAVACMD="`which java`"
- fi
-fi
-
-if [ ! -x "$JAVACMD" ] ; then
- echo "Error: JAVA_HOME is not defined correctly." >&2
- echo " We cannot execute $JAVACMD" >&2
- exit 1
-fi
-
-if [ -z "$JAVA_HOME" ] ; then
- echo "Warning: JAVA_HOME environment variable is not set."
-fi
-
-CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
-
-# traverses directory structure from process work directory to filesystem root
-# first directory with .mvn subdirectory is considered project base directory
-find_maven_basedir() {
-
- if [ -z "$1" ]
- then
- echo "Path not specified to find_maven_basedir"
- return 1
- fi
-
- basedir="$1"
- wdir="$1"
- while [ "$wdir" != '/' ] ; do
- if [ -d "$wdir"/.mvn ] ; then
- basedir=$wdir
- break
- fi
- # workaround for JBEAP-8937 (on Solaris 10/Sparc)
- if [ -d "${wdir}" ]; then
- wdir=`cd "$wdir/.."; pwd`
- fi
- # end of workaround
- done
- echo "${basedir}"
-}
-
-# concatenates all lines of a file
-concat_lines() {
- if [ -f "$1" ]; then
- echo "$(tr -s '\n' ' ' < "$1")"
- fi
-}
-
-BASE_DIR=`find_maven_basedir "$(pwd)"`
-if [ -z "$BASE_DIR" ]; then
- exit 1;
-fi
-
-##########################################################################################
-# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
-# This allows using the maven wrapper in projects that prohibit checking in binary data.
-##########################################################################################
-if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
- if [ "$MVNW_VERBOSE" = true ]; then
- echo "Found .mvn/wrapper/maven-wrapper.jar"
- fi
-else
- if [ "$MVNW_VERBOSE" = true ]; then
- echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
- fi
- if [ -n "$MVNW_REPOURL" ]; then
- jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
- else
- jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
- fi
- while IFS="=" read key value; do
- case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
- esac
- done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
- if [ "$MVNW_VERBOSE" = true ]; then
- echo "Downloading from: $jarUrl"
- fi
- wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
- if $cygwin; then
- wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
- fi
-
- if command -v wget > /dev/null; then
- if [ "$MVNW_VERBOSE" = true ]; then
- echo "Found wget ... using wget"
- fi
- if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
- wget "$jarUrl" -O "$wrapperJarPath"
- else
- wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
- fi
- elif command -v curl > /dev/null; then
- if [ "$MVNW_VERBOSE" = true ]; then
- echo "Found curl ... using curl"
- fi
- if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
- curl -o "$wrapperJarPath" "$jarUrl" -f
- else
- curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
- fi
-
- else
- if [ "$MVNW_VERBOSE" = true ]; then
- echo "Falling back to using Java to download"
- fi
- javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
- # For Cygwin, switch paths to Windows format before running javac
- if $cygwin; then
- javaClass=`cygpath --path --windows "$javaClass"`
- fi
- if [ -e "$javaClass" ]; then
- if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
- if [ "$MVNW_VERBOSE" = true ]; then
- echo " - Compiling MavenWrapperDownloader.java ..."
- fi
- # Compiling the Java class
- ("$JAVA_HOME/bin/javac" "$javaClass")
- fi
- if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
- # Running the downloader
- if [ "$MVNW_VERBOSE" = true ]; then
- echo " - Running MavenWrapperDownloader.java ..."
- fi
- ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
- fi
- fi
- fi
-fi
-##########################################################################################
-# End of extension
-##########################################################################################
-
-export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
-if [ "$MVNW_VERBOSE" = true ]; then
- echo $MAVEN_PROJECTBASEDIR
-fi
-MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin; then
- [ -n "$M2_HOME" ] &&
- M2_HOME=`cygpath --path --windows "$M2_HOME"`
- [ -n "$JAVA_HOME" ] &&
- JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
- [ -n "$CLASSPATH" ] &&
- CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
- [ -n "$MAVEN_PROJECTBASEDIR" ] &&
- MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
-fi
-
-# Provide a "standardized" way to retrieve the CLI args that will
-# work with both Windows and non-Windows executions.
-MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
-export MAVEN_CMD_LINE_ARGS
-
-WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
-
-exec "$JAVACMD" \
- $MAVEN_OPTS \
- -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
- "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
- ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/mimock-backend/mvnw.cmd b/mimock-backend/mvnw.cmd
deleted file mode 100644
index 86115719..00000000
--- a/mimock-backend/mvnw.cmd
+++ /dev/null
@@ -1,182 +0,0 @@
-@REM ----------------------------------------------------------------------------
-@REM Licensed to the Apache Software Foundation (ASF) under one
-@REM or more contributor license agreements. See the NOTICE file
-@REM distributed with this work for additional information
-@REM regarding copyright ownership. The ASF licenses this file
-@REM to you under the Apache License, Version 2.0 (the
-@REM "License"); you may not use this file except in compliance
-@REM with the License. You may obtain a copy of the License at
-@REM
-@REM http://www.apache.org/licenses/LICENSE-2.0
-@REM
-@REM Unless required by applicable law or agreed to in writing,
-@REM software distributed under the License is distributed on an
-@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-@REM KIND, either express or implied. See the License for the
-@REM specific language governing permissions and limitations
-@REM under the License.
-@REM ----------------------------------------------------------------------------
-
-@REM ----------------------------------------------------------------------------
-@REM Maven Start Up Batch script
-@REM
-@REM Required ENV vars:
-@REM JAVA_HOME - location of a JDK home dir
-@REM
-@REM Optional ENV vars
-@REM M2_HOME - location of maven2's installed home dir
-@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
-@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
-@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
-@REM e.g. to debug Maven itself, use
-@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
-@REM ----------------------------------------------------------------------------
-
-@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
-@echo off
-@REM set title of command window
-title %0
-@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
-@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
-
-@REM set %HOME% to equivalent of $HOME
-if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
-
-@REM Execute a user defined script before this one
-if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
-@REM check for pre script, once with legacy .bat ending and once with .cmd ending
-if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
-if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
-:skipRcPre
-
-@setlocal
-
-set ERROR_CODE=0
-
-@REM To isolate internal variables from possible post scripts, we use another setlocal
-@setlocal
-
-@REM ==== START VALIDATION ====
-if not "%JAVA_HOME%" == "" goto OkJHome
-
-echo.
-echo Error: JAVA_HOME not found in your environment. >&2
-echo Please set the JAVA_HOME variable in your environment to match the >&2
-echo location of your Java installation. >&2
-echo.
-goto error
-
-:OkJHome
-if exist "%JAVA_HOME%\bin\java.exe" goto init
-
-echo.
-echo Error: JAVA_HOME is set to an invalid directory. >&2
-echo JAVA_HOME = "%JAVA_HOME%" >&2
-echo Please set the JAVA_HOME variable in your environment to match the >&2
-echo location of your Java installation. >&2
-echo.
-goto error
-
-@REM ==== END VALIDATION ====
-
-:init
-
-@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
-@REM Fallback to current working directory if not found.
-
-set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
-IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
-
-set EXEC_DIR=%CD%
-set WDIR=%EXEC_DIR%
-:findBaseDir
-IF EXIST "%WDIR%"\.mvn goto baseDirFound
-cd ..
-IF "%WDIR%"=="%CD%" goto baseDirNotFound
-set WDIR=%CD%
-goto findBaseDir
-
-:baseDirFound
-set MAVEN_PROJECTBASEDIR=%WDIR%
-cd "%EXEC_DIR%"
-goto endDetectBaseDir
-
-:baseDirNotFound
-set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
-cd "%EXEC_DIR%"
-
-:endDetectBaseDir
-
-IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
-
-@setlocal EnableExtensions EnableDelayedExpansion
-for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
-@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
-
-:endReadAdditionalConfig
-
-SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
-set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
-set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
-
-set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
-
-FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
- IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
-)
-
-@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
-@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
-if exist %WRAPPER_JAR% (
- if "%MVNW_VERBOSE%" == "true" (
- echo Found %WRAPPER_JAR%
- )
-) else (
- if not "%MVNW_REPOURL%" == "" (
- SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
- )
- if "%MVNW_VERBOSE%" == "true" (
- echo Couldn't find %WRAPPER_JAR%, downloading it ...
- echo Downloading from: %DOWNLOAD_URL%
- )
-
- powershell -Command "&{"^
- "$webclient = new-object System.Net.WebClient;"^
- "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
- "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
- "}"^
- "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
- "}"
- if "%MVNW_VERBOSE%" == "true" (
- echo Finished downloading %WRAPPER_JAR%
- )
-)
-@REM End of extension
-
-@REM Provide a "standardized" way to retrieve the CLI args that will
-@REM work with both Windows and non-Windows executions.
-set MAVEN_CMD_LINE_ARGS=%*
-
-%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
-if ERRORLEVEL 1 goto error
-goto end
-
-:error
-set ERROR_CODE=1
-
-:end
-@endlocal & set ERROR_CODE=%ERROR_CODE%
-
-if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
-@REM check for post script, once with legacy .bat ending and once with .cmd ending
-if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
-if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
-:skipRcPost
-
-@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
-if "%MAVEN_BATCH_PAUSE%" == "on" pause
-
-if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
-
-exit /B %ERROR_CODE%
diff --git a/mimock-backend/pom.xml b/mimock-backend/pom.xml
deleted file mode 100644
index 3b7e79f6..00000000
--- a/mimock-backend/pom.xml
+++ /dev/null
@@ -1,479 +0,0 @@
-
-
- 4.0.0
-
- org.springframework.boot
- spring-boot-starter-parent
- 2.6.6
-
-
- com.arbindo
- mimock
- ${revision}
- mimock
- Platform to set up rest api mocks
-
- 11
-
-
-
- org.springframework.boot
- spring-boot-starter-jdbc
-
-
- org.springframework.boot
- spring-boot-starter-security
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
- org.springframework.boot
- spring-boot-starter-validation
-
-
- org.apache.commons
- commons-lang3
- 3.12.0
-
-
- org.springdoc
- springdoc-openapi-ui
- 1.6.11
-
-
- org.springdoc
- springdoc-openapi-security
- 1.6.12
-
-
- org.liquibase
- liquibase-core
-
-
- org.springframework.boot
- spring-boot-devtools
- runtime
- true
-
-
- org.postgresql
- postgresql
- runtime
-
-
- org.projectlombok
- lombok
- true
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
- org.hibernate
- hibernate-core
-
-
- org.springframework.security
- spring-security-test
- test
-
-
- org.springframework.boot
- spring-boot-test
-
-
- org.awaitility
- awaitility
- test
-
-
- org.junit.jupiter
- junit-jupiter-engine
- test
-
-
- com.fasterxml.jackson.datatype
- jackson-datatype-jsr310
-
-
- net.sf.supercsv
- super-csv
- 2.4.0
-
-
- org.springframework.boot
- spring-boot-starter-data-jpa
-
-
- net.lbruun.springboot
- preliquibase-spring-boot-starter
- 1.2.1
-
-
- com.google.guava
- guava
- 31.1-jre
-
-
- org.mockito
- mockito-inline
- 4.8.0
- test
-
-
- org.mockito
- mockito-junit-jupiter
- 4.6.1
- test
-
-
- junit
- junit
- test
-
-
- com.vladmihalcea
- hibernate-types-55
- 2.20.0
-
-
- io.jsonwebtoken
- jjwt-api
- 0.11.5
-
-
- io.jsonwebtoken
- jjwt-impl
- 0.11.5
- runtime
-
-
- io.jsonwebtoken
- jjwt-jackson
- 0.11.5
- runtime
-
-
- org.springframework.boot
- spring-boot-starter-actuator
- 2.7.4
-
-
- io.micrometer
- micrometer-registry-prometheus
- 1.9.4
- runtime
-
-
- com.h2database
- h2
- 2.1.214
- runtime
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-checkstyle-plugin
- 3.1.2
-
- true
- src/main/resources/checkstyle.xml
-
-
-
-
- checkstyle
-
-
-
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-checkstyle-plugin
- 3.1.2
-
-
- verify-style
- validate
-
- check
-
-
-
-
- true
- src/main/resources/checkstyle.xml
-
-
-
- com.puppycrawl.tools
- checkstyle
- 9.3
-
-
-
-
- org.apache.maven.plugins
- maven-site-plugin
- 3.7.1
-
-
- org.apache.maven.plugins
- maven-project-info-reports-plugin
- 3.1.2
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
- true
-
-
- org.projectlombok
- lombok
-
-
-
-
- ${app.profiles}
-
-
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- 3.0.0-M5
-
-
-
- spring.datasource.url
- jdbc:postgresql://localhost:5432/mimock_db
-
-
- spring.config.location
- classpath:/application.yml
-
-
-
-
-
-
- org.liquibase
- liquibase-maven-plugin
- 3.4.1
-
- src/main/resources/liquibase.properties
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.8.1
-
-
-
-
-
-
-
- coverage
-
-
-
- org.jacoco
- jacoco-maven-plugin
- 0.8.7
-
-
-
- prepare-agent
-
-
-
- report
- prepare-package
-
- report
-
-
-
- jacoco-check
-
- check
-
-
-
- **/*com/arbindo/mimock/common/constants/**
- **/*com/arbindo/mimock/MimockApplication.*
-
-
-
- PACKAGE
-
-
- LINE
- COVEREDRATIO
- 90%
-
-
-
-
-
-
-
-
-
-
-
- false
-
-
-
- productionBundle
-
-
-
- com.github.eirslett
- frontend-maven-plugin
- 1.12.1
-
- ${project.basedir}/../mimock-ui
-
-
-
- install node
-
- install-node-and-yarn
-
-
- v16.13.0
- v1.22.17
-
-
-
- yarn install
-
- yarn
-
- generate-resources
-
-
- yarn test
-
- yarn
-
- test
-
- test
-
- true
-
-
-
-
- yarn build
-
- yarn
-
- compile
-
- build
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-resources-plugin
- 3.2.0
-
-
- copy-resources
- process-classes
-
- copy-resources
-
-
- ${project.basedir}/src/main/resources/static/mimock-ui/
-
-
-
- ${project.basedir}/../mimock-ui/dist
-
-
-
-
-
-
-
-
-
-
- false
-
-
-
- startDatabase
-
-
-
- org.apache.maven.plugins
- maven-antrun-plugin
- 1.6
-
-
- start-db-container
- initialize
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- run
-
-
-
-
-
-
-
- false
-
-
-
-
-
diff --git a/mimock-backend/settings.gradle b/mimock-backend/settings.gradle
new file mode 100644
index 00000000..71dc9f70
--- /dev/null
+++ b/mimock-backend/settings.gradle
@@ -0,0 +1 @@
+rootProject.name = 'mimock'
diff --git a/mimock-backend/src/main/java/com/arbindo/mimock/MimockApplication.java b/mimock-backend/src/main/java/com/arbindo/mimock/MimockApplication.java
index 37147859..f9c58d6a 100644
--- a/mimock-backend/src/main/java/com/arbindo/mimock/MimockApplication.java
+++ b/mimock-backend/src/main/java/com/arbindo/mimock/MimockApplication.java
@@ -12,6 +12,7 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
+import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.support.DatabaseStartupValidator;
import org.springframework.scheduling.annotation.EnableScheduling;
@@ -22,6 +23,7 @@
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})
@EnableScheduling
+@EnableCaching
public class MimockApplication {
public static void main(String[] args) {
SpringApplication.run(MimockApplication.class, args);
@@ -42,7 +44,7 @@ public static BeanFactoryPostProcessor dependsOnPostProcessor() {
@Bean
public DatabaseStartupValidator databaseStartupValidator(DataSource dataSource) {
- var validator = new DatabaseStartupValidator();
+ DatabaseStartupValidator validator = new DatabaseStartupValidator();
validator.setDataSource(dataSource);
validator.setInterval(5);
validator.setTimeout(60);
diff --git a/mimock-backend/src/main/java/com/arbindo/mimock/caching/CacheConfiguration.java b/mimock-backend/src/main/java/com/arbindo/mimock/caching/CacheConfiguration.java
new file mode 100644
index 00000000..4d44af7b
--- /dev/null
+++ b/mimock-backend/src/main/java/com/arbindo/mimock/caching/CacheConfiguration.java
@@ -0,0 +1,40 @@
+package com.arbindo.mimock.caching;
+
+import com.github.benmanes.caffeine.cache.Caffeine;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cache.CacheManager;
+import org.springframework.cache.caffeine.CaffeineCacheManager;
+import org.springframework.cache.interceptor.KeyGenerator;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.concurrent.TimeUnit;
+
+@Configuration
+public class CacheConfiguration {
+ @Value("${spring.cache.caffeine.expiryInMinutes}")
+ private String expiryInMinutes = "60";
+
+ @Value("${spring.cache.caffeine.maximumSize}")
+ private String maximumSize = "1000";
+
+ @Bean
+ public Caffeine caffeineConfig() {
+ return Caffeine.
+ newBuilder().
+ expireAfterAccess(Long.parseLong(expiryInMinutes), TimeUnit.MINUTES).
+ maximumSize(Long.parseLong(maximumSize));
+ }
+
+ @Bean
+ public CacheManager cacheManager(Caffeine caffeine) {
+ CaffeineCacheManager caffeineCacheManager = new CaffeineCacheManager();
+ caffeineCacheManager.setCaffeine(caffeine);
+ return caffeineCacheManager;
+ }
+
+ @Bean("mockKeyGenerator")
+ public KeyGenerator mockKeyGenerator() {
+ return new CustomKeyGenerator();
+ }
+}
diff --git a/mimock-backend/src/main/java/com/arbindo/mimock/caching/CustomKeyGenerator.java b/mimock-backend/src/main/java/com/arbindo/mimock/caching/CustomKeyGenerator.java
new file mode 100644
index 00000000..8f5cc408
--- /dev/null
+++ b/mimock-backend/src/main/java/com/arbindo/mimock/caching/CustomKeyGenerator.java
@@ -0,0 +1,33 @@
+package com.arbindo.mimock.caching;
+
+import com.arbindo.mimock.generic.GenericRequestModel;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cache.interceptor.KeyGenerator;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+
+import static org.springframework.cache.interceptor.SimpleKeyGenerator.generateKey;
+
+
+@Component
+@Slf4j
+public class CustomKeyGenerator implements KeyGenerator {
+ @Override
+ public Object generate(Object target, Method method, Object... params) {
+ log.info("Generating key for cache");
+
+ GenericRequestModel request = (GenericRequestModel) params[0];
+
+ Object key = generateKey(request.getRoute(),
+ request.getHttpMethod(),
+ request.getQueryParam(),
+ request.getRequestBody(),
+ request.getRequestHeaders());
+
+ int hashedKey = key.hashCode();
+
+ log.info("Generated cache key: " + hashedKey);
+ return hashedKey;
+ }
+}
diff --git a/mimock-backend/src/main/java/com/arbindo/mimock/common/constants/CacheNames.java b/mimock-backend/src/main/java/com/arbindo/mimock/common/constants/CacheNames.java
new file mode 100644
index 00000000..ca6abe8d
--- /dev/null
+++ b/mimock-backend/src/main/java/com/arbindo/mimock/common/constants/CacheNames.java
@@ -0,0 +1,5 @@
+package com.arbindo.mimock.common.constants;
+
+public class CacheNames {
+ public static final String MOCK_REQUEST_CACHE = "mockRequestCache";
+}
diff --git a/mimock-backend/src/main/java/com/arbindo/mimock/entities/Mock.java b/mimock-backend/src/main/java/com/arbindo/mimock/entities/Mock.java
index e6054841..64f7ca7a 100644
--- a/mimock-backend/src/main/java/com/arbindo/mimock/entities/Mock.java
+++ b/mimock-backend/src/main/java/com/arbindo/mimock/entities/Mock.java
@@ -1,5 +1,6 @@
package com.arbindo.mimock.entities;
+import com.arbindo.mimock.generic.model.DomainModelForMock;
import com.arbindo.mimock.manage.mimocks.enums.Status;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
@@ -133,4 +134,15 @@ public boolean canEditMock() {
return Status.valueOf(getEntityStatus().getStatus()) != Status.DELETED;
}
-}
\ No newline at end of file
+ public DomainModelForMock toDomainModelForMock() {
+ return DomainModelForMock.builder()
+ .route(getRoute())
+ .statusCode(getStatusCode())
+ .responseContentType(getResponseContentType() != null ? getResponseContentType().getContentType() : null)
+ .responseHeaders(getResponseHeaders() != null ? getResponseHeaders().getResponseHeader() : null)
+ .responseBody(getTextualResponse() != null ?
+ getTextualResponse().getResponseBody() :
+ getBinaryResponse() != null ? getBinaryResponse().getResponseFile() : null)
+ .build();
+ }
+}
diff --git a/mimock-backend/src/main/java/com/arbindo/mimock/entities/PlatformSettings.java b/mimock-backend/src/main/java/com/arbindo/mimock/entities/PlatformSettings.java
index 5e27ec92..547b1142 100644
--- a/mimock-backend/src/main/java/com/arbindo/mimock/entities/PlatformSettings.java
+++ b/mimock-backend/src/main/java/com/arbindo/mimock/entities/PlatformSettings.java
@@ -25,19 +25,19 @@ public class PlatformSettings {
@Column(name = "is_category_execution_enabled", nullable = false)
@Schema(example = "false", description = "Category Based Execution Enabled/Disabled")
- private Boolean isCategoryExecutionEnabled = false;
+ private Boolean isCategoryExecutionEnabled;
@Column(name = "is_steps_execution_enabled", nullable = false)
@Schema(example = "false", description = "Steps Based Execution Enabled/Disabled")
- private Boolean isStepsExecutionEnabled = false;
+ private Boolean isStepsExecutionEnabled;
@Column(name = "is_export_import_enabled", nullable = false)
@Schema(example = "true", description = "Export and Import Feature Enabled/Disabled")
- private Boolean isExportImportEnabled = true;
+ private Boolean isExportImportEnabled;
@Column(name = "is_flush_bin_cron_enabled", nullable = false)
@Schema(example = "true", description = "Flush Bin CRON Feature Enabled/Disabled")
- private Boolean isFlushBinCronEnabled = true;
+ private Boolean isFlushBinCronEnabled;
@Column(name = "created_at", nullable = false)
@CreationTimestamp
diff --git a/mimock-backend/src/main/java/com/arbindo/mimock/entities/RequestHeader.java b/mimock-backend/src/main/java/com/arbindo/mimock/entities/RequestHeader.java
index cd5f8a9d..7a3da0a3 100644
--- a/mimock-backend/src/main/java/com/arbindo/mimock/entities/RequestHeader.java
+++ b/mimock-backend/src/main/java/com/arbindo/mimock/entities/RequestHeader.java
@@ -33,7 +33,7 @@ public class RequestHeader {
@Column(name = "match_exact", nullable = false)
@Schema(description = "Flag to denote if header matching should be done loosely or strictly")
- private Boolean matchExact = false;
+ private Boolean matchExact;
@Column(name = "created_at", nullable = false)
@CreationTimestamp
@@ -53,4 +53,4 @@ public class RequestHeader {
public String toString() {
return JSONUtils.convertMapToJSONString(requestHeader);
}
-}
\ No newline at end of file
+}
diff --git a/mimock-backend/src/main/java/com/arbindo/mimock/entities/User.java b/mimock-backend/src/main/java/com/arbindo/mimock/entities/User.java
index d5a68c33..3293fae3 100644
--- a/mimock-backend/src/main/java/com/arbindo/mimock/entities/User.java
+++ b/mimock-backend/src/main/java/com/arbindo/mimock/entities/User.java
@@ -31,13 +31,13 @@ public class User {
private String password;
@Column(name = "is_user_active", nullable = false)
- private Boolean isUserActive = false;
+ private Boolean isUserActive;
@Column(name = "is_user_blocked", nullable = false)
- private Boolean isUserBlocked = false;
+ private Boolean isUserBlocked;
@Column(name = "is_session_active", nullable = false)
- private Boolean isSessionActive = false;
+ private Boolean isSessionActive;
@Column(name = "last_login_at")
private ZonedDateTime lastLoginAt;
@@ -62,4 +62,4 @@ public class User {
@Column(name = "deleted_at")
@Schema(description = "Delete Timestamp")
private ZonedDateTime deletedAt;
-}
\ No newline at end of file
+}
diff --git a/mimock-backend/src/main/java/com/arbindo/mimock/generic/GenericMockRequestService.java b/mimock-backend/src/main/java/com/arbindo/mimock/generic/GenericMockRequestService.java
index c46e5967..10dfb04e 100644
--- a/mimock-backend/src/main/java/com/arbindo/mimock/generic/GenericMockRequestService.java
+++ b/mimock-backend/src/main/java/com/arbindo/mimock/generic/GenericMockRequestService.java
@@ -1,5 +1,6 @@
package com.arbindo.mimock.generic;
+import com.arbindo.mimock.common.constants.CacheNames;
import com.arbindo.mimock.entities.*;
import com.arbindo.mimock.generic.helpers.RequestHeaderComparator;
import com.arbindo.mimock.generic.model.DomainModelForMock;
@@ -13,6 +14,7 @@
import lombok.extern.log4j.Log4j2;
import org.apache.logging.log4j.Level;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -46,6 +48,7 @@ public GenericMockRequestService(DomainModelMapper domainModelMapper,
this.httpMethodsRepository = httpMethodsRepository;
}
+ @Cacheable(value = CacheNames.MOCK_REQUEST_CACHE, keyGenerator = "mockKeyGenerator")
public DomainModelForMock serveMockRequest(GenericRequestModel request) throws MatchingMockNotFoundException {
log.log(Level.INFO, "Fetching matching mock from the DB");
diff --git a/mimock-backend/src/main/java/com/arbindo/mimock/manage/mimocks/service/MockActionsServiceImpl.java b/mimock-backend/src/main/java/com/arbindo/mimock/manage/mimocks/service/MockActionsServiceImpl.java
index c3c58b2e..fe48a36a 100644
--- a/mimock-backend/src/main/java/com/arbindo/mimock/manage/mimocks/service/MockActionsServiceImpl.java
+++ b/mimock-backend/src/main/java/com/arbindo/mimock/manage/mimocks/service/MockActionsServiceImpl.java
@@ -1,15 +1,17 @@
package com.arbindo.mimock.manage.mimocks.service;
+import com.arbindo.mimock.common.constants.CacheNames;
import com.arbindo.mimock.common.services.EntityStatusService;
import com.arbindo.mimock.entities.EntityStatus;
import com.arbindo.mimock.entities.Mock;
-import com.arbindo.mimock.repository.*;
+import com.arbindo.mimock.repository.MocksRepository;
import com.arbindo.mimock.utils.ValidationUtil;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.extern.log4j.Log4j2;
import org.apache.logging.log4j.Level;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
@@ -33,6 +35,7 @@ public class MockActionsServiceImpl implements MockActionsService {
@Transactional
@Override
+ @CacheEvict(value = CacheNames.MOCK_REQUEST_CACHE, allEntries = true)
public Mock archiveMock(String mockId) {
if (ValidationUtil.isNotNullOrEmpty(mockId)) {
try {
diff --git a/mimock-backend/src/main/java/com/arbindo/mimock/manage/mimocks/service/MockManagementServiceImpl.java b/mimock-backend/src/main/java/com/arbindo/mimock/manage/mimocks/service/MockManagementServiceImpl.java
index c9f73fa2..217480c7 100644
--- a/mimock-backend/src/main/java/com/arbindo/mimock/manage/mimocks/service/MockManagementServiceImpl.java
+++ b/mimock-backend/src/main/java/com/arbindo/mimock/manage/mimocks/service/MockManagementServiceImpl.java
@@ -1,12 +1,14 @@
package com.arbindo.mimock.manage.mimocks.service;
import com.arbindo.mimock.audit.AuditorService;
+import com.arbindo.mimock.common.constants.CacheNames;
import com.arbindo.mimock.common.services.EntityStatusService;
import com.arbindo.mimock.entities.BinaryResponse;
import com.arbindo.mimock.entities.Mock;
import com.arbindo.mimock.entities.TextualResponse;
import com.arbindo.mimock.manage.mimocks.models.request.ProcessedMockRequest;
import com.arbindo.mimock.manage.mimocks.service.exceptions.MockAlreadyExistsException;
+import com.arbindo.mimock.manage.mimocks.service.helpers.CacheHelper;
import com.arbindo.mimock.manage.mimocks.service.helpers.MockParamBuilder;
import com.arbindo.mimock.repository.BinaryResponseRepository;
import com.arbindo.mimock.repository.MocksRepository;
@@ -18,6 +20,7 @@
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.Level;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
@@ -52,6 +55,9 @@ public class MockManagementServiceImpl implements MockManagementService {
@Autowired
AuditorService auditorService;
+ @Autowired
+ private CacheHelper cacheHelper;
+
@Override
public Mock getMockById(String mockId) {
if (ValidationUtil.isNotNullOrEmpty(mockId)) {
@@ -97,13 +103,15 @@ public Mock createMock(ProcessedMockRequest request) {
Mock mock = buildNewMockWith(request, mockParamBuilder, currentAuditor);
setResponseForNewMock(request, mock);
+ cacheHelper.putInCache(mock);
+
log.log(Level.INFO, "Saving new mock to repository");
return mocksRepository.save(mock);
} catch (MockAlreadyExistsException e) {
- log.log(Level.DEBUG, e.getMessage());
+ log.log(Level.ERROR, e.getMessage());
throw e;
} catch (Exception e) {
- log.log(Level.DEBUG, e.getMessage());
+ log.log(Level.ERROR, e.getMessage());
throw new RuntimeException(e.getMessage());
}
}
@@ -168,6 +176,7 @@ private Mock buildNewMockWith(ProcessedMockRequest request, MockParamBuilder moc
}
@Transactional(rollbackOn = {Exception.class, RuntimeException.class, MockAlreadyExistsException.class})
+ @CacheEvict(value = CacheNames.MOCK_REQUEST_CACHE, allEntries = true)
@Override
public Mock updateMock(String mockId, ProcessedMockRequest request) {
try {
diff --git a/mimock-backend/src/main/java/com/arbindo/mimock/manage/mimocks/service/helpers/CacheHelper.java b/mimock-backend/src/main/java/com/arbindo/mimock/manage/mimocks/service/helpers/CacheHelper.java
new file mode 100644
index 00000000..42660c2c
--- /dev/null
+++ b/mimock-backend/src/main/java/com/arbindo/mimock/manage/mimocks/service/helpers/CacheHelper.java
@@ -0,0 +1,62 @@
+package com.arbindo.mimock.manage.mimocks.service.helpers;
+
+import com.arbindo.mimock.caching.CustomKeyGenerator;
+import com.arbindo.mimock.common.constants.CacheNames;
+import com.arbindo.mimock.entities.Mock;
+import com.arbindo.mimock.generic.GenericRequestModel;
+import lombok.NoArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.Cache;
+import org.springframework.cache.CacheManager;
+import org.springframework.stereotype.Component;
+
+@Component
+@Slf4j
+@NoArgsConstructor
+public class CacheHelper {
+ private CacheManager cacheManager;
+
+ private CustomKeyGenerator customKeyGenerator;
+
+ @Autowired
+ public CacheHelper(CacheManager cacheManager, CustomKeyGenerator customKeyGenerator) {
+ this.cacheManager = cacheManager;
+ this.customKeyGenerator = customKeyGenerator;
+ }
+
+ private String getCacheKey(Mock mock) {
+ log.info("Generating cache key");
+ GenericRequestModel cacheRequest = GenericRequestModel.builder()
+ .route(mock.getRoute())
+ .httpMethod(mock.getHttpMethod() == null ? null : mock.getHttpMethod().getMethod())
+ .requestHeaders(mock.getRequestHeaders() == null ? null : mock.getRequestHeaders().getRequestHeader())
+ .requestBody(mock.getRequestBodiesForMock() == null ? null : mock.getRequestBodiesForMock().getRequestBody())
+ .build();
+
+ Object cacheKey = customKeyGenerator.generate(this, this.getClass().getMethods()[0], cacheRequest);
+
+ log.info("Returning generated cache key {}", cacheKey);
+ return cacheKey.toString();
+ }
+
+ public void putInCache(Mock mock) {
+ log.info("Putting mock in cache");
+
+ try {
+ String cacheKey = getCacheKey(mock);
+ Cache cache = cacheManager.getCache(CacheNames.MOCK_REQUEST_CACHE);
+
+ if (cache == null) {
+ log.error("Cache is null");
+ return;
+ }
+
+ log.info("Caching mock with key: {}", cacheKey);
+ cache.putIfAbsent(cacheKey, mock.toDomainModelForMock());
+ } catch (Exception e) {
+ log.error("Error while putting mock in cache", e);
+ }
+
+ }
+}
diff --git a/mimock-backend/src/main/resources/application-dev.yml b/mimock-backend/src/main/resources/application-dev.yml
index f4871279..bec0c7b8 100644
--- a/mimock-backend/src/main/resources/application-dev.yml
+++ b/mimock-backend/src/main/resources/application-dev.yml
@@ -68,6 +68,11 @@ spring:
user: mimock
password: ironclaw
+ cache:
+ caffeine:
+ expiryInMinutes: 60
+ maximumSize: 1000
+
app:
security:
jwt-expiry-duration: 10d
diff --git a/mimock-backend/src/main/resources/application.min.yml b/mimock-backend/src/main/resources/application-min.yml
similarity index 96%
rename from mimock-backend/src/main/resources/application.min.yml
rename to mimock-backend/src/main/resources/application-min.yml
index bad0751c..163ee577 100644
--- a/mimock-backend/src/main/resources/application.min.yml
+++ b/mimock-backend/src/main/resources/application-min.yml
@@ -60,6 +60,11 @@ spring:
user: mimock
password: ironclaw
+ cache:
+ caffeine:
+ expiryInMinutes: 60
+ maximumSize: 1000
+
app:
security:
# NOTES
diff --git a/mimock-backend/src/main/resources/application.yml b/mimock-backend/src/main/resources/application.yml
index 57e9b4d9..8dc247d2 100644
--- a/mimock-backend/src/main/resources/application.yml
+++ b/mimock-backend/src/main/resources/application.yml
@@ -61,6 +61,12 @@ spring:
user: ${MIMOCK_DB_USER:mimock}
password: ${MIMOCK_DB_PASSWORD:ironclaw}
+ cache:
+ caffeine:
+ expiryInMinutes: 60
+ maximumSize: 1000
+
+
app:
security:
# NOTES
diff --git a/mimock-backend/src/test/java/com/arbindo/mimock/caching/CustomKeyGeneratorTest.java b/mimock-backend/src/test/java/com/arbindo/mimock/caching/CustomKeyGeneratorTest.java
new file mode 100644
index 00000000..bbd9adbd
--- /dev/null
+++ b/mimock-backend/src/test/java/com/arbindo/mimock/caching/CustomKeyGeneratorTest.java
@@ -0,0 +1,31 @@
+package com.arbindo.mimock.caching;
+
+import com.arbindo.mimock.generic.GenericRequestModel;
+import org.junit.jupiter.api.Test;
+import org.springframework.cache.interceptor.KeyGenerator;
+
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+class CustomKeyGeneratorTest {
+ @Test
+ public void shouldGenerateCustomKeyFromRequest() throws NoSuchMethodException {
+ GenericRequestModel request = GenericRequestModel.builder()
+ .route("/test")
+ .httpMethod("GET")
+ .queryParam("version=1.0")
+ .requestBody(Map.of("key", "value"))
+ .requestHeaders(Map.of("Content-Type", "application/json"))
+ .build();
+
+ KeyGenerator customKeyGenerator = new CustomKeyGenerator();
+ Object key = customKeyGenerator.generate(this,
+ this.getClass().getMethod("shouldGenerateCustomKeyFromRequest"),
+ request);
+
+ assertNotNull(key);
+ assertEquals(211176627, key);
+ }
+}
diff --git a/mimock-backend/src/test/java/com/arbindo/mimock/generic/GenericMockRequestServiceTest.java b/mimock-backend/src/test/java/com/arbindo/mimock/generic/GenericMockRequestServiceTest.java
index 1a4eac81..379e0777 100644
--- a/mimock-backend/src/test/java/com/arbindo/mimock/generic/GenericMockRequestServiceTest.java
+++ b/mimock-backend/src/test/java/com/arbindo/mimock/generic/GenericMockRequestServiceTest.java
@@ -483,4 +483,4 @@ void shouldThrowMatchingMockNotFoundException_WhenEntityStatusIsNotNONE(String s
assertNotNull(matchingMockNotFoundException);
assertEquals("There are no matching mocks available", matchingMockNotFoundException.getMessage());
}
-}
\ No newline at end of file
+}
diff --git a/mimock-backend/src/test/java/com/arbindo/mimock/manage/mimocks/service/MockManagementServiceTest.java b/mimock-backend/src/test/java/com/arbindo/mimock/manage/mimocks/service/MockManagementServiceTest.java
index 9b4a6338..cbdef7b2 100644
--- a/mimock-backend/src/test/java/com/arbindo/mimock/manage/mimocks/service/MockManagementServiceTest.java
+++ b/mimock-backend/src/test/java/com/arbindo/mimock/manage/mimocks/service/MockManagementServiceTest.java
@@ -3,10 +3,9 @@
import com.arbindo.mimock.audit.AuditorService;
import com.arbindo.mimock.common.services.EntityStatusService;
import com.arbindo.mimock.entities.*;
-import com.arbindo.mimock.manage.mimocks.enums.ExpectedResponseType;
-import com.arbindo.mimock.manage.mimocks.enums.Status;
import com.arbindo.mimock.manage.mimocks.models.request.ProcessedMockRequest;
import com.arbindo.mimock.manage.mimocks.service.exceptions.MockAlreadyExistsException;
+import com.arbindo.mimock.manage.mimocks.service.helpers.CacheHelper;
import com.arbindo.mimock.manage.mimocks.service.helpers.MockParamBuilder;
import com.arbindo.mimock.repository.BinaryResponseRepository;
import com.arbindo.mimock.repository.MocksRepository;
@@ -20,12 +19,7 @@
import org.junit.jupiter.params.provider.ValueSource;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import java.time.ZonedDateTime;
-import java.util.ArrayList;
-import java.util.List;
import java.util.Optional;
import java.util.UUID;
@@ -57,6 +51,9 @@ class MockManagementServiceTest {
@org.mockito.Mock
MockParamBuilder mockParamBuilder;
+ @org.mockito.Mock
+ CacheHelper cacheHelper;
+
MockManagementService mockManagementService;
@BeforeEach
@@ -68,6 +65,7 @@ void setupMock() {
.binaryResponseRepository(mockBinaryResponseRepository)
.entityStatusService(mockEntityStatusService)
.auditorService(mockAuditorService)
+ .cacheHelper(cacheHelper)
.build();
}
@@ -152,6 +150,7 @@ void shouldReturnMock_ForCreateMock_WhenMockRequestIsValid() {
lenient().when(mockRepository.findOneByMockName(anyString())).thenReturn(emptyMock);
lenient().when(mockEntityStatusService.findByEntityStatus(anyString())).thenReturn(entityStatus);
lenient().when(mockRepository.save(any(Mock.class))).thenReturn(expectedMock);
+ doNothing().when(cacheHelper).putInCache(any(Mock.class));
// Act
Mock result = mockManagementService.createMock(request);
@@ -161,6 +160,7 @@ void shouldReturnMock_ForCreateMock_WhenMockRequestIsValid() {
verify(mockTextualResponseRepository, times(1)).save(any(TextualResponse.class));
verify(mockBinaryResponseRepository, times(1)).save(any(BinaryResponse.class));
verify(mockRepository, times(1)).save(any(Mock.class));
+ verify(cacheHelper, times(1)).putInCache(any(Mock.class));
}
@Test
diff --git a/mimock-backend/src/test/java/com/arbindo/mimock/manage/mimocks/service/helpers/CacheHelperTest.java b/mimock-backend/src/test/java/com/arbindo/mimock/manage/mimocks/service/helpers/CacheHelperTest.java
new file mode 100644
index 00000000..b458f9a8
--- /dev/null
+++ b/mimock-backend/src/test/java/com/arbindo/mimock/manage/mimocks/service/helpers/CacheHelperTest.java
@@ -0,0 +1,69 @@
+package com.arbindo.mimock.manage.mimocks.service.helpers;
+
+import com.arbindo.mimock.caching.CustomKeyGenerator;
+import com.arbindo.mimock.entities.HttpMethod;
+import com.arbindo.mimock.entities.Mock;
+import com.arbindo.mimock.generic.model.DomainModelForMock;
+import com.github.benmanes.caffeine.cache.Caffeine;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.cache.CacheManager;
+import org.springframework.cache.caffeine.CaffeineCache;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.lenient;
+
+@SpringBootTest
+class CacheHelperTest {
+ @MockBean
+ CacheManager cacheManager;
+
+ @MockBean
+ CustomKeyGenerator customKeyGenerator;
+
+ @Test
+ void shouldPutNewItemInCacheWhenCacheIsValid() {
+ DomainModelForMock domainModelForMock = DomainModelForMock.builder()
+ .route("/mock")
+ .build();
+
+ CaffeineCache cache = new CaffeineCache("mockRequestCache", Caffeine.newBuilder().build());
+ cache.put("mockKey", domainModelForMock);
+
+ lenient().when(customKeyGenerator.generate(any(), any(), any())).thenReturn("mockKey");
+ lenient().when(cacheManager.getCache("mockRequestCache")).thenReturn(cache);
+
+ Mock mock = Mock.builder()
+ .route("/mock1")
+ .httpMethod(HttpMethod.builder().method("GET").build())
+ .build();
+
+ CacheHelper cacheHelper = new CacheHelper(this.cacheManager, this.customKeyGenerator);
+ cacheHelper.putInCache(mock);
+
+ DomainModelForMock cacheItem = cache.get("mockKey", DomainModelForMock.class);
+
+ assertNotNull(cacheItem);
+ assertEquals("/mock", cacheItem.getRoute());
+ }
+
+ @Test
+ void shouldNotPutNewItemInCacheWhenCacheIsNull() {
+ lenient().when(customKeyGenerator.generate(any(), any(), any())).thenReturn("mockKey");
+ lenient().when(cacheManager.getCache("mockRequestCache")).thenReturn(null);
+
+ Mock mock = Mock.builder()
+ .route("/mock1")
+ .httpMethod(HttpMethod.builder().method("GET").build())
+ .build();
+
+ CacheHelper cacheHelper = new CacheHelper(this.cacheManager, this.customKeyGenerator);
+ cacheHelper.putInCache(mock);
+
+ CaffeineCache cache = new CaffeineCache("mockRequestCache", Caffeine.newBuilder().build());
+
+ assertNull(cache.get("mockKey", DomainModelForMock.class));
+ }
+}
diff --git a/mimock-backend/src/test/java/com/arbindo/mimock/security/user/controller/UpdateUserRoleControllerTest.java b/mimock-backend/src/test/java/com/arbindo/mimock/security/user/controller/UpdateUserRoleControllerTest.java
index 86f66e9d..cf77d0e2 100644
--- a/mimock-backend/src/test/java/com/arbindo/mimock/security/user/controller/UpdateUserRoleControllerTest.java
+++ b/mimock-backend/src/test/java/com/arbindo/mimock/security/user/controller/UpdateUserRoleControllerTest.java
@@ -6,11 +6,8 @@
import com.arbindo.mimock.helpers.general.JsonMapper;
import com.arbindo.mimock.interceptor.DefaultHttpInterceptor;
import com.arbindo.mimock.security.JwtRequestFilter;
-import com.arbindo.mimock.security.user.models.request.UpdatePasswordRequest;
import com.arbindo.mimock.security.user.models.request.UpdateUserRoleRequest;
-import com.arbindo.mimock.security.user.service.UpdatePasswordService;
import com.arbindo.mimock.security.user.service.UpdateUserRoleService;
-import io.jsonwebtoken.jackson.io.JacksonSerializer;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@@ -29,11 +26,11 @@
import org.springframework.test.web.servlet.MvcResult;
import javax.sql.DataSource;
-
import java.util.Map;
import java.util.Objects;
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.lenient;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
@@ -132,4 +129,4 @@ void shouldRespondWithStatusInternalServerError_WhenUserRoleUpdateFails() throws
assertEquals(errorMessage, responseMap.get("message"));
}
-}
\ No newline at end of file
+}
diff --git a/mimock-backend/src/test/resources/application.yml b/mimock-backend/src/test/resources/application.yml
index 49ae4ddb..ba09adad 100644
--- a/mimock-backend/src/test/resources/application.yml
+++ b/mimock-backend/src/test/resources/application.yml
@@ -41,6 +41,11 @@ spring:
user: mimock
password: ironclaw
+ cache:
+ caffeine:
+ expiryInMinutes: 60
+ maximumSize: 1000
+
app:
url_prefix: /api/mimock
security:
diff --git a/package.json b/package.json
index 08e1d649..dc5240c5 100644
--- a/package.json
+++ b/package.json
@@ -13,6 +13,6 @@
},
"scripts": {
"prepare": "husky install",
- "backend:pre-push": "cd mimock-backend && ./mvnw -ntp clean initialize verify -P coverage -Dspring.config.location=classpath:/application.yml"
+ "backend:pre-push": "cd mimock-backend && ./gradlew build"
}
}