[Zope-CVS] CVS: Products/Ape/lib/apelib/config/tests - __init__.py:1.1.2.1 test_minitables.py:1.1.2.1
   
    Shane Hathaway
     
    shane@zope.com
       
    Mon, 7 Jul 2003 18:59:24 -0400
    
    
  
Update of /cvs-repository/Products/Ape/lib/apelib/config/tests
In directory cvs.zope.org:/tmp/cvs-serv2793/config/tests
Added Files:
      Tag: ape-newconf-branch
	__init__.py test_minitables.py 
Log Message:
Implemented XML-based configuration.  The filesystem tests pass.
Used an experimental approach for mixing configuration from multiple sources.
Take a look at zope2/apeconf.xml.
=== Added File Products/Ape/lib/apelib/config/tests/__init__.py ===
##############################################################################
#
# Copyright (c) 2003 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""Ape configuration test package.
$Id: __init__.py,v 1.1.2.1 2003/07/07 22:59:18 shane Exp $
"""
=== Added File Products/Ape/lib/apelib/config/tests/test_minitables.py ===
##############################################################################
#
# Copyright (c) 2003 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""Minitable tests.
$Id: test_minitables.py,v 1.1.2.1 2003/07/07 22:59:18 shane Exp $
"""
import unittest
from apelib.config import minitables
TEST_DATA = [
    {'name':    'Jose',
     'sex':     'm',
     'address': '101 Example St.',
     'phone':   '123-4567',
     },
    {'name':    'Maria',
     'sex':     'f',
     'address': '102 Example St.',
     },
    {'name':    'Carlos',
     'sex':     'm',
     'phone':   '987-6543',
     },
    {'name':    'Tiago',
     'sex':     'm',
     'phone':   '123-4567',
     },
    {'name':    'Ana',
     'sex':     'f',
     'phone':   '123-4567',
     },
    ]
class MiniTableTests(unittest.TestCase):
    def setUp(self):
        schema = minitables.TableSchema()
        schema.addColumn('name', primary=1, indexed=1)
        schema.addColumn('sex', indexed=1)
        schema.addColumn('address')
        schema.addColumn('phone', indexed=1)
        self.table = table = minitables.Table(schema)
        for data in TEST_DATA:
            table.insert(data)
    def testSelectByName(self):
        # Searches by primary key
        records = self.table.select({'name': 'Jose'})
        self.assertEqual(len(records), 1)
        self.assertEqual(records[0]['address'], '101 Example St.')
    def testSelectByUnknownName(self):
        # Searches by primary key
        records = self.table.select({'name': 'Joao'})
        self.assertEqual(len(records), 0)
    def testSelectByPhone(self):
        # Searches by index
        records = self.table.select({'phone': '987-6543'})
        self.assertEqual(len(records), 1)
        self.assertEqual(records[0]['name'], 'Carlos')
    def testSelectByAddress(self):
        # Searches one-by-one
        records = self.table.select({'address': '102 Example St.'})
        self.assertEqual(len(records), 1)
        self.assertEqual(records[0]['name'], 'Maria')
    def testSelectMales(self):
        records = self.table.select({'sex': 'm'})
        self.assertEqual(len(records), 3)
    def testSelectFemales(self):
        records = self.table.select({'sex': 'f'})
        self.assertEqual(len(records), 2)
    def testSelectByNameAndSex(self):
        records = self.table.select({'name': 'Jose', 'sex': 'm'})
        self.assertEqual(len(records), 1)
    def testSelectByNameAndIncorrectSex(self):
        records = self.table.select({'name': 'Jose', 'sex': 'f'})
        self.assertEqual(len(records), 0)
    def testSelectBySexAndPhone(self):
        # Intersects two indexes
        records = self.table.select({'phone': '123-4567', 'sex': 'm'})
        self.assertEqual(len(records), 2)
    def testSelectAll(self):
        records = self.table.select({})
        self.assertEqual(len(records), 5)
    def testInsertMinimal(self):
        self.table.insert({'name': 'Edson'})
    def testInsertDuplicate(self):
        self.assertRaises(minitables.DuplicateError,
                          self.table.insert, {'name':'Carlos'})
    def testInsertWithoutPrimaryKey(self):
        self.assertRaises(ValueError, self.table.insert, {})
    def testUpdateNewAddress(self):
        # Test adding a value in a non-indexed column
        self.table.update({'name': 'Carlos'}, {'address': '99 Sohcahtoa Ct.'})
        records = self.table.select({'address': '99 Sohcahtoa Ct.'})
        self.assertEqual(len(records), 1)
        self.assertEqual(records[0]['name'], 'Carlos')
    def testUpdateChangeAddress(self):
        # Test changing a value in a non-indexed column
        self.table.update({'name': 'Jose'}, {'address': '99 Sohcahtoa Ct.'})
        records = self.table.select({'address': '99 Sohcahtoa Ct.'})
        self.assertEqual(len(records), 1)
        self.assertEqual(records[0]['name'], 'Jose')
    def testUpdateFemaleAddresses(self):
        # Test changing and adding simultaneously in a non-indexed column
        self.table.update({'sex': 'f'}, {'address': '99 Sohcahtoa Ct.'})
        records = self.table.select({'address': '99 Sohcahtoa Ct.'})
        self.assertEqual(len(records), 2)
    def testUpdateChangePhone(self):
        # Test changing a value in an indexed column
        records = self.table.select({'phone': '123-4567'})
        self.assertEqual(len(records), 3)  # Precondition
        self.table.update({'name': 'Jose'}, {'phone': '111-5555'})
        records = self.table.select({'phone': '123-4567'})
        self.assertEqual(len(records), 2)
        records = self.table.select({'phone': '111-5555'})
        self.assertEqual(len(records), 1)
        self.assertEqual(records[0]['name'], 'Jose')
    def testUpdateChangeName(self):
        # Test changing a value in a primary key column
        records = self.table.select({'name': 'Jose'})
        self.assertEqual(len(records), 1)  # Precondition
        self.table.update({'name': 'Jose'}, {'name': 'Marco'})
        records = self.table.select({'name': 'Jose'})
        self.assertEqual(len(records), 0)
        records = self.table.select({'name': 'Marco'})
        self.assertEqual(len(records), 1)
    def testUpdateNameConflict(self):
        self.assertRaises(minitables.DuplicateError, self.table.update,
                          {'name':'Jose'}, {'name': 'Carlos'})
if __name__ == '__main__':
    unittest.main()