unit test endpoint
continuous-integration/drone/push Build is passing Details

This commit is contained in:
Kovács Bence János 2020-05-08 22:17:09 +02:00
parent e395915bf1
commit 644c2df888
7 changed files with 94 additions and 4 deletions

View File

@ -27,6 +27,15 @@ steps:
- find . -name "*.py" -exec python3 -m mccabe --min 3 '{}' + || if [ $? -eq 1 ]; then echo "you fail"; fi
- bandit -r . + || if [ $? -eq 1 ]; then echo "you fail"; fi
- name: unit_test
image: python:3.8
environment:
REDIS_URL: "redis://cache"
commands:
- pip3 install -r requirements.txt
- pytest test.py
- name: rebuild-cache-with-filesystem
image: meltwater/drone-cache
pull: true
@ -65,6 +74,10 @@ steps:
when:
status: [ failure ]
services:
- name: cache
image: redis
volumes:
- name: cache
temp: {}

6
curl-test.sh Normal file
View File

@ -0,0 +1,6 @@
#!/usr/bin/env bash
curl --header "Content-Type: application/json" \
--request POST \
--data '{"uuid":"c959ad81-58f9-4445-aab4-8f3d68aee1ad", "ip":"127.1.2.3"}' \
http://localhost:5000/ip

11
docker-compose.yml Normal file
View File

@ -0,0 +1,11 @@
version: '3'
networks:
redis:
external: false
services:
redis:
image: redis
ports:
- 6969:6379

View File

@ -1,6 +1,6 @@
import json
from redisclient import redis_client
from flask import jsonify, request, Response
from flask import request, Response
from flask_classful import FlaskView
@ -14,4 +14,4 @@ class IPEndpoint(FlaskView):
strconsumer = json.dumps(consumer).encode('utf-8')
redis_client.set('currentConsumer', strconsumer)
return Response(status=204)
return Response(status=204)

View File

@ -1,3 +1,3 @@
from flask_redis import FlaskRedis
redis_client = FlaskRedis()
redis_client = FlaskRedis()

View File

@ -1,5 +1,9 @@
flask
flask-classful
redis
flask-redis
gunicorn
sentry-sdk[flask]
sentry-sdk[flask]
pytest
pytest-flask
pytest-redis

56
test.py Normal file
View File

@ -0,0 +1,56 @@
#!/usr/bin/env python
"""
Unit tests for the producer-endpoint module.
"""
import os
import json
import pytest
import redis
from pytest_redis import factories
import app
generateduuid = 'c959ad81-58f9-4445-aab4-8f3d68aee1ad'
redis_proc = factories.redis_proc(host='cache', port=6379)
redis_db = factories.redisdb('redis_nooproc')
redstuff = redis.Redis.from_url(url=os.environ['REDIS_URL'])
redstuff.set('currentConsumer', json.dumps({'uuid': generateduuid, 'Host': "127.2.2.2"}).encode('utf-8'))
@pytest.fixture
def client():
"""Client fixture"""
with app.app.test_client() as client:
yield client
def test_set_currentconsumer_success(client):
r = client.post("/ip", json={'uuid': generateduuid, 'ip': "127.1.2.3"})
json_in_redis = json.loads(redstuff.get('currentConsumer'))
assert r.status_code == 204
assert json_in_redis == {'uuid': generateduuid, 'Host': "127.1.2.3"}
def test_set_currentconsumer_server_error(client):
r = client.post("/ip", json="unexpected")
assert r.status_code == 500
def test_set_currentconsumer_notfound(client):
r = client.post("/test")
assert r.status_code == 404
def test_set_currentconsumer_method_not_allowed(client):
r = client.get("/ip")
assert r.status_code == 405