From fdc2f98358b60d3d096260dde34ca71828504485 Mon Sep 17 00:00:00 2001 From: mahesh Date: Wed, 7 Jun 2017 18:47:35 +0530 Subject: Adds coverage and moves test scripts to a separate folder --- .coveragerc | 18 +++ .travis.yml | 7 +- requirements.txt | 1 + workshop_app/test_models.py | 189 ----------------------------- workshop_app/test_views.py | 245 -------------------------------------- workshop_app/tests/__init__.py | 0 workshop_app/tests/test_models.py | 189 +++++++++++++++++++++++++++++ workshop_app/tests/test_views.py | 244 +++++++++++++++++++++++++++++++++++++ 8 files changed, 458 insertions(+), 435 deletions(-) create mode 100644 .coveragerc delete mode 100644 workshop_app/test_models.py delete mode 100644 workshop_app/test_views.py create mode 100644 workshop_app/tests/__init__.py create mode 100644 workshop_app/tests/test_models.py create mode 100644 workshop_app/tests/test_views.py diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 0000000..d96c65a --- /dev/null +++ b/.coveragerc @@ -0,0 +1,18 @@ +[run] +branch = True +source = . +omit = + *tests* + *migrations* + *init* + local_settings.py + workshop_app/apps.py + workshop_portal/settings.py + workshop_portal/wsgi.py + + +[report] +exclude_lines = + except ImportError: + raise NotImplementedError + if __name__ == .__main__.: diff --git a/.travis.yml b/.travis.yml index 5d52997..1ffb76a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,4 +17,9 @@ install: script: - python manage.py makemigrations - python manage.py migrate - - python manage.py test + - coverage erase + - coverage run -p manage.py test -v2 + +after_success: + - coverage combine + - coverage report diff --git a/requirements.txt b/requirements.txt index 0c22f6b..d546151 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,3 +4,4 @@ packaging==16.8 python-dateutil==2.6.0 pytz==2016.10 six==1.10.0 +coverage diff --git a/workshop_app/test_models.py b/workshop_app/test_models.py deleted file mode 100644 index c9ac41c..0000000 --- a/workshop_app/test_models.py +++ /dev/null @@ -1,189 +0,0 @@ -from django.test import TestCase -from .models import ( - Profile, User, Workshop, WorkshopType, - RequestedWorkshop, BookedWorkshop, ProposeWorkshopDate - ) -from datetime import datetime - -# Setup for Model Test -def setUpModule(): - ''' - Sets up database - demo user as coordinator and test user as instructor - ''' - - demoUser1 = User.objects.create(username='demouser1', - email='test.user@gmail.com', password='pass@123') - demoUser2 = User.objects.create(username='demouser2', - email='test.user@gmail.com', password='pass@123') - - testUser1 = User.objects.create(username='testuser1', - email='test.user@gmail.com',password='pass@123') - - testUser2 = User.objects.create(username='testuser2', - email='test.user@gmail.com', password='pass@123') - - instructor_profile = Profile.objects.create(user=testUser2, position='instructor', - department='cs', institute='ace', phone_number='1122334456', - is_email_verified=1) - - coordinator_profile = Profile.objects.create(user=demoUser2, position='coordinator', - department='IT', institute='iit', phone_number='1122334456', - is_email_verified=1) - - workshoptype1 = WorkshopType.objects.create(workshoptype_name='ISCP', - workshoptype_description='Introduction to Scientific Computing in\ - Python
> Numpy
> Matplotlib
> iPython
', - workshoptype_duration='1day, 8hours a day') - - requested_workshop = RequestedWorkshop.objects.create( - requested_workshop_instructor=testUser2, - requested_workshop_coordinator=demoUser2, - requested_workshop_title=workshoptype1, - requested_workshop_date='2017-07-24' - ) - - propose_workshop = ProposeWorkshopDate.objects.create( - proposed_workshop_coordinator=demoUser2, - proposed_workshop_instructor=testUser2, - proposed_workshop_title=workshoptype1, - proposed_workshop_date='2017-07-06', - condition_one=1, - condition_two=1, - condition_three=1 - ) - - -def tearDownModule(): - User.objects.all().delete() - Profile.objects.all().delete() - ProposeWorkshopDate.objects.all().delete() - RequestedWorkshop.objects.all().delete() - WorkshopType.objects.all().delete() - -class ProfileModelTest(TestCase): - ''' - This class tests the Profile Model - ''' - def setUp(self): - ''' - setsup profile for instructor and coordinator - ''' - self.testuser1 = User.objects.get(username='testuser1') - self.demouser1 = User.objects.get(username='demouser1') - - self.instructor_profile1 = Profile.objects.create(user=self.testuser1, position='instructor', - department='cs', institute='ace', phone_number='1123323344558899192', - is_email_verified=1) - - self.coordinator_profile1 = Profile.objects.create(user=self.demouser1, position='coordinator', - department='IT', institute='iit', phone_number='112233', - is_email_verified=1) - - def test_profile_model(self): - self.assertEqual(self.demouser1.email,'test.user@gmail.com') - self.assertEqual(self.testuser1.email,'test.user@gmail.com') - self.assertEqual(self.instructor_profile1.position,'instructor') - self.assertEqual(self.coordinator_profile1.position,'coordinator') - - -class WorkshopTypeModelTest(TestCase): - ''' - This class tests the WorkshopType Model - ''' - - def setUp(self): - self.workshoptype1 = WorkshopType.objects.create(workshoptype_name='ISCP', - workshoptype_description='Introduction to Scientific Computing in\ - Python
> Numpy
> Matplotlib
> iPython
', - workshoptype_duration='1day, 8hours a day') - - self.workshoptype2 = WorkshopType.objects.create(workshoptype_name='Basic Python', - workshoptype_description='Basic Python
> DataTypes
\ - > Conditions
> Loops
> Functions' - ,workshoptype_duration='3days, 8hours a day') - - def test_workshoptype_model(self): - self.assertEqual(self.workshoptype2.workshoptype_duration,'3days, 8hours a day') - self.assertEqual(self.workshoptype1.workshoptype_name, 'ISCP') - - -class WorkshopModelTest(TestCase): - ''' - This class tests the Workshop Model - ''' - - def setUp(self): - self.testuser2 = User.objects.get(username='testuser2') - self.instructor_profile = Profile.objects.get(user=self.testuser2) - self.workshoptype = WorkshopType.objects.get(workshoptype_name='ISCP') - self.workshop = Workshop.objects.create(workshop_instructor=self.testuser2, - workshop_title=self.workshoptype, - recurrences='RRULE:FREQ=WEEKLY;UNTIL=20170629T183000Z;BYDAY=TH') - - def test_workshop_model(self): - self.assertEqual(self.workshop.workshop_title.workshoptype_name,'ISCP' ) - self.assertEqual(self.workshop.recurrences.rrules[0].__dict__['freq'],2) - - -class RequestedWorkshopModelTest(TestCase): - ''' - This class tests the RequestedWorkshop Model - ''' - - def setUp(self): - self.testuser2 = User.objects.get(username='testuser2') - self.demouser2 = User.objects.get(username='demouser2') - self.workshoptype = WorkshopType.objects.get(workshoptype_name='ISCP') - self.requestedworkshop = RequestedWorkshop.objects.create( - requested_workshop_instructor=self.testuser2, - requested_workshop_coordinator=self.demouser2, - requested_workshop_title=self.workshoptype, - requested_workshop_date='2017-05-24' - ) - - def test_requestedworkshop_model(self): - self.assertEqual(self.requestedworkshop.requested_workshop_date, '2017-05-24') - self.assertEqual(self.requestedworkshop.status, 'Pending') - - -class ProposedWorkshopDateModelTest(TestCase): - ''' - This class tests the ProposeWorkshopDate Model - ''' - - def setUp(self): - self.testuser2 = User.objects.get(username='testuser2') - self.demouser2 = User.objects.get(username='demouser2') - self.workshoptype = WorkshopType.objects.get(workshoptype_name='ISCP') - self.propose_workshop = ProposeWorkshopDate.objects.create( - proposed_workshop_coordinator=self.demouser2, - proposed_workshop_instructor=self.testuser2, - proposed_workshop_title=self.workshoptype, - proposed_workshop_date='2017-06-06', - condition_one=1, - condition_two=1, - condition_three=1 - ) - - def test_proposedworkshopdate_model(self): - self.assertEqual(self.propose_workshop.proposed_workshop_title.workshoptype_name,'ISCP') - self.assertEqual(self.propose_workshop.condition_three, 1) - self.assertEqual(self.propose_workshop.status, 'Pending') - -class BookedWorkshopModelTest(TestCase): - ''' - This class tests the BookedWorkshop Model - ''' - - def setUp(self): - self.requestedworkshop = RequestedWorkshop.objects.get(requested_workshop_date='2017-07-24') - self.propose_workshop = ProposeWorkshopDate.objects.get(proposed_workshop_date='2017-07-06') - self.bwr = BookedWorkshop.objects.create(booked_workshop_requested=self.requestedworkshop) - self.bwp = BookedWorkshop.objects.create(booked_workshop_proposed=self.propose_workshop) - - def test_bookedworkshop_model(self): - self.assertEqual(self.bwp.booked_workshop_proposed.condition_one,1) - self.assertEqual(self.bwr.booked_workshop_requested.requested_workshop_title.workshoptype_name, - 'ISCP' ) - diff --git a/workshop_app/test_views.py b/workshop_app/test_views.py deleted file mode 100644 index ebf48c0..0000000 --- a/workshop_app/test_views.py +++ /dev/null @@ -1,245 +0,0 @@ -from .views import view_profile, user_login, edit_profile -from django.test import TestCase -from .models import Profile, User, Workshop, WorkshopType,\ - RequestedWorkshop, BookedWorkshop, ProposeWorkshopDate,\ - has_profile - -from datetime import datetime -from json import dumps -from django.test import Client -from django.contrib.auth.models import Group, Permission -from django.contrib.auth import authenticate -from django.core.urlresolvers import reverse -from .forms import CreateWorkshop - -class TestProfile(TestCase): - def setUp(self): - self.client = Client() - - self.user1 = User.objects.create( - username='demo_test_user1', - password='pass@123', - email='test.user@gmail.com') - - self.user2 = User.objects.create( - username='demo_test_user2', - email='test.user@gmail.com') - - self.user2.set_password('pass@123') - self.user2.save() - - self.user2_profile = Profile.objects.create( - user=self.user2, - department='cs', - institute='ace', - position='instructor', - phone_number='1122993388', - is_email_verified=1 - ) - - def test_has_profile_for_user_without_profile(self): - """ - If no profile exists for user passed as argument return False - """ - has_profile_status = has_profile(self.user1) - self.assertFalse(has_profile_status) - - def test_has_profile_for_user_with_profile(self): - """ - If profile exists for user passed as argument return True - """ - has_profile_status = has_profile(self.user2) - self.assertTrue(has_profile_status) - - def test_view_profile_denies_anonymous(self): - """ - If not logged in redirect to login page - """ - response = self.client.get(reverse(view_profile), follow=True) - redirect_destination = '/login/?next=/view_profile/' - self.assertTrue(response.status_code,200) - self.assertRedirects(response, redirect_destination) - - def test_edit_profile_get(self): - """ - GET request to edit profile should display profile form - """ - - self.client.login(username=self.user2, password='pass@123') - response = self.client.get(reverse(edit_profile)) - self.assertEqual(response.status_code, 200) - self.client.logout() - - def test_edit_profile_post(self): - - self.client.login(username=self.user2, password='pass@123') - response = self.client.post('/edit_profile/', - data = { - 'first_name': 'demo_test', - 'last_name': 'user2', - 'institute': 'IIT', - 'department': 'Aerospace' - }) - - updated_profile_user = User.objects.get(id=self.user2.id) - updated_profile = Profile.objects.get(user=updated_profile_user) - - self.assertEqual(updated_profile.institute, 'IIT') - self.assertEqual(updated_profile.department, 'Aerospace') - self.assertEqual(updated_profile.position, 'instructor') - self.assertEqual(response.status_code, 200) - self.assertTemplateUsed(response, 'workshop_app/profile_updated.html') - - -class TestWorkshopCreation(TestCase): - def setUp(self): - ''' - demo user as coordinator and test user as instructor - ''' - self.superuser = User.objects.create_superuser( - username='admin', - password='pass@123', - email='test.user@gmail.com') - - self.mod_group = Group.objects.create(name='instructor') - - self.user_one = User.objects.create( - username='test_user1', - email='test.user@gmail.com') - - self.user_one.set_password('pass@123') - self.user_one.save() - - self.user_one_profile = Profile.objects.create( - user=self.user_one, - department='cs', - institute='IIT', - position='instructor', - phone_number='1122993388', - is_email_verified=1 - ) - - #Add user_one in instructor group and give required permissions - self.mod_group.user_set.add(self.user_one) - self.permission = (Permission.objects.all()) - self.user_one.user_permissions.add(self.permission[44]) - self.user_one.user_permissions.add(self.permission[43]) - self.user_one.user_permissions.add(self.permission[42]) - - self.user_two = User.objects.create( - username='demo_user2', - email='test.user@gmail.com') - - self.user_two.set_password('pass@123') - self.user_two.save() - - self.user_two_profile = Profile.objects.create( - user=self.user_two, - department='cs', - institute='ace', - position='coordinator', - phone_number='1122993388', - is_email_verified=1 - ) - - self.workshoptype = WorkshopType.objects.create(workshoptype_name='ISCP', workshoptype_description='Introduction to Scientific Computing in Python
\ - > Numpy
> Matplotlib
> iPython
', workshoptype_duration='1days, 8hours a day') - - def test_create_workshoptype_superuser(self): - self.client.login(username=self.superuser, password='pass@123') - self.client.post(('/admin/workshop_app/workshoptype/add/'), - data={ - 'workshoptype_name': 'Basic Python', - 'workshoptype_description': 'Basics of Python
\ - > Conditions
> Datatypes
> Loops
', - 'workshoptype_duration': '3days, 8hours a day' - }) - self.workshoptype_one = WorkshopType.objects.get(workshoptype_name='Basic Python') - self.assertEqual(self.workshoptype_one.workshoptype_name, 'Basic Python') - self.assertEqual(self.workshoptype_one.workshoptype_duration, '3days, 8hours a day') - self.client.logout() - - def test_create_workshop_instructor(self): - self.client.login(username=self.user_one, password='pass@123') - self.client.post('/create_workshop/', - { - 'workshop_title' : (2), - 'recurrences' : 'RRULE:FREQ=WEEKLY;UNTIL=20170624T183000Z;BYDAY=WE;' - }) - self.workshop = Workshop.objects.get(workshop_instructor=self.user_one) - self.assertEqual(str(self.workshop.workshop_title), 'ISCP 1days, 8hours a day') - self.client.logout() - - - def test_propose_workshop_coordinator(self): - self.client.login(username=self.user_two, password='pass@123') - self.client.post('/propose_workshop/', - { - 'condition_one': 1, - 'condition_two': 1, - 'condition_three': 1, - 'proposed_workshop_title': (2), - 'proposed_workshop_date': '2017-06-06' - }) - self.proposed_workshop = ProposeWorkshopDate.objects.get(proposed_workshop_date='2017-06-06') - self.assertEqual(str(self.proposed_workshop.proposed_workshop_title),'ISCP 1days, 8hours a day') - self.client.logout() - - -class TestWorkshopDashboard(TestCase): - def setUp(self): - self.superuser = User.objects.create_superuser( - username='admin', - password='pass@123', - email='test.user@gmail.com') - - self.mod_group = Group.objects.create(name='instructor') - - self.user_one = User.objects.create( - username='test_user1', - email='test.user@gmail.com') - - self.user_one.set_password('pass@123') - self.user_one.save() - - self.user_one_profile = Profile.objects.create( - user=self.user_one, - department='cs', - institute='IIT', - position='instructor', - phone_number='1122993388', - is_email_verified=1 - ) - - #Add user_one in instructor group and give required permissions - self.mod_group.user_set.add(self.user_one) - self.permissions = Permission.objects.all() - self.user_one.user_permissions.add(self.permissions[44]) - self.user_one.user_permissions.add(self.permissions[43]) - self.user_one.user_permissions.add(self.permissions[42]) - - self.user_two = User.objects.create( - username='demo_user2', - email='test.user@gmail.com') - - self.user_two.set_password('pass@123') - self.user_two.save() - - self.user_two_profile = Profile.objects.create( - user=self.user_two, - department='cs', - institute='ace', - position='coordinator', - phone_number='1122993388', - is_email_verified=1 - ) - - self.workshoptype = WorkshopType.objects.create(workshoptype_name='ISCP', workshoptype_description='Introduction to Scientific Computing in Python
\ - > Numpy
> Matplotlib
> iPython
', workshoptype_duration='1days, 8hours a day') - - self.workshop = Workshop.objects.create(workshop_instructor=self.user_one, - workshop_title=self.workshoptype, - recurrences='RRULE:FREQ=WEEKLY;UNTIL=20170624T183000Z;BYDAY=WE;' - ) - - \ No newline at end of file diff --git a/workshop_app/tests/__init__.py b/workshop_app/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/workshop_app/tests/test_models.py b/workshop_app/tests/test_models.py new file mode 100644 index 0000000..bd037ec --- /dev/null +++ b/workshop_app/tests/test_models.py @@ -0,0 +1,189 @@ +from django.test import TestCase +from workshop_app.models import ( + Profile, User, Workshop, WorkshopType, + RequestedWorkshop, BookedWorkshop, ProposeWorkshopDate + ) +from datetime import datetime + +# Setup for Model Test +def setUpModule(): + ''' + Sets up database + demo user as coordinator and test user as instructor + ''' + + demoUser1 = User.objects.create(username='demouser1', + email='test.user@gmail.com', password='pass@123') + demoUser2 = User.objects.create(username='demouser2', + email='test.user@gmail.com', password='pass@123') + + testUser1 = User.objects.create(username='testuser1', + email='test.user@gmail.com',password='pass@123') + + testUser2 = User.objects.create(username='testuser2', + email='test.user@gmail.com', password='pass@123') + + instructor_profile = Profile.objects.create(user=testUser2, position='instructor', + department='cs', institute='ace', phone_number='1122334456', + is_email_verified=1) + + coordinator_profile = Profile.objects.create(user=demoUser2, position='coordinator', + department='IT', institute='iit', phone_number='1122334456', + is_email_verified=1) + + workshoptype1 = WorkshopType.objects.create(workshoptype_name='ISCP', + workshoptype_description='Introduction to Scientific Computing in\ + Python
> Numpy
> Matplotlib
> iPython
', + workshoptype_duration='1day, 8hours a day') + + requested_workshop = RequestedWorkshop.objects.create( + requested_workshop_instructor=testUser2, + requested_workshop_coordinator=demoUser2, + requested_workshop_title=workshoptype1, + requested_workshop_date='2017-07-24' + ) + + propose_workshop = ProposeWorkshopDate.objects.create( + proposed_workshop_coordinator=demoUser2, + proposed_workshop_instructor=testUser2, + proposed_workshop_title=workshoptype1, + proposed_workshop_date='2017-07-06', + condition_one=1, + condition_two=1, + condition_three=1 + ) + + +def tearDownModule(): + User.objects.all().delete() + Profile.objects.all().delete() + ProposeWorkshopDate.objects.all().delete() + RequestedWorkshop.objects.all().delete() + WorkshopType.objects.all().delete() + +class ProfileModelTest(TestCase): + ''' + This class tests the Profile Model + ''' + def setUp(self): + ''' + setsup profile for instructor and coordinator + ''' + self.testuser1 = User.objects.get(username='testuser1') + self.demouser1 = User.objects.get(username='demouser1') + + self.instructor_profile1 = Profile.objects.create(user=self.testuser1, position='instructor', + department='cs', institute='ace', phone_number='1123323344558899192', + is_email_verified=1) + + self.coordinator_profile1 = Profile.objects.create(user=self.demouser1, position='coordinator', + department='IT', institute='iit', phone_number='112233', + is_email_verified=1) + + def test_profile_model(self): + self.assertEqual(self.demouser1.email,'test.user@gmail.com') + self.assertEqual(self.testuser1.email,'test.user@gmail.com') + self.assertEqual(self.instructor_profile1.position,'instructor') + self.assertEqual(self.coordinator_profile1.position,'coordinator') + + +class WorkshopTypeModelTest(TestCase): + ''' + This class tests the WorkshopType Model + ''' + + def setUp(self): + self.workshoptype1 = WorkshopType.objects.create(workshoptype_name='ISCP', + workshoptype_description='Introduction to Scientific Computing in\ + Python
> Numpy
> Matplotlib
> iPython
', + workshoptype_duration='1day, 8hours a day') + + self.workshoptype2 = WorkshopType.objects.create(workshoptype_name='Basic Python', + workshoptype_description='Basic Python
> DataTypes
\ + > Conditions
> Loops
> Functions' + ,workshoptype_duration='3days, 8hours a day') + + def test_workshoptype_model(self): + self.assertEqual(self.workshoptype2.workshoptype_duration,'3days, 8hours a day') + self.assertEqual(self.workshoptype1.workshoptype_name, 'ISCP') + + +class WorkshopModelTest(TestCase): + ''' + This class tests the Workshop Model + ''' + + def setUp(self): + self.testuser2 = User.objects.get(username='testuser2') + self.instructor_profile = Profile.objects.get(user=self.testuser2) + self.workshoptype = WorkshopType.objects.get(workshoptype_name='ISCP') + self.workshop = Workshop.objects.create(workshop_instructor=self.testuser2, + workshop_title=self.workshoptype, + recurrences='RRULE:FREQ=WEEKLY;UNTIL=20170629T183000Z;BYDAY=TH') + + def test_workshop_model(self): + self.assertEqual(self.workshop.workshop_title.workshoptype_name,'ISCP' ) + self.assertEqual(self.workshop.recurrences.rrules[0].__dict__['freq'],2) + + +class RequestedWorkshopModelTest(TestCase): + ''' + This class tests the RequestedWorkshop Model + ''' + + def setUp(self): + self.testuser2 = User.objects.get(username='testuser2') + self.demouser2 = User.objects.get(username='demouser2') + self.workshoptype = WorkshopType.objects.get(workshoptype_name='ISCP') + self.requestedworkshop = RequestedWorkshop.objects.create( + requested_workshop_instructor=self.testuser2, + requested_workshop_coordinator=self.demouser2, + requested_workshop_title=self.workshoptype, + requested_workshop_date='2017-05-24' + ) + + def test_requestedworkshop_model(self): + self.assertEqual(self.requestedworkshop.requested_workshop_date, '2017-05-24') + self.assertEqual(self.requestedworkshop.status, 'Pending') + + +class ProposedWorkshopDateModelTest(TestCase): + ''' + This class tests the ProposeWorkshopDate Model + ''' + + def setUp(self): + self.testuser2 = User.objects.get(username='testuser2') + self.demouser2 = User.objects.get(username='demouser2') + self.workshoptype = WorkshopType.objects.get(workshoptype_name='ISCP') + self.propose_workshop = ProposeWorkshopDate.objects.create( + proposed_workshop_coordinator=self.demouser2, + proposed_workshop_instructor=self.testuser2, + proposed_workshop_title=self.workshoptype, + proposed_workshop_date='2017-06-06', + condition_one=1, + condition_two=1, + condition_three=1 + ) + + def test_proposedworkshopdate_model(self): + self.assertEqual(self.propose_workshop.proposed_workshop_title.workshoptype_name,'ISCP') + self.assertEqual(self.propose_workshop.condition_three, 1) + self.assertEqual(self.propose_workshop.status, 'Pending') + +class BookedWorkshopModelTest(TestCase): + ''' + This class tests the BookedWorkshop Model + ''' + + def setUp(self): + self.requestedworkshop = RequestedWorkshop.objects.get(requested_workshop_date='2017-07-24') + self.propose_workshop = ProposeWorkshopDate.objects.get(proposed_workshop_date='2017-07-06') + self.bwr = BookedWorkshop.objects.create(booked_workshop_requested=self.requestedworkshop) + self.bwp = BookedWorkshop.objects.create(booked_workshop_proposed=self.propose_workshop) + + def test_bookedworkshop_model(self): + self.assertEqual(self.bwp.booked_workshop_proposed.condition_one,1) + self.assertEqual(self.bwr.booked_workshop_requested.requested_workshop_title.workshoptype_name, + 'ISCP' ) + diff --git a/workshop_app/tests/test_views.py b/workshop_app/tests/test_views.py new file mode 100644 index 0000000..fd93a3a --- /dev/null +++ b/workshop_app/tests/test_views.py @@ -0,0 +1,244 @@ +from workshop_app.views import view_profile, user_login, edit_profile +from django.test import TestCase +from workshop_app.models import Profile, User, Workshop, WorkshopType,\ + RequestedWorkshop, BookedWorkshop, ProposeWorkshopDate,\ + has_profile +from datetime import datetime +from json import dumps +from django.test import Client +from django.contrib.auth.models import Group, Permission +from django.contrib.auth import authenticate +from django.core.urlresolvers import reverse +from workshop_app.forms import CreateWorkshop + +class TestProfile(TestCase): + def setUp(self): + self.client = Client() + + self.user1 = User.objects.create( + username='demo_test_user1', + password='pass@123', + email='test.user@gmail.com') + + self.user2 = User.objects.create( + username='demo_test_user2', + email='test.user@gmail.com') + + self.user2.set_password('pass@123') + self.user2.save() + + self.user2_profile = Profile.objects.create( + user=self.user2, + department='cs', + institute='ace', + position='instructor', + phone_number='1122993388', + is_email_verified=1 + ) + + def test_has_profile_for_user_without_profile(self): + """ + If no profile exists for user passed as argument return False + """ + has_profile_status = has_profile(self.user1) + self.assertFalse(has_profile_status) + + def test_has_profile_for_user_with_profile(self): + """ + If profile exists for user passed as argument return True + """ + has_profile_status = has_profile(self.user2) + self.assertTrue(has_profile_status) + + def test_view_profile_denies_anonymous(self): + """ + If not logged in redirect to login page + """ + response = self.client.get(reverse(view_profile), follow=True) + redirect_destination = '/login/?next=/view_profile/' + self.assertTrue(response.status_code,200) + self.assertRedirects(response, redirect_destination) + + def test_edit_profile_get(self): + """ + GET request to edit profile should display profile form + """ + + self.client.login(username=self.user2, password='pass@123') + response = self.client.get(reverse(edit_profile)) + self.assertEqual(response.status_code, 200) + self.client.logout() + + def test_edit_profile_post(self): + + self.client.login(username=self.user2, password='pass@123') + response = self.client.post('/edit_profile/', + data = { + 'first_name': 'demo_test', + 'last_name': 'user2', + 'institute': 'IIT', + 'department': 'Aerospace' + }) + + updated_profile_user = User.objects.get(id=self.user2.id) + updated_profile = Profile.objects.get(user=updated_profile_user) + + self.assertEqual(updated_profile.institute, 'IIT') + self.assertEqual(updated_profile.department, 'Aerospace') + self.assertEqual(updated_profile.position, 'instructor') + self.assertEqual(response.status_code, 200) + self.assertTemplateUsed(response, 'workshop_app/profile_updated.html') + + +class TestWorkshopCreation(TestCase): + def setUp(self): + ''' + demo user as coordinator and test user as instructor + ''' + self.superuser = User.objects.create_superuser( + username='admin', + password='pass@123', + email='test.user@gmail.com') + + self.mod_group = Group.objects.create(name='instructor') + + self.user_one = User.objects.create( + username='test_user1', + email='test.user@gmail.com') + + self.user_one.set_password('pass@123') + self.user_one.save() + + self.user_one_profile = Profile.objects.create( + user=self.user_one, + department='cs', + institute='IIT', + position='instructor', + phone_number='1122993388', + is_email_verified=1 + ) + + #Add user_one in instructor group and give required permissions + self.mod_group.user_set.add(self.user_one) + self.permission = (Permission.objects.all()) + self.user_one.user_permissions.add(self.permission[44]) + self.user_one.user_permissions.add(self.permission[43]) + self.user_one.user_permissions.add(self.permission[42]) + + self.user_two = User.objects.create( + username='demo_user2', + email='test.user@gmail.com') + + self.user_two.set_password('pass@123') + self.user_two.save() + + self.user_two_profile = Profile.objects.create( + user=self.user_two, + department='cs', + institute='ace', + position='coordinator', + phone_number='1122993388', + is_email_verified=1 + ) + + self.workshoptype = WorkshopType.objects.create(workshoptype_name='ISCP', workshoptype_description='Introduction to Scientific Computing in Python
\ + > Numpy
> Matplotlib
> iPython
', workshoptype_duration='1days, 8hours a day') + + def test_create_workshoptype_superuser(self): + self.client.login(username=self.superuser, password='pass@123') + self.client.post(('/admin/workshop_app/workshoptype/add/'), + data={ + 'workshoptype_name': 'Basic Python', + 'workshoptype_description': 'Basics of Python
\ + > Conditions
> Datatypes
> Loops
', + 'workshoptype_duration': '3days, 8hours a day' + }) + self.workshoptype_one = WorkshopType.objects.get(workshoptype_name='Basic Python') + self.assertEqual(self.workshoptype_one.workshoptype_name, 'Basic Python') + self.assertEqual(self.workshoptype_one.workshoptype_duration, '3days, 8hours a day') + self.client.logout() + + def test_create_workshop_instructor(self): + self.client.login(username=self.user_one, password='pass@123') + self.client.post('/create_workshop/', + { + 'workshop_title' : (2), + 'recurrences' : 'RRULE:FREQ=WEEKLY;UNTIL=20170624T183000Z;BYDAY=WE;' + }) + self.workshop = Workshop.objects.get(workshop_instructor=self.user_one) + self.assertEqual(str(self.workshop.workshop_title), 'ISCP 1days, 8hours a day') + self.client.logout() + + + def test_propose_workshop_coordinator(self): + self.client.login(username=self.user_two, password='pass@123') + self.client.post('/propose_workshop/', + { + 'condition_one': 1, + 'condition_two': 1, + 'condition_three': 1, + 'proposed_workshop_title': (2), + 'proposed_workshop_date': '2017-06-06' + }) + self.proposed_workshop = ProposeWorkshopDate.objects.get(proposed_workshop_date='2017-06-06') + self.assertEqual(str(self.proposed_workshop.proposed_workshop_title),'ISCP 1days, 8hours a day') + self.client.logout() + + +class TestWorkshopDashboard(TestCase): + def setUp(self): + self.superuser = User.objects.create_superuser( + username='admin', + password='pass@123', + email='test.user@gmail.com') + + self.mod_group = Group.objects.create(name='instructor') + + self.user_one = User.objects.create( + username='test_user1', + email='test.user@gmail.com') + + self.user_one.set_password('pass@123') + self.user_one.save() + + self.user_one_profile = Profile.objects.create( + user=self.user_one, + department='cs', + institute='IIT', + position='instructor', + phone_number='1122993388', + is_email_verified=1 + ) + + #Add user_one in instructor group and give required permissions + self.mod_group.user_set.add(self.user_one) + self.permissions = Permission.objects.all() + self.user_one.user_permissions.add(self.permissions[44]) + self.user_one.user_permissions.add(self.permissions[43]) + self.user_one.user_permissions.add(self.permissions[42]) + + self.user_two = User.objects.create( + username='demo_user2', + email='test.user@gmail.com') + + self.user_two.set_password('pass@123') + self.user_two.save() + + self.user_two_profile = Profile.objects.create( + user=self.user_two, + department='cs', + institute='ace', + position='coordinator', + phone_number='1122993388', + is_email_verified=1 + ) + + self.workshoptype = WorkshopType.objects.create(workshoptype_name='ISCP', workshoptype_description='Introduction to Scientific Computing in Python
\ + > Numpy
> Matplotlib
> iPython
', workshoptype_duration='1days, 8hours a day') + + self.workshop = Workshop.objects.create(workshop_instructor=self.user_one, + workshop_title=self.workshoptype, + recurrences='RRULE:FREQ=WEEKLY;UNTIL=20170624T183000Z;BYDAY=WE;' + ) + + -- cgit