Ejemplo n.º 1
0
def test_invitations_list_context_data(total_invitations, user_type,
                                       expected_count, adg_admin,
                                       request_factory, bu_admin):
    """
    Test context_data for `PendingInvitationListView`.
    """
    InvitationFactory.create_batch(
        total_invitations,
        status=Invitation.PENDING,
        permission=Invitation.BU_ADMIN,
        business_unit=bu_admin.business_unit,
    )
    InvitationFactory.create_batch(
        total_invitations,
        status=Invitation.PENDING,
        permission=Invitation.ADG_ADMIN,
    )

    admin = adg_admin if user_type == ADG_ADMIN else bu_admin
    url = reverse('pending_invitations')
    pending_invitations_get_request = request_factory.get(url)

    pending_invitations_get_request.user = admin
    response = admin_dashboard_views.PendingInvitationListView.as_view()(
        pending_invitations_get_request)
    actual_invitations_list = response.context_data['pending_invitations']

    assert len(actual_invitations_list) == expected_count
Ejemplo n.º 2
0
def test_invitation_form_and_extract_form_error(
    email, business_unit, permission, status, expected_is_valid, expected_error, business_line
):
    """
    Test the validity of invitation form with different form values and error returned by extract_form_error
    """
    business_line_id = business_line.id if business_unit else None

    if email in ['*****@*****.**', '*****@*****.**']:
        admin_type = ADG_ADMIN if status == Invitation.ADG_ADMIN else BU_ADMIN
        _, _, admins, _ = create_admin_accounts(1, admin_type, True)
        email = admins[0].email

    elif email == '*****@*****.**':
        InvitationFactory(email=email, status=status)

    form_values = {
        'email': email,
        'business_unit': business_line_id,
        'permission': permission,
        'action_type': 'invitation',
        'status': status
    }
    invitation_form = InvitationForm(form_values)
    actual_is_valid = invitation_form.is_valid()

    if not actual_is_valid:
        actual_error = extract_form_error(invitation_form.errors.as_data())

        if expected_error in [ALREADY_ADMIN_ERROR, ALREADY_INVITED_ADMIN_ERROR]:
            expected_error = expected_error.format(email=email)

        assert actual_error == expected_error

    assert actual_is_valid == expected_is_valid
Ejemplo n.º 3
0
def test_add_registration_form_defaults(mocker):
    """
    Tests that `add_registration_form_defaults` adds default values to registration form fields.
    """
    is_testing_environment = mocker.patch('openedx.adg.lms.registration_extension.forms.is_testing_environment')
    is_testing_environment.return_value = False

    business_line = BusinessLineFactory()
    invitation_obj = InvitationFactory(email='*****@*****.**', status=1, business_unit=business_line)

    request = RequestFactory().get('/register', data={'email': invitation_obj.email})

    mocked_form_desc = MagicMock(fields=[
        {'name': 'email', 'restrictions': {}, 'defaultValue': ''},
        {'name': 'is_adg_employee', 'defaultValue': ''},
        {'name': 'company', 'options': [{'value': business_line.title, 'default': ''}]}
    ])
    form_desc = add_registration_form_defaults(request, mocked_form_desc)

    for form in form_desc.fields:
        if form['name'] == 'email':
            assert form['defaultValue'] == '*****@*****.**'
        elif form['name'] == 'is_adg_employee':
            assert form['defaultValue']
        elif form['name'] == 'company':
            for option in form['options']:
                if option['value'] == business_line.title:
                    assert option['default']
Ejemplo n.º 4
0
def test_base_list_view__edit_invitation(request_factory, view, url, template,
                                         key, object_exists, error,
                                         business_line, super_user, adg_admin,
                                         mocker):
    """
    Test post method of `BaseListView`
    """
    mock_render = mocker.patch(
        'openedx.adg.admin_dashboard.admin_settings.views.render')
    mocker.patch.object(admin_dashboard_views.Invitation,
                        'get_permissions_for_user',
                        return_value={})
    mocker.patch.object(admin_dashboard_views.Invitation,
                        'get_permissions_data',
                        return_value={})
    mocker.patch.object(admin_dashboard_views.BusinessLine,
                        'business_lines_for_user',
                        return_value={})
    mocker.patch(
        'openedx.adg.admin_dashboard.admin_settings.views.get_admin_details',
        return_value={})
    mocker.patch(
        'openedx.adg.admin_dashboard.admin_settings.views.BaseListView.save_forms'
    )
    mocker.patch(
        'openedx.adg.admin_dashboard.admin_settings.views.ListView.get_context_data',
        return_value={
            ('invitations' if key == 'pending_invitations' else key): {}
        })

    email = adg_admin.email if object_exists else TEST_EMAIL
    status = Invitation.ACCEPTED if object_exists else None

    if object_exists and view == admin_dashboard_views.PendingInvitationListView:
        invitation = InvitationFactory(email=TEST_EMAIL,
                                       status=Invitation.PENDING)
        status = Invitation.PENDING
        email = invitation.email

    request = request_factory.post(reverse(url),
                                   data=create_post_request_data(
                                       EDIT_INVITATION, email,
                                       Invitation.BU_ADMIN, business_line))
    request.user = super_user
    view.as_view()(request)

    error = '' if object_exists else error.format(email=email)
    invitations = create_invitations_dictionary(email, Invitation.BU_ADMIN,
                                                business_line, EDIT_INVITATION,
                                                status)
    expected_context = create_base_list_view_context(key, url, error,
                                                     invitations,
                                                     EDIT_INVITATION,
                                                     PERMISSIONS_UPDATED)

    mock_render.assert_called_once_with(
        request, f'adg/admin_dashboard/admin_settings/{template}',
        expected_context)
Ejemplo n.º 5
0
def test_update_permissions_view__adg_admin(request_factory, super_user):
    """
    Test that UpdatePermissionsView grants adg_admin permissions to the user
    """
    update_permissions_view = admin_dashboard_views.UpdatePermissionsView
    request = request_factory.get(reverse('update_permissions'))
    InvitationFactory.create(status=Invitation.PENDING,
                             permission=Invitation.ADG_ADMIN,
                             email=super_user.email)

    group = GroupFactory(name='ADG Admins')

    request.user = super_user
    update_permissions_view.as_view()(request)
    invitation_obj = Invitation.objects.get(email=super_user.email)

    assert super_user.groups.first() == group
    assert invitation_obj.status == Invitation.ACCEPTED
    assert super_user.is_staff
Ejemplo n.º 6
0
def test_get_invitation_for_email(status):
    """
    Test that get_invitation_for_email returns invitation object in case the invitation against an email exists of
    either pending or accepted status and None in case the status is cancelled
    """
    invitation = InvitationFactory(email=TEST_EMAIL, status=status)
    actual_invitation = Invitation.objects.get_invitation_for_email(TEST_EMAIL)

    if status == Invitation.CANCELLED:
        assert actual_invitation is None
    else:
        assert actual_invitation == invitation
Ejemplo n.º 7
0
def test_update_permissions_view__bu_admin(request_factory, super_user,
                                           bu_admin):
    """
    Test that UpdatePermissionsView grants bu_admin permissions to the user
    """
    update_permissions_view = admin_dashboard_views.UpdatePermissionsView
    request = request_factory.get(reverse('update_permissions'))
    InvitationFactory.create(status=Invitation.PENDING,
                             permission=Invitation.BU_ADMIN,
                             business_unit=bu_admin.business_unit,
                             email=super_user.email)

    group = GroupFactory(name=bu_admin.business_unit)
    bu_admin.business_unit.group = group
    bu_admin.business_unit.save()

    request.user = super_user
    update_permissions_view.as_view()(request)
    invitation_obj = Invitation.objects.get(email=super_user.email)

    assert group == super_user.groups.first()
    assert invitation_obj.status == Invitation.ACCEPTED
    assert super_user.is_staff