tests/db.py
author Sandro Knauß <knauss@netzguerilla.net>
Mon, 13 Feb 2012 17:13:48 +0100
branchdevel
changeset 146 8cae6cfc1de4
parent 138 57c4450c8ba6
child 150 c6896c3374c4
permissions -rw-r--r--
adding ConfigTest and OfferTest

import unittest

from datetime import datetime

from iro.model.schema import User, Offer, Userright, Job, Message
from decimal import Decimal

from .dbtestcase import DBTestCase

class DBTests(DBTestCase):
    """tests for the db model"""
    
    def testRoutes(self):
        '''test routes'''
        with self.session() as session:
            u=User(name='test',apikey='abcdef123456789')
            o=Offer(name="sipgate_basic", provider="sipgate", route="basic", typ="sms")
            u.rights.append(Userright(o)) 
            session.add(u)
        
        with self.session() as session:
            u=session.merge(u)
            self.failUnlessEqual(u.routes('sms').all(),[('sipgate_basic',),])


    def testTyps(self):
        with self.session() as session:
            o=Offer(name="sipgate_basic", provider="sipgate", route="basic", typ="sms")
            session.add(o)
        
        with self.session() as session:
            self.failUnlessEqual(session.typs.all(),[('sms',),])

        with self.session() as session:
            o=Offer(name="s2", provider="sipgate", route="basic", typ="sms")
            o=Offer(name="s3", provider="sipgate", route="basic", typ="sms2")
            session.add(o)
        
        with self.session() as session:
            self.failUnlessEqual(session.typs.order_by(Offer.typ).all(),[('sms',),('sms2',)])


class BillTest(DBTestCase):
    """test the bill function"""
    
    def testBill(self):
        '''test bill function'''
        apikey='abcdef123456789'
        with self.session() as session:
            u=User(name='test',apikey=apikey)
            session.add(u)
            o = Offer(name='sipgate_basic',provider="sipgate",route="basic",typ="sms")
            j = Job(info='i',status='sended')
            m = Message(recipient='0123456789', isBilled=False, date=datetime.now() , price=0.30, offer=o, job=j)
            u.rights.append(Userright(o))
            u.jobs.append(j)
            session.add(m)

        with self.session() as session:
            u=session.merge(u)
            self.failUnlessEqual(u.rights[0].bill.all(),[(1L,Decimal('0.3000'),'i')])

    def testBillAgreget(self):
        apikey='abcdef123456789'
        with self.session() as session:
            u=User(name='test',apikey=apikey)
            session.add(u)
            o = Offer(name='sipgate_basic',provider="sipgate",route="basic",typ="sms")
            j = Job(info='i',status='sended')
            j.messages.append(Message(recipient='0123456789', isBilled=False, date=datetime.now() , price=0.30, offer=o))
            j.messages.append(Message(recipient='0123456789', isBilled=False, date=datetime.now() , price=0.4, offer=o))
            u.rights.append(Userright(o))
            u.jobs.append(j)
 
        with self.session() as session:
            u=session.merge(u)
            self.failUnlessEqual(u.rights[0].bill.all(),[(2L,Decimal('0.7000'),'i')])
        
    def testBillIsBilled(self):
        apikey='abcdef123456789'
        with self.session() as session:
            u=User(name='test',apikey=apikey)
            session.add(u)
            o = Offer(name='sipgate_basic',provider="sipgate",route="basic",typ="sms")
            j = Job(info='i',status='sended')
            j.messages.append(Message(recipient='0123456789', isBilled=True, date=datetime.now() , price=0.30, offer=o))
            j.messages.append(Message(recipient='0123456789', isBilled=False, date=datetime.now() , price=0.4, offer=o))
            u.rights.append(Userright(o))
            u.jobs.append(j)

        with self.session() as session:
            u=session.merge(u)
            self.failUnlessEqual(u.rights[0].bill.all(),[(1L,Decimal('0.4000'),'i')])

    def testBillMultipleJobs(self):
        apikey='abcdef123456789'
        with self.session() as session:
            u=User(name='test',apikey=apikey)
            session.add(u)
            o = Offer(name='sipgate_basic',provider="sipgate",route="basic",typ="sms")
            u.rights.append(Userright(o))
            
            j = Job(info='i',status='sended')
            j.messages.append(Message(recipient='0123456789', isBilled=False, date=datetime.now() , price=0.4, offer=o))
            u.jobs.append(j)

            j = Job(info='a',status='sended')
            j.messages.append(Message(recipient='0123456789', isBilled=False, date=datetime.now(), price=0.4, offer=o))
            u.jobs.append(j) 
        
        with self.session() as session:
            u=session.merge(u)
            self.failUnlessEqual(u.rights[0].bill.order_by(Job.info).all(),
                    [(1L,Decimal('0.4000'),'a'),
                    (1L,Decimal('0.4000'),'i')
                    ])

    def testBillMultipleOffers(self):
        apikey='abcdef123456789'
        with self.session() as session:
            u=User(name='test',apikey=apikey)
            session.add(u)
            o = Offer(name='sipgate_basic',provider="sipgate",route="basic",typ="sms")
            u.rights.append(Userright(o))
            
            j = Job(info='a',status='sended')
            j.messages.append(Message(recipient='0123456789', isBilled=False, date=datetime.now(), price=0.4, offer=o))
            u.jobs.append(j) 
 
            o = Offer(name='sipgate_gold',provider="sipgate",route="gold",typ="sms")
            u.rights.append(Userright(offer=o))
            
            j = Job(info='a',status='sended')
            j.messages.append(Message(recipient='0123456789', isBilled=False, date=datetime.now(), price=0.5, offer=o))
            u.jobs.append(j) 
       
        with self.session() as session:
            u=session.merge(u)
            self.failUnlessEqual(u.rights[0].bill.all(),
                    [(1L,Decimal('0.4000'),'a')])
        
            self.failUnlessEqual(u.rights[1].bill.all(),[(1L,Decimal('0.5000'),'a')])


if __name__ == '__main__':
        unittest.main()