def test_get_or_addrow_basic(self): """ Basic test for get_or_addrow """ utils.setupadvancedtables(self) self.connection.row_factory = objects.dict_factory table = self.connection.getadvancedtable("users") ## Make sure there's a user to get for the test and that it is exactly as expected ## AdvancedRows is formatted [ [tablename, [...rows...], ...] ## So, first (tablename,rows), and then second item (rows), and first row testuser = dict(utils.ADVANCEDROWS[0][1][0]) testuserrow = table.quickselect(**testuser) self.assertTrue(testuserrow) testuserrow = testuserrow.first() testuserrowid = testuserrow.pop("userid") self.assertEqual(testuserrow,testuser) ## Test get_or_addrow returns a row that already exists result = table.get_or_addrow(**testuser) self.assertTrue(result) self.assertEqual(result.first(),testuserrowid) ## Test get_or_addrow adds a new row even if the row differs by one testuser['email'] = "*****@*****.**" result = table.get_or_addrow(**testuser) self.assertTrue(result) result = result.first() self.assertNotEqual(result,testuserrowid) resultrow = table.quickselect(pk = result) testuser['email'] = None self.assertNotEqual(resultrow,testuser)
def test_get_or_addrow_bad(self): """ Tests that get_or_addrow will raise a ValueError if passed a Non-Column argument """ utils.setupadvancedtables(self) table = self.connection.getadvancedtable("users") ## TODO: Currently quick simple test, should be Expanded testuser = dict(utils.ADVANCEDROWS[0][1][0]) ## Testuser is valid data, and then foobar is additional data self.assertRaisesRegex(ValueError,"get_or_addrow recieved invalid columns",table.get_or_addrow,foobar=True, **testuser) ## Only with invalid cols self.assertRaisesRegex(ValueError,"get_or_addrow recieved invalid columns",table.get_or_addrow,foobar=True)
def test_get_or_addrow_missingcols_notnull(self): """ Tests that get_or_addrow raises and ValueError when a NotNull column is missing """ utils.setupadvancedtables(self) table = self.connection.getadvancedtable("notsecurity") ## Assumably testrow: dict(userid=1,salt=1234,hash="ABCDEF") testrow = dict(utils.ADVANCEDROWS[1][1][0]) ## Sanity Check (that testrow is already in table) self.assertTrue(table.quickselect(**testrow)) ## Actual Test ## NotSecurity requires all three columns (all are NOT NULL), so we'll incrementally remove columns while testrow: testrow.popitem() self.assertRaisesRegex(ValueError,"The following columns are required:.+",table.get_or_addrow,**testrow)
def test_queryparser_advancedrow(self): """ Tests that when the query parser receives an AdvancedRow, it uses the AdvanceRow's Table's PK """ self.connection.row_factory = objects.advancedrow_factory utils.setupadvancedtables(self) ## Single level table = self.connection.getadvancedtable("users") user = table.quickselect(fname="John").first() ## Update where userid = user => user.userid newemail = "*****@*****.**" table.quickupdate(WHERE = {"userid":user}, email = newemail) newuser = table.quickselect(fname = "John").first() self.assertNotEqual(user,newuser) self.assertEqual(newuser.email,newemail) ## Multiple Levels commenttable = self.connection.getadvancedtable("comments") comment = commenttable.quickselect(commentid = 20).first() ## Select Where userid = comment => postid.userid => user.userid user = table.quickselect(userid = comment.pid.userid).first() self.assertEqual(user.userid,comment.pid.userid.userid)
def setUp(self): utils.setupconnection(self) utils.setupadvancedtables(self) return super().setUp()
def setUp(self): utils.setupconnection(self) utils.setupadvancedtables(self) self.maxDiff = None return super().setUp()
def setUp(self): utils.setupconnection(self) utils.setupadvancedtables(self) self.samplerow = dict(commentid = 1,uid = 1, pid = 1, commenttime = "20160101T0001+0000", replyto = None, comment = "Thanks for reading, Everyone! It's my New Year's Resolution to write a post a day! Look forward to it!") return super().setUp()