def test_checkForDuplicateOrganizationName(self):
        orgName = 'test_checkForDuplicateOrganization'
        orgDesc = 'test org description'
        
        # Define our input JSON string.
        orgNameJSON = '{';
        orgNameJSON += '"{key}":"{val}"'.format(key='org_name', val=orgName)
        orgNameJSON += '}'

        # Define an organization.
        testOrg = models.Organization()
        testOrg.name = orgName
        testOrg.description = orgDesc
        testOrg.entity = models.Entity()
        testOrg.entity.type = models.TYPE_ORGANIZATION
        testOrgJSON = controllers.organizationToJSON(testOrg)

        # Check for duplicates (should be no duplicates).
        resultDict = json.loads(orgNameJSON)
        result1 = controllers.checkForDuplicateOrganizationName(resultDict)
        resultDict = json.loads(result1)
        self.assertEqual(resultDict['result'], 'False')

        # Insert the organization (should succeed).
        resultDict = json.loads(testOrgJSON)
        result1 = controllers.registerOrganization(resultDict, self.db)
        resultDict = json.loads(result1)
        self.assertEqual(resultDict['result'], 'True')

        # Check for duplicates (should be duplicate).
        resultDict = json.loads(orgNameJSON)
        result1 = controllers.checkForDuplicateOrganizationName(resultDict)
        resultDict = json.loads(result1)
        self.assertEqual(resultDict['result'], 'True')
    def test__checkForDuplicateOrganization(self):
        # Define an organization.
        testOrg = models.Organization()
        testOrg.name = 'test__checkForDuplicateOrganization'
        testOrg.description = 'test org description'
        testOrg.entity = models.Entity()
        testOrg.entity.type = models.TYPE_ORGANIZATION

        # Check for duplicates (should be no duplicates).
        isDuplicate = controllers._checkForDuplicateOrganization(testOrg)
        self.assertFalse(isDuplicate)

        # Insert the organization (should succeed).
        testOrgJSON = controllers.organizationToJSON(testOrg)
        resultDict = json.loads(testOrgJSON)
        result1 = controllers.registerOrganization(resultDict, self.db)
        resultDict = json.loads(result1)
        self.assertEqual(resultDict['result'], 'True')

        # Check for duplicates (should be duplicate).
        isDuplicate = controllers._checkForDuplicateOrganization(testOrg)
        self.assertTrue(isDuplicate)
    def test_registerOrganization(self):
        ''' Construct our new organization. '''
        testOrg = models.Organization()
        testOrg.name = 'Test Org'
        testOrg.description = 'A test organization'
        testOrg.entity = models.Entity()
        testOrg.entity.type = models.TYPE_ORGANIZATION

        corpAddr = models.Address()
        corpAddr.address1 = '123 Corporate Way'
        corpAddr.address2 = 'C/O Event Planning'
        corpAddr.address3 = 'PO Box 123'
        corpAddr.city = 'Vancouver'
        corpAddr.province = 'British Columbia'
        corpAddr.country = 'Canada'
        corpAddr.postalcode = '2C2C2C'
        corpAddr.isprimary = True
        testOrg.entity.addresses.append(corpAddr)

        subAddr = models.Address()
        subAddr.address1 = '15 Field Office blvd'
        subAddr.address2 = 'PO Box 15'
        subAddr.address3 = 'C/O People That Work'
        subAddr.city = 'Regina'
        subAddr.province = 'Saskatchewan'
        subAddr.country = 'Canada'
        subAddr.postalcode = '3S3S3S'
        subAddr.isprimary = False
        testOrg.entity.addresses.append(subAddr)

        corpContact = models.Contact()
        corpContact.type = models.TYPE_PHONE
        corpContact.value = '18001234567'
        corpContact.isprimary = True
        testOrg.entity.contacts.append(corpContact)

        corpContact2 = models.Contact()
        corpContact2.type = models.TYPE_EMAIL
        corpContact2.value = '*****@*****.**'
        corpContact2.isprimary = False
        testOrg.entity.contacts.append(corpContact2)

        subContact = models.Contact()
        subContact.type = models.TYPE_EMAIL
        subContact.value = '*****@*****.**'
        subContact.isprimary = False
        testOrg.entity.contacts.append(subContact)


        ''' Register the organization. '''
        corpJSON = controllers.organizationToJSON(testOrg)
        resultDict = json.loads(corpJSON)
        result = controllers.registerOrganization(resultDict,self.db)

        ''' Validate the result response. '''
        resultDict = json.loads(result)
        foundResult = False
        for key,value in resultDict.iteritems():
            if(key == 'result'):
                foundResult = True
                self.assertEqual('True', value)
        self.assertEqual(foundResult, True)

        ''' Find the organization and compare to our structure. '''
        savedOrg = models.Organization.query.filter_by(name = testOrg.name).first()
        self.assertNotEqual(savedOrg,None)
        self.assertEqual(savedOrg.name, testOrg.name)
        self.assertEqual(savedOrg.description, testOrg.description)
        self.assertEqual(savedOrg.entity.type, testOrg.entity.type)

        for a1,a2 in zip(savedOrg.entity.addresses, testOrg.entity.addresses):
            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(savedOrg.entity.contacts, testOrg.entity.contacts):
            self.assertEqual(c1.type, c2.type)
            self.assertEqual(c1.value, c2.value)
            self.assertEqual(c1.isprimary, c2.isprimary)
        self.resetDB()
 def test_organizationToJSON(self):
     target = models.Organization.query.first()
     targetJSON = controllers.organizationToJSON(target)
     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"}]}}'
     self.assertEqual(targetJSON, stringJSON)
    def test_registerDuplicateOrganization(self):
        ''' Construct our new organization. '''
        testOrg = models.Organization()
        testOrg.name = 'Test Org'
        testOrg.description = 'A test organization'
        testOrg.entity = models.Entity()
        testOrg.entity.type = models.TYPE_ORGANIZATION

        corpAddr = models.Address()
        corpAddr.address1 = '123 Corporate Way'
        corpAddr.address2 = 'C/O Event Planning'
        corpAddr.address3 = 'PO Box 123'
        corpAddr.city = 'Vancouver'
        corpAddr.province = 'British Columbia'
        corpAddr.country = 'Canada'
        corpAddr.postalcode = '2C2C2C'
        corpAddr.isprimary = True
        testOrg.entity.addresses.append(corpAddr)

        subAddr = models.Address()
        subAddr.address1 = '15 Field Office blvd'
        subAddr.address2 = 'PO Box 15'
        subAddr.address3 = 'C/O People That Work'
        subAddr.city = 'Regina'
        subAddr.province = 'Saskatchewan'
        subAddr.country = 'Canada'
        subAddr.postalcode = '3S3S3S'
        subAddr.isprimary = False
        testOrg.entity.addresses.append(subAddr)

        corpContact = models.Contact()
        corpContact.type = models.TYPE_PHONE
        corpContact.value = '18001234567'
        corpContact.isprimary = True
        testOrg.entity.contacts.append(corpContact)

        corpContact2 = models.Contact()
        corpContact2.type = models.TYPE_EMAIL
        corpContact2.value = '*****@*****.**'
        corpContact2.isprimary = False
        testOrg.entity.contacts.append(corpContact2)

        subContact = models.Contact()
        subContact.type = models.TYPE_EMAIL
        subContact.value = '*****@*****.**'
        subContact.isprimary = False
        testOrg.entity.contacts.append(subContact)


        ''' Register the organization. '''
        corpJSON = controllers.organizationToJSON(testOrg)
        resultDict = json.loads(corpJSON)
        result = controllers.registerOrganization(resultDict,self.db)

        ''' Validate the result response. '''
        resultDict = json.loads(result)
        foundResult = False
        for key,value in resultDict.iteritems():
            if(key == 'result'):
                foundResult = True
                self.assertEqual('True', value)
        self.assertEqual(foundResult, True)

        ''' Register the organization a second time. '''
        resultDict = json.loads(corpJSON)
        result = controllers.registerOrganization(resultDict,self.db)

        ''' Validate the result response. '''
        resultDict = json.loads(result)
        foundResult = False
        for key,value in resultDict.iteritems():
            if(key == 'result'):
                foundResult = True
                self.assertEqual('duplicate', value)
        self.assertEqual(foundResult, True)
        self.resetDB()