Exemple #1
0
    def test_all_proficiencies_dict(self):
        """ Test that proficiencies dict getter assembles properly from character attributes """
        p_skill = G(Skill, name='Proficient Skill')
        e_skill = G(Skill, name='Expert Skill')
        skill_proficiency = G(SkillProficiency,
                              skill=p_skill,
                              proficiency_level='P')
        skill_expertise = G(SkillProficiency,
                            skill=e_skill,
                            proficiency_level='E')
        character = G(Character,
                      skills=[skill_proficiency.id, skill_expertise.id])
        character.proficient_heavy_armor = True
        character.proficient_languages = 'Common,Dwarvish'
        character.proficient_other = 'Other Proficiency A,Other Proficiency B'

        result = character.all_proficiencies_dict

        self.assertIn('armor', result)
        self.assertIn('weapons', result)
        self.assertIn('tools', result)
        self.assertIn('skills', result)
        self.assertIn('other', result)
        self.assertIn('languages', result)

        self.assertIn('Proficient Skill', result['skills'])
        self.assertIn('Expert Skill', result['skills'])
        self.assertIn('Heavy Armor', result['armor'])
        self.assertIn('Common', result['languages'])
        self.assertIn('Dwarvish', result['languages'])
        self.assertIn('Other Proficiency A', result['other'])
        self.assertIn('Other Proficiency B', result['other'])

        self.assertNotIn('Light Armor', result['armor'])
        self.assertNotIn('Elvish', result['languages'])
Exemple #2
0
 def test_random_model_creation(self):
     EXAMPLE_COUNT = 20
     for modeladmin in admin.site._registry.values():
         if modeladmin.model._meta.managed:
             for _ in range(EXAMPLE_COUNT):
                 G(modeladmin.model, fill_nullable_fields=True)
                 G(modeladmin.model, fill_nullable_fields=False)
Exemple #3
0
    def test_doctor_search_via_name(self, doctor, client):
        self._login(doctor.user, client)
        response = client.get('/doctor/dashboard/search/')
        assert response.status_code == 200, 'Search view should return 200 OK response for doctor'
        assert len(
            response.context_data.get('object_list')
        ) == 0, 'There should not be any results without the query url param'

        user_1 = G(User, first_name='Dummy', last_name='Name')
        student_1 = G(Student, user=user_1)
        user_2 = G(User, first_name='Foo', last_name='Bar')
        student_2 = G(Student, user=user_2)

        # testing with first_name
        search_query = 'dummy'
        response = client.get(f'/doctor/dashboard/search/?q={search_query}')
        search_results = response.context_data.get('object_list')
        assert len(search_results) == 1, 'There should be exactly one result'
        assert search_results[
            0] == student_1, '"student_2" should be returned as only the search result'

        # testing with wrong query
        search_query = 'hello'
        response = client.get(f'/doctor/dashboard/search/?q={search_query}')
        search_results = response.context_data.get('object_list')
        assert len(search_results) == 0, 'There should  not any search result'

        # testing with last_name
        search_query = 'bar'
        response = client.get(f'/doctor/dashboard/search/?q={search_query}')
        search_results = response.context_data.get('object_list')
        assert len(search_results) == 1, 'There should be exactly one result'
        assert search_results[
            0] == student_2, '"student_2" should be returned as only the search result'
Exemple #4
0
    def test_is_magic(self):
        """ Test that the is_magic property properly determines if an item is magic """
        mundane_armor = G(Armor, rarity='M')
        magic_armor = G(Armor, rarity='C')

        self.assertTrue(magic_armor.is_magic)
        self.assertFalse(mundane_armor.is_magic)
Exemple #5
0
    def test_has_child(self):
        """ Test that the has_child property correctly determines when an
        ancestry has a child ancestry """
        ancestry_no_children = G(Ancestry)
        ancestry_has_children = G(Ancestry)
        G(SubAncestry, parent=ancestry_has_children)

        self.assertTrue(ancestry_has_children.has_child)
        self.assertFalse(ancestry_no_children.has_child)
Exemple #6
0
    def test_doctor_dashboard_list_of_patient(self, doctor, client):
        self._login(doctor.user, client)
        response = client.get('/doctor/dashboard/list-of-patients/')
        assert response.status_code == 200, 'List of patients view should return 200 OK response for doctor'

        visit_histories = response.context_data['object_list']
        assert len(visit_histories) == 0, 'No visit histories are present.'

        # creating dummy students
        user_1 = G(User)
        student_1 = G(Student, user=user_1)
        user_2 = G(User)
        student_2 = G(Student, user=user_2)

        # creating dummy doctor
        user_3 = G(User)
        doctor_1 = G(Doctor, user=user_3)

        # creating visit histories
        vh_1 = G(VisitHistory, student=student_1, doctor=doctor)
        vh_2 = G(VisitHistory, student=student_2, doctor=doctor)
        vh_3 = G(VisitHistory, student=student_2, doctor=doctor_1)

        # testing
        response = client.get('/doctor/dashboard/list-of-patients/')
        visit_histories = response.context_data['object_list']
        assert len(
            visit_histories
        ) == 2, 'There should be two visit histories the logged in doctor'
Exemple #7
0
    def test_staff_should_not_be_able_to_access_doc_dashboard(self, client):
        user = G(User, is_staff=True)
        self._login(user, client)
        response = client.get('/doctor/dashboard/')
        assert response.status_code == 403, 'Staff members are not allowed to access doctor dashboard'

        client.logout()
        admin = G(User, is_staff=True, is_superuser=True)
        self._login(admin, client)
        response = client.get('/doctor/dashboard/')
        assert response.status_code == 403, 'Admin members are not allowed to access doctor dashboard'
Exemple #8
0
    def setUp(self):
        self.ranged_longbow = G(WeaponProperty, name='ranged (150/600)')
        self.ranged_thrown = G(WeaponProperty, name='ranged (20/60)')
        self.finesse = G(WeaponProperty, name='finesse')
        self.thrown = G(WeaponProperty, name='thrown')
        self.versatile = G(WeaponProperty, name='versatile (d10)')

        self.handaxe = G(Weapon, properties=[self.thrown.id, self.ranged_thrown.id])
        self.dagger = G(Weapon, properties=[self.finesse.id, self.thrown.id, self.ranged_thrown.id])
        self.longbow = G(Weapon, properties=[self.ranged_longbow.id])
        self.rapier = G(Weapon, properties=[self.finesse.id])
        self.longsword = G(Weapon, properties=[self.versatile.id])
Exemple #9
0
def test_datetimefield_model(db):
    obj = G(DateTimeFieldModel)
    value = obj.field
    obj.field = obj.field + timedelta(days=1, hours=3)
    obj.save()

    assert obj.get_field_history()[0].value == value
    def test_stud_dashboard_history(self, student, doctor, client):
        self._login(student.user, client)

        visit_1 = G(VisitHistory, student=student, doctor=doctor)
        visit_2 = G(VisitHistory, student=student, doctor=doctor)

        response = client.get('/student/dashboard/')
        assert response.status_code == 200, 'Response should be 200 OK for student dashboard'

        visits = response.context_data.get('visits')
        assert len(
            visits) == 2, 'Two Visits should be present in the context data'
        assert visits[
            0].doctor.pk == doctor.pk, 'Doctor pk should be the same as created.'
        assert visits[
            1].doctor.pk == doctor.pk, 'Doctor pk should be the same as created.'
Exemple #11
0
    def test_reset_password_successful(self):
        """ Testcase for successfully reseting user's password. """
        user = G(AUTH_USER)

        # Generating token for given user.
        token = TokenGenerator.generate_token(
            user,
            exp=datetime.datetime.utcnow()
            + datetime.timedelta(
                hours=commons_constant.EMAIL_VERIFICATION_EXPIRATION_TIME_HR
            )
        )

        url = self.get_url()

        data = {
            'new_password': '******',
            'token': token
        }

        response = self.client.post(url, data=data)

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.data), 1)
        self.assertEqual(
            response.data.get(commons_constant.RESPONSE_MSG),
            commons_constant.PASS_UPDATE_SUCC
        )
Exemple #12
0
    def test_verify_valid_token(self):
        """ Testcase to verify the email of the user. """
        user = G(AUTH_USER)

        # checking currentlty is_email_verified is False.
        self.assertEqual(user.is_email_verified, False)

        # Generating token for email verification.
        token = TokenGenerator.generate_token(
            user,
            exp=datetime.datetime.utcnow()
            + datetime.timedelta(
                hours=commons_constant.EMAIL_VERIFICATION_EXPIRATION_TIME_HR
            )
        )

        url = self.get_url(token)

        response = self.client.get(url)

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.data), 1)
        self.assertEqual(
            response.data.get(commons_constant.RESPONSE_TOKEN),
            Token.objects.get(user=user).key
        )
        self.assertEqual(AUTH_USER.objects.get(
            id=user.id).is_email_verified, True)
Exemple #13
0
    def test_fetching_user_profile(self):
        """ Testcase for fetching user's profile data. """
        user = G(AUTH_USER)

        # Without Authenticating
        response = self.client.get(self.url)
        self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
        self.assertEqual(len(response.data), 1)
        self.assertEqual(
            response.data.get('detail'),
            'Authentication credentials were not provided.'
        )

        # After Authenticating.
        self.client.force_authenticate(user=user)

        expected_response = {
            'id': user.id,
            'email': user.email,
            'first_name': user.first_name,
            'last_name': user.last_name,
            'dob': user.dob,
            'phone': user.phone,
            'profile_image': 'http://testserver' + user.profile_image.url,
            'is_email_verified': user.is_email_verified,
            'token': user.auth_token.key
        }
        response = self.client.get(f'{self.url}')

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(dict(response.data), expected_response)
Exemple #14
0
    def test_accessing_other_user_data(self):
        """ Testcase for accessing other user's details. """

        user1 = G(AUTH_USER)
        user2 = G(AUTH_USER)

        self.client.force_authenticate(user=user1)

        # deleting user2 details by user1
        response = self.client.delete(f'{self.url}{user2.id}/')
        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)

        data = get_user_data()
        # updating user2 details by user1
        response = self.client.put(f'{self.url}{user2.id}/', data=data)
        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
Exemple #15
0
    def test_user_updation(self):
        """ Testcase for updation of user.
            This should not update the user's password, email and 
            is_email_verified status.
        """
        user = G(AUTH_USER)

        self.client.force_authenticate(user=user)

        data = get_user_data(is_email_verified=True)

        expected_response = {
            'id': user.id,
            'first_name': data['first_name'],
            'last_name': data['last_name'],
            'email': user.email,
            'dob': user.dob,
            'phone': user.phone,
            'profile_image': f'http://testserver{user.profile_image.url}',
            'is_email_verified': user.is_email_verified,
            'token': user.auth_token.key
        }

        response = self.client.put(f'{self.url}{user.id}/', data=data)

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(dict(response.data), expected_response)
        self.assertNotEqual(user.password, make_password(data['password']))
        self.assertTrue(not user.is_email_verified)
Exemple #16
0
def test_single_history_on_multiple_changes(db):
    obj = G(MultipleFieldModel, first_field="value", second_field="value")

    obj.first_field = "new_value"
    obj.second_field = "new_value"
    obj.save()
    assert FieldsHistory.objects.count() == 1
Exemple #17
0
    def test_verification_with_invalid_token(self):
        """ Testcase to verify the email of the user with invalid token. """
        user = G(AUTH_USER)

        # checking currentlty is_email_verified is False.
        self.assertEqual(user.is_email_verified, False)

        # Generating token for email verification.
        token = TokenGenerator.generate_token(
            user,
            exp=datetime.datetime.utcnow()
            + datetime.timedelta(
                hours=commons_constant.EMAIL_VERIFICATION_EXPIRATION_TIME_HR
            )
        )[:-1]

        url = self.get_url(token)

        response = self.client.get(url)

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        self.assertEqual(
            response.data.get(commons_constant.RESPONSE_TOKEN)[0].__str__(),
            commons_constant.INVALID_TOKEN
        )
Exemple #18
0
def test_integer_model(db):
    obj = G(IntegerFieldModel)
    value = obj.field
    obj.field = obj.field + 1
    obj.save()

    assert obj.get_field_history()[0].value == value
Exemple #19
0
    def test_proficiency_bonus(self):
        """ Test that proficiency bonus calculation is equal to CEIL(LEVEL / 4) + 1"""
        char_class_1 = G(CharacterClass)
        class_1_and_level = G(ClassAndLevel,
                              character_class=char_class_1,
                              level=5)
        char_class_2 = G(CharacterClass)
        class_2_and_level = G(ClassAndLevel,
                              character_class=char_class_2,
                              level=3)
        character = G(
            Character,
            class_levels=[class_1_and_level.id, class_2_and_level.id])

        self.assertEqual(character.proficiency_bonus, 3, \
            msg="Total level is 8, proficiency should be 3")

        char_class_3 = G(CharacterClass)
        class_3_and_level = G(ClassAndLevel,
                              character_class=char_class_3,
                              level=1)
        character.class_levels.add(class_3_and_level)

        self.assertEqual(character.proficiency_bonus, 4, \
            msg="Total level is now 9, proficiency should bump by 1")
Exemple #20
0
    def test_update(self, client: FuncWebTest, admin_url):
        transaction = G(Transaction, amount=20)
        client.get_literal_url(admin_url(Transaction, "change",
                                         transaction.pk))
        client.fill_by_name({"amount": "40"})
        client.submit("[name='_save']")

        transaction.refresh_from_db()
        assert transaction.amount == 40
    def setUp(self):
        # Initialize client
        self.client = APIClient()

        # Initialize different POV users
        user_model = get_user_model()
        self.superuser = user_model.objects.create_superuser('superuser',
                                                             password='******')
        self.owner = user_model.objects.create_user('owner', password='******')
        self.editor = user_model.objects.create_user('editor', password='******')
        self.some_user = user_model.objects.create_user('some_user',
                                                        password='******')

        # create some test users
        G(Character, PRIVATE_COUNT, owner=self.owner, \
            authorized_editors=[self.editor.id], is_private=True)
        G(Character, PUBLIC_COUNT, owner=self.owner, \
            authorized_editors=[self.editor.id], is_private=False)
Exemple #22
0
def test_no_history_only_on_tracked_fields_change(db):
    obj = G(OneOfManyTrackedFieldModel, tracked="value", not_tracked="value")
    obj.not_tracked = "new_value"
    obj.save()
    assert not FieldsHistory.objects.exists()

    obj.tracked = "new_value"
    obj.save()
    assert FieldsHistory.objects.count() == 1
Exemple #23
0
    def test_initiative(self):
        """ Test that initiative modifier is calculated accounting for 
        dexterity, jack of all trades, and miscellaneous bonuses """
        char_class_1 = G(CharacterClass)
        class_1_and_level = G(ClassAndLevel,
                              character_class=char_class_1,
                              level=5)
        character = G(Character, class_levels=[class_1_and_level.id])
        self.assertEqual(character.initiative, 0)

        character.dexterity = 14
        self.assertEqual(character.initiative, 2)

        character.jack_of_all_trades = True
        self.assertEqual(character.initiative, 3)

        character.misc_initiative_bonus = 5
        self.assertEqual(character.initiative, 8)
Exemple #24
0
def test_history_on_field_change_save(db, model):
    obj = G(model)
    new_obj = N(model)

    assert new_obj.field != obj.field
    obj.field = new_obj.field

    assert not FieldsHistory.objects.exists()
    obj.save()
    assert FieldsHistory.objects.count() == 1
Exemple #25
0
    def test_appointment_list_view_response(self, doctor, student, client):
        self._login(doctor.user, client)
        response = client.get('/doctor/dashboard/appointments/')
        assert response.status_code == 200, 'Doctor should be able to view all its appointments'
        assert len(response.context_data['object_list']
                   ) == 0, 'There are no appointments currently'

        # creating another dummy doctor
        user_1 = G(User)
        doctor_1 = G(Doctor, user=user_1)

        # creating appointments
        appointment_1 = G(Appointment, doctor=doctor, student=student)
        appointment_2 = G(Appointment, doctor=doctor_1, student=student)

        response = client.get('/doctor/dashboard/appointments/')
        assert len(
            response.context_data['object_list']
        ) == 1, 'There are exactly one appointment for the logged in doctor'
Exemple #26
0
    def test_ability_modifier_getters(self):
        """ Test that ability modifiers are calculated correctly """
        character = G(Character)
        self.assertEqual(character.strength_modifier, 0)

        character.strength += 4
        self.assertEqual(character.strength_modifier, 2)

        character.strength -= 8
        self.assertEqual(character.strength_modifier, -2)
    def setUp(self):
        # Initialize client
        self.client = APIClient()

        # Initialize different POV users
        user_model = get_user_model()
        self.superuser = user_model.objects.create_superuser('superuser',
                                                             password='******')
        self.owner = user_model.objects.create_user('owner', password='******')
        self.editor = user_model.objects.create_user('editor', password='******')
        self.other_user = user_model.objects.create_user('other_user',
                                                         password='******')
        self.inactive_user = user_model.objects.create_user('inactive_user', \
            password='******', is_active=False)

        self.skill = G(Skill,
                       owner=self.owner,
                       authorized_editors=[self.editor.id])
        self.private_character = G(Character, is_private=True, \
            owner=self.owner, authorized_editors=[self.editor.id])
Exemple #28
0
    def test_successful_logout(self):
        """ Testcase for successful logout. """

        user = G(AUTH_USER)

        self.client.force_authenticate(user=user)

        response = self.client.delete(self.url)

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(Token.objects.filter(user=user).count(), 0)
 def test_login_page_with_authenticated_user(self, client):
     user = G(User)
     client.force_login(user)
     response = client.get('/login/')
     assert response.status_code == 302, 'Logged in user should get redirected on accessing login page'
     assert response.has_header(
         'location'
     ) == True, 'Redirection url should be present in response header'
     assert response.get(
         'location'
     ) == '/', 'Location header must contain redirection url which is homepage in this case.'
Exemple #30
0
    def test_appointment_cancelled(self, doctor, student, client):
        self._login(doctor.user, client)
        appointment = G(Appointment, student=student, doctor=doctor)
        response = client.get(f'/appointments/update/{appointment.pk}/cancel/')
        assert response.status_code == 302, 'Updation of appointment should return redirect response'
        assert response.get(
            'location'
        ) == '/doctor/dashboard/appointments/', 'Updation of appointment should return to appointment list view of doctor'

        appointment.refresh_from_db()
        assert appointment.is_cancelled == True, 'Appointment should be cancelled'
        assert appointment.is_confirmed == False, 'Appointment should not be confirmed'