from pydoc import cli
from urllib import response
from Website import create_app
import json
import pdb
from Website.db import get_db
from .test_conf import client, app


def test_config():
    assert not create_app()["app"].testing
    assert create_app({'TESTING': True})["app"].testing

#/adduser
def test_adduser(client):
    response = client.get('/adduser/user')
    assert "418" in  response.data.decode('utf-8')

def test_adduser_new(app, client):
    with app.app_context():
        db = get_db()
        assert db is get_db()
    response = client.get('/adduser/user?username=test')
    c = db.cursor()
    c.execute("SELECT * FROM users WHERE username = ?", ["test"])
    data = c.fetchone()
    assert "tag was sucsesfully added"  in response.data.decode('utf-8')
    assert data[0] == 1
    assert data[1] == "test"
    assert data[2] == 0

def test_adduser_allreadyexists(client):
    response = client.get('/adduser/user?username=test')
    assert "Error: 757" in response.data.decode('utf-8')

#/addtag
def test_addtag(client):
    response = client.get('/addtag')
    assert response.data.decode('utf-8') == "Error: 095"

def test_addtag_userid_nan(client):
    response = client.get('/addtag?id=test')
    assert response.data.decode('utf-8') == "Error: 095"

def test_addtag(app, client):
    response_addtag = client.get('/addtag?id=1')
    with app.app_context():
        None
    response_tagid = client.get('/api/tag_id?id=12345678')

#/api
def test_api_change(client):
    response = client.get('/api/change')
    assert json.loads(response.data.decode('utf-8')) == {"mode":"error", "error":"043"}

def test_api_change_wrong_user(client):
    response = client.get('/api/change?id=2')
    assert json.loads(response.data.decode('utf-8')) == {"mode":"error", "error":"043"}

def test_api_change_nan(client):
    response = client.get('/api/change?id=1&?change=test')
    assert json.loads(response.data.decode('utf-8')) == {"mode":"balance", "username":"test", "balance":-1}

def test_api_change_none(client):
    response = client.get('/api/change?id=1')
    assert json.loads(response.data.decode('utf-8')) == {"mode":"balance", "username":"test", "balance":-2}

def test_api_change_right_positiv(app, client):
    response = client.get('/api/change?id=1&change=7') 
    with app.app_context():
        db = get_db()
        assert db is get_db()
    c = db.cursor()
    c.execute("SELECT * FROM users WHERE username = ?", ["test"])
    data = c.fetchone()
    assert json.loads(response.data.decode('utf-8')) == {"mode":"balance", "username":"test", "balance":5}
    assert data[0] == 1
    assert data[1] == "test"
    assert data[2] == 5

def test_api_change_right_negativ(app, client):
    response = client.get('/api/change?id=1&change=-5')
    with app.app_context():
        db = get_db()
        assert db is get_db()
    c = db.cursor()
    c.execute("SELECT * FROM users WHERE username = ?", ["test"])
    data = c.fetchone() 
    assert json.loads(response.data.decode('utf-8')) == {"mode":"balance", "username":"test", "balance":0}
    assert data[0] == 1
    assert data[1] == "test"
    assert data[2] == 0
