diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4067891801ebc0d6f266087829e0ac992af568b0..7a876b04b374ddbfef4e0eff2875549b9645049a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,5 +1,6 @@
 stages:
   - test
+  - cleanup_tests
   - deploy
 
 test:
@@ -9,6 +10,14 @@ test:
   script:
     - make test
 
+cleanup_tests:
+  stage: cleanup_tests
+  tags:
+    - bots-deployer
+  when: always
+  script:
+    - make clean_test
+
 deploy:
   stage: deploy
   only: ['master']
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 0ef602a73624f84decdea57dcf69b24f7895e5e4..567236172b5bf286f4f526d3d2eb93424284b91f 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -14,6 +14,11 @@ repos:
     hooks:
       - id: black
         language_version: python3.8
+  - repo: https://github.com/IamTheFij/docker-pre-commit
+    rev: master
+    hooks:
+      - id: docker-compose-check
+      - id: hadolint
   - repo: https://github.com/pre-commit/pre-commit-hooks
     rev: v3.1.0
     hooks:
diff --git a/Dockerfile b/Dockerfiles/Dockerfile
similarity index 63%
rename from Dockerfile
rename to Dockerfiles/Dockerfile
index bfda752ac369d6ff3d7a661192d8ac83d015696b..e3ab4905c3200c75bc95a471356dae86ca6060f5 100644
--- a/Dockerfile
+++ b/Dockerfiles/Dockerfile
@@ -1,8 +1,8 @@
-FROM python:3.7
+FROM python:3.8
 
 # Installing requirements
-COPY requirements.txt /tmp/
-RUN pip install -r /tmp/requirements.txt
+COPY requirements/requirements.base.txt /tmp/
+RUN pip install -r /tmp/requirements.base.txt
 
 # Copying actuall application
 COPY src/ /app/src
diff --git a/Dockerfiles/test.Dockerfile b/Dockerfiles/test.Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..0374574f87ec2a85ddc24b8d1fe7477f711bcc92
--- /dev/null
+++ b/Dockerfiles/test.Dockerfile
@@ -0,0 +1,23 @@
+FROM hadolint/hadolint:v1.18.0 as docker_linter
+
+FROM python:3.8
+
+RUN apt-get update -y \
+    && apt-get install -y --no-install-recommends \
+     make=4.2.1-1.2 \
+     sed=4.7-1 \
+    && apt-get clean \
+    && rm -rf /var/lib/apt/lists/*
+
+COPY --from=docker_linter /bin/hadolint /bin/
+RUN hadolint -v
+# Installing requirements
+COPY requirements/ /reqs
+RUN pip install -r /reqs/requirements.test.txt
+
+# Copying actuall application
+COPY . /app
+
+WORKDIR /app
+
+RUN sed -i 's/hadolint/hadolint-system/g' .pre-commit-config.yaml
diff --git a/Makefile b/Makefile
index 61625107adc4c1cad52b44a4d15013a51f6a4712..80b8baaaccc53d73f7e22514835e2ae4d59204af 100644
--- a/Makefile
+++ b/Makefile
@@ -5,4 +5,11 @@ clean_prod:
 	docker-compose -f docker-compose.yml down
 
 test:
-	echo "Coming soon!"
+	docker-compose -f docker-compose.test.yml up --build
+
+clean_test:
+	docker-compose -f docker-compose.test.yml down -v
+
+_test:
+	pre-commit run -a
+	echo "Python tests coming soon..."
diff --git a/docker-compose.test.yml b/docker-compose.test.yml
new file mode 100644
index 0000000000000000000000000000000000000000..68bd8b5e75f6ed40eb189cbd55547ef79daf3b41
--- /dev/null
+++ b/docker-compose.test.yml
@@ -0,0 +1,9 @@
+version: '3.7'
+
+services:
+  test_bot_service:
+    container_name: 'bot_s3rius_san_test'
+    build:
+      dockerfile: Dockerfiles/test.Dockerfile
+      context: .
+    command: make _test
diff --git a/docker-compose.yml b/docker-compose.yml
index 09ab0b0909523a94d33618b3d95999af37e3ac4b..07ce292244d5e55f674c3fe2fdc74ab92687ecff 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -8,7 +8,9 @@ networks:
 services:
   bot_service:
     container_name: 'bot_s3rius_san'
-    build: .
+    build:
+      dockerfile: Dockerfiles/Dockerfile
+      context: .
     env_file:
       - .env
     environment:
diff --git a/requirements.txt b/requirements/requirements.base.txt
similarity index 57%
rename from requirements.txt
rename to requirements/requirements.base.txt
index c78eb40ea8b83db8ac699007ed81eb2c8ecf56a0..db43cd77c8ba482f91589e784d122d9cb2e113c0 100644
--- a/requirements.txt
+++ b/requirements/requirements.base.txt
@@ -1,9 +1,5 @@
+Flask==1.1.2
 pydantic==1.5.1
-Telethon==1.14.0
-requests-async==0.6.2
 pytz==2020.1
-Flask==1.1.2
-pre-commit==2.5.1
-black==19.10b0
-isort==4.3.21
-flake8==3.8.3
+requests-async==0.6.2
+Telethon==1.14.0
diff --git a/requirements/requirements.test.txt b/requirements/requirements.test.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2973bde044ef966fbb469fadd30c2cefed81b5aa
--- /dev/null
+++ b/requirements/requirements.test.txt
@@ -0,0 +1,6 @@
+-r requirements.base.txt
+black==19.10b0
+docker-compose==1.26.0
+flake8==3.8.3
+isort==4.3.21
+pre-commit==2.5.1
diff --git a/src/initializator.py b/src/initializator.py
index 85d71c7a9f22ea2dcab21b30f30e8d2df335f2a4..82dc5adbc8a85061b1b236a62eb764cc088f7fb2 100644
--- a/src/initializator.py
+++ b/src/initializator.py
@@ -20,7 +20,6 @@ def setup_logging():
 def get_code_from_web(token):
     async def waiter():
         while token.value is None:
-            logger.debug("Waiting for token")
             await asyncio.sleep(1)
         logger.info("Token received!")
         return token.value