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 from django.conf import settings 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='Computer Engineering', institute='ace', title='Doctor', position='instructor', phone_number='1122993388', location='mumbai', how_did_you_hear_about_us='Google', state='IN-MH', 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)) user_profile = User.objects.get(id=self.user2.id) profile = Profile.objects.get(user=user_profile) self.assertEqual(response.status_code, 200) self.assertEqual(profile.institute, 'ace') self.client.logout() def test_edit_profile_post(self): self.client.login(username=self.user2, password='pass@123') response = self.client.post('/edit_profile/', { 'first_name': 'demo_test', 'last_name': 'user2', 'institute': 'IIT', 'department': 'aerospace engineering' }) 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 engineering') self.assertEqual(updated_profile.position, 'instructor') self.assertEqual(response.status_code, 200) # self.assertTemplateUsed(response, 'workshop_app/profile_updated.html') def test_register_page(self): self.client.get('/register/') self.register_response = self.client.post('/register/', data={ 'username':'testuser', 'email':'test@user.com', 'password':'ABCD@123*', 'confirm password':'ABCD@123*', 'first name':'testor', 'last name':'user', 'phone number': 1234567890, 'institute':'IIT', 'location':'mumbai', 'state': (2), 'department':(2)}) self.assertEqual(self.register_response.status_code,200) 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='computer engineering', title='Doctor', institute='IIT', position='instructor', how_did_you_hear_about_us='Google', phone_number='1122993388', location='mumbai', state='IN-MH', 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='computer engineering', institute='ace', position='coordinator', title='Mr', how_did_you_hear_about_us='Google', location='mumbai', state='IN-MH', 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' : self.workshoptype.id, 'recurrences' : 'RRULE:FREQ=WEEKLY;UNTIL=20170924T183000Z;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': self.workshoptype.id, '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', how_did_you_hear_about_us='Google', location='mumbai', state='IN-MH', title='Mr', 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;' ) class TestStaticPages(TestCase): def test_register(self): response = self.client.get('/register/') self.assertEqual(response.status_code, 200) def test_faq(self): response = self.client.get('/faq/') self.assertEqual(response.status_code, 200) def test_how_to_participate(self): response = self.client.get('/how_to_participate/') self.assertEqual(response.status_code, 200) def test_view_workshoptype_list(self): response = self.client.get('/view_workshoptype_list/') self.assertEqual(response.status_code, 200) def test_view_self_workshop(self): response = self.client.get('/self_workshop/') self.assertEqual(response.status_code, 200) class TestWorkshopStats(TestCase): def setUp(self): ''' 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]) def test_workshop_stats(self): settings.SHOW_WORKSHOP_STATS = True self.client.login(username=self.user_one, password='pass@123') response = self.client.post('/workshop_stats/', { 'from': '2017-01-01', 'to': '2017-12-31', 'Download': 'download' } ) self.assertEqual(response.status_code, 200) self.assertEqual(response.get('Content-Disposition'),'attachment;\ filename="records_from_2017-01-01_to_2017-12-31.csv"')