@@ -45,12 +45,94 @@ def test_handles_objects(self):
45
45
})
46
46
self .assertEqual (set ([]), query .missing_params )
47
47
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 ):
49
129
schema = [{"name" : "bar" , "type" : "text" }]
50
130
query = ParameterizedQuery ("foo" , schema )
51
131
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" )
54
136
55
137
def test_raises_on_invalid_text_parameters (self ):
56
138
schema = [{"name" : "bar" , "type" : "text" }]
0 commit comments