Skip to content

Commit ac77587

Browse files
committed
Added unit tests
1 parent c553f00 commit ac77587

File tree

1 file changed

+85
-3
lines changed

1 file changed

+85
-3
lines changed

tests/models/test_parameterized_query.py

+85-3
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,94 @@ def test_handles_objects(self):
4545
})
4646
self.assertEqual(set([]), query.missing_params)
4747

48-
def test_raises_on_parameters_not_in_schema(self):
48+
def test_single_invalid_parameter_exception(self):
49+
query = ParameterizedQuery("foo")
50+
with pytest.raises(InvalidParameterError) as excinfo:
51+
query.apply({"bar": None})
52+
53+
message, parameter_errors = excinfo.value.args
54+
self.assertEquals(message, 'Parameter "bar" is invalid.')
55+
self.assertEquals(len(parameter_errors), 1)
56+
57+
def test_multiple_invalid_parameter_exception(self):
58+
query = ParameterizedQuery("foo")
59+
with pytest.raises(InvalidParameterError) as excinfo:
60+
query.apply({"bar": None, "baz": None})
61+
62+
message, parameter_errors = excinfo.value.args
63+
self.assertEquals(message, 'Parameters "bar", "baz" are invalid.')
64+
self.assertEquals(len(parameter_errors), 2)
65+
66+
def test_invalid_parameter_error_messages(self):
67+
schema = [
68+
{"name": "bar", "type": "text"},
69+
{"name": "baz", "type": "text"},
70+
{"name": "foo", "type": "text"},
71+
{"name": "spam", "type": "date-range"},
72+
{"name": "ham", "type": "date-range"},
73+
{"name": "eggs", "type": "number"},
74+
]
75+
parameters = {
76+
"bar": None,
77+
"baz": 7,
78+
"foo": "text",
79+
"spam": {"start": "2000-01-01 12:00:00", "end": "2000-12-31 12:00:00"},
80+
"ham": {"start": "2000-01-01 12:00:00", "end": "2000-12-31 12:00:00"},
81+
"eggs": 42,
82+
}
83+
query = ParameterizedQuery("foo {{ spam }} {{ ham.start}} {{ eggs.start }}", schema)
84+
with pytest.raises(InvalidParameterError) as excinfo:
85+
query.apply(parameters)
86+
87+
_, parameter_errors = excinfo.value.args
88+
self.assertEquals(parameter_errors, {
89+
"bar": "Required parameter",
90+
"baz": "Invalid value",
91+
"foo": "{{ foo }} not found in query",
92+
"spam": "{{ spam.start }} not found in query",
93+
"ham": "{{ ham.end }} not found in query",
94+
"eggs": "{{ eggs }} not found in query",
95+
})
96+
97+
def test_single_missing_parameter_error(self):
98+
query = ParameterizedQuery("foo {{ bar }}")
99+
100+
message, parameter_errors = query.missing_params_error
101+
self.assertEquals(message, 'Parameter "bar" is missing.')
102+
self.assertEquals(len(parameter_errors), 1)
103+
104+
def test_multiple_missing_parameter_error(self):
105+
query = ParameterizedQuery("foo {{ bar }} {{ baz }}")
106+
107+
message, parameter_errors = query.missing_params_error
108+
self.assertEquals(message, 'Parameters "bar", "baz" are missing.')
109+
self.assertEquals(len(parameter_errors), 2)
110+
111+
def test_missing_parameter_error_message(self):
112+
query = ParameterizedQuery("foo {{ bar }}")
113+
114+
_, parameter_errors = query.missing_params_error
115+
self.assertEquals(parameter_errors, { "bar": "Missing parameter" })
116+
117+
def test_ignores_parameters_not_in_schema(self):
118+
schema = [{"name": "bar", "type": "text"}]
119+
query = ParameterizedQuery("foo {{ bar }}", schema)
120+
121+
with pytest.raises(InvalidParameterError) as excinfo:
122+
query.apply({"qux": 7, "bar": 7})
123+
124+
_, parameter_errors = excinfo.value.args
125+
self.assertTrue('bar' in parameter_errors)
126+
self.assertFalse('qux' in parameter_errors)
127+
128+
def test_passes_on_parameters_not_in_schema(self):
49129
schema = [{"name": "bar", "type": "text"}]
50130
query = ParameterizedQuery("foo", schema)
51131

52-
with pytest.raises(InvalidParameterError):
53-
query.apply({"qux": 7})
132+
try:
133+
query.apply({"qux": None})
134+
except InvalidParameterError:
135+
pytest.fail("Unexpected InvalidParameterError")
54136

55137
def test_raises_on_invalid_text_parameters(self):
56138
schema = [{"name": "bar", "type": "text"}]

0 commit comments

Comments
 (0)