diff --git a/src/crow_getroutes_test.cpp b/src/crow_getroutes_test.cpp
index 29052a9..e76d221 100644
--- a/src/crow_getroutes_test.cpp
+++ b/src/crow_getroutes_test.cpp
@@ -1,43 +1,47 @@
 #include <crow/app.h>
+
 #include "gmock/gmock.h"
 #include "gtest/gtest.h"
 
 using namespace crow;
 using namespace std;
 
-TEST(GetRoutes, TestEmptyRoutes) {
-  SimpleApp app;
-  decltype(app)::server_t server(&app, "127.0.0.1", 45451);
+TEST(GetRoutes, TestEmptyRoutes)
+{
+    SimpleApp app;
+    decltype(app)::server_t server(&app, "127.0.0.1", 45451);
 
-  EXPECT_THAT(app.getRoutes(), testing::IsEmpty());
+    EXPECT_THAT(app.getRoutes(), testing::IsEmpty());
 }
 
 // Tests that static urls are correctly passed
-TEST(GetRoutes, TestOneRoute) {
-  SimpleApp app;
-  decltype(app)::server_t server(&app, "127.0.0.1", 45451);
-  BMCWEB_ROUTE(app, "/")([]() { return boost::beast::http::status::ok; });
+TEST(GetRoutes, TestOneRoute)
+{
+    SimpleApp app;
+    decltype(app)::server_t server(&app, "127.0.0.1", 45451);
+    BMCWEB_ROUTE(app, "/")([]() { return boost::beast::http::status::ok; });
 
-  EXPECT_THAT(app.getRoutes(),
-              testing::ElementsAre(testing::Pointee(std::string("/"))));
+    EXPECT_THAT(app.getRoutes(),
+                testing::ElementsAre(testing::Pointee(std::string("/"))));
 }
 
 // Tests that static urls are correctly passed
-TEST(GetRoutes, TestlotsOfRoutes) {
-  SimpleApp app;
-  decltype(app)::server_t server(&app, "127.0.0.1", 45451);
-  BMCWEB_ROUTE(app, "/")([]() { return boost::beast::http::status::ok; });
-  BMCWEB_ROUTE(app, "/foo")([]() { return boost::beast::http::status::ok; });
-  BMCWEB_ROUTE(app, "/bar")([]() { return boost::beast::http::status::ok; });
-  BMCWEB_ROUTE(app, "/baz")([]() { return boost::beast::http::status::ok; });
-  BMCWEB_ROUTE(app, "/boo")([]() { return boost::beast::http::status::ok; });
-  BMCWEB_ROUTE(app, "/moo")([]() { return boost::beast::http::status::ok; });
+TEST(GetRoutes, TestlotsOfRoutes)
+{
+    SimpleApp app;
+    decltype(app)::server_t server(&app, "127.0.0.1", 45451);
+    BMCWEB_ROUTE(app, "/")([]() { return boost::beast::http::status::ok; });
+    BMCWEB_ROUTE(app, "/foo")([]() { return boost::beast::http::status::ok; });
+    BMCWEB_ROUTE(app, "/bar")([]() { return boost::beast::http::status::ok; });
+    BMCWEB_ROUTE(app, "/baz")([]() { return boost::beast::http::status::ok; });
+    BMCWEB_ROUTE(app, "/boo")([]() { return boost::beast::http::status::ok; });
+    BMCWEB_ROUTE(app, "/moo")([]() { return boost::beast::http::status::ok; });
 
-  EXPECT_THAT(app.getRoutes(), testing::UnorderedElementsAre(
-                                   testing::Pointee(std::string("/")),
-                                   testing::Pointee(std::string("/foo")),
-                                   testing::Pointee(std::string("/bar")),
-                                   testing::Pointee(std::string("/baz")),
-                                   testing::Pointee(std::string("/boo")),
-                                   testing::Pointee(std::string("/moo"))));
+    EXPECT_THAT(app.getRoutes(), testing::UnorderedElementsAre(
+                                     testing::Pointee(std::string("/")),
+                                     testing::Pointee(std::string("/foo")),
+                                     testing::Pointee(std::string("/bar")),
+                                     testing::Pointee(std::string("/baz")),
+                                     testing::Pointee(std::string("/boo")),
+                                     testing::Pointee(std::string("/moo"))));
 }
\ No newline at end of file
