diff --git a/src/utils/Partitioner.cpp b/src/utils/Partitioner.cpp
index 7a7eb2d9071bd9466611379efa3a950bb3c65d7c..347b07da6bffdf62d0218ca5231ed9e03a9c698f 100644
--- a/src/utils/Partitioner.cpp
+++ b/src/utils/Partitioner.cpp
@@ -26,7 +26,7 @@ Partitioner::partition(const CRSGraph& graph)
   std::vector<float> tpwgts(npart, 1. / npart);
 
   std::vector<float> ubvec{1.05};
-  std::vector<int> options{1, 1, 0};
+  std::vector<int> options{1, 0, 0};
   int edgecut = 0;
   Array<int> part(0);
 
@@ -66,9 +66,11 @@ Partitioner::partition(const CRSGraph& graph)
     int result =
       ParMETIS_V3_PartKway(&(vtxdist[0]), entries_ptr, neighbors_ptr, NULL, NULL, &wgtflag, &numflag, &ncon, &npart,
                            &(tpwgts[0]), &(ubvec[0]), &(options[0]), &edgecut, &(part[0]), &parmetis_comm);
+    // LCOV_EXCL_START
     if (result == METIS_ERROR) {
       throw UnexpectedError("Metis Error");
     }
+    // LCOV_EXCL_STOP
 
     MPI_Comm_free(&parmetis_comm);
   }
@@ -81,9 +83,11 @@ Partitioner::partition(const CRSGraph& graph)
 #else   // PUGS_HAS_MPI
 
 Array<int>
-Partitioner::partition(const CRSGraph&)
+Partitioner::partition(const CRSGraph& graph)
 {
-  return Array<int>(0);
+  Array<int> partition{graph.entries().size() - 1};
+  partition.fill(0);
+  return partition;
 }
 
 #endif   // PUGS_HAS_MPI
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 6d032f7a668dcb041db8296b45e80c59919afcd4..a08e1a689cf3041dd62b90c81630381581b83f38 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -94,6 +94,7 @@ add_executable (unit_tests
 add_executable (mpi_unit_tests
   mpi_test_main.cpp
   test_Messenger.cpp
+  test_Partitioner.cpp
   )
 
 add_library(test_Pugs_MeshDataBase
diff --git a/tests/test_Partitioner.cpp b/tests/test_Partitioner.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f40663976571587b42bcdbf618e93de3e1827415
--- /dev/null
+++ b/tests/test_Partitioner.cpp
@@ -0,0 +1,91 @@
+#ifndef TEST_PARTITIONER_HPP
+#define TEST_PARTITIONER_HPP
+
+#include <catch2/catch.hpp>
+
+#include <utils/Messenger.hpp>
+#include <utils/Partitioner.hpp>
+
+#include <set>
+
+// clazy:excludeall=non-pod-global-static
+
+TEST_CASE("Partitioner", "[utils]")
+{
+  SECTION("one graph split to all")
+  {
+    Partitioner partitioner;
+
+    std::vector<int> entries_vector;
+    std::vector<int> neighbors_vector;
+
+    entries_vector.push_back(neighbors_vector.size());
+
+    if (parallel::rank() == 0) {
+      neighbors_vector.push_back(1);
+      neighbors_vector.push_back(2);
+      neighbors_vector.push_back(4);
+      entries_vector.push_back(neighbors_vector.size());
+
+      neighbors_vector.push_back(0);
+      neighbors_vector.push_back(3);
+      neighbors_vector.push_back(5);
+      entries_vector.push_back(neighbors_vector.size());
+
+      neighbors_vector.push_back(0);
+      neighbors_vector.push_back(2);
+      neighbors_vector.push_back(5);
+      entries_vector.push_back(neighbors_vector.size());
+
+      neighbors_vector.push_back(0);
+      neighbors_vector.push_back(2);
+      neighbors_vector.push_back(5);
+      entries_vector.push_back(neighbors_vector.size());
+
+      neighbors_vector.push_back(3);
+      neighbors_vector.push_back(5);
+      neighbors_vector.push_back(7);
+      entries_vector.push_back(neighbors_vector.size());
+
+      neighbors_vector.push_back(3);
+      neighbors_vector.push_back(5);
+      neighbors_vector.push_back(6);
+      entries_vector.push_back(neighbors_vector.size());
+
+      neighbors_vector.push_back(5);
+      neighbors_vector.push_back(6);
+      neighbors_vector.push_back(7);
+      entries_vector.push_back(neighbors_vector.size());
+
+      neighbors_vector.push_back(3);
+      neighbors_vector.push_back(5);
+      neighbors_vector.push_back(7);
+      entries_vector.push_back(neighbors_vector.size());
+
+      neighbors_vector.push_back(4);
+      neighbors_vector.push_back(6);
+      neighbors_vector.push_back(7);
+      entries_vector.push_back(neighbors_vector.size());
+    }
+
+    Array<int> entries   = convert_to_array(entries_vector);
+    Array<int> neighbors = convert_to_array(neighbors_vector);
+
+    CRSGraph graph{entries, neighbors};
+
+    Array<int> partitioned = partitioner.partition(graph);
+
+    REQUIRE((partitioned.size() + 1) == entries.size());
+
+    if (parallel::rank() == 0) {
+      std::set<int> assigned_ranks;
+      for (size_t i = 0; i < partitioned.size(); ++i) {
+        assigned_ranks.insert(partitioned[i]);
+      }
+
+      REQUIRE(assigned_ranks.size() == parallel::size());
+    }
+  }
+}
+
+#endif   // TEST_PARTITIONER_HPP