Completed
Pull Request — master (#26)
by
unknown
01:23
created

test_inspect()   C

Complexity

Conditions 10

Size

Total Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
cc 10
c 3
b 0
f 0
dl 0
loc 20
rs 6

How to fix   Complexity   

Complexity

Complex classes like test_inspect() often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

1
from __future__ import print_function
2
3
import pytest
4
import os
5
import tempfile
6
7
from process_tests import TestProcess
8
from process_tests import wait_for_strings
9
from redis import StrictRedis
10
11
from redisboard.models import RedisServer
12
13
TIMEOUT = int(os.getenv('REDISBOARD_TEST_TIMEOUT', 2))
14
15
16
@pytest.yield_fixture(scope="module")
17
def redis_process():
18
    socket_path = tempfile.mktemp('.sock')
19
    try:
20
        with TestProcess('redis-server', '--port', '0', '--unixsocket', socket_path) as process:
21
            wait_for_strings(process.read, TIMEOUT, "Running")
22
            yield socket_path
23
    finally:
24
        try:
25
            os.unlink(socket_path)
26
        except Exception:
27
            pass
28
29
30
@pytest.yield_fixture
31
def redis_server(redis_process, db):
32
    server = RedisServer.objects.create(
33
        hostname=redis_process,
34
    )
35
    c = server.connection
36
    c.set('str', 'bar')
37
    c.sadd('set', 'bar')
38
    c.sadd('set', 'foo')
39
    c.hset('hash', 'key', 'val')
40
    c.hset('hash', 'foo', 'bar')
41
    c.lpush('list', 'foo', 'bar', 'foobar')
42
    c.zadd('sorted-set', 'foo', 1)
43
    c.zadd('sorted-set', 'b', 2)
44
    c.eval("""
45
        local c = 0
46
        while c < 1000000 do
47
            redis.call('get', 'str')
48
            c = c + 1
49
        end
50
    """, 0)
51
    yield server
52
53
54
@pytest.mark.django_db
55
def test_changelist(admin_client, redis_server):
56
    response = admin_client.get('/redisboard/redisserver/')
57
    print(response)
58
    content = response.content.decode('utf-8')
59
    assert '>UP</td>' in content
60
    assert '<dt>redis_version</dt>' in content
61
    assert '<a href="/redisboard/redisserver/{:d}/inspect/">Inspect</a>'.format(
62
        redis_server.pk) in content
63
64
65
@pytest.mark.django_db
66
def test_inspect(admin_client, redis_server):
67
    response = admin_client.get('/redisboard/redisserver/{:d}/inspect/'.format(redis_server.pk))
68
    print(response)
69
    content = response.content.decode('utf-8')
70
    assert 'Database 0:' in content
71
    assert '5 keys' in content
72
    assert '<td>UP</td>' in content
73
    assert '<td>redis_version</td>' in content
74
75
    assert '<a href="/redisboard/redisserver/{:d}/inspect/?key=set&db=0">set</a>'.format(
76
        redis_server.pk) in content
77
    assert '<a href="/redisboard/redisserver/{:d}/inspect/?key=str&db=0">str</a>'.format(
78
        redis_server.pk) in content
79
    assert '<a href="/redisboard/redisserver/{:d}/inspect/?key=hash&db=0">hash</a>'.format(
80
        redis_server.pk) in content
81
    assert '<a href="/redisboard/redisserver/{:d}/inspect/?key=list&db=0">list</a>'.format(
82
        redis_server.pk) in content
83
    assert '<a href="/redisboard/redisserver/{:d}/inspect/?key=sorted-set&db=0">sorted-set</a>'.format(
84
        redis_server.pk) in content
85
86
87
@pytest.mark.django_db
88
@pytest.mark.parametrize("key", ["set", "str", "hash", "list", "sorted-set"])
89
def test_key_details(admin_client, redis_server, key):
90
    response = admin_client.get(
91
        '/redisboard/redisserver/{:d}/inspect/?key={}'.format(redis_server.pk, key))
92
    print(response)
93
    content = response.content.decode('utf-8')
94
    assert '<h2>Key data: {}</h2>'.format(key) in content
95