Completed
Push — develop ( 407989...4ea918 )
by Wu
01:11
created

test_session()   C

Complexity

Conditions 8

Size

Total Lines 55

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 8
c 1
b 0
f 0
dl 0
loc 55
rs 6.2085

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
# -*- coding: utf-8 -*-
2
3
import werobot
4
import werobot.utils
5
import werobot.testing
6
from werobot.session import filestorage, mongodbstorage, redisstorage
7
from werobot.session import sqlitestorage
8
from werobot.session import SessionStorage
9
from werobot.utils import to_binary
10
11
import pymongo
12
import redis
13
import os
14
from nose.tools import raises
15
16
17
def teardown_module():
18
    try:
19
        os.remove("werobot_session")
20
        os.remove("werobot_session.sqlite3")
21
    except:
22
        pass
23
24
25
def remove_session(session):
26
    try:
27
        del session[to_binary("fromUser")]
28
    except:
29
        pass
30
31
32
def test_session():
33
    robot = werobot.WeRoBot(token=werobot.utils.generate_token(),
34
                            enable_session=True)
35
36
    @robot.text
37
    def first(message, session):
38
        if 'last' in session:
39
            return
40
        session['last'] = message.content
41
        return message.content
42
43
    @robot.text
44
    def second(_, session):
45
        return session['last']
46
47
    tester = werobot.testing.WeTest(robot)
48
    xml_1 = """
49
        <xml>
50
        <ToUserName><![CDATA[toUser]]></ToUserName>
51
        <FromUserName><![CDATA[fromUser]]></FromUserName>
52
        <CreateTime>1348831860</CreateTime>
53
        <MsgType><![CDATA[text]]></MsgType>
54
        <Content><![CDATA[ss]]></Content>
55
        <MsgId>1234567890123456</MsgId>
56
        </xml>
57
    """
58
    xml_2 = """
59
        <xml>
60
        <ToUserName><![CDATA[toUser]]></ToUserName>
61
        <FromUserName><![CDATA[fromUser]]></FromUserName>
62
        <CreateTime>1348831860</CreateTime>
63
        <MsgType><![CDATA[text]]></MsgType>
64
        <Content><![CDATA[dd]]></Content>
65
        <MsgId>1234567890123456</MsgId>
66
        </xml>
67
    """
68
69
    try:
70
        os.remove(os.path.abspath("werobot_session"))
71
    except OSError:
72
        pass
73
    session_storages = [
74
        filestorage.FileStorage(),
75
        mongodbstorage.MongoDBStorage(pymongo.MongoClient().t.t),
76
        redisstorage.RedisStorage(redis.Redis()),
77
        sqlitestorage.SQLiteStorage(),
78
    ]
79
80
    for session_storage in session_storages:
81
        remove_session(session_storage)
82
        robot.session_storage = session_storage
83
        reply_1 = tester.send_xml(xml_1)._args['content']
84
        assert reply_1 == 'ss', (reply_1, session_storage)
85
        reply_2 = tester.send_xml(xml_2)._args['content']
86
        assert reply_2 == 'ss', (reply_2, session_storage)
87
        remove_session(session_storage)
88
89
90
@raises(NotImplementedError)
91
def test_session_storage_get():
92
    session = SessionStorage()
93
    session.get('s')
94
95
96
@raises(NotImplementedError)
97
def test_session_storage_set():
98
    session = SessionStorage()
99
    session.set('s', {})
100
101
102
@raises(NotImplementedError)
103
def test_session_storage_delete():
104
    session = SessionStorage()
105
    session.delete('s')
106
107
108
def test_sqlitestorage():
109
    storage = sqlitestorage.SQLiteStorage()
110
111
    assert storage.get("喵") == {}
112
    storage.set("喵", "喵喵")
113
    assert storage.get("喵") == u"喵喵"
114
    storage.delete("喵")
115
    assert storage.get("喵") == {}
116