forked from aichaos/rivescript-python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_rivescript.py
More file actions
109 lines (86 loc) · 3.71 KB
/
Copy pathtest_rivescript.py
File metadata and controls
109 lines (86 loc) · 3.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, absolute_import
import json
import re
import unittest
from collections import OrderedDict
from rivescript.rivescript import RS_ERR_MATCH
from .config import RiveScriptTestCase
class APITest(RiveScriptTestCase):
"""Miscellaneous API tests."""
def test_set_uservars(self):
self.new("""
+ who am i
- You are <get name>, seeker!
+ how old am i
- You are <get age> years old.
""")
# Test the base case, with no vars set.
self.reply("Who am I?", "You are undefined, seeker!")
self.reply("How old am I?", "You are undefined years old.")
# Set setting one variable at a time.
self.rs.set_uservar("localuser", "name", "Alice")
self.rs.set_uservar("localuser", "age", "10")
self.reply("Who am I?", "You are Alice, seeker!")
self.reply("How old am I?", "You are 10 years old.")
# Test setting a dict of variables for one user.
self.rs.set_uservars("localuser", {
"name": "Eliza",
"age": "20",
})
self.reply("Who am I?", "You are Eliza, seeker!")
self.reply("How old am I?", "You are 20 years old.")
# Test setting a partial dict which only updates named keys.
self.rs.set_uservars("localuser", dict(name="UltraHAL"))
self.reply("Who am I?", "You are UltraHAL, seeker!")
self.reply("How old am I?", "You are 20 years old.")
# Test setting a dict of many users to many keys.
self.rs.set_uservars({
"localuser": {
"age": "22",
},
"testuser": {
"name": "Bob",
}
})
self.reply("Who am I?", "You are UltraHAL, seeker!")
self.reply("How old am I?", "You are 22 years old.")
self.assertEqual(self.rs.get_uservar("testuser", "name"), "Bob")
self.assertEqual(self.rs.get_uservar("testuser", "age"), "undefined")
# Non-existing users return None, not "undefined"
self.assertEqual(self.rs.get_uservar("fake", "name"), None)
# Test setting vars from exported vars.
exported = self.rs.get_uservars("localuser")
self.assertEqual(self.rs.set_uservars("localuser", exported), None)
# Test setting vars from JSON.
self.assertEqual(self.rs.set_uservars("localuser",
json.loads('{"gender": "ambiguous"}')), None)
# Test setting user variables for users that don't exist yet.
self.assertEqual(self.rs.set_uservars("newbie", {"name": "Newbie"}), None)
# Test calling with (str, None)
with self.assertRaises(TypeError):
self.rs.set_uservars("alice")
# Test calling with (str, str)
with self.assertRaises(TypeError):
self.rs.set_uservars("alice", "name")
# Test calling with (dict, dict)
with self.assertRaises(TypeError):
self.rs.set_uservars({"localuser": "hi"}, {"name": "Alice"})
# Test calling it in many-users mode, where one of the users isn't
# a dict.
with self.assertRaises(TypeError):
self.rs.set_uservars({
"localuser": {
"name": "Mary",
},
"testuser": "not a dict",
})
# Test calling with dict-like objects.
with self.assertRaises(TypeError):
self.rs.set_uservars("localuser", OrderedDict(name="Alice"))
# But dict-like objects can be cast as dicts.
testdict = OrderedDict(name="Joe")
self.assertEqual(self.rs.set_uservars("localuser", dict(testdict)), None)
if __name__ == "__main__":
unittest.main()