import sys
from nevow import tags
from nevow.livetrial.testcase import TestCase
from axiom.store import Store
from axiom.dependency import installOn
from xmantissa import people, ixmantissa
from xmantissa.webtheme import getLoader
from xmantissa.webapp import PrivateApplication
class AddPersonTestBase(people.AddPersonFragment):
jsClass = None
def __init__(self):
self.store = Store()
self.original = people.AddPerson(store=self.store)
self.organizer = people.Organizer(store=self.store)
super(AddPersonTestBase, self).__init__()
def getWidgetDocument(self):
return tags.invisible(render=tags.directive('addPersonForm'))
def mangleDefaults(self, params):
pass
def checkResult(self):
pass
def addPerson(self, *a, **k):
try:
super(AddPersonTestBase, self).addPerson(*a, **k)
except:
self.exc_info = sys.exc_info()
else:
self.exc_info = None
self.checkResult()
def render_addPersonForm(self, ctx, data):
liveform = super(AddPersonTestBase, self).render_addPersonForm(ctx, data)
params = dict((p.name, p) for p in liveform.parameters)
self.mangleDefaults(params)
return liveform
class NoNickOrFirstLastNames(AddPersonTestBase, TestCase):
jsClass = u'Mantissa.Test.NoNickOrFirstLastNames'
def checkResult(self):
self.assertEqual(self.exc_info[0], ValueError)
for cls in (people.Person, people.EmailAddress):
self.assertEqual(self.store.count(cls), 0)
class NoNickButFirstLastNames(AddPersonTestBase, TestCase):
jsClass = u'Mantissa.Test.NoNickButFirstLastNames'
def mangleDefaults(self, params):
params['firstname'].default = u'FIRSTNAME'
params['lastname'].default = u'LASTNAME'
def checkResult(self):
self.assertEqual(self.exc_info, None)
p = self.store.findUnique(people.Person)
self.assertEqual(p.name, '')
self.assertEqual(p.organizer, self.organizer)
rn = self.store.findUnique(people.RealName)
self.assertEqual(rn.first, 'FIRSTNAME')
self.assertEqual(rn.last, 'LASTNAME')
self.assertEqual(rn.person, p)
rn.deleteFromStore()
p.deleteFromStore()
self.assertEqual(self.store.count(people.EmailAddress), 0)
class OnlyNick(AddPersonTestBase, TestCase):
jsClass = u'Mantissa.Test.OnlyNick'
def mangleDefaults(self, params):
params['nickname'].default = u'everybody'
def checkResult(self):
self.assertEqual(self.exc_info, None)
p = self.store.findUnique(people.Person)
self.assertEqual(p.name, 'everybody')
self.assertEqual(p.organizer, self.organizer)
p.deleteFromStore()
self.assertEqual(self.store.count(people.EmailAddress), 0)
self.assertEqual(self.store.count(people.RealName), 0)
class OnlyEmailAddress(AddPersonTestBase, TestCase):
jsClass = u'Mantissa.Test.OnlyEmailAddress'
def mangleDefaults(self, params):
params['email'].default = u'bob@the.internet'
def checkResult(self):
self.assertEqual(self.exc_info[0], ValueError)
for cls in (people.Person, people.RealName, people.EmailAddress):
self.assertEqual(self.store.count(cls), 0)
class NickNameAndEmailAddress(AddPersonTestBase, TestCase):
jsClass = u'Mantissa.Test.NickNameAndEmailAddress'
def mangleDefaults(self, params):
params['nickname'].default = u'NICK!!!'
params['email'].default = u'a@b.c'
def checkResult(self):
self.assertEqual(self.exc_info, None)
p = self.store.findUnique(people.Person)
self.assertEqual(p.name, 'NICK!!!')
self.assertEqual(p.organizer, self.organizer)
e = self.store.findUnique(people.EmailAddress)
self.assertEqual(e.address, 'a@b.c')
self.assertEqual(e.person, p)
e.deleteFromStore()
p.deleteFromStore()
self.assertEqual(self.store.count(people.RealName), 0)
class PersonDetailTestCase(TestCase):
jsClass = u'Mantissa.Test.PersonDetail'
def getWidgetDocument(self):
s = Store()
installOn(PrivateApplication(store=s), s)
o = people.Organizer(store=s)
installOn(o, s)
p = people.Person(store=s,
name=u'The Foo Person',
organizer=o)
people.EmailAddress(store=s, person=p, address=u'foo@skynet')
people.PhoneNumber(store=s, person=p, number=u'434-5030')
f = ixmantissa.INavigableFragment(p)
f.docFactory = getLoader(f.fragmentName)
f.setFragmentParent(self)
return f
syntax highlighted by Code2HTML, v. 0.9.1