Ejemplo n.º 1
0
def test_find_assignment_without_resource_id(
    lti1p3_provider, describe, make_function_spy, admin_user, logged_in,
    session, app
):
    with describe('setup'), logged_in(admin_user):
        lti_course = helpers.to_db_object(
            helpers.create_lti_course(session, app, admin_user), m.Course
        )
        spy = make_function_spy(
            flask_sqlalchemy.BaseQuery, 'filter', pass_self=True
        )

    with describe('find_assignment does not query without resource_id'):
        res = lti1p3_provider.find_assignment(lti_course, None, None)
        assert res is None
        assert not spy.called
Ejemplo n.º 2
0
def test_get_self_from_course(
    describe, admin_user, test_client, session, app, logged_in
):
    with describe('setup'), logged_in(admin_user):
        course = helpers.to_db_object(
            helpers.create_course(test_client), m.Course
        )
        lti_course = helpers.to_db_object(
            helpers.create_lti_course(session, app, admin_user), m.Course
        )

    with describe('Getting without course should return none'):
        assert m.LTI1p1Provider._get_self_from_course(None) is None

    with describe('Getting for non LTI course should return none'):
        assert m.LTI1p1Provider._get_self_from_course(course) is None

    with describe('Getting with LTI course should return instance'):
        prov = m.LTI1p1Provider._get_self_from_course(lti_course)
        assert prov is not None
        assert lti_course.lti_provider.id == prov.id

    with describe('Getting for for other LTI class should return none'):
        assert m.LTI1p3Provider._get_self_from_course(lti_course) is None
Ejemplo n.º 3
0
def test_webhooks_group_join_lti(describe, logged_in, session, test_client,
                                 monkeypatch, stub_function_class, admin_user,
                                 app):
    with describe('setup'):
        course = helpers.create_lti_course(session, app)
        assig = helpers.create_lti_assignment(session, course, state='open')
        teacher = helpers.create_user_with_role(session, 'Teacher', [course])
        student1 = helpers.create_user_with_role(session, 'Student', [course])
        student2 = helpers.create_user_with_role(session, 'Student', [course])
        url = f'/api/v1/assignments/{assig.id}'

        with logged_in(teacher):
            group_set = helpers.create_group_set(test_client, course, 1, 2,
                                                 [assig])
            group = m.Group.query.get(
                helpers.create_group(test_client, group_set, [])['id'])
            test_client.req(
                'patch',
                url,
                200,
                data={
                    'files_upload_enabled': True,
                    'webhook_upload_enabled': True,
                },
            )

    with describe('Can join group without webhook'):
        with logged_in(student2):
            test_client.req(
                'post',
                f'/api/v1/groups/{group.id}/member',
                200,
                data={'username': student2.username},
            )

    with describe('Cannot make webhook with unfinished group'):
        with logged_in(student2):
            test_client.req('post', f'{url}/webhook_settings?webhook_type=git',
                            400)

        session.add(
            m.AssignmentResult(
                user_id=student2.id,
                assignment_id=assig.id,
                sourcedid=str(uuid.uuid4()),
            ))
        session.commit()

        with logged_in(student2):
            group_webhook = test_client.req(
                'post', f'{url}/webhook_settings?webhook_type=git', 200)

    with describe(
            'Cannot join group as it has a webhook but user does not have sourcedid'
    ):
        with logged_in(student1):
            test_client.req(
                'post',
                f'/api/v1/groups/{group.id}/member',
                400,
                data={'username': student1.username},
            )

        with logged_in(student1):
            # Cannot create individual webhook
            test_client.req('post', f'{url}/webhook_settings?webhook_type=git',
                            400)

        session.add(
            m.AssignmentResult(
                user_id=student1.id,
                assignment_id=assig.id,
                sourcedid=str(uuid.uuid4()),
            ))
        session.commit()

        with logged_in(student1):
            _, rv = test_client.req(
                'post',
                f'/api/v1/groups/{group.id}/member',
                200,
                data={'username': student1.username},
                include_response=True,
            )
            assert 'warning' not in rv.headers

        with logged_in(student1):
            # And we now get the group webhook config.
            test_client.req('post',
                            f'{url}/webhook_settings?webhook_type=git',
                            200,
                            result=group_webhook)