#! /usr/bin/env python
# -*- coding: iso-8859-1 -*-
#-----------------------------------------------------------------------------
# Modeling Framework: an Object-Relational Bridge for python
#
# Copyright (c) 2001-2004 Sbastien Bigaret <sbigaret@users.sourceforge.net>
# All rights reserved.
#
# This file is part of the Modeling Framework.
#
# This code is distributed under a "3-clause BSD"-style license;
# see the LICENSE file for details.
#-----------------------------------------------------------------------------
"""Tests for Entity"""
import unittest
if __name__ == "__main__":
import utils, sys
utils.fixpath()
from Modeling import ModelSet
from Modeling.Model import Model
# Classes for tests
from testPackages.AuthorBooks.Writer import Writer
from testPackages.AuthorBooks.Book import Book
from testPackages.StoreEmployees import Store
model=ModelSet.defaultModelSet().modelNamed('AuthorBooks')
StEmp=ModelSet.defaultModelSet().modelNamed('StoreEmployees')
## Tests begin here
class TestEntity(unittest.TestCase):
"-"
def test_01_objectsPathForKeyPath(self):
"[Entity] objectsPathForKeyPath"
writer=model.entityNamed('Writer')
book=model.entityNamed('Book')
book_title=book.attributeNamed('title')
writer_lastName=writer.attributeNamed('lastName')
writer_books=writer.relationshipNamed('books')
self.assertEqual(writer.objectsPathForKeyPath('books'),
[writer_books, book])
self.assertEqual(writer.objectsPathForKeyPath('books.title'),
[writer_books, book_title])
self.assertEqual(book.objectsPathForKeyPath('title'),
[book_title])
self.assertRaises(ValueError, writer.objectsPathForKeyPath,
('books.title.author',))
self.assertRaises(ValueError, writer.objectsPathForKeyPath,
('lastName.books',))
def test_02_destinationObjectForKeyPath(self):
"[Entity] destinationObjectForKeyPath"
writer=model.entityNamed('Writer')
book=model.entityNamed('Book')
title=book.attributeNamed('title')
lastName=writer.attributeNamed('lastName')
self.assertEqual(writer.destinationObjectForKeyPath('books'),
book)
self.assertEqual(writer.destinationObjectForKeyPath('books.title'),
title)
self.assertEqual(book.destinationObjectForKeyPath('title'),
title)
self.assertRaises(ValueError, writer.destinationObjectForKeyPath,
('books.title.author',))
self.assertRaises(ValueError, writer.destinationObjectForKeyPath,
('lastName.books',))
def test_03_allSubEntities(self):
"[Entity] allSubEntities"
writer=model.entityNamed('Writer')
self.failIf(writer.allSubEntities())
employee=StEmp.entityNamed('Employee')
sales_clerk=StEmp.entityNamed('SalesClerk')
executive=StEmp.entityNamed('Executive')
emp_subentities=employee.allSubEntities()
self.failUnless(len(emp_subentities)==2)
self.failUnless(sales_clerk in emp_subentities)
self.failUnless(executive in emp_subentities)
class TestEntityModule(unittest.TestCase):
"-"
def test_01_externalNameForInternalName_and_inverse(self):
"[Entity module] externalNameForInternalName and inverse"
from Modeling.Entity import externalNameForInternalName,nameForExternalName
tests=(('ADDRESS', 'address'),
('ADDRESS_BOOK', 'addressBook'),
('DB2_ID', 'db2Id'))
for N,n in tests:
self.failIf(externalNameForInternalName(n)!=N,
'externalNameForInternalName(%s)!=%s'%(n,N))
self.failIf(nameForExternalName(N)!=n,
'nameForExternalName(%s)!=%s'%(N,n))
self.failIf(nameForExternalName(externalNameForInternalName(n))!=n,
'nameForExternalName(externalNameForInternalName(%s))!=%s'%(n,n))
self.failIf(externalNameForInternalName(nameForExternalName(N))!=N,
'nameForExternalName(externalNameForInternalName(%s))!=%s'%(N,N))
# Build the test suite
def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestEntity, "test_"))
suite.addTest(unittest.makeSuite(TestEntityModule, "test_"))
return suite
if __name__ == "__main__":
errs = utils.run_suite(test_suite())
sys.exit(errs and 1 or 0)
|