def test_getAllOrganizationsJSON(self):
        ''' Get the JSON version of all organizations. '''
        jsonified = controllers.getAllOrganizationsJSON(self.db)

        data = json.loads(jsonified)
        for root,orgs in data.iteritems():
            self.assertEquals(root, 'Organizations')

            orgList = list()
            for org in orgs:
                newOrg = controllers.extractOrganizationFromDict(org)
                orgList.append(newOrg)

            allOrgs = controllers.getAllOrganizations(self.db)
            for first,second in zip(allOrgs,orgList):
                self.assertEqual(first.entityFK, second.entityFK);
                self.assertEqual(first.name, second.name)
                self.assertEqual(first.description, second.description)
                self.assertEqual(first.entity.pk, second.entity.pk)
                self.assertEqual(first.entity.type, second.entity.type)
                for a1,a2 in zip(first.entity.addresses, second.entity.addresses):
                    self.assertEqual(a1.entityFK, a2.entityFK)
                    self.assertEqual(a1.address1, a2.address1)
                    self.assertEqual(a1.address2, a2.address2)
                    self.assertEqual(a1.address3, a2.address3)
                    self.assertEqual(a1.city, a2.city)
                    self.assertEqual(a1.province, a2.province)
                    self.assertEqual(a1.country, a2.country)
                    self.assertEqual(a1.postalcode, a2.postalcode)
                    self.assertEqual(a1.isprimary, a2.isprimary)
                for c1,c2 in zip(first.entity.contacts, second.entity.contacts):
                    self.assertEqual(c1.entityFK, c2.entityFK)
                    self.assertEqual(c1.type, c2.type)
                    self.assertEqual(c1.value, c2.value)
                    self.assertEqual(c1.isprimary, c2.isprimary)
    def test_extractOrganizationFromDict(self):
        control = models.Organization.query.first()
        stringJSON = '{"org_entityfk":1,"org_name":"Ai-Kon","org_desc":"Ai-Kon Anime Convention","Entity":{"entity_pk":1,"entity_type":"1","addresses":[{"addr_entityfk":1,"address1":"123 Vroom Street","address2":"None","address3":"None","city":"Winnipeg","province":"Manitoba","country":"Canada","postalcode":"A1A1A1","isprimary":"True"}], "contacts":[{"contact_entityfk":1,"type":"2","value":"*****@*****.**","isprimary":"True"}]}}'
        data = json.loads(stringJSON)
        target = controllers.extractOrganizationFromDict(data)

        self.assertEqual(control.entityFK, target.entityFK);
        self.assertEqual(control.name, target.name)
        self.assertEqual(control.description, target.description)
        self.assertEqual(control.entity.pk, target.entity.pk)
        self.assertEqual(control.entity.type, target.entity.type)
        for a1,a2 in zip(control.entity.addresses, target.entity.addresses):
            self.assertEqual(a1.entityFK, a2.entityFK)
            self.assertEqual(a1.address1, a2.address1)
            self.assertEqual(a1.address2, a2.address2)
            self.assertEqual(a1.address3, a2.address3)
            self.assertEqual(a1.city, a2.city)
            self.assertEqual(a1.province, a2.province)
            self.assertEqual(a1.country, a2.country)
            self.assertEqual(a1.postalcode, a2.postalcode)
            self.assertEqual(a1.isprimary, a2.isprimary)
        for c1,c2 in zip(control.entity.contacts, target.entity.contacts):
            self.assertEqual(c1.entityFK, c2.entityFK)
            self.assertEqual(c1.type, c2.type)
            self.assertEqual(c1.value, c2.value)
            self.assertEqual(c1.isprimary, c2.isprimary)
    def test_getOrganizationByIDJSON(self):
        ''' Test getOrganizationByID method '''
        ''' Validate first organization entries '''
        jsonify = json.loads(controllers.getOrganizationByIDJSON(1))
        org = controllers.extractOrganizationFromDict(jsonify)
        self.assertIsNotNone(org)
        self.assertEqual(org.entityFK, 1)
        self.assertEquals(org.name, 'Ai-Kon')
        self.assertEquals(org.description, 'Ai-Kon Anime Convention')
        self.assertEquals(org.entity.type, models.TYPE_ORGANIZATION)
        self.assertEquals(org.entity.addresses[0].address1, '123 Vroom Street')
        self.assertEquals(org.entity.addresses[0].address2, None)
        self.assertEquals(org.entity.addresses[0].address3, None)
        self.assertEquals(org.entity.addresses[0].city, 'Winnipeg')
        self.assertEquals(org.entity.addresses[0].province, 'Manitoba')
        self.assertEquals(org.entity.addresses[0].country, 'Canada')
        self.assertEquals(org.entity.addresses[0].postalcode, 'A1A1A1')
        self.assertEquals(org.entity.addresses[0].isprimary, True)
        self.assertEquals(org.entity.contacts[0].type, models.TYPE_EMAIL)
        self.assertEquals(org.entity.contacts[0].value, '*****@*****.**')
        self.assertEquals(org.entity.contacts[0].isprimary, True)

        ''' Validate second organization entries '''
        jsonify = json.loads(controllers.getOrganizationByIDJSON(2))
        org = controllers.extractOrganizationFromDict(jsonify)
        self.assertIsNotNone(org)
        self.assertEquals(org.entityFK, 2) 
        self.assertEquals(org.name, 'University of Manitoba')
        self.assertEquals(org.description, 'The University of Manitoba, is a public university in the province of Manitoba, Canada. Located in Winnipeg, it is Manitoba\'s largest, most comprehensive, and only research-intensive post-secondary educational institution.')
        self.assertEquals(org.entity.type, models.TYPE_ORGANIZATION)
        self.assertEquals(org.entity.addresses[0].address1, '66 Chancellors Circle')
        self.assertEquals(org.entity.addresses[0].address2, None)
        self.assertEquals(org.entity.addresses[0].address3, None)
        self.assertEquals(org.entity.addresses[0].city, 'Winnipeg')
        self.assertEquals(org.entity.addresses[0].province, 'Manitoba')
        self.assertEquals(org.entity.addresses[0].country, 'Canada')
        self.assertEquals(org.entity.addresses[0].postalcode, 'R3T2N2')
        self.assertEquals(org.entity.addresses[0].isprimary, True)
        self.assertEquals(org.entity.contacts[0].type, models.TYPE_PHONE)
        self.assertEquals(org.entity.contacts[0].value, '18004321960')
        self.assertEquals(org.entity.contacts[0].isprimary, True)

        ''' Attempt an invalid organization '''
        org = controllers.getOrganizationByIDJSON(3)
        self.assertIsNone(org)