diff --git a/pom.xml b/pom.xml
index 9330731198edc3c4ba6452054b0099fff108661d..36be6af2c06bf4f2161aedea34accfe48a130225 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,78 +1,125 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
+<?xml version="1.0" encoding="utf-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.springframework.boot</groupId>
+    <artifactId>spring-boot-starter-parent</artifactId>
+    <version>2.6.3</version>
+    <relativePath />
+  </parent>
+  <groupId>de.landsh.opendata</groupId>
+  <artifactId>dcat-catalog-proxy</artifactId>
+  <version>1.2</version>
+  <name>dcat-catalog-proxy</name>
+  <description>DCAT catalog proxy</description>
+  <properties>
+    <java.version>1.8</java.version>
+    <jena.version>4.4.0</jena.version>
+  </properties>
+  <dependencies>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-web</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-test</artifactId>
+      <scope>test</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>org.junit.vintage</groupId>
+          <artifactId>junit-vintage-engine</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.jena</groupId>
+      <artifactId>jena-core</artifactId>
+      <version>${jena.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-log4j12</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.jena</groupId>
+      <artifactId>jena-arq</artifactId>
+      <version>${jena.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-log4j12</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.mock-server</groupId>
+      <artifactId>mockserver-netty</artifactId>
+      <version>5.11.2</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.mock-server</groupId>
+      <artifactId>mockserver-client-java</artifactId>
+      <version>5.11.2</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
         <groupId>org.springframework.boot</groupId>
-        <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.6.3</version>
-        <relativePath/>
-    </parent>
-
-    <groupId>de.landsh.opendata</groupId>
-    <artifactId>dcat-catalog-proxy</artifactId>
-    <version>1.2</version>
-    <name>dcat-catalog-proxy</name>
-    <description>DCAT catalog proxy</description>
-
-    <properties>
-        <java.version>1.8</java.version>
-        <jena.version>4.4.0</jena.version>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-            <scope>test</scope>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.junit.vintage</groupId>
-                    <artifactId>junit-vintage-engine</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.jena</groupId>
-            <artifactId>jena-core</artifactId>
-            <version>${jena.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>slf4j-log4j12</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.jena</groupId>
-            <artifactId>jena-arq</artifactId>
-            <version>${jena.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.slf4j</groupId>
-                    <artifactId>slf4j-log4j12</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-            </plugin>
-        </plugins>
-    </build>
-
+        <artifactId>spring-boot-maven-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.jacoco</groupId>
+        <artifactId>jacoco-maven-plugin</artifactId>
+        <version>0.8.7</version>
+        <executions>
+          <execution>
+            <id>coverage-initialize</id>
+            <goals>
+              <goal>prepare-agent</goal>
+            </goals>
+          </execution>
+          <execution>
+            <id>coverage-report</id>
+            <phase>post-integration-test</phase>
+            <goals>
+              <goal>report</goal>
+            </goals>
+          </execution>
+          <execution>
+            <id>coverage-check</id>
+            <goals>
+              <goal>check</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <rule>
+                  <element>CLASS</element>
+                  <excludes>
+                    <exclude>de.landsh.opendata.catalogproxy.DcatCatalogProxyApplication</exclude>
+                  </excludes>
+                  <limits>
+                    <limit>
+                      <counter>LINE</counter>
+                      <value>COVEREDRATIO</value>
+                      <minimum>80%</minimum>
+                    </limit>
+                  </limits>
+                </rule>
+              </rules>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
 </project>
diff --git a/src/main/java/de/landsh/opendata/catalogproxy/FilterController.java b/src/main/java/de/landsh/opendata/catalogproxy/FilterController.java
index 4b171c500af0a039fdb64fe1e31781ed5b9269cb..2434b5c5f9257586ae7ab5aa5654783726c7ce9f 100644
--- a/src/main/java/de/landsh/opendata/catalogproxy/FilterController.java
+++ b/src/main/java/de/landsh/opendata/catalogproxy/FilterController.java
@@ -4,7 +4,6 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.jena.rdf.model.Model;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -20,18 +19,19 @@ import java.net.URLEncoder;
 @Controller
 public class FilterController {
     private static final Logger log = LoggerFactory.getLogger(FilterController.class);
-
+    private final CatalogFilter catalogFilter;
     @Value("${remoteURL:https://opendata.schleswig-holstein.de/}")
-    private String remoteURL;
+    String remoteURL;
 
-    @Autowired
-    private CatalogFilter catalogFilter;
+    public FilterController(CatalogFilter filter) {
+        this.catalogFilter = filter;
+    }
 
     @RequestMapping(value = "/catalog.xml", produces = "application/rdf+xml")
     public void catalog(@RequestParam(required = false) Integer page,
-                        @RequestParam(required = false) String  q,
-                        @RequestParam(required = false) String  fq,
-                        @RequestParam(required = false, name="modified_since") String  modifiedSince,
+                        @RequestParam(required = false) String q,
+                        @RequestParam(required = false) String fq,
+                        @RequestParam(required = false, name = "modified_since") String modifiedSince,
                         HttpServletResponse response) throws IOException {
         if (page == null)
             page = 1;
@@ -41,15 +41,15 @@ public class FilterController {
         final StringBuilder url = new StringBuilder(remoteURL);
         url.append("catalog.xml?page=");
         url.append(page);
-        if(StringUtils.isNotBlank(modifiedSince)) {
+        if (StringUtils.isNotBlank(modifiedSince)) {
             url.append("&modified_since=");
             url.append(URLEncoder.encode(modifiedSince, "utf-8"));
         }
-        if(StringUtils.isNotBlank(q)) {
+        if (StringUtils.isNotBlank(q)) {
             url.append("&q=");
             url.append(URLEncoder.encode(q, "utf-8"));
         }
-        if(StringUtils.isNotBlank(fq)) {
+        if (StringUtils.isNotBlank(fq)) {
             url.append("&fq=");
             url.append(URLEncoder.encode(fq, "utf-8"));
         }
diff --git a/src/test/java/de/landsh/opendata/catalogproxy/FilterControllerTest.java b/src/test/java/de/landsh/opendata/catalogproxy/FilterControllerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..561e77401353082ff7e150ea088d1dd67e6f7437
--- /dev/null
+++ b/src/test/java/de/landsh/opendata/catalogproxy/FilterControllerTest.java
@@ -0,0 +1,105 @@
+package de.landsh.opendata.catalogproxy;
+
+import org.apache.jena.rdf.model.ModelFactory;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+import org.mockserver.client.MockServerClient;
+import org.mockserver.integration.ClientAndServer;
+import org.mockserver.model.Header;
+import org.mockserver.model.HttpStatusCode;
+import org.springframework.mock.web.MockHttpServletResponse;
+
+import java.io.IOException;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockserver.integration.ClientAndServer.startClientAndServer;
+import static org.mockserver.matchers.Times.unlimited;
+import static org.mockserver.model.HttpRequest.request;
+import static org.mockserver.model.HttpResponse.response;
+
+public class FilterControllerTest {
+    private static ClientAndServer mockServer;
+    CatalogFilter catalogFilter = Mockito.mock(CatalogFilter.class);
+    MockHttpServletResponse response = new MockHttpServletResponse();
+    FilterController controller = new FilterController(catalogFilter);
+
+    @BeforeAll
+    public static void startServer() throws IOException {
+        mockServer = startClientAndServer(1080);
+
+
+    }
+
+    @AfterAll
+    public static void stopServer() {
+        mockServer.stop();
+    }
+
+    @BeforeEach
+    public void setUp() {
+        Mockito.when(catalogFilter.work(any())).thenReturn(ModelFactory.createDefaultModel());
+
+        controller.remoteURL = "http://localhost:" + mockServer.getPort() + "/";
+    }
+
+    @Test
+    public void catalog_all_parameters() throws IOException {
+        byte[] rawdata = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:dcat=\"http://www.w3.org/ns/dcat#\"><dcat:Catalog rdf:about=\"https://opendata.schleswig-holstein.de\"></dcat:Catalog></rdf:RDF>".getBytes();
+
+        new MockServerClient("127.0.0.1", mockServer.getPort())
+                .when(
+                        request()
+                                .withMethod("GET")
+                                .withPath("/catalog.xml")
+                                .withQueryStringParameter("page", "5")
+                                .withQueryStringParameter("q", "myquery")
+                                .withQueryStringParameter("modified_since","2022-02-07")
+                                .withQueryStringParameter("fq", "org:zit"),
+                        unlimited())
+                .respond(
+                        response()
+                                .withStatusCode(HttpStatusCode.OK_200.code())
+                                .withHeaders(
+                                        new Header("Content-Type", "application/xml"))
+                                .withBody(rawdata)
+                );
+
+        controller.catalog(5, "myquery", "org:zit", "2022-02-07", response);
+
+        assertEquals("<rdf:RDF\n" +
+                "    xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n" +
+                "</rdf:RDF>\n", response.getContentAsString());
+    }
+
+    @Test
+    public void catalog_all_null() throws IOException {
+        byte[] rawdata = "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:dcat=\"http://www.w3.org/ns/dcat#\"><dcat:Catalog rdf:about=\"https://opendata.schleswig-holstein.de\"></dcat:Catalog></rdf:RDF>".getBytes();
+
+        new MockServerClient("127.0.0.1", mockServer.getPort())
+                .when(
+                        request()
+                                .withMethod("GET")
+                                .withPath("/catalog.xml")
+                                .withQueryStringParameter("page", "1"),
+                        unlimited())
+                .respond(
+                        response()
+                                .withStatusCode(HttpStatusCode.OK_200.code())
+                                .withHeaders(
+                                        new Header("Content-Type", "application/xml"))
+                                .withBody(rawdata)
+                );
+
+
+        controller.catalog(null, null, null, null, response);
+
+        assertEquals("application/rdf+xml;charset=utf-8", response.getContentType());
+        assertEquals("<rdf:RDF\n" +
+                "    xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n" +
+                "</rdf:RDF>\n", response.getContentAsString());
+    }
+}