def setUp(self):
        '''
        Creates credientials as all views require login
        '''
        self.family = Family()
        self.family.save()

        self.user = User.objects.create_user(email='arif_mardin:@queenonline.com', password='******', name='Arif Mardin:', family_id=self.family.id)

        self.gallery = Gallery.objects.create(family_id=self.family.id, title="gallery")

        self.test_image = os.path.join(settings.BASE_DIR, 'gallery/tests/test_image.jpg')
        self.test_image_destination = ''.join([settings.MEDIA_ROOT, 'galleries/', str(self.family.id), '/', str(self.gallery.id), '/test_image.jpg'])

        directory = ''.join([settings.MEDIA_ROOT, 'galleries/', str(self.family.id), '/', str(self.gallery.id)])
        if not os.path.exists(directory):
            os.makedirs(directory)

        #Copy test image to media area
        shutil.copy2(self.test_image, self.test_image_destination)

        self.images = []

        for i in range(0,20):
            self.images.append(
                                Image(
                                    gallery=self.gallery,
                                    family=self.family,
                                    original_image=self.test_image_destination,
                                    thumbnail=self.test_image_destination,
                                    large_thumbnail=self.test_image_destination
                                    )
                                )
Beispiel #2
0
    def setUp(self):
        '''
        Need to create a family and a gallery
        '''
        self.family = Family()
        self.family.save()

        self.gallery = Gallery.objects.create(title="test_gallery",
                                              family_id=self.family.id)

        self.test_image = os.path.join(settings.BASE_DIR,
                                       'gallery/tests/test_image.jpg')
        self.test_image_destination = ''.join([
            settings.MEDIA_ROOT, 'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id), '/test_image.jpg'
        ])
        self.test_image_s3_key = ''.join([
            'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id), '/test_image.jpg'
        ])

        directory = ''.join([
            settings.MEDIA_ROOT, 'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id)
        ])
        if not os.path.exists(directory):
            os.makedirs(directory)
    def setUp(self):
        '''
        Creates credientials as all views require login
        '''
        self.family = Family()
        self.family.save()

        self.user = User.objects.create_user(email='*****@*****.**', password='******', name='John Deacon', family_id=self.family.id)
        self.user.is_confirmed = True
        self.user.save()

        self.person = Person.objects.create(name='John Deacon', gender='M', user_id=self.user.id, email='*****@*****.**', family_id=self.family.id)
        self.person.save()

        self.biography = Biography(person_id=self.person.id, language='en', content='')
        self.biography.save()

        self.user2 = User.objects.create_user(email='*****@*****.**', password='******', name='Freddie Mercury', family_id=self.family.id)
        self.user2.save()

        self.person2 = Person.objects.create(name='Freddie Mercury', gender='M', user_id=self.user2.id, locked=True, email='*****@*****.**', family_id=self.family.id)
        self.person2.save()

        self.another_family = Family()
        self.another_family.save()
        self.another_user = User.objects.create_user(email='*****@*****.**', password="******", name='Prince Vultan', family_id=self.another_family.id)
        self.another_user.save()

        self.confirmed_user = User.objects.create_user(email='*****@*****.**', password='******', name='General Kala', family_id=self.family.id)
        self.confirmed_user.is_confirmed = True
        self.confirmed_user.save()

        self.confirmed_person = Person.objects.create(name='General Kala', gender='F', user_id=self.confirmed_user.id, locked=False, email='*****@*****.**', family_id=self.family.id)
        self.confirmed_person.save()
Beispiel #4
0
    def test_get_distinct_families_and_languages(self):
        '''
        Tests that we get the languages and families involved in the newsletters
        '''
        from family_tree.models import Family
        family = Family()
        family.save()

        from custom_user.models import User
        user = User.objects.create_user(email='*****@*****.**',
                                        password='******',
                                        name='Fabio Testi',
                                        language='en',
                                        family_id=family.id)
        user.save()

        user2 = User.objects.create_user(email='*****@*****.**',
                                         password='******',
                                         name='Ron Nummi',
                                         language='pl',
                                         family_id=family.id)
        user2.save()

        FamilyNewsLetterEvents.objects.all().delete()
        n1 = FamilyNewsLetterEvents(family_id=family.id,
                                    person_id=1,
                                    person_name='Mustapha Ibrahim',
                                    new_member=True)
        n1.save()

        rows = Email.objects._get_distinct_families_and_languages()

        self.assertEqual(2, len(rows))
Beispiel #5
0
    def test_create_single_language_emails(self):
        '''
        Tests that we create emails in batches for sections of families in their who share
        a first language
        '''
        from family_tree.models import Family
        family = Family()
        family.save()

        from custom_user.models import User
        User.objects.all().delete()
        user = User.objects.create_user(email='*****@*****.**',
                                        password='******',
                                        name='Fabio Testi',
                                        language='pl',
                                        family_id=family.id)
        user.is_confirmed = True
        user.save()

        user2 = User.objects.create_user(email='*****@*****.**',
                                         password='******',
                                         name='Ron Nummi',
                                         language='pl',
                                         family_id=family.id)
        user2.is_confirmed = True
        user2.save()

        Email.objects.all().delete()
        Email.objects._create_single_language_emails(
            'pl', family.id, "subject", "content's",
            "content's html")  #use ' to check injection errors

        self.assertEqual(2, Email.objects.all().count())
Beispiel #6
0
class FacialRecognitionTestCase(TestCase):  # pragma: no cover
    def setUp(self):

        self.family = Family()
        self.family.save()

    def test_create_model(self):

        array1 = [(1, 2), ('no', 'yes'), 'blah']
        array2 = [1, 2]
        obj1 = {
            'stuff': 'yes',
            'notstuff': 'no',
        }

        FaceModel.objects.create(family=self.family,
                                 fit_data_faces=pickle.dumps(array1),
                                 fit_data_person_ids=pickle.dumps(array2),
                                 n_neighbors=3,
                                 trained_knn_model=pickle.dumps(obj1))

        result = FaceModel.objects.get(family=self.family)
        self.assertEqual(array1, pickle.loads(result.fit_data_faces))
        self.assertEqual(array2, pickle.loads(result.fit_data_person_ids))
        self.assertEqual(obj1, pickle.loads(result.trained_knn_model))
    def setUp(self):
        '''
        Creates credientials as all views require login
        '''
        self.family = Family()
        self.family.save()

        self.user = User.objects.create_user(email='*****@*****.**', password='******', name='Prince Barin')
        self.user.save()

        self.person = Person(name='Prince Barin', gender='M', user_id = self.user.id, email='*****@*****.**', family_id=self.family.id, hierarchy_score=100)
        self.person.save()

        #http://flashgordon.wikia.com/wiki/Prince_Alan
        self.son = Person(name='Prince Alan', gender='M', family_id=self.family.id, hierarchy_score=-1)
        self.son.save()

        #http://flashgordon.wikia.com/wiki/King_Vultan
        self.vultan = Person(name='King Vultan', gender='M', family_id=self.family.id, hierarchy_score = 200)
        self.vultan.save()

        self.lura = Person(name='Lura', gender='F', family_id=self.family.id)
        self.lura.save()

        self.vultan_junior = Person(name='Vultan Junior', gender='M', family_id=self.family.id)
        self.vultan_junior.save()
Beispiel #8
0
    def test_create_emails(self):
        '''
        Tests that we create emails in batches for sections of families in their who share
        a first language
        '''
        from family_tree.models import Family
        family = Family()
        family.save()

        from custom_user.models import User
        User.objects.all().delete()
        user = User.objects.create_user(email='*****@*****.**', password='******', name='Fabio Testi', language='pl', family_id= family.id)
        user.is_confirmed = True
        user.save()

        user2 = User.objects.create_user(email='*****@*****.**', password='******', name='Ron Nummi', language='pl', family_id= family.id)
        user2.is_confirmed = True
        user2.save()

        FamilyNewsLetterEvents.objects.all().delete()
        n1 = FamilyNewsLetterEvents(family_id=family.id, person_id=1, person_name='Fabio Testi', new_member=True )
        n1.save()

        n2 = FamilyNewsLetterEvents(family_id=family.id, person_id=1, person_name='Ron Nummii', new_member=False )
        n2.save()

        Email.objects.all().delete()
        Email.objects._create_emails()



        self.assertEqual(2,Email.objects.all().count())
Beispiel #9
0
    def test_can_delete_account_and_profile(self):
        '''
        Test that a user can delete their account and their profile
        '''
        family = Family()
        family.save()

        user = User.objects.create_user(email='*****@*****.**',
                                        password='******',
                                        name='Andy Lau')
        Person.objects.create(name='Andy Lau',
                              gender='M',
                              family_id=family.id,
                              user_id=user.id)

        self.client.login(email='*****@*****.**',
                          password='******')
        self.client.post('/accounts/delete/', {
            'delete_profile': '1',
        })

        self.assertEqual(0, Person.objects.filter(name='Lau Fok Wing').count())
        self.assertEqual(
            0,
            User.objects.filter(email='*****@*****.**').count())
Beispiel #10
0
    def setUp(self):
        '''
        Set up a family, user and profile to test with
        '''

        self.family = Family()
        self.family.save()

        self.user = User.objects.create_user(email='*****@*****.**',
                                             password='******',
                                             name='Fairy Fellar',
                                             family_id=self.family.id)
        self.user.save()

        self.person = Person.objects.create(name='Fairy Fellar',
                                            gender='M',
                                            user_id=self.user.id,
                                            email='*****@*****.**',
                                            family_id=self.family.id)
        self.person.save()

        self.another_family = Family()
        self.another_family.save()
        self.another_user = User.objects.create_user(
            email='*****@*****.**',
            password="******",
            name='Dale Arden',
            family_id=self.another_family.id)
        self.another_user.save()

        self.image_path = os.path.join(BASE_DIR, 'tests/large_test_image.jpg')
    def setUp(self):
        '''
        Creates credientials as all views require login
        '''
        self.family = Family()
        self.family.save()

        self.user = User.objects.create_user(
            email='*****@*****.**',
            password='******',
            name='Adam Lambert',
            family_id=self.family.id)

        self.person1 = Person(name='Adam Lambert',
                              gender='M',
                              user_id=self.user.id,
                              email='*****@*****.**',
                              family_id=self.family.id,
                              latitude=39.768,
                              longitude=-86.158,
                              address='Indianapolis, Indiana')
        self.person1.save()

        self.person2 = Person(name='Paul Rodgers',
                              gender='M',
                              family_id=self.family.id,
                              latitude=54.574,
                              longitude=-1.235,
                              address='Middlesborough, UK')
        self.person2.save()
Beispiel #12
0
    def setUp(self):
        '''
        Set up a family, user and profile to test with
        '''

        self.family = Family()
        self.family.save()

        self.user = User.objects.create_user(email='*****@*****.**',
                                             password='******')
        self.user.save()

        self.person = Person.objects.create(name='Killer Queen',
                                            gender='F',
                                            user_id=self.user.id,
                                            email='*****@*****.**',
                                            family_id=self.family.id)
        self.person.save()

        self.person2 = Person.objects.create(name='Black Queen',
                                             gender='F',
                                             user_id=self.user.id,
                                             family_id=self.family.id)
        self.person2.save()

        self.another_family = Family()
        self.another_family.save()

        self.person3 = Person.objects.create(name='White Queen',
                                             gender='F',
                                             user_id=self.user.id,
                                             family_id=self.another_family.id)
        self.person3.save()
Beispiel #13
0
    def test_can_delete_account_without_deleting_profile(self):
        '''
        Test that a user can delete their account without deleting their profile
        '''
        family = Family()
        family.save()

        user = User.objects.create_user(email='*****@*****.**',
                                        password='******',
                                        name='Lau Fok Wing')
        Person.objects.create(name='Lau Fok Wing',
                              gender='M',
                              family_id=family.id,
                              user_id=user.id)

        self.client.login(email='*****@*****.**',
                          password='******')
        self.client.post('/accounts/delete/', {
            'delete_profile': '0',
        })

        self.assertEqual(1, Person.objects.filter(name='Lau Fok Wing').count())
        self.assertEqual(None, Person.objects.get(name='Lau Fok Wing').user_id)
        self.assertEqual(
            0,
            User.objects.filter(email='*****@*****.**').count())
Beispiel #14
0
    def setUp(self):
        '''
        Need to create a family and a gallery
        '''
        self.family = Family()
        self.family.save()

        self.gallery = Gallery.objects.create(title="test_gallery",
                                              family_id=self.family.id)

        clear_directory(settings.FACE_RECOG_TRAIN_TEST_DIR)

        self.test_image = os.path.join(
            settings.BASE_DIR, 'facial_recognition/tests/test_image_woman.jpg')
        self.test_image_destination = ''.join([
            settings.MEDIA_ROOT, 'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id), '/test_image.jpg'
        ])
        self.test_image_s3_key = ''.join([
            'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id), '/test_image.jpg'
        ])

        directory = ''.join([
            settings.MEDIA_ROOT, 'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id)
        ])
        if not os.path.exists(directory):
            os.makedirs(directory)

        #Copy test image to media area
        shutil.copy2(self.test_image, self.test_image_destination)

        self.image = Image(gallery=self.gallery,
                           family=self.family,
                           original_image=''.join([
                               'galleries/',
                               str(self.family.id), '/',
                               str(self.gallery.id), '/test_image.jpg'
                           ]))
        self.image.save()
        self.image.upload_files_to_s3()

        self.person = Person(name='Wallace',
                             gender='M',
                             email='*****@*****.**',
                             family_id=self.family.id,
                             language='en')
        self.person.save()

        self.tag = Tag.objects.create(image_id=self.image.id,
                                      x1=0.279,
                                      y1=0.188,
                                      x2=0.536,
                                      y2=0.381,
                                      person_id=self.person.id,
                                      face_detected=True)
Beispiel #15
0
    def test_create_news_letter_events_first_time(self):
        '''
        Tests that the correct news events are created
        '''
        #Flush database

        FamilyNewsLetterEvents.objects.all().delete()

        from family_tree.models import Person, Family
        family = Family()
        family.save()

        Person.objects.all().delete()

        p1 = Person.objects.create(name='Connor Macleod',
                                   gender='M',
                                   family_id=family.id)
        p1.save()
        p2 = Person.objects.create(name='The Kurgan',
                                   gender='M',
                                   family_id=family.id)
        p2.save()

        FamilyNewsLetterEvents.objects.create_news_letter_events()

        self.assertEqual(2, FamilyNewsLetterEvents.objects.count())
Beispiel #16
0
class TestGallery(TestCase):  # pragma: no cover
    '''
    Test class for the gallery object
    '''
    def setUp(self):
        '''
        Creates credientials as all views require login
        '''
        self.family = Family()
        self.family.save()

        self.user = User.objects.create_user(
            email='arif_mardin:@queenonline.com',
            password='******',
            name='Arif Mardin:',
            family_id=self.family.id)

        self.gallery = Gallery.objects.create(family_id=self.family.id,
                                              title="gallery")

        self.test_image = os.path.join(settings.BASE_DIR,
                                       'gallery/tests/test_image.jpg')
        self.test_image_destination = ''.join([
            settings.MEDIA_ROOT, 'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id), '/test_image.jpg'
        ])

        directory = ''.join([
            settings.MEDIA_ROOT, 'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id)
        ])
        if not os.path.exists(directory):
            os.makedirs(directory)

        #Copy test image to media area
        shutil.copy2(self.test_image, self.test_image_destination)

        self.images = []

        for i in range(0, 20):
            self.images.append(
                Image(gallery=self.gallery,
                      family=self.family,
                      original_image=self.test_image_destination,
                      thumbnail=self.test_image_destination,
                      large_thumbnail=self.test_image_destination))

    def test_delete_all_images(self):
        '''
        Tests we can delete all images associated with gallery
        '''

        self.gallery.delete_all_images()

        self.assertEqual(
            0,
            Image.objects.filter(gallery_id=self.gallery.id).count())
Beispiel #17
0
    def setUp(self):

        self.family = Family()
        self.family.save()

        self.user = User.objects.create_user(email='*****@*****.**', password='******', name='Zandra Rhodes', family_id=self.family.id)
        self.person = Person.objects.create(name='Tim Staffell', gender='M', family_id=self.family.id, language='en')
        self.client = HttpClient(HTTP_X_REAL_IP='127.0.0.1')
Beispiel #18
0
class MapServiceTestCase(TestCase):  # pragma: no cover
    '''
    This defines all the tests for the map service
    '''
    def setUp(self):

        self.family = Family()
        self.family.save()

    def test_get_snapped_location_for_a_person(self):
        '''
        Tests that the service snaps the location of a person to a grid
        '''

        person1 = Person(
            family_id=self.family.id,
            name="person1",
            latitude=1.2,
            longitude=4.3,
        )

        division_size = 1.0

        result = map_service.get_snapped_location(person1, division_size)

        self.assertEqual(1.5, result[0])
        self.assertEqual(4.5, result[1])

    def test_combines_multiple_people_near_to_each_other(self):
        '''
        Tests that the service combines two people that are close together
        '''
        person1 = Person(
            family_id=self.family.id,
            name="person1",
            latitude=7.2,
            longitude=12.3,
        )
        super(
            Person,
            person1).save()  # original save so does not overwrite the location

        person1 = Person(
            family_id=self.family.id,
            name="person1",
            latitude=7.3,
            longitude=12.5,
        )
        super(Person, person1).save(
        )  # original save so does not overwrite the the location

        division_size = 5

        result = map_service.get_person_location_points(
            self.family.id, division_size)

        self.assertEqual(True, '(7.5, 12.5)' in result)
        self.assertEqual(2, len(result['(7.5, 12.5)']))
Beispiel #19
0
    def setUp(self):
        '''
        Creates credientials as all views require login
        '''
        self.family = Family()
        self.family.save()
        self.user = User.objects.create_user(email='*****@*****.**', password='******', name='Bruce Lee' )
        self.person = Person.objects.create(name='Bruce Lee', gender='M', email='*****@*****.**', family_id=self.family.id, language='en', user_id=self.user.id)

        self.client = HttpClient(HTTP_X_REAL_IP='127.0.0.1')
    def setUp(self):
        '''
        Creates credientials as all views require login
        '''
        self.family = Family()
        self.family.save()

        self.user = User.objects.create_user(email='*****@*****.**',
                                             password='******',
                                             name='gromit',
                                             family_id=self.family.id)

        self.gallery = Gallery.objects.create(family_id=self.family.id,
                                              title="gallery")

        self.test_image = os.path.join(settings.BASE_DIR,
                                       'gallery/tests/test_image.jpg')
        self.test_image_destination = ''.join([
            settings.MEDIA_ROOT, 'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id), '/test_image.jpg'
        ])

        directory = ''.join([
            settings.MEDIA_ROOT, 'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id)
        ])
        if not os.path.exists(directory):
            os.makedirs(directory)

        #Copy test image to media area
        shutil.copy2(self.test_image, self.test_image_destination)

        self.images = []

        for i in range(0, 3):
            self.images.append(
                Image(gallery=self.gallery,
                      family=self.family,
                      title="title{0}".format(i),
                      original_image=self.test_image_destination,
                      thumbnail=self.test_image_destination,
                      large_thumbnail=self.test_image_destination,
                      latitude=i,
                      longitude=i))

        self.another_family = Family.objects.create()
        self.another_user = User.objects.create_user(
            email='*****@*****.**',
            password='******',
            name='shaun',
            family_id=self.another_family.id)
Beispiel #21
0
    def setUp(self):
        '''
        Creates credientials as all views require login
        '''
        self.family = Family()
        self.family.save()

        self.user = User.objects.create_user(
            email='*****@*****.**',
            password='******',
            name='White Queen',
            family_id=self.family.id)
        self.person = Person.objects.create(name='White Queen',
                                            family=self.family)
        self.person2 = Person.objects.create(name='Black Queen',
                                             family=self.family)

        self.gallery = Gallery.objects.create(family_id=self.family.id,
                                              title="gallery")

        self.test_image = os.path.join(settings.BASE_DIR,
                                       'gallery/tests/test_image.jpg')
        self.test_image_destination = ''.join([
            settings.MEDIA_ROOT, 'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id), '/test_image.jpg'
        ])

        directory = ''.join([
            settings.MEDIA_ROOT, 'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id)
        ])
        if not os.path.exists(directory):
            os.makedirs(directory)

        #Copy test image to media area
        shutil.copy2(self.test_image, self.test_image_destination)

        self.image = Image(gallery=self.gallery,
                           family=self.family,
                           original_image=self.test_image_destination,
                           thumbnail=self.test_image_destination,
                           large_thumbnail=self.test_image_destination)
        self.image.save()

        self.another_family = Family.objects.create()
        self.another_user = User.objects.create_user(
            email='*****@*****.**',
            password='******',
            name='Queen Of Hearts',
            family_id=self.another_family.id)
Beispiel #22
0
    def test_other_family_can_not_view_my_family_tree(self):
        '''
        Check people from different families cannot view each others profiles
        '''
        another_family = Family()
        another_family.save()

        user = User.objects.create_user(email='*****@*****.**', password='******', family_id = another_family.id)
        user.save()

        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/person={0}/'.format(self.person.id))
        self.assertEqual(response.status_code, 404)
Beispiel #23
0
class ImageTestCase(TestCase):
    '''
    Tests for the image class
    '''

    def setUp(self):
        '''
        Need to create a family and a gallery
        '''
        self.family = Family()
        self.family.save()

        self.gallery = Gallery.objects.create(title="test_gallery", family_id=self.family.id)

        self.test_image = os.path.join(settings.BASE_DIR, 'gallery/tests/test_image.jpg')
        self.test_image_destination = ''.join([settings.MEDIA_ROOT, 'galleries/', str(self.family.id), '/', str(self.gallery.id), '/test_image.jpg'])

        directory = ''.join([settings.MEDIA_ROOT, 'galleries/', str(self.family.id), '/', str(self.gallery.id)])
        if not os.path.exists(directory):
            os.makedirs(directory)

    def test_create_thumbnail(self):
        '''
        Tests that we can create a thumbnail
        '''
        #Copy test image to media area
        shutil.copy2(self.test_image, self.test_image_destination)

        image = Image(gallery=self.gallery, family=self.family, original_image=''.join(['galleries/', str(self.family.id), '/', str(self.gallery.id), '/test_image.jpg']))

        thumbnail = settings.MEDIA_ROOT + image._create_thumbnail((500,500))

        PIL.Image.open(thumbnail)

        #Clear up mess afterwards
        os.remove(self.test_image_destination)
        os.remove(thumbnail)


    def test_make_thumbnails(self):
        '''
        Tests themake thumbnails routine
        '''
        #Copy test image to media area
        shutil.copy2(self.test_image, self.test_image_destination)
        image = Image(gallery=self.gallery, family=self.family, original_image=self.test_image_destination)
        image.make_thumbnails()

        PIL.Image.open(settings.MEDIA_ROOT+ str(image.thumbnail))
        PIL.Image.open(settings.MEDIA_ROOT + str(image.large_thumbnail))
        PIL.Image.open(settings.MEDIA_ROOT +str(self.gallery.thumbnail))
Beispiel #24
0
    def setUp(self):
        '''
        Creates credientials as all views require login
        '''
        self.family = Family()
        self.family.save()

        self.user = User.objects.create_user(email='*****@*****.**', password='******', name='Delilah', family_id=self.family.id)

        #Create a load of galleries
        for i in range(1,20):
            Gallery.objects.create(family_id=self.family.id, title="title" + str(i))

        self.another_family = Family.objects.create()
        self.another_user = User.objects.create_user(email='*****@*****.**', password='******', name='mack', family_id=self.another_family.id)
Beispiel #25
0
    def test_other_family_can_not_view_my_family_tree(self):
        '''
        Check people from different families cannot view each others profiles
        '''
        another_family = Family()
        another_family.save()

        user = User.objects.create_user(email='*****@*****.**',
                                        password='******',
                                        family_id=another_family.id)
        user.save()

        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/person={0}/'.format(self.person.id))
        self.assertEqual(response.status_code, 404)
Beispiel #26
0
    def test_can_delete_account_and_profile(self):
        '''
        Test that a user can delete their account and their profile
        '''
        family = Family()
        family.save()

        user = User.objects.create_user(email='*****@*****.**', password='******', name='Andy Lau' )
        Person.objects.create(name='Andy Lau', gender='M', family_id=family.id, user_id = user.id)

        self.client.login(email='*****@*****.**', password='******')
        self.client.post('/accounts/delete/',{'delete_profile': '1',})

        self.assertEqual(0, Person.objects.filter(name='Lau Fok Wing').count())
        self.assertEqual(0, User.objects.filter(email='*****@*****.**').count())
Beispiel #27
0
    def setUp(self):
        '''
        Creates credientials as all views require login
        '''
        self.family = Family()
        self.family.save()


        user = User.objects.create_user(email='*****@*****.**', password='******', name='Roger Taylor')
        user.save()

        self.person = Person(name='Roger Taylor', gender='M', user_id = user.id, email='*****@*****.**', family_id=self.family.id)
        self.person.save()

        self.wife = Person.objects.create(name='wife', gender='F', hierarchy_score=100, family_id=self.family.id)
        self.wife_to_person = Relation.objects.create(from_person=self.wife, to_person=self.person, relation_type=PARTNERED)

        self.son = Person.objects.create(name='son', gender='M',hierarchy_score=101, family_id=self.family.id)
        self.person_to_son = Relation.objects.create(from_person=self.person, to_person=self.son, relation_type=RAISED)

        self.daughter = Person.objects.create(name='daughter', gender='F',hierarchy_score=101, family_id=self.family.id)
        self.person_to_daughter = Relation.objects.create(from_person=self.person, to_person=self.daughter, relation_type=RAISED)

        self.mum = Person.objects.create(name='mum', gender='F', hierarchy_score=99, family_id=self.family.id)
        self.mum_to_person = Relation.objects.create(from_person=self.mum, to_person=self.person, relation_type=RAISED)

        self.dad = Person.objects.create(name='dad', gender='M', hierarchy_score=99, family_id=self.family.id)
        self.dad_to_person = Relation.objects.create(from_person=self.dad, to_person=self.person, relation_type=RAISED)

        self.grandma = Person.objects.create(name='grandma', gender='F', hierarchy_score=98, family_id=self.family.id)
        self.grandma_to_mum = Relation.objects.create(from_person=self.grandma, to_person=self.mum, relation_type=RAISED)

        self.grandson = Person.objects.create(name='grandson', gender='M', hierarchy_score=102, family_id=self.family.id)
        self.son_to_grandson = Relation.objects.create(from_person=self.son, to_person=self.grandson, relation_type=RAISED)
Beispiel #28
0
    def test_can_delete_account_without_deleting_profile(self):
        '''
        Test that a user can delete their account without deleting their profile
        '''
        family = Family()
        family.save()

        user = User.objects.create_user(email='*****@*****.**', password='******', name='Lau Fok Wing' )
        Person.objects.create(name='Lau Fok Wing', gender='M', family_id=family.id, user_id = user.id)

        self.client.login(email='*****@*****.**', password='******')
        self.client.post('/accounts/delete/',{'delete_profile': '0',})

        self.assertEqual(1, Person.objects.filter(name='Lau Fok Wing').count())
        self.assertEqual(None, Person.objects.get(name='Lau Fok Wing').user_id)
        self.assertEqual(0, User.objects.filter(email='*****@*****.**').count())
class TagTestCase(TestCase): # pragma: no cover
    '''
    Tests for the image class
    '''

    def setUp(self):
        '''
        Need to create a family and a gallery and image
        '''
        self.family = Family()
        self.family.save()

        self.person = Person(name='Wallace', gender='M', email='*****@*****.**', family_id=self.family.id, language='en')
        self.person.save()

        self.gallery = Gallery.objects.create(title="test_gallery", family_id=self.family.id)

        self.test_image = os.path.join(settings.BASE_DIR, 'gallery/tests/test_image.jpg')
        self.test_image_destination = ''.join([settings.MEDIA_ROOT, 'galleries/', str(self.family.id), '/', str(self.gallery.id), '/test_image.jpg'])

        directory = ''.join([settings.MEDIA_ROOT, 'galleries/', str(self.family.id), '/', str(self.gallery.id)])
        if not os.path.exists(directory):
            os.makedirs(directory)

        #Copy test image to media area
        shutil.copy2(self.test_image, self.test_image_destination)

        self.image = Image(gallery=self.gallery, family=self.family, original_image=''.join(['galleries/', str(self.family.id), '/', str(self.gallery.id), '/test_image.jpg']))
        self.image.save()


    def test_rotate_tag(self):
        '''
        Tests that we can rotate a tag correctly
        '''
        tag = Tag.objects.create(image_id=self.image.id, x1=0.1, y1=0.2, x2=0.3, y2=0.4, person_id=self.person.id)
        tag.rotate(90)

        #print(tag.x1)
        self.assertTrue(abs(0.2 - tag.x1) < 0.0001)
        #print(tag.y1)
        self.assertTrue(abs(0.7 - tag.y1) < 0.0001)
        #print(tag.x2)
        self.assertTrue(abs(0.4 - tag.x2) < 0.0001)
        #print(tag.y2)
        self.assertTrue(abs(0.9 - tag.y2) < 0.0001)
Beispiel #30
0
    def setUp(self):
        '''
        Set up a family, user and profile to test with
        '''

        self.family = Family()
        self.family.save()

        self.user = User.objects.create_user(email='*****@*****.**', password='******', name='Fairy Fellar')
        self.user.save()

        self.person = Person.objects.create(name='Fairy Fellar', gender='M', user_id=self.user.id, email='*****@*****.**', family_id=self.family.id)
        self.person.save()

        self.another_family = Family()
        self.another_family.save()
        self.another_user = User.objects.create_user(email='*****@*****.**', password="******", name='Dale Arden', family_id=self.another_family.id)
        self.another_user.save()
Beispiel #31
0
    def setUp(self):
        '''
        Need to create a family and a gallery and image
        '''
        self.family = Family()
        self.family.save()

        self.person = Person(name='Wallace',
                             gender='M',
                             email='*****@*****.**',
                             family_id=self.family.id,
                             language='en')
        self.person.save()

        self.gallery = Gallery.objects.create(title="test_gallery",
                                              family_id=self.family.id)

        self.test_image = os.path.join(settings.BASE_DIR,
                                       'gallery/tests/test_image.jpg')
        self.test_image_destination = ''.join([
            settings.MEDIA_ROOT, 'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id), '/test_image.jpg'
        ])

        directory = ''.join([
            settings.MEDIA_ROOT, 'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id)
        ])
        if not os.path.exists(directory):
            os.makedirs(directory)

        #Copy test image to media area
        shutil.copy2(self.test_image, self.test_image_destination)

        self.image = Image(gallery=self.gallery,
                           family=self.family,
                           original_image=''.join([
                               'galleries/',
                               str(self.family.id), '/',
                               str(self.gallery.id), '/test_image.jpg'
                           ]))
        self.image.save()
Beispiel #32
0
    def test_create_emails(self):
        '''
        Tests that we create emails in batches for sections of families in their who share
        a first language
        '''
        from family_tree.models import Family
        family = Family()
        family.save()

        from custom_user.models import User
        User.objects.all().delete()
        user = User.objects.create_user(email='*****@*****.**',
                                        password='******',
                                        name='Fabio Testi',
                                        language='pl',
                                        family_id=family.id)
        user.is_confirmed = True
        user.save()

        user2 = User.objects.create_user(email='*****@*****.**',
                                         password='******',
                                         name='Ron Nummi',
                                         language='pl',
                                         family_id=family.id)
        user2.is_confirmed = True
        user2.save()

        FamilyNewsLetterEvents.objects.all().delete()
        n1 = FamilyNewsLetterEvents(family_id=family.id,
                                    person_id=1,
                                    person_name='Fabio Testi',
                                    new_member=True)
        n1.save()

        n2 = FamilyNewsLetterEvents(family_id=family.id,
                                    person_id=1,
                                    person_name='Ron Nummii',
                                    new_member=False)
        n2.save()

        Email.objects.all().delete()
        Email.objects._create_emails()

        self.assertEqual(2, Email.objects.all().count())
Beispiel #33
0
    def setUp(self):

        self.family = Family()
        self.family.save()

        self.user = User.objects.create_user(email='*****@*****.**',
                                        password='******',
                                        name='Ada Lovelace',
                                        family = self.family)

        self.person = Person(name='Ada Lovelace',
                        gender='F',
                        email='*****@*****.**',
                        family_id=self.family.id,
                        language='en',
                        user_id=self.user.id)
        self.person.save()

        self.another_person = Person(name='Another Person',
                        gender='F',
                        email='*****@*****.**',
                        family_id=self.family.id,
                        language='en')
        self.another_person.save()

        self.family2 = Family()
        self.family2.save()

        self.user2 = User.objects.create_user(email='*****@*****.**',
                                        password='******',
                                        name='Evil Lovelace',
                                        family = self.family2)

        self.person2 = Person(name='Evil Lovelace',
                        gender='M',
                        email='*****@*****.**',
                        family_id=self.family2.id,
                        language='en',
                        user_id=self.user2.id)
        self.person2.save()

        super(PersonApiTestCase, self).setUp()
Beispiel #34
0
    def test_create_news_letter_events_first_time(self):
        '''
        Tests that the correct news events are created
        '''
        #Flush database

        FamilyNewsLetterEvents.objects.all().delete()

        from family_tree.models import Person, Family
        family = Family()
        family.save()

        Person.objects.all().delete()

        p1 = Person.objects.create(name='Connor Macleod', gender='M',family_id=family.id)
        p1.save()
        p2 = Person.objects.create(name='The Kurgan', gender='M',family_id=family.id)
        p2.save()

        FamilyNewsLetterEvents.objects.create_news_letter_events()

        self.assertEqual(2,FamilyNewsLetterEvents.objects.count())
Beispiel #35
0
    def test_get_distinct_families_and_languages(self):
        '''
        Tests that we get the languages and families involved in the newsletters
        '''
        from family_tree.models import Family
        family = Family()
        family.save()

        from custom_user.models import User
        user = User.objects.create_user(email='*****@*****.**', password='******', name='Fabio Testi', language='en', family_id= family.id)
        user.save()

        user2 = User.objects.create_user(email='*****@*****.**', password='******', name='Ron Nummi', language='pl', family_id= family.id)
        user2.save()

        FamilyNewsLetterEvents.objects.all().delete()
        n1 = FamilyNewsLetterEvents(family_id=family.id, person_id=1, person_name='Mustapha Ibrahim', new_member=True )
        n1.save()

        rows = Email.objects._get_distinct_families_and_languages()

        self.assertEqual(2,len(rows))
Beispiel #36
0
    def test_create_single_language_emails(self):
        '''
        Tests that we create emails in batches for sections of families in their who share
        a first language
        '''
        from family_tree.models import Family
        family = Family()
        family.save()

        from custom_user.models import User
        User.objects.all().delete()
        user = User.objects.create_user(email='*****@*****.**', password='******', name='Fabio Testi', language='pl', family_id= family.id)
        user.is_confirmed = True
        user.save()

        user2 = User.objects.create_user(email='*****@*****.**', password='******', name='Ron Nummi', language='pl', family_id= family.id)
        user2.is_confirmed = True
        user2.save()

        Email.objects.all().delete()
        Email.objects._create_single_language_emails('pl', family.id, "subject", "content's","content's html") #use ' to check injection errors


        self.assertEqual(2,Email.objects.all().count())
Beispiel #37
0
    def setUp(self):
        '''
        Need to create a family and a gallery
        '''
        self.family = Family()
        self.family.save()

        self.gallery = Gallery.objects.create(title="test_gallery", family_id=self.family.id)

        self.test_image = os.path.join(settings.BASE_DIR, 'gallery/tests/test_image.jpg')
        self.test_image_destination = ''.join([settings.MEDIA_ROOT, 'galleries/', str(self.family.id), '/', str(self.gallery.id), '/test_image.jpg'])

        directory = ''.join([settings.MEDIA_ROOT, 'galleries/', str(self.family.id), '/', str(self.gallery.id)])
        if not os.path.exists(directory):
            os.makedirs(directory)
Beispiel #38
0
    def setUp(self):

        self.family = Family()
        self.family.save()

        self.user = User.objects.create_user(email='*****@*****.**',
                                             password='******',
                                             name='user',
                                             family=self.family)

        self.user2 = User.objects.create_user(email='*****@*****.**',
                                              password='******',
                                              name='user2',
                                              family=self.family)

        self.family2 = Family()
        self.family2.save()

        self.user3 = User.objects.create_user(email='*****@*****.**',
                                              password='******',
                                              name='user3',
                                              family=self.family2)

        super(UserApiTestCase, self).setUp()
Beispiel #39
0
    def setUp(self):
        '''
        Creates credientials as all views require login
        '''
        self.family = Family()
        self.family.save()


        self.user = User.objects.create_user(email='*****@*****.**', password='******', name='Adam Lambert', family_id=self.family.id)


        self.person1 = Person(name='Adam Lambert', gender='M', user_id = self.user.id, email='*****@*****.**'
                                    , family_id=self.family.id, latitude = 39.768, longitude = -86.158, address = 'Indianapolis, Indiana')
        self.person1.save()

        self.person2 = Person(name='Paul Rodgers', gender='M', family_id=self.family.id, latitude = 54.574, longitude = -1.235, address = 'Middlesborough, UK')
        self.person2.save()
    def setUp(self):
        '''
        Creates credientials as all views require login
        '''
        self.family = Family()
        self.family.save()

        self.user = User.objects.create_user(email='*****@*****.**', password='******', name='Prince Barin')
        self.user.save()

        self.person = Person(name='Prince Barin', gender='M', user_id = self.user.id, email='*****@*****.**', family_id=self.family.id, hierarchy_score=100)
        self.person.save()

        #http://flashgordon.wikia.com/wiki/Prince_Barin
        self.son = Person(name='Prince Alan', gender='M', family_id=self.family.id)
        self.son.save()

        #http://flashgordon.wikia.com/wiki/King_Vultan
        self.vultan = Person(name='King Vultan', gender='M', family_id=self.family.id)
        self.vultan.save()

        self.lura = Person(name='Lura', gender='F', family_id=self.family.id)
        self.lura.save()
class TestGalleryMapViews(TestCase):  # pragma: no cover
    '''
    Test class for the gallery views
    '''
    def setUp(self):
        '''
        Creates credientials as all views require login
        '''
        self.family = Family()
        self.family.save()

        self.user = User.objects.create_user(email='*****@*****.**',
                                             password='******',
                                             name='gromit',
                                             family_id=self.family.id)

        self.gallery = Gallery.objects.create(family_id=self.family.id,
                                              title="gallery")

        self.test_image = os.path.join(settings.BASE_DIR,
                                       'gallery/tests/test_image.jpg')
        self.test_image_destination = ''.join([
            settings.MEDIA_ROOT, 'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id), '/test_image.jpg'
        ])

        directory = ''.join([
            settings.MEDIA_ROOT, 'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id)
        ])
        if not os.path.exists(directory):
            os.makedirs(directory)

        #Copy test image to media area
        shutil.copy2(self.test_image, self.test_image_destination)

        self.images = []

        for i in range(0, 3):
            self.images.append(
                Image(gallery=self.gallery,
                      family=self.family,
                      title="title{0}".format(i),
                      original_image=self.test_image_destination,
                      thumbnail=self.test_image_destination,
                      large_thumbnail=self.test_image_destination,
                      latitude=i,
                      longitude=i))

        self.another_family = Family.objects.create()
        self.another_user = User.objects.create_user(
            email='*****@*****.**',
            password='******',
            name='shaun',
            family_id=self.another_family.id)

    def test_gallery_map_loads(self):
        '''
        Tests the gallery map view loads and uses the correct template
        '''

        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/gallery={0}/map/'.format(self.gallery.id))

        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, 'gallery/gallery_map.html')

    def test_gallery_map_does_not_load_for_another_family(self):
        '''
        Tests gallery does not load for another family
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/gallery={0}/map/'.format(self.gallery.id))

        self.assertEqual(response.status_code, 404)

    def test_gallery_map_data_does_not_load_another_family(self):
        '''
        Tests gallery data does not load for another family
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/gallery={0}/map_data/1.0/'.format(
            self.gallery.id))

        self.assertEqual(response.status_code, 404)

    def test_gallery_map_data_loads(self):
        '''
        Tests gallery data loads
        '''
        for i in self.images:
            i.save()

        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/gallery={0}/map_data/1.0/'.format(
            self.gallery.id))

        self.assertEqual(response.status_code, 200)
        self.assertEqual(True, b'title' in response.content)
Beispiel #42
0
class ProfileImageApiTestCase(TestCase):
    def setUp(self):
        '''
        Set up a family, user and profile to test with
        '''

        self.family = Family()
        self.family.save()

        self.user = User.objects.create_user(email='*****@*****.**',
                                             password='******',
                                             name='Fairy Fellar',
                                             family_id=self.family.id)
        self.user.save()

        self.person = Person.objects.create(name='Fairy Fellar',
                                            gender='M',
                                            user_id=self.user.id,
                                            email='*****@*****.**',
                                            family_id=self.family.id)
        self.person.save()

        self.another_family = Family()
        self.another_family.save()
        self.another_user = User.objects.create_user(
            email='*****@*****.**',
            password="******",
            name='Dale Arden',
            family_id=self.another_family.id)
        self.another_user.save()

        self.image_path = os.path.join(BASE_DIR, 'tests/large_test_image.jpg')

    def test_image_upload_successful(self):
        '''
        test that we can upload a file
        '''
        client = APIClient(HTTP_X_REAL_IP='127.0.0.1')
        client.force_authenticate(user=self.user)

        url = '/api/profile_image/{0}/'.format(self.person.id)
        with open(self.image_path, 'rb') as fp:

            data = {
                'picture': fp,
                'x': 100,
                'y': 200,
                'w': 300,
                'h': 300,
                'r': 90,
            }

            response = client.put(url, data)

        self.assertEqual(200, response.status_code)

        # Clear up remote images
        person = Person.objects.get(id=self.person.id)
        json.loads(response.content)

        person.remove_local_images()
        person.remove_remote_images()

    def test_image_upload_without_authentication(self):
        client = APIClient(HTTP_X_REAL_IP='127.0.0.1')
        url = '/api/profile_image/{0}/'.format(self.person.id)

        with open(self.image_path, 'rb') as fp:

            data = {
                'picture': fp,
                'x': 100,
                'y': 200,
                'w': 300,
                'h': 300,
                'r': 90,
            }

            response = client.put(url, data)

        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
        json.loads(response.content)

    def test_image_upload_other_family(self):
        '''
        test that we can upload a file
        '''
        client = APIClient(HTTP_X_REAL_IP='127.0.0.1')
        client.force_authenticate(user=self.another_user)

        url = '/api/profile_image/{0}/'.format(self.person.id)
        with open(self.image_path, 'rb') as fp:

            data = {
                'picture': fp,
                'x': 100,
                'y': 200,
                'w': 300,
                'h': 300,
                'r': 90,
            }

            response = client.put(url, data)

        self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
        json.loads(response.content)

    def test_image_upload_invalid_parameter(self):

        client = APIClient(HTTP_X_REAL_IP='127.0.0.1')
        client.force_authenticate(user=self.user)
        url = '/api/profile_image/{0}/'.format(self.person.id)

        with open(self.image_path, 'rb') as fp:

            data = {
                'picture': fp,
                'x': 'blah',
                'y': 200,
                'w': 300,
                'h': 300,
                'r': 90,
            }

            response = client.put(url, data)

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        json.loads(response.content)

    def test_image_upload_invalid_picture(self):

        client = APIClient(HTTP_X_REAL_IP='127.0.0.1')
        client.force_authenticate(user=self.user)
        url = '/api/profile_image/{0}/'.format(self.person.id)

        image_path = os.path.join(BASE_DIR,
                                  'tests/test_not_a_real_picture.png')

        with open(image_path, 'rb') as fp:

            data = {
                'picture': fp,
                'x': 100,
                'y': 200,
                'w': 300,
                'h': 300,
                'r': 90,
            }

            response = client.put(url, data)

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        json.loads(response.content)
Beispiel #43
0
class TestMapViews(TestCase):

    def setUp(self):
        '''
        Creates credientials as all views require login
        '''
        self.family = Family()
        self.family.save()


        self.user = User.objects.create_user(email='*****@*****.**', password='******', name='Adam Lambert', family_id=self.family.id)


        self.person1 = Person(name='Adam Lambert', gender='M', user_id = self.user.id, email='*****@*****.**'
                                    , family_id=self.family.id, latitude = 39.768, longitude = -86.158, address = 'Indianapolis, Indiana')
        self.person1.save()

        self.person2 = Person(name='Paul Rodgers', gender='M', family_id=self.family.id, latitude = 54.574, longitude = -1.235, address = 'Middlesborough, UK')
        self.person2.save()



    def test_map_view_loads(self):
        '''
        Tests that the users home screen loads and uses the correct template
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/map/')
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, 'family_tree/open_street_map.html')

        self.assertTrue(b'Paul Rodgers' in response.content)

        self.assertTrue(b'54.574' in response.content)
        self.assertTrue(b'-1.235' in response.content)

        self.assertTrue(b'Adam Lambert' in response.content)
        self.assertTrue(b'39.768' in response.content)
        self.assertTrue(b'-86.158' in response.content)





    def test_map_with_person_args_view_loads(self):
        '''
        Tests that the users home screen loads and uses the correct template
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/map={0}/'.format(self.person2.id))
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, 'family_tree/open_street_map.html')

        self.assertTrue(b'Paul Rodgers' in response.content)

        self.assertTrue(b'54.574' in response.content)
        self.assertTrue(b'-1.235' in response.content)

        self.assertTrue(b'Adam Lambert' in response.content)
        self.assertTrue(b'39.768' in response.content)
        self.assertTrue(b'-86.158' in response.content)



    def test_map_view_loads_in_polish(self):
        '''
        This is to check a bug where coordinates were formatted to have commas instead of decimal points
        when language set to Polish
        '''

        #Create a Polish user
        user = User.objects.create_user(email='*****@*****.**', password='******', name='Szajka', family_id=self.family.id, language='pl')
        self.client.login(email='*****@*****.**', password='******')
        Person.objects.create(name='Szajka', gender='M', user_id = user.id, email='*****@*****.**', family_id=self.family.id, language='pl')
        from django.utils import translation
        translation.activate('pl')

        response = self.client.get('/map={0}/'.format(self.person2.id))

        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, 'family_tree/open_street_map.html')

        self.assertTrue(b'Paul Rodgers' in response.content)

        self.assertTrue(b'54.574' in response.content)
        self.assertTrue(b'-1.235' in response.content)

        self.assertTrue(b'Adam Lambert' in response.content)
        self.assertTrue(b'39.768' in response.content)
        self.assertTrue(b'-86.158' in response.content)
class PersonDeletedUpdateFaceModelTest(TestCase):  # pragma: no cover
    def setUp(self):
        '''
        Need to create a family and a gallery
        '''
        self.family = Family()
        self.family.save()

        self.gallery = Gallery.objects.create(title="test_gallery",
                                              family_id=self.family.id)

        clear_directory(settings.FACE_RECOG_TRAIN_TEST_DIR)

        self.test_image = os.path.join(
            settings.BASE_DIR, 'facial_recognition/tests/test_image_woman.jpg')
        self.test_image_destination = ''.join([
            settings.MEDIA_ROOT, 'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id), '/test_image.jpg'
        ])
        self.test_image_s3_key = ''.join([
            'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id), '/test_image.jpg'
        ])

        directory = ''.join([
            settings.MEDIA_ROOT, 'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id)
        ])
        if not os.path.exists(directory):
            os.makedirs(directory)

        #Copy test image to media area
        shutil.copy2(self.test_image, self.test_image_destination)

        self.image = Image(gallery=self.gallery,
                           family=self.family,
                           original_image=''.join([
                               'galleries/',
                               str(self.family.id), '/',
                               str(self.gallery.id), '/test_image.jpg'
                           ]))
        self.image.save()
        self.image.upload_files_to_s3()

        self.person = Person(name='Wallace',
                             gender='M',
                             email='*****@*****.**',
                             family_id=self.family.id,
                             language='en')
        self.person.save()

        self.tag = Tag.objects.create(image_id=self.image.id,
                                      x1=0.279,
                                      y1=0.188,
                                      x2=0.536,
                                      y2=0.381,
                                      person_id=self.person.id,
                                      face_detected=True)

        # Upload new image
        self.test_image2 = os.path.join(
            settings.BASE_DIR,
            'facial_recognition/tests/test_image_woman_and_baby.jpg')
        self.test_image2_image_destination = ''.join([
            settings.MEDIA_ROOT, 'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id), '/test_image_woman_and_baby.jpg'
        ])

        # Copy to test area
        shutil.copy2(self.test_image2, self.test_image2_image_destination)

        self.image2 = Image(gallery=self.gallery,
                            family=self.family,
                            original_image=''.join([
                                'galleries/',
                                str(self.family.id), '/',
                                str(self.gallery.id),
                                '/test_image_woman_and_baby.jpg'
                            ]))
        self.image2.save()
        self.image2.upload_files_to_s3()

        self.person2 = Person(name='Gromit',
                              gender='M',
                              email='*****@*****.**',
                              family_id=self.family.id,
                              language='en')
        self.person2.save()

        self.tag2 = Tag.objects.create(image_id=self.image2.id,
                                       x1=0.312,
                                       y1=0.239,
                                       x2=0.732,
                                       y2=0.811,
                                       person_id=self.person2.id,
                                       face_detected=True)

        # Create a trained model
        process_family(self.family.id)

    def test_update_family_model(self):
        data = {'family_id': self.family.id, 'person_id': self.person.id}

        update_family_model(self.family.id, [data])
        face_model = FaceModel.objects.filter(family_id=self.family.id).first()

        X = pickle.loads(face_model.fit_data_faces)

        self.assertEqual(1, len(X))

    def test_person_deleted_update_face_model(self):

        person_deleted_update_face_model_id = Queue.objects.get(
            name='person_deleted_update_face_model').id

        data = {'family_id': self.family.id, 'person_id': self.person.id}

        message_encoded = json.dumps(data)

        message = Message.objects.create(
            queue_id=person_deleted_update_face_model_id,
            string_data=message_encoded)

        person_deleted_update_face_model([message])
        face_model = FaceModel.objects.filter(family_id=self.family.id).first()

        X = pickle.loads(face_model.fit_data_faces)

        self.assertEqual(1, len(X))
Beispiel #45
0
class TestProfileViews(TestCase):

    def setUp(self):
        '''
        Creates credientials as all views require login
        '''
        self.family = Family()
        self.family.save()

        self.user = User.objects.create_user(email='*****@*****.**', password='******', name='John Deacon', family_id=self.family.id)
        self.user.is_confirmed = True
        self.user.save()

        self.person = Person.objects.create(name='John Deacon', gender='M', user_id=self.user.id, email='*****@*****.**', family_id=self.family.id)
        self.person.save()

        self.biography = Biography(person_id=self.person.id, language='en', content='')
        self.biography.save()

        self.user2 = User.objects.create_user(email='*****@*****.**', password='******', name='Freddie Mercury', family_id=self.family.id)
        self.user2.save()

        self.person2 = Person.objects.create(name='Freddie Mercury', gender='M', user_id=self.user2.id, locked=True, email='*****@*****.**', family_id=self.family.id)
        self.person2.save()

        self.another_family = Family()
        self.another_family.save()
        self.another_user = User.objects.create_user(email='*****@*****.**', password="******", name='Prince Vultan', family_id=self.another_family.id)
        self.another_user.save()

        self.confirmed_user = User.objects.create_user(email='*****@*****.**', password='******', name='General Kala', family_id=self.family.id)
        self.confirmed_user.is_confirmed = True
        self.confirmed_user.save()

        self.confirmed_person = Person.objects.create(name='General Kala', gender='F', user_id=self.confirmed_user.id, locked=False, email='*****@*****.**', family_id=self.family.id)
        self.confirmed_person.save()


    def test_home_profile_loads(self):
        '''
        Tests that the users home screen loads and uses the correct template
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/profile={0}/'.format(self.person.id))
        self.assertEqual(200, response.status_code)
        self.assertTemplateUsed(response, 'family_tree/profile.html')


    def test_home_profile_not_visible_for_other_family(self):
        '''
        Test that people in different families cannot see profile
        '''
        self.client.login(email='*****@*****.**', password="******")
        response = self.client.get('/profile={0}/'.format(self.person.id))
        self.assertEqual(404, response.status_code)


    def test_edit_profile_loads(self):
        '''
        Tests that the edit profile view loads and uses the correct template
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/edit_profile={0}/'.format(self.person.id))
        self.assertEqual(200, response.status_code)
        self.assertTemplateUsed(response, 'family_tree/edit_profile.html')


    def test_edit_profile_not_visible_for_other_family(self):
        '''
        Test that people in different families cannot see profile
        '''
        self.client.login(email='*****@*****.**', password="******")
        response = self.client.get('/edit_profile={0}/'.format(self.person.id))
        self.assertEqual(404, response.status_code)


    def test_update_person_denies_get_requests(self):
        '''
        Tests that get requests are not allowed
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/update_person={0}/'.format(self.person2.id))
        self.assertEqual(405, response.status_code)
        self.assertEqual(b"Only POST requests allowed", response.content)


    def test_update_person_denied_with_invalid_person_id(self):
        '''
        Tests that an invalid response is sent when trying to change a person that does not exist
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.post('/update_person=204/', {'pk': 204, 'name': 'name', 'value': 'new name'})
        self.assertEqual(404, response.status_code)


    def test_update_person_denied_with_locked_profile(self):
        '''
        Tests that an invalid response is sent when trying to change a persons profile that is locked
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.post('/update_person={0}/'.format(self.person2.id), {'pk': self.person2.id, 'name': 'name', 'value': 'new name'})
        self.assertEqual(405, response.status_code)
        self.assertEqual(b"Access denied to locked profile", response.content)

    def test_cannot_update_family_id_through_api(self):
        '''
        Test cannot update non-whitelisted properties through api
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.post('/update_person={0}/'.format(self.person2.id), {'pk': self.person2.id, 'name': 'family_id', 'value': self.family.id})
        self.assertEqual(405, response.status_code)
        self.assertEqual(b"Access denied to locked profile", response.content)

    def test_update_person_can_update_name(self):
        '''
        Tests that a field can be updated through api
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.post('/update_person={0}/'.format(self.person.id), {'pk': self.person.id, 'name': 'name', 'value': 'Brian Harold May'})
        self.assertEqual(200, response.status_code)
        self.person = Person.objects.get(id=self.person.id)
        self.assertEqual("Brian Harold May", self.person.name)

    def test_update_email_saves_to_lowercase(self):
        '''
        Tests that email field can be updated through api and is always saved as
        lower case
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.post('/update_person={0}/'.format(self.person.id), {'pk': self.person.id, 'name': 'email', 'value': '*****@*****.**'})
        self.assertEqual(200, response.status_code)
        self.person = Person.objects.get(id=self.person.id)
        self.assertEqual("*****@*****.**", self.person.email)


    def test_another_family_cannot_update_person_name(self):
        '''
        Tests that a field can be updated through api
        '''
        self.client.login(email='*****@*****.**', password="******")
        response = self.client.post('/update_person={0}/'.format(self.person.id), {'pk': self.person.id, 'name': 'name', 'value': 'Brian Harold May'})
        self.assertEqual(404, response.status_code)


    def test_update_person_another_user_can_update_nonlocked_profile(self):
        '''
        Tests that a person field can be updated through api by a user who is not that person
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.post('/update_person={0}/'.format(self.person.id), {'pk': self.person.id, 'name': 'name', 'value': 'John Richard Deacon'})
        self.assertEqual(200, response.status_code)
        self.person = Person.objects.get(id=self.person.id)
        self.assertEqual("John Richard Deacon", self.person.name)



    def test_update_person_can_update_boolean(self):
        '''
        Tests that a boolean field can be updated through api
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.post('/update_person={0}/'.format(self.person.id), {'pk': self.person.id, 'name': 'locked', 'value': '1'})
        self.assertEqual(200, response.status_code)
        self.person = Person.objects.get(id=self.person.id)
        self.assertEqual(True, self.person.locked)

        response = self.client.post('/update_person={0}/'.format(self.person.id), {'pk': self.person.id, 'name': 'locked', 'value': ''})
        self.assertEqual(200, response.status_code)
        self.person = Person.objects.get(id=self.person.id)
        self.assertEqual(False, self.person.locked)

    def test_update_person_cannot_update_email_with_confirmed_user(self):
        '''
        Tests that an invalid response is sent when trying to change a persons profile that is attached
        to a confirmed user
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.post('/update_person={0}/'.format(self.confirmed_person.id), {'pk': self.confirmed_person.id, 'name': 'email', 'value': '*****@*****.**'})
        self.assertEqual(405, response.status_code)
        self.assertEqual(b"Access denied to change confirmed user settings", response.content)


    def test_update_biography_denied_with_invalid_person_id(self):
        '''
        Tests that an invalid response is sent when trying to change a person that does not exist
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.post('/update_biography=999/ln=en/', {'biography': 'new content'})
        self.assertEqual(404, response.status_code)

    def test_update_biography_denied_with_locked_profile(self):
        '''
        Tests that an invalid response is sent when trying to change the biography of a locked profile
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.post('/update_biography={0}/ln=en/'.format(self.person2.id), {'biography': 'new content'})
        self.assertEqual(405, response.status_code)
        self.assertEqual(b"Access denied to locked profile", response.content)


    def test_update_biography_can_update_existing_biography(self):
        '''
        Tests that biography content can be updated through api when a biography already exists
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.post('/update_biography={0}/ln=en/'.format(self.person.id), {'biography': 'new content'})
        self.assertEqual(200, response.status_code)
        self.biography = Biography.objects.get(person_id=self.person.id, language='en')
        self.assertEqual('new content', self.biography.content)

    def test_another_family_cannot_update_biography(self):
        '''
        Tests that a field can be updated through api
        '''
        self.client.login(email='*****@*****.**', password="******")
        response = self.client.post('/update_biography={0}/ln=en/'.format(self.person.id), {'biography': 'new content'})
        self.assertEqual(404, response.status_code)


    def test_update_biography_can_create_new_biography(self):
        '''
        Tests that biography content can be updated through api when a biography already exists
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.post('/update_biography={0}/ln=en/'.format(self.person2.id), {'biography': 'new content'})
        self.assertEqual(200, response.status_code)
        biography = Biography.objects.get(person_id=self.person2.id, language='en')
        self.assertEqual('new content', biography.content)

    def test_cannot_delete_profile_of_a_confirmed_user(self):
        '''
        Make sure that you cannot delete the profile of someone who is a user
        '''
        self.client.login(email='*****@*****.**', password='******')

        response = self.client.get('/delete={0}/'.format(self.person.id))


        self.assertEqual(405, response.status_code)

        #Check it exists
        person = Person.objects.get(id=self.person.id)
        self.assertEqual(self.person.id, person.id)


    def test_cannot_delete_profile(self):
        '''
        Make sure that you cannot delete the profile of someone who is a user
        '''
        person = Person.objects.create(name='David Tennant', gender='M', family_id=self.family.id)
        person.save()

        self.client.login(email='*****@*****.**', password='******')

        response = self.client.get('/delete={0}/'.format(person.id))

        self.assertEqual(302, response.status_code)

        #Check it has been deleted
        self.assertEqual(0, Person.objects.filter(id = person.id).count())
class TestRelationViews(TestCase):

    def setUp(self):
        '''
        Creates credientials as all views require login
        '''
        self.family = Family()
        self.family.save()

        self.user = User.objects.create_user(email='*****@*****.**', password='******', name='Prince Barin')
        self.user.save()

        self.person = Person(name='Prince Barin', gender='M', user_id = self.user.id, email='*****@*****.**', family_id=self.family.id, hierarchy_score=100)
        self.person.save()

        #http://flashgordon.wikia.com/wiki/Prince_Barin
        self.son = Person(name='Prince Alan', gender='M', family_id=self.family.id)
        self.son.save()

        #http://flashgordon.wikia.com/wiki/King_Vultan
        self.vultan = Person(name='King Vultan', gender='M', family_id=self.family.id)
        self.vultan.save()

        self.lura = Person(name='Lura', gender='F', family_id=self.family.id)
        self.lura.save()


    def test_add_relation_view_loads(self):
        '''
        Tests that the add_relation_view loads and uses the correct template
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/add_relation={0}/'.format(self.person.id))
        self.assertEqual(200, response.status_code)
        self.assertTemplateUsed(response, 'family_tree/add_relation.html')


    def test_add_relation_post_rejects_invalid_relation(self):
        '''
        Tests that the add relation api rejects incorrect data
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.post('/add_relation_post={0}/'.format(self.person.id),{'existing_person': '0', 'relation_type': '4',})
        self.assertEqual(404, response.status_code)

    def test_add_relation_post_rejects_invalid_name(self):
        '''
        Tests that the add relation api rejects incorrect data
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.post('/add_relation_post={0}/'.format(self.person.id),{'existing_person': '0', 'relation_type': '1', 'name': ''})
        self.assertEqual(404, response.status_code)

    def test_add_relation_post_rejects_invalid_language(self):
        '''
        Tests that the add relation api rejects incorrect data
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.post('/add_relation_post={0}/'.format(self.person.id),{'existing_person': '0', 'relation_type': '1', 'name': 'Princess Aura', 'language': 'Klingon'})
        self.assertEqual(404, response.status_code)

    def test_add_relation_post_rejects_invalid_gender(self):
        '''
        Tests that the add relation api rejects incorrect data
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.post('/add_relation_post={0}/'.format(self.person.id),{'existing_person': '0', 'relation_type': '1', 'name': 'Princess Aura', 'language': 'en', 'gender': 'W'})
        self.assertEqual(404, response.status_code)

    def test_add_relation_creates_person_and_relation(self):
        '''
        Test that the add relation api correctly creates the right records
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.post('/add_relation_post={0}/'.format(self.person.id),{'existing_person': '0', 'relation_type': '1', 'name': 'Princess Aura', 'language': 'en', 'gender': 'F'})
        self.assertEqual(302, response.status_code)

        aura = Person.objects.get(name = 'Princess Aura')
        self.assertEqual('en', aura.language)
        self.assertEqual('F', aura.gender)
        self.assertEqual(self.family.id, aura.family_id)
        self.assertEqual(100, aura.hierarchy_score)

        relation =Relation.objects.get(from_person_id = aura.id, to_person_id = self.person.id)
        self.assertEqual(1, relation.relation_type)


    def test_add_parent_creates_person_and_relation_and_sets_correct_hierarchy(self):
        '''
        Test that the add relation api correctly creates the right records
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.post('/add_relation_post={0}/'.format(self.person.id),{'existing_person': '0', 'relation_type': '3', 'name': 'King Barin', 'language': 'en', 'gender': 'M'})
        self.assertEqual(302, response.status_code)

        king = Person.objects.get(name = 'King Barin')
        self.assertEqual('en', king.language)
        self.assertEqual('M', king.gender)
        self.assertEqual(self.family.id, king.family_id)
        self.assertEqual(99, king.hierarchy_score)

        relation =Relation.objects.get(from_person_id = king.id, to_person_id = self.person.id)
        self.assertEqual(2, relation.relation_type)

    def test_add_relation_to_existing_people(self):
        '''
        Tests that a relation can be added between two existing people
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.post('/add_relation_post={0}/'.format(self.person.id),{'existing_person': '1', 'relation_type': '2', 'relation_id': str(self.son.id)})
        self.assertEqual(302, response.status_code)

        relation =Relation.objects.get(from_person_id = self.person.id, to_person_id = self.son.id)
        self.assertEqual(2, relation.relation_type)


    def test_break_relation_view_loads(self):
        '''
        Tests that the  break_relation_view loads and uses the correct template
        '''
        relation = Relation(from_person_id=self.vultan.id, to_person_id=self.lura.id,relation_type=PARTNERED)
        relation.save()

        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/break_relation={0}/'.format(self.vultan.id))
        self.assertEqual(200, response.status_code)
        self.assertTemplateUsed(response, 'family_tree/break_relation.html')
        self.assertEquals(True, b'Lura' in response.content)

    def test_break_relation_post_deletes_relation(self):
        '''
        Tests that the relation is deleted from the post view
        '''
        relation = Relation(from_person_id=self.vultan.id, to_person_id=self.lura.id,relation_type=PARTNERED)
        relation.save()

        self.client.login(email='*****@*****.**', password='******')
        response = self.client.post('/break_relation_post={0}/'.format(self.vultan.id),{'relation_id': relation.id})
        self.assertEqual(302, response.status_code)
        self.assertEqual(0, Relation.objects.filter(from_person_id=self.vultan.id, to_person_id=self.lura.id).count())
Beispiel #47
0
class TestImageUploadViews(TestCase):

    def setUp(self):
        '''
        Set up a family, user and profile to test with
        '''

        self.family = Family()
        self.family.save()

        self.user = User.objects.create_user(email='*****@*****.**', password='******', name='Fairy Fellar')
        self.user.save()

        self.person = Person.objects.create(name='Fairy Fellar', gender='M', user_id=self.user.id, email='*****@*****.**', family_id=self.family.id)
        self.person.save()

        self.another_family = Family()
        self.another_family.save()
        self.another_user = User.objects.create_user(email='*****@*****.**', password="******", name='Dale Arden', family_id=self.another_family.id)
        self.another_user.save()

    def test_upload_image_view_loads(self):
        '''
        tests that the view loads if someone navigates to it
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/edit_profile_photo={0}/'.format(self.person.id))
        self.assertEqual(200, response.status_code)
        self.assertTemplateUsed(response, 'family_tree/image_upload.html')



    def test_image_upload_view_does_not_load_for_another_family(self):
        '''
        tests that the view does not load if a person from a different family is trying to access it
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/edit_profile_photo={0}/'.format(self.person.id))
        self.assertEqual(404, response.status_code)


    def test_image_upload_receives_file(self):
        '''
        test that we can upload a file
        '''
        self.client.login(email='*****@*****.**', password='******')


        with open(os.path.join(BASE_DIR, 'tests/test_image_upload.png'), 'rb') as fp:
            response = self.client.post('/image_upload={0}/'.format(self.person.id),{'picture': fp})

        self.assertEqual(200, response.status_code)

        #Check file has been uploaded and remove it
        data = json.loads(response.content.decode('utf-8'))
        filename = settings.MEDIA_ROOT + 'profile_photos/' + data['filename']
        os.remove(filename)

        #Reload object
        self.person = Person.objects.get(pk=self.person.id)
        self.assertEqual('profile_photos/' + data['filename'],self.person.photo)


    def test_image_upload_cannot_receive_file_from_another_family(self):
        '''
        test that we can can't upload file to another family
        '''
        self.client.login(email='*****@*****.**', password='******')

        with open(os.path.join(BASE_DIR, 'tests/test_image_upload.png'), 'rb') as fp:
            response = self.client.post('/image_upload={0}/'.format(self.person.id),{'picture': fp})

        self.assertEqual(404, response.status_code)


    def test_image_upload_does_not_process_image_file(self):
        '''
        test that an invalid file is not processed
        '''
        num_files = len([item for item in os.listdir( settings.MEDIA_ROOT + 'profile_photos/')])

        self.client.login(email='*****@*****.**', password='******')
        with open(os.path.join(BASE_DIR, 'tests/test_not_a_real_picture.png'), 'rb') as fp:
            response = self.client.post('/image_upload={0}/'.format(self.person.id),{'picture': fp})

        self.assertEqual(200, response.status_code)
        data = json.loads(response.content.decode('utf-8'))

        self.assertEqual('Invalid image!', data['error'])

        #Check no new files
        self.assertEqual(num_files, len([item for item in os.listdir( settings.MEDIA_ROOT + 'profile_photos/')]))


    def test_image_resize_view_loads(self):
        '''
        test that we can upload a file
        '''
        self.client.login(email='*****@*****.**', password='******')

        response = self.client.get('/image_resize={0}/'.format(self.person.id))

        self.assertEqual(200, response.status_code)
        self.assertTemplateUsed(response, 'family_tree/image_resize.html')


    def test_image_resize_view_does_not_load_for_another_family(self):
        '''
        tests that the view does not load if a person from a different family is trying to access it
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/image_resize={0}/'.format(self.person.id))
        self.assertEqual(404, response.status_code)


    def test_image_crop_can_be_posted_to(self):
        '''
        Tests that the image_crop view can posted to
        '''

        #Copy test image to media area
        shutil.copy2(os.path.join(settings.BASE_DIR, 'family_tree/tests/large_test_image.jpg'), settings.MEDIA_ROOT + 'profile_photos/large_test_image.jpg')

        self.person.photo = 'profile_photos/large_test_image.jpg'
        self.person.save()
        self.client.login(email='*****@*****.**', password='******')

        response = self.client.post('/image_crop={0}/'.format(self.person.id),{'x': 100, 'y': 200, 'w': 300, 'h': 300, 'display_height' : 550})

        #Clear up mess afterwards
        os.remove(settings.MEDIA_ROOT + 'profile_photos/large_test_image.jpg')

        self.assertEqual(302, response.status_code)

    def test_image_crop_cannot_be_posted_to_for_another_family(self):
        '''
        tests that the view does not load if a person from a different family is trying to access it
        '''
        #Copy test image to media area
        shutil.copy2(os.path.join(settings.BASE_DIR, 'family_tree/tests/large_test_image.jpg'), settings.MEDIA_ROOT + 'profile_photos/large_test_image.jpg')

        self.person.photo = 'profile_photos/large_test_image.jpg'
        self.person.save()

        self.client.login(email='*****@*****.**', password='******')
        response = self.client.post('/image_crop={0}/'.format(self.person.id),{'x': 100, 'y': 200, 'w': 300, 'h': 300, 'display_height' : 550})

        #Clear up mess afterwards
        os.remove(settings.MEDIA_ROOT + 'profile_photos/large_test_image.jpg')

        self.assertEqual(404, response.status_code)
class ResizeTagsTestCase(TestCase):  # pragma: no cover
    def setUp(self):
        '''
        Need to create a family and a gallery
        '''
        self.family = Family()
        self.family.save()

        self.gallery = Gallery.objects.create(title="test_gallery",
                                              family_id=self.family.id)

        self.test_image = os.path.join(
            settings.BASE_DIR, 'facial_recognition/tests/test_image_woman.jpg')
        self.test_image_destination = ''.join([
            settings.MEDIA_ROOT, 'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id), '/test_image.jpg'
        ])
        self.test_image_s3_key = ''.join([
            'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id), '/test_image.jpg'
        ])

        directory = ''.join([
            settings.MEDIA_ROOT, 'galleries/',
            str(self.family.id), '/',
            str(self.gallery.id)
        ])
        if not os.path.exists(directory):
            os.makedirs(directory)

        #Copy test image to media area
        shutil.copy2(self.test_image, self.test_image_destination)

        self.image = Image(gallery=self.gallery,
                           family=self.family,
                           original_image=''.join([
                               'galleries/',
                               str(self.family.id), '/',
                               str(self.gallery.id), '/test_image.jpg'
                           ]))
        self.image.save()
        self.image.upload_files_to_s3()

        self.person = Person(name='Wallace',
                             gender='M',
                             email='*****@*****.**',
                             family_id=self.family.id,
                             language='en')
        self.person.save()

        self.tag = Tag.objects.create(image_id=self.image.id,
                                      x1=0.3,
                                      y1=0.2,
                                      x2=0.5,
                                      y2=0.4,
                                      person_id=self.person.id)

    def test_tag_resizes(self):

        # Create a message to resize tag
        resize_tag_queue_id = Queue.objects.get(name='resize_tag').id
        message = Message.objects.create(queue_id=resize_tag_queue_id,
                                         integer_data=self.tag.id)

        resize_tags([message])

        resized_tag = Tag.objects.get(pk=self.tag.id)

        self.assertTrue(abs(0.279 - resized_tag.x1) < 0.001)
        self.assertTrue(abs(0.188 - resized_tag.y1) < 0.001)
        self.assertTrue(abs(0.536 - resized_tag.x2) < 0.001)
        self.assertTrue(abs(0.381 - resized_tag.y2) < 0.001)

        #Clear up
        self.image.delete_local_image_files()
        self.image.delete_remote_image_files()
Beispiel #49
0
class TestTreeViews(TestCase):

    def setUp(self):
        '''
        Creates credientials as all views require login
        '''
        self.family = Family()
        self.family.save()


        user = User.objects.create_user(email='*****@*****.**', password='******', name='Roger Taylor')
        user.save()

        self.person = Person(name='Roger Taylor', gender='M', user_id = user.id, email='*****@*****.**', family_id=self.family.id)
        self.person.save()

        self.wife = Person.objects.create(name='wife', gender='F', hierarchy_score=100, family_id=self.family.id)
        self.wife_to_person = Relation.objects.create(from_person=self.wife, to_person=self.person, relation_type=PARTNERED)

        self.son = Person.objects.create(name='son', gender='M',hierarchy_score=101, family_id=self.family.id)
        self.person_to_son = Relation.objects.create(from_person=self.person, to_person=self.son, relation_type=RAISED)

        self.daughter = Person.objects.create(name='daughter', gender='F',hierarchy_score=101, family_id=self.family.id)
        self.person_to_daughter = Relation.objects.create(from_person=self.person, to_person=self.daughter, relation_type=RAISED)

        self.mum = Person.objects.create(name='mum', gender='F', hierarchy_score=99, family_id=self.family.id)
        self.mum_to_person = Relation.objects.create(from_person=self.mum, to_person=self.person, relation_type=RAISED)

        self.dad = Person.objects.create(name='dad', gender='M', hierarchy_score=99, family_id=self.family.id)
        self.dad_to_person = Relation.objects.create(from_person=self.dad, to_person=self.person, relation_type=RAISED)

        self.grandma = Person.objects.create(name='grandma', gender='F', hierarchy_score=98, family_id=self.family.id)
        self.grandma_to_mum = Relation.objects.create(from_person=self.grandma, to_person=self.mum, relation_type=RAISED)

        self.grandson = Person.objects.create(name='grandson', gender='M', hierarchy_score=102, family_id=self.family.id)
        self.son_to_grandson = Relation.objects.create(from_person=self.son, to_person=self.grandson, relation_type=RAISED)


    def test_home_tree_view_loads(self):
        '''
        Tests that the users home screen loads and uses the correct template
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/home/')
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, 'family_tree/tree.html')

    def test_person_tree_view_loads(self):
        '''
        Tests that a tree view loads for a given person and uses correct template
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/person={0}/'.format(self.person.id))
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, 'family_tree/tree.html')


    def test_shows_error_screen_if_person_not_found_for_user(self):
        '''
        Tests that the error screen loads and uses the correct template
        when a person is not found
        '''
        user = User.objects.create_user(email='*****@*****.**', password='******', family_id = self.family.id)
        user.save()


        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/home/')
        self.assertEqual(response.status_code, 404)



    def test_get_css(self):
        '''
        Checks that the css returned from the get_css function is correct
        '''
        related_data = tree_service.get_related_data(self.person)

        css =  _get_css(self.person, related_data, 300)

        mum_css = "#person%s{left:" % (self.mum.id)
        self.assertEqual(True, mum_css in css)

        dad_css = "#person%s{left:" % (self.dad.id)
        self.assertEqual(True, dad_css in css)


    def test_other_family_can_not_view_my_family_tree(self):
        '''
        Check people from different families cannot view each others profiles
        '''
        another_family = Family()
        another_family.save()

        user = User.objects.create_user(email='*****@*****.**', password='******', family_id = another_family.id)
        user.save()

        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/person={0}/'.format(self.person.id))
        self.assertEqual(response.status_code, 404)


    def test_how_am_i_related_view_loads(self):
        '''
        Tests that the users home screen loads and uses the correct template
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/how_am_i_related={0}/'.format(self.grandma.id))
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, 'family_tree/how_am_i_related.html')

        self.assertEqual(True,b'grandma' in response.content)
        self.assertEqual(True,b'mum' in response.content)
        self.assertEqual(True,b'Roger Taylor' in response.content)
        self.assertEqual(True,b'Raised' in response.content)


    def test_whole_tree_view_loads(self):
        '''
        Tests that the whole tree view loads
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/whole_tree/')
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, 'family_tree/whole_tree.html')


    def test_descendants_view_loads(self):
        '''
        Tests that the descendants view loads
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/descendants={0}/'.format( self.grandma.id))
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, 'family_tree/whole_tree.html')


    def test_ancestors_view_loads(self):
        '''
        Tests that the descendants view loads
        '''
        self.client.login(email='*****@*****.**', password='******')
        response = self.client.get('/ancestors={0}/'.format( self.grandson.id))
        self.assertEqual(response.status_code, 200)
        self.assertTemplateUsed(response, 'family_tree/whole_tree.html')