예제 #1
0
    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)
예제 #2
0
    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/')
예제 #3
0
    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')
예제 #5
0
    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)
예제 #8
0
    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)
예제 #10
0
 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)
예제 #11
0
    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'])
예제 #12
0
    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)
예제 #13
0
    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)
예제 #15
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)
예제 #16
0
    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)
예제 #17
0
    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)))
예제 #18
0
    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'])
예제 #19
0
 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()
예제 #24
0
    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)
예제 #25
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)
예제 #27
0
    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)
예제 #29
0
    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/')