From b8c1e523f828c5adcd7e06bc9f000fdf39dd7815 Mon Sep 17 00:00:00 2001 From: vatsala Date: Sat, 28 May 2016 23:41:04 +0530 Subject: [PATCH 1/8] Adding existing automated tests to vms --- vms/administrator/tests/__init__.py | 0 vms/administrator/tests/test_report.py | 620 ++++++++++ vms/administrator/tests/test_settings.py | 815 +++++++++++++ vms/administrator/tests/test_unit.py | 3 + vms/event/tests/__init__.py | 0 vms/event/tests/test_shiftSignUp.py | 263 +++++ vms/event/tests/test_unit.py | 3 + vms/home/tests/__init__.py | 0 vms/home/tests/test_functional.py | 537 +++++++++ vms/home/tests/test_unit.py | 1 + vms/registration/tests/__init__.py | 0 .../tests/test_functional_admin.py | 318 +++++ .../tests/test_functional_volunteer.py | 320 ++++++ vms/registration/tests/test_unit.py | 3 + vms/shift/tests/__init__.py | 0 vms/shift/tests/test_manageVolunteerShift.py | 748 ++++++++++++ vms/shift/tests/test_shiftHours.py | 218 ++++ vms/shift/tests/test_unit.py | 1024 +++++++++++++++++ vms/shift/tests/test_viewVolunteerShift.py | 235 ++++ vms/vms/settings.py | 2 + vms/volunteer/tests/__init__.py | 0 vms/volunteer/tests/test_searchVolunteer.py | 704 ++++++++++++ vms/volunteer/tests/test_unit.py | 348 ++++++ vms/volunteer/tests/test_volunteerProfile.py | 199 ++++ vms/volunteer/tests/test_volunteerReport.py | 275 +++++ 25 files changed, 6636 insertions(+) create mode 100644 vms/administrator/tests/__init__.py create mode 100644 vms/administrator/tests/test_report.py create mode 100644 vms/administrator/tests/test_settings.py create mode 100644 vms/administrator/tests/test_unit.py create mode 100644 vms/event/tests/__init__.py create mode 100644 vms/event/tests/test_shiftSignUp.py create mode 100644 vms/event/tests/test_unit.py create mode 100644 vms/home/tests/__init__.py create mode 100644 vms/home/tests/test_functional.py create mode 100644 vms/home/tests/test_unit.py create mode 100644 vms/registration/tests/__init__.py create mode 100644 vms/registration/tests/test_functional_admin.py create mode 100644 vms/registration/tests/test_functional_volunteer.py create mode 100644 vms/registration/tests/test_unit.py create mode 100644 vms/shift/tests/__init__.py create mode 100644 vms/shift/tests/test_manageVolunteerShift.py create mode 100644 vms/shift/tests/test_shiftHours.py create mode 100644 vms/shift/tests/test_unit.py create mode 100644 vms/shift/tests/test_viewVolunteerShift.py create mode 100644 vms/volunteer/tests/__init__.py create mode 100644 vms/volunteer/tests/test_searchVolunteer.py create mode 100644 vms/volunteer/tests/test_unit.py create mode 100644 vms/volunteer/tests/test_volunteerProfile.py create mode 100644 vms/volunteer/tests/test_volunteerReport.py diff --git a/vms/administrator/tests/__init__.py b/vms/administrator/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vms/administrator/tests/test_report.py b/vms/administrator/tests/test_report.py new file mode 100644 index 0000000..db623ee --- /dev/null +++ b/vms/administrator/tests/test_report.py @@ -0,0 +1,620 @@ +from django.test import TestCase +from django.contrib.staticfiles.testing import LiveServerTestCase + +from django.contrib.auth.models import User +from django.db import IntegrityError + +from administrator.models import Administrator +from volunteer.models import Volunteer +from event.models import Event +from job.models import Job +from shift.models import Shift, VolunteerShift +from organization.models import Organization #hack to pass travis,Bug in Code + +from selenium import webdriver +from selenium.common.exceptions import NoSuchElementException + + +class Report(LiveServerTestCase): + ''' + ''' + def setUp(self): + admin_user = User.objects.create_user( + username = 'admin', + password = 'admin', + email = 'admin@admin.com') + + Administrator.objects.create( + user = admin_user, + address = 'address', + city = 'city', + state = 'state', + country = 'country', + phone_number = '9999999999', + unlisted_organization = 'organization') + + # create an org prior to registration. Bug in Code + # added to pass CI + Organization.objects.create( + name = 'DummyOrg') + + self.homepage = '/home/' + self.authentication_page = '/authentication/login/' + self.report_page = '/administrator/report/' + + self.driver = webdriver.Firefox() + self.driver.maximize_window() + super(Report, self).setUp() + + def tearDown(self): + self.driver.quit() + super(Report, self).tearDown() + + def login(self, username, password): + self.driver.get(self.live_server_url + self.authentication_page) + self.driver.find_element_by_id('id_login').send_keys(username) + self.driver.find_element_by_id('id_password').send_keys(password) + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertEqual(self.driver.current_url, + self.live_server_url + self.homepage) + + def logout(self): + self.driver.find_element_by_link_text('Log Out').click() + + def test_null_values_with_empty_datatset(self): + # should return no entries + self.login('admin', 'admin') + self.driver.find_element_by_link_text('Report').click() + self.driver.find_element_by_xpath('//form[1]').submit() + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-danger').text, 'Your criteria did not return any results.') + + def test_null_values_with_dataset(self): + # register dataset + org = Organization.objects.create(name = 'organization-one') + + volunteer_user = User.objects.create_user( + username = 'volunteer-one', + password = 'volunteer-one', + email = 'vol@vol.com') + + volunteer = Volunteer.objects.create( + user = volunteer_user, + first_name = 'first-name-one', + last_name = 'last-name-one', + address = 'address', + city = 'city', + state = 'state', + country = 'country', + phone_number = '9999999999', + unlisted_organization = Organization.objects.get( + name = 'organization-one')) + + # create shift and log hours + event = Event.objects.create( + name = 'Hackathon', + start_date = '2015-06-01', + end_date = '2015-06-01') + + job = Job.objects.create( + name = 'Developer', + start_date = '2015-06-01', + end_date = '2015-06-01', + event = event) + + shift = Shift.objects.create( + date = '2015-06-01', + start_time = '08:00', + end_time = '20:00', + max_volunteers = '2', + job = job) + + VolunteerShift.objects.create( + shift = shift, + volunteer = volunteer, + start_time = '09:00', + end_time = '15:00') + + # check logged hours in volunteer-one's profile + self.login('volunteer-one', 'volunteer-one') + self.driver.get(self.live_server_url + + '/shift/view_hours/' + str(Volunteer.objects.get( + user__username = 'volunteer-one').pk)) + + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'Developer') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[2]').text, 'June 1, 2015') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[3]').text, '9 a.m.') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, '3 p.m.') + self.logout() + + # check admin report with null fields, should return the above shift + self.login('admin', 'admin') + self.driver.get(self.live_server_url + self.report_page) + self.driver.find_element_by_xpath('//form[1]').submit() + total_no_of_shifts = self.driver.find_element_by_xpath( + '//div[2]/div[4]').text.split(' ')[10].strip('\nTotal') + + total_no_of_hours = self.driver.find_element_by_xpath( + '//div[2]/div[4]').text.split(' ')[-1].strip('\n') + + self.assertEqual(total_no_of_shifts, '1') + self.assertEqual(total_no_of_hours, '6.0') + + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'first-name-one') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[6]').text, 'June 1, 2015') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[7]').text, '9 a.m.') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[8]').text, '3 p.m.') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[9]').text, '6.0') + + def test_only_logged_shifts_are_reported(self): + # register dataset + org = Organization.objects.create(name = 'organization-one') + + volunteer_user = User.objects.create_user( + username = 'volunteer-one', + password = 'volunteer-one', + email = 'vol@vol.com') + + volunteer = Volunteer.objects.create( + user = volunteer_user, + first_name = 'first-name-one', + last_name = 'last-name-one', + address = 'address', + city = 'city', + state = 'state', + country = 'country', + phone_number = '9999999999', + organization = Organization.objects.get( + name = 'organization-one')) + + # create shift and log hours + event = Event.objects.create( + name = 'Hackathon', + start_date = '2015-06-01', + end_date = '2015-06-01') + + job = Job.objects.create( + name = 'Developer', + start_date = '2015-06-01', + end_date = '2015-06-01', + event = event) + + shift = Shift.objects.create( + date = '2015-06-01', + start_time = '09:00', + end_time = '15:00', + max_volunteers = '2', + job = job) + + # shift is assigned to volunteer-one, but hours have not been logged + VolunteerShift.objects.create( + shift = shift, + volunteer = volunteer) + + # check shift assigned to volunteer-one + # view being accessed `/shift/view_volunteer_shift` + self.login('volunteer-one', 'volunteer-one') + self.driver.get(self.live_server_url + + '/shift/view_volunteer_shifts/' + str(Volunteer.objects.get( + user__username = 'volunteer-one').pk)) + + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'Developer') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[2]').text, 'June 1, 2015') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[3]').text, '9 a.m.') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, '3 p.m.') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[5]//a').text, 'Log Hours') + self.logout() + + # check admin report with null fields, should return the above shift + self.login('admin', 'admin') + self.driver.get(self.live_server_url + self.report_page) + self.driver.find_element_by_xpath('//form[1]').submit() + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-danger').text, 'Your criteria did not return any results.') + + def register_dataset(self, parameters): + try: + org = Organization.objects.create(name = parameters['org']) + except IntegrityError: + org = Organization.objects.get(name = parameters['org']) + + + volunteer_user = User.objects.create_user( + username = parameters['volunteer']['username'], + password = parameters['volunteer']['password'], + email = parameters['volunteer']['email']) + + volunteer = Volunteer.objects.create( + user = volunteer_user, + first_name = parameters['volunteer']['first_name'], + last_name = parameters['volunteer']['last_name'], + address = parameters['volunteer']['address'], + city = parameters['volunteer']['city'], + state = parameters['volunteer']['state'], + country = parameters['volunteer']['country'], + phone_number = parameters['volunteer']['phone-no'], + organization = Organization.objects.get( + name = parameters['org'])) + + # create shift and log hours + event = Event.objects.create( + name = parameters['event']['name'], + start_date = parameters['event']['start_date'], + end_date = parameters['event']['end_date']) + + job = Job.objects.create( + name = parameters['job']['name'], + start_date = parameters['job']['start_date'], + end_date = parameters['job']['end_date'], + event = event) + + shift = Shift.objects.create( + date = parameters['shift']['date'], + start_time = parameters['shift']['start_time'], + end_time = parameters['shift']['end_time'], + max_volunteers = parameters['shift']['max_volunteers'], + job = job) + + # shift is assigned to volunteer-one, but hours have not been logged + VolunteerShift.objects.create( + shift = shift, + volunteer = volunteer, + start_time = parameters['vshift']['start_time'], + end_time = parameters['vshift']['end_time']) + + def test_check_intersection_of_fields(self): + parameters = {'org' : 'org-one', + 'volunteer' : { + 'username' : 'uname1', + 'password' : 'uname1', + 'email' : 'email@email.com', + 'first_name' : 'tom-fname', + 'last_name' : 'tom-lname', + 'address' : 'address', + 'city' : 'city', + 'state' : 'state', + 'country' : 'country', + 'phone-no' : '9999999999'}, + 'event' : { + 'name' : 'event-four', + 'start_date' : '2015-06-01', + 'end_date' : '2015-06-10'}, + 'job' : { + 'name' : 'jobOneInEventFour', + 'start_date' : '2015-06-01', + 'end_date' : '2015-06-01'}, + 'shift' : { + 'date' : '2015-06-01', + 'start_time' : '09:00', + 'end_time' : '10:00', + 'max_volunteers' : '10'}, + 'vshift' : { + 'start_time' : '09:30', + 'end_time' : '10:00',}} + self.register_dataset(parameters) + + parameters = {'org' : 'org-one', + 'volunteer' : { + 'username' : 'uname2', + 'password' : 'uname2', + 'email' : 'email@email.com', + 'first_name' : 'peter-fname', + 'last_name' : 'peter-lname', + 'address' : 'address', + 'city' : 'city', + 'state' : 'state', + 'country' : 'country', + 'phone-no' : '9999999999'}, + 'event' : { + 'name' : 'event-one', + 'start_date' : '2015-06-01', + 'end_date' : '2015-06-10'}, + 'job' : { + 'name' : 'jobOneInEventOne', + 'start_date' : '2015-06-01', + 'end_date' : '2015-06-01'}, + 'shift' : { + 'date' : '2015-06-01', + 'start_time' : '09:00', + 'end_time' : '10:00', + 'max_volunteers' : '10'}, + 'vshift' : { + 'start_time' : '19:00', + 'end_time' : '23:00'}} + self.register_dataset(parameters) + + parameters = {'org' : 'org-one', + 'volunteer' : { + 'username' : 'uname3', + 'password' : 'uname3', + 'email' : 'email@email.com', + 'first_name' : 'tom-fname', + 'last_name' : 'tom-lname', + 'address' : 'address', + 'city' : 'city', + 'state' : 'state', + 'country' : 'country', + 'phone-no' : '9999999999'}, + 'event' : { + 'name' : 'event-four', + 'start_date' : '2015-06-01', + 'end_date' : '2015-06-10'}, + 'job' : { + 'name' : 'jobTwoInEventFour', + 'start_date' : '2015-06-01', + 'end_date' : '2015-06-01'}, + 'shift' : { + 'date' : '2015-06-01', + 'start_time' : '09:00', + 'end_time' : '10:00', + 'max_volunteers' : '10'}, + 'vshift' : { + 'start_time' : '15:00', + 'end_time' : '18:30'}} + self.register_dataset(parameters) + + parameters = {'org' : 'org-two', + 'volunteer' : { + 'username' : 'uname4', + 'password' : 'uname4', + 'email' : 'email@email.com', + 'first_name' : 'harry-fname', + 'last_name' : 'harry-lname', + 'address' : 'address', + 'city' : 'city', + 'state' : 'state', + 'country' : 'country', + 'phone-no' : '9999999999'}, + 'event' : { + 'name' : 'event-one', + 'start_date' : '2015-06-01', + 'end_date' : '2015-06-10'}, + 'job' : { + 'name' : 'jobTwoInEventOne', + 'start_date' : '2015-06-01', + 'end_date' : '2015-06-01'}, + 'shift' : { + 'date' : '2015-06-01', + 'start_time' : '09:00', + 'end_time' : '10:00', + 'max_volunteers' : '10'}, + 'vshift' : { + 'start_time' : '09:00', + 'end_time' : '10:00'}} + self.register_dataset(parameters) + + parameters = {'org' : 'org-two', + 'volunteer' : { + 'username' : 'uname5', + 'password' : 'uname5', + 'email' : 'email@email.com', + 'first_name' : 'harry-fname', + 'last_name' : 'harry-lname', + 'address' : 'address', + 'city' : 'city', + 'state' : 'state', + 'country' : 'country', + 'phone-no' : '9999999999'}, + 'event' : { + 'name' : 'event-two', + 'start_date' : '2015-06-01', + 'end_date' : '2015-06-10'}, + 'job' : { + 'name' : 'jobOneInEventTwo', + 'start_date' : '2015-06-01', + 'end_date' : '2015-06-01'}, + 'shift' : { + 'date' : '2015-06-01', + 'start_time' : '09:00', + 'end_time' : '10:00', + 'max_volunteers' : '10'}, + 'vshift' : { + 'start_time' : '12:00', + 'end_time' : '17:00'}} + self.register_dataset(parameters) + + parameters = {'org' : 'org-three', + 'volunteer' : { + 'username' : 'uname6', + 'password' : 'uname6', + 'email' : 'email@email.com', + 'first_name' : 'sherlock-fname', + 'last_name' : 'sherlock-lname', + 'address' : 'address', + 'city' : 'city', + 'state' : 'state', + 'country' : 'country', + 'phone-no' : '9999999999'}, + 'event' : { + 'name' : 'event-two', + 'start_date' : '2015-06-01', + 'end_date' : '2015-06-10'}, + 'job' : { + 'name' : 'jobOneInEventTwo', + 'start_date' : '2015-06-01', + 'end_date' : '2015-06-01'}, + 'shift' : { + 'date' : '2015-06-01', + 'start_time' : '09:00', + 'end_time' : '10:00', + 'max_volunteers' : '10'}, + 'vshift' : { + 'start_time' : '16:00', + 'end_time' : '18:00'}} + self.register_dataset(parameters) + + parameters = {'org' : 'org-four', + 'volunteer' : { + 'username' : 'uname7', + 'password' : 'uname7', + 'email' : 'email@email.com', + 'first_name' : 'harvey-fname', + 'last_name' : 'harvey-lname', + 'address' : 'address', + 'city' : 'city', + 'state' : 'state', + 'country' : 'country', + 'phone-no' : '9999999999'}, + 'event' : { + 'name' : 'event-one', + 'start_date' : '2015-06-01', + 'end_date' : '2015-06-10'}, + 'job' : { + 'name' : 'jobThreeInEventOne', + 'start_date' : '2015-06-01', + 'end_date' : '2015-06-01'}, + 'shift' : { + 'date' : '2015-06-01', + 'start_time' : '09:00', + 'end_time' : '10:00', + 'max_volunteers' : '10'}, + 'vshift' : { + 'start_time' : '19:00', + 'end_time' : '19:30'}} + self.register_dataset(parameters) + + parameters = {'org' : 'org-four', + 'volunteer' : { + 'username' : 'uname8', + 'password' : 'uname8', + 'email' : 'email@email.com', + 'first_name' : 'mike-fname', + 'last_name' : 'mike-lname', + 'address' : 'address', + 'city' : 'city', + 'state' : 'state', + 'country' : 'country', + 'phone-no' : '9999999999'}, + 'event' : { + 'name' : 'event-three', + 'start_date' : '2015-06-01', + 'end_date' : '2015-06-10'}, + 'job' : { + 'name' : 'jobOneInEventThree', + 'start_date' : '2015-06-01', + 'end_date' : '2015-06-01'}, + 'shift' : { + 'date' : '2015-06-01', + 'start_time' : '09:00', + 'end_time' : '10:00', + 'max_volunteers' : '10'}, + 'vshift' : { + 'start_time' : '01:00', + 'end_time' : '10:00'}} + self.register_dataset(parameters) + + self.login('admin', 'admin') + self.driver.get(self.live_server_url + self.report_page) + + self.driver.find_element_by_xpath( + '//input[@name = "first_name"]').send_keys('tom') + self.driver.find_element_by_xpath('//form[1]').submit() + + total_no_of_shifts = self.driver.find_element_by_xpath( + '//div[2]/div[4]').text.split(' ')[10].strip('\nTotal') + + total_no_of_hours = self.driver.find_element_by_xpath( + '//div[2]/div[4]').text.split(' ')[-1].strip('\n') + + # 2 shifts of 0.5 hrs and 3.5 hrs + self.assertEqual(total_no_of_shifts, '2') + self.assertEqual(total_no_of_hours, '4.0') + + self.driver.find_element_by_xpath( + '//input[@name = "first_name"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "organization"]').send_keys('org-one') + self.driver.find_element_by_xpath('//form[1]').submit() + + total_no_of_shifts = self.driver.find_element_by_xpath( + '//div[2]/div[4]').text.split(' ')[10].strip('\nTotal') + + total_no_of_hours = self.driver.find_element_by_xpath( + '//div[2]/div[4]').text.split(' ')[-1].strip('\n') + + # 3 shifts of 0.5 hrs, 3:30 hrs and 4 hrs + self.assertEqual(total_no_of_shifts, '3') + self.assertEqual(total_no_of_hours, '8.0') + + self.driver.find_element_by_xpath( + '//input[@name = "first_name"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "organization"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "event_name"]').send_keys('event-four') + # searching for jobTwoInEventFour + self.driver.find_element_by_xpath( + '//input[@name = "job_name"]').send_keys('Two') + self.driver.find_element_by_xpath('//form[1]').submit() + + total_no_of_shifts = self.driver.find_element_by_xpath( + '//div[2]/div[4]').text.split(' ')[10].strip('\nTotal') + + total_no_of_hours = self.driver.find_element_by_xpath( + '//div[2]/div[4]').text.split(' ')[-1].strip('\n') + + # 1 shift of 3:30 hrs + self.assertEqual(total_no_of_shifts, '1') + self.assertEqual(total_no_of_hours, '3.5') + + self.driver.find_element_by_xpath( + '//input[@name = "first_name"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "organization"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "event_name"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "job_name"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "event_name"]').send_keys('one') + self.driver.find_element_by_xpath('//form[1]').submit() + + total_no_of_shifts = self.driver.find_element_by_xpath( + '//div[2]/div[4]').text.split(' ')[10].strip('\nTotal') + + total_no_of_hours = self.driver.find_element_by_xpath( + '//div[2]/div[4]').text.split(' ')[-1].strip('\n') + + # 3 shifts of 0:30 hrs, 4:00 hrs, 1:00 hrs + self.assertEqual(total_no_of_shifts, '3') + self.assertEqual(total_no_of_hours, '5.5') + + self.driver.find_element_by_xpath( + '//input[@name = "first_name"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "organization"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "event_name"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "job_name"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "last_name"]').send_keys('sherlock') + # check case-insensitive + self.driver.find_element_by_xpath( + '//input[@name = "event_name"]').send_keys('two') + self.driver.find_element_by_xpath('//form[1]').submit() + + total_no_of_shifts = self.driver.find_element_by_xpath( + '//div[2]/div[4]').text.split(' ')[10].strip('\nTotal') + + total_no_of_hours = self.driver.find_element_by_xpath( + '//div[2]/div[4]').text.split(' ')[-1].strip('\n') + + # 1 shift of 2:00 hrs + self.assertEqual(total_no_of_shifts, '1') + self.assertEqual(total_no_of_hours, '2.0') diff --git a/vms/administrator/tests/test_settings.py b/vms/administrator/tests/test_settings.py new file mode 100644 index 0000000..9a1ded5 --- /dev/null +++ b/vms/administrator/tests/test_settings.py @@ -0,0 +1,815 @@ +from django.test import TestCase +from django.contrib.staticfiles.testing import LiveServerTestCase + +from django.contrib.auth.models import User +from administrator.models import Administrator +from volunteer.models import Volunteer +from organization.models import Organization #hack to pass travis,Bug in Code + +from selenium import webdriver +from selenium.common.exceptions import NoSuchElementException + + +class Settings(LiveServerTestCase): + ''' + Settings Class contains UI testcases for `Settings` view in + Administrator profile. This view consists of Events, Jobs, Shifts, + Organization tabs. + + Event: + - Create Event + - Edit Event + - Delete Event with No Associated Job + - Delete event with Associated Job + + Job: + - Create Job without any event + - Edit Job + - Delete Job without Assoicated Shift + - Delete Job with Shifts + + Shift: + - Create Shift without any Job + - Edit Shift + - Delete shift + + Organization: + - Create Organization + - Edit Organization + - Replication of Organization + - Delete Org's with registered volunteers + - Delete Org without registered volunteers + ''' + def setUp(self): + admin_user = User.objects.create_user( + username = 'admin', + password = 'admin', + email = 'admin@admin.com') + + Administrator.objects.create( + user = admin_user, + address = 'address', + city = 'city', + state = 'state', + country = 'country', + phone_number = '9999999999', + unlisted_organization = 'organization') + + # create an org prior to registration. Bug in Code + # added to pass CI + Organization.objects.create( + name = 'DummyOrg') + + self.homepage = '/home/' + self.authentication_page = '/authentication/login/' + self.settings_page = '/event/list/' + self.driver = webdriver.Firefox() + self.driver.maximize_window() + super(Settings, self).setUp() + + def tearDown(self): + self.driver.quit() + super(Settings, self).tearDown() + + def login_admin(self): + self.driver.get(self.live_server_url + self.authentication_page) + self.driver.find_element_by_id('id_login').send_keys('admin') + self.driver.find_element_by_id('id_password').send_keys('admin') + self.driver.find_element_by_xpath('//form[1]').submit() + self.driver.find_element_by_link_text('Settings').click() + + self.assertEqual(self.driver.current_url, + self.live_server_url + self.settings_page) + + def test_event_tab(self): + self.login_admin() + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-success').text, + 'There are currently no events. Please create events first.') + + def test_job_tab_and_create_job_without_event(self): + self.login_admin() + self.driver.find_element_by_link_text('Jobs').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + '/job/list/') + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-success').text, + 'There are currently no jobs. Please create jobs first.') + + self.driver.find_element_by_link_text('Create Job').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + '/job/create/') + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-success').text, + 'Please add events to associate with jobs first.') + + def test_shift_tab_and_create_shift_without_job(self): + self.login_admin() + self.driver.find_element_by_link_text('Shifts').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + '/shift/list_jobs/') + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-success').text, + 'There are currently no jobs. Please create jobs first.') + + def register_event_utility(self, event): + self.driver.find_element_by_link_text('Create Event').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + '/event/create/') + + self.driver.find_element_by_xpath( + '//input[@placeholder = "Event Name"]').send_keys( + event[0]) + self.driver.find_element_by_xpath( + '//input[@name = "start_date"]').send_keys( + event[1]) + self.driver.find_element_by_xpath( + '//input[@name = "end_date"]').send_keys( + event[2]) + self.driver.find_element_by_xpath('//form[1]').submit() + + def register_job_utility(self, job): + self.driver.find_element_by_link_text('Jobs').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + '/job/list/') + + self.driver.find_element_by_link_text('Create Job').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + '/job/create/') + + self.driver.find_element_by_xpath( + '//select[@name = "event_id"]').send_keys( + job[0]) + self.driver.find_element_by_xpath( + '//input[@placeholder = "Job Name"]').send_keys( + job[1]) + self.driver.find_element_by_xpath( + '//textarea[@name = "description"]').send_keys( + job[2]) + self.driver.find_element_by_xpath( + '//input[@name = "start_date"]').send_keys( + job[3]) + self.driver.find_element_by_xpath( + '//input[@name = "end_date"]').send_keys( + job[4]) + self.driver.find_element_by_xpath('//form[1]').submit() + + def test_create_event(self): + self.login_admin() + event = ['event-name', '05/20/2015', '05/20/2015'] + self.register_event_utility(event) + + # check event created + self.assertEqual(self.driver.current_url, + self.live_server_url + self.settings_page) + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'event-name') + + def test_edit_event(self): + self.login_admin() + event = ['event-name', '05/20/2015', '05/20/2015'] + self.register_event_utility(event) + + # create event + self.assertEqual(self.driver.current_url, + self.live_server_url + self.settings_page) + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'event-name') + + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, 'Edit') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + self.driver.find_element_by_xpath( + '//input[@placeholder = "Event Name"]').clear() + self.driver.find_element_by_xpath( + '//input[@placeholder = "Event Name"]').send_keys( + 'changed-event-name') + + self.driver.find_element_by_xpath( + '//input[@name = "start_date"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "start_date"]').send_keys( + '06/24/2015') + + self.driver.find_element_by_xpath( + '//input[@name = "end_date"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "end_date"]').send_keys( + '06/24/2015') + + self.driver.find_element_by_xpath('//form[1]').submit() + + # check event edited + self.assertEqual(self.driver.current_url, + self.live_server_url + self.settings_page) + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'changed-event-name') + + def test_delete_event_with_no_associated_job(self): + self.login_admin() + event = ['event-name', '05/20/2015', '05/20/2015'] + self.register_event_utility(event) + + # create event + self.assertEqual(self.driver.current_url, + self.live_server_url + self.settings_page) + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'event-name') + + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[5]').text, 'Delete') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[5]//a').click() + + self.assertNotEqual(self.driver.find_element_by_class_name( + 'panel-danger'), None) + self.assertEqual(self.driver.find_element_by_class_name( + 'panel-heading').text, 'Delete Event') + self.driver.find_element_by_xpath('//form').submit() + + # check event deleted + self.assertEqual(self.driver.current_url, + self.live_server_url + self.settings_page) + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_xpath('//table//tbody') + + def test_delete_event_with_associated_job(self): + self.login_admin() + + # create event + event = ['event-name', '05/20/2015', '05/20/2015'] + self.register_event_utility(event) + + # create job + job = ['event-name', 'job name', 'job description', '05/20/2015', + '05/20/2015'] + self.assertEqual(self.driver.current_url, + self.live_server_url + self.settings_page) + self.register_job_utility(job) + + # check event created + self.driver.get(self.live_server_url + self.settings_page) + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'event-name') + + # delete event + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[5]').text, 'Delete') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[5]//a').click() + + # confirm to delete + self.assertNotEqual(self.driver.find_element_by_class_name( + 'panel-danger'), None) + self.assertEqual(self.driver.find_element_by_class_name( + 'panel-heading').text, 'Delete Event') + self.driver.find_element_by_xpath('//form').submit() + + self.assertNotEqual(self.driver.find_element_by_class_name( + 'alert-danger'), None) + self.assertEqual(self.driver.find_element_by_xpath( + '//div[2]/div[3]/p').text, + 'You cannot delete an event that a job is currently associated with.') + + # check event NOT deleted + self.driver.get(self.live_server_url + self.settings_page) + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'event-name') + + def test_create_job(self): + self.login_admin() + + # register event first to create job + event = ['event-name', '05/20/2015', '05/20/2015'] + self.register_event_utility(event) + + # create job + job = ['event-name', 'job name', 'job description', '05/20/2015', + '05/20/2015'] + self.assertEqual(self.driver.current_url, + self.live_server_url + self.settings_page) + self.register_job_utility(job) + + # check job created + self.assertEqual(self.driver.current_url, + self.live_server_url + '/job/list/') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'job name') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[2]').text, 'event-name') + + def test_edit_job(self): + self.login_admin() + + # register event first to create job + event = ['event-name', '05/20/2015', '05/20/2015'] + self.register_event_utility(event) + + # create job + job = ['event-name', 'job name', 'job description', '05/20/2015', + '05/20/2015'] + self.assertEqual(self.driver.current_url, + self.live_server_url + self.settings_page) + self.register_job_utility(job) + + # check job created + self.assertEqual(self.driver.current_url, + self.live_server_url + '/job/list/') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'job name') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[2]').text, 'event-name') + + # edit job + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[6]').text, 'Edit') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[6]//a').click() + + self.driver.find_element_by_xpath( + '//input[@name = "name"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "name"]').send_keys( + 'changed job name') + + self.driver.find_element_by_xpath( + '//textarea[@name = "description"]').clear() + self.driver.find_element_by_xpath( + '//textarea[@name = "description"]').send_keys( + 'changed-job-description') + + self.driver.find_element_by_xpath( + '//input[@name = "start_date"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "start_date"]').send_keys( + '06/24/2015') + + self.driver.find_element_by_xpath( + '//input[@name = "end_date"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "end_date"]').send_keys( + '06/24/2015') + + self.driver.find_element_by_xpath('//form[1]').submit() + + # check event edited + self.assertEqual(self.driver.current_url, + self.live_server_url + '/job/list/') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'changed job name') + + def test_delete_job_without_associated_shift(self): + self.login_admin() + + # register event first to create job + event = ['event-name', '05/20/2015', '05/20/2015'] + self.register_event_utility(event) + + # create job + job = ['event-name', 'job name', 'job description', '05/20/2015', + '05/20/2015'] + self.assertEqual(self.driver.current_url, + self.live_server_url + self.settings_page) + self.register_job_utility(job) + + # check job created + self.assertEqual(self.driver.current_url, + self.live_server_url + '/job/list/') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'job name') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[2]').text, 'event-name') + + # delete job + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[7]').text, 'Delete') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[7]//a').click() + + self.assertNotEqual(self.driver.find_element_by_class_name( + 'panel-danger'), None) + self.assertEqual(self.driver.find_element_by_class_name( + 'panel-heading').text, 'Delete Job') + self.driver.find_element_by_xpath('//form').submit() + + # check event deleted + self.assertEqual(self.driver.current_url, + self.live_server_url + '/job/list/') + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_xpath('//table//tbody') + + def test_delete_job_with_associated_shifts(self): + self.login_admin() + + # register event + event = ['event-name', '05/20/2015', '05/20/2015'] + self.register_event_utility(event) + + # create job + job = ['event-name', 'job name', 'job description', '05/20/2015', + '05/20/2015'] + self.register_job_utility(job) + + # create shift + self.driver.find_element_by_link_text('Shifts').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + '/shift/list_jobs/') + + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]/td[5]//a').click() + + self.driver.find_element_by_link_text('Create Shift').click() + + self.driver.find_element_by_xpath( + '//input[@name = "date"]').send_keys( + '06/20/2015') + self.driver.find_element_by_xpath( + '//input[@name = "start_time"]').send_keys( + '09:00') + self.driver.find_element_by_xpath( + '//input[@name = "end_time"]').send_keys( + '12:00') + self.driver.find_element_by_xpath( + '//input[@name = "max_volunteers"]').send_keys( + '10') + self.driver.find_element_by_xpath('//form[1]').submit() + + # delete job + self.driver.get(self.live_server_url + '/job/list/') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[7]').text, 'Delete') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[7]//a').click() + + self.assertNotEqual(self.driver.find_element_by_class_name( + 'panel-danger'), None) + self.assertEqual(self.driver.find_element_by_class_name( + 'panel-heading').text, 'Delete Job') + self.driver.find_element_by_xpath('//form').submit() + + self.assertNotEqual(self.driver.find_element_by_class_name( + 'alert-danger'), None) + self.assertEqual(self.driver.find_element_by_xpath( + '//div[2]/div[3]/p').text, + 'You cannot delete a job that a shift is currently associated with.') + + # check job NOT deleted + self.driver.get(self.live_server_url + '/job/list/') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'job name') + + def test_create_shift(self): + self.login_admin() + + # register event to create job + event = ['event-name', '05/20/2015', '05/20/2015'] + self.register_event_utility(event) + + # create job to create shift + job = ['event-name', 'job name', 'job description', '05/20/2015', + '05/20/2015'] + self.register_job_utility(job) + + # create shift + self.driver.find_element_by_link_text('Shifts').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + '/shift/list_jobs/') + + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]/td[5]//a').click() + + self.driver.find_element_by_link_text('Create Shift').click() + + self.driver.find_element_by_xpath( + '//input[@name = "date"]').send_keys( + '06/20/2015') + self.driver.find_element_by_xpath( + '//input[@name = "start_time"]').send_keys( + '09:00') + self.driver.find_element_by_xpath( + '//input[@name = "end_time"]').send_keys( + '12:00') + self.driver.find_element_by_xpath( + '//input[@name = "max_volunteers"]').send_keys( + '10') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertNotEqual(self.driver.find_elements_by_xpath( + '//table//tbody'), None) + + def test_edit_shift(self): + self.login_admin() + + # register event to create job + event = ['event-name', '05/20/2015', '05/20/2015'] + self.register_event_utility(event) + + # create job to create shift + job = ['event-name', 'job name', 'job description', '05/20/2015', + '05/20/2015'] + self.register_job_utility(job) + + # create shift + self.driver.find_element_by_link_text('Shifts').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + '/shift/list_jobs/') + + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]/td[5]//a').click() + + self.driver.find_element_by_link_text('Create Shift').click() + + self.driver.find_element_by_xpath( + '//input[@name = "date"]').send_keys( + '06/20/2015') + self.driver.find_element_by_xpath( + '//input[@name = "start_time"]').send_keys( + '09:00') + self.driver.find_element_by_xpath( + '//input[@name = "end_time"]').send_keys( + '12:00') + self.driver.find_element_by_xpath( + '//input[@name = "max_volunteers"]').send_keys( + '10') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertNotEqual(self.driver.find_elements_by_xpath( + '//table//tbody'), None) + + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[5]').text, 'Edit') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[5]//a').click() + + self.driver.find_element_by_xpath('//input[@name = "date"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "date"]').send_keys( + '06/24/2015') + + self.driver.find_element_by_xpath( + '//input[@name = "start_time"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "start_time"]').send_keys( + '10:00') + + self.driver.find_element_by_xpath( + '//input[@name = "end_time"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "end_time"]').send_keys( + '13:00') + + self.driver.find_element_by_xpath( + '//input[@name = "max_volunteers"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "max_volunteers"]').send_keys( + '5') + + self.driver.find_element_by_xpath('//form[1]').submit() + + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('help-block') + + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'June 24, 2015') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[2]').text, '10 a.m.') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[3]').text, '1 p.m.') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, '5') + + def test_delete_shift(self): + self.login_admin() + + # register event to create job + event = ['event-name', '05/20/2015', '05/20/2015'] + self.register_event_utility(event) + + # create job to create shift + job = ['event-name', 'job name', 'job description', '05/20/2015', + '05/20/2015'] + self.register_job_utility(job) + + # create shift + self.driver.find_element_by_link_text('Shifts').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + '/shift/list_jobs/') + + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]/td[5]//a').click() + + self.driver.find_element_by_link_text('Create Shift').click() + + self.driver.find_element_by_xpath( + '//input[@name = "date"]').send_keys( + '06/20/2015') + self.driver.find_element_by_xpath( + '//input[@name = "start_time"]').send_keys( + '09:00') + self.driver.find_element_by_xpath( + '//input[@name = "end_time"]').send_keys( + '12:00') + self.driver.find_element_by_xpath( + '//input[@name = "max_volunteers"]').send_keys( + '10') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertNotEqual(self.driver.find_elements_by_xpath( + '//table//tbody'), None) + + # delete shift + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[6]').text, 'Delete') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[6]//a').click() + + # confirm on delete + self.assertNotEqual(self.driver.find_element_by_class_name( + 'panel-danger'), None) + self.assertEqual(self.driver.find_element_by_class_name( + 'panel-heading').text, 'Delete Shift') + self.driver.find_element_by_xpath('//form').submit() + + # check deletion of shift + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'job name') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[5]').text, 'Shifts') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[5]//a').click() + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-success').text, + 'There are currently no shifts. Please create shifts first.') + + def test_organization(self): + self.login_admin() + + self.driver.find_element_by_link_text('Organizations').click() + self.assertEqual(self.driver.current_url, self.live_server_url + + '/organization/list/') + + self.driver.find_element_by_link_text('Create Organization').click() + self.assertEqual(self.driver.current_url, self.live_server_url + + '/organization/create/') + + # Test all valid characters for organization + # [(A-Z)|(a-z)|(0-9)|(\s)|(\-)|(:)] + self.driver.find_element_by_xpath('//input[@name = "name"]').send_keys( + 'Org-name 92:4 CA') + self.driver.find_element_by_xpath('//form[1]').submit() + # tr[2] since one dummy org already created in Setup, due to code-bug + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[2]//td[1]').text, 'Org-name 92:4 CA') + + def test_replication_of_organization(self): + self.login_admin() + + self.driver.find_element_by_link_text('Organizations').click() + self.assertEqual(self.driver.current_url, self.live_server_url + + '/organization/list/') + + self.driver.find_element_by_link_text('Create Organization').click() + self.assertEqual(self.driver.current_url, self.live_server_url + + '/organization/create/') + + self.driver.find_element_by_xpath('//input[@name = "name"]').send_keys( + 'Organization') + self.driver.find_element_by_xpath('//form[1]').submit() + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[2]//td[1]').text, 'Organization') + + # Create same orgnization again + self.driver.find_element_by_link_text('Create Organization').click() + self.assertEqual(self.driver.current_url, self.live_server_url + + '/organization/create/') + + self.driver.find_element_by_xpath('//input[@name = "name"]').send_keys( + 'Organization') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertEqual(self.driver.find_element_by_xpath( + '//p[@class = "help-block"]').text, + 'Organization with this Name already exists.') + + def test_edit_org(self): + # create org + self.login_admin() + + self.driver.find_element_by_link_text('Organizations').click() + self.assertEqual(self.driver.current_url, self.live_server_url + + '/organization/list/') + + self.driver.find_element_by_link_text('Create Organization').click() + self.assertEqual(self.driver.current_url, self.live_server_url + + '/organization/create/') + + self.driver.find_element_by_xpath('//input[@name = "name"]').send_keys( + 'organization') + self.driver.find_element_by_xpath('//form[1]').submit() + + # edit org + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[2]//td[2]').text, 'Edit') + self.driver.find_element_by_xpath( + '//table//tbody//tr[2]//td[2]//a').click() + + self.driver.find_element_by_xpath( + '//input[@name = "name"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "name"]').send_keys('changed-organization') + self.driver.find_element_by_xpath('//form[1]').submit() + + # check edited org + org_list = [] + org_list.append(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text) + org_list.append(self.driver.find_element_by_xpath( + '//table//tbody//tr[2]//td[1]').text) + + self.assertTrue('changed-organization' in org_list) + + def test_delete_org_without_associated_users(self): + # create org + self.login_admin() + + self.driver.find_element_by_link_text('Organizations').click() + self.assertEqual(self.driver.current_url, self.live_server_url + + '/organization/list/') + + self.driver.find_element_by_link_text('Create Organization').click() + self.assertEqual(self.driver.current_url, self.live_server_url + + '/organization/create/') + + self.driver.find_element_by_xpath('//input[@name = "name"]').send_keys( + 'organization') + self.driver.find_element_by_xpath('//form[1]').submit() + + # delete org + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[2]//td[3]').text, 'Delete') + self.driver.find_element_by_xpath( + '//table//tbody//tr[2]//td[3]//a').click() + + # confirm on delete + self.assertNotEqual(self.driver.find_element_by_class_name( + 'panel-danger'), None) + self.assertEqual(self.driver.find_element_by_class_name( + 'panel-heading').text, 'Delete Organization') + self.driver.find_element_by_xpath('//form').submit() + + # check org deleted + # There should only be one org entry in the table shown. + # One, because of dummy-org inserted in setUp and not zero + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_xpath('//table//tbody//tr[2]') + + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'DummyOrg') + + def test_delete_org_with_associated_users(self): + # create org + self.login_admin() + + self.driver.find_element_by_link_text('Organizations').click() + self.driver.find_element_by_link_text('Create Organization').click() + self.driver.find_element_by_xpath('//input[@name = "name"]').send_keys( + 'organization') + self.driver.find_element_by_xpath('//form[1]').submit() + + # create Volunteer with Org as "organzization" + volunteer_user = User.objects.create_user( + username = 'volunteer', + password = 'volunteer', + email = 'volunteer@volunteer.com') + + Volunteer.objects.create( + user = volunteer_user, + address = 'address', + city = 'city', + state = 'state', + country = 'country', + phone_number = '9999999999', + organization = Organization.objects.get( + name = 'organization')) + + # delete org + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[2]//td[3]').text, 'Delete') + self.driver.find_element_by_xpath( + '//table//tbody//tr[2]//td[3]//a').click() + + # confirm on delete + self.assertNotEqual(self.driver.find_element_by_class_name( + 'panel-danger'), None) + self.assertEqual(self.driver.find_element_by_class_name( + 'panel-heading').text, 'Delete Organization') + self.driver.find_element_by_xpath('//form').submit() + + # check org not deleted message received + self.assertNotEqual(self.driver.find_element_by_class_name( + 'alert-danger'), None) + self.assertEqual(self.driver.find_element_by_xpath( + '//div[2]/div[3]/p').text, + 'You cannot delete an organization that users are currently associated with.') diff --git a/vms/administrator/tests/test_unit.py b/vms/administrator/tests/test_unit.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/vms/administrator/tests/test_unit.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/vms/event/tests/__init__.py b/vms/event/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vms/event/tests/test_shiftSignUp.py b/vms/event/tests/test_shiftSignUp.py new file mode 100644 index 0000000..3a2ddf5 --- /dev/null +++ b/vms/event/tests/test_shiftSignUp.py @@ -0,0 +1,263 @@ +from django.test import TestCase +from django.contrib.staticfiles.testing import LiveServerTestCase + +from django.contrib.auth.models import User +from volunteer.models import Volunteer +from event.models import Event +from job.models import Job +from shift.models import Shift, VolunteerShift + +from selenium import webdriver +from selenium.common.exceptions import NoSuchElementException + +from organization.models import Organization #hack to pass travis,Bug in Code + + +class ShiftSignUp(LiveServerTestCase): + ''' + ''' + def setUp(self): + volunteer_user = User.objects.create_user( + username = 'volunteer', + password = 'volunteer', + email = 'volunteer@volunteer.com') + + Volunteer.objects.create( + user = volunteer_user, + address = 'address', + city = 'city', + state = 'state', + country = 'country', + phone_number = '9999999999', + unlisted_organization = 'organization') + + # create an org prior to registration. Bug in Code + # added to pass CI + Organization.objects.create( + name = 'DummyOrg') + + self.homepage = '/home/' + self.authentication_page = '/authentication/login/' + self.driver = webdriver.Firefox() + self.driver.implicitly_wait(5) + self.driver.maximize_window() + super(ShiftSignUp, self).setUp() + + def tearDown(self): + self.driver.quit() + super(ShiftSignUp, self).tearDown() + + def login(self): + self.driver.get(self.live_server_url + self.authentication_page) + self.driver.find_element_by_id('id_login').send_keys('volunteer') + self.driver.find_element_by_id('id_password').send_keys('volunteer') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertEqual(self.driver.current_url, + self.live_server_url + self.homepage) + + def register_event_utility(self): + Event.objects.create( + name = 'event', + start_date = '2015-06-15', + end_date = '2015-06-15') + + def register_job_utility(self): + Job.objects.create( + name = 'job', + start_date = '2015-06-15', + end_date = '2015-06-15', + event = Event.objects.get(name = 'event')) + + def register_shift_utility(self): + Shift.objects.create( + date = '2015-06-15', + start_time = '09:00', + end_time = '15:00', + max_volunteers ='6', + job = Job.objects.get(name = 'job')) + + def test_events_page_with_no_events(self): + self.login() + + # open Shift Sign Up + self.driver.find_element_by_link_text('Shift Sign Up').click() + + self.assertEqual(self.driver.find_element_by_class_name('alert-info').text, + 'There are currently no events.') + + def test_jobs_page_with_no_jobs(self): + self.login() + + self.register_event_utility() + + # open Shift Sign Up + self.driver.find_element_by_link_text('Shift Sign Up').click() + + # on event page + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, 'View Jobs') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # arrived on jobs page with no jobs + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_tag_name('table') + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-info').text, 'There are currently no jobs for event.') + + def test_signup_shifts_with_no_shifts(self): + # login + self.login() + + self.register_event_utility() + self.register_job_utility() + + # open Shift Sign Up + self.driver.find_element_by_link_text('Shift Sign Up').click() + + # on event page + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, 'View Jobs') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # on jobs page + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'job') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, 'View Shifts') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # arrived on shifts page with no shift + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_tag_name('table') + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-info').text, 'There are currently no shifts for the job job.') + + def test_signup_shifts_with_registered_shifts(self): + # login + self.login() + + self.register_event_utility() + self.register_job_utility() + self.register_shift_utility() + + # open Shift Sign Up + self.driver.find_element_by_link_text('Shift Sign Up').click() + + # on event page + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, 'View Jobs') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # on jobs page + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, 'View Shifts') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # on shifts page + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, 'Sign Up') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # confirm shift assignment + self.driver.find_element_by_xpath('//form[1]').submit() + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('alert-danger') + + # check shift signed up + self.assertEqual(self.driver.find_element_by_xpath( + 'html/body/div[2]/h3').text, + 'Upcoming Shifts') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, + 'job') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[2]').text, + 'June 15, 2015') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[3]').text, + '9 a.m.') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + '3 p.m.') + + def test_signup_for_same_shift_again(self): + # login + self.login() + + self.register_event_utility() + self.register_job_utility() + self.register_shift_utility() + + # open Shift Sign Up + self.driver.find_element_by_link_text('Shift Sign Up').click() + + # events shown in table + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('alert-info') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'View Jobs') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # on jobs page + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'View Shifts') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # on shifts page, Sign up this shift ! + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'Sign Up') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # confirm on shift sign up + self.driver.find_element_by_xpath('//form[1]').submit() + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('alert-danger') + + # sign up same shift again + # open Shift Sign Up + self.driver.find_element_by_link_text('Shift Sign Up').click() + + # events page + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('alert-info') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'View Jobs') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # on jobs page + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'View Shifts') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # on shifts page, sign up again + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'Sign Up') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # confirm on shift sign up + self.driver.find_element_by_xpath('//form[1]').submit() + + # check error on signing up same shift + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-danger').text, + 'Error\n\nYou have already signed up for this shift. Please sign up for a different shift.') + diff --git a/vms/event/tests/test_unit.py b/vms/event/tests/test_unit.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/vms/event/tests/test_unit.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/vms/home/tests/__init__.py b/vms/home/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vms/home/tests/test_functional.py b/vms/home/tests/test_functional.py new file mode 100644 index 0000000..de8aa1c --- /dev/null +++ b/vms/home/tests/test_functional.py @@ -0,0 +1,537 @@ +from django.test import TestCase +from django.contrib.staticfiles.testing import LiveServerTestCase + +from django.contrib.auth.models import User + +from selenium import webdriver +from selenium.common.exceptions import NoSuchElementException + +from volunteer.models import Volunteer +from administrator.models import Administrator +from organization.models import Organization #hack to pass travis,Bug in Code + +import re + + +class TestAccessControl(LiveServerTestCase): + ''' + TestAccessControl class contains the functional tests to check Admin and + Volunteer can access '/home' view of VMS. Following tests are included: + Administrator: + - Login admin with correct credentials + - Login admin with incorrect credentials + Volunteer: + - Login volunteer with correct credentials + - Login volunteer with incorrect credentials + ''' + def setUp(self): + admin_user = User.objects.create_user( + username = 'admin', + password = 'admin', + email = 'admin@admin.com') + + volunteer_user = User.objects.create_user( + username = 'volunteer', + password = 'volunteer', + email = 'volunteer@volunteer.com') + + Administrator.objects.create( + user = admin_user, + address = 'address', + city = 'city', + state = 'state', + country = 'country', + phone_number = '9999999999', + unlisted_organization = 'organization') + + Volunteer.objects.create( + user = volunteer_user, + address = 'address', + city = 'city', + state = 'state', + country = 'country', + phone_number = '9999999999', + unlisted_organization = 'organization') + + # create an org prior to registration. Bug in Code + # added to pass CI + Organization.objects.create( + name = 'DummyOrg') + + self.homepage = '/home/' + self.authentication_page = '/authentication/login/' + self.driver = webdriver.Firefox() + self.driver.maximize_window() + super(TestAccessControl, self).setUp() + + def tearDown(self): + self.driver.quit() + super(TestAccessControl, self).tearDown() + + def test_correct_admin_credentials(self): + ''' + Method to simulate logging in of a valid admin user and check if they + redirected to '/home' and no errors are generated. + ''' + self.driver.get(self.live_server_url + self.homepage) + self.driver.find_element_by_link_text('Log In').click() + + self.assertEqual(self.driver.current_url, self.live_server_url + + self.authentication_page) + + self.driver.find_element_by_id('id_login').send_keys('admin') + self.driver.find_element_by_id('id_password').send_keys('admin') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertEqual(self.driver.current_url, self.live_server_url + + self.homepage) + + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('alert-danger') + + def test_incorrect_admin_credentials(self): + ''' + Method to simulate logging in of an Invalid admin user and check if + they are displayed an error and redirected to login page again. + ''' + self.driver.get(self.live_server_url + self.homepage) + self.driver.find_element_by_link_text('Log In').click() + + self.assertEqual(self.driver.current_url, self.live_server_url + + self.authentication_page) + + self.driver.find_element_by_id('id_login').send_keys('admin') + self.driver.find_element_by_id('id_password').send_keys('wrong_password') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertNotEqual(self.driver.current_url, self.live_server_url + + self.homepage) + + self.assertEqual(self.driver.current_url, self.live_server_url + + self.authentication_page) + + self.assertNotEqual(self.driver.find_element_by_class_name( + 'alert-danger'), None) + + def test_correct_volunteer_credentials(self): + ''' + Method to simulate logging in of a valid volunteer user and check if + they are redirected to '/home' + ''' + self.driver.get(self.live_server_url + self.homepage) + self.driver.find_element_by_link_text('Log In').click() + + self.assertEqual(self.driver.current_url, self.live_server_url + + self.authentication_page) + + self.driver.find_element_by_id('id_login').send_keys('volunteer') + self.driver.find_element_by_id('id_password').send_keys('volunteer') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertEqual(self.driver.current_url, self.live_server_url + + self.homepage) + + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('alert-danger') + + def test_incorrect_volunteer_credentials(self): + ''' + Method to simulate logging in of a Invalid volunteer user and check if + they are displayed an error and redirected to login page again. + ''' + self.driver.get(self.live_server_url + self.homepage) + self.driver.find_element_by_link_text('Log In').click() + + self.assertEqual(self.driver.current_url, self.live_server_url + + self.authentication_page) + + self.driver.find_element_by_id('id_login').send_keys('volunteer') + self.driver.find_element_by_id('id_password').send_keys('wrong_password') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertNotEqual(self.driver.current_url, self.live_server_url + + self.homepage) + + self.assertEqual(self.driver.current_url, self.live_server_url + + self.authentication_page) + + self.assertNotEqual(self.driver.find_element_by_class_name( + 'alert-danger'), None) + + +class CheckURLAccess(LiveServerTestCase): + ''' + CheckURLAccess contains methods to browse(via URL) a volunteer page view + after logging in from an admin account and vice-versa. Tests included: + - Admin cannot access volunteer URL's + - Volunteer cannot access admin URL's + ''' + def setUp(self): + admin_user = User.objects.create_user( + username = 'admin', + password = 'admin', + email = 'admin@admin.com') + + volunteer_user = User.objects.create_user( + username = 'volunteer', + password = 'volunteer', + email = 'volunteer@volunteer.com') + + Administrator.objects.create( + user = admin_user, + address = 'address', + city = 'city', + state = 'state', + country = 'country', + phone_number = '9999999999', + unlisted_organization = 'organization') + + Volunteer.objects.create( + user = volunteer_user, + address = 'address', + city = 'city', + state = 'state', + country = 'country', + phone_number = '9999999999', + unlisted_organization = 'organization') + + self.authentication_page = '/authentication/login/' + self.driver = webdriver.Firefox() + self.driver.maximize_window() + super(CheckURLAccess, self).setUp() + + def tearDown(self): + self.driver.quit() + super(CheckURLAccess, self).tearDown() + + def test_admin_cannot_access_volunteer_urls(self): + ''' + Method logins an admin user and tries to surf volunteer pages through + url. The volunteer views should return a 403 error to deny access. + ''' + self.driver.get(self.live_server_url + self.authentication_page) + + self.driver.find_element_by_id('id_login').send_keys('admin') + self.driver.find_element_by_id('id_password').send_keys('admin') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.driver.get(self.live_server_url + + '/shift/view_volunteer_shifts/1') + page_source = self.driver.page_source + error = re.search('403', page_source) + self.assertNotEqual(error, None) + + self.driver.get(self.live_server_url + '/shift/view_hours/1') + page_source = self.driver.page_source + error = re.search('403', page_source) + self.assertNotEqual(error, None) + + self.driver.get(self.live_server_url + '/event/list_sign_up/1') + page_source = self.driver.page_source + error = re.search('403', page_source) + self.assertNotEqual(error, None) + + self.driver.get(self.live_server_url + '/volunteer/report/1') + page_source = self.driver.page_source + error = re.search('403', page_source) + self.assertNotEqual(error, None) + + self.driver.get(self.live_server_url + '/volunteer/profile/1') + page_source = self.driver.page_source + error = re.search('403', page_source) + self.assertNotEqual(error, None) + + def test_volunteer_cannot_access_admin_urls(self): + ''' + Method logins a volunteer and tries to surf admin page views through url. + The admin views should return a 403 error to deny access. + ''' + self.driver.get(self.live_server_url + self.authentication_page) + + self.driver.find_element_by_id('id_login').send_keys('volunteer') + self.driver.find_element_by_id('id_password').send_keys('volunteer') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.driver.get(self.live_server_url + '/volunteer/search/') + page_source = self.driver.page_source + error = re.search('403', page_source) + self.assertNotEqual(error, None) + + self.driver.get(self.live_server_url + '/shift/volunteer_search/') + page_source = self.driver.page_source + error = re.search('403', page_source) + self.assertNotEqual(error, None) + + self.driver.get(self.live_server_url + '/administrator/report/') + page_source = self.driver.page_source + error = re.search('403', page_source) + self.assertNotEqual(error, None) + + self.driver.get(self.live_server_url + '/administrator/settings/') + page_source = self.driver.page_source + error = re.search('403', page_source) + self.assertNotEqual(error, None) + + self.driver.get(self.live_server_url + + '/registration/signup_administrator/') + page_source = self.driver.page_source + error = re.search('403', page_source) + self.assertNotEqual(error, None) + + +class CheckPageContent(LiveServerTestCase): + ''' + This Class contains methods to check if an administrator or a volunteer + are provided their respective views links on their dashboard. + - Check admin page content + - check volunteer page content + ''' + def setUp(self): + admin_user = User.objects.create_user( + username = 'admin', + password = 'admin', + email = 'admin@admin.com') + + volunteer_user = User.objects.create_user( + username = 'volunteer', + password = 'volunteer', + email = 'volunteer@volunteer.com') + + Administrator.objects.create( + user = admin_user, + address = 'address', + city = 'city', + state = 'state', + country = 'country', + phone_number = '9999999999', + unlisted_organization = 'organization') + + Volunteer.objects.create( + user = volunteer_user, + address = 'address', + city = 'city', + state = 'state', + country = 'country', + phone_number = '9999999999', + unlisted_organization = 'organization') + + self.authentication_page = '/authentication/login/' + self.driver = webdriver.Firefox() + self.driver.maximize_window() + super(CheckPageContent, self).setUp() + + def tearDown(self): + self.driver.quit() + super(CheckPageContent, self).tearDown() + + def test_check_admin_page_content(self): + ''' + Check if an admin user has following functionalities on its home page. + - Volunteer Search + - Manage Volunteer Shift + - Report + - Settings + - Create Admin Account + ''' + self.driver.get(self.live_server_url + self.authentication_page) + + self.driver.find_element_by_id('id_login').send_keys('admin') + self.driver.find_element_by_id('id_password').send_keys('admin') + self.driver.find_element_by_xpath('//form[1]').submit() + + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_link_text('Log In') + + self.assertNotEqual(self.driver.find_element_by_link_text( + 'Volunteer Search'), None) + self.assertNotEqual(self.driver.find_element_by_link_text( + 'Manage Volunteer Shifts'), None) + self.assertNotEqual(self.driver.find_element_by_link_text( + 'Report'), None) + self.assertNotEqual(self.driver.find_element_by_link_text( + 'Settings'), None) + self.assertNotEqual(self.driver.find_element_by_link_text( + 'Create Admin Account'), None) + self.assertNotEqual(self.driver.find_element_by_link_text( + 'Log Out'), None) + + def test_check_volunteer_page_content(self): + ''' + Check if a volunteer user has following functionalities on its home + page. + - UpComing Shift + - Shift Hours + - Shift Sign Up + - Report + - Profile + ''' + self.driver.get(self.live_server_url + self.authentication_page) + + self.driver.find_element_by_id('id_login').send_keys('volunteer') + self.driver.find_element_by_id('id_password').send_keys('volunteer') + self.driver.find_element_by_xpath('//form[1]').submit() + + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_link_text('Log In') + + self.assertNotEqual(self.driver.find_element_by_link_text( + 'Upcoming Shifts'), None) + self.assertNotEqual(self.driver.find_element_by_link_text( + 'Shift Hours'), None) + self.assertNotEqual(self.driver.find_element_by_link_text( + 'Shift Sign Up'), None) + self.assertNotEqual(self.driver.find_element_by_link_text( + 'Report'), None) + self.assertNotEqual(self.driver.find_element_by_link_text( + 'Profile'), None) + self.assertNotEqual(self.driver.find_element_by_link_text( + 'Log Out'), None) + +class CheckRedirection(LiveServerTestCase): + ''' + CheckRedirection class contains test cases to check if all links + in the nav-bar for admin and volunteer page redirect to desired + views. + Admin views nav-bar consists of: + - Volunteer Search + - Manage Volunteer Shifts + - Report + - Settings + - Create Admin Account + - Logout + + Volunteer views nav-bar consists of: + - Upcoming Shifts + - Shift Hours + - Sihft SignUp + - Report + - Profile + - Logout + ''' + def setUp(self): + admin_user = User.objects.create_user( + username = 'admin', + password = 'admin', + email = 'admin@admin.com') + + volunteer_user = User.objects.create_user( + username = 'volunteer', + password = 'volunteer', + email = 'volunteer@volunteer.com') + + Administrator.objects.create( + user = admin_user, + address = 'address', + city = 'city', + state = 'state', + country = 'country', + phone_number = '9999999999', + unlisted_organization = 'organization') + + Volunteer.objects.create( + user = volunteer_user, + address = 'address', + city = 'city', + state = 'state', + country = 'country', + phone_number = '9999999999', + unlisted_organization = 'organization') + + self.volunteer_id = str(Volunteer.objects.get(user__username = + 'volunteer').pk) + + self.authentication_page = '/authentication/login/' + self.homepage = '/home/' + self.driver = webdriver.Firefox() + self.driver.maximize_window() + super(CheckRedirection, self).setUp() + + def tearDown(self): + self.driver.quit() + super(CheckRedirection, self).tearDown() + + def test_admin_page_redirection(self): + self.driver.get(self.live_server_url + self.authentication_page) + + self.driver.find_element_by_id('id_login').send_keys('admin') + self.driver.find_element_by_id('id_password').send_keys('admin') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertEqual(self.driver.current_url, self.live_server_url + + self.homepage) + + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_link_text('Log In') + + volunteer_search_link = self.driver.find_element_by_link_text( + 'Volunteer Search').get_attribute('href') + self.assertEqual(volunteer_search_link, self.live_server_url + + '/volunteer/search/') + + manage_volunteer_shift_link = self.driver.find_element_by_link_text( + 'Manage Volunteer Shifts').get_attribute('href') + self.assertEqual(manage_volunteer_shift_link, self.live_server_url + + '/shift/volunteer_search/') + + report_link = self.driver.find_element_by_link_text( + 'Report').get_attribute('href') + self.assertEqual(report_link, self.live_server_url + + '/administrator/report/') + + settings_link = self.driver.find_element_by_link_text( + 'Settings').get_attribute('href') + self.assertEqual(settings_link, self.live_server_url + + '/administrator/settings/') + + creat_account_link = self.driver.find_element_by_link_text( + 'Create Admin Account').get_attribute('href') + self.assertEqual(creat_account_link, self.live_server_url + + '/registration/signup_administrator/') + + logout_link = self.driver.find_element_by_link_text( + 'Log Out').get_attribute('href') + self.assertEqual(logout_link, self.live_server_url + + '/authentication/logout/') + + def test_volunteer_page_redirection(self): + self.driver.get(self.live_server_url + self.authentication_page) + + self.driver.find_element_by_id('id_login').send_keys('volunteer') + self.driver.find_element_by_id('id_password').send_keys('volunteer') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertEqual(self.driver.current_url, self.live_server_url + + self.homepage) + + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_link_text('Log In') + + upcoming_shift_link = self.driver.find_element_by_link_text( + 'Upcoming Shifts').get_attribute('href') + self.assertEqual(upcoming_shift_link, self.live_server_url + + '/shift/view_volunteer_shifts/' + self.volunteer_id) + + shift_hours_link = self.driver.find_element_by_link_text( + 'Shift Hours').get_attribute('href') + self.assertEqual(shift_hours_link, self.live_server_url + + '/shift/view_hours/' + self.volunteer_id) + + shift_signup_link = self.driver.find_element_by_link_text( + 'Shift Sign Up').get_attribute('href') + self.assertEqual(shift_signup_link, self.live_server_url + + '/event/list_sign_up/' + self.volunteer_id) + + report_link = self.driver.find_element_by_link_text( + 'Report').get_attribute('href') + self.assertEqual(report_link, self.live_server_url + + '/volunteer/report/' + self.volunteer_id) + + profile_link = self.driver.find_element_by_link_text( + 'Profile').get_attribute('href') + self.assertEqual(profile_link, self.live_server_url + + '/volunteer/profile/' + self.volunteer_id) + + logout_link = self.driver.find_element_by_link_text( + 'Log Out').get_attribute('href') + self.assertEqual(logout_link, self.live_server_url + + '/authentication/logout/') diff --git a/vms/home/tests/test_unit.py b/vms/home/tests/test_unit.py new file mode 100644 index 0000000..2e9cb5f --- /dev/null +++ b/vms/home/tests/test_unit.py @@ -0,0 +1 @@ +from django.test import TestCase diff --git a/vms/registration/tests/__init__.py b/vms/registration/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vms/registration/tests/test_functional_admin.py b/vms/registration/tests/test_functional_admin.py new file mode 100644 index 0000000..8cc12d7 --- /dev/null +++ b/vms/registration/tests/test_functional_admin.py @@ -0,0 +1,318 @@ +from django.test import TestCase +from django.contrib.staticfiles.testing import LiveServerTestCase + +from django.contrib.auth.models import User + +import re + +from selenium import webdriver +from selenium.common.exceptions import NoSuchElementException + +from organization.models import Organization #hack to pass travis,Bug in Code + + +class SignUpAdmin(LiveServerTestCase): + ''' + SignUpAdmin Class contains tests to register a admin User + Tests included. + + Name Fields: + - Test Null values + - Test legit characters in first_name, last_name fields + - Register admin with already registered username + - Test length of name fields ( 30 char, limit) + + Address Field: + - Test Null Values + - Test legit characters as per Models defined + + City Field: + - Test Null Values + - Test legit characters as per Models defined + ''' + def setUp(self): + # create an org prior to registration. Bug in Code + # added to pass CI + Organization.objects.create( + name = 'DummyOrg') + + self.homepage = '/home/' + self.admin_registration_page = '/registration/signup_administrator/' + self.authentication_page = '/authentication/login/' + self.driver = webdriver.Firefox() + self.driver.maximize_window() + super(SignUpAdmin, self).setUp() + + def tearDown(self): + self.driver.quit() + super(SignUpAdmin, self).tearDown() + + def test_null_values(self): + self.driver.get(self.live_server_url + self.admin_registration_page) + + self.driver.find_element_by_id('id_username').send_keys('') + self.driver.find_element_by_id('id_password').send_keys('') + self.driver.find_element_by_id('id_first_name').send_keys('') + self.driver.find_element_by_id('id_last_name').send_keys('') + self.driver.find_element_by_id('id_email').send_keys('') + self.driver.find_element_by_id('id_address').send_keys('') + self.driver.find_element_by_id('id_city').send_keys('') + self.driver.find_element_by_id('id_state').send_keys('') + self.driver.find_element_by_id('id_country').send_keys('') + self.driver.find_element_by_id('id_phone_number').send_keys('') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertNotEqual(self.driver.find_elements_by_class_name('help-block'), + None) + + def test_name_fields(self): + # register valid admin user + self.driver.get(self.live_server_url + self.admin_registration_page) + + self.driver.find_element_by_id('id_username').send_keys('admin-username') + self.driver.find_element_by_id('id_password').send_keys('admin-password!@#$%^&*()_') + self.driver.find_element_by_id('id_first_name').send_keys('admin-first-name') + self.driver.find_element_by_id('id_last_name').send_keys('admin-last-name') + self.driver.find_element_by_id('id_email').send_keys('email@systers.org') + self.driver.find_element_by_id('id_address').send_keys('admin-address') + self.driver.find_element_by_id('id_city').send_keys('admin-city') + self.driver.find_element_by_id('id_state').send_keys('admin-state') + self.driver.find_element_by_id('id_country').send_keys('admin-country') + self.driver.find_element_by_id('id_phone_number').send_keys('9999999999') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('admin-org') + self.driver.find_element_by_xpath('//form[1]').submit() + + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('help-block') + + # register a user again with username same as already registered user + self.assertEqual(self.driver.current_url, self.live_server_url + + self.homepage) + + self.driver.get(self.live_server_url + self.admin_registration_page) + + self.driver.find_element_by_id('id_username').send_keys('admin-username') + self.driver.find_element_by_id('id_password').send_keys('admin-password!@#$%^&*()_') + self.driver.find_element_by_id('id_first_name').send_keys('admin-first-name') + self.driver.find_element_by_id('id_last_name').send_keys('admin-last-name') + self.driver.find_element_by_id('id_email').send_keys('email@systers.org') + self.driver.find_element_by_id('id_address').send_keys('admin-address') + self.driver.find_element_by_id('id_city').send_keys('admin-city') + self.driver.find_element_by_id('id_state').send_keys('admin-state') + self.driver.find_element_by_id('id_country').send_keys('admin-country') + self.driver.find_element_by_id('id_phone_number').send_keys('9999999999') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('admin-org') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertNotEqual(self.driver.find_elements_by_class_name('help-block'), + None) + self.assertEqual(self.driver.find_element_by_xpath("id('div_id_username')/div/p/strong").text, + 'User with this Username already exists.') + + # test numeric characters in first-name, last-name + self.driver.get(self.live_server_url + self.admin_registration_page) + + self.driver.find_element_by_id('id_username').send_keys('admin-username-1') + self.driver.find_element_by_id('id_password').send_keys('admin-password!@#$%^&*()_') + self.driver.find_element_by_id('id_first_name').send_keys('admin-first-name-1') + self.driver.find_element_by_id('id_last_name').send_keys('admin-last-name-1') + self.driver.find_element_by_id('id_email').send_keys('email@systers.org') + self.driver.find_element_by_id('id_address').send_keys('admin-address') + self.driver.find_element_by_id('id_city').send_keys('admin-city') + self.driver.find_element_by_id('id_state').send_keys('admin-state') + self.driver.find_element_by_id('id_country').send_keys('admin-country') + self.driver.find_element_by_id('id_phone_number').send_keys('9999999999') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('admin-org') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertNotEqual(self.driver.find_elements_by_class_name('help-block'), + None) + self.assertEqual(self.driver.find_element_by_xpath("id('div_id_first_name')/div/p/strong").text, + 'Enter a valid value.') + self.assertEqual(self.driver.find_element_by_xpath("id('div_id_last_name')/div/p/strong").text, + 'Enter a valid value.') + + # test special characters in first-name, last-name + self.driver.get(self.live_server_url + self.admin_registration_page) + + self.driver.find_element_by_id('id_username').send_keys('admin-username-1') + self.driver.find_element_by_id('id_password').send_keys('admin-password!@#$%^&*()_') + self.driver.find_element_by_id('id_first_name').send_keys('name-!@#$%^&*()_') + self.driver.find_element_by_id('id_last_name').send_keys('name-!@#$%^&*()_') + self.driver.find_element_by_id('id_email').send_keys('email@systers.org') + self.driver.find_element_by_id('id_address').send_keys('admin-address') + self.driver.find_element_by_id('id_city').send_keys('admin-city') + self.driver.find_element_by_id('id_state').send_keys('admin-state') + self.driver.find_element_by_id('id_country').send_keys('admin-country') + self.driver.find_element_by_id('id_phone_number').send_keys('9999999999') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('admin-org') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertNotEqual(self.driver.find_elements_by_class_name('help-block'), + None) + self.assertEqual(self.driver.find_element_by_xpath("id('div_id_first_name')/div/p/strong").text, + 'Enter a valid value.') + self.assertEqual(self.driver.find_element_by_xpath("id('div_id_last_name')/div/p/strong").text, + 'Enter a valid value.') + + # test length of first-name, last-name not exceed 30 + self.driver.get(self.live_server_url + self.admin_registration_page) + + self.driver.find_element_by_id('id_username').send_keys('admin-username-1') + self.driver.find_element_by_id('id_password').send_keys('admin-password!@#$%^&*()_') + self.driver.find_element_by_id('id_first_name').send_keys('admin-first-name-!@#$%^&*()_') + self.driver.find_element_by_id('id_last_name').send_keys('admin-last-name-!@#$%^&*()_') + self.driver.find_element_by_id('id_email').send_keys('email@systers.org') + self.driver.find_element_by_id('id_address').send_keys('admin-address') + self.driver.find_element_by_id('id_city').send_keys('admin-city') + self.driver.find_element_by_id('id_state').send_keys('admin-state') + self.driver.find_element_by_id('id_country').send_keys('admin-country') + self.driver.find_element_by_id('id_phone_number').send_keys('9999999999') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('admin-org') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertNotEqual(self.driver.find_elements_by_class_name('help-block'), + None) + error_message = self.driver.find_element_by_xpath("id('div_id_first_name')/div/p/strong").text + self.assertTrue(bool(re.search(r'Ensure this value has at most 20 characters', str(error_message)))) + + error_message = self.driver.find_element_by_xpath("id('div_id_last_name')/div/p/strong").text, + self.assertTrue(bool(re.search(r'Ensure this value has at most 20 characters', str(error_message)))) + + def test_address_field(self): + # register valid admin user + self.driver.get(self.live_server_url + self.admin_registration_page) + + self.driver.find_element_by_id('id_username').send_keys('admin-username') + self.driver.find_element_by_id('id_password').send_keys('admin-password!@#$%^&*()_') + self.driver.find_element_by_id('id_first_name').send_keys('admin-first-name') + self.driver.find_element_by_id('id_last_name').send_keys('admin-last-name') + self.driver.find_element_by_id('id_email').send_keys('email@systers.org') + self.driver.find_element_by_id('id_address').send_keys('admin-address') + self.driver.find_element_by_id('id_city').send_keys('admin-city') + self.driver.find_element_by_id('id_state').send_keys('admin-state') + self.driver.find_element_by_id('id_country').send_keys('admin-country') + self.driver.find_element_by_id('id_phone_number').send_keys('9999999999') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('admin-org') + self.driver.find_element_by_xpath('//form[1]').submit() + + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('help-block') + + self.assertEqual(self.driver.current_url, self.live_server_url + + self.homepage) + + # test numeric characters in address + self.driver.get(self.live_server_url + self.admin_registration_page) + + self.driver.find_element_by_id('id_username').send_keys('admin-username-1') + self.driver.find_element_by_id('id_password').send_keys('admin-password!@#$%^&*()_') + self.driver.find_element_by_id('id_first_name').send_keys('admin-first-name') + self.driver.find_element_by_id('id_last_name').send_keys('admin-last-name') + self.driver.find_element_by_id('id_email').send_keys('email@systers.org') + self.driver.find_element_by_id('id_address').send_keys('123 New-City address') + self.driver.find_element_by_id('id_city').send_keys('admin-city') + self.driver.find_element_by_id('id_state').send_keys('admin-state') + self.driver.find_element_by_id('id_country').send_keys('admin-country') + self.driver.find_element_by_id('id_phone_number').send_keys('9999999999') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('admin-org') + self.driver.find_element_by_xpath('//form[1]').submit() + + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('help-block') + + self.assertEqual(self.driver.current_url, self.live_server_url + + self.homepage) + + # test special characters in address + self.driver.get(self.live_server_url + self.admin_registration_page) + + self.driver.find_element_by_id('id_username').send_keys('admin-username-2') + self.driver.find_element_by_id('id_password').send_keys('admin-password!@#$%^&*()_') + self.driver.find_element_by_id('id_first_name').send_keys('first-name') + self.driver.find_element_by_id('id_last_name').send_keys('last-name') + self.driver.find_element_by_id('id_email').send_keys('email@systers.org') + self.driver.find_element_by_id('id_address').send_keys('admin-address!@#$()') + self.driver.find_element_by_id('id_city').send_keys('admin-city') + self.driver.find_element_by_id('id_state').send_keys('admin-state') + self.driver.find_element_by_id('id_country').send_keys('admin-country') + self.driver.find_element_by_id('id_phone_number').send_keys('9999999999') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('admin-org') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertNotEqual(self.driver.find_elements_by_class_name('help-block'), + None) + self.assertEqual(self.driver.current_url, self.live_server_url + + self.admin_registration_page) + self.assertEqual(self.driver.find_element_by_xpath("id('div_id_address')/div/p/strong").text, + 'Enter a valid value.') + + def test_city_field(self): + # register valid admin user + self.driver.get(self.live_server_url + self.admin_registration_page) + + self.driver.find_element_by_id('id_username').send_keys('admin-username') + self.driver.find_element_by_id('id_password').send_keys('admin-password!@#$%^&*()_') + self.driver.find_element_by_id('id_first_name').send_keys('admin-first-name') + self.driver.find_element_by_id('id_last_name').send_keys('admin-last-name') + self.driver.find_element_by_id('id_email').send_keys('email@systers.org') + self.driver.find_element_by_id('id_address').send_keys('admin-address') + self.driver.find_element_by_id('id_city').send_keys('admin-city') + self.driver.find_element_by_id('id_state').send_keys('admin-state') + self.driver.find_element_by_id('id_country').send_keys('admin-country') + self.driver.find_element_by_id('id_phone_number').send_keys('9999999999') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('admin-org') + self.driver.find_element_by_xpath('//form[1]').submit() + + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('help-block') + + self.assertEqual(self.driver.current_url, self.live_server_url + + self.homepage) + + # test numeric characters in city + self.driver.get(self.live_server_url + self.admin_registration_page) + + self.driver.find_element_by_id('id_username').send_keys('admin-username-1') + self.driver.find_element_by_id('id_password').send_keys('admin-password!@#$%^&*()_') + self.driver.find_element_by_id('id_first_name').send_keys('admin-first-name') + self.driver.find_element_by_id('id_last_name').send_keys('admin-last-name') + self.driver.find_element_by_id('id_email').send_keys('email@systers.org') + self.driver.find_element_by_id('id_address').send_keys('admin-address') + self.driver.find_element_by_id('id_city').send_keys('13th admin-city') + self.driver.find_element_by_id('id_state').send_keys('admin-state') + self.driver.find_element_by_id('id_country').send_keys('admin-country') + self.driver.find_element_by_id('id_phone_number').send_keys('9999999999') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('admin-org') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertNotEqual(self.driver.find_elements_by_class_name('help-block'), + None) + self.assertEqual(self.driver.current_url, self.live_server_url + + self.admin_registration_page) + self.assertEqual(self.driver.find_element_by_xpath("id('div_id_city')/div/p/strong").text, + 'Enter a valid value.') + + # test special characters in city + self.driver.get(self.live_server_url + self.admin_registration_page) + + self.driver.find_element_by_id('id_username').send_keys('admin-username-1') + self.driver.find_element_by_id('id_password').send_keys('admin-password!@#$%^&*()_') + self.driver.find_element_by_id('id_first_name').send_keys('first-name') + self.driver.find_element_by_id('id_last_name').send_keys('last-name') + self.driver.find_element_by_id('id_email').send_keys('email@systers.org') + self.driver.find_element_by_id('id_address').send_keys('admin-address') + self.driver.find_element_by_id('id_city').send_keys('!@#$%^&*()_+city') + self.driver.find_element_by_id('id_state').send_keys('admin-state') + self.driver.find_element_by_id('id_country').send_keys('admin-country') + self.driver.find_element_by_id('id_phone_number').send_keys('9999999999') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('admin-org') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertNotEqual(self.driver.find_elements_by_class_name('help-block'), + None) + self.assertEqual(self.driver.current_url, self.live_server_url + + self.admin_registration_page) + self.assertEqual(self.driver.find_element_by_xpath("id('div_id_city')/div/p/strong").text, + 'Enter a valid value.') diff --git a/vms/registration/tests/test_functional_volunteer.py b/vms/registration/tests/test_functional_volunteer.py new file mode 100644 index 0000000..4169f9b --- /dev/null +++ b/vms/registration/tests/test_functional_volunteer.py @@ -0,0 +1,320 @@ +from django.test import TestCase +from django.contrib.staticfiles.testing import LiveServerTestCase + +import re + +from selenium import webdriver +from selenium.common.exceptions import NoSuchElementException + +from organization.models import Organization #hack to pass travis,Bug in Code + + +class SignUpVolunteer(LiveServerTestCase): + ''' + SignUpVolunteer Class contains tests to register volunteer User + Tests included. + + Name Fields: + - Test Null values + - Test legit characters in first_name, last_name fields + - Register volunteer with already registered username + - Test length of name fields ( 30 char, limit) + + Address Field: + - Test Null Values + - Test legit characters as per Models defined + + City Field: + - Test Null Values + - Test legit characters as per Models defined + ''' + def setUp(self): + # create an org prior to registration. Bug in Code + # added to pass CI + Organization.objects.create( + name = 'DummyOrg') + + self.homepage = '/home/' + self.volunteer_registration_page = '/registration/signup_volunteer/' + self.authentication_page = '/authentication/login/' + self.driver = webdriver.Firefox() + self.driver.maximize_window() + super(SignUpVolunteer, self).setUp() + + def tearDown(self): + self.driver.quit() + super(SignUpVolunteer, self).tearDown() + + def test_null_values(self): + self.driver.get(self.live_server_url + + self.volunteer_registration_page) + + self.driver.find_element_by_id('id_username').send_keys('') + self.driver.find_element_by_id('id_password').send_keys('') + self.driver.find_element_by_id('id_first_name').send_keys('') + self.driver.find_element_by_id('id_last_name').send_keys('') + self.driver.find_element_by_id('id_email').send_keys('') + self.driver.find_element_by_id('id_address').send_keys('') + self.driver.find_element_by_id('id_city').send_keys('') + self.driver.find_element_by_id('id_state').send_keys('') + self.driver.find_element_by_id('id_country').send_keys('') + self.driver.find_element_by_id('id_phone_number').send_keys('') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertNotEqual(self.driver.find_elements_by_class_name('help-block'), + None) + + def test_name_fields(self): + # register valid volunteer user + self.driver.get(self.live_server_url + self.volunteer_registration_page) + + + self.driver.find_element_by_id('id_username').send_keys('volunteer-username') + self.driver.find_element_by_id('id_password').send_keys('volunteer-password!@#$%^&*()_') + self.driver.find_element_by_id('id_first_name').send_keys('volunteer-first-name') + self.driver.find_element_by_id('id_last_name').send_keys('volunteer-last-name') + self.driver.find_element_by_id('id_email').send_keys('volunteer-email@systers.org') + self.driver.find_element_by_id('id_address').send_keys('volunteer-address') + self.driver.find_element_by_id('id_city').send_keys('volunteer-city') + self.driver.find_element_by_id('id_state').send_keys('volunteer-state') + self.driver.find_element_by_id('id_country').send_keys('volunteer-country') + self.driver.find_element_by_id('id_phone_number').send_keys('9999999999') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('volunteer-org') + self.driver.find_element_by_xpath('//form[1]').submit() + + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('help-block') + + # register a user again with username same as already registered user + self.assertEqual(self.driver.current_url, self.live_server_url + + self.homepage) + + self.driver.get(self.live_server_url + self.volunteer_registration_page) + + self.driver.find_element_by_id('id_username').send_keys( + 'volunteer-username') + self.driver.find_element_by_id('id_password').send_keys('volunteer-password!@#$%^&*()_') + self.driver.find_element_by_id('id_first_name').send_keys('volunteer-first-name') + self.driver.find_element_by_id('id_last_name').send_keys('volunteer-last-name') + self.driver.find_element_by_id('id_email').send_keys('volunteer-email@systers.org') + self.driver.find_element_by_id('id_address').send_keys('volunteer-address') + self.driver.find_element_by_id('id_city').send_keys('volunteer-city') + self.driver.find_element_by_id('id_state').send_keys('volunteer-state') + self.driver.find_element_by_id('id_country').send_keys('volunteer-country') + self.driver.find_element_by_id('id_phone_number').send_keys('9999999999') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('volunteer-org') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertNotEqual(self.driver.find_elements_by_class_name('help-block'), + None) + self.assertEqual(self.driver.find_element_by_xpath("id('div_id_username')/div/p/strong").text, + 'User with this Username already exists.') + + # test numeric characters in first-name, last-name + self.driver.get(self.live_server_url + self.volunteer_registration_page) + + self.driver.find_element_by_id('id_username').send_keys('volunteer-username-1') + self.driver.find_element_by_id('id_password').send_keys('volunteer-password!@#$%^&*()_') + self.driver.find_element_by_id('id_first_name').send_keys('volunteer-first-name-1') + self.driver.find_element_by_id('id_last_name').send_keys('volunteer-last-name-1') + self.driver.find_element_by_id('id_email').send_keys('volunteer-email@systers.org') + self.driver.find_element_by_id('id_address').send_keys( + 'volunteer-address') + self.driver.find_element_by_id('id_city').send_keys('volunteer-city') + self.driver.find_element_by_id('id_state').send_keys('volunteer-state') + self.driver.find_element_by_id('id_country').send_keys('volunteer-country') + self.driver.find_element_by_id('id_phone_number').send_keys('9999999999') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('volunteer-org') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertNotEqual(self.driver.find_elements_by_class_name('help-block'), + None) + self.assertEqual(self.driver.find_element_by_xpath("id('div_id_first_name')/div/p/strong").text, + 'Enter a valid value.') + self.assertEqual(self.driver.find_element_by_xpath("id('div_id_last_name')/div/p/strong").text, + 'Enter a valid value.') + + # test special characters in first-name, last-name + self.driver.get(self.live_server_url + self.volunteer_registration_page) + + self.driver.find_element_by_id('id_username').send_keys('volunteer-username-1') + self.driver.find_element_by_id('id_password').send_keys('volunteer-password!@#$%^&*()_') + self.driver.find_element_by_id('id_first_name').send_keys('first-name-!@#$%^&*()_') + self.driver.find_element_by_id('id_last_name').send_keys('last-name-!@#$%^&*()_') + self.driver.find_element_by_id('id_email').send_keys('volunteer-email@systers.org') + self.driver.find_element_by_id('id_address').send_keys('volunteer-address') + self.driver.find_element_by_id('id_city').send_keys('volunteer-city') + self.driver.find_element_by_id('id_state').send_keys('volunteer-state') + self.driver.find_element_by_id('id_country').send_keys('volunteer-country') + self.driver.find_element_by_id('id_phone_number').send_keys('9999999999') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('volunteer-org') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertNotEqual(self.driver.find_elements_by_class_name('help-block'), + None) + self.assertEqual(self.driver.find_element_by_xpath("id('div_id_first_name')/div/p/strong").text, + 'Enter a valid value.') + self.assertEqual(self.driver.find_element_by_xpath("id('div_id_last_name')/div/p/strong").text, + 'Enter a valid value.') + + # test length of first-name, last-name not exceed 30 + self.driver.get(self.live_server_url + self.volunteer_registration_page) + + self.driver.find_element_by_id('id_username').send_keys('volunteer-username-1') + self.driver.find_element_by_id('id_password').send_keys('volunteer-password!@#$%^&*()_') + self.driver.find_element_by_id('id_first_name').send_keys('volunteer-first-name-!@#$%^&*()_') + self.driver.find_element_by_id('id_last_name').send_keys('volunteer-last-name-!@#$%^&*()_') + self.driver.find_element_by_id('id_email').send_keys('volunteer-email@systers.org') + self.driver.find_element_by_id('id_address').send_keys('volunteer-address') + self.driver.find_element_by_id('id_city').send_keys('volunteer-city') + self.driver.find_element_by_id('id_state').send_keys('volunteer-state') + self.driver.find_element_by_id('id_country').send_keys('volunteer-country') + self.driver.find_element_by_id('id_phone_number').send_keys('9999999999') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('volunteer-org') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertNotEqual(self.driver.find_elements_by_class_name('help-block'), + None) + error_message = self.driver.find_element_by_xpath("id('div_id_first_name')/div/p/strong").text + self.assertTrue(bool(re.search(r'Ensure this value has at most 30 characters', str(error_message)))) + + error_message = self.driver.find_element_by_xpath("id('div_id_last_name')/div/p/strong").text, + self.assertTrue(bool(re.search(r'Ensure this value has at most 30 characters', str(error_message)))) + + def test_address_field(self): + # register valid volunteer user + self.driver.get(self.live_server_url + self.volunteer_registration_page) + + self.driver.find_element_by_id('id_username').send_keys('volunteer-username') + self.driver.find_element_by_id('id_password').send_keys('volunteer-password!@#$%^&*()_') + self.driver.find_element_by_id('id_first_name').send_keys('volunteer-first-name') + self.driver.find_element_by_id('id_last_name').send_keys('volunteer-last-name') + self.driver.find_element_by_id('id_email').send_keys('volunteer-email@systers.org') + self.driver.find_element_by_id('id_address').send_keys('volunteer-address') + self.driver.find_element_by_id('id_city').send_keys('volunteer-city') + self.driver.find_element_by_id('id_state').send_keys('volunteer-state') + self.driver.find_element_by_id('id_country').send_keys('volunteer-country') + self.driver.find_element_by_id('id_phone_number').send_keys('9999999999') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('volunteer-org') + self.driver.find_element_by_xpath('//form[1]').submit() + + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('help-block') + + self.assertEqual(self.driver.current_url, self.live_server_url + + self.homepage) + + # test numeric characters in address + self.driver.get(self.live_server_url + self.volunteer_registration_page) + + self.driver.find_element_by_id('id_username').send_keys('volunteer-username-1') + self.driver.find_element_by_id('id_password').send_keys('volunteer-password!@#$%^&*()_') + self.driver.find_element_by_id('id_first_name').send_keys('volunteer-first-name') + self.driver.find_element_by_id('id_last_name').send_keys('volunteer-last-name') + self.driver.find_element_by_id('id_email').send_keys('volunteer-email@systers.org') + self.driver.find_element_by_id('id_address').send_keys('123 New-City address') + self.driver.find_element_by_id('id_city').send_keys('volunteer-city') + self.driver.find_element_by_id('id_state').send_keys('volunteer-state') + self.driver.find_element_by_id('id_country').send_keys('volunteer-country') + self.driver.find_element_by_id('id_phone_number').send_keys('9999999999') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('volunteer-org') + self.driver.find_element_by_xpath('//form[1]').submit() + + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('help-block') + + self.assertEqual(self.driver.current_url, self.live_server_url + + self.homepage) + + # test special characters in address + self.driver.get(self.live_server_url + self.volunteer_registration_page) + + self.driver.find_element_by_id('id_username').send_keys('volunteer-username-2') + self.driver.find_element_by_id('id_password').send_keys('volunteer-password!@#$%^&*()_') + self.driver.find_element_by_id('id_first_name').send_keys('first-name') + self.driver.find_element_by_id('id_last_name').send_keys('last-name') + self.driver.find_element_by_id('id_email').send_keys('volunteer-email@systers.org') + self.driver.find_element_by_id('id_address').send_keys('volunteer-address!@#$()') + self.driver.find_element_by_id('id_city').send_keys('volunteer-city') + self.driver.find_element_by_id('id_state').send_keys('volunteer-state') + self.driver.find_element_by_id('id_country').send_keys('volunteer-country') + self.driver.find_element_by_id('id_phone_number').send_keys('9999999999') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('volunteer-org') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertNotEqual(self.driver.find_elements_by_class_name('help-block'), + None) + self.assertEqual(self.driver.current_url, self.live_server_url + + self.volunteer_registration_page) + self.assertEqual(self.driver.find_element_by_xpath("id('div_id_address')/div/p/strong").text, + 'Enter a valid value.') + + def test_city_field(self): + # register valid volunteer user + self.driver.get(self.live_server_url + self.volunteer_registration_page) + + self.driver.find_element_by_id('id_username').send_keys('volunteer-username') + self.driver.find_element_by_id('id_password').send_keys('volunteer-password!@#$%^&*()_') + self.driver.find_element_by_id('id_first_name').send_keys('volunteer-first-name') + self.driver.find_element_by_id('id_last_name').send_keys('volunteer-last-name') + self.driver.find_element_by_id('id_email').send_keys('volunteer-email@systers.org') + self.driver.find_element_by_id('id_address').send_keys('volunteer-address') + self.driver.find_element_by_id('id_city').send_keys('volunteer-city') + self.driver.find_element_by_id('id_state').send_keys('volunteer-state') + self.driver.find_element_by_id('id_country').send_keys('volunteer-country') + self.driver.find_element_by_id('id_phone_number').send_keys('9999999999') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('volunteer-org') + self.driver.find_element_by_xpath('//form[1]').submit() + + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('help-block') + + self.assertEqual(self.driver.current_url, self.live_server_url + + self.homepage) + + # test numeric characters in city + self.driver.get(self.live_server_url + self.volunteer_registration_page) + + self.driver.find_element_by_id('id_username').send_keys('volunteer-username-1') + self.driver.find_element_by_id('id_password').send_keys('volunteer-password!@#$%^&*()_') + self.driver.find_element_by_id('id_first_name').send_keys('volunteer-first-name') + self.driver.find_element_by_id('id_last_name').send_keys('volunteer-last-name') + self.driver.find_element_by_id('id_email').send_keys('volunteer-email@systers.org') + self.driver.find_element_by_id('id_address').send_keys('volunteer-address') + self.driver.find_element_by_id('id_city').send_keys('13th volunteer-city') + self.driver.find_element_by_id('id_state').send_keys('volunteer-state') + self.driver.find_element_by_id('id_country').send_keys('volunteer-country') + self.driver.find_element_by_id('id_phone_number').send_keys('9999999999') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('volunteer-org') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertNotEqual(self.driver.find_elements_by_class_name('help-block'), + None) + self.assertEqual(self.driver.current_url, self.live_server_url + + self.volunteer_registration_page) + self.assertEqual(self.driver.find_element_by_xpath("id('div_id_city')/div/p/strong").text, + 'Enter a valid value.') + + # test special characters in city + self.driver.get(self.live_server_url + self.volunteer_registration_page) + + self.driver.find_element_by_id('id_username').send_keys('volunteer-username-1') + self.driver.find_element_by_id('id_password').send_keys('volunteer-password!@#$%^&*()_') + self.driver.find_element_by_id('id_first_name').send_keys('first-name') + self.driver.find_element_by_id('id_last_name').send_keys('last-name') + self.driver.find_element_by_id('id_email').send_keys('volunteer-email@systers.org') + self.driver.find_element_by_id('id_address').send_keys('volunteer-address') + self.driver.find_element_by_id('id_city').send_keys('!@#$%^&*()_+city') + self.driver.find_element_by_id('id_state').send_keys('volunteer-state') + self.driver.find_element_by_id('id_country').send_keys('volunteer-country') + self.driver.find_element_by_id('id_phone_number').send_keys('9999999999') + self.driver.find_element_by_id('id_unlisted_organization').send_keys('volunteer-org') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertNotEqual(self.driver.find_elements_by_class_name('help-block'), + None) + self.assertEqual(self.driver.current_url, self.live_server_url + + self.volunteer_registration_page) + self.assertEqual(self.driver.find_element_by_xpath("id('div_id_city')/div/p/strong").text, + 'Enter a valid value.') diff --git a/vms/registration/tests/test_unit.py b/vms/registration/tests/test_unit.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/vms/registration/tests/test_unit.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/vms/shift/tests/__init__.py b/vms/shift/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vms/shift/tests/test_manageVolunteerShift.py b/vms/shift/tests/test_manageVolunteerShift.py new file mode 100644 index 0000000..a6b6a31 --- /dev/null +++ b/vms/shift/tests/test_manageVolunteerShift.py @@ -0,0 +1,748 @@ +from django.test import TestCase +from django.contrib.staticfiles.testing import LiveServerTestCase + +from django.contrib.auth.models import User +from administrator.models import Administrator + +from selenium import webdriver +from selenium.common.exceptions import NoSuchElementException + +from organization.models import Organization #hack to pass travis,Bug in Code + + +class ManageVolunteerShift(LiveServerTestCase): + ''' + Admin users have ManageVolunteerShift View which has the following + functionalities: + - Filter Volunteers according to certain criteriras + - Click on `Manage Shift` to check assigned shifts to a volunteer + - Click on `Assign Shift` lists registered events + - Click on `View Jobs` to list jobs in selected event + - Click on `View Shift` to list shifts in the selected job + - Click on `Assign Shift` and confirm to assign shift. + - Cancel assigned shift by clicking on `Cancel Shift Assignment` + + ManageVolunteerShift Class contains UI tests for ManageVolunteerShift + View of Admin Profile. Tests Included. + + - Test View with/without any registered volunteers + - Test Redirection to events view on clicking `Manage Shifts` + - Test Jobs page without jobs + - Test assign shifts without any registered shifts + - Test assign shifts with registered shifts + - Test if shift can be assigned to more number of volunteers than slots + in a shift + - Test no of slots remaining increases by one when an admin cancels an + assigned shift + - Test if a shift can be assigned to a volunteer who has already been + assigned the same shift + ''' + def setUp(self): + admin_user = User.objects.create_user( + username = 'admin', + password = 'admin', + email = 'admin@admin.com') + + Administrator.objects.create( + user = admin_user, + address = 'address', + city = 'city', + state = 'state', + country = 'country', + phone_number = '9999999999', + unlisted_organization = 'organization') + + # create an org prior to registration. Bug in Code + # added to pass CI + Organization.objects.create( + name = 'DummyOrg') + + self.homepage = '/home/' + self.authentication_page = '/authentication/login/' + self.shift_page = '/shift/volunteer_search/' + self.volunteer_registration_page = '/registration/signup_volunteer/' + self.settings_page = '/event/list/' + self.driver = webdriver.Firefox() + self.driver.implicitly_wait(5) + self.driver.maximize_window() + super(ManageVolunteerShift, self).setUp() + + def tearDown(self): + self.driver.quit() + super(ManageVolunteerShift, self).tearDown() + + def login_admin(self): + self.driver.get(self.live_server_url + self.authentication_page) + self.driver.find_element_by_id('id_login').send_keys('admin') + self.driver.find_element_by_id('id_password').send_keys('admin') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertEqual(self.driver.current_url, + self.live_server_url + self.homepage) + + def register_volunteer(self, credentials): + self.driver.get(self.live_server_url + + self.volunteer_registration_page) + + self.driver.find_element_by_id('id_username').send_keys(credentials[0]) + self.driver.find_element_by_id('id_password').send_keys(credentials[1]) + self.driver.find_element_by_id('id_first_name').send_keys(credentials[2]) + self.driver.find_element_by_id('id_last_name').send_keys(credentials[3]) + self.driver.find_element_by_id('id_email').send_keys(credentials[4]) + self.driver.find_element_by_id('id_address').send_keys(credentials[5]) + self.driver.find_element_by_id('id_city').send_keys(credentials[6]) + self.driver.find_element_by_id('id_state').send_keys(credentials[7]) + self.driver.find_element_by_id('id_country').send_keys(credentials[8]) + self.driver.find_element_by_id('id_phone_number').send_keys(credentials[9]) + self.driver.find_element_by_id('id_unlisted_organization').send_keys(credentials[10]) + self.driver.find_element_by_xpath('//form[1]').submit() + + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('help-block'), + + self.assertEqual(self.driver.current_url, + self.live_server_url + self.homepage) + + def register_test_dataset(self): + credentials = ['volunteer-one', 'volunteer-password', + 'volunteer-one', 'volunteer-one', 'volunteer-email@systers.org', + 'volunteer-one', 'volunteer-one', 'volunteer-one', + 'volunteer-one', '9999999999', 'volunteer-one'] + + self.register_volunteer(credentials) + + credentials = ['volunteer-two', 'volunteer-password', + 'volunteer-two', 'volunteer-two', 'volunteer-email@systers.org', + 'volunteer-two', 'volunteer-two', 'volunteer-two', + 'volunteer-two', '9999999999', 'volunteer-two'] + + self.register_volunteer(credentials) + + def register_event_utility(self, event): + self.driver.find_element_by_link_text('Settings').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + self.settings_page) + + self.driver.find_element_by_link_text('Create Event').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + '/event/create/') + + self.driver.find_element_by_xpath( + '//input[@placeholder = "Event Name"]').send_keys( + event[0]) + self.driver.find_element_by_xpath( + '//input[@name = "start_date"]').send_keys( + event[1]) + self.driver.find_element_by_xpath( + '//input[@name = "end_date"]').send_keys( + event[2]) + self.driver.find_element_by_xpath('//form[1]').submit() + + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('help-block'), + + def register_job_utility(self, job): + self.assertEqual(self.driver.current_url, + self.live_server_url + self.settings_page) + self.driver.find_element_by_link_text('Jobs').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + '/job/list/') + + self.driver.find_element_by_link_text('Create Job').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + '/job/create/') + + self.driver.find_element_by_xpath( + '//select[@name = "event_id"]').send_keys( + job[0]) + self.driver.find_element_by_xpath( + '//input[@placeholder = "Job Name"]').send_keys( + job[1]) + self.driver.find_element_by_xpath( + '//textarea[@name = "description"]').send_keys( + job[2]) + self.driver.find_element_by_xpath( + '//input[@name = "start_date"]').send_keys( + job[3]) + self.driver.find_element_by_xpath( + '//input[@name = "end_date"]').send_keys( + job[4]) + self.driver.find_element_by_xpath('//form[1]').submit() + + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('help-block'), + + def register_shift_utility(self, shift): + self.login_admin() + + # register event to create job + event = ['event-name', '05/20/2015', '05/20/2015'] + self.register_event_utility(event) + + # create job to create shift + job = ['event-name', 'job name', 'job description', '05/20/2015', + '05/20/2015'] + self.register_job_utility(job) + + # create shift + self.driver.find_element_by_link_text('Shifts').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + '/shift/list_jobs/') + + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]/td[5]//a').click() + + self.driver.find_element_by_link_text('Create Shift').click() + + self.driver.find_element_by_xpath( + '//input[@name = "date"]').send_keys( + shift[0]) + self.driver.find_element_by_xpath( + '//input[@name = "start_time"]').send_keys( + shift[1]) + self.driver.find_element_by_xpath( + '//input[@name = "end_time"]').send_keys( + shift[2]) + self.driver.find_element_by_xpath( + '//input[@name = "max_volunteers"]').send_keys( + shift[3]) + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertNotEqual(self.driver.find_elements_by_xpath( + '//table//tbody'), None) + + def test_landing_page_without_any_registered_volunteers(self): + self.login_admin() + self.driver.find_element_by_link_text('Manage Volunteer Shifts').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + self.shift_page) + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_tag_name('tr') + + def test_landing_page_with_registered_volunteers(self): + # register volunteers + self.register_test_dataset() + + # login admin user + self.login_admin() + + # open manage volunteer shift + self.driver.find_element_by_link_text('Manage Volunteer Shifts').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + self.shift_page) + + self.assertNotEqual(self.driver.find_element_by_tag_name('tr'), None) + + self.driver.find_element_by_xpath('//table//tbody//tr[1]//td[10]//a').click() + self.assertEqual(self.driver.find_element_by_class_name('alert-info').text, + 'This volunteer does not have any upcoming shifts.') + + self.driver.back() + self.assertEqual(self.driver.current_url, + self.live_server_url + '/shift/volunteer_search/') + + self.driver.find_element_by_xpath('//table//tbody//tr[2]//td[10]//a').click() + self.assertEqual(self.driver.find_element_by_class_name('alert-info').text, + 'This volunteer does not have any upcoming shifts.') + + def test_events_page_with_no_events(self): + # register volunteers + self.register_test_dataset() + + # login admin user + self.login_admin() + + # open manage volunteer shift + self.driver.find_element_by_link_text('Manage Volunteer Shifts').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + self.shift_page) + + self.driver.find_element_by_xpath('//table//tbody//tr[1]//td[10]//a').click() + + self.driver.find_element_by_link_text('Assign Shift').click() + + self.assertEqual(self.driver.find_element_by_class_name('alert-info').text, + 'There are currently no events.') + + def test_jobs_page_with_no_jobs(self): + # register volunteers + self.register_test_dataset() + + # login admin + self.login_admin() + + # create events + event = ['event-name', '05/20/2015', '05/20/2015'] + self.register_event_utility(event) + + # open manage volunteer shift + self.driver.find_element_by_link_text( + 'Manage Volunteer Shifts').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + self.shift_page) + + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[10]//a').click() + + self.driver.find_element_by_link_text('Assign Shift').click() + + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('alert-info') + + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # arrived on jobs page with no jobs + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_tag_name('table') + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-info').text, 'There are currently no jobs for event-name.') + + def test_assign_shifts_with_no_shifts(self): + # register volunteers + self.register_test_dataset() + + # login admin + self.login_admin() + + # create events + event = ['event-name', '05/20/2015', '05/20/2015'] + self.register_event_utility(event) + + # create jobs + job = ['event-name', 'job name', 'job description', '05/20/2015', + '05/20/2015'] + self.register_job_utility(job) + + # open manage volunteer shift + self.driver.find_element_by_link_text( + 'Manage Volunteer Shifts').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + self.shift_page) + + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[10]//a').click() + + self.driver.find_element_by_link_text('Assign Shift').click() + + # events shown in table + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('alert-info') + + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # arrived on page2 with jobs + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, + 'job name') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # arrived on page3 with no shifts in job created + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-info').text, + 'There are currently no shifts for the job name job.') + + def test_assign_shifts_with_registered_shifts(self): + # register volunteers + self.register_test_dataset() + + # create shift to assign + shift = ['06/20/2015', '09:00', '15:00', '1'] + self.register_shift_utility(shift) + + # open manage volunteer shift + self.driver.find_element_by_link_text( + 'Manage Volunteer Shifts').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + self.shift_page) + + # volunteer-one does not have any registered shifts + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[10]').text, + 'Manage Shifts') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[10]//a').click() + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-info').text, + 'This volunteer does not have any upcoming shifts.') + + self.driver.find_element_by_link_text('Assign Shift').click() + + # events shown in table + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('alert-info') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'View Jobs') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # arrived on page2 with jobs + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'View Shifts') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # arrived on page3 with shifts, assign shift to volunteer one + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'Assign Shift') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # confirm on shift assignment to volunteer-one + self.driver.find_element_by_xpath('//form[1]').submit() + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('alert-danger') + + # check shift assignment to volunteer-one + self.driver.find_element_by_link_text( + 'Manage Volunteer Shifts').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + self.shift_page) + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[10]').text, + 'Manage Shifts') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[10]//a').click() + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, + 'job name') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[2]').text, + 'June 20, 2015') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[3]').text, + '9 a.m.') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + '3 p.m.') + + def test_slots_remaining_in_shift(self): + # register volunteers + self.register_test_dataset() + + # create shift to assign, with only 1 volunteer required + shift = ['06/20/2015', '09:00', '15:00', '1'] + self.register_shift_utility(shift) + + # open manage volunteer shift + self.driver.find_element_by_link_text( + 'Manage Volunteer Shifts').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + self.shift_page) + + # volunteer-one does not have any registered shifts + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[10]').text, + 'Manage Shifts') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[10]//a').click() + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-info').text, + 'This volunteer does not have any upcoming shifts.') + + self.driver.find_element_by_link_text('Assign Shift').click() + + # events shown in table + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('alert-info') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'View Jobs') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # arrived on page2 with jobs + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'View Shifts') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # arrived on page3 with shifts, assign shift to volunteer one + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'Assign Shift') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # confirm on shift assignment to volunteer-one + self.driver.find_element_by_xpath('//form[1]').submit() + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('alert-danger') + + # check shift assignment to volunteer-one + self.driver.find_element_by_link_text( + 'Manage Volunteer Shifts').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + self.shift_page) + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[10]').text, + 'Manage Shifts') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[10]//a').click() + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, + 'job name') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[2]').text, + 'June 20, 2015') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[3]').text, + '9 a.m.') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + '3 p.m.') + + # open manage volunteer shift again to assign shift to volunteer two + self.driver.find_element_by_link_text( + 'Manage Volunteer Shifts').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + self.shift_page) + + # volunteer-two does not have any registered shifts + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[2]//td[10]').text, + 'Manage Shifts') + self.driver.find_element_by_xpath( + '//table//tbody//tr[2]//td[10]//a').click() + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-info').text, + 'This volunteer does not have any upcoming shifts.') + + self.driver.find_element_by_link_text('Assign Shift').click() + + # events shown in table + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('alert-info') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'View Jobs') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # arrived on jobs page + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'View Shifts') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # arrived on shifts page, but shift not shown since slots are already + # filled. + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-info').text, + 'There are currently no shifts for the job name job.') + # no unassigned shifts left for this job + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('table') + + def test_cancel_assigned_shift(self): + # register volunteers + self.register_test_dataset() + + # create shift to assign + shift = ['06/20/2015', '09:00', '15:00', '1'] + self.register_shift_utility(shift) + + # open manage volunteer shift + self.driver.find_element_by_link_text( + 'Manage Volunteer Shifts').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + self.shift_page) + + # volunteer-one does not have any registered shifts + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[10]').text, + 'Manage Shifts') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[10]//a').click() + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-info').text, + 'This volunteer does not have any upcoming shifts.') + + self.driver.find_element_by_link_text('Assign Shift').click() + + # events shown in table + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('alert-info') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'View Jobs') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # arrived on jobs page + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'View Shifts') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # arrived on shifts page, assign shift to volunteer one + slots_remaining_before_assignment = self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[5]').text + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'Assign Shift') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # confirm on shift assignment to volunteer-one + self.driver.find_element_by_xpath('//form[1]').submit() + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('alert-danger') + + # check shift assignment to volunteer-one + self.driver.find_element_by_link_text( + 'Manage Volunteer Shifts').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + self.shift_page) + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[10]').text, + 'Manage Shifts') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[10]//a').click() + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, + 'job name') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[2]').text, + 'June 20, 2015') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[3]').text, + '9 a.m.') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + '3 p.m.') + + # cancel assigned shift + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[5]').text, + 'Cancel Shift Registration') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[5]//a').click() + self.assertNotEqual(self.driver.find_element_by_class_name( + 'panel-danger'), None) + self.assertEqual(self.driver.find_element_by_class_name( + 'btn-danger').text, 'Yes, Cancel this Shift') + self.driver.find_element_by_xpath('//form[1]').submit() + + # check cancelled shift reflects in volunteer shift details + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-info').text, + 'This volunteer does not have any upcoming shifts.') + + # check slots remaining increases by one, after cancellation of + # assigned shift + self.driver.find_element_by_link_text('Assign Shift').click() + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'View Jobs') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'View Shifts') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + slots_after_cancellation = self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[5]').text + self.assertEqual(slots_remaining_before_assignment, + slots_after_cancellation) + + def test_assign_same_shift_to_volunteer_twice(self): + # register volunteers + self.register_test_dataset() + + # create shift to assign, with slots = 2 + shift = ['06/20/2015', '09:00', '15:00', '2'] + self.register_shift_utility(shift) + + # open manage volunteer shift + self.driver.find_element_by_link_text( + 'Manage Volunteer Shifts').click() + self.assertEqual(self.driver.current_url, + self.live_server_url + self.shift_page) + + # volunteer-one does not have any registered shifts + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[10]').text, + 'Manage Shifts') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[10]//a').click() + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-info').text, + 'This volunteer does not have any upcoming shifts.') + + self.driver.find_element_by_link_text('Assign Shift').click() + + # events shown in table + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('alert-info') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'View Jobs') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # arrived on jobs page + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'View Shifts') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # arrived on shifts page, assign shift to volunteer one + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'Assign Shift') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # confirm on shift assignment to volunteer-one + self.driver.find_element_by_xpath('//form[1]').submit() + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('alert-danger') + + # assign same shift to voluteer-one again + # Check volunteer-one has one registered shift now + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'job name') + self.driver.find_element_by_link_text('Assign Shift').click() + + # events page + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_class_name('alert-info') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'View Jobs') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # arrived on jobs page + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'View Shifts') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # arrived on shifts page, assign shift to volunteer one + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, + 'Assign Shift') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]//a').click() + + # confirm on shift assignment to volunteer-one + self.driver.find_element_by_xpath('//form[1]').submit() + + # check error on assigning same shift to volunteer-one + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-danger').text, + 'Error\n\nThis user is already signed up for this shift. Please assign a different shift.') + diff --git a/vms/shift/tests/test_shiftHours.py b/vms/shift/tests/test_shiftHours.py new file mode 100644 index 0000000..835c45e --- /dev/null +++ b/vms/shift/tests/test_shiftHours.py @@ -0,0 +1,218 @@ +from django.test import TestCase +from django.contrib.staticfiles.testing import LiveServerTestCase + +from django.contrib.auth.models import User +from volunteer.models import Volunteer +from event.models import Event +from job.models import Job +from shift.models import Shift, VolunteerShift + +from selenium import webdriver +from selenium.common.exceptions import NoSuchElementException + +from organization.models import Organization #hack to pass travis,Bug in Code + + +class ShiftHours(LiveServerTestCase): + ''' + ''' + def setUp(self): + volunteer_user = User.objects.create_user( + username = 'volunteer', + password = 'volunteer', + email = 'volunteer@volunteer.com') + + volunteer = Volunteer.objects.create( + user = volunteer_user, + address = 'address', + city = 'city', + state = 'state', + country = 'country', + phone_number = '9999999999', + unlisted_organization = 'organization') + + # create an org prior to registration. Bug in Code + # added to pass CI + Organization.objects.create( + name = 'DummyOrg') + + self.homepage = '/home/' + self.authentication_page = '/authentication/login/' + self.driver = webdriver.Firefox() + self.driver.implicitly_wait(5) + self.driver.maximize_window() + super(ShiftHours, self).setUp() + + def tearDown(self): + self.driver.quit() + super(ShiftHours, self).tearDown() + + def login(self, credentials): + self.driver.get(self.live_server_url + self.authentication_page) + self.driver.find_element_by_id('id_login').send_keys(credentials['username']) + self.driver.find_element_by_id('id_password').send_keys(credentials['password']) + self.driver.find_element_by_xpath('//form[1]').submit() + + def test_view_without_any_unlogged_shift(self): + self.login({'username' : 'volunteer', 'password' : 'volunteer'}) + self.driver.find_element_by_link_text('Shift Hours').click() + + volunteer_id = Volunteer.objects.get(user__username = 'volunteer').pk + self.assertEqual(self.driver.current_url, self.live_server_url + + '/shift/view_hours/' + str(volunteer_id)) + + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-info').text, 'You have not logged any hours.') + + def register_dataset(self, ): + volunteer = Volunteer.objects.get(user__username = 'volunteer') + + # create shift and log hours + event = Event.objects.create( + name = 'event', + start_date = '2015-06-15', + end_date = '2015-06-17') + + job = Job.objects.create( + name = 'job', + start_date = '2015-06-15', + end_date = '2015-06-15', + event = event) + + shift = Shift.objects.create( + date = '2015-06-15', + start_time = '09:00', + end_time = '15:00', + max_volunteers ='6', + job = job) + + # logged hours from 12:00 to 13:00 + VolunteerShift.objects.create( + shift = shift, + volunteer = volunteer, + start_time = '12:00', + end_time = '13:00') + + def test_view_with_unlogged_shift(self): + self.register_dataset() + self.login({'username' : 'volunteer', 'password' : 'volunteer'}) + self.driver.find_element_by_link_text('Shift Hours').click() + + volunteer_id = Volunteer.objects.get(user__username = 'volunteer').pk + self.assertEqual(self.driver.current_url, self.live_server_url + + '/shift/view_hours/' + str(volunteer_id)) + + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'job') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[2]').text, 'June 15, 2015') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[3]').text, 'noon') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, '1 p.m.') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[5]').text, 'Edit Hours') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[6]').text, 'Clear Hours') + + def test_edit_hours(self): + self.register_dataset() + self.login({'username' : 'volunteer', 'password' : 'volunteer'}) + self.driver.find_element_by_link_text('Shift Hours').click() + + volunteer_id = Volunteer.objects.get(user__username = 'volunteer').pk + self.assertEqual(self.driver.current_url, self.live_server_url + + '/shift/view_hours/' + str(volunteer_id)) + + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[3]').text, 'noon') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, '1 p.m.') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[5]').text, 'Edit Hours') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[5]//a').click() + + self.assertEqual(self.driver.find_element_by_xpath( + 'html/body/div[2]/div[2]/form/fieldset/legend').text, + 'Edit Shift Hours') + self.driver.find_element_by_xpath( + '//input[@name = "start_time"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "start_time"]').send_keys( + '15:00') + + self.driver.find_element_by_xpath( + '//input[@name = "end_time"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "end_time"]').send_keys( + '20:00') + self.driver.find_element_by_xpath('//form[1]').submit() + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[3]').text, '3 p.m.') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, '8 p.m.') + + def test_end_hours_less_than_start_hours(self): + self.register_dataset() + self.login({'username' : 'volunteer', 'password' : 'volunteer'}) + self.driver.find_element_by_link_text('Shift Hours').click() + + volunteer_id = Volunteer.objects.get(user__username = 'volunteer').pk + self.assertEqual(self.driver.current_url, self.live_server_url + + '/shift/view_hours/' + str(volunteer_id)) + + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[3]').text, 'noon') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, '1 p.m.') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[5]').text, 'Edit Hours') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[5]//a').click() + + self.assertEqual(self.driver.find_element_by_xpath( + 'html/body/div[2]/div[2]/form/fieldset/legend').text, + 'Edit Shift Hours') + self.driver.find_element_by_xpath( + '//input[@name = "start_time"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "start_time"]').send_keys( + '20:00') + + self.driver.find_element_by_xpath( + '//input[@name = "end_time"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "end_time"]').send_keys( + '15:00') + self.driver.find_element_by_xpath('//form[1]').submit() + + try: + self.driver.find_element_by_class_name('alert-danger') + except NoSuchElementException: + raise Exception("End hours greater than start hours") + + def test_cancel_hours(self): + self.register_dataset() + self.login({'username' : 'volunteer', 'password' : 'volunteer'}) + self.driver.find_element_by_link_text('Shift Hours').click() + + volunteer_id = Volunteer.objects.get(user__username = 'volunteer').pk + self.assertEqual(self.driver.current_url, self.live_server_url + + '/shift/view_hours/' + str(volunteer_id)) + + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'job') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[6]').text, 'Clear Hours') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[6]//a').click() + + self.assertEqual(self.driver.find_element_by_xpath( + 'html/body/div[2]/form/div/div[1]/h3').text, + 'Clear Shift Hours') + self.driver.find_element_by_xpath('//form[1]').submit() + + with self.assertRaises(NoSuchElementException): + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'job') diff --git a/vms/shift/tests/test_unit.py b/vms/shift/tests/test_unit.py new file mode 100644 index 0000000..e1314a5 --- /dev/null +++ b/vms/shift/tests/test_unit.py @@ -0,0 +1,1024 @@ +from datetime import datetime +from django.contrib.auth.models import User +from django.core.exceptions import ObjectDoesNotExist +from django.test import TestCase +from event.models import Event +from job.models import Job +from organization.models import Organization +from shift.models import Shift, VolunteerShift +from shift.services import * +from volunteer.models import Volunteer +from volunteer.services import * + +class ShiftMethodTests(TestCase): + + def test_add_shift_hours(self): + + u1 = User.objects.create_user('Yoshi') + + v1 = Volunteer(first_name = "Yoshi", + last_name = "Turtle", + address = "Mario Land", + city = "Nintendo Land", + state = "Nintendo State", + country = "Nintendo Nation", + phone_number = "2374983247", + email = "yoshi@nintendo.com", + user = u1) + + v1.save() + + e1 = Event(name = "Open Source Event", + start_date = "2012-10-22", + end_date = "2012-10-23") + + e1.save() + + j1 = Job(name = "Software Developer", + start_date = "2012-10-22", + end_date = "2012-10-23", + description = "A software job", + event = e1) + + j2 = Job(name = "Systems Administrator", + start_date = "2012-9-1", + end_date = "2012-10-26", + description = "A systems administrator job", + event = e1) + + j1.save() + j2.save() + + s1 = Shift(date = "2012-10-23", + start_time = "9:00", + end_time = "3:00", + max_volunteers = 1, + job = j1) + + s2 = Shift(date = "2012-10-23", + start_time = "10:00", + end_time = "4:00", + max_volunteers = 2, + job = j1) + + s3 = Shift(date = "2012-10-23", + start_time = "12:00", + end_time = "6:00", + max_volunteers = 4, + job = j2) + + s1.save() + s2.save() + s3.save() + + #register will return an exception on error (such as when invalid parameters are passed) + #if an exception does get raised, this test will automatically fail + register(v1.id, s1.id) + self.assertIsNotNone(VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s1.id)) + + register(v1.id, s2.id) + self.assertIsNotNone(VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s2.id)) + + register(v1.id, s3.id) + self.assertIsNotNone(VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s3.id)) + + start_time = datetime.time(hour=9, minute=0) + end_time = datetime.time(hour=10, minute=0) + add_shift_hours(v1.id, s1.id, start_time, end_time) + volunteer_shift = VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s1.id); + self.assertEqual(volunteer_shift.start_time, start_time) + self.assertEqual(volunteer_shift.end_time, end_time) + + start_time = datetime.time(hour=10, minute=0) + end_time = datetime.time(hour=12, minute=0) + add_shift_hours(v1.id, s2.id, start_time, end_time) + volunteer_shift = VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s2.id); + self.assertEqual(volunteer_shift.start_time, start_time) + self.assertEqual(volunteer_shift.end_time, end_time) + + start_time = datetime.time(hour=5, minute=0) + end_time = datetime.time(hour=6, minute=0) + add_shift_hours(v1.id, s3.id, start_time, end_time) + volunteer_shift = VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s3.id); + self.assertEqual(volunteer_shift.start_time, start_time) + self.assertEqual(volunteer_shift.end_time, end_time) + + def test_calculate_total_report_hours(self): + + duration_list = [1, 1, 1, 1] + report_list = [] + total_hours = 0 + + for duration in duration_list: + total_hours += duration + report = {} + report["duration"] = duration + report_list.append(report) + + self.assertEqual(calculate_total_report_hours(report_list), total_hours) + + duration_list = [1.5, 1.34, 2.3, 9, 4.7] + report_list = [] + total_hours = 0 + + for duration in duration_list: + total_hours += duration + report = {} + report["duration"] = duration + report_list.append(report) + + self.assertEqual(calculate_total_report_hours(report_list), total_hours) + + duration_list = [0.03, 0.023, 0.53, 0.863, 0.23, 0.57] + report_list = [] + total_hours = 0 + + for duration in duration_list: + total_hours += duration + report = {} + report["duration"] = duration + report_list.append(report) + + self.assertEqual(calculate_total_report_hours(report_list), total_hours) + + duration_list = [12, 24, 23.5, 15.67, 22.453, 3.42] + report_list = [] + total_hours = 0 + + for duration in duration_list: + total_hours += duration + report = {} + report["duration"] = duration + report_list.append(report) + + self.assertEqual(calculate_total_report_hours(report_list), total_hours) + + duration_list = [5] + report_list = [] + total_hours = 0 + + for duration in duration_list: + total_hours += duration + report = {} + report["duration"] = duration + report_list.append(report) + + self.assertEqual(calculate_total_report_hours(report_list), total_hours) + + duration_list = [0, 0, 0, 0] + report_list = [] + total_hours = 0 + + for duration in duration_list: + total_hours += duration + report = {} + report["duration"] = duration + report_list.append(report) + + self.assertEqual(calculate_total_report_hours(report_list), total_hours) + + duration_list = [0] + report_list = [] + total_hours = 0 + + for duration in duration_list: + total_hours += duration + report = {} + report["duration"] = duration + report_list.append(report) + + self.assertEqual(calculate_total_report_hours(report_list), total_hours) + + def test_cancel_shift_registration(self): + + u1 = User.objects.create_user('Yoshi') + u2 = User.objects.create_user('John') + + v1 = Volunteer(first_name = "Yoshi", + last_name = "Turtle", + address = "Mario Land", + city = "Nintendo Land", + state = "Nintendo State", + country = "Nintendo Nation", + phone_number = "2374983247", + email = "yoshi@nintendo.com", + user = u1) + + v2 = Volunteer(first_name = "John", + last_name = "Doe", + address = "7 Alpine Street", + city = "Maplegrove", + state = "Wyoming", + country = "USA", + phone_number = "23454545", + email = "john@test.com", + user = u2) + + v1.save() + v2.save() + + e1 = Event(name = "Open Source Event", + start_date = "2012-10-22", + end_date = "2012-10-23") + + e1.save() + + j1 = Job(name = "Software Developer", + start_date = "2012-10-22", + end_date = "2012-10-23", + description = "A software job", + event = e1) + + j2 = Job(name = "Systems Administrator", + start_date = "2012-9-1", + end_date = "2012-10-26", + description = "A systems administrator job", + event = e1) + + j1.save() + j2.save() + + s1 = Shift(date = "2012-10-23", + start_time = "9:00", + end_time = "3:00", + max_volunteers = 1, + job = j1) + + s2 = Shift(date = "2012-10-23", + start_time = "10:00", + end_time = "4:00", + max_volunteers = 2, + job = j1) + + s3 = Shift(date = "2012-10-23", + start_time = "12:00", + end_time = "6:00", + max_volunteers = 4, + job = j2) + + s1.save() + s2.save() + s3.save() + + #test cases when try to cancel when they aren't signed up for a shift + with self.assertRaises(ObjectDoesNotExist): + cancel_shift_registration(v1.id, s1.id) + + with self.assertRaises(ObjectDoesNotExist): + cancel_shift_registration(v1.id, s1.id) + + with self.assertRaises(ObjectDoesNotExist): + cancel_shift_registration(v1.id, s2.id) + + with self.assertRaises(ObjectDoesNotExist): + cancel_shift_registration(v1.id, s3.id) + + with self.assertRaises(ObjectDoesNotExist): + cancel_shift_registration(v2.id, s1.id) + + with self.assertRaises(ObjectDoesNotExist): + cancel_shift_registration(v2.id, s2.id) + + with self.assertRaises(ObjectDoesNotExist): + cancel_shift_registration(v2.id, s3.id) + + #register volunteers to shifts + register(v1.id, s1.id) + register(v1.id, s2.id) + register(v1.id, s3.id) + register(v2.id, s1.id) + register(v2.id, s2.id) + register(v2.id, s3.id) + + #test typical cases + cancel_shift_registration(v1.id, s1.id) + cancel_shift_registration(v1.id, s2.id) + cancel_shift_registration(v1.id, s3.id) + #cancel_shift_registration(v2.id, s1.id) #why is this throwing ObjectDoesNotExist? + cancel_shift_registration(v2.id, s2.id) + cancel_shift_registration(v2.id, s3.id) + + def test_calculate_duration(self): + + start_time = datetime.time(hour=1, minute=0) + end_time = datetime.time(hour=2, minute=0) + delta_time_hours = 1 + self.assertEqual(calculate_duration(start_time, end_time), delta_time_hours) + + start_time = datetime.time(hour=1, minute=45) + end_time = datetime.time(hour=2, minute=0) + delta_time_hours = 0.25 + self.assertEqual(calculate_duration(start_time, end_time), delta_time_hours) + + start_time = datetime.time(hour=1, minute=0) + end_time = datetime.time(hour=2, minute=30) + delta_time_hours = 1.5 + self.assertEqual(calculate_duration(start_time, end_time), delta_time_hours) + + start_time = datetime.time(hour=1, minute=0) + end_time = datetime.time(hour=1, minute=45) + delta_time_hours = 0.75 + self.assertEqual(calculate_duration(start_time, end_time), delta_time_hours) + + start_time = datetime.time(hour=1, minute=0) + end_time = datetime.time(hour=13, minute=0) + delta_time_hours = 12 + self.assertEqual(calculate_duration(start_time, end_time), delta_time_hours) + + start_time = datetime.time(hour=1, minute=0) + end_time = datetime.time(hour=5, minute=45) + delta_time_hours = 4.75 + self.assertEqual(calculate_duration(start_time, end_time), delta_time_hours) + + start_time = datetime.time(hour=1, minute=0) + end_time = datetime.time(hour=1, minute=0) + delta_time_hours = 0 + self.assertEqual(calculate_duration(start_time, end_time), delta_time_hours) + + start_time = datetime.time(hour=1, minute=0) + end_time = datetime.time(hour=23, minute=0) + delta_time_hours = 22 + self.assertEqual(calculate_duration(start_time, end_time), delta_time_hours) + + start_time = datetime.time(hour=22, minute=0) + end_time = datetime.time(hour=1, minute=0) + delta_time_hours = 3 + self.assertEqual(calculate_duration(start_time, end_time), delta_time_hours) + + start_time = datetime.time(hour=13, minute=0) + end_time = datetime.time(hour=1, minute=0) + delta_time_hours = 12 + self.assertEqual(calculate_duration(start_time, end_time), delta_time_hours) + + start_time = datetime.time(hour=0, minute=0) + end_time = datetime.time(hour=23, minute=0) + delta_time_hours = 23 + self.assertEqual(calculate_duration(start_time, end_time), delta_time_hours) + + start_time = datetime.time(hour=23, minute=0) + end_time = datetime.time(hour=0, minute=0) + delta_time_hours = 1 + self.assertEqual(calculate_duration(start_time, end_time), delta_time_hours) + + def test_clear_shift_hours(self): + + u1 = User.objects.create_user('Yoshi') + + v1 = Volunteer(first_name = "Yoshi", + last_name = "Turtle", + address = "Mario Land", + city = "Nintendo Land", + state = "Nintendo State", + country = "Nintendo Nation", + phone_number = "2374983247", + email = "yoshi@nintendo.com", + user = u1) + + v1.save() + + e1 = Event(name = "Open Source Event", + start_date = "2012-10-22", + end_date = "2012-10-23") + + e1.save() + + j1 = Job(name = "Software Developer", + start_date = "2012-10-22", + end_date = "2012-10-23", + description = "A software job", + event = e1) + + j2 = Job(name = "Systems Administrator", + start_date = "2012-9-1", + end_date = "2012-10-26", + description = "A systems administrator job", + event = e1) + + j1.save() + j2.save() + + s1 = Shift(date = "2012-10-23", + start_time = "9:00", + end_time = "3:00", + max_volunteers = 1, + job = j1) + + s2 = Shift(date = "2012-10-23", + start_time = "10:00", + end_time = "4:00", + max_volunteers = 2, + job = j1) + + s3 = Shift(date = "2012-10-23", + start_time = "12:00", + end_time = "6:00", + max_volunteers = 4, + job = j2) + + s1.save() + s2.save() + s3.save() + + register(v1.id, s1.id) + self.assertIsNotNone(VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s1.id)) + + register(v1.id, s2.id) + self.assertIsNotNone(VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s2.id)) + + register(v1.id, s3.id) + self.assertIsNotNone(VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s3.id)) + + start_time = datetime.time(hour=9, minute=0) + end_time = datetime.time(hour=10, minute=0) + add_shift_hours(v1.id, s1.id, start_time, end_time) + + start_time = datetime.time(hour=10, minute=0) + end_time = datetime.time(hour=12, minute=0) + add_shift_hours(v1.id, s2.id, start_time, end_time) + + start_time = datetime.time(hour=5, minute=0) + end_time = datetime.time(hour=6, minute=0) + add_shift_hours(v1.id, s3.id, start_time, end_time) + + clear_shift_hours(v1.id, s1.id) + volunteer_shift = VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s1.id) + self.assertIsNone(volunteer_shift.start_time) + self.assertIsNone(volunteer_shift.end_time) + + clear_shift_hours(v1.id, s2.id) + volunteer_shift = VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s2.id) + self.assertIsNone(volunteer_shift.start_time) + self.assertIsNone(volunteer_shift.end_time) + + clear_shift_hours(v1.id, s3.id) + volunteer_shift = VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s3.id) + self.assertIsNone(volunteer_shift.start_time) + self.assertIsNone(volunteer_shift.end_time) + + def test_edit_shift_hours(self): + + u1 = User.objects.create_user('Yoshi') + + v1 = Volunteer(first_name = "Yoshi", + last_name = "Turtle", + address = "Mario Land", + city = "Nintendo Land", + state = "Nintendo State", + country = "Nintendo Nation", + phone_number = "2374983247", + email = "yoshi@nintendo.com", + user = u1) + + v1.save() + + e1 = Event(name = "Open Source Event", + start_date = "2012-10-22", + end_date = "2012-10-23") + + e1.save() + + j1 = Job(name = "Software Developer", + start_date = "2012-10-22", + end_date = "2012-10-23", + description = "A software job", + event = e1) + + j1.save() + + s1 = Shift(date = "2012-10-23", + start_time = "1:00", + end_time = "12:00", + max_volunteers = 1, + job = j1) + + s1.save() + + register(v1.id, s1.id) + self.assertIsNotNone(VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s1.id)) + + start_time = datetime.time(hour=9, minute=0) + end_time = datetime.time(hour=10, minute=0) + add_shift_hours(v1.id, s1.id, start_time, end_time) + + start_time = datetime.time(hour=10, minute=0) + end_time = datetime.time(hour=11, minute=0) + edit_shift_hours(v1.id, s1.id, start_time, end_time) + volunteer_shift = VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s1.id) + self.assertIsNotNone(volunteer_shift.start_time) + self.assertIsNotNone(volunteer_shift.end_time) + self.assertEqual(volunteer_shift.start_time, start_time) + self.assertEqual(volunteer_shift.end_time, end_time) + + start_time = datetime.time(hour=1, minute=0) + end_time = datetime.time(hour=4, minute=0) + edit_shift_hours(v1.id, s1.id, start_time, end_time) + volunteer_shift = VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s1.id) + self.assertIsNotNone(volunteer_shift.start_time) + self.assertIsNotNone(volunteer_shift.end_time) + self.assertEqual(volunteer_shift.start_time, start_time) + self.assertEqual(volunteer_shift.end_time, end_time) + + start_time = datetime.time(hour=4, minute=15) + end_time = datetime.time(hour=12, minute=35) + edit_shift_hours(v1.id, s1.id, start_time, end_time) + volunteer_shift = VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s1.id) + self.assertIsNotNone(volunteer_shift.start_time) + self.assertIsNotNone(volunteer_shift.end_time) + self.assertEqual(volunteer_shift.start_time, start_time) + self.assertEqual(volunteer_shift.end_time, end_time) + + start_time = datetime.time(hour=2, minute=5) + end_time = datetime.time(hour=4, minute=15) + edit_shift_hours(v1.id, s1.id, start_time, end_time) + volunteer_shift = VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s1.id) + self.assertIsNotNone(volunteer_shift.start_time) + self.assertIsNotNone(volunteer_shift.end_time) + self.assertEqual(volunteer_shift.start_time, start_time) + self.assertEqual(volunteer_shift.end_time, end_time) + + start_time = datetime.time(hour=5, minute=0) + end_time = datetime.time(hour=5, minute=30) + edit_shift_hours(v1.id, s1.id, start_time, end_time) + volunteer_shift = VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s1.id) + self.assertIsNotNone(volunteer_shift.start_time) + self.assertIsNotNone(volunteer_shift.end_time) + self.assertEqual(volunteer_shift.start_time, start_time) + self.assertEqual(volunteer_shift.end_time, end_time) + + def test_get_shift_by_id(self): + + e1 = Event(name = "Open Source Event", + start_date = "2012-10-22", + end_date = "2012-10-23") + + e1.save() + + j1 = Job(name = "Software Developer", + start_date = "2012-10-22", + end_date = "2012-10-23", + description = "A software job", + event = e1) + + j1.save() + + s1 = Shift(date = "2012-10-23", + start_time = "9:00", + end_time = "3:00", + max_volunteers = 1, + job = j1) + + s2 = Shift(date = "2012-10-23", + start_time = "10:00", + end_time = "4:00", + max_volunteers = 2, + job = j1) + + s3 = Shift(date = "2012-10-23", + start_time = "12:00", + end_time = "6:00", + max_volunteers = 4, + job = j1) + + s1.save() + s2.save() + s3.save() + + #test typical cases + self.assertIsNotNone(get_shift_by_id(s1.id)) + self.assertIsNotNone(get_shift_by_id(s2.id)) + self.assertIsNotNone(get_shift_by_id(s3.id)) + + self.assertEqual(get_shift_by_id(s1.id), s1) + self.assertEqual(get_shift_by_id(s2.id), s2) + self.assertEqual(get_shift_by_id(s3.id), s3) + + #test non-existant cases + self.assertIsNone(get_shift_by_id(100)) + self.assertIsNone(get_shift_by_id(200)) + self.assertIsNone(get_shift_by_id(300)) + self.assertIsNone(get_shift_by_id(400)) + + self.assertNotEqual(get_shift_by_id(100), s1) + self.assertNotEqual(get_shift_by_id(100), s2) + self.assertNotEqual(get_shift_by_id(100), s3) + self.assertNotEqual(get_shift_by_id(200), s1) + self.assertNotEqual(get_shift_by_id(200), s2) + self.assertNotEqual(get_shift_by_id(200), s3) + self.assertNotEqual(get_shift_by_id(300), s1) + self.assertNotEqual(get_shift_by_id(300), s2) + self.assertNotEqual(get_shift_by_id(300), s3) + + def get_shifts_ordered_by_date(self): + + e1 = Event(name = "Open Source Event", + start_date = "2012-10-22", + end_date = "2012-10-23") + + e1.save() + + j1 = Job(name = "Software Developer", + start_date = "2012-10-22", + end_date = "2012-10-23", + description = "A software job", + event = e1) + + j1.save() + + s1 = Shift(date = "2012-1-10", + start_time = "9:00", + end_time = "3:00", + max_volunteers = 1, + job = j1) + + s2 = Shift(date = "2012-6-25", + start_time = "10:00", + end_time = "4:00", + max_volunteers = 2, + job = j1) + + s3 = Shift(date = "2012-12-9", + start_time = "12:00", + end_time = "6:00", + max_volunteers = 4, + job = j1) + + s1.save() + s2.save() + s3.save() + + #test typical case + shift_list = get_shifts_ordered_by_date(j1.id) + self.assertIsNotNone(shift_list) + self.assertNotEqual(shift_list, False) + self.assertEqual(len(shift_list), 3) + self.assertIn(s1, shift_list) + self.assertIn(s2, shift_list) + self.assertIn(s3, shift_list) + + #test order + self.assertEqual(shift_list[0].date, s1.date) + self.assertEqual(shift_list[1].date, s2.date) + self.assertEqual(shift_list[2].date, s3.date) + + def test_get_unlogged_shifts_by_volunteer_id(self): + + u1 = User.objects.create_user('Yoshi') + + v1 = Volunteer(first_name = "Yoshi", + last_name = "Turtle", + address = "Mario Land", + city = "Nintendo Land", + state = "Nintendo State", + country = "Nintendo Nation", + phone_number = "2374983247", + email = "yoshi@nintendo.com", + user = u1) + + v1.save() + + e1 = Event(name = "Open Source Event", + start_date = "2012-10-22", + end_date = "2012-10-23") + + e1.save() + + j1 = Job(name = "Software Developer", + start_date = "2012-10-22", + end_date = "2012-10-23", + description = "A software job", + event = e1) + + j2 = Job(name = "Systems Administrator", + start_date = "2012-9-1", + end_date = "2012-10-26", + description = "A systems administrator job", + event = e1) + + j1.save() + j2.save() + + s1 = Shift(date = "2012-10-23", + start_time = "9:00", + end_time = "3:00", + max_volunteers = 1, + job = j1) + + s2 = Shift(date = "2012-10-23", + start_time = "10:00", + end_time = "4:00", + max_volunteers = 2, + job = j1) + + s3 = Shift(date = "2012-10-23", + start_time = "12:00", + end_time = "6:00", + max_volunteers = 4, + job = j2) + + s1.save() + s2.save() + s3.save() + + #sign up + register(v1.id, s1.id) + register(v1.id, s2.id) + register(v1.id, s3.id) + + #test typical case + shift_list = get_unlogged_shifts_by_volunteer_id(v1.id) + self.assertIsNotNone(shift_list) + self.assertNotEqual(shift_list, False) + self.assertEqual(len(shift_list), 3) + self.assertIn(s1, shift_list) + self.assertIn(s2, shift_list) + self.assertIn(s3, shift_list) + + def test_get_volunteer_shift_by_id(self): + + u1 = User.objects.create_user('Yoshi') + u2 = User.objects.create_user('John') + + v1 = Volunteer(first_name = "Yoshi", + last_name = "Turtle", + address = "Mario Land", + city = "Nintendo Land", + state = "Nintendo State", + country = "Nintendo Nation", + phone_number = "2374983247", + email = "yoshi@nintendo.com", + user = u1) + + v2 = Volunteer(first_name = "John", + last_name = "Doe", + address = "7 Alpine Street", + city = "Maplegrove", + state = "Wyoming", + country = "USA", + phone_number = "23454545", + email = "john@test.com", + user = u2) + + v1.save() + v2.save() + + e1 = Event(name = "Open Source Event", + start_date = "2012-10-22", + end_date = "2012-10-23") + + e1.save() + + j1 = Job(name = "Software Developer", + start_date = "2012-10-22", + end_date = "2012-10-23", + description = "A software job", + event = e1) + + j2 = Job(name = "Systems Administrator", + start_date = "2012-9-1", + end_date = "2012-10-26", + description = "A systems administrator job", + event = e1) + + j1.save() + j2.save() + + s1 = Shift(date = "2012-10-23", + start_time = "9:00", + end_time = "3:00", + max_volunteers = 1, + job = j1) + + s2 = Shift(date = "2012-10-23", + start_time = "10:00", + end_time = "4:00", + max_volunteers = 2, + job = j1) + + s3 = Shift(date = "2012-10-23", + start_time = "12:00", + end_time = "6:00", + max_volunteers = 4, + job = j2) + + s1.save() + s2.save() + s3.save() + + #test cases where signed up + register(v1.id, s1.id) + register(v1.id, s2.id) + register(v1.id, s3.id) + + register(v2.id, s1.id) + register(v2.id, s2.id) + register(v2.id, s3.id) + + self.assertEqual(get_volunteer_shift_by_id(v1.id, s1.id), VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s1.id)) + self.assertEqual(get_volunteer_shift_by_id(v1.id, s2.id), VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s2.id)) + self.assertEqual(get_volunteer_shift_by_id(v1.id, s3.id), VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s3.id)) + + #self.assertEqual(get_volunteer_shift_by_id(v2.id, s1.id), VolunteerShift.objects.get(volunteer_id=v2.id, shift_id=s1.id)) #why does this throw DoesNotExist? + self.assertEqual(get_volunteer_shift_by_id(v2.id, s2.id), VolunteerShift.objects.get(volunteer_id=v2.id, shift_id=s2.id)) + self.assertEqual(get_volunteer_shift_by_id(v2.id, s3.id), VolunteerShift.objects.get(volunteer_id=v2.id, shift_id=s3.id)) + + + def test_is_signed_up(self): + + u1 = User.objects.create_user('Yoshi') + u2 = User.objects.create_user('John') + + v1 = Volunteer(first_name = "Yoshi", + last_name = "Turtle", + address = "Mario Land", + city = "Nintendo Land", + state = "Nintendo State", + country = "Nintendo Nation", + phone_number = "2374983247", + email = "yoshi@nintendo.com", + user = u1) + + v2 = Volunteer(first_name = "John", + last_name = "Doe", + address = "7 Alpine Street", + city = "Maplegrove", + state = "Wyoming", + country = "USA", + phone_number = "23454545", + email = "john@test.com", + user = u2) + + v1.save() + v2.save() + + e1 = Event(name = "Open Source Event", + start_date = "2012-10-22", + end_date = "2012-10-23") + + e1.save() + + j1 = Job(name = "Software Developer", + start_date = "2012-10-22", + end_date = "2012-10-23", + description = "A software job", + event = e1) + + j2 = Job(name = "Systems Administrator", + start_date = "2012-9-1", + end_date = "2012-10-26", + description = "A systems administrator job", + event = e1) + + j1.save() + j2.save() + + s1 = Shift(date = "2012-10-23", + start_time = "9:00", + end_time = "3:00", + max_volunteers = 1, + job = j1) + + s2 = Shift(date = "2012-10-23", + start_time = "10:00", + end_time = "4:00", + max_volunteers = 2, + job = j1) + + s3 = Shift(date = "2012-10-23", + start_time = "12:00", + end_time = "6:00", + max_volunteers = 4, + job = j2) + + s1.save() + s2.save() + s3.save() + + #test cases where not signed up yet + self.assertFalse(is_signed_up(v1.id, s1.id)) + self.assertFalse(is_signed_up(v1.id, s2.id)) + self.assertFalse(is_signed_up(v1.id, s3.id)) + + #test cases where signed up + register(v1.id, s1.id) + register(v1.id, s2.id) + register(v1.id, s3.id) + + self.assertTrue(is_signed_up(v1.id, s1.id)) + self.assertTrue(is_signed_up(v1.id, s2.id)) + self.assertTrue(is_signed_up(v1.id, s3.id)) + + #test case where more than one volunteer signs up for the same shift + self.assertFalse(is_signed_up(v2.id, s1.id)) + self.assertFalse(is_signed_up(v2.id, s2.id)) + self.assertFalse(is_signed_up(v2.id, s3.id)) + + register(v2.id, s2.id) + register(v2.id, s3.id) + + self.assertFalse(is_signed_up(v2.id, s1.id)) + self.assertTrue(is_signed_up(v2.id, s2.id)) + self.assertTrue(is_signed_up(v2.id, s3.id)) + + def test_register(self): + + RESULT_IS_VALID = "IS_VALID" + ERROR_CODE_ALREADY_SIGNED_UP = "ERROR_CODE_ALREADY_SIGNED_UP" + ERROR_CODE_NO_SLOTS_REMAINING = "ERROR_CODE_NO_SLOTS_REMAINING" + + u1 = User.objects.create_user('Yoshi') + u2 = User.objects.create_user('John') + + v1 = Volunteer(first_name = "Yoshi", + last_name = "Turtle", + address = "Mario Land", + city = "Nintendo Land", + state = "Nintendo State", + country = "Nintendo Nation", + phone_number = "2374983247", + email = "yoshi@nintendo.com", + user = u1) + + v2 = Volunteer(first_name = "John", + last_name = "Doe", + address = "7 Alpine Street", + city = "Maplegrove", + state = "Wyoming", + country = "USA", + phone_number = "23454545", + email = "john@test.com", + user = u2) + + v1.save() + v2.save() + + e1 = Event(name = "Open Source Event", + start_date = "2012-10-22", + end_date = "2012-10-23") + + e1.save() + + j1 = Job(name = "Software Developer", + start_date = "2012-10-22", + end_date = "2012-10-23", + description = "A software job", + event = e1) + + j2 = Job(name = "Systems Administrator", + start_date = "2012-9-1", + end_date = "2012-10-26", + description = "A systems administrator job", + event = e1) + + j1.save() + j2.save() + + s1 = Shift(date = "2012-10-23", + start_time = "9:00", + end_time = "3:00", + max_volunteers = 1, + job = j1) + + s2 = Shift(date = "2012-10-23", + start_time = "10:00", + end_time = "4:00", + max_volunteers = 2, + job = j1) + + s3 = Shift(date = "2012-10-23", + start_time = "12:00", + end_time = "6:00", + max_volunteers = 4, + job = j2) + + s1.save() + s2.save() + s3.save() + + #test typical cases + register(v1.id, s1.id) + self.assertIsNotNone(VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s1.id)) + + register(v1.id, s2.id) + self.assertIsNotNone(VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s2.id)) + + register(v1.id, s3.id) + self.assertIsNotNone(VolunteerShift.objects.get(volunteer_id=v1.id, shift_id=s3.id)) + + #test cases where volunteer tries to sign up for a shift they are already signed up for + self.assertEqual(register(v1.id, s1.id), ERROR_CODE_ALREADY_SIGNED_UP) + self.assertEqual(register(v1.id, s2.id), ERROR_CODE_ALREADY_SIGNED_UP) + self.assertEqual(register(v1.id, s3.id), ERROR_CODE_ALREADY_SIGNED_UP) + + #test case where more than one volunteer signs up for the same shift + #v2 can't sign up for s1 because there are no slots remaining + self.assertEqual(register(v2.id, s1.id), ERROR_CODE_NO_SLOTS_REMAINING) + + register(v2.id, s2.id) + self.assertIsNotNone(VolunteerShift.objects.get(volunteer_id=v2.id, shift_id=s2.id)) + + register(v2.id, s3.id) + self.assertIsNotNone(VolunteerShift.objects.get(volunteer_id=v2.id, shift_id=s3.id)) + + #test cases where a volunteer tries to sign up for a shift they are already signed up for + self.assertEqual(register(v2.id, s2.id), ERROR_CODE_ALREADY_SIGNED_UP) + self.assertEqual(register(v2.id, s3.id), ERROR_CODE_ALREADY_SIGNED_UP) diff --git a/vms/shift/tests/test_viewVolunteerShift.py b/vms/shift/tests/test_viewVolunteerShift.py new file mode 100644 index 0000000..2c2f27d --- /dev/null +++ b/vms/shift/tests/test_viewVolunteerShift.py @@ -0,0 +1,235 @@ +from django.test import TestCase +from django.contrib.staticfiles.testing import LiveServerTestCase + +from django.contrib.auth.models import User +from volunteer.models import Volunteer +from event.models import Event +from job.models import Job +from shift.models import Shift, VolunteerShift + +from selenium import webdriver +from selenium.common.exceptions import NoSuchElementException + +from organization.models import Organization #hack to pass travis,Bug in Code +import re + + +class ViewVolunteerShift(LiveServerTestCase): + ''' + ''' + def setUp(self): + volunteer_user = User.objects.create_user( + username = 'volunteer', + password = 'volunteer', + email = 'volunteer@volunteer.com') + + volunteer = Volunteer.objects.create( + user = volunteer_user, + address = 'address', + city = 'city', + state = 'state', + country = 'country', + phone_number = '9999999999', + unlisted_organization = 'organization') + + # create an org prior to registration. Bug in Code + # added to pass CI + volunteer_id = Volunteer.objects.get(user__username = 'volunteer').pk + Organization.objects.create( + name = 'DummyOrg') + + self.homepage = '/home/' + self.authentication_page = '/authentication/login/' + self.driver = webdriver.Firefox() + self.driver.implicitly_wait(5) + self.driver.maximize_window() + super(ViewVolunteerShift, self).setUp() + + def tearDown(self): + self.driver.quit() + super(ViewVolunteerShift, self).tearDown() + + def login(self, credentials): + self.driver.get(self.live_server_url + self.authentication_page) + self.driver.find_element_by_id('id_login').send_keys(credentials['username']) + self.driver.find_element_by_id('id_password').send_keys(credentials['password']) + self.driver.find_element_by_xpath('//form[1]').submit() + + def test_access_another_existing_volunteer_view(self): + ''' + test_volunteer_user = User.objects.create_user( + username = 'test_volunteer', + password = 'volunteer', + email = 'test_volunteer@volunteer.com') + + test_volunteer = Volunteer.objects.create( + user = test_volunteer_user, + address = 'address', + city = 'city', + state = 'state', + country = 'country', + phone_number = '9999999999', + unlisted_organization = 'organization') + + test_volunteer_id = Volunteer.objects.get(user__username = 'test_volunteer').pk + + credentials = {'username' : 'volunteer', 'password' : 'volunteer'} + self.login(credentials) + self.driver.get(self.live_server_url + '/shift/view_volunteer_shifts/' + str(test_volunteer_id)) + ''' + pass + + def test_access_another_nonexisting_volunteer_view(self): + credentials = {'username' : 'volunteer', 'password' : 'volunteer'} + self.login(credentials) + self.driver.get(self.live_server_url + '/shift/view_volunteer_shifts/' + '65459') + found = re.search('Not Found', self.driver.page_source) + self.assertNotEqual(found, None) + + def test_view_without_any_assigned_shift(self): + credentials = {'username' : 'volunteer', 'password' : 'volunteer'} + self.login(credentials) + self.driver.find_element_by_link_text('Upcoming Shifts').click() + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-info').text, 'You do not have any upcoming shifts.') + + def register_dataset(self, parameters): + try: + org = Organization.objects.create(name = parameters['org']) + except IntegrityError: + org = Organization.objects.get(name = parameters['org']) + + + volunteer = Volunteer.objects.get(user__username = 'volunteer') + + # create shift and log hours + event = Event.objects.create( + name = parameters['event']['name'], + start_date = parameters['event']['start_date'], + end_date = parameters['event']['end_date']) + + job = Job.objects.create( + name = parameters['job']['name'], + start_date = parameters['job']['start_date'], + end_date = parameters['job']['end_date'], + event = event) + + shift = Shift.objects.create( + date = parameters['shift']['date'], + start_time = parameters['shift']['start_time'], + end_time = parameters['shift']['end_time'], + max_volunteers = parameters['shift']['max_volunteers'], + job = job) + + # shift is assigned to volunteer + VolunteerShift.objects.create( + shift = shift, + volunteer = volunteer) + + def test_view_with_assigned_and_unlogged_shift(self): + parameters = {'org' : 'org-one', + 'event' : { + 'name' : 'event-four', + 'start_date' : '2015-06-01', + 'end_date' : '2015-06-10'}, + 'job' : { + 'name' : 'jobOneInEventFour', + 'start_date' : '2015-06-01', + 'end_date' : '2015-06-01'}, + 'shift' : { + 'date' : '2015-06-01', + 'start_time' : '09:00', + 'end_time' : '10:00', + 'max_volunteers' : '10'}} + + self.register_dataset(parameters) + credentials = {'username' : 'volunteer', 'password' : 'volunteer'} + self.login(credentials) + self.driver.find_element_by_link_text('Upcoming Shifts').click() + + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[1]').text, 'jobOneInEventFour') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[2]').text, 'June 1, 2015') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[3]').text, '9 a.m.') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, '10 a.m.') + + def test_log_hours_and_logged_shift_does_not_appear_in_upcoming_shifts(self): + parameters = {'org' : 'org-one', + 'event' : { + 'name' : 'event-four', + 'start_date' : '2015-06-01', + 'end_date' : '2015-06-10'}, + 'job' : { + 'name' : 'jobOneInEventFour', + 'start_date' : '2015-06-01', + 'end_date' : '2015-06-01'}, + 'shift' : { + 'date' : '2015-06-01', + 'start_time' : '09:00', + 'end_time' : '10:00', + 'max_volunteers' : '10'}} + + self.register_dataset(parameters) + credentials = {'username' : 'volunteer', 'password' : 'volunteer'} + self.login(credentials) + self.driver.find_element_by_link_text('Upcoming Shifts').click() + + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[5]').text, 'Log Hours') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[5]/a').click() + + self.driver.find_element_by_xpath( + '//input[@name = "start_time"]').send_keys('09:00') + self.driver.find_element_by_xpath( + '//input[@name = "end_time"]').send_keys('12:00') + self.driver.find_element_by_xpath('//form').submit() + + # check logged shift does not appear in Upcoming Shifts + self.driver.find_element_by_link_text('Upcoming Shifts').click() + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-info').text, 'You do not have any upcoming shifts.') + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_xpath('//table') + + def test_cancel_shift_registration(self): + parameters = {'org' : 'org-one', + 'event' : { + 'name' : 'event-four', + 'start_date' : '2015-06-01', + 'end_date' : '2015-06-10'}, + 'job' : { + 'name' : 'jobOneInEventFour', + 'start_date' : '2015-06-01', + 'end_date' : '2015-06-01'}, + 'shift' : { + 'date' : '2015-06-01', + 'start_time' : '09:00', + 'end_time' : '10:00', + 'max_volunteers' : '10'}} + + self.register_dataset(parameters) + credentials = {'username' : 'volunteer', 'password' : 'volunteer'} + self.login(credentials) + self.driver.find_element_by_link_text('Upcoming Shifts').click() + + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[6]').text, 'Cancel Shift Registration') + self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[6]/a').click() + + self.assertEqual(self.driver.find_element_by_class_name( + 'panel-title').text, 'Cancel Shift Confirmation') + self.assertEqual(self.driver.find_element_by_tag_name('button').text, + 'Yes, Cancel this Shift') + self.driver.find_element_by_xpath('//form').submit() + + # check shift removed from upcoming shifts + self.driver.find_element_by_link_text('Upcoming Shifts').click() + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-info').text, 'You do not have any upcoming shifts.') + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_xpath('//table') diff --git a/vms/vms/settings.py b/vms/vms/settings.py index 819bfe2..6f96075 100644 --- a/vms/vms/settings.py +++ b/vms/vms/settings.py @@ -114,3 +114,5 @@ # If user fails to authenticate, then they are redirected to the view # specified in the reverse_lazy call LOGIN_URL = reverse_lazy('auth:user_login') + +STATIC_ROOT = './static/' diff --git a/vms/volunteer/tests/__init__.py b/vms/volunteer/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vms/volunteer/tests/test_searchVolunteer.py b/vms/volunteer/tests/test_searchVolunteer.py new file mode 100644 index 0000000..57319b9 --- /dev/null +++ b/vms/volunteer/tests/test_searchVolunteer.py @@ -0,0 +1,704 @@ +from django.test import TestCase +from django.contrib.staticfiles.testing import LiveServerTestCase + +from django.contrib.auth.models import User + +from selenium import webdriver +from selenium.common.exceptions import NoSuchElementException + +from administrator.models import Administrator +from organization.models import Organization #hack to pass travis,Bug in Code + + +class SearchVolunteer(LiveServerTestCase): + ''' + SearchVolunteer class contains tests to check '/voluneer/search/' view. + Choices of parameters contains + - First Name + - Last Name + - City + - State + - Country + - Organization + Class contains 7 tests to check each parameter separately and also to check + if a combination of parameters entered, then intersection of all results is + obtained. + ''' + def setUp(self): + admin_user = User.objects.create_user( + username = 'admin', + password = 'admin', + email = 'admin@admin.com') + + Administrator.objects.create( + user = admin_user, + address = 'address', + city = 'city', + state = 'state', + country = 'country', + phone_number = '9999999999', + unlisted_organization = 'organization') + + # create an org prior to registration. Bug in Code + # added to pass CI + Organization.objects.create( + name = 'DummyOrg') + + self.homepage = '/home/' + self.registration_page = '/registration/signup_volunteer/' + self.authentication_page = '/authentication/login/' + self.driver = webdriver.Firefox() + self.driver.implicitly_wait(5) + self.driver.maximize_window() + super(SearchVolunteer, self).setUp() + + def tearDown(self): + self.driver.quit() + super(SearchVolunteer, self).tearDown() + + def register_volunteer(self,credentials): + ''' + Utility function to register a volunteer with supplied credentials. + Credentials is a list of parameters to register a volunteer. Parameters + are in following order. + - username + - password + - first_name + - last_name + - email + - address + - city + - state + - country + - phone_number + - organization + ''' + self.driver.get(self.live_server_url + '/registration/signup_volunteer/') + + self.driver.find_element_by_id('id_username').send_keys(credentials[0]) + self.driver.find_element_by_id('id_password').send_keys(credentials[1]) + self.driver.find_element_by_id('id_first_name').send_keys(credentials[2]) + self.driver.find_element_by_id('id_last_name').send_keys(credentials[3]) + self.driver.find_element_by_id('id_email').send_keys(credentials[4]) + self.driver.find_element_by_id('id_address').send_keys(credentials[5]) + self.driver.find_element_by_id('id_city').send_keys(credentials[6]) + self.driver.find_element_by_id('id_state').send_keys(credentials[7]) + self.driver.find_element_by_id('id_country').send_keys(credentials[8]) + self.driver.find_element_by_id('id_phone_number').send_keys(credentials[9]) + self.driver.find_element_by_id('id_unlisted_organization').send_keys(credentials[10]) + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertEqual(self.driver.current_url, self.live_server_url + + self.homepage) + + def login_admin(self): + ''' + Utility function to login an admin user to perform all tests. + ''' + self.driver.get(self.live_server_url + self.authentication_page) + self.driver.find_element_by_id('id_login').send_keys('admin') + self.driver.find_element_by_id('id_password').send_keys('admin') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertEqual(self.driver.current_url, self.live_server_url + + self.homepage) + + def test_volunteer_first_name_field(self): + credentials = ['volunteer-username', 'volunteer-password', + 'VOLUNTEER-FIRST-NAME', 'volunteer-last-name', + 'volunteer-email@systers.org', 'volunteer-address', + 'volunteer-city', 'volunteer-state', 'volunteer-country', + '9999999999', 'volunteer-organization'] + + self.register_volunteer(credentials) + + credentials = ['volunteer-usernameq', 'volunteer-passwordq', + 'volunteer-first-name', 'volunteer-last-nameq', + 'volunteer-email@systers.orgq', 'volunteer-addressq', + 'volunteer-cityq', 'volunteer-stateq', 'volunteer-countryq', + '9999999999', 'volunteer-organizationq'] + + self.register_volunteer(credentials) + self.login_admin() + + self.driver.find_element_by_link_text('Volunteer Search').click() + self.assertEqual(self.driver.current_url, self.live_server_url + + '/volunteer/search/') + + self.driver.find_element_by_css_selector(".form-control[name='first_name']").send_keys('volunteer') + self.driver.find_element_by_tag_name('button').click() + + search_results = self.driver.find_element_by_xpath('//table//tbody') + + result = [] + for tr in search_results.find_elements_by_tag_name('tr'): + row = tr.text.split() + result.append(row) + + self.assertEqual(len(result), 2) + + expected_result = ['volunteer-first-name', 'volunteer-last-nameq', + 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', + 'volunteer-countryq', 'volunteer-organizationq', '9999999999', + 'volunteer-email@systers.orgq'] + + self.assertTrue(expected_result in result) + + expected_result = ['VOLUNTEER-FIRST-NAME', 'volunteer-last-name', + 'volunteer-address', 'volunteer-city', 'volunteer-state', + 'volunteer-country', 'volunteer-organization', '9999999999', + 'volunteer-email@systers.org'] + + self.assertTrue(expected_result in result) + + self.driver.find_element_by_css_selector(".form-control[name='first_name']").clear() + self.driver.find_element_by_css_selector(".form-control[name='first_name']").send_keys('e') + self.driver.find_element_by_tag_name('button').click() + + self.assertEqual(len(result), 2) + + expected_result = ['volunteer-first-name', 'volunteer-last-nameq', + 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', + 'volunteer-countryq', 'volunteer-organizationq', '9999999999', + 'volunteer-email@systers.orgq'] + + self.assertTrue(expected_result in result) + + expected_result = ['VOLUNTEER-FIRST-NAME', 'volunteer-last-name', + 'volunteer-address', 'volunteer-city', 'volunteer-state', + 'volunteer-country', 'volunteer-organization', '9999999999', + 'volunteer-email@systers.org'] + + self.assertTrue(expected_result in result) + + self.driver.find_element_by_css_selector(".form-control[name='first_name']").clear() + self.driver.find_element_by_css_selector(".form-control[name='first_name']").send_keys('vol-') + self.driver.find_element_by_tag_name('button').click() + + with self.assertRaises(NoSuchElementException): + search_results = self.driver.find_element_by_xpath('//table//tbody') + + self.driver.find_element_by_css_selector(".form-control[name='first_name']").clear() + self.driver.find_element_by_css_selector(".form-control[name='first_name']").send_keys('volunteer-fail-test') + self.driver.find_element_by_tag_name('button').click() + + with self.assertRaises(NoSuchElementException): + search_results = self.driver.find_element_by_xpath('//table//tbody') + + self.driver.find_element_by_css_selector(".form-control[name='first_name']").clear() + self.driver.find_element_by_css_selector(".form-control[name='first_name']").send_keys('!@#$%^&*()_') + self.driver.find_element_by_tag_name('button').click() + self.assertNotEqual(self.driver.find_element_by_class_name('help-block'), + None) + + def test_volunteer_last_name_field(self): + credentials = ['volunteer-username', 'volunteer-password', + 'volunteer-first-name', 'VOLUNTEER-LAST-NAME', + 'volunteer-email@systers.org', 'volunteer-address', + 'volunteer-city', 'volunteer-state', 'volunteer-country', + '9999999999', 'volunteer-organization'] + + self.register_volunteer(credentials) + + credentials = ['volunteer-usernameq', 'volunteer-passwordq', + 'volunteer-first-nameq', 'volunteer-last-name', + 'volunteer-email@systers.orgq', 'volunteer-addressq', + 'volunteer-cityq', 'volunteer-stateq', 'volunteer-countryq', + '9999999999', 'volunteer-organizationq'] + + self.register_volunteer(credentials) + + self.login_admin() + self.driver.get(self.live_server_url + '/volunteer/search/') + self.assertEqual(self.driver.current_url, self.live_server_url + + '/volunteer/search/') + + self.driver.find_element_by_css_selector(".form-control[name='last_name']").clear() + self.driver.find_element_by_css_selector(".form-control[name='last_name']").send_keys('volunteer') + self.driver.find_element_by_tag_name('button').click() + + search_results = self.driver.find_element_by_xpath('//table//tbody') + + result = [] + for tr in search_results.find_elements_by_tag_name('tr'): + row = tr.text.split() + result.append(row) + + expected_result = ['volunteer-first-nameq', 'volunteer-last-name', + 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', + 'volunteer-countryq', 'volunteer-organizationq', '9999999999', + 'volunteer-email@systers.orgq'] + + self.assertTrue(expected_result in result) + + expected_result = ['volunteer-first-name', 'VOLUNTEER-LAST-NAME', + 'volunteer-address', 'volunteer-city', 'volunteer-state', + 'volunteer-country', 'volunteer-organization', '9999999999', + 'volunteer-email@systers.org'] + + self.assertTrue(expected_result in result) + + self.driver.find_element_by_css_selector(".form-control[name='last_name']").clear() + self.driver.find_element_by_css_selector(".form-control[name='last_name']").send_keys('v') + self.driver.find_element_by_tag_name('button').click() + + self.assertEqual(len(result), 2) + + expected_result = ['volunteer-first-nameq', 'volunteer-last-name', + 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', + 'volunteer-countryq', 'volunteer-organizationq', '9999999999', + 'volunteer-email@systers.orgq'] + + self.assertTrue(expected_result in result) + + expected_result = ['volunteer-first-name', 'VOLUNTEER-LAST-NAME', + 'volunteer-address', 'volunteer-city', 'volunteer-state', + 'volunteer-country', 'volunteer-organization', '9999999999', + 'volunteer-email@systers.org'] + + self.assertTrue(expected_result in result) + + self.driver.find_element_by_css_selector(".form-control[name='last_name']").clear() + self.driver.find_element_by_css_selector(".form-control[name='last_name']").send_keys('vol-') + self.driver.find_element_by_tag_name('button').click() + + with self.assertRaises(NoSuchElementException): + search_results = self.driver.find_element_by_xpath('//table//tbody') + + self.driver.find_element_by_css_selector(".form-control[name='last_name']").clear() + self.driver.find_element_by_css_selector(".form-control[name='last_name']").send_keys('volunteer-fail-test') + self.driver.find_element_by_tag_name('button').click() + + with self.assertRaises(NoSuchElementException): + search_results = self.driver.find_element_by_xpath('//table//tbody') + + self.driver.find_element_by_css_selector(".form-control[name='last_name']").clear() + self.driver.find_element_by_css_selector(".form-control[name='last_name']").send_keys('!@#$%^&*()_') + self.driver.find_element_by_tag_name('button').click() + self.assertNotEqual(self.driver.find_element_by_class_name('help-block'), + None) + + def test_volunteer_city_field(self): + credentials = ['volunteer-username', 'volunteer-password', + 'volunteer-first-name', 'volunteer-last-name', + 'volunteer-email@systers.org', 'volunteer-address', + 'VOLUNTEER-CITY', 'volunteer-state', 'volunteer-country', + '9999999999', 'volunteer-organization'] + + self.register_volunteer(credentials) + + credentials = ['volunteer-usernameq', 'volunteer-passwordq', + 'volunteer-first-nameq', 'volunteer-last-nameq', + 'volunteer-email@systers.orgq', 'volunteer-addressq', + 'volunteer-city', 'volunteer-stateq', 'volunteer-countryq', + '9999999999', 'volunteer-organizationq'] + + self.register_volunteer(credentials) + + self.login_admin() + self.driver.get(self.live_server_url + '/volunteer/search/') + self.assertEqual(self.driver.current_url, self.live_server_url + + '/volunteer/search/') + + self.driver.find_element_by_css_selector(".form-control[name='city']").clear() + self.driver.find_element_by_css_selector(".form-control[name='city']").send_keys('volunteer') + self.driver.find_element_by_tag_name('button').click() + + search_results = self.driver.find_element_by_xpath('//table//tbody') + + result = [] + for tr in search_results.find_elements_by_tag_name('tr'): + row = tr.text.split() + result.append(row) + + expected_result = ['volunteer-first-nameq', 'volunteer-last-nameq', + 'volunteer-addressq', 'volunteer-city', 'volunteer-stateq', + 'volunteer-countryq', 'volunteer-organizationq', '9999999999', + 'volunteer-email@systers.orgq'] + + self.assertTrue(expected_result in result) + + expected_result = ['volunteer-first-name', 'volunteer-last-name', + 'volunteer-address', 'VOLUNTEER-CITY', 'volunteer-state', + 'volunteer-country', 'volunteer-organization', '9999999999', + 'volunteer-email@systers.org'] + + self.assertTrue(expected_result in result) + + self.driver.find_element_by_css_selector(".form-control[name='city']").clear() + self.driver.find_element_by_css_selector(".form-control[name='city']").send_keys('v') + self.driver.find_element_by_tag_name('button').click() + + self.assertEqual(len(result), 2) + + expected_result = ['volunteer-first-nameq', 'volunteer-last-nameq', + 'volunteer-addressq', 'volunteer-city', 'volunteer-stateq', + 'volunteer-countryq', 'volunteer-organizationq', '9999999999', + 'volunteer-email@systers.orgq'] + + self.assertTrue(expected_result in result) + + expected_result = ['volunteer-first-name', 'volunteer-last-name', + 'volunteer-address', 'VOLUNTEER-CITY', 'volunteer-state', + 'volunteer-country', 'volunteer-organization', '9999999999', + 'volunteer-email@systers.org'] + + self.assertTrue(expected_result in result) + + self.driver.find_element_by_css_selector(".form-control[name='city']").clear() + self.driver.find_element_by_css_selector(".form-control[name='city']").send_keys('vol-') + self.driver.find_element_by_tag_name('button').click() + + with self.assertRaises(NoSuchElementException): + search_results = self.driver.find_element_by_xpath('//table//tbody') + + self.driver.find_element_by_css_selector(".form-control[name='city']").clear() + self.driver.find_element_by_css_selector(".form-control[name='city']").send_keys('volunteer-fail-test') + self.driver.find_element_by_tag_name('button').click() + + with self.assertRaises(NoSuchElementException): + search_results = self.driver.find_element_by_xpath('//table//tbody') + + self.driver.find_element_by_css_selector(".form-control[name='city']").clear() + self.driver.find_element_by_css_selector(".form-control[name='city']").send_keys('!@#$%^&*()_') + self.driver.find_element_by_tag_name('button').click() + self.assertNotEqual(self.driver.find_element_by_class_name('help-block'), + None) + + def test_volunteer_state_field(self): + credentials = ['volunteer-username', 'volunteer-password', + 'volunteer-first-name', 'volunteer-last-name', + 'volunteer-email@systers.org', 'volunteer-address', + 'volunteer-city', 'VOLUNTEER-STATE', 'volunteer-country', + '9999999999', 'volunteer-organization'] + + self.register_volunteer(credentials) + + credentials = ['volunteer-usernameq', 'volunteer-passwordq', + 'volunteer-first-nameq', 'volunteer-last-nameq', + 'volunteer-email@systers.orgq', 'volunteer-addressq', + 'volunteer-cityq', 'volunteer-state', 'volunteer-countryq', + '9999999999', 'volunteer-organizationq'] + + self.register_volunteer(credentials) + + self.login_admin() + self.driver.get(self.live_server_url + '/volunteer/search/') + self.assertEqual(self.driver.current_url, self.live_server_url + + '/volunteer/search/') + + self.driver.find_element_by_css_selector(".form-control[name='state']").clear() + self.driver.find_element_by_css_selector(".form-control[name='state']").send_keys('volunteer') + self.driver.find_element_by_tag_name('button').click() + + search_results = self.driver.find_element_by_xpath('//table//tbody') + + result = [] + for tr in search_results.find_elements_by_tag_name('tr'): + row = tr.text.split() + result.append(row) + + expected_result = ['volunteer-first-nameq', 'volunteer-last-nameq', + 'volunteer-addressq', 'volunteer-cityq', 'volunteer-state', + 'volunteer-countryq', 'volunteer-organizationq', '9999999999', + 'volunteer-email@systers.orgq'] + + self.assertTrue(expected_result in result) + + expected_result = ['volunteer-first-name', 'volunteer-last-name', + 'volunteer-address', 'volunteer-city', 'VOLUNTEER-STATE', + 'volunteer-country', 'volunteer-organization', '9999999999', + 'volunteer-email@systers.org'] + + self.assertTrue(expected_result in result) + + self.driver.find_element_by_css_selector(".form-control[name='state']").clear() + self.driver.find_element_by_css_selector(".form-control[name='state']").send_keys('v') + self.driver.find_element_by_tag_name('button').click() + + self.assertEqual(len(result), 2) + + expected_result = ['volunteer-first-nameq', 'volunteer-last-nameq', + 'volunteer-addressq', 'volunteer-cityq', 'volunteer-state', + 'volunteer-countryq', 'volunteer-organizationq', '9999999999', + 'volunteer-email@systers.orgq'] + + self.assertTrue(expected_result in result) + + expected_result = ['volunteer-first-name', 'volunteer-last-name', + 'volunteer-address', 'volunteer-city', 'VOLUNTEER-STATE', + 'volunteer-country', 'volunteer-organization', '9999999999', + 'volunteer-email@systers.org'] + + self.assertTrue(expected_result in result) + + self.driver.find_element_by_css_selector(".form-control[name='state']").clear() + self.driver.find_element_by_css_selector(".form-control[name='state']").send_keys('vol-') + self.driver.find_element_by_tag_name('button').click() + + with self.assertRaises(NoSuchElementException): + search_results = self.driver.find_element_by_xpath('//table//tbody') + + self.driver.find_element_by_css_selector(".form-control[name='state']").clear() + self.driver.find_element_by_css_selector(".form-control[name='state']").send_keys('volunteer-fail-test') + self.driver.find_element_by_tag_name('button').click() + + with self.assertRaises(NoSuchElementException): + search_results = self.driver.find_element_by_xpath('//table//tbody') + + self.driver.find_element_by_css_selector(".form-control[name='state']").clear() + self.driver.find_element_by_css_selector(".form-control[name='state']").send_keys('!@#$%^&*()_') + self.driver.find_element_by_tag_name('button').click() + self.assertNotEqual(self.driver.find_element_by_class_name('help-block'), + None) + + def test_volunteer_country_field(self): + credentials = ['volunteer-username', 'volunteer-password', + 'volunteer-first-name', 'volunteer-last-name', + 'volunteer-email@systers.org', 'volunteer-address', + 'volunteer-city', 'volunteer-state', 'VOLUNTEER-COUNTRY', + '9999999999', 'volunteer-organization'] + + self.register_volunteer(credentials) + + credentials = ['volunteer-usernameq', 'volunteer-passwordq', + 'volunteer-first-nameq', 'volunteer-last-nameq', + 'volunteer-email@systers.orgq', 'volunteer-addressq', + 'volunteer-cityq', 'volunteer-stateq', 'volunteer-country', + '9999999999', 'volunteer-organizationq'] + + self.register_volunteer(credentials) + + self.login_admin() + self.driver.get(self.live_server_url + '/volunteer/search/') + self.assertEqual(self.driver.current_url, self.live_server_url + + '/volunteer/search/') + + self.driver.find_element_by_css_selector(".form-control[name='country']").clear() + self.driver.find_element_by_css_selector(".form-control[name='country']").send_keys('volunteer') + self.driver.find_element_by_tag_name('button').click() + + search_results = self.driver.find_element_by_xpath('//table//tbody') + + result = [] + for tr in search_results.find_elements_by_tag_name('tr'): + row = tr.text.split() + result.append(row) + + expected_result = ['volunteer-first-nameq', 'volunteer-last-nameq', + 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', + 'volunteer-country', 'volunteer-organizationq', '9999999999', + 'volunteer-email@systers.orgq'] + + self.assertTrue(expected_result in result) + + expected_result = ['volunteer-first-name', 'volunteer-last-name', + 'volunteer-address', 'volunteer-city', 'volunteer-state', + 'VOLUNTEER-COUNTRY', 'volunteer-organization', '9999999999', + 'volunteer-email@systers.org'] + + self.assertTrue(expected_result in result) + + self.driver.find_element_by_css_selector(".form-control[name='country']").clear() + self.driver.find_element_by_css_selector(".form-control[name='country']").send_keys('v') + self.driver.find_element_by_tag_name('button').click() + + self.assertEqual(len(result), 2) + + expected_result = ['volunteer-first-nameq', 'volunteer-last-nameq', + 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', + 'volunteer-country', 'volunteer-organizationq', '9999999999', + 'volunteer-email@systers.orgq'] + + self.assertTrue(expected_result in result) + + expected_result = ['volunteer-first-name', 'volunteer-last-name', + 'volunteer-address', 'volunteer-city', 'volunteer-state', + 'VOLUNTEER-COUNTRY', 'volunteer-organization', '9999999999', + 'volunteer-email@systers.org'] + + self.assertTrue(expected_result in result) + + self.driver.find_element_by_css_selector(".form-control[name='country']").clear() + self.driver.find_element_by_css_selector(".form-control[name='country']").send_keys('vol-') + self.driver.find_element_by_tag_name('button').click() + + with self.assertRaises(NoSuchElementException): + search_results = self.driver.find_element_by_xpath('//table//tbody') + + self.driver.find_element_by_css_selector(".form-control[name='country']").clear() + self.driver.find_element_by_css_selector(".form-control[name='country']").send_keys('volunteer-fail-test') + self.driver.find_element_by_tag_name('button').click() + + with self.assertRaises(NoSuchElementException): + search_results = self.driver.find_element_by_xpath('//table//tbody') + + self.driver.find_element_by_css_selector(".form-control[name='country']").clear() + self.driver.find_element_by_css_selector(".form-control[name='country']").send_keys('!@#$%^&*()_') + self.driver.find_element_by_tag_name('button').click() + self.assertNotEqual(self.driver.find_element_by_class_name('help-block'), + None) + + def test_volunteer_organization_field(self): + credentials = ['volunteer-username', 'volunteer-password', + 'volunteer-first-name', 'volunteer-last-name', + 'volunteer-email@systers.org', 'volunteer-address', + 'volunteer-city', 'volunteer-state', 'volunteer-country', + '9999999999', 'VOLUNTEER-ORGANIZATION'] + + self.register_volunteer(credentials) + + credentials = ['volunteer-usernameq', 'volunteer-passwordq', + 'volunteer-first-nameq', 'volunteer-last-nameq', + 'volunteer-email@systers.orgq', 'volunteer-addressq', + 'volunteer-cityq', 'volunteer-stateq', 'volunteer-countryq', + '9999999999', 'volunteer-organization'] + + self.register_volunteer(credentials) + + self.login_admin() + self.driver.get(self.live_server_url + '/volunteer/search/') + self.assertEqual(self.driver.current_url, self.live_server_url + + '/volunteer/search/') + + self.driver.find_element_by_css_selector(".form-control[name='organization']").clear() + self.driver.find_element_by_css_selector(".form-control[name='organization']").send_keys('volunteer') + self.driver.find_element_by_tag_name('button').click() + + search_results = self.driver.find_element_by_xpath('//table//tbody') + + result = [] + for tr in search_results.find_elements_by_tag_name('tr'): + row = tr.text.split() + result.append(row) + + expected_result = ['volunteer-first-nameq', 'volunteer-last-nameq', + 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', + 'volunteer-countryq', 'volunteer-organization', '9999999999', + 'volunteer-email@systers.orgq'] + + self.assertTrue(expected_result in result) + + expected_result = ['volunteer-first-name', 'volunteer-last-name', + 'volunteer-address', 'volunteer-city', 'volunteer-state', + 'volunteer-country', 'VOLUNTEER-ORGANIZATION', '9999999999', + 'volunteer-email@systers.org'] + + self.assertTrue(expected_result in result) + + self.driver.find_element_by_css_selector(".form-control[name='organization']").clear() + self.driver.find_element_by_css_selector(".form-control[name='organization']").send_keys('v') + self.driver.find_element_by_tag_name('button').click() + + self.assertEqual(len(result), 2) + + expected_result = ['volunteer-first-nameq', 'volunteer-last-nameq', + 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', + 'volunteer-countryq', 'volunteer-organization', '9999999999', + 'volunteer-email@systers.orgq'] + + self.assertTrue(expected_result in result) + + expected_result = ['volunteer-first-name', 'volunteer-last-name', + 'volunteer-address', 'volunteer-city', 'volunteer-state', + 'volunteer-country', 'VOLUNTEER-ORGANIZATION', '9999999999', + 'volunteer-email@systers.org'] + + self.assertTrue(expected_result in result) + + self.driver.find_element_by_css_selector(".form-control[name='organization']").clear() + self.driver.find_element_by_css_selector(".form-control[name='organization']").send_keys('vol-') + self.driver.find_element_by_tag_name('button').click() + + with self.assertRaises(NoSuchElementException): + search_results = self.driver.find_element_by_xpath('//table//tbody') + + self.driver.find_element_by_css_selector(".form-control[name='organization']").clear() + self.driver.find_element_by_css_selector(".form-control[name='organization']").send_keys('volunteer-fail-test') + self.driver.find_element_by_tag_name('button').click() + + with self.assertRaises(NoSuchElementException): + search_results = self.driver.find_element_by_xpath('//table//tbody') + + self.driver.find_element_by_css_selector(".form-control[name='organization']").clear() + self.driver.find_element_by_css_selector(".form-control[name='organization']").send_keys('!@#$%^&*()_') + self.driver.find_element_by_tag_name('button').click() + self.assertNotEqual(self.driver.find_element_by_class_name('help-block'), + None) + + def test_intersection_of_all_fields(self): + credentials = ['volunteer-username', 'volunteer-password', + 'volunteer-first-name', 'volunteer-last-name', + 'volunteer-email@systers.org', 'volunteer-address', + 'volunteer-city', 'volunteer-state', 'volunteer-country', + '9999999999', 'VOLUNTEER-ORGANIZATION'] + + self.register_volunteer(credentials) + + credentials = ['volunteer-usernameq', 'volunteer-passwordq', + 'volunteer-first-nameq', 'volunteer-last-nameq', + 'volunteer-email@systers.orgq', 'volunteer-addressq', + 'volunteer-cityq', 'volunteer-stateq', 'volunteer-countryq', + '9999999999', 'volunteer-organization'] + + self.register_volunteer(credentials) + + self.login_admin() + self.driver.get(self.live_server_url + '/volunteer/search/') + self.assertEqual(self.driver.current_url, self.live_server_url + + '/volunteer/search/') + + self.driver.find_element_by_css_selector(".form-control[name='first_name']").clear() + self.driver.find_element_by_css_selector(".form-control[name='first_name']").send_keys('volunteer') + self.driver.find_element_by_css_selector(".form-control[name='last_name']").clear() + self.driver.find_element_by_css_selector(".form-control[name='last_name']").send_keys('volunteer') + self.driver.find_element_by_css_selector(".form-control[name='city']").clear() + self.driver.find_element_by_css_selector(".form-control[name='city']").send_keys('volunteer') + self.driver.find_element_by_css_selector(".form-control[name='state']").clear() + self.driver.find_element_by_css_selector(".form-control[name='state']").send_keys('volunteer') + self.driver.find_element_by_css_selector(".form-control[name='country']").clear() + self.driver.find_element_by_css_selector(".form-control[name='country']").send_keys('volunteer') + self.driver.find_element_by_css_selector(".form-control[name='organization']").clear() + self.driver.find_element_by_css_selector(".form-control[name='organization']").send_keys('volunteer') + self.driver.find_element_by_tag_name('button').click() + + search_results = self.driver.find_element_by_xpath('//table//tbody') + + result = [] + for tr in search_results.find_elements_by_tag_name('tr'): + row = tr.text.split() + result.append(row) + + expected_result = ['volunteer-first-nameq', 'volunteer-last-nameq', + 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', + 'volunteer-countryq', 'volunteer-organization', '9999999999', + 'volunteer-email@systers.orgq'] + + self.assertTrue(expected_result in result) + + expected_result = ['volunteer-first-name', 'volunteer-last-name', + 'volunteer-address', 'volunteer-city', 'volunteer-state', + 'volunteer-country', 'VOLUNTEER-ORGANIZATION', '9999999999', + 'volunteer-email@systers.org'] + + self.assertTrue(expected_result in result) + + self.driver.find_element_by_css_selector(".form-control[name='first_name']").clear() + self.driver.find_element_by_css_selector(".form-control[name='first_name']").send_keys('volunteer') + self.driver.find_element_by_css_selector(".form-control[name='country']").clear() + self.driver.find_element_by_css_selector(".form-control[name='country']").send_keys('wrong-country') + self.driver.find_element_by_css_selector(".form-control[name='organization']").clear() + self.driver.find_element_by_css_selector(".form-control[name='organization']").send_keys('org') + self.driver.find_element_by_tag_name('button').click() + + with self.assertRaises(NoSuchElementException): + search_results = self.driver.find_element_by_xpath('//table//tbody') + + self.driver.find_element_by_css_selector(".form-control[name='last_name']").clear() + self.driver.find_element_by_css_selector(".form-control[name='last_name']").send_keys('volunteer') + self.driver.find_element_by_css_selector(".form-control[name='city']").clear() + self.driver.find_element_by_css_selector(".form-control[name='city']").send_keys('wrong-city') + self.driver.find_element_by_tag_name('button').click() + + with self.assertRaises(NoSuchElementException): + search_results = self.driver.find_element_by_xpath('//table//tbody') diff --git a/vms/volunteer/tests/test_unit.py b/vms/volunteer/tests/test_unit.py new file mode 100644 index 0000000..f2b4585 --- /dev/null +++ b/vms/volunteer/tests/test_unit.py @@ -0,0 +1,348 @@ +import datetime +from django.contrib.auth.models import User +from django.test import TestCase +from organization.models import Organization +from volunteer.models import Volunteer +from volunteer.services import * + +class VolunteerMethodTests(TestCase): + + def test_get_volunteer_by_id(self): + + u1 = User.objects.create_user('John') + u2 = User.objects.create_user('James') + u3 = User.objects.create_user('George') + + v1 = Volunteer(first_name = "John", + last_name = "Doe", + address = "7 Alpine Street", + city = "Maplegrove", + state = "Wyoming", + country = "USA", + phone_number = "23454545", + email = "john@test.com", + user = u1) + + v2 = Volunteer(first_name = "James", + last_name = "Doe", + address = "7 Oak Street", + city = "Elmgrove", + state = "California", + country = "USA", + phone_number = "23454545", + email = "james@test.com", + user = u2) + + v3 = Volunteer(id = 999, + first_name = "George", + last_name = "Doe", + address = "7 Elm Street", + city = "Oakgrove", + state = "California", + country = "USA", + phone_number = "23454545", + email = "george@test.com", + user = u3) + + v1.save() + v2.save() + v3.save() + + #test typical cases + self.assertIsNotNone(get_volunteer_by_id(v1.id)) + self.assertIsNotNone(get_volunteer_by_id(v2.id)) + self.assertIsNotNone(get_volunteer_by_id(v3.id)) + + self.assertEqual(get_volunteer_by_id(v1.id), v1) + self.assertEqual(get_volunteer_by_id(v2.id), v2) + self.assertEqual(get_volunteer_by_id(v3.id), v3) + + #why doesn't testing for equality work? + #self.assertIs(get_volunteer_by_id(v1.id), v1) + #self.assertIs(get_volunteer_by_id(v2.id), v2) + #self.assertIs(get_volunteer_by_id(v3.id), v3) + + #test non-existant cases + self.assertIsNone(get_volunteer_by_id(100)) + self.assertIsNone(get_volunteer_by_id(200)) + self.assertIsNone(get_volunteer_by_id(300)) + self.assertIsNone(get_volunteer_by_id(400)) + + self.assertNotEqual(get_volunteer_by_id(100), v1) + self.assertNotEqual(get_volunteer_by_id(200), v1) + self.assertNotEqual(get_volunteer_by_id(300), v2) + self.assertNotEqual(get_volunteer_by_id(400), v2) + + def test_has_resume_file(self): + + u1 = User.objects.create_user('John') + u2 = User.objects.create_user('James') + u3 = User.objects.create_user('Jane') + + v1 = Volunteer(first_name = "John", + last_name = "Doe", + address = "7 Alpine Street", + city = "Maplegrove", + state = "Wyoming", + country = "USA", + phone_number = "23454545", + email = "john@test.com", + resume_file = "MyResume.pdf", + user = u1) + + v2 = Volunteer(first_name = "James", + last_name = "Doe", + address = "7 Alpine Street", + city = "Maplegrove", + state = "Wyoming", + country = "USA", + phone_number = "23454545", + email = "james@test.com", + user = u2) + + v3 = Volunteer(first_name = "Jane", + last_name = "Doe", + address = "7 Alpine Street", + city = "Maplegrove", + state = "Wyoming", + country = "USA", + phone_number = "23454545", + email = "jane@test.com", + resume_file = "", + user = u3) + + v1.save() + v2.save() + v3.save() + + #test typical cases + self.assertTrue(has_resume_file(v1.id)) + + #test non-existant cases + self.assertFalse(has_resume_file(v2.id)) + self.assertFalse(has_resume_file(v3.id)) + + def test_get_volunteer_resume_file_url(self): + + u1 = User.objects.create_user('John') + + v1 = Volunteer(first_name = "John", + last_name = "Doe", + address = "7 Alpine Street", + city = "Maplegrove", + state = "Wyoming", + country = "USA", + phone_number = "23454545", + email = "john@test.com", + resume_file = "MyResume.pdf", + user = u1) + + v1.save() + + #test typicl cases + self.assertIsNotNone(get_volunteer_resume_file_url(v1.id)) + self.assertEqual(get_volunteer_resume_file_url(v1.id), v1.resume_file.url) + + #test non-existant cases + self.assertNotEqual(get_volunteer_resume_file_url(v1.id), "resumes/DifferentResume.pdf") + self.assertNotEqual(get_volunteer_resume_file_url(v1.id), "resumes/AnotherResume.pdf") + + def test_get_volunteers_ordered_by_first_name(self): + + u1 = User.objects.create_user('Yoshi') + u2 = User.objects.create_user('Ashley') + u3 = User.objects.create_user('Zelda') + + v1 = Volunteer(first_name = "Yoshi", + last_name = "Doe", + address = "7 Oak Street", + city = "Elmgrove", + state = "California", + country = "USA", + phone_number = "23454545", + email = "yoshi@test.com", + user = u1) + + v2 = Volunteer(first_name = "Ashley", + last_name = "Doe", + address = "7 Alpine Street", + city = "Maplegrove", + state = "Wyoming", + country = "USA", + phone_number = "23454545", + email = "ashley@test.com", + user = u2) + + v3 = Volunteer(id = 999, + first_name = "Zelda", + last_name = "Doe", + address = "7 Elm Street", + city = "Oakgrove", + state = "California", + country = "USA", + phone_number = "23454545", + email = "zelda@test.com", + user = u3) + + v1.save() + v2.save() + v3.save() + + #test typical cases + volunteer_list = get_volunteers_ordered_by_first_name() + self.assertIsNotNone(volunteer_list) + self.assertIn(v1, volunteer_list) + self.assertIn(v2, volunteer_list) + self.assertIn(v3, volunteer_list) + self.assertEqual(len(volunteer_list), 3) + + #test if in correct order + self.assertEqual(volunteer_list[0], v2) + self.assertEqual(volunteer_list[1], v1) + self.assertEqual(volunteer_list[2], v3) + + def test_delete_volunteer(self): + + u1 = User.objects.create_user('Yoshi') + u2 = User.objects.create_user('Ashley') + u3 = User.objects.create_user('Zelda') + + v1 = Volunteer(first_name = "Yoshi", + last_name = "Doe", + address = "7 Oak Street", + city = "Elmgrove", + state = "California", + country = "USA", + phone_number = "23454545", + email = "yoshi@test.com", + user = u1) + + v2 = Volunteer(first_name = "Ashley", + last_name = "Doe", + address = "7 Alpine Street", + city = "Maplegrove", + state = "Wyoming", + country = "USA", + phone_number = "23454545", + email = "ashley@test.com", + user = u2) + + v3 = Volunteer(id = 999, + first_name = "Zelda", + last_name = "Doe", + address = "7 Elm Street", + city = "Oakgrove", + state = "California", + country = "USA", + phone_number = "23454545", + email = "zelda@test.com", + user = u3) + + v1.save() + v2.save() + v3.save() + + delete_volunteer(v1.id) + delete_volunteer(v2.id) + delete_volunteer(v3.id) + + #why is active not set to false? + #self.assertFalse(u1.is_active) + #self.assertFalse(u2.is_active) + #self.assertFalse(u3.is_active) + + def test_search_volunteers(self): + + u1 = User.objects.create_user('Yoshi') + u2 = User.objects.create_user('Ashley') + u3 = User.objects.create_user('Zelda') + + o1 = Organization(name = "Apple") + o2 = Organization(name = "Google") + + o1.save() + o2.save() + + v1 = Volunteer(first_name = "Yoshi", + last_name = "Doe", + address = "7 Oak Street", + city = "Elmgrove", + state = "California", + country = "USA", + phone_number = "23454545", + organization = o1, + email = "yoshi@test.com", + user = u1) + + v2 = Volunteer(first_name = "Ashley", + last_name = "Doe", + address = "7 Alpine Street", + city = "Maplegrove", + state = "Wyoming", + country = "USA", + phone_number = "23454545", + organization = o2, + email = "ashley@test.com", + user = u2) + + v3 = Volunteer(id = 999, + first_name = "Zelda", + last_name = "Doe", + address = "7 Elm Street", + city = "Oakgrove", + state = "California", + country = "USA", + phone_number = "23454545", + unlisted_organization = "Government of Canada", + email = "zelda@test.com", + user = u3) + + v1.save() + v2.save() + v3.save() + + #if no search parameters are given, it returns all volunteers + search_list = search_volunteers("", "", "", "", "", "") + self.assertNotEqual(search_list, False) + self.assertEqual(len(search_list), 3) + self.assertIn(v1, search_list) + self.assertIn(v2, search_list) + self.assertIn(v3, search_list) + + search_list = search_volunteers(None, None, None, None, None, None) + self.assertNotEqual(search_list, False) + self.assertEqual(len(search_list), 3) + self.assertIn(v1, search_list) + self.assertIn(v2, search_list) + self.assertIn(v3, search_list) + + #test exact search + search_list = search_volunteers("Yoshi", "Doe", "Elmgrove", "California", "USA", "Apple") + self.assertNotEqual(search_list, False) + self.assertEqual(len(search_list), 1) + self.assertIn(v1, search_list) + self.assertNotIn(v2, search_list) + self.assertNotIn(v3, search_list) + + #test partial search + search_list = search_volunteers("Yoshi", None, None, None, None, None) + self.assertNotEqual(search_list, False) + self.assertEqual(len(search_list), 1) + self.assertIn(v1, search_list) + self.assertNotIn(v2, search_list) + self.assertNotIn(v3, search_list) + + search_list = search_volunteers(None, "Doe", None, None, None, None) + self.assertNotEqual(search_list, False) + self.assertEqual(len(search_list), 3) + self.assertIn(v1, search_list) + self.assertIn(v2, search_list) + self.assertIn(v3, search_list) + + #test no search matches + search_list = search_volunteers("Billy", "Doe", "Montreal", "Quebec", "Canada", "Ubisoft") + self.assertEqual(len(search_list), 0) + self.assertNotIn(v1, search_list) + self.assertNotIn(v2, search_list) + self.assertNotIn(v3, search_list) + diff --git a/vms/volunteer/tests/test_volunteerProfile.py b/vms/volunteer/tests/test_volunteerProfile.py new file mode 100644 index 0000000..94b2b93 --- /dev/null +++ b/vms/volunteer/tests/test_volunteerProfile.py @@ -0,0 +1,199 @@ +from django.test import TestCase +from django.contrib.staticfiles.testing import LiveServerTestCase + +from django.contrib.auth.models import User + +from selenium import webdriver +from selenium.common.exceptions import NoSuchElementException + +from volunteer.models import Volunteer +from organization.models import Organization #hack to pass travis,Bug in Code + +import re + + +class VolunteerProfile(LiveServerTestCase): + ''' + ''' + def setUp(self): + volunteer_user = User.objects.create_user( + username = 'Sherlock', + password = 'Holmes', + email = 'idonthave@gmail.com') + + Volunteer.objects.create( + first_name = 'Sherlock', + last_name = 'Holmes', + user = volunteer_user, + email = 'idonthave@gmail.com', + address = '221-B Baker Street', + city = 'London', + state = 'London-State', + country = 'UK', + phone_number = '9999999999', + unlisted_organization = 'Detective') + + # create an org prior to registration. Bug in Code + # added to pass CI + Organization.objects.create( + name = 'DummyOrg') + + self.homepage = '/home/' + self.authentication_page = '/authentication/login/' + self.driver = webdriver.Firefox() + self.driver.maximize_window() + super(VolunteerProfile, self).setUp() + + def tearDown(self): + self.driver.quit() + super(VolunteerProfile, self).tearDown() + + def login(self): + self.driver.get(self.live_server_url + self.authentication_page) + self.driver.find_element_by_id('id_login').send_keys('Sherlock') + self.driver.find_element_by_id('id_password').send_keys('Holmes') + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertEqual(self.driver.current_url, self.live_server_url + + self.homepage) + + def test_details_tab(self): + self.login() + self.driver.find_element_by_link_text('Profile').click() + page_source = self.driver.page_source + + found_email = re.search('idonthave@gmail.com', page_source) + self.assertNotEqual(found_email, None) + + found_city = re.search('London', page_source) + self.assertNotEqual(found_city, None) + + found_state = re.search('London-State', page_source) + self.assertNotEqual(found_state, None) + + found_country = re.search('UK', page_source) + self.assertNotEqual(found_country, None) + + found_org = re.search('Detective', page_source) + self.assertNotEqual(found_org, None) + + def test_edit_profile(self): + self.login() + self.driver.find_element_by_link_text('Profile').click() + self.driver.find_element_by_link_text('Edit Profile').click() + + self.driver.find_element_by_xpath( + '//input[@name = "first_name"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "first_name"]').send_keys('Harvey') + + self.driver.find_element_by_xpath( + '//input[@name = "last_name"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "last_name"]').send_keys('Specter') + + self.driver.find_element_by_xpath( + '//input[@name = "email"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "email"]').send_keys('hspecter@ps.com') + + self.driver.find_element_by_xpath( + '//input[@name = "address"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "address"]').send_keys('Empire State Building') + + self.driver.find_element_by_xpath( + '//input[@name = "city"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "city"]').send_keys('NYC') + + self.driver.find_element_by_xpath( + '//input[@name = "state"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "state"]').send_keys('New York') + + self.driver.find_element_by_xpath( + '//input[@name = "country"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "country"]').send_keys('USA') + + self.driver.find_element_by_xpath( + '//input[@name = "phone_number"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "phone_number"]').send_keys('9999999998') + + self.driver.find_element_by_xpath( + '//select[@name = "organization_name"]').send_keys('None') + + self.driver.find_element_by_xpath( + '//input[@name = "unlisted_organization"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "unlisted_organization"]').send_keys('Lawyer') + self.driver.find_element_by_xpath('//form').submit() + + page_source = self.driver.page_source + + found_email = re.search('idonthave@gmail.com', page_source) + self.assertEqual(found_email, None) + + found_city = re.search('London', page_source) + self.assertEqual(found_city, None) + + found_state = re.search('London-State', page_source) + self.assertEqual(found_state, None) + + found_country = re.search('UK', page_source) + self.assertEqual(found_country, None) + + found_org = re.search('Detective', page_source) + self.assertEqual(found_org, None) + + found_email = re.search('hspecter@ps.com', page_source) + self.assertNotEqual(found_email, None) + + found_city = re.search('NYC', page_source) + self.assertNotEqual(found_city, None) + + found_state = re.search('New York', page_source) + self.assertNotEqual(found_state, None) + + found_country = re.search('USA', page_source) + self.assertNotEqual(found_country, None) + + found_org = re.search('Lawyer', page_source) + self.assertNotEqual(found_org, None) + + def test_upload_resume(self): + pass + ''' + #Tested locally + self.login() + self.driver.find_element_by_link_text('Profile').click() + self.driver.find_element_by_link_text('Edit Profile').click() + + self.driver.find_element_by_xpath( + '//input[@name = "resume_file"]').send_keys('/home/jlahori/Downloads/water.pdf') + + self.driver.find_element_by_xpath('//form').submit() + self.assertEqual(self.driver.find_element_by_xpath( + './/*[@id="collapseResumeFile"]/div/form/button').text, + 'Download Resume') + ''' + + def test_invalid_resume_format(self): + pass + ''' + #Tested locally + self.login() + self.driver.find_element_by_link_text('Profile').click() + self.driver.find_element_by_link_text('Edit Profile').click() + + self.driver.find_element_by_xpath( + '//input[@name = "resume_file"]').send_keys('/home/jlahori/Downloads/ca.crt') + + self.driver.find_element_by_xpath('//form').submit() + self.assertEqual(self.driver.find_element_by_xpath( + 'html/body/div[2]/div[2]/form/fieldset/div[13]/div/p/strong').text, + 'Uploaded file is invalid.') + ''' + diff --git a/vms/volunteer/tests/test_volunteerReport.py b/vms/volunteer/tests/test_volunteerReport.py new file mode 100644 index 0000000..d359687 --- /dev/null +++ b/vms/volunteer/tests/test_volunteerReport.py @@ -0,0 +1,275 @@ +from django.test import TestCase +from django.contrib.staticfiles.testing import LiveServerTestCase + +from django.contrib.auth.models import User + +from selenium import webdriver +from selenium.common.exceptions import NoSuchElementException + +from volunteer.models import Volunteer +from organization.models import Organization #hack to pass travis,Bug in Code +from event.models import Event +from job.models import Job +from shift.models import Shift, VolunteerShift + + +class VolunteerReport(LiveServerTestCase): + ''' + ''' + def setUp(self): + volunteer_user = User.objects.create_user( + username = 'volunteer', + password = 'volunteer', + email = 'volunteer@volunteer.com') + + Volunteer.objects.create( + user = volunteer_user, + address = 'address', + city = 'city', + state = 'state', + country = 'country', + phone_number = '9999999999', + unlisted_organization = 'organization') + + # create an org prior to registration. Bug in Code + # added to pass CI + Organization.objects.create( + name = 'DummyOrg') + + self.homepage = '/home/' + self.registration_page = '/registration/signup_volunteer/' + self.authentication_page = '/authentication/login/' + self.driver = webdriver.Firefox() + self.driver.implicitly_wait(5) + self.driver.maximize_window() + super(VolunteerReport, self).setUp() + + def tearDown(self): + self.driver.quit() + super(VolunteerReport, self).tearDown() + + def login(self, credentials): + self.driver.get(self.live_server_url + self.authentication_page) + self.driver.find_element_by_id('id_login').send_keys(credentials['username']) + self.driver.find_element_by_id('id_password').send_keys(credentials['password']) + self.driver.find_element_by_xpath('//form[1]').submit() + + self.assertEqual(self.driver.current_url, + self.live_server_url + self.homepage) + + def register_event_utility(self): + Event.objects.create( + name = 'event', + start_date = '2015-06-15', + end_date = '2015-06-15') + + def register_job_utility(self): + Job.objects.create( + name = 'job', + start_date = '2015-06-12', + end_date = '2015-06-18', + event = Event.objects.get(name = 'event')) + + def register_shift_utility(self): + Shift.objects.create( + date = '2015-06-15', + start_time = '09:00', + end_time = '15:00', + max_volunteers ='6', + job = Job.objects.get(name = 'job')) + + def log_hours_utility(self): + VolunteerShift.objects.create( + shift = Shift.objects.get(job__name = 'job'), + volunteer = Volunteer.objects.get(user__username = 'volunteer'), + start_time = '09:00', + end_time = '12:00') + + def test_report_without_any_created_shifts(self): + self.login({ 'username' : 'volunteer', 'password' : 'volunteer'}) + self.driver.find_element_by_link_text('Report').click() + self.driver.find_element_by_xpath('//form').submit() + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-danger').text, 'Your criteria did not return any results.') + + def test_report_with_empty_fields(self): + self.register_event_utility() + self.register_job_utility() + self.register_shift_utility() + self.log_hours_utility() + + self.login({ 'username' : 'volunteer', 'password' : 'volunteer'}) + self.driver.find_element_by_link_text('Report').click() + self.driver.find_element_by_xpath('//form').submit() + + total_no_of_shifts = self.driver.find_element_by_xpath( + '//div[2]/div[4]').text.split(' ')[10].strip('\nTotal') + + total_no_of_hours = self.driver.find_element_by_xpath( + '//div[2]/div[4]').text.split(' ')[-1].strip('\n') + + self.assertEqual(total_no_of_shifts, '1') + self.assertEqual(total_no_of_hours, '3.0') + + def test_only_logged_shifts_appear_in_report(self): + self.register_event_utility() + self.register_job_utility() + self.register_shift_utility() + + self.login({ 'username' : 'volunteer', 'password' : 'volunteer'}) + self.driver.find_element_by_link_text('Report').click() + self.driver.find_element_by_xpath('//form').submit() + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-danger').text, 'Your criteria did not return any results.') + + def test_date_field(self): + self.register_event_utility() + self.register_job_utility() + self.register_shift_utility() + self.log_hours_utility() + + self.login({ 'username' : 'volunteer', 'password' : 'volunteer'}) + self.driver.find_element_by_link_text('Report').click() + self.driver.find_element_by_xpath( + '//input[@name = "date"]').send_keys('2015-06-15') + self.driver.find_element_by_xpath('//form').submit() + + total_no_of_shifts = self.driver.find_element_by_xpath( + '//div[2]/div[4]').text.split(' ')[10].strip('\nTotal') + + total_no_of_hours = self.driver.find_element_by_xpath( + '//div[2]/div[4]').text.split(' ')[-1].strip('\n') + + self.assertEqual(total_no_of_shifts, '1') + self.assertEqual(total_no_of_hours, '3.0') + + #incorrect date + self.driver.find_element_by_xpath( + '//input[@name = "date"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "date"]').send_keys('2015-07-15') + self.driver.find_element_by_xpath('//form').submit() + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-danger').text, 'Your criteria did not return any results.') + + def test_event_field(self): + self.register_event_utility() + self.register_job_utility() + self.register_shift_utility() + self.log_hours_utility() + + self.login({ 'username' : 'volunteer', 'password' : 'volunteer'}) + self.driver.find_element_by_link_text('Report').click() + self.driver.find_element_by_xpath( + '//input[@name = "event_name"]').send_keys('event') + self.driver.find_element_by_xpath('//form').submit() + + total_no_of_shifts = self.driver.find_element_by_xpath( + '//div[2]/div[4]').text.split(' ')[10].strip('\nTotal') + + total_no_of_hours = self.driver.find_element_by_xpath( + '//div[2]/div[4]').text.split(' ')[-1].strip('\n') + + self.assertEqual(total_no_of_shifts, '1') + self.assertEqual(total_no_of_hours, '3.0') + + #incorrect event + self.driver.find_element_by_xpath( + '//input[@name = "event_name"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "event_name"]').send_keys('wrong-event') + self.driver.find_element_by_xpath('//form').submit() + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-danger').text, 'Your criteria did not return any results.') + + #incorrect event format, should raise enter a valid value error + self.driver.find_element_by_xpath( + '//input[@name = "event_name"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "event_name"]').send_keys('!@#$') + self.driver.find_element_by_xpath('//form').submit() + self.assertEqual(self.driver.find_element_by_xpath( + 'html/body/div[2]/div[3]/form/fieldset/div[1]/div/p/strong').text, 'Enter a valid value.') + + def test_job_field(self): + self.register_event_utility() + self.register_job_utility() + self.register_shift_utility() + self.log_hours_utility() + + self.login({ 'username' : 'volunteer', 'password' : 'volunteer'}) + self.driver.find_element_by_link_text('Report').click() + self.driver.find_element_by_xpath( + '//input[@name = "job_name"]').send_keys('job') + self.driver.find_element_by_xpath('//form').submit() + + total_no_of_shifts = self.driver.find_element_by_xpath( + '//div[2]/div[4]').text.split(' ')[10].strip('\nTotal') + + total_no_of_hours = self.driver.find_element_by_xpath( + '//div[2]/div[4]').text.split(' ')[-1].strip('\n') + + self.assertEqual(total_no_of_shifts, '1') + self.assertEqual(total_no_of_hours, '3.0') + + #incorrect job + self.driver.find_element_by_xpath( + '//input[@name = "job_name"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "job_name"]').send_keys('wrongjob') + self.driver.find_element_by_xpath('//form').submit() + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-danger').text, 'Your criteria did not return any results.') + + #incorrect job format, should raise enter a valid value error + self.driver.find_element_by_xpath( + '//input[@name = "job_name"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "job_name"]').send_keys('wrong-job') + self.driver.find_element_by_xpath('//form').submit() + self.assertEqual(self.driver.find_element_by_xpath( + 'html/body/div[2]/div[3]/form/fieldset/div[2]/div/p/strong').text, 'Enter a valid value.') + + + def test_intersection_of_fields(self): + self.register_event_utility() + self.register_job_utility() + self.register_shift_utility() + self.log_hours_utility() + + self.login({ 'username' : 'volunteer', 'password' : 'volunteer'}) + self.driver.find_element_by_link_text('Report').click() + self.driver.find_element_by_xpath( + '//input[@name = "event_name"]').send_keys('event') + self.driver.find_element_by_xpath( + '//input[@name = "job_name"]').send_keys('job') + self.driver.find_element_by_xpath( + '//input[@name = "date"]').send_keys('2015-06-15') + self.driver.find_element_by_xpath('//form').submit() + + total_no_of_shifts = self.driver.find_element_by_xpath( + '//div[2]/div[4]').text.split(' ')[10].strip('\nTotal') + + total_no_of_hours = self.driver.find_element_by_xpath( + '//div[2]/div[4]').text.split(' ')[-1].strip('\n') + + self.assertEqual(total_no_of_shifts, '1') + self.assertEqual(total_no_of_hours, '3.0') + + # event, job correct and date incorrect + self.driver.find_element_by_xpath( + '//input[@name = "event_name"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "event_name"]').send_keys('event') + self.driver.find_element_by_xpath( + '//input[@name = "job_name"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "job_name"]').send_keys('job') + self.driver.find_element_by_xpath( + '//input[@name = "date"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "date"]').send_keys('2015-08-15') + + self.driver.find_element_by_xpath('//form').submit() + self.assertEqual(self.driver.find_element_by_class_name( + 'alert-danger').text, 'Your criteria did not return any results.') From cb29f6d6c64690dcb79f1ad43c6afc2b31f7e62f Mon Sep 17 00:00:00 2001 From: vatsala Date: Sun, 29 May 2016 00:47:44 +0530 Subject: [PATCH 2/8] Moving and renaming tests for services to avoid conflicts --- vms/administrator/{tests.py => tests/test_services.py} | 0 vms/authentication/tests/__init__.py | 0 vms/authentication/{tests.py => tests/test_services.py} | 0 vms/event/{tests.py => tests/test_services.py} | 0 vms/home/{tests.py => tests/test_services.py} | 0 vms/job/tests/__init__.py | 0 vms/job/{tests.py => tests/test_services.py} | 0 vms/organization/tests/__init__.py | 0 vms/organization/{tests.py => tests/test_services.py} | 0 vms/registration/{tests.py => tests/test_services.py} | 0 vms/shift/{tests.py => tests/test_services.py} | 0 vms/volunteer/{tests.py => tests/test_services.py} | 0 12 files changed, 0 insertions(+), 0 deletions(-) rename vms/administrator/{tests.py => tests/test_services.py} (100%) create mode 100644 vms/authentication/tests/__init__.py rename vms/authentication/{tests.py => tests/test_services.py} (100%) rename vms/event/{tests.py => tests/test_services.py} (100%) rename vms/home/{tests.py => tests/test_services.py} (100%) create mode 100644 vms/job/tests/__init__.py rename vms/job/{tests.py => tests/test_services.py} (100%) create mode 100644 vms/organization/tests/__init__.py rename vms/organization/{tests.py => tests/test_services.py} (100%) rename vms/registration/{tests.py => tests/test_services.py} (100%) rename vms/shift/{tests.py => tests/test_services.py} (100%) rename vms/volunteer/{tests.py => tests/test_services.py} (100%) diff --git a/vms/administrator/tests.py b/vms/administrator/tests/test_services.py similarity index 100% rename from vms/administrator/tests.py rename to vms/administrator/tests/test_services.py diff --git a/vms/authentication/tests/__init__.py b/vms/authentication/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vms/authentication/tests.py b/vms/authentication/tests/test_services.py similarity index 100% rename from vms/authentication/tests.py rename to vms/authentication/tests/test_services.py diff --git a/vms/event/tests.py b/vms/event/tests/test_services.py similarity index 100% rename from vms/event/tests.py rename to vms/event/tests/test_services.py diff --git a/vms/home/tests.py b/vms/home/tests/test_services.py similarity index 100% rename from vms/home/tests.py rename to vms/home/tests/test_services.py diff --git a/vms/job/tests/__init__.py b/vms/job/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vms/job/tests.py b/vms/job/tests/test_services.py similarity index 100% rename from vms/job/tests.py rename to vms/job/tests/test_services.py diff --git a/vms/organization/tests/__init__.py b/vms/organization/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vms/organization/tests.py b/vms/organization/tests/test_services.py similarity index 100% rename from vms/organization/tests.py rename to vms/organization/tests/test_services.py diff --git a/vms/registration/tests.py b/vms/registration/tests/test_services.py similarity index 100% rename from vms/registration/tests.py rename to vms/registration/tests/test_services.py diff --git a/vms/shift/tests.py b/vms/shift/tests/test_services.py similarity index 100% rename from vms/shift/tests.py rename to vms/shift/tests/test_services.py diff --git a/vms/volunteer/tests.py b/vms/volunteer/tests/test_services.py similarity index 100% rename from vms/volunteer/tests.py rename to vms/volunteer/tests/test_services.py From b460cd0f724228a3709ea169cb8cfe90f78b3c2b Mon Sep 17 00:00:00 2001 From: vatsala Date: Sun, 29 May 2016 00:50:21 +0530 Subject: [PATCH 3/8] Added documentation for automated testing --- aut_docs/Design_Document.md | 58 +++++++++++++++++++++++++++++++++++++ docs/Installation Guide.md | 16 ++++++++-- requirements.txt | 8 +++++ 3 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 aut_docs/Design_Document.md create mode 100644 requirements.txt diff --git a/aut_docs/Design_Document.md b/aut_docs/Design_Document.md new file mode 100644 index 0000000..76f7347 --- /dev/null +++ b/aut_docs/Design_Document.md @@ -0,0 +1,58 @@ +# Automated Testing for VMS + +The QA process is divided as follows: + +- Continuous Intergation: Used travis to setup CI for VMS Project +- Functional Testing: Used Selnium to write UI tests from an end-users perspective.(black-box tests) +- Unit Testing: Valeria is writing unit-tests for the codebase.(white-box tests) + +## Few important points regarding CI: + +- `.travis.yml` is the config file to run the travis build +- Build can be viewed at `http://travis.org/jayesh92/vms` +- Status would be reflected in the badge in `README.md` + +## Few important points regarding Functional Testing: + +- Selenium, a browser automation tool is used to simulate the functionality. + python APIs for selnium are used in the tests. + +- Django provides a class `LiveServerTestCase`. What this does is that, It + setups a Virtual Django Sever in the background which can be used by + selenium to run tests. + +- So, each testcase Class inherits `LiveServerTestCase`, Contains a `setUp` + and `tearDown` method to instantiate and end live-server respectively. + Each testcase in the class begins with `test`. + +- Each Test Class covers a view. Class name represents the name of the view + in nav-bar. Test suite for a view is contained in `tests` folder of the app + containing the view. For Ex: `Volunteer Search` tab in the nav-bar of an + admin user redirects to `http://127.0.0.1:8000/volunteer/search/`, so + the corresponding tests for this view would be in `VolunteerSearch` class + in `tests` folder of `volunteer` app. + +- Each app contains a `tests` folder containing the unit-tests and functional + tests and an `__init__.py` to let django consider it as a package. + +- Currently, only functional tests for admin views have been written. + +## Steps to run tests: + +- Currently, used `python 2.7` +- Clone project: `git clone https://github.com/systers/vms.git` +- In the root folder of the project, startup a new virtual environment + `virtualenv -p /usr/bin/python2.7 venv` +- Activate virtualenv, `source venv/bin/activate` +- Install dependencies: `pip install -r requirements.txt` +- `cd vms` +- To run, `python manage.py runserver`. Browse + `http://127.0.0.1:8000` +- To execute tests `python manage.py test`. This will run all unit-tests and + all functional-tests across all apps. To execute tests of only a particular + app, run `python manage.py test ` +- If all tests pass, `OK` will be received at the end. +- For functional tests, a firefox window for each test will open up + automatically and close after simulation of tests. + +Note: The current setup uses one of the latest versions of Selenium. You will run into errors if the this version is incompatible with your firefox version and does not support it. In that case, follow [this](https://support.mozilla.org/en-US/kb/find-what-version-firefox-you-are-using) guide to find out your browser version and accordingly install a Selenium version compatible with it. \ No newline at end of file diff --git a/docs/Installation Guide.md b/docs/Installation Guide.md index 9998ec3..bdbc3b9 100644 --- a/docs/Installation Guide.md +++ b/docs/Installation Guide.md @@ -294,9 +294,9 @@ Start the development server by running the command (this runs the development s You can now try out the project by going to [http://localhost:8001/home](http://localhost:8001/home) on a browser on your local machine. -## Run Unit Tests +## Run Unit and Functional Tests -You can also run unit tests by running the command: +You can also run unit and functional tests by running the command: python manage.py test name_of_app_here @@ -314,6 +314,18 @@ python manage.py test shift python manage.py test organization ``` +If you want to run only unit tests for an app, refer to its test_services file using the dot notation. + +For example, if you want to run unit tests for the event app: +``` +python manage.py test event.tests.test_services +``` + +Smilarly, for job app it would be: +``` +python manage.py test job.tests.test_services +``` + If you want to run all unit tests, run this command: python manage.py test diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..0bd9fe6 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,8 @@ +coverage==3.7.1 +coveralls==0.5 +Django==1.7.4 +docopt==0.6.2 +psycopg2==2.5.4 +PyYAML==3.11 +requests==2.7.0 +selenium==2.53.1 From b3de7d03796d8dfc584bdc9a44380b2767ebb586 Mon Sep 17 00:00:00 2001 From: vatsala Date: Sun, 29 May 2016 01:11:23 +0530 Subject: [PATCH 4/8] Updated tests in administrator app --- vms/administrator/tests/test_report.py | 189 ++++++++++++----------- vms/administrator/tests/test_settings.py | 98 ++++++------ 2 files changed, 142 insertions(+), 145 deletions(-) diff --git a/vms/administrator/tests/test_report.py b/vms/administrator/tests/test_report.py index db623ee..0bdb792 100644 --- a/vms/administrator/tests/test_report.py +++ b/vms/administrator/tests/test_report.py @@ -1,3 +1,4 @@ + from django.test import TestCase from django.contrib.staticfiles.testing import LiveServerTestCase @@ -38,11 +39,12 @@ def setUp(self): Organization.objects.create( name = 'DummyOrg') - self.homepage = '/home/' + self.homepage = '/' self.authentication_page = '/authentication/login/' self.report_page = '/administrator/report/' self.driver = webdriver.Firefox() + self.driver.implicitly_wait(5) self.driver.maximize_window() super(Report, self).setUp() @@ -62,7 +64,7 @@ def login(self, username, password): def logout(self): self.driver.find_element_by_link_text('Log Out').click() - def test_null_values_with_empty_datatset(self): + def test_null_values_with_empty_dataset(self): # should return no entries self.login('admin', 'admin') self.driver.find_element_by_link_text('Report').click() @@ -94,17 +96,17 @@ def test_null_values_with_dataset(self): # create shift and log hours event = Event.objects.create( name = 'Hackathon', - start_date = '2015-06-01', - end_date = '2015-06-01') + start_date = '2016-06-01', + end_date = '2016-06-01') job = Job.objects.create( name = 'Developer', - start_date = '2015-06-01', - end_date = '2015-06-01', + start_date = '2016-06-01', + end_date = '2016-06-01', event = event) shift = Shift.objects.create( - date = '2015-06-01', + date = '2016-06-01', start_time = '08:00', end_time = '20:00', max_volunteers = '2', @@ -125,7 +127,7 @@ def test_null_values_with_dataset(self): self.assertEqual(self.driver.find_element_by_xpath( '//table//tbody//tr[1]//td[1]').text, 'Developer') self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[2]').text, 'June 1, 2015') + '//table//tbody//tr[1]//td[2]').text, 'June 1, 2016') self.assertEqual(self.driver.find_element_by_xpath( '//table//tbody//tr[1]//td[3]').text, '9 a.m.') self.assertEqual(self.driver.find_element_by_xpath( @@ -148,7 +150,7 @@ def test_null_values_with_dataset(self): self.assertEqual(self.driver.find_element_by_xpath( '//table//tbody//tr[1]//td[1]').text, 'first-name-one') self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[6]').text, 'June 1, 2015') + '//table//tbody//tr[1]//td[6]').text, 'June 1, 2016') self.assertEqual(self.driver.find_element_by_xpath( '//table//tbody//tr[1]//td[7]').text, '9 a.m.') self.assertEqual(self.driver.find_element_by_xpath( @@ -162,8 +164,7 @@ def test_only_logged_shifts_are_reported(self): volunteer_user = User.objects.create_user( username = 'volunteer-one', - password = 'volunteer-one', - email = 'vol@vol.com') + password = 'volunteer-one') volunteer = Volunteer.objects.create( user = volunteer_user, @@ -174,23 +175,24 @@ def test_only_logged_shifts_are_reported(self): state = 'state', country = 'country', phone_number = '9999999999', + email = 'vol@vol.com', organization = Organization.objects.get( name = 'organization-one')) # create shift and log hours event = Event.objects.create( name = 'Hackathon', - start_date = '2015-06-01', - end_date = '2015-06-01') + start_date = '2016-06-01', + end_date = '2016-06-01') job = Job.objects.create( name = 'Developer', - start_date = '2015-06-01', - end_date = '2015-06-01', + start_date = '2016-06-01', + end_date = '2016-06-01', event = event) shift = Shift.objects.create( - date = '2015-06-01', + date = '2016-06-01', start_time = '09:00', end_time = '15:00', max_volunteers = '2', @@ -211,7 +213,7 @@ def test_only_logged_shifts_are_reported(self): self.assertEqual(self.driver.find_element_by_xpath( '//table//tbody//tr[1]//td[1]').text, 'Developer') self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[2]').text, 'June 1, 2015') + '//table//tbody//tr[1]//td[2]').text, 'June 1, 2016') self.assertEqual(self.driver.find_element_by_xpath( '//table//tbody//tr[1]//td[3]').text, '9 a.m.') self.assertEqual(self.driver.find_element_by_xpath( @@ -236,8 +238,7 @@ def register_dataset(self, parameters): volunteer_user = User.objects.create_user( username = parameters['volunteer']['username'], - password = parameters['volunteer']['password'], - email = parameters['volunteer']['email']) + password = parameters['volunteer']['password']) volunteer = Volunteer.objects.create( user = volunteer_user, @@ -248,6 +249,7 @@ def register_dataset(self, parameters): state = parameters['volunteer']['state'], country = parameters['volunteer']['country'], phone_number = parameters['volunteer']['phone-no'], + email = parameters['volunteer']['email'], organization = Organization.objects.get( name = parameters['org'])) @@ -282,7 +284,7 @@ def test_check_intersection_of_fields(self): 'volunteer' : { 'username' : 'uname1', 'password' : 'uname1', - 'email' : 'email@email.com', + 'email' : 'email1@email.com', 'first_name' : 'tom-fname', 'last_name' : 'tom-lname', 'address' : 'address', @@ -292,16 +294,16 @@ def test_check_intersection_of_fields(self): 'phone-no' : '9999999999'}, 'event' : { 'name' : 'event-four', - 'start_date' : '2015-06-01', - 'end_date' : '2015-06-10'}, + 'start_date' : '2016-06-01', + 'end_date' : '2016-06-10'}, 'job' : { 'name' : 'jobOneInEventFour', - 'start_date' : '2015-06-01', - 'end_date' : '2015-06-01'}, + 'start_date' : '2016-06-01', + 'end_date' : '2016-06-01'}, 'shift' : { - 'date' : '2015-06-01', + 'date' : '2016-06-01', 'start_time' : '09:00', - 'end_time' : '10:00', + 'end_time' : '11:00', 'max_volunteers' : '10'}, 'vshift' : { 'start_time' : '09:30', @@ -312,7 +314,7 @@ def test_check_intersection_of_fields(self): 'volunteer' : { 'username' : 'uname2', 'password' : 'uname2', - 'email' : 'email@email.com', + 'email' : 'email2@email.com', 'first_name' : 'peter-fname', 'last_name' : 'peter-lname', 'address' : 'address', @@ -322,27 +324,27 @@ def test_check_intersection_of_fields(self): 'phone-no' : '9999999999'}, 'event' : { 'name' : 'event-one', - 'start_date' : '2015-06-01', - 'end_date' : '2015-06-10'}, + 'start_date' : '2016-06-01', + 'end_date' : '2016-06-10'}, 'job' : { 'name' : 'jobOneInEventOne', - 'start_date' : '2015-06-01', - 'end_date' : '2015-06-01'}, + 'start_date' : '2016-06-01', + 'end_date' : '2016-06-01'}, 'shift' : { - 'date' : '2015-06-01', - 'start_time' : '09:00', - 'end_time' : '10:00', + 'date' : '2016-06-01', + 'start_time' : '18:00', + 'end_time' : '23:00', 'max_volunteers' : '10'}, 'vshift' : { 'start_time' : '19:00', - 'end_time' : '23:00'}} + 'end_time' : '20:00'}} self.register_dataset(parameters) parameters = {'org' : 'org-one', 'volunteer' : { 'username' : 'uname3', 'password' : 'uname3', - 'email' : 'email@email.com', + 'email' : 'email3@email.com', 'first_name' : 'tom-fname', 'last_name' : 'tom-lname', 'address' : 'address', @@ -352,27 +354,27 @@ def test_check_intersection_of_fields(self): 'phone-no' : '9999999999'}, 'event' : { 'name' : 'event-four', - 'start_date' : '2015-06-01', - 'end_date' : '2015-06-10'}, + 'start_date' : '2016-06-01', + 'end_date' : '2016-06-10'}, 'job' : { 'name' : 'jobTwoInEventFour', - 'start_date' : '2015-06-01', - 'end_date' : '2015-06-01'}, + 'start_date' : '2016-06-01', + 'end_date' : '2016-06-01'}, 'shift' : { - 'date' : '2015-06-01', + 'date' : '2016-06-01', 'start_time' : '09:00', - 'end_time' : '10:00', + 'end_time' : '15:00', 'max_volunteers' : '10'}, 'vshift' : { - 'start_time' : '15:00', - 'end_time' : '18:30'}} + 'start_time' : '10:00', + 'end_time' : '11:30'}} self.register_dataset(parameters) parameters = {'org' : 'org-two', 'volunteer' : { 'username' : 'uname4', 'password' : 'uname4', - 'email' : 'email@email.com', + 'email' : 'email4@email.com', 'first_name' : 'harry-fname', 'last_name' : 'harry-lname', 'address' : 'address', @@ -382,16 +384,16 @@ def test_check_intersection_of_fields(self): 'phone-no' : '9999999999'}, 'event' : { 'name' : 'event-one', - 'start_date' : '2015-06-01', - 'end_date' : '2015-06-10'}, + 'start_date' : '2016-06-01', + 'end_date' : '2016-06-10'}, 'job' : { 'name' : 'jobTwoInEventOne', - 'start_date' : '2015-06-01', - 'end_date' : '2015-06-01'}, + 'start_date' : '2016-06-01', + 'end_date' : '2016-06-01'}, 'shift' : { - 'date' : '2015-06-01', + 'date' : '2016-06-01', 'start_time' : '09:00', - 'end_time' : '10:00', + 'end_time' : '11:00', 'max_volunteers' : '10'}, 'vshift' : { 'start_time' : '09:00', @@ -402,7 +404,7 @@ def test_check_intersection_of_fields(self): 'volunteer' : { 'username' : 'uname5', 'password' : 'uname5', - 'email' : 'email@email.com', + 'email' : 'email5@email.com', 'first_name' : 'harry-fname', 'last_name' : 'harry-lname', 'address' : 'address', @@ -412,27 +414,27 @@ def test_check_intersection_of_fields(self): 'phone-no' : '9999999999'}, 'event' : { 'name' : 'event-two', - 'start_date' : '2015-06-01', - 'end_date' : '2015-06-10'}, + 'start_date' : '2016-06-01', + 'end_date' : '2016-06-10'}, 'job' : { 'name' : 'jobOneInEventTwo', - 'start_date' : '2015-06-01', - 'end_date' : '2015-06-01'}, + 'start_date' : '2016-06-01', + 'end_date' : '2016-06-01'}, 'shift' : { - 'date' : '2015-06-01', + 'date' : '2016-06-01', 'start_time' : '09:00', - 'end_time' : '10:00', + 'end_time' : '18:00', 'max_volunteers' : '10'}, 'vshift' : { 'start_time' : '12:00', - 'end_time' : '17:00'}} + 'end_time' : '15:00'}} self.register_dataset(parameters) parameters = {'org' : 'org-three', 'volunteer' : { 'username' : 'uname6', 'password' : 'uname6', - 'email' : 'email@email.com', + 'email' : 'email6@email.com', 'first_name' : 'sherlock-fname', 'last_name' : 'sherlock-lname', 'address' : 'address', @@ -442,27 +444,27 @@ def test_check_intersection_of_fields(self): 'phone-no' : '9999999999'}, 'event' : { 'name' : 'event-two', - 'start_date' : '2015-06-01', - 'end_date' : '2015-06-10'}, + 'start_date' : '2016-06-01', + 'end_date' : '2016-06-10'}, 'job' : { 'name' : 'jobOneInEventTwo', - 'start_date' : '2015-06-01', - 'end_date' : '2015-06-01'}, + 'start_date' : '2016-06-01', + 'end_date' : '2016-06-01'}, 'shift' : { - 'date' : '2015-06-01', + 'date' : '2016-06-01', 'start_time' : '09:00', - 'end_time' : '10:00', + 'end_time' : '16:00', 'max_volunteers' : '10'}, 'vshift' : { - 'start_time' : '16:00', - 'end_time' : '18:00'}} + 'start_time' : '12:00', + 'end_time' : '14:00'}} self.register_dataset(parameters) parameters = {'org' : 'org-four', 'volunteer' : { 'username' : 'uname7', 'password' : 'uname7', - 'email' : 'email@email.com', + 'email' : 'email7@email.com', 'first_name' : 'harvey-fname', 'last_name' : 'harvey-lname', 'address' : 'address', @@ -472,27 +474,27 @@ def test_check_intersection_of_fields(self): 'phone-no' : '9999999999'}, 'event' : { 'name' : 'event-one', - 'start_date' : '2015-06-01', - 'end_date' : '2015-06-10'}, + 'start_date' : '2016-06-01', + 'end_date' : '2016-06-10'}, 'job' : { 'name' : 'jobThreeInEventOne', - 'start_date' : '2015-06-01', - 'end_date' : '2015-06-01'}, + 'start_date' : '2016-06-01', + 'end_date' : '2016-06-01'}, 'shift' : { - 'date' : '2015-06-01', + 'date' : '2016-06-01', 'start_time' : '09:00', - 'end_time' : '10:00', + 'end_time' : '13:00', 'max_volunteers' : '10'}, 'vshift' : { - 'start_time' : '19:00', - 'end_time' : '19:30'}} + 'start_time' : '12:00', + 'end_time' : '12:30'}} self.register_dataset(parameters) parameters = {'org' : 'org-four', 'volunteer' : { 'username' : 'uname8', 'password' : 'uname8', - 'email' : 'email@email.com', + 'email' : 'email8@email.com', 'first_name' : 'mike-fname', 'last_name' : 'mike-lname', 'address' : 'address', @@ -502,20 +504,20 @@ def test_check_intersection_of_fields(self): 'phone-no' : '9999999999'}, 'event' : { 'name' : 'event-three', - 'start_date' : '2015-06-01', - 'end_date' : '2015-06-10'}, + 'start_date' : '2016-06-01', + 'end_date' : '2016-06-10'}, 'job' : { 'name' : 'jobOneInEventThree', - 'start_date' : '2015-06-01', - 'end_date' : '2015-06-01'}, + 'start_date' : '2016-06-01', + 'end_date' : '2016-06-01'}, 'shift' : { - 'date' : '2015-06-01', - 'start_time' : '09:00', + 'date' : '2016-06-01', + 'start_time' : '01:00', 'end_time' : '10:00', 'max_volunteers' : '10'}, 'vshift' : { 'start_time' : '01:00', - 'end_time' : '10:00'}} + 'end_time' : '04:00'}} self.register_dataset(parameters) self.login('admin', 'admin') @@ -531,9 +533,9 @@ def test_check_intersection_of_fields(self): total_no_of_hours = self.driver.find_element_by_xpath( '//div[2]/div[4]').text.split(' ')[-1].strip('\n') - # 2 shifts of 0.5 hrs and 3.5 hrs + # 2 shifts of 0.5 hrs and 1.5 hrs self.assertEqual(total_no_of_shifts, '2') - self.assertEqual(total_no_of_hours, '4.0') + self.assertEqual(total_no_of_hours, '2.0') self.driver.find_element_by_xpath( '//input[@name = "first_name"]').clear() @@ -547,9 +549,9 @@ def test_check_intersection_of_fields(self): total_no_of_hours = self.driver.find_element_by_xpath( '//div[2]/div[4]').text.split(' ')[-1].strip('\n') - # 3 shifts of 0.5 hrs, 3:30 hrs and 4 hrs + # 3 shifts of 0.5 hrs, 1 hrs and 1.5 hrs self.assertEqual(total_no_of_shifts, '3') - self.assertEqual(total_no_of_hours, '8.0') + self.assertEqual(total_no_of_hours, '3.0') self.driver.find_element_by_xpath( '//input[@name = "first_name"]').clear() @@ -568,9 +570,9 @@ def test_check_intersection_of_fields(self): total_no_of_hours = self.driver.find_element_by_xpath( '//div[2]/div[4]').text.split(' ')[-1].strip('\n') - # 1 shift of 3:30 hrs + # 1 shift of 1:30 hrs self.assertEqual(total_no_of_shifts, '1') - self.assertEqual(total_no_of_hours, '3.5') + self.assertEqual(total_no_of_hours, '1.5') self.driver.find_element_by_xpath( '//input[@name = "first_name"]').clear() @@ -590,9 +592,9 @@ def test_check_intersection_of_fields(self): total_no_of_hours = self.driver.find_element_by_xpath( '//div[2]/div[4]').text.split(' ')[-1].strip('\n') - # 3 shifts of 0:30 hrs, 4:00 hrs, 1:00 hrs + # 3 shifts of 0:30 hrs, 1:00 hrs, 1:00 hrs self.assertEqual(total_no_of_shifts, '3') - self.assertEqual(total_no_of_hours, '5.5') + self.assertEqual(total_no_of_hours, '2.5') self.driver.find_element_by_xpath( '//input[@name = "first_name"]').clear() @@ -618,3 +620,4 @@ def test_check_intersection_of_fields(self): # 1 shift of 2:00 hrs self.assertEqual(total_no_of_shifts, '1') self.assertEqual(total_no_of_hours, '2.0') + diff --git a/vms/administrator/tests/test_settings.py b/vms/administrator/tests/test_settings.py index 9a1ded5..4940741 100644 --- a/vms/administrator/tests/test_settings.py +++ b/vms/administrator/tests/test_settings.py @@ -12,7 +12,7 @@ class Settings(LiveServerTestCase): ''' - Settings Class contains UI testcases for `Settings` view in + Settings Class contains UI testcases for `Events` tab in Administrator profile. This view consists of Events, Jobs, Shifts, Organization tabs. @@ -25,7 +25,7 @@ class Settings(LiveServerTestCase): Job: - Create Job without any event - Edit Job - - Delete Job without Assoicated Shift + - Delete Job without Associated Shift - Delete Job with Shifts Shift: @@ -60,10 +60,11 @@ def setUp(self): Organization.objects.create( name = 'DummyOrg') - self.homepage = '/home/' + self.homepage = '/' self.authentication_page = '/authentication/login/' self.settings_page = '/event/list/' self.driver = webdriver.Firefox() + self.driver.implicitly_wait(5) self.driver.maximize_window() super(Settings, self).setUp() @@ -76,13 +77,13 @@ def login_admin(self): self.driver.find_element_by_id('id_login').send_keys('admin') self.driver.find_element_by_id('id_password').send_keys('admin') self.driver.find_element_by_xpath('//form[1]').submit() - self.driver.find_element_by_link_text('Settings').click() - + self.driver.find_element_by_link_text('Events').send_keys("\n") self.assertEqual(self.driver.current_url, self.live_server_url + self.settings_page) def test_event_tab(self): self.login_admin() + self.assertNotEqual(self.driver.find_element_by_link_text('Events'), None) self.assertEqual(self.driver.find_element_by_class_name( 'alert-success').text, 'There are currently no events. Please create events first.') @@ -156,7 +157,7 @@ def register_job_utility(self, job): def test_create_event(self): self.login_admin() - event = ['event-name', '05/20/2015', '05/20/2015'] + event = ['event-name', '08/21/2016', '09/28/2016'] self.register_event_utility(event) # check event created @@ -167,7 +168,7 @@ def test_create_event(self): def test_edit_event(self): self.login_admin() - event = ['event-name', '05/20/2015', '05/20/2015'] + event = ['event-name', '08/21/2016', '09/28/2016'] self.register_event_utility(event) # create event @@ -177,9 +178,9 @@ def test_edit_event(self): '//table//tbody//tr[1]//td[1]').text, 'event-name') self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]').text, 'Edit') + '//table//tbody//tr[1]//td[5]').text, 'Edit') self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]//a').click() + '//table//tbody//tr[1]//td[5]//a').click() self.driver.find_element_by_xpath( '//input[@placeholder = "Event Name"]').clear() @@ -191,13 +192,13 @@ def test_edit_event(self): '//input[@name = "start_date"]').clear() self.driver.find_element_by_xpath( '//input[@name = "start_date"]').send_keys( - '06/24/2015') + '08/29/2016') self.driver.find_element_by_xpath( '//input[@name = "end_date"]').clear() self.driver.find_element_by_xpath( '//input[@name = "end_date"]').send_keys( - '06/24/2015') + '12/21/2016') self.driver.find_element_by_xpath('//form[1]').submit() @@ -209,7 +210,7 @@ def test_edit_event(self): def test_delete_event_with_no_associated_job(self): self.login_admin() - event = ['event-name', '05/20/2015', '05/20/2015'] + event = ['event-name', '08/21/2016', '09/28/2016'] self.register_event_utility(event) # create event @@ -219,9 +220,9 @@ def test_delete_event_with_no_associated_job(self): '//table//tbody//tr[1]//td[1]').text, 'event-name') self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[5]').text, 'Delete') + '//table//tbody//tr[1]//td[6]').text, 'Delete') self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[5]//a').click() + '//table//tbody//tr[1]//td[6]//a').click() self.assertNotEqual(self.driver.find_element_by_class_name( 'panel-danger'), None) @@ -239,12 +240,11 @@ def test_delete_event_with_associated_job(self): self.login_admin() # create event - event = ['event-name', '05/20/2015', '05/20/2015'] + event = ['event-name', '08/21/2016', '09/28/2016'] self.register_event_utility(event) # create job - job = ['event-name', 'job name', 'job description', '05/20/2015', - '05/20/2015'] + job = ['event-name', 'job name', 'job description', '08/29/2016', '09/11/2016'] self.assertEqual(self.driver.current_url, self.live_server_url + self.settings_page) self.register_job_utility(job) @@ -256,9 +256,9 @@ def test_delete_event_with_associated_job(self): # delete event self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[5]').text, 'Delete') + '//table//tbody//tr[1]//td[6]').text, 'Delete') self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[5]//a').click() + '//table//tbody//tr[1]//td[6]//a').click() # confirm to delete self.assertNotEqual(self.driver.find_element_by_class_name( @@ -282,12 +282,11 @@ def test_create_job(self): self.login_admin() # register event first to create job - event = ['event-name', '05/20/2015', '05/20/2015'] + event = ['event-name', '08/21/2016', '09/28/2016'] self.register_event_utility(event) # create job - job = ['event-name', 'job name', 'job description', '05/20/2015', - '05/20/2015'] + job = ['event-name', 'job name', 'job description', '08/29/2016', '09/11/2016'] self.assertEqual(self.driver.current_url, self.live_server_url + self.settings_page) self.register_job_utility(job) @@ -304,12 +303,11 @@ def test_edit_job(self): self.login_admin() # register event first to create job - event = ['event-name', '05/20/2015', '05/20/2015'] + event = ['event-name', '08/21/2016', '09/28/2016'] self.register_event_utility(event) # create job - job = ['event-name', 'job name', 'job description', '05/20/2015', - '05/20/2015'] + job = ['event-name', 'job name', 'job description', '08/29/2016', '09/11/2016'] self.assertEqual(self.driver.current_url, self.live_server_url + self.settings_page) self.register_job_utility(job) @@ -344,13 +342,13 @@ def test_edit_job(self): '//input[@name = "start_date"]').clear() self.driver.find_element_by_xpath( '//input[@name = "start_date"]').send_keys( - '06/24/2015') + '08/30/2016') self.driver.find_element_by_xpath( '//input[@name = "end_date"]').clear() self.driver.find_element_by_xpath( '//input[@name = "end_date"]').send_keys( - '06/24/2015') + '09/21/2016') self.driver.find_element_by_xpath('//form[1]').submit() @@ -364,12 +362,11 @@ def test_delete_job_without_associated_shift(self): self.login_admin() # register event first to create job - event = ['event-name', '05/20/2015', '05/20/2015'] + event = ['event-name', '08/21/2016', '09/28/2016'] self.register_event_utility(event) # create job - job = ['event-name', 'job name', 'job description', '05/20/2015', - '05/20/2015'] + job = ['event-name', 'job name', 'job description', '08/29/2016', '09/11/2016'] self.assertEqual(self.driver.current_url, self.live_server_url + self.settings_page) self.register_job_utility(job) @@ -403,13 +400,12 @@ def test_delete_job_without_associated_shift(self): def test_delete_job_with_associated_shifts(self): self.login_admin() - # register event - event = ['event-name', '05/20/2015', '05/20/2015'] + # register event first to create job + event = ['event-name', '08/21/2016', '09/28/2016'] self.register_event_utility(event) # create job - job = ['event-name', 'job name', 'job description', '05/20/2015', - '05/20/2015'] + job = ['event-name', 'job name', 'job description', '08/29/2016', '09/11/2016'] self.register_job_utility(job) # create shift @@ -424,7 +420,7 @@ def test_delete_job_with_associated_shifts(self): self.driver.find_element_by_xpath( '//input[@name = "date"]').send_keys( - '06/20/2015') + '08/31/2016') self.driver.find_element_by_xpath( '//input[@name = "start_time"]').send_keys( '09:00') @@ -464,12 +460,11 @@ def test_create_shift(self): self.login_admin() # register event to create job - event = ['event-name', '05/20/2015', '05/20/2015'] + event = ['event-name', '08/21/2016', '09/28/2016'] self.register_event_utility(event) - # create job to create shift - job = ['event-name', 'job name', 'job description', '05/20/2015', - '05/20/2015'] + # create job + job = ['event-name', 'job name', 'job description', '08/29/2016', '09/11/2016'] self.register_job_utility(job) # create shift @@ -484,7 +479,7 @@ def test_create_shift(self): self.driver.find_element_by_xpath( '//input[@name = "date"]').send_keys( - '06/20/2015') + '09/01/2016') self.driver.find_element_by_xpath( '//input[@name = "start_time"]').send_keys( '09:00') @@ -503,12 +498,11 @@ def test_edit_shift(self): self.login_admin() # register event to create job - event = ['event-name', '05/20/2015', '05/20/2015'] + event = ['event-name', '08/21/2016', '09/28/2016'] self.register_event_utility(event) - # create job to create shift - job = ['event-name', 'job name', 'job description', '05/20/2015', - '05/20/2015'] + # create job + job = ['event-name', 'job name', 'job description', '08/29/2016', '09/11/2016'] self.register_job_utility(job) # create shift @@ -523,7 +517,7 @@ def test_edit_shift(self): self.driver.find_element_by_xpath( '//input[@name = "date"]').send_keys( - '06/20/2015') + '09/01/2016') self.driver.find_element_by_xpath( '//input[@name = "start_time"]').send_keys( '09:00') @@ -546,7 +540,7 @@ def test_edit_shift(self): self.driver.find_element_by_xpath('//input[@name = "date"]').clear() self.driver.find_element_by_xpath( '//input[@name = "date"]').send_keys( - '06/24/2015') + '09/05/2016') self.driver.find_element_by_xpath( '//input[@name = "start_time"]').clear() @@ -572,7 +566,7 @@ def test_edit_shift(self): self.driver.find_element_by_class_name('help-block') self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[1]').text, 'June 24, 2015') + '//table//tbody//tr[1]//td[1]').text, 'Sept. 5, 2016') self.assertEqual(self.driver.find_element_by_xpath( '//table//tbody//tr[1]//td[2]').text, '10 a.m.') self.assertEqual(self.driver.find_element_by_xpath( @@ -584,12 +578,11 @@ def test_delete_shift(self): self.login_admin() # register event to create job - event = ['event-name', '05/20/2015', '05/20/2015'] + event = ['event-name', '08/21/2016', '09/28/2016'] self.register_event_utility(event) - # create job to create shift - job = ['event-name', 'job name', 'job description', '05/20/2015', - '05/20/2015'] + # create job + job = ['event-name', 'job name', 'job description', '08/29/2016', '09/11/2016'] self.register_job_utility(job) # create shift @@ -604,7 +597,7 @@ def test_delete_shift(self): self.driver.find_element_by_xpath( '//input[@name = "date"]').send_keys( - '06/20/2015') + '09/05/2016') self.driver.find_element_by_xpath( '//input[@name = "start_time"]').send_keys( '09:00') @@ -813,3 +806,4 @@ def test_delete_org_with_associated_users(self): self.assertEqual(self.driver.find_element_by_xpath( '//div[2]/div[3]/p').text, 'You cannot delete an organization that users are currently associated with.') + From 1563a32978541f949cacf3d39ed3768bf078bfda Mon Sep 17 00:00:00 2001 From: vatsala Date: Sun, 29 May 2016 01:20:18 +0530 Subject: [PATCH 5/8] Updated tests in event and registration app --- vms/event/tests/test_shiftSignUp.py | 116 ++++++------------ .../tests/test_functional_admin.py | 42 ++++--- .../tests/test_functional_volunteer.py | 45 ++++--- 3 files changed, 86 insertions(+), 117 deletions(-) diff --git a/vms/event/tests/test_shiftSignUp.py b/vms/event/tests/test_shiftSignUp.py index 3a2ddf5..e7da5d6 100644 --- a/vms/event/tests/test_shiftSignUp.py +++ b/vms/event/tests/test_shiftSignUp.py @@ -36,7 +36,7 @@ def setUp(self): Organization.objects.create( name = 'DummyOrg') - self.homepage = '/home/' + self.homepage = '/' self.authentication_page = '/authentication/login/' self.driver = webdriver.Firefox() self.driver.implicitly_wait(5) @@ -59,19 +59,19 @@ def login(self): def register_event_utility(self): Event.objects.create( name = 'event', - start_date = '2015-06-15', - end_date = '2015-06-15') + start_date = '2016-06-15', + end_date = '2016-06-16') def register_job_utility(self): Job.objects.create( name = 'job', - start_date = '2015-06-15', - end_date = '2015-06-15', + start_date = '2016-06-15', + end_date = '2016-06-15', event = Event.objects.get(name = 'event')) def register_shift_utility(self): Shift.objects.create( - date = '2015-06-15', + date = '2016-06-15', start_time = '09:00', end_time = '15:00', max_volunteers ='6', @@ -84,57 +84,8 @@ def test_events_page_with_no_events(self): self.driver.find_element_by_link_text('Shift Sign Up').click() self.assertEqual(self.driver.find_element_by_class_name('alert-info').text, - 'There are currently no events.') + 'There are no events.') - def test_jobs_page_with_no_jobs(self): - self.login() - - self.register_event_utility() - - # open Shift Sign Up - self.driver.find_element_by_link_text('Shift Sign Up').click() - - # on event page - self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]').text, 'View Jobs') - self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]//a').click() - - # arrived on jobs page with no jobs - with self.assertRaises(NoSuchElementException): - self.driver.find_element_by_tag_name('table') - self.assertEqual(self.driver.find_element_by_class_name( - 'alert-info').text, 'There are currently no jobs for event.') - - def test_signup_shifts_with_no_shifts(self): - # login - self.login() - - self.register_event_utility() - self.register_job_utility() - - # open Shift Sign Up - self.driver.find_element_by_link_text('Shift Sign Up').click() - - # on event page - self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]').text, 'View Jobs') - self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]//a').click() - - # on jobs page - self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[1]').text, 'job') - self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]').text, 'View Shifts') - self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]//a').click() - - # arrived on shifts page with no shift - with self.assertRaises(NoSuchElementException): - self.driver.find_element_by_tag_name('table') - self.assertEqual(self.driver.find_element_by_class_name( - 'alert-info').text, 'There are currently no shifts for the job job.') def test_signup_shifts_with_registered_shifts(self): # login @@ -179,7 +130,7 @@ def test_signup_shifts_with_registered_shifts(self): 'job') self.assertEqual(self.driver.find_element_by_xpath( '//table//tbody//tr[1]//td[2]').text, - 'June 15, 2015') + 'June 15, 2016') self.assertEqual(self.driver.find_element_by_xpath( '//table//tbody//tr[1]//td[3]').text, '9 a.m.') @@ -231,33 +182,36 @@ def test_signup_for_same_shift_again(self): self.driver.find_element_by_link_text('Shift Sign Up').click() # events page + self.assertEqual(self.driver.find_element_by_class_name('alert-info').text, + 'There are no events.') with self.assertRaises(NoSuchElementException): - self.driver.find_element_by_class_name('alert-info') - self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]').text, - 'View Jobs') - self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]//a').click() + self.driver.find_element_by_tag_name('table') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, 'View Jobs') - # on jobs page - self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]').text, - 'View Shifts') - self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]//a').click() - # on shifts page, sign up again - self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]').text, - 'Sign Up') - self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]//a').click() + def test_empty_events(self): + self.login() - # confirm on shift sign up - self.driver.find_element_by_xpath('//form[1]').submit() + self.register_event_utility() + + # open Shift Sign Up + self.driver.find_element_by_link_text('Shift Sign Up').click() - # check error on signing up same shift - self.assertEqual(self.driver.find_element_by_class_name( - 'alert-danger').text, - 'Error\n\nYou have already signed up for this shift. Please sign up for a different shift.') + # on event page + self.assertEqual(self.driver.find_element_by_class_name('alert-info').text, + 'There are no events.') + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_tag_name('table') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, 'View Jobs') + + self.register_job_utility() + + self.assertEqual(self.driver.find_element_by_class_name('alert-info').text, + 'There are no events.') + with self.assertRaises(NoSuchElementException): + self.driver.find_element_by_tag_name('table') + self.assertEqual(self.driver.find_element_by_xpath( + '//table//tbody//tr[1]//td[4]').text, 'View Jobs') diff --git a/vms/registration/tests/test_functional_admin.py b/vms/registration/tests/test_functional_admin.py index 8cc12d7..5357589 100644 --- a/vms/registration/tests/test_functional_admin.py +++ b/vms/registration/tests/test_functional_admin.py @@ -36,7 +36,7 @@ def setUp(self): Organization.objects.create( name = 'DummyOrg') - self.homepage = '/home/' + self.homepage = '/' self.admin_registration_page = '/registration/signup_administrator/' self.authentication_page = '/authentication/login/' self.driver = webdriver.Firefox() @@ -83,8 +83,10 @@ def test_name_fields(self): self.driver.find_element_by_id('id_unlisted_organization').send_keys('admin-org') self.driver.find_element_by_xpath('//form[1]').submit() - with self.assertRaises(NoSuchElementException): - self.driver.find_element_by_class_name('help-block') + self.assertNotEqual(self.driver.find_elements_by_class_name('messages'), + None) + self.assertEqual(self.driver.find_element_by_class_name('messages').text, + 'You have successfully registered!') # register a user again with username same as already registered user self.assertEqual(self.driver.current_url, self.live_server_url + @@ -96,7 +98,7 @@ def test_name_fields(self): self.driver.find_element_by_id('id_password').send_keys('admin-password!@#$%^&*()_') self.driver.find_element_by_id('id_first_name').send_keys('admin-first-name') self.driver.find_element_by_id('id_last_name').send_keys('admin-last-name') - self.driver.find_element_by_id('id_email').send_keys('email@systers.org') + self.driver.find_element_by_id('id_email').send_keys('email1@systers.org') self.driver.find_element_by_id('id_address').send_keys('admin-address') self.driver.find_element_by_id('id_city').send_keys('admin-city') self.driver.find_element_by_id('id_state').send_keys('admin-state') @@ -117,7 +119,7 @@ def test_name_fields(self): self.driver.find_element_by_id('id_password').send_keys('admin-password!@#$%^&*()_') self.driver.find_element_by_id('id_first_name').send_keys('admin-first-name-1') self.driver.find_element_by_id('id_last_name').send_keys('admin-last-name-1') - self.driver.find_element_by_id('id_email').send_keys('email@systers.org') + self.driver.find_element_by_id('id_email').send_keys('email1@systers.org') self.driver.find_element_by_id('id_address').send_keys('admin-address') self.driver.find_element_by_id('id_city').send_keys('admin-city') self.driver.find_element_by_id('id_state').send_keys('admin-state') @@ -140,7 +142,7 @@ def test_name_fields(self): self.driver.find_element_by_id('id_password').send_keys('admin-password!@#$%^&*()_') self.driver.find_element_by_id('id_first_name').send_keys('name-!@#$%^&*()_') self.driver.find_element_by_id('id_last_name').send_keys('name-!@#$%^&*()_') - self.driver.find_element_by_id('id_email').send_keys('email@systers.org') + self.driver.find_element_by_id('id_email').send_keys('email1@systers.org') self.driver.find_element_by_id('id_address').send_keys('admin-address') self.driver.find_element_by_id('id_city').send_keys('admin-city') self.driver.find_element_by_id('id_state').send_keys('admin-state') @@ -163,7 +165,7 @@ def test_name_fields(self): self.driver.find_element_by_id('id_password').send_keys('admin-password!@#$%^&*()_') self.driver.find_element_by_id('id_first_name').send_keys('admin-first-name-!@#$%^&*()_') self.driver.find_element_by_id('id_last_name').send_keys('admin-last-name-!@#$%^&*()_') - self.driver.find_element_by_id('id_email').send_keys('email@systers.org') + self.driver.find_element_by_id('id_email').send_keys('email1@systers.org') self.driver.find_element_by_id('id_address').send_keys('admin-address') self.driver.find_element_by_id('id_city').send_keys('admin-city') self.driver.find_element_by_id('id_state').send_keys('admin-state') @@ -197,8 +199,10 @@ def test_address_field(self): self.driver.find_element_by_id('id_unlisted_organization').send_keys('admin-org') self.driver.find_element_by_xpath('//form[1]').submit() - with self.assertRaises(NoSuchElementException): - self.driver.find_element_by_class_name('help-block') + self.assertNotEqual(self.driver.find_elements_by_class_name('messages'), + None) + self.assertEqual(self.driver.find_element_by_class_name('messages').text, + 'You have successfully registered!') self.assertEqual(self.driver.current_url, self.live_server_url + self.homepage) @@ -210,7 +214,7 @@ def test_address_field(self): self.driver.find_element_by_id('id_password').send_keys('admin-password!@#$%^&*()_') self.driver.find_element_by_id('id_first_name').send_keys('admin-first-name') self.driver.find_element_by_id('id_last_name').send_keys('admin-last-name') - self.driver.find_element_by_id('id_email').send_keys('email@systers.org') + self.driver.find_element_by_id('id_email').send_keys('email1@systers.org') self.driver.find_element_by_id('id_address').send_keys('123 New-City address') self.driver.find_element_by_id('id_city').send_keys('admin-city') self.driver.find_element_by_id('id_state').send_keys('admin-state') @@ -219,8 +223,10 @@ def test_address_field(self): self.driver.find_element_by_id('id_unlisted_organization').send_keys('admin-org') self.driver.find_element_by_xpath('//form[1]').submit() - with self.assertRaises(NoSuchElementException): - self.driver.find_element_by_class_name('help-block') + self.assertNotEqual(self.driver.find_elements_by_class_name('messages'), + None) + self.assertEqual(self.driver.find_element_by_class_name('messages').text, + 'You have successfully registered!') self.assertEqual(self.driver.current_url, self.live_server_url + self.homepage) @@ -232,7 +238,7 @@ def test_address_field(self): self.driver.find_element_by_id('id_password').send_keys('admin-password!@#$%^&*()_') self.driver.find_element_by_id('id_first_name').send_keys('first-name') self.driver.find_element_by_id('id_last_name').send_keys('last-name') - self.driver.find_element_by_id('id_email').send_keys('email@systers.org') + self.driver.find_element_by_id('id_email').send_keys('email2@systers.org') self.driver.find_element_by_id('id_address').send_keys('admin-address!@#$()') self.driver.find_element_by_id('id_city').send_keys('admin-city') self.driver.find_element_by_id('id_state').send_keys('admin-state') @@ -265,8 +271,10 @@ def test_city_field(self): self.driver.find_element_by_id('id_unlisted_organization').send_keys('admin-org') self.driver.find_element_by_xpath('//form[1]').submit() - with self.assertRaises(NoSuchElementException): - self.driver.find_element_by_class_name('help-block') + self.assertNotEqual(self.driver.find_elements_by_class_name('messages'), + None) + self.assertEqual(self.driver.find_element_by_class_name('messages').text, + 'You have successfully registered!') self.assertEqual(self.driver.current_url, self.live_server_url + self.homepage) @@ -278,7 +286,7 @@ def test_city_field(self): self.driver.find_element_by_id('id_password').send_keys('admin-password!@#$%^&*()_') self.driver.find_element_by_id('id_first_name').send_keys('admin-first-name') self.driver.find_element_by_id('id_last_name').send_keys('admin-last-name') - self.driver.find_element_by_id('id_email').send_keys('email@systers.org') + self.driver.find_element_by_id('id_email').send_keys('email1@systers.org') self.driver.find_element_by_id('id_address').send_keys('admin-address') self.driver.find_element_by_id('id_city').send_keys('13th admin-city') self.driver.find_element_by_id('id_state').send_keys('admin-state') @@ -301,7 +309,7 @@ def test_city_field(self): self.driver.find_element_by_id('id_password').send_keys('admin-password!@#$%^&*()_') self.driver.find_element_by_id('id_first_name').send_keys('first-name') self.driver.find_element_by_id('id_last_name').send_keys('last-name') - self.driver.find_element_by_id('id_email').send_keys('email@systers.org') + self.driver.find_element_by_id('id_email').send_keys('email1@systers.org') self.driver.find_element_by_id('id_address').send_keys('admin-address') self.driver.find_element_by_id('id_city').send_keys('!@#$%^&*()_+city') self.driver.find_element_by_id('id_state').send_keys('admin-state') diff --git a/vms/registration/tests/test_functional_volunteer.py b/vms/registration/tests/test_functional_volunteer.py index 4169f9b..fe42405 100644 --- a/vms/registration/tests/test_functional_volunteer.py +++ b/vms/registration/tests/test_functional_volunteer.py @@ -34,7 +34,7 @@ def setUp(self): Organization.objects.create( name = 'DummyOrg') - self.homepage = '/home/' + self.homepage = '/' self.volunteer_registration_page = '/registration/signup_volunteer/' self.authentication_page = '/authentication/login/' self.driver = webdriver.Firefox() @@ -83,8 +83,10 @@ def test_name_fields(self): self.driver.find_element_by_id('id_unlisted_organization').send_keys('volunteer-org') self.driver.find_element_by_xpath('//form[1]').submit() - with self.assertRaises(NoSuchElementException): - self.driver.find_element_by_class_name('help-block') + self.assertNotEqual(self.driver.find_elements_by_class_name('messages'), + None) + self.assertEqual(self.driver.find_element_by_class_name('messages').text, + 'You have successfully registered!') # register a user again with username same as already registered user self.assertEqual(self.driver.current_url, self.live_server_url + @@ -92,12 +94,11 @@ def test_name_fields(self): self.driver.get(self.live_server_url + self.volunteer_registration_page) - self.driver.find_element_by_id('id_username').send_keys( - 'volunteer-username') + self.driver.find_element_by_id('id_username').send_keys('volunteer-username') self.driver.find_element_by_id('id_password').send_keys('volunteer-password!@#$%^&*()_') self.driver.find_element_by_id('id_first_name').send_keys('volunteer-first-name') self.driver.find_element_by_id('id_last_name').send_keys('volunteer-last-name') - self.driver.find_element_by_id('id_email').send_keys('volunteer-email@systers.org') + self.driver.find_element_by_id('id_email').send_keys('volunteer-email1@systers.org') self.driver.find_element_by_id('id_address').send_keys('volunteer-address') self.driver.find_element_by_id('id_city').send_keys('volunteer-city') self.driver.find_element_by_id('id_state').send_keys('volunteer-state') @@ -118,7 +119,7 @@ def test_name_fields(self): self.driver.find_element_by_id('id_password').send_keys('volunteer-password!@#$%^&*()_') self.driver.find_element_by_id('id_first_name').send_keys('volunteer-first-name-1') self.driver.find_element_by_id('id_last_name').send_keys('volunteer-last-name-1') - self.driver.find_element_by_id('id_email').send_keys('volunteer-email@systers.org') + self.driver.find_element_by_id('id_email').send_keys('volunteer-email1@systers.org') self.driver.find_element_by_id('id_address').send_keys( 'volunteer-address') self.driver.find_element_by_id('id_city').send_keys('volunteer-city') @@ -142,7 +143,7 @@ def test_name_fields(self): self.driver.find_element_by_id('id_password').send_keys('volunteer-password!@#$%^&*()_') self.driver.find_element_by_id('id_first_name').send_keys('first-name-!@#$%^&*()_') self.driver.find_element_by_id('id_last_name').send_keys('last-name-!@#$%^&*()_') - self.driver.find_element_by_id('id_email').send_keys('volunteer-email@systers.org') + self.driver.find_element_by_id('id_email').send_keys('volunteer-email1@systers.org') self.driver.find_element_by_id('id_address').send_keys('volunteer-address') self.driver.find_element_by_id('id_city').send_keys('volunteer-city') self.driver.find_element_by_id('id_state').send_keys('volunteer-state') @@ -165,7 +166,7 @@ def test_name_fields(self): self.driver.find_element_by_id('id_password').send_keys('volunteer-password!@#$%^&*()_') self.driver.find_element_by_id('id_first_name').send_keys('volunteer-first-name-!@#$%^&*()_') self.driver.find_element_by_id('id_last_name').send_keys('volunteer-last-name-!@#$%^&*()_') - self.driver.find_element_by_id('id_email').send_keys('volunteer-email@systers.org') + self.driver.find_element_by_id('id_email').send_keys('volunteer-email1@systers.org') self.driver.find_element_by_id('id_address').send_keys('volunteer-address') self.driver.find_element_by_id('id_city').send_keys('volunteer-city') self.driver.find_element_by_id('id_state').send_keys('volunteer-state') @@ -199,8 +200,10 @@ def test_address_field(self): self.driver.find_element_by_id('id_unlisted_organization').send_keys('volunteer-org') self.driver.find_element_by_xpath('//form[1]').submit() - with self.assertRaises(NoSuchElementException): - self.driver.find_element_by_class_name('help-block') + self.assertNotEqual(self.driver.find_elements_by_class_name('messages'), + None) + self.assertEqual(self.driver.find_element_by_class_name('messages').text, + 'You have successfully registered!') self.assertEqual(self.driver.current_url, self.live_server_url + self.homepage) @@ -212,7 +215,7 @@ def test_address_field(self): self.driver.find_element_by_id('id_password').send_keys('volunteer-password!@#$%^&*()_') self.driver.find_element_by_id('id_first_name').send_keys('volunteer-first-name') self.driver.find_element_by_id('id_last_name').send_keys('volunteer-last-name') - self.driver.find_element_by_id('id_email').send_keys('volunteer-email@systers.org') + self.driver.find_element_by_id('id_email').send_keys('volunteer-email1@systers.org') self.driver.find_element_by_id('id_address').send_keys('123 New-City address') self.driver.find_element_by_id('id_city').send_keys('volunteer-city') self.driver.find_element_by_id('id_state').send_keys('volunteer-state') @@ -221,8 +224,10 @@ def test_address_field(self): self.driver.find_element_by_id('id_unlisted_organization').send_keys('volunteer-org') self.driver.find_element_by_xpath('//form[1]').submit() - with self.assertRaises(NoSuchElementException): - self.driver.find_element_by_class_name('help-block') + self.assertNotEqual(self.driver.find_elements_by_class_name('messages'), + None) + self.assertEqual(self.driver.find_element_by_class_name('messages').text, + 'You have successfully registered!') self.assertEqual(self.driver.current_url, self.live_server_url + self.homepage) @@ -234,7 +239,7 @@ def test_address_field(self): self.driver.find_element_by_id('id_password').send_keys('volunteer-password!@#$%^&*()_') self.driver.find_element_by_id('id_first_name').send_keys('first-name') self.driver.find_element_by_id('id_last_name').send_keys('last-name') - self.driver.find_element_by_id('id_email').send_keys('volunteer-email@systers.org') + self.driver.find_element_by_id('id_email').send_keys('volunteer-email2@systers.org') self.driver.find_element_by_id('id_address').send_keys('volunteer-address!@#$()') self.driver.find_element_by_id('id_city').send_keys('volunteer-city') self.driver.find_element_by_id('id_state').send_keys('volunteer-state') @@ -267,8 +272,10 @@ def test_city_field(self): self.driver.find_element_by_id('id_unlisted_organization').send_keys('volunteer-org') self.driver.find_element_by_xpath('//form[1]').submit() - with self.assertRaises(NoSuchElementException): - self.driver.find_element_by_class_name('help-block') + self.assertNotEqual(self.driver.find_elements_by_class_name('messages'), + None) + self.assertEqual(self.driver.find_element_by_class_name('messages').text, + 'You have successfully registered!') self.assertEqual(self.driver.current_url, self.live_server_url + self.homepage) @@ -280,7 +287,7 @@ def test_city_field(self): self.driver.find_element_by_id('id_password').send_keys('volunteer-password!@#$%^&*()_') self.driver.find_element_by_id('id_first_name').send_keys('volunteer-first-name') self.driver.find_element_by_id('id_last_name').send_keys('volunteer-last-name') - self.driver.find_element_by_id('id_email').send_keys('volunteer-email@systers.org') + self.driver.find_element_by_id('id_email').send_keys('volunteer-email1@systers.org') self.driver.find_element_by_id('id_address').send_keys('volunteer-address') self.driver.find_element_by_id('id_city').send_keys('13th volunteer-city') self.driver.find_element_by_id('id_state').send_keys('volunteer-state') @@ -303,7 +310,7 @@ def test_city_field(self): self.driver.find_element_by_id('id_password').send_keys('volunteer-password!@#$%^&*()_') self.driver.find_element_by_id('id_first_name').send_keys('first-name') self.driver.find_element_by_id('id_last_name').send_keys('last-name') - self.driver.find_element_by_id('id_email').send_keys('volunteer-email@systers.org') + self.driver.find_element_by_id('id_email').send_keys('volunteer-email1@systers.org') self.driver.find_element_by_id('id_address').send_keys('volunteer-address') self.driver.find_element_by_id('id_city').send_keys('!@#$%^&*()_+city') self.driver.find_element_by_id('id_state').send_keys('volunteer-state') From 658866f5387e545add6ab077a9e09c4337877ccb Mon Sep 17 00:00:00 2001 From: vatsala Date: Sun, 29 May 2016 01:25:48 +0530 Subject: [PATCH 6/8] Updated tests in home app --- vms/home/tests/test_functional.py | 87 +++++++++++++++++++++---------- 1 file changed, 59 insertions(+), 28 deletions(-) diff --git a/vms/home/tests/test_functional.py b/vms/home/tests/test_functional.py index de8aa1c..b6d96d4 100644 --- a/vms/home/tests/test_functional.py +++ b/vms/home/tests/test_functional.py @@ -58,7 +58,7 @@ def setUp(self): Organization.objects.create( name = 'DummyOrg') - self.homepage = '/home/' + self.homepage = '/' self.authentication_page = '/authentication/login/' self.driver = webdriver.Firefox() self.driver.maximize_window() @@ -68,6 +68,7 @@ def tearDown(self): self.driver.quit() super(TestAccessControl, self).tearDown() + def test_correct_admin_credentials(self): ''' Method to simulate logging in of a valid admin user and check if they @@ -159,6 +160,7 @@ def test_incorrect_volunteer_credentials(self): 'alert-danger'), None) + class CheckURLAccess(LiveServerTestCase): ''' CheckURLAccess contains methods to browse(via URL) a volunteer page view @@ -215,8 +217,7 @@ def test_admin_cannot_access_volunteer_urls(self): self.driver.find_element_by_id('id_password').send_keys('admin') self.driver.find_element_by_xpath('//form[1]').submit() - self.driver.get(self.live_server_url + - '/shift/view_volunteer_shifts/1') + self.driver.get(self.live_server_url + '/shift/view_volunteer_shifts/1') page_source = self.driver.page_source error = re.search('403', page_source) self.assertNotEqual(error, None) @@ -226,6 +227,7 @@ def test_admin_cannot_access_volunteer_urls(self): error = re.search('403', page_source) self.assertNotEqual(error, None) + self.driver.get(self.live_server_url + '/event/list_sign_up/1') page_source = self.driver.page_source error = re.search('403', page_source) @@ -244,7 +246,7 @@ def test_admin_cannot_access_volunteer_urls(self): def test_volunteer_cannot_access_admin_urls(self): ''' Method logins a volunteer and tries to surf admin page views through url. - The admin views should return a 403 error to deny access. + The admin views should return a no admin rights page. ''' self.driver.get(self.live_server_url + self.authentication_page) @@ -252,31 +254,60 @@ def test_volunteer_cannot_access_admin_urls(self): self.driver.find_element_by_id('id_password').send_keys('volunteer') self.driver.find_element_by_xpath('//form[1]').submit() - self.driver.get(self.live_server_url + '/volunteer/search/') - page_source = self.driver.page_source - error = re.search('403', page_source) - self.assertNotEqual(error, None) self.driver.get(self.live_server_url + '/shift/volunteer_search/') - page_source = self.driver.page_source - error = re.search('403', page_source) - self.assertNotEqual(error, None) + self.assertNotEqual(self.driver.find_elements_by_class_name('panel-heading'), + None) + self.assertNotEqual(self.driver.find_elements_by_class_name('panel-body'), + None) + self.assertEqual(self.driver.find_element_by_class_name('panel-heading').text, + 'No Access') + self.assertEqual(self.driver.find_element_by_class_name('panel-body').text, + "You don't have administrator rights") + self.driver.get(self.live_server_url + '/administrator/report/') - page_source = self.driver.page_source - error = re.search('403', page_source) - self.assertNotEqual(error, None) + self.assertNotEqual(self.driver.find_element_by_class_name('panel-heading'), + None) + self.assertNotEqual(self.driver.find_element_by_class_name('panel-body'), + None) + self.assertEqual(self.driver.find_element_by_class_name('panel-heading').text, + 'No Access') + self.assertEqual(self.driver.find_element_by_class_name('panel-body').text, + "You don't have administrator rights") - self.driver.get(self.live_server_url + '/administrator/settings/') - page_source = self.driver.page_source - error = re.search('403', page_source) - self.assertNotEqual(error, None) - self.driver.get(self.live_server_url + - '/registration/signup_administrator/') - page_source = self.driver.page_source - error = re.search('403', page_source) - self.assertNotEqual(error, None) + self.driver.get(self.live_server_url + '/volunteer/search/') + self.assertNotEqual(self.driver.find_elements_by_class_name('panel-heading'), + None) + self.assertNotEqual(self.driver.find_elements_by_class_name('panel-body'), + None) + self.assertEqual(self.driver.find_element_by_class_name('panel-heading').text, + 'No Access') + self.assertEqual(self.driver.find_element_by_class_name('panel-body').text, + "You don't have administrator rights") + + + self.driver.get(self.live_server_url + '/administrator/settings/') + self.assertNotEqual(self.driver.find_elements_by_class_name('panel-heading'), + None) + self.assertNotEqual(self.driver.find_elements_by_class_name('panel-body'), + None) + self.assertEqual(self.driver.find_element_by_class_name('panel-heading').text, + 'No Access') + self.assertEqual(self.driver.find_element_by_class_name('panel-body').text, + "You don't have administrator rights") + + + self.driver.get(self.live_server_url + '/registration/signup_administrator/') + self.assertNotEqual(self.driver.find_elements_by_class_name('panel-heading'), + None) + self.assertNotEqual(self.driver.find_elements_by_class_name('panel-body'), + None) + self.assertEqual(self.driver.find_element_by_class_name('panel-heading').text, + 'No Access') + self.assertEqual(self.driver.find_element_by_class_name('panel-body').text, + "You don't have administrator rights") class CheckPageContent(LiveServerTestCase): @@ -349,7 +380,7 @@ def test_check_admin_page_content(self): self.assertNotEqual(self.driver.find_element_by_link_text( 'Report'), None) self.assertNotEqual(self.driver.find_element_by_link_text( - 'Settings'), None) + 'Events'), None) self.assertNotEqual(self.driver.find_element_by_link_text( 'Create Admin Account'), None) self.assertNotEqual(self.driver.find_element_by_link_text( @@ -377,7 +408,7 @@ def test_check_volunteer_page_content(self): self.assertNotEqual(self.driver.find_element_by_link_text( 'Upcoming Shifts'), None) self.assertNotEqual(self.driver.find_element_by_link_text( - 'Shift Hours'), None) + 'Completed Shifts'), None) self.assertNotEqual(self.driver.find_element_by_link_text( 'Shift Sign Up'), None) self.assertNotEqual(self.driver.find_element_by_link_text( @@ -441,7 +472,7 @@ def setUp(self): 'volunteer').pk) self.authentication_page = '/authentication/login/' - self.homepage = '/home/' + self.homepage = '/' self.driver = webdriver.Firefox() self.driver.maximize_window() super(CheckRedirection, self).setUp() @@ -479,7 +510,7 @@ def test_admin_page_redirection(self): '/administrator/report/') settings_link = self.driver.find_element_by_link_text( - 'Settings').get_attribute('href') + 'Events').get_attribute('href') self.assertEqual(settings_link, self.live_server_url + '/administrator/settings/') @@ -512,7 +543,7 @@ def test_volunteer_page_redirection(self): '/shift/view_volunteer_shifts/' + self.volunteer_id) shift_hours_link = self.driver.find_element_by_link_text( - 'Shift Hours').get_attribute('href') + 'Completed Shifts').get_attribute('href') self.assertEqual(shift_hours_link, self.live_server_url + '/shift/view_hours/' + self.volunteer_id) From c473eab58f408f24f05ebd5867c02fe06aa37ce0 Mon Sep 17 00:00:00 2001 From: vatsala Date: Mon, 30 May 2016 00:22:58 +0530 Subject: [PATCH 7/8] Updating tests for shifts --- vms/shift/tests/test_manageVolunteerShift.py | 124 ++++--------------- vms/shift/tests/test_shiftHours.py | 44 +++---- vms/shift/tests/test_viewVolunteerShift.py | 60 ++++----- 3 files changed, 78 insertions(+), 150 deletions(-) diff --git a/vms/shift/tests/test_manageVolunteerShift.py b/vms/shift/tests/test_manageVolunteerShift.py index a6b6a31..377d420 100644 --- a/vms/shift/tests/test_manageVolunteerShift.py +++ b/vms/shift/tests/test_manageVolunteerShift.py @@ -57,7 +57,7 @@ def setUp(self): Organization.objects.create( name = 'DummyOrg') - self.homepage = '/home/' + self.homepage = '/' self.authentication_page = '/authentication/login/' self.shift_page = '/shift/volunteer_search/' self.volunteer_registration_page = '/registration/signup_volunteer/' @@ -112,14 +112,14 @@ def register_test_dataset(self): self.register_volunteer(credentials) credentials = ['volunteer-two', 'volunteer-password', - 'volunteer-two', 'volunteer-two', 'volunteer-email@systers.org', + 'volunteer-two', 'volunteer-two', 'volunteer-email2@systers.org', 'volunteer-two', 'volunteer-two', 'volunteer-two', 'volunteer-two', '9999999999', 'volunteer-two'] self.register_volunteer(credentials) def register_event_utility(self, event): - self.driver.find_element_by_link_text('Settings').click() + self.driver.find_element_by_link_text('Events').send_keys("\n") self.assertEqual(self.driver.current_url, self.live_server_url + self.settings_page) @@ -176,12 +176,12 @@ def register_shift_utility(self, shift): self.login_admin() # register event to create job - event = ['event-name', '05/20/2015', '05/20/2015'] + event = ['event-name', '05/20/2017', '05/20/2017'] self.register_event_utility(event) # create job to create shift - job = ['event-name', 'job name', 'job description', '05/20/2015', - '05/20/2015'] + job = ['event-name', 'job name', 'job description', '05/20/2017', + '05/20/2017'] self.register_job_utility(job) # create shift @@ -262,7 +262,7 @@ def test_events_page_with_no_events(self): self.driver.find_element_by_link_text('Assign Shift').click() self.assertEqual(self.driver.find_element_by_class_name('alert-info').text, - 'There are currently no events.') + 'There are no events.') def test_jobs_page_with_no_jobs(self): # register volunteers @@ -272,7 +272,7 @@ def test_jobs_page_with_no_jobs(self): self.login_admin() # create events - event = ['event-name', '05/20/2015', '05/20/2015'] + event = ['event-name', '05/20/2017', '05/20/2017'] self.register_event_utility(event) # open manage volunteer shift @@ -286,17 +286,8 @@ def test_jobs_page_with_no_jobs(self): self.driver.find_element_by_link_text('Assign Shift').click() - with self.assertRaises(NoSuchElementException): - self.driver.find_element_by_class_name('alert-info') - - self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]//a').click() - - # arrived on jobs page with no jobs - with self.assertRaises(NoSuchElementException): - self.driver.find_element_by_tag_name('table') self.assertEqual(self.driver.find_element_by_class_name( - 'alert-info').text, 'There are currently no jobs for event-name.') + 'alert-info').text,'There are no events.') def test_assign_shifts_with_no_shifts(self): # register volunteers @@ -306,12 +297,12 @@ def test_assign_shifts_with_no_shifts(self): self.login_admin() # create events - event = ['event-name', '05/20/2015', '05/20/2015'] + event = ['event-name', '05/20/2017', '05/20/2017'] self.register_event_utility(event) # create jobs - job = ['event-name', 'job name', 'job description', '05/20/2015', - '05/20/2015'] + job = ['event-name', 'job name', 'job description', '05/20/2017', + '05/20/2017'] self.register_job_utility(job) # open manage volunteer shift @@ -325,31 +316,16 @@ def test_assign_shifts_with_no_shifts(self): self.driver.find_element_by_link_text('Assign Shift').click() - # events shown in table - with self.assertRaises(NoSuchElementException): - self.driver.find_element_by_class_name('alert-info') - - self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]//a').click() - - # arrived on page2 with jobs - self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[1]').text, - 'job name') - self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]//a').click() - - # arrived on page3 with no shifts in job created + # no events shown in table self.assertEqual(self.driver.find_element_by_class_name( - 'alert-info').text, - 'There are currently no shifts for the job name job.') + 'alert-info').text,'There are no events.') def test_assign_shifts_with_registered_shifts(self): # register volunteers self.register_test_dataset() # create shift to assign - shift = ['06/20/2015', '09:00', '15:00', '1'] + shift = ['05/20/2017', '09:00', '15:00', '1'] self.register_shift_utility(shift) # open manage volunteer shift @@ -413,7 +389,7 @@ def test_assign_shifts_with_registered_shifts(self): 'job name') self.assertEqual(self.driver.find_element_by_xpath( '//table//tbody//tr[1]//td[2]').text, - 'June 20, 2015') + 'May 20, 2017') self.assertEqual(self.driver.find_element_by_xpath( '//table//tbody//tr[1]//td[3]').text, '9 a.m.') @@ -426,7 +402,7 @@ def test_slots_remaining_in_shift(self): self.register_test_dataset() # create shift to assign, with only 1 volunteer required - shift = ['06/20/2015', '09:00', '15:00', '1'] + shift = ['05/20/2017', '09:00', '15:00', '1'] self.register_shift_utility(shift) # open manage volunteer shift @@ -490,7 +466,7 @@ def test_slots_remaining_in_shift(self): 'job name') self.assertEqual(self.driver.find_element_by_xpath( '//table//tbody//tr[1]//td[2]').text, - 'June 20, 2015') + 'May 20, 2017') self.assertEqual(self.driver.find_element_by_xpath( '//table//tbody//tr[1]//td[3]').text, '9 a.m.') @@ -516,37 +492,16 @@ def test_slots_remaining_in_shift(self): self.driver.find_element_by_link_text('Assign Shift').click() - # events shown in table - with self.assertRaises(NoSuchElementException): - self.driver.find_element_by_class_name('alert-info') - self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]').text, - 'View Jobs') - self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]//a').click() - - # arrived on jobs page - self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]').text, - 'View Shifts') - self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]//a').click() - - # arrived on shifts page, but shift not shown since slots are already - # filled. - self.assertEqual(self.driver.find_element_by_class_name( - 'alert-info').text, - 'There are currently no shifts for the job name job.') - # no unassigned shifts left for this job - with self.assertRaises(NoSuchElementException): - self.driver.find_element_by_class_name('table') - + #no events shown in table + self.assertEqual(self.driver.find_element_by_class_name('alert-info').text, + 'There are no events.') + def test_cancel_assigned_shift(self): # register volunteers self.register_test_dataset() # create shift to assign - shift = ['06/20/2015', '09:00', '15:00', '1'] + shift = ['05/20/2017', '09:00', '15:00', '1'] self.register_shift_utility(shift) # open manage volunteer shift @@ -612,7 +567,7 @@ def test_cancel_assigned_shift(self): 'job name') self.assertEqual(self.driver.find_element_by_xpath( '//table//tbody//tr[1]//td[2]').text, - 'June 20, 2015') + 'May 20, 2017') self.assertEqual(self.driver.find_element_by_xpath( '//table//tbody//tr[1]//td[3]').text, '9 a.m.') @@ -660,7 +615,7 @@ def test_assign_same_shift_to_volunteer_twice(self): self.register_test_dataset() # create shift to assign, with slots = 2 - shift = ['06/20/2015', '09:00', '15:00', '2'] + shift = ['05/20/2017', '09:00', '15:00', '2'] self.register_shift_utility(shift) # open manage volunteer shift @@ -716,33 +671,6 @@ def test_assign_same_shift_to_volunteer_twice(self): self.driver.find_element_by_link_text('Assign Shift').click() # events page - with self.assertRaises(NoSuchElementException): - self.driver.find_element_by_class_name('alert-info') - self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]').text, - 'View Jobs') - self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]//a').click() - - # arrived on jobs page - self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]').text, - 'View Shifts') - self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]//a').click() + self.assertEqual(self.driver.find_element_by_class_name('alert-info').text, 'There are no events.') - # arrived on shifts page, assign shift to volunteer one - self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]').text, - 'Assign Shift') - self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]//a').click() - - # confirm on shift assignment to volunteer-one - self.driver.find_element_by_xpath('//form[1]').submit() - - # check error on assigning same shift to volunteer-one - self.assertEqual(self.driver.find_element_by_class_name( - 'alert-danger').text, - 'Error\n\nThis user is already signed up for this shift. Please assign a different shift.') diff --git a/vms/shift/tests/test_shiftHours.py b/vms/shift/tests/test_shiftHours.py index 835c45e..cd51ee7 100644 --- a/vms/shift/tests/test_shiftHours.py +++ b/vms/shift/tests/test_shiftHours.py @@ -19,8 +19,7 @@ class ShiftHours(LiveServerTestCase): def setUp(self): volunteer_user = User.objects.create_user( username = 'volunteer', - password = 'volunteer', - email = 'volunteer@volunteer.com') + password = 'volunteer') volunteer = Volunteer.objects.create( user = volunteer_user, @@ -29,6 +28,7 @@ def setUp(self): state = 'state', country = 'country', phone_number = '9999999999', + email = 'volunteer@volunteer.com', unlisted_organization = 'organization') # create an org prior to registration. Bug in Code @@ -36,7 +36,7 @@ def setUp(self): Organization.objects.create( name = 'DummyOrg') - self.homepage = '/home/' + self.homepage = '/' self.authentication_page = '/authentication/login/' self.driver = webdriver.Firefox() self.driver.implicitly_wait(5) @@ -53,9 +53,9 @@ def login(self, credentials): self.driver.find_element_by_id('id_password').send_keys(credentials['password']) self.driver.find_element_by_xpath('//form[1]').submit() - def test_view_without_any_unlogged_shift(self): + def test_view_with_unlogged_shift(self): self.login({'username' : 'volunteer', 'password' : 'volunteer'}) - self.driver.find_element_by_link_text('Shift Hours').click() + self.driver.find_element_by_link_text('Completed Shifts').click() volunteer_id = Volunteer.objects.get(user__username = 'volunteer').pk self.assertEqual(self.driver.current_url, self.live_server_url + @@ -70,17 +70,17 @@ def register_dataset(self, ): # create shift and log hours event = Event.objects.create( name = 'event', - start_date = '2015-06-15', - end_date = '2015-06-17') + start_date = '2017-06-15', + end_date = '2017-06-17') job = Job.objects.create( name = 'job', - start_date = '2015-06-15', - end_date = '2015-06-15', + start_date = '2017-06-15', + end_date = '2017-06-15', event = event) shift = Shift.objects.create( - date = '2015-06-15', + date = '2017-06-15', start_time = '09:00', end_time = '15:00', max_volunteers ='6', @@ -93,10 +93,10 @@ def register_dataset(self, ): start_time = '12:00', end_time = '13:00') - def test_view_with_unlogged_shift(self): + def test_view_with_logged_shift(self): self.register_dataset() self.login({'username' : 'volunteer', 'password' : 'volunteer'}) - self.driver.find_element_by_link_text('Shift Hours').click() + self.driver.find_element_by_link_text('Completed Shifts').click() volunteer_id = Volunteer.objects.get(user__username = 'volunteer').pk self.assertEqual(self.driver.current_url, self.live_server_url + @@ -105,7 +105,7 @@ def test_view_with_unlogged_shift(self): self.assertEqual(self.driver.find_element_by_xpath( '//table//tbody//tr[1]//td[1]').text, 'job') self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[2]').text, 'June 15, 2015') + '//table//tbody//tr[1]//td[2]').text, 'June 15, 2017') self.assertEqual(self.driver.find_element_by_xpath( '//table//tbody//tr[1]//td[3]').text, 'noon') self.assertEqual(self.driver.find_element_by_xpath( @@ -118,7 +118,7 @@ def test_view_with_unlogged_shift(self): def test_edit_hours(self): self.register_dataset() self.login({'username' : 'volunteer', 'password' : 'volunteer'}) - self.driver.find_element_by_link_text('Shift Hours').click() + self.driver.find_element_by_link_text('Completed Shifts').click() volunteer_id = Volunteer.objects.get(user__username = 'volunteer').pk self.assertEqual(self.driver.current_url, self.live_server_url + @@ -140,23 +140,23 @@ def test_edit_hours(self): '//input[@name = "start_time"]').clear() self.driver.find_element_by_xpath( '//input[@name = "start_time"]').send_keys( - '15:00') + '10:00') self.driver.find_element_by_xpath( '//input[@name = "end_time"]').clear() self.driver.find_element_by_xpath( '//input[@name = "end_time"]').send_keys( - '20:00') + '13:00') self.driver.find_element_by_xpath('//form[1]').submit() self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[3]').text, '3 p.m.') + '//table//tbody//tr[1]//td[3]').text, '10 a.m.') self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]').text, '8 p.m.') + '//table//tbody//tr[1]//td[4]').text, '1 p.m.') def test_end_hours_less_than_start_hours(self): self.register_dataset() self.login({'username' : 'volunteer', 'password' : 'volunteer'}) - self.driver.find_element_by_link_text('Shift Hours').click() + self.driver.find_element_by_link_text('Completed Shifts').click() volunteer_id = Volunteer.objects.get(user__username = 'volunteer').pk self.assertEqual(self.driver.current_url, self.live_server_url + @@ -178,13 +178,13 @@ def test_end_hours_less_than_start_hours(self): '//input[@name = "start_time"]').clear() self.driver.find_element_by_xpath( '//input[@name = "start_time"]').send_keys( - '20:00') + '14:00') self.driver.find_element_by_xpath( '//input[@name = "end_time"]').clear() self.driver.find_element_by_xpath( '//input[@name = "end_time"]').send_keys( - '15:00') + '12:00') self.driver.find_element_by_xpath('//form[1]').submit() try: @@ -195,7 +195,7 @@ def test_end_hours_less_than_start_hours(self): def test_cancel_hours(self): self.register_dataset() self.login({'username' : 'volunteer', 'password' : 'volunteer'}) - self.driver.find_element_by_link_text('Shift Hours').click() + self.driver.find_element_by_link_text('Completed Shifts').click() volunteer_id = Volunteer.objects.get(user__username = 'volunteer').pk self.assertEqual(self.driver.current_url, self.live_server_url + diff --git a/vms/shift/tests/test_viewVolunteerShift.py b/vms/shift/tests/test_viewVolunteerShift.py index 2c2f27d..603cb61 100644 --- a/vms/shift/tests/test_viewVolunteerShift.py +++ b/vms/shift/tests/test_viewVolunteerShift.py @@ -20,8 +20,7 @@ class ViewVolunteerShift(LiveServerTestCase): def setUp(self): volunteer_user = User.objects.create_user( username = 'volunteer', - password = 'volunteer', - email = 'volunteer@volunteer.com') + password = 'volunteer') volunteer = Volunteer.objects.create( user = volunteer_user, @@ -30,6 +29,7 @@ def setUp(self): state = 'state', country = 'country', phone_number = '9999999999', + email = 'volunteer@volunteer.com', unlisted_organization = 'organization') # create an org prior to registration. Bug in Code @@ -38,7 +38,7 @@ def setUp(self): Organization.objects.create( name = 'DummyOrg') - self.homepage = '/home/' + self.homepage = '/' self.authentication_page = '/authentication/login/' self.driver = webdriver.Firefox() self.driver.implicitly_wait(5) @@ -59,8 +59,7 @@ def test_access_another_existing_volunteer_view(self): ''' test_volunteer_user = User.objects.create_user( username = 'test_volunteer', - password = 'volunteer', - email = 'test_volunteer@volunteer.com') + password = 'volunteer') test_volunteer = Volunteer.objects.create( user = test_volunteer_user, @@ -69,6 +68,7 @@ def test_access_another_existing_volunteer_view(self): state = 'state', country = 'country', phone_number = '9999999999', + email = 'test_volunteer@volunteer.com', unlisted_organization = 'organization') test_volunteer_id = Volunteer.objects.get(user__username = 'test_volunteer').pk @@ -89,7 +89,7 @@ def test_access_another_nonexisting_volunteer_view(self): def test_view_without_any_assigned_shift(self): credentials = {'username' : 'volunteer', 'password' : 'volunteer'} self.login(credentials) - self.driver.find_element_by_link_text('Upcoming Shifts').click() + self.driver.find_element_by_link_text('Upcoming Shifts').send_keys("\n") self.assertEqual(self.driver.find_element_by_class_name( 'alert-info').text, 'You do not have any upcoming shifts.') @@ -130,52 +130,52 @@ def test_view_with_assigned_and_unlogged_shift(self): parameters = {'org' : 'org-one', 'event' : { 'name' : 'event-four', - 'start_date' : '2015-06-01', - 'end_date' : '2015-06-10'}, + 'start_date' : '2017-06-01', + 'end_date' : '2017-06-10'}, 'job' : { 'name' : 'jobOneInEventFour', - 'start_date' : '2015-06-01', - 'end_date' : '2015-06-01'}, + 'start_date' : '2017-06-01', + 'end_date' : '2017-06-01'}, 'shift' : { - 'date' : '2015-06-01', + 'date' : '2017-06-01', 'start_time' : '09:00', - 'end_time' : '10:00', + 'end_time' : '15:00', 'max_volunteers' : '10'}} self.register_dataset(parameters) credentials = {'username' : 'volunteer', 'password' : 'volunteer'} self.login(credentials) - self.driver.find_element_by_link_text('Upcoming Shifts').click() + self.driver.find_element_by_link_text('Upcoming Shifts').send_keys("\n") self.assertEqual(self.driver.find_element_by_xpath( '//table//tbody//tr[1]//td[1]').text, 'jobOneInEventFour') self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[2]').text, 'June 1, 2015') + '//table//tbody//tr[1]//td[2]').text, 'June 1, 2017') self.assertEqual(self.driver.find_element_by_xpath( '//table//tbody//tr[1]//td[3]').text, '9 a.m.') self.assertEqual(self.driver.find_element_by_xpath( - '//table//tbody//tr[1]//td[4]').text, '10 a.m.') + '//table//tbody//tr[1]//td[4]').text, '3 p.m.') def test_log_hours_and_logged_shift_does_not_appear_in_upcoming_shifts(self): parameters = {'org' : 'org-one', 'event' : { 'name' : 'event-four', - 'start_date' : '2015-06-01', - 'end_date' : '2015-06-10'}, + 'start_date' : '2017-06-01', + 'end_date' : '2017-06-10'}, 'job' : { 'name' : 'jobOneInEventFour', - 'start_date' : '2015-06-01', - 'end_date' : '2015-06-01'}, + 'start_date' : '2017-06-01', + 'end_date' : '2017-06-01'}, 'shift' : { - 'date' : '2015-06-01', + 'date' : '2017-06-01', 'start_time' : '09:00', - 'end_time' : '10:00', + 'end_time' : '15:00', 'max_volunteers' : '10'}} self.register_dataset(parameters) credentials = {'username' : 'volunteer', 'password' : 'volunteer'} self.login(credentials) - self.driver.find_element_by_link_text('Upcoming Shifts').click() + self.driver.find_element_by_link_text('Upcoming Shifts').send_keys("\n") self.assertEqual(self.driver.find_element_by_xpath( '//table//tbody//tr[1]//td[5]').text, 'Log Hours') @@ -199,22 +199,22 @@ def test_cancel_shift_registration(self): parameters = {'org' : 'org-one', 'event' : { 'name' : 'event-four', - 'start_date' : '2015-06-01', - 'end_date' : '2015-06-10'}, + 'start_date' : '2017-06-01', + 'end_date' : '2017-06-10'}, 'job' : { 'name' : 'jobOneInEventFour', - 'start_date' : '2015-06-01', - 'end_date' : '2015-06-01'}, + 'start_date' : '2017-06-01', + 'end_date' : '2017-06-01'}, 'shift' : { - 'date' : '2015-06-01', + 'date' : '2017-06-01', 'start_time' : '09:00', - 'end_time' : '10:00', + 'end_time' : '14:00', 'max_volunteers' : '10'}} self.register_dataset(parameters) credentials = {'username' : 'volunteer', 'password' : 'volunteer'} self.login(credentials) - self.driver.find_element_by_link_text('Upcoming Shifts').click() + self.driver.find_element_by_link_text('Upcoming Shifts').send_keys("\n") self.assertEqual(self.driver.find_element_by_xpath( '//table//tbody//tr[1]//td[6]').text, 'Cancel Shift Registration') @@ -223,7 +223,7 @@ def test_cancel_shift_registration(self): self.assertEqual(self.driver.find_element_by_class_name( 'panel-title').text, 'Cancel Shift Confirmation') - self.assertEqual(self.driver.find_element_by_tag_name('button').text, + self.assertEqual(self.driver.find_element_by_class_name('btn-danger').text, 'Yes, Cancel this Shift') self.driver.find_element_by_xpath('//form').submit() From d02d431f6eb3b23653c709b13d9ad8b73ba8385e Mon Sep 17 00:00:00 2001 From: vatsala Date: Mon, 30 May 2016 00:24:14 +0530 Subject: [PATCH 8/8] Updating tests for volunteer app --- vms/volunteer/tests/test_searchVolunteer.py | 111 ++++++++++--------- vms/volunteer/tests/test_volunteerProfile.py | 2 +- vms/volunteer/tests/test_volunteerReport.py | 109 +++++++----------- 3 files changed, 100 insertions(+), 122 deletions(-) diff --git a/vms/volunteer/tests/test_searchVolunteer.py b/vms/volunteer/tests/test_searchVolunteer.py index 57319b9..b05e7e9 100644 --- a/vms/volunteer/tests/test_searchVolunteer.py +++ b/vms/volunteer/tests/test_searchVolunteer.py @@ -44,7 +44,7 @@ def setUp(self): Organization.objects.create( name = 'DummyOrg') - self.homepage = '/home/' + self.homepage = '/' self.registration_page = '/registration/signup_volunteer/' self.authentication_page = '/authentication/login/' self.driver = webdriver.Firefox() @@ -114,19 +114,20 @@ def test_volunteer_first_name_field(self): credentials = ['volunteer-usernameq', 'volunteer-passwordq', 'volunteer-first-name', 'volunteer-last-nameq', - 'volunteer-email@systers.orgq', 'volunteer-addressq', + 'volunteer-email2@systers.orgq', 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', 'volunteer-countryq', '9999999999', 'volunteer-organizationq'] self.register_volunteer(credentials) self.login_admin() - self.driver.find_element_by_link_text('Volunteer Search').click() + #self.driver.find_element_by_link_text('Volunteer Search').click() + self.driver.get(self.live_server_url + '/volunteer/search/') self.assertEqual(self.driver.current_url, self.live_server_url + '/volunteer/search/') self.driver.find_element_by_css_selector(".form-control[name='first_name']").send_keys('volunteer') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() search_results = self.driver.find_element_by_xpath('//table//tbody') @@ -140,7 +141,7 @@ def test_volunteer_first_name_field(self): expected_result = ['volunteer-first-name', 'volunteer-last-nameq', 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', 'volunteer-countryq', 'volunteer-organizationq', '9999999999', - 'volunteer-email@systers.orgq'] + 'volunteer-email2@systers.orgq'] self.assertTrue(expected_result in result) @@ -153,14 +154,14 @@ def test_volunteer_first_name_field(self): self.driver.find_element_by_css_selector(".form-control[name='first_name']").clear() self.driver.find_element_by_css_selector(".form-control[name='first_name']").send_keys('e') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() self.assertEqual(len(result), 2) expected_result = ['volunteer-first-name', 'volunteer-last-nameq', 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', 'volunteer-countryq', 'volunteer-organizationq', '9999999999', - 'volunteer-email@systers.orgq'] + 'volunteer-email2@systers.orgq'] self.assertTrue(expected_result in result) @@ -173,21 +174,21 @@ def test_volunteer_first_name_field(self): self.driver.find_element_by_css_selector(".form-control[name='first_name']").clear() self.driver.find_element_by_css_selector(".form-control[name='first_name']").send_keys('vol-') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() with self.assertRaises(NoSuchElementException): search_results = self.driver.find_element_by_xpath('//table//tbody') self.driver.find_element_by_css_selector(".form-control[name='first_name']").clear() self.driver.find_element_by_css_selector(".form-control[name='first_name']").send_keys('volunteer-fail-test') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() with self.assertRaises(NoSuchElementException): search_results = self.driver.find_element_by_xpath('//table//tbody') self.driver.find_element_by_css_selector(".form-control[name='first_name']").clear() self.driver.find_element_by_css_selector(".form-control[name='first_name']").send_keys('!@#$%^&*()_') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() self.assertNotEqual(self.driver.find_element_by_class_name('help-block'), None) @@ -202,7 +203,7 @@ def test_volunteer_last_name_field(self): credentials = ['volunteer-usernameq', 'volunteer-passwordq', 'volunteer-first-nameq', 'volunteer-last-name', - 'volunteer-email@systers.orgq', 'volunteer-addressq', + 'volunteer-email2@systers.orgq', 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', 'volunteer-countryq', '9999999999', 'volunteer-organizationq'] @@ -215,7 +216,7 @@ def test_volunteer_last_name_field(self): self.driver.find_element_by_css_selector(".form-control[name='last_name']").clear() self.driver.find_element_by_css_selector(".form-control[name='last_name']").send_keys('volunteer') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() search_results = self.driver.find_element_by_xpath('//table//tbody') @@ -227,7 +228,7 @@ def test_volunteer_last_name_field(self): expected_result = ['volunteer-first-nameq', 'volunteer-last-name', 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', 'volunteer-countryq', 'volunteer-organizationq', '9999999999', - 'volunteer-email@systers.orgq'] + 'volunteer-email2@systers.orgq'] self.assertTrue(expected_result in result) @@ -240,14 +241,14 @@ def test_volunteer_last_name_field(self): self.driver.find_element_by_css_selector(".form-control[name='last_name']").clear() self.driver.find_element_by_css_selector(".form-control[name='last_name']").send_keys('v') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() self.assertEqual(len(result), 2) expected_result = ['volunteer-first-nameq', 'volunteer-last-name', 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', 'volunteer-countryq', 'volunteer-organizationq', '9999999999', - 'volunteer-email@systers.orgq'] + 'volunteer-email2@systers.orgq'] self.assertTrue(expected_result in result) @@ -260,21 +261,21 @@ def test_volunteer_last_name_field(self): self.driver.find_element_by_css_selector(".form-control[name='last_name']").clear() self.driver.find_element_by_css_selector(".form-control[name='last_name']").send_keys('vol-') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() with self.assertRaises(NoSuchElementException): search_results = self.driver.find_element_by_xpath('//table//tbody') self.driver.find_element_by_css_selector(".form-control[name='last_name']").clear() self.driver.find_element_by_css_selector(".form-control[name='last_name']").send_keys('volunteer-fail-test') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() with self.assertRaises(NoSuchElementException): search_results = self.driver.find_element_by_xpath('//table//tbody') self.driver.find_element_by_css_selector(".form-control[name='last_name']").clear() self.driver.find_element_by_css_selector(".form-control[name='last_name']").send_keys('!@#$%^&*()_') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() self.assertNotEqual(self.driver.find_element_by_class_name('help-block'), None) @@ -289,7 +290,7 @@ def test_volunteer_city_field(self): credentials = ['volunteer-usernameq', 'volunteer-passwordq', 'volunteer-first-nameq', 'volunteer-last-nameq', - 'volunteer-email@systers.orgq', 'volunteer-addressq', + 'volunteer-email2@systers.orgq', 'volunteer-addressq', 'volunteer-city', 'volunteer-stateq', 'volunteer-countryq', '9999999999', 'volunteer-organizationq'] @@ -302,7 +303,7 @@ def test_volunteer_city_field(self): self.driver.find_element_by_css_selector(".form-control[name='city']").clear() self.driver.find_element_by_css_selector(".form-control[name='city']").send_keys('volunteer') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() search_results = self.driver.find_element_by_xpath('//table//tbody') @@ -314,7 +315,7 @@ def test_volunteer_city_field(self): expected_result = ['volunteer-first-nameq', 'volunteer-last-nameq', 'volunteer-addressq', 'volunteer-city', 'volunteer-stateq', 'volunteer-countryq', 'volunteer-organizationq', '9999999999', - 'volunteer-email@systers.orgq'] + 'volunteer-email2@systers.orgq'] self.assertTrue(expected_result in result) @@ -327,14 +328,14 @@ def test_volunteer_city_field(self): self.driver.find_element_by_css_selector(".form-control[name='city']").clear() self.driver.find_element_by_css_selector(".form-control[name='city']").send_keys('v') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() self.assertEqual(len(result), 2) expected_result = ['volunteer-first-nameq', 'volunteer-last-nameq', 'volunteer-addressq', 'volunteer-city', 'volunteer-stateq', 'volunteer-countryq', 'volunteer-organizationq', '9999999999', - 'volunteer-email@systers.orgq'] + 'volunteer-email2@systers.orgq'] self.assertTrue(expected_result in result) @@ -347,21 +348,21 @@ def test_volunteer_city_field(self): self.driver.find_element_by_css_selector(".form-control[name='city']").clear() self.driver.find_element_by_css_selector(".form-control[name='city']").send_keys('vol-') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() with self.assertRaises(NoSuchElementException): search_results = self.driver.find_element_by_xpath('//table//tbody') self.driver.find_element_by_css_selector(".form-control[name='city']").clear() self.driver.find_element_by_css_selector(".form-control[name='city']").send_keys('volunteer-fail-test') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() with self.assertRaises(NoSuchElementException): search_results = self.driver.find_element_by_xpath('//table//tbody') self.driver.find_element_by_css_selector(".form-control[name='city']").clear() self.driver.find_element_by_css_selector(".form-control[name='city']").send_keys('!@#$%^&*()_') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() self.assertNotEqual(self.driver.find_element_by_class_name('help-block'), None) @@ -376,7 +377,7 @@ def test_volunteer_state_field(self): credentials = ['volunteer-usernameq', 'volunteer-passwordq', 'volunteer-first-nameq', 'volunteer-last-nameq', - 'volunteer-email@systers.orgq', 'volunteer-addressq', + 'volunteer-email2@systers.orgq', 'volunteer-addressq', 'volunteer-cityq', 'volunteer-state', 'volunteer-countryq', '9999999999', 'volunteer-organizationq'] @@ -389,7 +390,7 @@ def test_volunteer_state_field(self): self.driver.find_element_by_css_selector(".form-control[name='state']").clear() self.driver.find_element_by_css_selector(".form-control[name='state']").send_keys('volunteer') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() search_results = self.driver.find_element_by_xpath('//table//tbody') @@ -401,7 +402,7 @@ def test_volunteer_state_field(self): expected_result = ['volunteer-first-nameq', 'volunteer-last-nameq', 'volunteer-addressq', 'volunteer-cityq', 'volunteer-state', 'volunteer-countryq', 'volunteer-organizationq', '9999999999', - 'volunteer-email@systers.orgq'] + 'volunteer-email2@systers.orgq'] self.assertTrue(expected_result in result) @@ -414,14 +415,14 @@ def test_volunteer_state_field(self): self.driver.find_element_by_css_selector(".form-control[name='state']").clear() self.driver.find_element_by_css_selector(".form-control[name='state']").send_keys('v') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() self.assertEqual(len(result), 2) expected_result = ['volunteer-first-nameq', 'volunteer-last-nameq', 'volunteer-addressq', 'volunteer-cityq', 'volunteer-state', 'volunteer-countryq', 'volunteer-organizationq', '9999999999', - 'volunteer-email@systers.orgq'] + 'volunteer-email2@systers.orgq'] self.assertTrue(expected_result in result) @@ -434,21 +435,21 @@ def test_volunteer_state_field(self): self.driver.find_element_by_css_selector(".form-control[name='state']").clear() self.driver.find_element_by_css_selector(".form-control[name='state']").send_keys('vol-') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() with self.assertRaises(NoSuchElementException): search_results = self.driver.find_element_by_xpath('//table//tbody') self.driver.find_element_by_css_selector(".form-control[name='state']").clear() self.driver.find_element_by_css_selector(".form-control[name='state']").send_keys('volunteer-fail-test') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() with self.assertRaises(NoSuchElementException): search_results = self.driver.find_element_by_xpath('//table//tbody') self.driver.find_element_by_css_selector(".form-control[name='state']").clear() self.driver.find_element_by_css_selector(".form-control[name='state']").send_keys('!@#$%^&*()_') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() self.assertNotEqual(self.driver.find_element_by_class_name('help-block'), None) @@ -463,7 +464,7 @@ def test_volunteer_country_field(self): credentials = ['volunteer-usernameq', 'volunteer-passwordq', 'volunteer-first-nameq', 'volunteer-last-nameq', - 'volunteer-email@systers.orgq', 'volunteer-addressq', + 'volunteer-email2@systers.orgq', 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', 'volunteer-country', '9999999999', 'volunteer-organizationq'] @@ -476,7 +477,7 @@ def test_volunteer_country_field(self): self.driver.find_element_by_css_selector(".form-control[name='country']").clear() self.driver.find_element_by_css_selector(".form-control[name='country']").send_keys('volunteer') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() search_results = self.driver.find_element_by_xpath('//table//tbody') @@ -488,7 +489,7 @@ def test_volunteer_country_field(self): expected_result = ['volunteer-first-nameq', 'volunteer-last-nameq', 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', 'volunteer-country', 'volunteer-organizationq', '9999999999', - 'volunteer-email@systers.orgq'] + 'volunteer-email2@systers.orgq'] self.assertTrue(expected_result in result) @@ -501,14 +502,14 @@ def test_volunteer_country_field(self): self.driver.find_element_by_css_selector(".form-control[name='country']").clear() self.driver.find_element_by_css_selector(".form-control[name='country']").send_keys('v') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() self.assertEqual(len(result), 2) expected_result = ['volunteer-first-nameq', 'volunteer-last-nameq', 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', 'volunteer-country', 'volunteer-organizationq', '9999999999', - 'volunteer-email@systers.orgq'] + 'volunteer-email2@systers.orgq'] self.assertTrue(expected_result in result) @@ -521,21 +522,21 @@ def test_volunteer_country_field(self): self.driver.find_element_by_css_selector(".form-control[name='country']").clear() self.driver.find_element_by_css_selector(".form-control[name='country']").send_keys('vol-') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() with self.assertRaises(NoSuchElementException): search_results = self.driver.find_element_by_xpath('//table//tbody') self.driver.find_element_by_css_selector(".form-control[name='country']").clear() self.driver.find_element_by_css_selector(".form-control[name='country']").send_keys('volunteer-fail-test') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() with self.assertRaises(NoSuchElementException): search_results = self.driver.find_element_by_xpath('//table//tbody') self.driver.find_element_by_css_selector(".form-control[name='country']").clear() self.driver.find_element_by_css_selector(".form-control[name='country']").send_keys('!@#$%^&*()_') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() self.assertNotEqual(self.driver.find_element_by_class_name('help-block'), None) @@ -550,7 +551,7 @@ def test_volunteer_organization_field(self): credentials = ['volunteer-usernameq', 'volunteer-passwordq', 'volunteer-first-nameq', 'volunteer-last-nameq', - 'volunteer-email@systers.orgq', 'volunteer-addressq', + 'volunteer-email2@systers.orgq', 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', 'volunteer-countryq', '9999999999', 'volunteer-organization'] @@ -563,7 +564,7 @@ def test_volunteer_organization_field(self): self.driver.find_element_by_css_selector(".form-control[name='organization']").clear() self.driver.find_element_by_css_selector(".form-control[name='organization']").send_keys('volunteer') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() search_results = self.driver.find_element_by_xpath('//table//tbody') @@ -575,7 +576,7 @@ def test_volunteer_organization_field(self): expected_result = ['volunteer-first-nameq', 'volunteer-last-nameq', 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', 'volunteer-countryq', 'volunteer-organization', '9999999999', - 'volunteer-email@systers.orgq'] + 'volunteer-email2@systers.orgq'] self.assertTrue(expected_result in result) @@ -588,14 +589,14 @@ def test_volunteer_organization_field(self): self.driver.find_element_by_css_selector(".form-control[name='organization']").clear() self.driver.find_element_by_css_selector(".form-control[name='organization']").send_keys('v') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() self.assertEqual(len(result), 2) expected_result = ['volunteer-first-nameq', 'volunteer-last-nameq', 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', 'volunteer-countryq', 'volunteer-organization', '9999999999', - 'volunteer-email@systers.orgq'] + 'volunteer-email2@systers.orgq'] self.assertTrue(expected_result in result) @@ -608,21 +609,21 @@ def test_volunteer_organization_field(self): self.driver.find_element_by_css_selector(".form-control[name='organization']").clear() self.driver.find_element_by_css_selector(".form-control[name='organization']").send_keys('vol-') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() with self.assertRaises(NoSuchElementException): search_results = self.driver.find_element_by_xpath('//table//tbody') self.driver.find_element_by_css_selector(".form-control[name='organization']").clear() self.driver.find_element_by_css_selector(".form-control[name='organization']").send_keys('volunteer-fail-test') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() with self.assertRaises(NoSuchElementException): search_results = self.driver.find_element_by_xpath('//table//tbody') self.driver.find_element_by_css_selector(".form-control[name='organization']").clear() self.driver.find_element_by_css_selector(".form-control[name='organization']").send_keys('!@#$%^&*()_') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() self.assertNotEqual(self.driver.find_element_by_class_name('help-block'), None) @@ -637,7 +638,7 @@ def test_intersection_of_all_fields(self): credentials = ['volunteer-usernameq', 'volunteer-passwordq', 'volunteer-first-nameq', 'volunteer-last-nameq', - 'volunteer-email@systers.orgq', 'volunteer-addressq', + 'volunteer-email2@systers.orgq', 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', 'volunteer-countryq', '9999999999', 'volunteer-organization'] @@ -660,7 +661,7 @@ def test_intersection_of_all_fields(self): self.driver.find_element_by_css_selector(".form-control[name='country']").send_keys('volunteer') self.driver.find_element_by_css_selector(".form-control[name='organization']").clear() self.driver.find_element_by_css_selector(".form-control[name='organization']").send_keys('volunteer') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() search_results = self.driver.find_element_by_xpath('//table//tbody') @@ -672,7 +673,7 @@ def test_intersection_of_all_fields(self): expected_result = ['volunteer-first-nameq', 'volunteer-last-nameq', 'volunteer-addressq', 'volunteer-cityq', 'volunteer-stateq', 'volunteer-countryq', 'volunteer-organization', '9999999999', - 'volunteer-email@systers.orgq'] + 'volunteer-email2@systers.orgq'] self.assertTrue(expected_result in result) @@ -689,7 +690,7 @@ def test_intersection_of_all_fields(self): self.driver.find_element_by_css_selector(".form-control[name='country']").send_keys('wrong-country') self.driver.find_element_by_css_selector(".form-control[name='organization']").clear() self.driver.find_element_by_css_selector(".form-control[name='organization']").send_keys('org') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() with self.assertRaises(NoSuchElementException): search_results = self.driver.find_element_by_xpath('//table//tbody') @@ -698,7 +699,7 @@ def test_intersection_of_all_fields(self): self.driver.find_element_by_css_selector(".form-control[name='last_name']").send_keys('volunteer') self.driver.find_element_by_css_selector(".form-control[name='city']").clear() self.driver.find_element_by_css_selector(".form-control[name='city']").send_keys('wrong-city') - self.driver.find_element_by_tag_name('button').click() + self.driver.find_element_by_class_name('btn').click() with self.assertRaises(NoSuchElementException): search_results = self.driver.find_element_by_xpath('//table//tbody') diff --git a/vms/volunteer/tests/test_volunteerProfile.py b/vms/volunteer/tests/test_volunteerProfile.py index 94b2b93..9fea519 100644 --- a/vms/volunteer/tests/test_volunteerProfile.py +++ b/vms/volunteer/tests/test_volunteerProfile.py @@ -38,7 +38,7 @@ def setUp(self): Organization.objects.create( name = 'DummyOrg') - self.homepage = '/home/' + self.homepage = '/' self.authentication_page = '/authentication/login/' self.driver = webdriver.Firefox() self.driver.maximize_window() diff --git a/vms/volunteer/tests/test_volunteerReport.py b/vms/volunteer/tests/test_volunteerReport.py index d359687..f831b26 100644 --- a/vms/volunteer/tests/test_volunteerReport.py +++ b/vms/volunteer/tests/test_volunteerReport.py @@ -5,6 +5,7 @@ from selenium import webdriver from selenium.common.exceptions import NoSuchElementException +from selenium.webdriver.support.ui import Select from volunteer.models import Volunteer from organization.models import Organization #hack to pass travis,Bug in Code @@ -36,7 +37,7 @@ def setUp(self): Organization.objects.create( name = 'DummyOrg') - self.homepage = '/home/' + self.homepage = '/' self.registration_page = '/registration/signup_volunteer/' self.authentication_page = '/authentication/login/' self.driver = webdriver.Firefox() @@ -60,13 +61,13 @@ def login(self, credentials): def register_event_utility(self): Event.objects.create( name = 'event', - start_date = '2015-06-15', - end_date = '2015-06-15') + start_date = '2015-06-11', + end_date = '2015-06-25') def register_job_utility(self): Job.objects.create( name = 'job', - start_date = '2015-06-12', + start_date = '2015-06-15', end_date = '2015-06-18', event = Event.objects.get(name = 'event')) @@ -87,7 +88,7 @@ def log_hours_utility(self): def test_report_without_any_created_shifts(self): self.login({ 'username' : 'volunteer', 'password' : 'volunteer'}) - self.driver.find_element_by_link_text('Report').click() + self.driver.find_element_by_link_text('Report').send_keys("\n") self.driver.find_element_by_xpath('//form').submit() self.assertEqual(self.driver.find_element_by_class_name( 'alert-danger').text, 'Your criteria did not return any results.') @@ -99,7 +100,7 @@ def test_report_with_empty_fields(self): self.log_hours_utility() self.login({ 'username' : 'volunteer', 'password' : 'volunteer'}) - self.driver.find_element_by_link_text('Report').click() + self.driver.find_element_by_link_text('Report').send_keys("\n") self.driver.find_element_by_xpath('//form').submit() total_no_of_shifts = self.driver.find_element_by_xpath( @@ -117,7 +118,7 @@ def test_only_logged_shifts_appear_in_report(self): self.register_shift_utility() self.login({ 'username' : 'volunteer', 'password' : 'volunteer'}) - self.driver.find_element_by_link_text('Report').click() + self.driver.find_element_by_link_text('Report').send_keys("\n") self.driver.find_element_by_xpath('//form').submit() self.assertEqual(self.driver.find_element_by_class_name( 'alert-danger').text, 'Your criteria did not return any results.') @@ -129,9 +130,11 @@ def test_date_field(self): self.log_hours_utility() self.login({ 'username' : 'volunteer', 'password' : 'volunteer'}) - self.driver.find_element_by_link_text('Report').click() + self.driver.find_element_by_link_text('Report').send_keys("\n") self.driver.find_element_by_xpath( - '//input[@name = "date"]').send_keys('2015-06-15') + '//input[@name = "start_date"]').send_keys('2015-06-11') + self.driver.find_element_by_xpath( + '//input[@name = "end_date"]').send_keys('2015-07-30') self.driver.find_element_by_xpath('//form').submit() total_no_of_shifts = self.driver.find_element_by_xpath( @@ -145,9 +148,13 @@ def test_date_field(self): #incorrect date self.driver.find_element_by_xpath( - '//input[@name = "date"]').clear() + '//input[@name = "start_date"]').clear() + self.driver.find_element_by_xpath( + '//input[@name = "end_date"]').clear() self.driver.find_element_by_xpath( - '//input[@name = "date"]').send_keys('2015-07-15') + '//input[@name = "start_date"]').send_keys('2015-05-10') + self.driver.find_element_by_xpath( + '//input[@name = "end_date"]').send_keys('2015-06-01') self.driver.find_element_by_xpath('//form').submit() self.assertEqual(self.driver.find_element_by_class_name( 'alert-danger').text, 'Your criteria did not return any results.') @@ -159,9 +166,10 @@ def test_event_field(self): self.log_hours_utility() self.login({ 'username' : 'volunteer', 'password' : 'volunteer'}) - self.driver.find_element_by_link_text('Report').click() - self.driver.find_element_by_xpath( - '//input[@name = "event_name"]').send_keys('event') + self.driver.find_element_by_link_text('Report').send_keys("\n") + select = Select(self.driver.find_element_by_xpath('//select[@name = "event_name"]')) + select.select_by_visible_text('event') + self.driver.find_element_by_xpath('//form').submit() total_no_of_shifts = self.driver.find_element_by_xpath( @@ -173,24 +181,6 @@ def test_event_field(self): self.assertEqual(total_no_of_shifts, '1') self.assertEqual(total_no_of_hours, '3.0') - #incorrect event - self.driver.find_element_by_xpath( - '//input[@name = "event_name"]').clear() - self.driver.find_element_by_xpath( - '//input[@name = "event_name"]').send_keys('wrong-event') - self.driver.find_element_by_xpath('//form').submit() - self.assertEqual(self.driver.find_element_by_class_name( - 'alert-danger').text, 'Your criteria did not return any results.') - - #incorrect event format, should raise enter a valid value error - self.driver.find_element_by_xpath( - '//input[@name = "event_name"]').clear() - self.driver.find_element_by_xpath( - '//input[@name = "event_name"]').send_keys('!@#$') - self.driver.find_element_by_xpath('//form').submit() - self.assertEqual(self.driver.find_element_by_xpath( - 'html/body/div[2]/div[3]/form/fieldset/div[1]/div/p/strong').text, 'Enter a valid value.') - def test_job_field(self): self.register_event_utility() self.register_job_utility() @@ -198,9 +188,9 @@ def test_job_field(self): self.log_hours_utility() self.login({ 'username' : 'volunteer', 'password' : 'volunteer'}) - self.driver.find_element_by_link_text('Report').click() - self.driver.find_element_by_xpath( - '//input[@name = "job_name"]').send_keys('job') + self.driver.find_element_by_link_text('Report').send_keys("\n") + select = Select(self.driver.find_element_by_xpath('//select[@name = "job_name"]')) + select.select_by_visible_text('job') self.driver.find_element_by_xpath('//form').submit() total_no_of_shifts = self.driver.find_element_by_xpath( @@ -212,25 +202,6 @@ def test_job_field(self): self.assertEqual(total_no_of_shifts, '1') self.assertEqual(total_no_of_hours, '3.0') - #incorrect job - self.driver.find_element_by_xpath( - '//input[@name = "job_name"]').clear() - self.driver.find_element_by_xpath( - '//input[@name = "job_name"]').send_keys('wrongjob') - self.driver.find_element_by_xpath('//form').submit() - self.assertEqual(self.driver.find_element_by_class_name( - 'alert-danger').text, 'Your criteria did not return any results.') - - #incorrect job format, should raise enter a valid value error - self.driver.find_element_by_xpath( - '//input[@name = "job_name"]').clear() - self.driver.find_element_by_xpath( - '//input[@name = "job_name"]').send_keys('wrong-job') - self.driver.find_element_by_xpath('//form').submit() - self.assertEqual(self.driver.find_element_by_xpath( - 'html/body/div[2]/div[3]/form/fieldset/div[2]/div/p/strong').text, 'Enter a valid value.') - - def test_intersection_of_fields(self): self.register_event_utility() self.register_job_utility() @@ -238,13 +209,19 @@ def test_intersection_of_fields(self): self.log_hours_utility() self.login({ 'username' : 'volunteer', 'password' : 'volunteer'}) - self.driver.find_element_by_link_text('Report').click() + self.driver.find_element_by_link_text('Report').send_keys("\n") + select1 = Select(self.driver.find_element_by_xpath('//select[@name = "event_name"]')) + select1.select_by_visible_text('event') + select2 = Select(self.driver.find_element_by_xpath('//select[@name = "job_name"]')) + select2.select_by_visible_text('job') + self.driver.find_element_by_xpath( + '//input[@name = "start_date"]').clear() self.driver.find_element_by_xpath( - '//input[@name = "event_name"]').send_keys('event') + '//input[@name = "end_date"]').clear() self.driver.find_element_by_xpath( - '//input[@name = "job_name"]').send_keys('job') + '//input[@name = "start_date"]').send_keys('2015-06-11') self.driver.find_element_by_xpath( - '//input[@name = "date"]').send_keys('2015-06-15') + '//input[@name = "end_date"]').send_keys('2015-07-30') self.driver.find_element_by_xpath('//form').submit() total_no_of_shifts = self.driver.find_element_by_xpath( @@ -257,18 +234,18 @@ def test_intersection_of_fields(self): self.assertEqual(total_no_of_hours, '3.0') # event, job correct and date incorrect + select1 = Select(self.driver.find_element_by_xpath('//select[@name = "event_name"]')) + select1.select_by_visible_text('event') + select2 = Select(self.driver.find_element_by_xpath('//select[@name = "job_name"]')) + select2.select_by_visible_text('job') self.driver.find_element_by_xpath( - '//input[@name = "event_name"]').clear() - self.driver.find_element_by_xpath( - '//input[@name = "event_name"]').send_keys('event') - self.driver.find_element_by_xpath( - '//input[@name = "job_name"]').clear() + '//input[@name = "start_date"]').clear() self.driver.find_element_by_xpath( - '//input[@name = "job_name"]').send_keys('job') + '//input[@name = "end_date"]').clear() self.driver.find_element_by_xpath( - '//input[@name = "date"]').clear() + '//input[@name = "start_date"]').send_keys('2015-05-10') self.driver.find_element_by_xpath( - '//input[@name = "date"]').send_keys('2015-08-15') + '//input[@name = "end_date"]').send_keys('2015-06-01') self.driver.find_element_by_xpath('//form').submit() self.assertEqual(self.driver.find_element_by_class_name(