Completed
Push — master ( ee1b20...ebde2e )
by Chris
01:20
created

setup_dashboard()   A

Complexity

Conditions 3

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
dl 0
loc 11
rs 9.4285
c 0
b 0
f 0
1
import json
2
import os
3
4
import pytest
5
6
from flask import Flask, url_for
7
from pyquery import PyQuery as pq
8
9
from flask_jsondash import charts_builder
10
from flask_jsondash import db
11
12
URL_BASE = 'http://127.0.0.1:80'
13
app = Flask('test_flask_jsondash',
14
            template_folder='../flask_jsondash/example_app/templates')
15
app.config.update(
16
    # Required to fix context errors.
17
    # See https://github.com/jarus/flask-testing/issues/21
18
    PRESERVE_CONTEXT_ON_EXCEPTION=False,
19
    SECRET_KEY='123',
20
)
21
app.debug = True
22
app.register_blueprint(charts_builder.charts)
23
24
fake_db = []
25
26
27
def _username():
28
    return 'Username'
29
30
31
def auth_valid(**kwargs):
32
    return True
33
34
35
def auth_invalid(**kwargs):
36
    return False
37
38
39
def get_json_config(name):
40
    parent = os.getcwd().replace('tests/', '')
41
    path = '{0}/example_app/examples/config/{1}'.format(parent, name)
42
    view = json.load(open(path, 'r'))
43
    return view
44
45
46
def read(*args, **kwargs):
47
    if 'override' in kwargs:
48
        newkwargs = kwargs.pop('override')
49
50
        def _read(*args, **kwargs):
51
            return dict(**newkwargs)
52
        return _read
53
    if 'c_id' not in kwargs:
54
        return fake_db
55
    for i, dash in enumerate(fake_db):
56
        if dash['id'] == kwargs.get('c_id'):
57
            return dash
58
59
60
def delete(c_id, **kwargs):
61
    global fake_db
62
    for i, dash in enumerate(fake_db):
63
        if dash['id'] == c_id:
64
            del fake_db[i]
65
            break
66
67
68
def create(*args, **kwargs):
69
    global fake_db
70
    fake_db.append(dict(**kwargs.get('data')))
71
72
73
def update(c_id, **kwargs):
74
    global fake_db
75
    for i, dash in enumerate(fake_db):
76
        if dash['id'] == c_id:
77
            fake_db[i].update(**kwargs)
78
            break
79
80
81
def setup_dashboard(monkeypatch, app, test, data):
82
    """Helper function to setup dashboard, redirect, and get its html."""
83
    assert len(read()) == 0
84
    monkeypatch.setattr(charts_builder, 'auth', auth_valid)
85
    test.post(url_for('jsondash.create'), data=data, follow_redirects=True)
86
    view_id = read()[0]['id']
87
    assert len(read()) == 1
88
    url = url_for('jsondash.view', c_id=view_id)
89
    res = test.get(url)
90
    dom = pq(res.data)
91
    return dom
92
93
94
@pytest.yield_fixture
95
def ctx(monkeypatch, request):
96
    with app.test_request_context() as req_ctx:
97
        global fake_db
98
        fake_db = []
99
        monkeypatch.setattr(charts_builder.adapter, 'read', read)
100
        monkeypatch.setattr(charts_builder.adapter, 'create', create)
101
        monkeypatch.setattr(charts_builder.adapter, 'delete', delete)
102
        monkeypatch.setattr(charts_builder.adapter, 'update', update)
103
        yield req_ctx
104
105
106
@pytest.fixture()
107
def adapter():
108
    return db.get_db_handler()
109
110
111
@pytest.fixture()
112
def client():
113
    app.config.update(
114
        JSONDASH_GLOBALDASH=False,
115
        JSONDASH_FILTERUSERS=False,
116
        JSONDASH_GLOBAL_USER='global-test',
117
    )
118
    app.config['JSONDASH'] = dict(
119
        metadata=dict(
120
            created_by=_username,
121
            username=_username,
122
        ),
123
        static=dict(
124
            js_path='js/vendor/',
125
            css_path='css/vendor/',
126
        ),
127
        auth=dict(
128
            edit_others=auth_invalid,
129
            edit_global=auth_invalid,
130
            create=auth_invalid,
131
            view=auth_invalid,
132
            clone=auth_invalid,
133
            delete=auth_invalid,
134
        )
135
    )
136
    return app, app.test_client()
137