diff --git a/src/components/common/Alert.test.js b/src/components/common/__tests__/Alert.test.js
similarity index 96%
rename from src/components/common/Alert.test.js
rename to src/components/common/__tests__/Alert.test.js
index 9596dee..715f9bb 100644
--- a/src/components/common/Alert.test.js
+++ b/src/components/common/__tests__/Alert.test.js
@@ -10,7 +10,7 @@
import React from "react";
import { shallow } from "enzyme";
-import Alert from "./Alert";
+import Alert from "../Alert";
it("renders an alert correctly", () => {
const message = "test message";
diff --git a/src/components/common/BoxedLayoutButton.test.js b/src/components/common/__tests__/BoxedLayoutButton.test.js
similarity index 94%
rename from src/components/common/BoxedLayoutButton.test.js
rename to src/components/common/__tests__/BoxedLayoutButton.test.js
index 08a55e5..7e5cd34 100644
--- a/src/components/common/BoxedLayoutButton.test.js
+++ b/src/components/common/__tests__/BoxedLayoutButton.test.js
@@ -10,7 +10,7 @@
import React from "react";
import { shallow } from "enzyme";
-import BoxedLayoutButton from "./BoxedLayoutButton";
+import BoxedLayoutButton from "../BoxedLayoutButton";
it("renders without crashing", () => {
shallow();
diff --git a/src/components/common/Footer.test.js b/src/components/common/__tests__/Footer.test.js
similarity index 93%
rename from src/components/common/Footer.test.js
rename to src/components/common/__tests__/Footer.test.js
index 5ba3a5b..1df44f0 100644
--- a/src/components/common/Footer.test.js
+++ b/src/components/common/__tests__/Footer.test.js
@@ -10,7 +10,7 @@
import React from "react";
import { shallow } from "enzyme";
-import Footer from "./Footer";
+import Footer from "../Footer";
it("renders without crashing", () => {
shallow();
diff --git a/src/components/common/Sidebar.test.js b/src/components/common/__tests__/Sidebar.test.js
similarity index 98%
rename from src/components/common/Sidebar.test.js
rename to src/components/common/__tests__/Sidebar.test.js
index 3c6176c..c4efc35 100644
--- a/src/components/common/Sidebar.test.js
+++ b/src/components/common/__tests__/Sidebar.test.js
@@ -10,8 +10,8 @@
import React from "react";
import { shallow } from "enzyme";
-import { isDropdownOpen, navDropdown, navItem, navList } from "./Sidebar";
-import api from "../../util/api";
+import { isDropdownOpen, navDropdown, navItem, navList } from "../Sidebar";
+import api from "../../../util/api";
it("expands active drop down items", () => {
const isOpen = isDropdownOpen("/testRoute", {
diff --git a/src/components/common/StatusBadge.test.js b/src/components/common/__tests__/StatusBadge.test.js
similarity index 94%
rename from src/components/common/StatusBadge.test.js
rename to src/components/common/__tests__/StatusBadge.test.js
index 6e1e17c..6521d0d 100644
--- a/src/components/common/StatusBadge.test.js
+++ b/src/components/common/__tests__/StatusBadge.test.js
@@ -10,7 +10,7 @@
import React from "react";
import { shallow } from "enzyme";
-import { TranslatedStatusBadge } from "./StatusBadge";
+import { TranslatedStatusBadge } from "../StatusBadge";
it("shows green enabled message if API returns enabled", async () => {
const wrapper = shallow();
diff --git a/src/components/dashboard/ClientsGraph.test.js b/src/components/dashboard/__tests__/ClientsGraph.test.js
similarity index 98%
rename from src/components/dashboard/ClientsGraph.test.js
rename to src/components/dashboard/__tests__/ClientsGraph.test.js
index 410a20e..4625fa9 100644
--- a/src/components/dashboard/ClientsGraph.test.js
+++ b/src/components/dashboard/__tests__/ClientsGraph.test.js
@@ -14,7 +14,7 @@ import {
TranslatedClientsGraph,
transformData,
loadingProps
-} from "./ClientsGraph";
+} from "../ClientsGraph";
const fakeData = {
over_time: [
diff --git a/src/components/dashboard/GenericDoughnutChart.test.js b/src/components/dashboard/__tests__/GenericDoughnutChart.test.js
similarity index 98%
rename from src/components/dashboard/GenericDoughnutChart.test.js
rename to src/components/dashboard/__tests__/GenericDoughnutChart.test.js
index c9f90a2..9dc3583 100644
--- a/src/components/dashboard/GenericDoughnutChart.test.js
+++ b/src/components/dashboard/__tests__/GenericDoughnutChart.test.js
@@ -14,7 +14,7 @@ import {
GenericDoughnutChart,
transformData,
loadingProps
-} from "./GenericDoughnutChart";
+} from "../GenericDoughnutChart";
const fakeData = [
{ name: "roberta.net", ip: "8.239.48.32", percent: 0.38411761010240625 },
diff --git a/src/components/dashboard/SummaryStats.test.js b/src/components/dashboard/__tests__/SummaryStats.test.js
similarity index 98%
rename from src/components/dashboard/SummaryStats.test.js
rename to src/components/dashboard/__tests__/SummaryStats.test.js
index 4749387..92bcbae 100644
--- a/src/components/dashboard/SummaryStats.test.js
+++ b/src/components/dashboard/__tests__/SummaryStats.test.js
@@ -14,7 +14,7 @@ import {
TranslatedSummaryStats,
transformData,
errorProps
-} from "./SummaryStats";
+} from "../SummaryStats";
const fakeData = {
active_clients: 2,
diff --git a/src/components/dashboard/TopBlocked.test.js b/src/components/dashboard/__tests__/TopBlocked.test.js
similarity index 95%
rename from src/components/dashboard/TopBlocked.test.js
rename to src/components/dashboard/__tests__/TopBlocked.test.js
index 9821d34..b2949d2 100644
--- a/src/components/dashboard/TopBlocked.test.js
+++ b/src/components/dashboard/__tests__/TopBlocked.test.js
@@ -9,7 +9,7 @@
* Please see LICENSE file for your rights under this license. */
import React from "react";
-import { transformData, generateRows } from "./TopBlocked";
+import { transformData, generateRows } from "../TopBlocked";
const fakeData = {
top_domains: [
diff --git a/src/components/dashboard/TopClients.test.js b/src/components/dashboard/__tests__/TopClients.test.js
similarity index 95%
rename from src/components/dashboard/TopClients.test.js
rename to src/components/dashboard/__tests__/TopClients.test.js
index d94f40c..6936fec 100644
--- a/src/components/dashboard/TopClients.test.js
+++ b/src/components/dashboard/__tests__/TopClients.test.js
@@ -9,7 +9,7 @@
* Please see LICENSE file for your rights under this license. */
import React from "react";
-import { transformData, generateRows } from "./TopClients";
+import { transformData, generateRows } from "../TopClients";
const fakeData = {
top_clients: [
diff --git a/src/components/dashboard/TopDomains.test.js b/src/components/dashboard/__tests__/TopDomains.test.js
similarity index 95%
rename from src/components/dashboard/TopDomains.test.js
rename to src/components/dashboard/__tests__/TopDomains.test.js
index c2473b9..f511eb9 100644
--- a/src/components/dashboard/TopDomains.test.js
+++ b/src/components/dashboard/__tests__/TopDomains.test.js
@@ -9,7 +9,7 @@
* Please see LICENSE file for your rights under this license. */
import React from "react";
-import { generateRows, transformData } from "./TopDomains";
+import { generateRows, transformData } from "../TopDomains";
const fakeData = {
top_domains: [
diff --git a/src/components/dashboard/TopTable.test.js b/src/components/dashboard/__tests__/TopTable.test.js
similarity index 98%
rename from src/components/dashboard/TopTable.test.js
rename to src/components/dashboard/__tests__/TopTable.test.js
index fe10196..bd5c3ea 100644
--- a/src/components/dashboard/TopTable.test.js
+++ b/src/components/dashboard/__tests__/TopTable.test.js
@@ -10,7 +10,7 @@
import React from "react";
import { shallow } from "enzyme";
-import { TopTable } from "./TopTable";
+import { TopTable } from "../TopTable";
it("shows loading indicator correctly", () => {
const wrapper = shallow();
diff --git a/src/components/list/DomainInput.test.js b/src/components/list/__tests__/DomainInput.test.js
similarity index 97%
rename from src/components/list/DomainInput.test.js
rename to src/components/list/__tests__/DomainInput.test.js
index e5a54ae..7c780c2 100644
--- a/src/components/list/DomainInput.test.js
+++ b/src/components/list/__tests__/DomainInput.test.js
@@ -10,9 +10,9 @@
import React from "react";
import { shallow } from "enzyme";
-import DomainInput from "./DomainInput";
-import api from "../../util/api";
-import { isValidDomain } from "../../validate";
+import DomainInput from "../DomainInput";
+import api from "../../../util/api";
+import { isValidDomain } from "../../../util/validate";
it("has a placeholder", () => {
const placeholder = "placeholder";
diff --git a/src/components/list/DomainList.test.js b/src/components/list/__tests__/DomainList.test.js
similarity index 95%
rename from src/components/list/DomainList.test.js
rename to src/components/list/__tests__/DomainList.test.js
index 681f6d9..eb9b828 100644
--- a/src/components/list/DomainList.test.js
+++ b/src/components/list/__tests__/DomainList.test.js
@@ -10,8 +10,8 @@
import React from "react";
import { shallow } from "enzyme";
-import DomainList from "./DomainList";
-import api from "../../util/api";
+import DomainList from "../DomainList";
+import api from "../../../util/api";
const domains = ["domain1.com", "domain2.com", "domain3.com"];
diff --git a/src/components/list/ListPage.test.js b/src/components/list/__tests__/ListPage.test.js
similarity index 99%
rename from src/components/list/ListPage.test.js
rename to src/components/list/__tests__/ListPage.test.js
index 7f15358..75a4a39 100644
--- a/src/components/list/ListPage.test.js
+++ b/src/components/list/__tests__/ListPage.test.js
@@ -10,7 +10,7 @@
import React from "react";
import { shallow } from "enzyme";
-import ListPage from "./ListPage";
+import ListPage from "../ListPage";
it("shows the title", () => {
const title = "My Title";
diff --git a/src/components/login/ForgotPassword.test.js b/src/components/login/__tests__/ForgotPassword.test.js
similarity index 97%
rename from src/components/login/ForgotPassword.test.js
rename to src/components/login/__tests__/ForgotPassword.test.js
index 9e83523..f6e66a8 100644
--- a/src/components/login/ForgotPassword.test.js
+++ b/src/components/login/__tests__/ForgotPassword.test.js
@@ -10,7 +10,7 @@
import React from "react";
import { shallow } from "enzyme";
-import ForgotPassword from "./ForgotPassword";
+import ForgotPassword from "../ForgotPassword";
it("collapses and displays normal if there is no error", () => {
const wrapper = shallow();
diff --git a/src/components/settings/DHCPInfo.js b/src/components/settings/DHCPInfo.js
index 407fb42..4e15ae7 100644
--- a/src/components/settings/DHCPInfo.js
+++ b/src/components/settings/DHCPInfo.js
@@ -22,7 +22,11 @@ import {
InputGroupAddon,
Label
} from "reactstrap";
-import { isPositiveNumber, isValidHostname, isValidIpv4 } from "../../validate";
+import {
+ isPositiveNumber,
+ isValidHostname,
+ isValidIpv4
+} from "../../util/validate";
import Alert from "../common/Alert";
class DHCPInfo extends Component {
diff --git a/src/components/settings/DNSInfo.js b/src/components/settings/DNSInfo.js
index a4a0495..78a8fab 100644
--- a/src/components/settings/DNSInfo.js
+++ b/src/components/settings/DNSInfo.js
@@ -17,7 +17,7 @@ import { Button, Col, Form, FormGroup } from "reactstrap";
import ConditionalForwardingSettings from "./ConditionalForwardingSettings";
import DnsOptionSettings from "./DnsOptionSettings";
import Alert from "../common/Alert";
-import { isValidHostname, isValidIpv4 } from "../../validate";
+import { isValidHostname, isValidIpv4 } from "../../util/validate";
class DNSInfo extends Component {
state = {
diff --git a/src/components/settings/DnsList.js b/src/components/settings/DnsList.js
index 84597de..dd3b8d3 100644
--- a/src/components/settings/DnsList.js
+++ b/src/components/settings/DnsList.js
@@ -13,7 +13,7 @@ import PropTypes from "prop-types";
import { ListGroup } from "reactstrap";
import DnsListItem from "./DnsListItem";
import DnsListNewItem from "./DnsListNewItem";
-import { isValidIpv4OptionalPort } from "../../validate";
+import { isValidIpv4OptionalPort } from "../../util/validate";
/**
* Check if an upstream address is unique and valid
diff --git a/src/components/settings/DHCPInfo.test.js b/src/components/settings/__tests__/DHCPInfo.test.js
similarity index 99%
rename from src/components/settings/DHCPInfo.test.js
rename to src/components/settings/__tests__/DHCPInfo.test.js
index fde1cf2..0c4b479 100644
--- a/src/components/settings/DHCPInfo.test.js
+++ b/src/components/settings/__tests__/DHCPInfo.test.js
@@ -10,7 +10,7 @@
import React from "react";
import { shallow } from "enzyme";
-import DHCPInfo from "./DHCPInfo";
+import DHCPInfo from "../DHCPInfo";
import fetchMock from "fetch-mock";
const endpoint = "/admin/api/settings/dhcp";
diff --git a/src/index.js b/src/index.js
index a38e825..b5f6592 100644
--- a/src/index.js
+++ b/src/index.js
@@ -18,7 +18,7 @@ import "react-bootstrap-typeahead/css/Typeahead.css";
import "./scss/style.css";
import Full from "./containers/Full";
import api from "./util/api";
-import { setupI18n } from "./i18n";
+import { setupI18n } from "./util/i18n";
// Before rendering anything, check if there is a session cookie.
// Note: the user could have an old session, so the first API call
diff --git a/src/util/api.test.js b/src/util/__tests__/api.test.js
similarity index 96%
rename from src/util/api.test.js
rename to src/util/__tests__/api.test.js
index 3dbb66d..72b6ae3 100644
--- a/src/util/api.test.js
+++ b/src/util/__tests__/api.test.js
@@ -8,7 +8,7 @@
* This file is copyright under the latest version of the EUPL.
* Please see LICENSE file for your rights under this license. */
-import api from "./api";
+import api from "../api";
// This is a dumb test used to set up the next test,
// which checks that the logged in state is reset before each test
diff --git a/src/validate.test.js b/src/util/__tests__/validate.test.js
similarity index 99%
rename from src/validate.test.js
rename to src/util/__tests__/validate.test.js
index 7629156..52b841f 100644
--- a/src/validate.test.js
+++ b/src/util/__tests__/validate.test.js
@@ -14,7 +14,7 @@ import {
isValidIpv4,
isValidIpv4OptionalPort,
isValidRegex
-} from "./validate";
+} from "../validate";
describe("Testing the validation functions", () => {
describe("isValidDomain", () => {
diff --git a/src/i18n.js b/src/util/i18n.js
similarity index 97%
rename from src/i18n.js
rename to src/util/i18n.js
index 2539ef2..4804501 100644
--- a/src/i18n.js
+++ b/src/util/i18n.js
@@ -12,7 +12,7 @@ import i18n from "i18next";
import XHR from "i18next-xhr-backend";
import LanguageDetector from "i18next-browser-languagedetector";
import { reactI18nextModule } from "react-i18next";
-import config from "./config";
+import config from "../config";
export function setupI18n() {
i18n
diff --git a/src/validate.js b/src/util/validate.js
similarity index 100%
rename from src/validate.js
rename to src/util/validate.js
diff --git a/src/views/Blacklist.js b/src/views/Blacklist.js
index 8c67128..6c5f874 100644
--- a/src/views/Blacklist.js
+++ b/src/views/Blacklist.js
@@ -12,7 +12,7 @@ import React from "react";
import { withNamespaces } from "react-i18next";
import api from "../util/api";
import ListPage from "../components/list/ListPage";
-import { isValidDomain } from "../validate";
+import { isValidDomain } from "../util/validate";
const Blacklist = props => {
const { t } = props;
diff --git a/src/views/Regexlist.js b/src/views/Regexlist.js
index 509ac71..4a933ee 100644
--- a/src/views/Regexlist.js
+++ b/src/views/Regexlist.js
@@ -12,7 +12,7 @@ import React from "react";
import { withNamespaces } from "react-i18next";
import ListPage from "../components/list/ListPage";
import api from "../util/api";
-import { isValidRegex } from "../validate";
+import { isValidRegex } from "../util/validate";
const Regexlist = props => {
const { t } = props;
diff --git a/src/views/Whitelist.js b/src/views/Whitelist.js
index 2ffd055..3d4f96b 100644
--- a/src/views/Whitelist.js
+++ b/src/views/Whitelist.js
@@ -12,7 +12,7 @@ import React from "react";
import { withNamespaces } from "react-i18next";
import ListPage from "../components/list/ListPage";
import api from "../util/api";
-import { isValidDomain } from "../validate";
+import { isValidDomain } from "../util/validate";
const Whitelist = props => {
const { t } = props;