def test_invite_existing_user_with_email_mixed_case(self): organizer = create_user('*****@*****.**', 'organ', 'test', 'password', False) organizer.first_name = 'Orgaborga' organizer.save() faci1 = create_user('*****@*****.**', 'faci1', 'test', 'password', False) faci1.first_name = 'Bobobob' faci1.save() mail.outbox = [] team = Team.objects.create(name='test team') TeamMembership.objects.create(team=team, user=organizer, role=TeamMembership.ORGANIZER) c = Client() c.login(username='******', password='******') invite_url = '/en/organize/team/{0}/member/invite/'.format(team.pk) resp = c.post(invite_url, json.dumps({"email": "*****@*****.**"}), content_type="application/json") self.assertEqual(resp.status_code, 200) self.assertEqual(resp.json()['status'], 'CREATED') self.assertEqual(TeamInvitation.objects.filter(team=team).count(), 1) self.assertEqual(len(mail.outbox), 1) # Make sure correct email was sent self.assertIn('Bobobob', mail.outbox[0].body) self.assertIn('Orgaborga', mail.outbox[0].body)
def test_organizer_access(self): user = create_user('*****@*****.**', 'bob', 'uncle', 'password', False) faci1 = create_user('*****@*****.**', 'faci1', 'test', 'password', False) team = Team.objects.create(name='test team') TeamMembership.objects.create(team=team, user=user, role=TeamMembership.ORGANIZER) TeamMembership.objects.create(team=team, user=faci1, role=TeamMembership.MEMBER) sg = StudyGroup.objects.get(pk=1) sg.facilitator = faci1 sg.save() c = Client() c.login(username='******', password='******') def assertAllowed(url): resp = c.get(url) self.assertIn(resp.status_code, [200, 301, 302]) def assertStatus(url, status): resp = c.get(url) self.assertEqual(resp.status_code, status) def assertForbidden(url): resp = c.get(url) self.assertEqual(resp.status_code, 403) assertAllowed('/en/') assertAllowed('/en/organize/') assertAllowed('/en/organize/{}/'.format(team.pk)) assertAllowed('/en/weekly-update/') # Make sure the organizer can access their study groups assertAllowed('/en/studygroup/1/') assertAllowed('/en/studygroup/1/edit/') assertAllowed('/en/studygroup/1/message/compose/') assertStatus('/en/studygroup/1/message/edit/111/', 404) assertAllowed('/en/studygroup/1/member/add/') assertStatus('/en/studygroup/1/member/211/delete/', 404) assertAllowed('/en/studygroup/1/meeting/create/') assertStatus('/en/studygroup/1/meeting/211/edit/', 404) assertStatus('/en/studygroup/1/meeting/211/delete/', 404) # Make sure the organizer can't access other study groups assertForbidden('/en/organize/{}/'.format(team.pk + 1)) assertForbidden('/en/studygroup/2/') assertForbidden('/en/studygroup/2/edit/') assertForbidden('/en/studygroup/2/message/compose/') assertForbidden('/en/studygroup/2/message/edit/1/') assertForbidden('/en/studygroup/2/member/add/') assertForbidden('/en/studygroup/2/member/2/delete/') assertForbidden('/en/studygroup/2/meeting/create/') assertForbidden('/en/studygroup/2/meeting/2/edit/') assertForbidden('/en/studygroup/2/meeting/2/delete/')
def test_team_unlisted(self): c = Client() # create team with 2 users organizer = create_user('*****@*****.**', 'organ', 'test', '1234', False) faci1 = create_user('*****@*****.**', 'faci1', 'test', '1234', False) StudyGroup.objects.filter(pk=1).update(facilitator=faci1) mail.outbox = [] # create team team = Team.objects.create(name='test team') TeamMembership.objects.create(team=team, user=organizer, role=TeamMembership.ORGANIZER) TeamMembership.objects.create(team=team, user=faci1, role=TeamMembership.MEMBER) # add some courses self.assertEqual(Course.objects.count(), 4) Course.objects.filter(pk=1).update(created_by=faci1) Course.objects.filter(pk=2).update(created_by=faci1) Course.objects.filter(pk=3).update(created_by=organizer) Course.objects.filter(pk=4).update(created_by=faci1) # unlist some Course.objects.filter(pk=1).update(unlisted=True) # test that when logged out, only listed are shown resp = c.get('/api/courses/') self.assertEqual(resp.status_code, 200) self.assertEqual(resp.json()["count"], 3) # test when logged in as any team member, unlisted are also shown c.login(username='******', password='******') resp = c.get('/api/courses/') self.assertEqual(resp.status_code, 200) self.assertEqual(resp.json()["count"], 4)
def test_cant_edit_used_course(self): user = create_user('*****@*****.**', 'first', 'last', 'password') user2 = create_user('*****@*****.**', 'first', 'last', 'password') course_data = dict(title='Course 1011', provider='CourseMagick', link='https://course.magick/test', caption='learn by means of magic', on_demand=True, topics='html,test', language='en', created_by=user) course = Course.objects.create(**course_data) sg = StudyGroup.objects.get(pk=1) sg.course = course sg.facilitator = user2 sg.save() c = Client() c.login(username='******', password='******') # make sure bob123 can edit the course course_url = '/en/course/{}/edit/'.format(course.id) resp = c.get(course_url) self.assertRedirects(resp, '/en/') course_data['topics'] = 'magic' resp = c.post(course_url, course_data) self.assertRedirects(resp, '/en/') self.assertEqual(Course.objects.get(pk=course.id).topics, 'html,test')
def test_dont_send_weekly_report(self): organizer = create_user('*****@*****.**', 'organ', 'test', '1234', False) faci1 = create_user('*****@*****.**', 'faci', 'test', 'password', False) StudyGroup.objects.filter(pk=1).update(facilitator=faci1) mail.outbox = [] team = Team.objects.create(name='test team') TeamMembership.objects.create(team=team, user=organizer, role=TeamMembership.ORGANIZER) TeamMembership.objects.create(team=team, user=faci1, role=TeamMembership.MEMBER) study_group = StudyGroup.objects.get(pk=1) meeting = Meeting() meeting.study_group = study_group meeting.meeting_time = datetime.time(9) meeting.meeting_date = datetime.date(2018, 8, 14) meeting.save() study_group = StudyGroup.objects.get(pk=2) meeting = Meeting() meeting.study_group = study_group meeting.meeting_time = datetime.time(9) meeting.meeting_date = datetime.date(2018, 8, 14) meeting.save() with freeze_time("2018-08-28 10:01:00"): send_weekly_update() self.assertEqual(len(mail.outbox), 1) self.assertEqual(mail.outbox[0].to[0], '*****@*****.**')
def test_facilitator_access(self): user = create_user('*****@*****.**', 'bob', 'test', 'password') sg = StudyGroup.objects.get(pk=1) sg.facilitator = user sg.save() c = Client() c.login(username='******', password='******') def assertAllowed(url): resp = c.get(url) #TODO not sure if it's a good idea to include 404 here! self.assertIn(resp.status_code, [200, 301, 302]) def assertStatus(url, status): resp = c.get(url) self.assertEqual(resp.status_code, status) assertAllowed('/en/studygroup/1/') assertAllowed('/en/studygroup/1/edit/') assertAllowed('/en/studygroup/1/message/compose/') assertStatus('/en/studygroup/1/message/edit/1111/', 404) assertAllowed('/en/studygroup/1/member/add/') assertStatus('/en/studygroup/1/member/2111/delete/', 404) assertAllowed('/en/studygroup/1/meeting/create/') assertStatus('/en/studygroup/1/meeting/2111/edit/', 404) assertStatus('/en/studygroup/1/meeting/2111/delete/', 404)
def test_update_application_bug_564_2(self): """ see https://github.com/p2pu/learning-circles/issues/564 """ # Scenario: # 1. Facilitator add learner with a mobile # 2. Learner signs up with email only # 3. Learner sign up again with email + mobile # There should be only 1 signup per email address facilitator = create_user('*****@*****.**', 'bowie', 'wowie', 'password') mail.outbox = [] sg = StudyGroup.objects.get(pk=1) sg.facilitator = facilitator sg.save() c = Client() c.login(username='******', password='******') user1 = {'study_group': sg.pk, 'name': 'bob', 'mobile': '+27112223333'} resp = c.post(f'/en/studygroup/{sg.pk}/member/add/', user1) self.assertEqual(Application.objects.active().count(), 1) self.assertEqual(len(mail.outbox), 1) mail.outbox = [] c = Client() application = self.APPLICATION_DATA.copy() application['email'] = '*****@*****.**' resp = c.post(f'/en/signup/foo-bob-{sg.pk}/', application) application['mobile'] = user1['mobile'] resp = c.post(f'/en/signup/foo-bob-{sg.pk}/', application) self.assertRedirects(resp, '/en/signup/1/success/') self.assertEqual(Application.objects.active().count(), 2) self.assertEqual(len(mail.outbox), 1) self.assertEqual( Application.objects.active().filter( email__iexact='*****@*****.**').count(), 1)
def test_feedback_permissions(self): c = Client() data = { "study_group_meeting": self.meeting.pk, "rating": 3, } url = '/api/drf/meeting_feedback/' def assertForbidden(resp): self.assertEqual(resp.status_code, 403) # not logged in resp = c.post(url, data=json.dumps(data), content_type='application/json') assertForbidden(resp) # wrong facilitator user = create_user('*****@*****.**', 'bob', 'test', 'password') c.login(username='******', password='******') resp = c.post(url, data=json.dumps(data), content_type='application/json') assertForbidden(resp) # how about now? c.login(username=self.facilitator.username, password='******') resp = c.post(url, data=json.dumps(data), content_type='application/json') self.assertEqual(resp.status_code, 201) self.assertEqual( Feedback.objects.filter(study_group_meeting=self.meeting).count(), 1)
def test_study_group_facilitator_survey(self): facilitator = create_user('*****@*****.**', 'bowie', 'wowie', 'password') course_data = dict(title='Course 1011', provider='CourseMagick', link='https://course.magick/test', caption='learn by means of magic', on_demand=True, topics='html,test', language='en', created_by=facilitator) course = Course.objects.create(**course_data) sg = StudyGroup.objects.get(pk=1) sg.course = course sg.facilitator = facilitator sg.save() c = Client() c.login(username='******', password='******') feedback_url = '/en/studygroup/{}/facilitator_survey/?goal_rating=5'.format( sg.uuid) with self.settings( TYPEFORM_FACILITATOR_SURVEY_FORM='SOMESURVEYYOUGOTTHERE'): response = c.get(feedback_url) sg.refresh_from_db() self.assertEqual(response.status_code, 200) self.assertEqual(str(response.context_data['study_group_uuid']), str(sg.uuid)) self.assertEqual(response.context_data['study_group'], sg) self.assertEqual(response.context_data['survey_id'], 'SOMESURVEYYOUGOTTHERE') self.assertEqual(response.context_data['course'], course.title) self.assertEqual(response.context_data['goal'], sg.facilitator_goal) self.assertEqual(response.context_data['goal_rating'], sg.facilitator_goal_rating)
def test_new_study_group_email(self): facilitator = create_user('*****@*****.**', 'facil', 'itate', 'password') mail.outbox = [] sg = StudyGroup(course=Course.objects.first(), facilitator=facilitator, description='blah', venue_name='ACME publich library', venue_address='ACME rd 1', venue_details='venue_details', city='city', latitude=0, longitude=0, start_date=datetime.date(2010, 1, 1), end_date=datetime.date(2010, 1, 1) + datetime.timedelta(weeks=6), meeting_time=datetime.time(12, 0), duration=90, timezone='SAST', facilitator_goal='the_facilitator_goal', facilitator_concerns='the_facilitators_concerns') sg.save() self.assertEqual(len(mail.outbox), 1) self.assertIn('the_facilitator_goal', mail.outbox[0].body) self.assertIn('the_facilitators_concerns', mail.outbox[0].body)
def test_facilitator_active_learning_circles(self): facilitator = create_user('*****@*****.**', 'bowie', 'wowie', 'password') sg = StudyGroup.objects.get(pk=1) sg.facilitator = facilitator sg.start_date = datetime.date(2018, 5, 24) sg.end_date = datetime.date(2018, 5, 24) + datetime.timedelta(weeks=5) sg.draft = True sg.save() sg.meeting_set.delete() c = Client() c.login(username='******', password='******') with freeze_time("2018-05-02"): resp = c.get('/en/facilitator/') self.assertEqual(resp.status_code, 200) self.assertIn(sg, resp.context['current_study_groups']) sg.draft = False sg.save() generate_all_meetings(sg) with freeze_time("2018-05-02"): resp = c.get('/en/facilitator/') self.assertEqual(resp.status_code, 200) self.assertIn(sg, resp.context['current_study_groups']) with freeze_time("2018-07-16"): resp = c.get('/en/facilitator/') self.assertEqual(resp.status_code, 200) self.assertNotIn(sg, resp.context['current_study_groups'])
def test_study_group_final_report_with_no_responses(self): facilitator = create_user('*****@*****.**', 'bowie', 'wowie', 'password') course_data = dict(title='Course 1011', provider='CourseMagick', link='https://course.magick/test', caption='learn by means of magic', on_demand=True, topics='html,test', language='en', created_by=facilitator) course = Course.objects.create(**course_data) sg = StudyGroup.objects.get(pk=1) sg.course = course sg.facilitator = facilitator sg.save() data = dict(self.APPLICATION_DATA) data['study_group'] = sg data['email'] = '*****@*****.**' application = Application(**data) application.save() accept_application(application) c = Client() report = '/en/studygroup/{}/report/'.format(sg.pk) response = c.get(report) self.assertEqual(response.status_code, 200) self.assertEqual(response.context_data['study_group'], sg) self.assertEqual(response.context_data['registrations'], 1) self.assertEqual(response.context_data['learner_survey_responses'], 0) self.assertEqual(response.context_data['facilitator_survey_responses'], 0) self.assertNotIn('courses', response.context_data)
def setUp(self): user = create_user('*****@*****.**', 'admin', 'h', 'password') user.is_superuser = True user.is_staff = True #organizer = create_user('*****@*****.**', 'organ', 'test', 'password', False) #faci1 = create_user('*****@*****.**', 'faci1', 'test', 'password', False) user.save()
def test_draft_study_group_actions_disabled(self, handle_new_facilitator): user = create_user('*****@*****.**', 'bob', 'test', 'password', False) confirm_user_email(user) c = Client() c.login(username='******', password='******') with freeze_time('2018-07-20'): resp = c.post('/api/learning-circle/', data=json.dumps(self.STUDY_GROUP_DATA), content_type='application/json') self.assertEqual(resp.json()['status'], 'created') study_groups = StudyGroup.objects.filter(facilitator=user) self.assertEqual(study_groups.count(), 1) self.assertEqual(study_groups.first().meeting_set.count(), 6) # can add a meeting self.assertEqual(study_groups.first().pk, StudyGroup.objects.last().pk) url_base = '/en/studygroup/{0}'.format(study_groups.first().pk) resp = c.get(url_base + '/meeting/create/') self.assertEqual(resp.status_code, 200) meeting_data = { "meeting_date": "2018-03-17", "meeting_time": "04:00 PM", "study_group": study_groups.first().pk, } resp = c.post(url_base + '/meeting/create/', data=meeting_data) self.assertRedirects(resp, url_base + '/') self.assertEqual(StudyGroup.objects.last().meeting_set.count(), 7) expected_redirect_url = '/en/studygroup/{0}/'.format( study_groups.first().pk) # cannot send a message resp = c.get('/en/studygroup/{0}/message/compose/'.format( study_groups.first().pk)) self.assertRedirects(resp, expected_redirect_url) mail_data = { u'study_group': study_groups.first().pk, u'email_subject': 'does not matter', u'email_body': 'does not matter', } mail.outbox = [] resp = c.post(url_base + '/message/compose/', mail_data) self.assertRedirects(resp, expected_redirect_url) self.assertEqual(len(mail.outbox), 0) # cannot add a learner resp = c.get('/en/studygroup/{0}/member/add/'.format( study_groups.first().pk)) self.assertRedirects(resp, expected_redirect_url) learner_data = { "email": "*****@*****.**", "name": "no name", "study_group": "515", } resp = c.post(url_base + '/member/add/', data=learner_data) self.assertRedirects(resp, expected_redirect_url) self.assertEqual(StudyGroup.objects.last().application_set.count(), 0)
def test_weekly_report(self): organizer = create_user('*****@*****.**', 'organ', 'test', 'password', False) faci1 = create_user('*****@*****.**', 'faci1', 'test', 'password', False) StudyGroup.objects.filter(pk=1).update(facilitator=faci1) StudyGroup.objects.filter(pk=3).update(facilitator=faci1) StudyGroup.objects.filter(pk=3).update(deleted_at=timezone.now()) team = Team.objects.create(name='test team') TeamMembership.objects.create(team=team, user=organizer, role=TeamMembership.ORGANIZER) TeamMembership.objects.create(team=team, user=faci1, role=TeamMembership.MEMBER) study_group = StudyGroup.objects.get(pk=1) active_meeting = Meeting.objects.create( study_group=study_group, meeting_time=datetime.time(16, 0), meeting_date=datetime.date(2016, 11, 24) # Thursday ) study_group = StudyGroup.objects.get(pk=2) meeting = Meeting() meeting.study_group = study_group meeting.meeting_time = datetime.time(16, 0) meeting.meeting_date = datetime.date(2016, 11, 25) # Thursday meeting.save() Meeting.objects.create( study_group=StudyGroup.objects.get(pk=3), meeting_time=datetime.time(16, 0), meeting_date=datetime.date(2016, 11, 21) # Monday ) c = Client() c.login(username='******', password='******') resp = c.get('/en/report/weekly/{0}/'.format( datetime.date(2016, 11, 21).strftime("%Y-%m-%d"))) self.assertEqual(resp.status_code, 200) self.assertEqual(len(resp.context['meetings']), 1) self.assertEqual(resp.context['meetings'][0].pk, active_meeting.pk)
def test_feedback_submit(self): organizer = create_user('*****@*****.**', 'organ', 'test', '1234', False) faci1 = create_user('*****@*****.**', 'faci1', 'test', '1234', False) StudyGroup.objects.filter(pk=1).update(facilitator=faci1) mail.outbox = [] # create team team = Team.objects.create(name='test team') TeamMembership.objects.create(team=team, user=organizer, role=TeamMembership.ORGANIZER) TeamMembership.objects.create(team=team, user=faci1, role=TeamMembership.MEMBER) c = Client() c.login(username='******', password='******') study_group = StudyGroup.objects.get(pk=1) meeting = Meeting() meeting.study_group = study_group meeting.meeting_time = timezone.now().time() meeting.meeting_date = timezone.now().date() - datetime.timedelta( days=1) meeting.save() feedback_data = { 'study_group_meeting': '{0}'.format(meeting.id), 'feedback': 'Test some feedback', 'reflection': 'Please help me', 'attendance': '9', 'rating': '5', } feedback_url = '/en/studygroup/1/meeting/{0}/feedback/create/'.format( meeting.id) self.assertEqual(len(mail.outbox), 0) resp = c.post(feedback_url, feedback_data) self.assertEqual(resp.status_code, 302) # make sure email was sent to organizers self.assertEqual(len(mail.outbox), 1) self.assertEqual( Feedback.objects.filter(study_group_meeting=meeting).count(), 1)
def test_publish_learning_circle(self): user_data = { "email": "*****@*****.**", "first_name": "Ted", "last_name": "Danson", "password": "******" } facilitator = create_user(user_data["email"], user_data["first_name"], user_data["last_name"], user_data["password"]) confirm_user_email(facilitator) self.driver.get('%s%s' % (self.live_server_url, '/en/studygroup/create/')) creation_page = LearningCircleCreationPage(self.driver, self.wait) creation_page.fill_out_form_correctly() creation_page.click_publish_button() self.assertTrue( expected_conditions.visibility_of_element_located( RegistrationModalLocators.REGISTRATION_MODAL)) creation_page.click_login_link() self.assertTrue( expected_conditions.text_to_be_present_in_element( RegistrationModalLocators.REGISTRATION_MODAL_TITLE, 'Log in')) creation_page.fill_out_login_modal(user_data) self.assertTrue(expected_conditions.alert_is_present()) self.assertTrue( expected_conditions.text_to_be_present_in_element( LearningCircleCreationPageLocators.SUCCESS_ALERT, "You're logged in! You can now save or publish your learning circle." )) overlay = self.driver.find_element( *RegistrationModalLocators.MODAL_OVERLAY) self.wait.until(expected_conditions.staleness_of(overlay)) creation_page.click_publish_button() data = self.driver.get_log('browser') self.wait.until( expected_conditions.url_changes( '%s%s' % (self.live_server_url, '/en/studygroup/create/'))) published_studygroup = StudyGroup.objects.published().last() self.assertEqual(published_studygroup.facilitator, facilitator) self.assertTrue( expected_conditions.url_to_be('{}/en/studygroup/{}/'.format( self.live_server_url, published_studygroup.id)))
def test_organizer_dash(self): organizer = create_user('*****@*****.**', 'organ', 'test', 'password', False) faci1 = create_user('*****@*****.**', 'faci1', 'test', 'password', False) faci2 = create_user('*****@*****.**', 'faci2', 'test', 'password', False) sg = StudyGroup.objects.get(pk=1) sg.facilitator = faci1 sg.save() sg = StudyGroup.objects.get(pk=2) sg.facilitator = faci2 sg.save() # create team team = Team.objects.create(name='test team') TeamMembership.objects.create(team=team, user=organizer, role=TeamMembership.ORGANIZER) TeamMembership.objects.create(team=team, user=faci1, role=TeamMembership.MEMBER) TeamMembership.objects.create(team=team, user=faci2, role=TeamMembership.MEMBER) c = Client() c.login(username='******', password='******') resp = c.get('/en/organize/') self.assertRedirects(resp, '/en/organize/{}/'.format(team.pk)) resp = c.get('/en/organize/{}/'.format(team.pk)) self.assertEqual(resp.status_code, 200) # make sure only the relevant study groups are returned self.assertEqual(len(resp.context['study_groups']), 2) self.assertIn(StudyGroup.objects.get(pk=1), resp.context['study_groups']) self.assertIn(StudyGroup.objects.get(pk=2), resp.context['study_groups'])
def setUp(self): # create staff user user = create_user('*****@*****.**', 'admin', 'bob', 'password') user.is_superuser = True user.is_staff = True user.save() # create 3 non staff create_user('*****@*****.**', 'user', 'One', '123', True) create_user('*****@*****.**', 'user', 'Two', '123', False) create_user('*****@*****.**', 'user', 'Three', '123', True)
def test_cant_edit_other_facilitators_course(self): create_user('*****@*****.**', 'bob2', '2', 'password') user = create_user('*****@*****.**', 'bob123', '123', 'password') course_data = dict(title='Course 1011', provider='CourseMagick', link='https://course.magick/test', caption='learn by means of magic', on_demand=True, topics='html,test', language='en', created_by=user) course = Course.objects.create(**course_data) c = Client() c.login(username='******', password='******') course_url = '/en/course/{}/edit/'.format(course.id) resp = c.get(course_url) self.assertEqual(resp.status_code, 403) course_data['topics'] = 'magic' resp = c.post(course_url, course_data) self.assertEqual(resp.status_code, 403) self.assertEqual(Course.objects.get(pk=course.id).topics, 'html,test')
def test_user_accept_invitation(self): organizer = create_user('*****@*****.**', 'organ', 'test', '1234', False) faci1 = create_user('*****@*****.**', 'faci1', 'test', '1234', False) StudyGroup.objects.filter(pk=1).update(facilitator=faci1) # create team team = Team.objects.create(name='test team') TeamMembership.objects.create(team=team, user=organizer, role=TeamMembership.ORGANIZER) c = Client() c.login(username='******', password='******') resp = c.get('/en/facilitator/team-invitation/') self.assertRedirects(resp, '/en/') invitation = TeamInvitation.objects.create(team=team, organizer=organizer, role=TeamMembership.MEMBER, email=faci1.email) self.assertTrue( TeamInvitation.objects.get(team=team, role=TeamMembership.MEMBER, email__iexact=faci1.email).responded_at is None) invitation_confirmation_url = reverse( 'studygroups_facilitator_invitation_confirm', args=(invitation.id, )) resp = c.post(invitation_confirmation_url, {'response': 'yes'}) self.assertRedirects(resp, '/en/') self.assertEqual( TeamMembership.objects.active().filter(team=team, role=TeamMembership.MEMBER, user=faci1).count(), 1) self.assertFalse( TeamInvitation.objects.get(team=team, role=TeamMembership.MEMBER, email__iexact=faci1.email).responded_at is None)
def test_create_study_group_venue_name_validation(self, handle_new_facilitator): user = create_user('*****@*****.**', 'bob123', 'test', 'password', False) c = Client() c.login(username='******', password='******') data = self.STUDY_GROUP_DATA.copy() data['start_date'] = '07/25/2019', data['meeting_time'] = '07:00 PM', data['venue_name'] = '#@$@' with freeze_time('2019-07-20'): resp = c.post('/en/studygroup/create/legacy/', data) self.assertEquals(resp.status_code, 200) study_groups = StudyGroup.objects.filter(facilitator=user) self.assertEquals(study_groups.count(), 0)
def setUp(self): patcher = patch('studygroups.views.learner.requests.post') self.mock_captcha = patcher.start() self.mock_captcha.json.return_value = {"success": True} self.addCleanup(patcher.stop) mailchimp_patcher = patch( 'studygroups.models.profile.update_mailchimp_subscription') self.mock_maichimp = mailchimp_patcher.start() self.addCleanup(mailchimp_patcher.stop) user = create_user('*****@*****.**', 'admin', 'admin', 'password') user.is_superuser = True user.is_staff = True user.save()
def test_learning_circle_errors(self): user_data = { "email": "*****@*****.**", "first_name": "Ted", "last_name": "Danson", "password": "******" } facilitator = create_user(user_data["email"], user_data["first_name"], user_data["last_name"], user_data["password"]) self.driver.get('%s%s' % (self.live_server_url, '/en/studygroup/create/')) creation_page = LearningCircleCreationPage(self.driver, self.wait) creation_page.go_to_tab_5() creation_page.click_publish_button() self.assertTrue(expected_conditions.visibility_of_element_located(RegistrationModalLocators.REGISTRATION_MODAL)) creation_page.click_login_link() self.assertTrue(expected_conditions.text_to_be_present_in_element(RegistrationModalLocators.REGISTRATION_MODAL_TITLE, 'Log in')) creation_page.fill_out_login_modal(user_data) self.assertTrue(expected_conditions.alert_is_present()) self.assertTrue(expected_conditions.text_to_be_present_in_element(LearningCircleCreationPageLocators.SUCCESS_ALERT, "You're logged in! You can now save or publish your learning circle.")) overlay = self.driver.find_element(*RegistrationModalLocators.MODAL_OVERLAY) self.wait.until(expected_conditions.staleness_of(overlay)) creation_page.click_publish_button() self.assertTrue(expected_conditions.alert_is_present()) self.assertTrue(expected_conditions.text_to_be_present_in_element(LearningCircleCreationPageLocators.DANGER_ALERT, "There was a problem saving your learning circle. Please check the error messages in the form and make the necessary changes.")) creation_page.close_alert() self.assertTrue(expected_conditions.text_to_be_present_in_element(LearningCircleCreationPageLocators.TAB_1_TITLE, "Step 1: Select a Course *")) self.assertTrue(expected_conditions.visibility_of_element_located(LearningCircleCreationPageLocators.ERROR_MESSAGE)) creation_page.go_to_tab_2() self.assertTrue(expected_conditions.visibility_of_all_elements_located(LearningCircleCreationPageLocators.ERROR_MESSAGE)) creation_page.go_to_tab_3() self.assertTrue(expected_conditions.visibility_of_all_elements_located(LearningCircleCreationPageLocators.ERROR_MESSAGE)) creation_page.go_to_tab_4() self.assertTrue(expected_conditions.visibility_of_all_elements_located(LearningCircleCreationPageLocators.ERROR_MESSAGE)) studygroup_count = StudyGroup.objects.all().count() self.assertEqual(studygroup_count, 0)
def setUp(self): with patch('custom_registration.signals.send_email_confirm_email'): user = create_user('*****@*****.**', 'b', 't', 'password', False) user.save() self.facilitator = user sg = StudyGroup.objects.get(pk=1) sg.facilitator = user sg.save() meeting = Meeting() meeting.study_group = sg meeting.meeting_time = timezone.now().time() meeting.meeting_date = timezone.now().date() - datetime.timedelta( days=1) meeting.save() self.meeting = meeting
def test_publish_study_group_email_unconfirmed(self, handle_new_facilitator): user = create_user('*****@*****.**', 'bob', 'test', 'password', False) c = Client() c.login(username='******', password='******') with freeze_time('2018-07-20'): resp = c.post('/api/learning-circle/', data=json.dumps(self.STUDY_GROUP_DATA), content_type='application/json') self.assertEqual(resp.json()['status'], 'created') study_groups = StudyGroup.objects.filter(facilitator=user) self.assertEqual(study_groups.count(), 1) lc = study_groups.first() resp = c.post('/en/studygroup/{0}/publish/'.format(lc.pk)) self.assertRedirects(resp, '/en/studygroup/{}/'.format(lc.pk)) study_group = StudyGroup.objects.get(pk=lc.pk) self.assertEqual(study_group.draft, True)
def test_valid_invite(self): organizer = create_user('*****@*****.**', 'organ', 'test', 'password', False) organizer.first_name = 'Orgaborga' organizer.save() team = Team.objects.create(name='test team') TeamMembership.objects.create(team=team, user=organizer, role=TeamMembership.ORGANIZER) c = Client() c.login(username='******', password='******') invite_url = '/en/organize/team/{0}/member/invite/'.format(team.pk) resp = c.post(invite_url, json.dumps({"email": "humemail.mail"}), content_type="application/json") self.assertEqual(resp.status_code, 200) self.assertEqual(resp.json().get('status'), 'ERROR')
def test_publish_study_group(self, handle_new_facilitator): user = create_user('*****@*****.**', 'bob', 'test', 'password', False) confirm_user_email(user) c = Client() c.login(username='******', password='******') resp = c.post('/api/learning-circle/', data=json.dumps(self.STUDY_GROUP_DATA), content_type='application/json') self.assertEqual(resp.json()['status'], 'created') study_groups = StudyGroup.objects.filter(facilitator=user) self.assertEqual(study_groups.count(), 1) self.assertEqual(study_groups.first().meeting_set.count(), 0) resp = c.post('/en/studygroup/{0}/publish/'.format( study_groups.first().pk)) self.assertRedirects(resp, '/en/facilitator/') study_group = StudyGroup.objects.get(pk=study_groups.first().pk) self.assertEqual(study_group.draft, False) self.assertEqual(study_group.meeting_set.count(), 6)
def test_study_group_final_report_with_responses(self): # TODO return facilitator = create_user('*****@*****.**', 'bowie', 'wowie', 'password') course_data = dict(title='Course 1011', provider='CourseMagick', link='https://course.magick/test', caption='learn by means of magic', on_demand=True, topics='html,test', language='en', created_by=facilitator) course = Course.objects.create(**course_data) sg = StudyGroup.objects.get(pk=1) sg.course = course sg.facilitator = facilitator sg.save() data = dict(self.APPLICATION_DATA) data['study_group'] = sg data['email'] = '*****@*****.**' application = Application(**data) application.save() accept_application(application) self.create_learner_survey_response(sg, application) c = Client() report = reverse('studygroups_final_report', kwargs={'study_group_id': sg.pk}) response = c.get(report) self.assertEqual(response.status_code, 200) self.assertEqual(response.context_data['study_group'], sg) self.assertEqual(response.context_data['registrations'], 1) self.assertEqual(response.context_data['learner_survey_responses'], 1) self.assertEqual(response.context_data['facilitator_survey_responses'], 0) self.assertEqual(response.context_data['course'], course) self.assertEqual(response.context_data['goals_met_chart'], "image")
def test_user_forbidden(self): user = create_user('*****@*****.**', 'bob', 'test', 'password') c = Client() c.login(username='******', password='******') def assertForbidden(url): resp = c.get(url) self.assertEqual(resp.status_code, 403) assertForbidden('/en/organize/') assertForbidden('/en/weekly-update/') assertForbidden('/en/studygroup/1/') assertForbidden('/en/studygroup/1/edit/') assertForbidden('/en/studygroup/1/message/compose/') assertForbidden('/en/studygroup/1/message/edit/1/') assertForbidden('/en/studygroup/1/message/1/') assertForbidden('/en/studygroup/1/member/add/') assertForbidden('/en/studygroup/1/member/1/delete/') assertForbidden('/en/studygroup/1/meeting/create/') assertForbidden('/en/studygroup/1/meeting/2/edit/') assertForbidden('/en/studygroup/1/meeting/2/delete/')