コード例 #1
0
ファイル: TestsGenerator.py プロジェクト: lutzer/sahabe
def generateAssertEquals(table, notSelfElement, indent, prefix = ""):
    asserts = ""
    index = 0
    for column in table.columns:
        refer = column.getReferenceIfExists(table)
        name = ""
        if refer is not None:
            name ="self.%s.%s"%(generator.asElementName(refer.referToTable), 
                                generator.asElementName(refer.referToColumn))
        else:
            if prefix == "":
                if  column.name != notSelfElement:
                    name = "self.%s"%generator.asElementName(column.name)
                else:
                    name = "_%s"%generator.asElementName(column.name)
            else:
                if  column.name != notSelfElement:
                    name = "%s.%s"%(prefix, generator.asElementName(column.name))
                
        asserts += "%sself.assertEqual(%s, str(rows[0][%s]))\n"%(" "*8, name, index)
        index += 1 
    return asserts    
コード例 #2
0
ファイル: TestsGenerator.py プロジェクト: lutzer/sahabe
def generateDropTest(tables, table, testIndent):
    indent = testIndent + 4
    identifier = table.columns[0].name
    idElement = generator.asElementName(identifier)
    drop = "%sdef\ttestDrop%s(self):\n"%(" " *testIndent, generator.asClassName(table.name))
    drop += generator.insertToDB(table, indent)
    drop += """%sdb.deleteFromTable(self.conn, "%s", %s=self.%s)\n"""%(" "*indent,
                                                                     table.name,
                                                                     identifier,
                                                                     idElement)
    drop += """%srows = db.selectFrom(self.conn, {"%s"}, "*", %s=self.%s)\n"""%(" "*indent,
                                            table.name, 
                                            identifier,
                                            idElement)
    drop += "%sself.assertEqual(rows, [])\n\n"%(" "*indent)
    
    referencingTables = table.getReferencingTables(tables)

    for refTable in referencingTables:
        drop += "%sdef\ttestDrop%sBy%s(self):\n"%(" " *testIndent,
                                                 generator.asClassName(refTable.name),
                                                 generator.asClassName(table.name))
        
        drop += generator.insertToDB(table, indent)
        drop += generator.insertToDB(refTable, indent, generator.asElementName(refTable.name))
        drop += """%sdb.deleteFromTable(self.conn, "%s", %s=self.%s)\n"""%(" "*indent,
                                                                         table.name,
                                                                         identifier,
                                                                         idElement)
        drop += """%srows = db.selectFrom(self.conn, {"%s"}, "*", %s=self.%s.%s)\n"""%(" "*indent,
                                            refTable.name, 
                                            refTable.columns[0].name,
                                            generator.asElementName(refTable.name),
                                            generator.asElementName(refTable.columns[0].name))
        drop += "%sself.assertEqual(rows, [])\n\n"%(" "*indent)    
    
    
    return drop
コード例 #3
0
ファイル: TestsGenerator.py プロジェクト: lutzer/sahabe
def generateDataTypeTest(table, testIndent):
    indent = testIndent + 4
    tests = ""
    for column in table.columns:
        tests = "%sdef\ttestInsertInvalid%s(self):\n"%(" " *testIndent,
                                                     generator.asClassName(column.name)) 
        
        tests += "%s_%s = %s"%(indent, 
                               generator.asElementName(column.name),
                               generator.invalidValueByType(column))
        
        
        
        tests += "%sself.assertRaisesRegexp(DataError, self.insert%s ,\n"%(indent,
                                                                           generator.asClassName(table.name))

        


    return tests
コード例 #4
0
ファイル: TestsGenerator.py プロジェクト: lutzer/sahabe
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
コード例 #5
0
ファイル: MockGenerator.py プロジェクト: lutzer/sahabe
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()