def generateUpdateTest(table, testIndent): indent = testIndent + 4 updates = "" for column in table.columns: fk = column.getReferenceIfExists(table) if fk is not None: """ UPDATE TO EXISTING """ updates += "%sdef\ttestUpdateToExisting%s(self):\n"%(" " *testIndent,generator.asClassName(column.name)) elementName = generator.asElementName(column.name) updates += generator.insertToDB(table, indent) +"\n" tableElement = generator.asElementName(table.name) updates += "%s%s = self.%s\n"%(" "*indent, tableElement, tableElement) updates += "%sself.__initDependencies()\n"%(" "*indent) identifier = table.columns[0].name updates += """%sdb.updateInTable(self.conn, {"%s":self.%s}, "%s", %s=%s.%s)\n"""%(" "*indent, column.name, elementName, table.name, identifier, tableElement, generator.asElementName(identifier)) updates += """%srows = db.selectFrom(self.conn, {"%s"}, "*", %s=%s.%s)\n\n"""%(" "*indent, table.name, identifier, tableElement, generator.asElementName(identifier)) updates += generateAssertEquals(table, column.name, indent, tableElement)+"\n" """ UPDATE TO NONE EXISTING """ updates += "%sdef\ttestUpdateToNonExisting%s(self):\n"%(" " *testIndent,generator.asClassName(column.name)) elementName = generator.asElementName(column.name) updates += generator.insertToDB(table, indent) +"\n" tableElement = generator.asElementName(table.name) updates += "%s_%s = mock.%s\n"%(" "*indent, elementName, generator.randomValueByType(column)) identifier = table.columns[0].name updates += """%sself.assertRaisesRegexp(IntegrityError, "foreign key constraint fails",db.updateInTable, self.conn, {"%s":_%s}, "%s", %s=self.%s)\n"""%(" "*indent, column.name, elementName, table.name, identifier, generator.asElementName(identifier)) else: updates += "%sdef\ttestUpdate%s(self):\n"%(" " *testIndent,generator.asClassName(column.name)) elementName = generator.asElementName(column.name) updates += generator.insertToDB(table, indent) +"\n" updates += "%s_%s = mock.%s\n"%(" "*indent, elementName, generator.randomValueByType(column)) identifier = table.columns[0].name updates += """%sdb.updateInTable(self.conn, {"%s":_%s}, "%s", %s=self.%s)\n"""%(" "*indent, column.name, elementName, table.name, identifier, generator.asElementName(identifier)) whereValue = "" if column.name == identifier: whereValue = "_" + elementName else: whereValue = "self." + generator.asElementName(identifier) updates += """%srows = db.selectFrom(self.conn, {"%s"}, "*", %s=%s)\n\n"""%(" "*indent, table.name, identifier, whereValue) updates += generateAssertEquals(table, column.name, indent)+"\n" return updates
def generateMock(tables): content = tables.content mockModule =""" import string import random import uuid as uid import hashlib import datetime def randomText(size=64 , chars=string.ascii_letters + string.digits + string.punctuation): return ''.join(random.choice(chars) for _ in range(random.randint(5, size))) def randomEmail(size=64): return randomText(size - 10) + "@sahabe.de" def randomFixedLengthText(size=64, chars=string.ascii_letters + string.digits + string.punctuation): return ''.join(random.choice(chars) for _ in range(size)) def uuid(): return str(uid.uuid4()) def timeStamp(): timeStamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') return str(timeStamp) def SHA2(): return hashlib.sha256(randomText(16)).hexdigest() def MD5(): return hashlib.md5(randomText(16)).hexdigest() class DBMock(): """ init =""" def __init__(self):\n""" for table in content: elementName = generator.asElementName(table.name) className = generator.asClassName(table.name) dependencies = generator.getDependencies(tables, table.name) classArgs = "" for dependency in dependencies: classArgs += "self.%s, "%generator.asElementName(dependency) classArgs = classArgs.rstrip(", ") init +="%sself.%s = DBMock.%s(%s)\n"%(" "*8, elementName, className, classArgs) classes ="" for table in content: elementName = generator.asElementName(table.name) className = generator.asClassName(table.name) dependencies = generator.getDependencies(tables, table.name) classArgs = "" for dependency in dependencies: classArgs += ", %s"%generator.asElementName(dependency) tableClass = """ class %s(object): def __init__(self%s):\n"""%(className, classArgs) elements = "" for column in table.columns: value = "" references = column.getReferenceIfExists(table) if references is not None: value = "%s.%s"%(generator.asElementName(references.referToTable), generator.asElementName(references.referToColumn)) else: value = generator.randomValueByType(column) elements += "%sself.%s = %s\n"%(" "*12, generator.asElementName(column.name), value) tableClass += elements classes += tableClass print "generate Mock class for %s"%className module = open("generated/MockModule.py", "w+") module.write(mockModule+ init+ classes) module.close()