Completed
Push — master ( 0d956d...d7418f )
by Chris
01:20
created

make_chart()   A

Complexity

Conditions 1

Size

Total Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
dl 0
loc 13
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
def make_chart(**kwargs):
95
    """Create a fake chart."""
96
    data = dict(
97
        name='somechart',
98
        width=1,
99
        height=1,
100
        family='C3',
101
        type='line',
102
        row=1,
103
        dataSource='...',
104
    )
105
    data.update(**kwargs)
106
    return json.dumps(data)
107
108
109
@pytest.yield_fixture
110
def ctx(monkeypatch, request):
111
    with app.test_request_context() as req_ctx:
112
        global fake_db
113
        fake_db = []
114
        monkeypatch.setattr(charts_builder.adapter, 'read', read)
115
        monkeypatch.setattr(charts_builder.adapter, 'create', create)
116
        monkeypatch.setattr(charts_builder.adapter, 'delete', delete)
117
        monkeypatch.setattr(charts_builder.adapter, 'update', update)
118
        yield req_ctx
119
120
121
@pytest.fixture()
122
def adapter():
123
    return db.get_db_handler()
124
125
126
@pytest.fixture()
127
def client():
128
    app.config.update(
129
        JSONDASH_GLOBALDASH=False,
130
        JSONDASH_FILTERUSERS=False,
131
        JSONDASH_GLOBAL_USER='global-test',
132
    )
133
    app.config['JSONDASH'] = dict(
134
        metadata=dict(
135
            created_by=_username,
136
            username=_username,
137
        ),
138
        static=dict(
139
            js_path='js/vendor/',
140
            css_path='css/vendor/',
141
        ),
142
        auth=dict(
143
            edit_others=auth_invalid,
144
            edit_global=auth_invalid,
145
            create=auth_invalid,
146
            view=auth_invalid,
147
            clone=auth_invalid,
148
            delete=auth_invalid,
149
        )
150
    )
151
    return app, app.test_client()
152