第一个带有单元测试的完整模块

verify.py

#!/usr/bin/env python
#
-*- coding: utf-8 -*-

from share import db
from share import render

NotFound = -1
PersonId = 0
operator = {'read':'readPriv','write':'writePriv','manager':'manager','newPrj':'newPrj'}

def doSomething(userId,resId,op):#hasAuth
try:
if operator.has_key(op) == False:
return False

#暂时关闭创建项目审核
#if op == 'newPrj':
# rs = db.query("select grade from User where userId=$userId",vars=locals()).list()
# if len(rs)==1 and rs[0].grade > 1:
# return True
# return False

if op == 'newPrj':
return True

if op == 'manager':
rs = db.query("select * from Project where projectId = $resId",vars=locals()).list()
if len(rs)==1 and rs[0].userId == userId:
return True

rs = findProjectByresId(resId)
if rs == NotFound:
return False

if rs[0].projectId == None:
if rs[0].resUserId == userId:
return True
else:
return False


if rs[0].userId == userId:
return True
else:
return memberDo(userId,rs[0].projectId,resId,op)
except:
return False

def memberDo(userId,prjId,resId,op):
roles = db.query("SELECT roleId FROM RoleUser where projectId=$prjId and UserId=$userId",vars=locals()).list()

for r in roles:
if roleDo(int(r.roleId),prjId,int(resId),op) == True:
#print '测试通过'
return True
#print '测试未通过'
return False

def roleDo(roleId,prjId,resId,op):
if operator.has_key(op) == False:
return False
else:
op = operator[op]

if verify(roleId,prjId,resId,op) == True:
return True
pid = getResourcePid(resId)
print pid
while pid != NotFound:
if verify(roleId,prjId,pid,op) == True:
return True
pid = getResourcePid(pid)
return False

def verify(roleId,prjId,resId,op):
rs = db.query("SELECT readPriv,writePriv FROM FolderPriv WHERE roleId=$roleId and projectId=$prjId and FolderId=$resId",vars=locals()).list()
if len(rs) == 0:
return False
if hasattr(rs[0],op)== True and rs[0][op]==1:
return True
return False

def getResourcePid(resId):
print resId
rs = db.query("SELECT pCatId FROM Category WHERE catId=$resId",vars=locals()).list()
if len(rs)==1:
return int(rs[0].pCatId)
return NotFound

def findProjectByresId(resId):
rs = []
rs = db.query("SELECT Project.*,Category.userId AS resUserId FROM Category left join Project on Category.projectId = Project.projectId WHERE catId=$resId;",vars=locals()).list()
if len(rs) ==1 :
return rs
return NotFound



 verifyTEST.py
#!/usr/bin/env python
#
-*- coding: utf-8 -*-
'''
权限系统API单元测试
'''

import sys
import unittest
from share import db

import verify
from verify import doSomething

class PreSetData:
def __init__(self):
print '===============================================>开始预置测试数据'
self.clearTestData()
self.insertUser()
self.insertProject()
self.insertRole()
self.insertProjectMember()
self.insertRoleUser()
self.insertRolePes()
print
print '=================>预置数据成功,可以测试权限系统API'


def clearTestData(self):
db.query("delete from Note Where userId in(1000,1001,1002,1003,1004)")
db.query("delete from User Where userId in(1000,1001,1002,1003,1004)")
db.query("delete from Project where projectId= 2000 or userId in(1000,1001,1002,1003,1004)")
db.query("delete from Category where userId in(1000,1001,1002,1003,1004)")
db.query("delete from Category where projectId= 2000")
db.query("delete from Role where projectId= 2000")
db.query("delete from ProjectUser where projectId= 2000")
db.query("delete from RoleUser where projectId= 2000")
db.query("delete from FolderPriv where projectId = 2000")
print
print '=================>清除数据成功'



def insertUser(self):
try:
userId = 1000 # 项目创建人
username = '1000'
password = 'C4CA4238A0B923820DCC509A6F75849B' #1
grade = 100
email='1000@qq.com'
defaultCatId = 1000
db.insert('User',userId=userId,username=username,grade=grade,password=password,email=email,defaultCatId=defaultCatId)
db.insert('Category',catId=1000,catName='1000DEFAULT',userId=1000,deep=0,pCatId=0,projectId=0,isLeaf=1,trash=0)
print
print '=================>预置用户1'

userId = 1001 #HR部门人员
username = '1001'
password = 'C4CA4238A0B923820DCC509A6F75849B'
grade = 0
email='1001@qq.com'
defaultCatId = 1001
db.insert('User',userId=userId,username=username,grade=grade,password=password,email=email,defaultCatId=defaultCatId)
db.insert('Category',catId=1001,catName='1001DEFAULT',userId=1001,deep=0,pCatId=0,projectId=0,isLeaf=1,trash=0)
print
print '=================>预置用户2'

userId = 1002 #Makert部门人员
username = '1002'
password = 'C4CA4238A0B923820DCC509A6F75849B'
grade = 0
email='1002@qq.com'
defaultCatId = 1002
db.insert('User',userId=userId,username=username,grade=grade,password=password,email=email,defaultCatId=defaultCatId)
db.insert('Category',catId=1002,catName='1002DEFAULT',userId=1002,deep=0,pCatId=0,projectId=0,isLeaf=1,trash=0)
print
print '=================>预置用户3'

userId = 1003 #拥有HR和MARKET角色
username = '1003'
password = 'C4CA4238A0B923820DCC509A6F75849B'
grade = 0
email='1003@qq.com'
db.insert('User',userId=userId,username=username,grade=grade,password=password,email=email,defaultCatId=defaultCatId)
db.insert('Category',catId=1003,catName='1003DEFAULT',userId=1003,deep=0,pCatId=0,projectId=0,isLeaf=1,trash=0)
defaultCatId = 1003
print
print '=================>预置用户4'

userId = 1004 #不属于项目的成员
username = '1004'
password = 'C4CA4238A0B923820DCC509A6F75849B'
grade = 0
email='1004@qq.com'
defaultCatId = 1004
db.insert('User',userId=userId,username=username,grade=grade,password=password,email=email,defaultCatId=defaultCatId)
db.insert('Category',catId=1004,catName='1004DEFAULT',userId=1004,deep=0,pCatId=0,projectId=0,isLeaf=1,trash=0)
print
print '=================>预置用户5'


except:
print
print '===============================================>预置用户失败'
sys.exit()

def insertProject(self):
try:
catId = 3000
catName = 'TEST_HP'
userId = 1000
deep = 0
pCatId = 0
projectId = 2000
trash = 0
isLeaf = 0
db.insert('Category',catId=catId,catName=catName,userId=userId,deep=deep,pCatId=pCatId,projectId=projectId,isLeaf=isLeaf,trash=trash)
print
print '=================>预置项目根目录'

projectId=2000
projectName = 'TEST_HP'
userId=1000
folderId = 3000
password = '123'
privacy = 'public'
status = 'active'
db.insert('Project',projectId=projectId,projectName=projectName,userId=userId,folderId=folderId,password=password,privacy=privacy,status=status)
print
print '=================>预置项目'

catId = 3001
catName = 'TEST_HP_HR'
userId = 1000
deep = 1
pCatId = 3000
projectId = 2000
trash = 0
isLeaf = 1
db.insert('Category',catId=catId,catName=catName,userId=userId,deep=deep,pCatId=pCatId,projectId=projectId,isLeaf=isLeaf,trash=trash)
print
print '=================>预置项目子目录'

catId = 3002
catName = 'TEST_HP_MARKET'
userId = 1000
deep = 1
pCatId = 3000
projectId = 2000
trash = 0
isLeaf = 1
db.insert('Category',catId=catId,catName=catName,userId=userId,deep=deep,pCatId=pCatId,projectId=projectId,isLeaf=isLeaf,trash=trash)
print
print '=================>预置项目'

catId = 3003
catName = 'TEST_HP_HR_HR1'
userId = 1000
deep = 2
pCatId = 3001
projectId = 2000
trash = 0
isLeaf = 1
db.insert('Category',catId=catId,catName=catName,userId=userId,deep=deep,pCatId=pCatId,projectId=projectId,isLeaf=isLeaf,trash=trash)
print
print '=================>预置项目'

except:
print
print '===============================================>预置项目失败'
sys.exit()

def insertProjectMember(self):
try:
projectId = 2000
userId = 1001
status = 'active'
db.insert("ProjectUser",projectId=projectId,userId=userId,status=status)
print
print '=================>预置项目成员1'

projectId = 2000
userId = 1002
status = 'active'
db.insert("ProjectUser",projectId=projectId,userId=userId,status=status)
print
print '=================>预置项目成员2'

projectId = 2000
userId = 1003
status = 'active'
db.insert("ProjectUser",projectId=projectId,userId=userId,status=status)
print
print '=================>预置项目成员3'

except:
print
print '===============================================>插入项目成员失败'
sys.exit()


def insertRole(self):
try:
roleId = 4001
roleName = 'TEST_ROLE_HR'
projectId = 2000
remark = ''
db.insert("Role",roleId=roleId,roleName=roleName,projectId=projectId,remark=remark)
print
print '=================>预置角色1'

roleId = 4002
roleName = 'TEST_ROLE_MARKET'
projectId = 2000
remark = ''
db.insert("Role",roleId=roleId,roleName=roleName,projectId=projectId,remark=remark)
print
print '=================>预置角色2'

roleId = 4003
roleName = 'TEST_ROLE_HR_DELETE'
projectId = 2000
remark = ''
db.insert("Role",roleId=roleId,roleName=roleName,projectId=projectId,remark=remark)
print
print '=================>预置角色1'


except:
print
print '===============================================>预置角色失败'
sys.exit()

def insertRoleUser(self):
try:
projectId =2000
userId = 1001
RoleId = 4001
db.query("insert into RoleUser (projectId,userId,RoleId)values($projectId,$userId,$RoleId)",vars=locals())

projectId =2000
userId = 1001
RoleId = 4003
db.query("insert into RoleUser (projectId,userId,RoleId)values($projectId,$userId,$RoleId)",vars=locals())

projectId =2000
userId = 1002
RoleId = 4002
db.query("insert into RoleUser (projectId,userId,RoleId)values($projectId,$userId,$RoleId)",vars=locals())

projectId =2000
userId = 1003
RoleId = 4001
db.query("insert into RoleUser (projectId,userId,RoleId)values($projectId,$userId,$RoleId)",vars=locals())

projectId =2000
userId = 1003
RoleId = 4002
db.query("insert into RoleUser (projectId,userId,RoleId)values($projectId,$userId,$RoleId)",vars=locals())


print
print '预置用户角色'

except:
print
print '===============================================>插入角色成员失败'
sys.exit()

def insertRolePes(self):
try:
sql = "insert into FolderPriv(projectId,folderId,roleId,readPriv,writePriv) values "
sql +="($projectId,$folderId,$roleId,$readPriv,$writePriv)"

projectId = 2000
folderId = 3001 #HR
roleId = 4001 #HR
readPriv = 1
writePriv = 0
db.query(sql,vars=locals())#HR
print
print '预置角色1权限'


projectId = 2000
folderId = 3002 #MARKET
roleId = 4002 #MARKET
readPriv = 1
writePriv = 0
db.query(sql,vars=locals())#MARKET
print
print '预置角色2权限'

projectId = 2000
folderId = 3001 #HR
roleId = 4003 #HR
readPriv = 0
writePriv = 1
db.query(sql,vars=locals())#HR
print
print '预置角色3权限'



except:
print
print '===============================================>插入角色权限失败'
sys.exit()



class UserTestCase(unittest.TestCase):
def runTest(self):
#管理员测试
assert verify.doSomething(1000,9000,'newPrj') == True,''
assert verify.doSomething(1000,3000,'read') == True,''
assert verify.doSomething(1000,3003,'write') == True,''
assert verify.doSomething(1000,3003,'manager') == True,''
assert verify.doSomething(1000,2000,'manager') == True,''
assert verify.doSomething(1000,9000,'manager') == False,''

#一般测试
assert verify.doSomething(1001,3001,'read') == True,''
assert verify.doSomething(1002,3002,'read') == True,''
assert verify.doSomething(1002,3002,'write') == False,''

#角色叠加测试
assert verify.doSomething(1001,3001,'read') == True,''
assert verify.doSomething(1001,3001,'write') == True,''

#继承测试
assert verify.doSomething(1001,3003,'write') == True,''

#请求个人的资源
assert verify.doSomething(1001,1001,'write') == True,''
assert verify.doSomething(1001,1001,'write') == True,''
assert verify.doSomething(1001,1002,'read') == False,''
assert verify.doSomething(1001,1002,'read') == False,''

#错误的测试数据
#assert verify.doSomething(1009,2009,'read') == False,''
#assert verify.doSomething(1009,2009,'write') == False,''
assert verify.doSomething(1000,8000,'read') == False,''
assert verify.doSomething(1001,8000,'read') == False,''
assert verify.doSomething(8000,3001,'read') == False,''
assert verify.doSomething(1000,3001,'get') == False,''
assert verify.doSomething(1001,3001,'get') == False,''

class RoleTestCase(unittest.TestCase):
def runTest(self):
assert verify.roleDo(4001,2000,3001,'read') == True,''
assert verify.roleDo(4001,2000,3001,'get') == False,''

if __name__ == "__main__":
PreSetData()
unittest.main()

转载于:https://www.cnblogs.com/code-style/archive/2012/01/13/2321957.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值