77
88from cs50 .sql import SQL
99
10+
1011class SQLTests (unittest .TestCase ):
1112
1213 def test_multiple_statements (self ):
@@ -142,6 +143,7 @@ def tearDownClass(self):
142143 if not str (e ).startswith ("(1051" ):
143144 raise e
144145
146+
145147class MySQLTests (SQLTests ):
146148 @classmethod
147149 def setUpClass (self ):
@@ -150,6 +152,7 @@ def setUpClass(self):
150152 def setUp (self ):
151153 self .db .execute ("CREATE TABLE cs50 (id INTEGER NOT NULL AUTO_INCREMENT, val VARCHAR(16), bin BLOB, PRIMARY KEY (id))" )
152154
155+
153156class PostgresTests (SQLTests ):
154157 @classmethod
155158 def setUpClass (self ):
@@ -161,7 +164,9 @@ def setUp(self):
161164 def test_cte (self ):
162165 self .assertEqual (self .db .execute ("WITH foo AS ( SELECT 1 AS bar ) SELECT bar FROM foo" ), [{"bar" : 1 }])
163166
167+
164168class SQLiteTests (SQLTests ):
169+
165170 @classmethod
166171 def setUpClass (self ):
167172 open ("test.db" , "w" ).close ()
@@ -207,27 +212,44 @@ def test_qmark(self):
207212 self .assertEqual (self .db .execute ("SELECT * FROM foo WHERE firstname = ? AND lastname = ?" , ["qux" , "quux" ]), [{"firstname" : "qux" , "lastname" : "quux" }])
208213 self .db .execute ("DELETE FROM foo" )
209214
215+ self .db .execute ("INSERT INTO foo VALUES (?)" , ("bar" , "baz" ))
216+ self .assertEqual (self .db .execute ("SELECT * FROM foo" ), [{"firstname" : "bar" , "lastname" : "baz" }])
217+ self .db .execute ("DELETE FROM foo" )
218+
210219 self .db .execute ("INSERT INTO foo VALUES (?, ?)" , ("bar" , "baz" ))
211220 self .assertEqual (self .db .execute ("SELECT * FROM foo" ), [{"firstname" : "bar" , "lastname" : "baz" }])
212221 self .db .execute ("DELETE FROM foo" )
213222
214- self .db .execute ("INSERT INTO foo VALUES (?, ? )" , ["bar" , "baz" ])
223+ self .db .execute ("INSERT INTO foo VALUES (?)" , ["bar" , "baz" ])
215224 self .assertEqual (self .db .execute ("SELECT * FROM foo" ), [{"firstname" : "bar" , "lastname" : "baz" }])
216225 self .db .execute ("DELETE FROM foo" )
217226
227+ self .db .execute ("INSERT INTO foo VALUES (?, ?)" , ["bar" , "baz" ])
228+ self .assertEqual (self .db .execute ("SELECT * FROM foo" ), [{"firstname" : "bar" , "lastname" : "baz" }])
229+ self .db .execute ("DELETE FROM foo" )
218230
219231 self .db .execute ("INSERT INTO foo VALUES (?,?)" , "bar" , "baz" )
220232 self .assertEqual (self .db .execute ("SELECT * FROM foo" ), [{"firstname" : "bar" , "lastname" : "baz" }])
221233 self .db .execute ("DELETE FROM foo" )
222234
223235 self .db .execute ("CREATE TABLE bar (firstname STRING)" )
236+
224237 self .db .execute ("INSERT INTO bar VALUES (?)" , "baz" )
225238 self .assertEqual (self .db .execute ("SELECT * FROM bar" ), [{"firstname" : "baz" }])
239+ self .db .execute ("DELETE FROM bar" )
240+
241+ self .db .execute ("INSERT INTO bar VALUES (?)" , "baz" )
242+ self .db .execute ("INSERT INTO bar VALUES (?)" , "qux" )
243+ self .assertEqual (self .db .execute ("SELECT * FROM bar WHERE firstname IN (?)" , ("baz" , "qux" )), [{"firstname" : "baz" }, {"firstname" : "qux" }])
244+ self .db .execute ("DELETE FROM bar" )
245+
246+ self .db .execute ("INSERT INTO bar VALUES (?)" , "baz" )
247+ self .db .execute ("INSERT INTO bar VALUES (?)" , "qux" )
248+ self .assertEqual (self .db .execute ("SELECT * FROM bar WHERE firstname IN (?)" , ["baz" , "qux" ]), [{"firstname" : "baz" }, {"firstname" : "qux" }])
249+ self .db .execute ("DELETE FROM bar" )
226250
227251 self .assertRaises (RuntimeError , self .db .execute , "INSERT INTO foo VALUES (?)" )
228252 self .assertRaises (RuntimeError , self .db .execute , "INSERT INTO foo VALUES (?, ?)" )
229- # self.assertRaises(RuntimeError, self.db.execute, "INSERT INTO foo VALUES (?)", ('bar', 'baz'))
230- # self.assertRaises(RuntimeError, self.db.execute, "INSERT INTO foo VALUES (?)", ['bar', 'baz'])
231253 self .assertRaises (RuntimeError , self .db .execute , "INSERT INTO foo VALUES (?, ?)" , 'bar' , 'baz' , 'qux' )
232254 self .assertRaises (RuntimeError , self .db .execute , "INSERT INTO foo VALUES (?, ?)" , ('bar' , 'baz' , 'qux' ))
233255 self .assertRaises (RuntimeError , self .db .execute , "INSERT INTO foo VALUES (?, ?)" , ['bar' , 'baz' , 'qux' ])
0 commit comments