예제 #1
0
    def test_account_request_insert_raise_ApiError_if_username_already_exist(
            self, mock_get_user_by_username):
        # Arrange
        mock_user = Mock(spec=User)
        mock_user.username = "******"
        mock_get_user_by_username.return_value = mock_user

        # Act # Assert
        with self.assertRaises(ApiError):
            account_request_api.insert(mock_user)
예제 #2
0
def post(request):
    """ Create a new account request

    Parameters:

        {
            "username": "******",
            "firstname": "firstname",
            "lastname": "lastname",
            "password": "******",
            "email": "email"
        }

    Args:

        request: HTTP request

    Returns:

        - code: 200
          content: Requested Account
        - code: 400
          content: Validation error / missing parameters
    """
    try:
        # Get parameters
        username = request.DATA['username']
        first_name = request.DATA['firstname']
        last_name = request.DATA['lastname']
        password = request.DATA['password']
        email = request.DATA['email']

        account_request_from_request = AccountRequest(username, first_name,
                                                      last_name, password,
                                                      email)
        try:
            # Create the request
            request_content = account_request_api.insert(
                account_request_from_request)
            # Serialize the request
            serializer = AccountRequestSerializer(request_content)
            if serializer.is_valid():
                return Response(serializer.data, status=status.HTTP_200_OK)
            else:
                content = {'message': 'Serialization failed'}
                return Response(content, status=status.HTTP_400_BAD_REQUEST)

        except Exception as api_exception:
            content = {'message': api_exception.message}
            return Response(content, status=status.HTTP_400_BAD_REQUEST)

    except Exception as e:
        content = {'message': 'Expected parameters not provided.'}
        logger.exception(e.message)
        return Response(content, status=status.HTTP_400_BAD_REQUEST)
예제 #3
0
    def create(self, validated_data):
        """Create and return a new `AccountRequest` instance, given the validated data."""
        user = User(
            username=validated_data["username"],
            first_name=validated_data["first_name"],
            last_name=validated_data["last_name"],
            email=validated_data["email"],
            password=make_password(validated_data["password"]),
            is_active=False,
        )

        return account_request_api.insert(user)
예제 #4
0
    def test_account_request_insert_return_request(self,
                                                   mock_get_user_by_username,
                                                   mock_save):
        # Arrange
        mock_user = Mock(spec=User)
        mock_user.username = "******"
        mock_get_user_by_username.side_effect = ObjectDoesNotExist()
        mock_save.return_value = self.mock_account_request

        # Act
        result = account_request_api.insert(mock_user)

        # Assert
        self.assertIsInstance(result, AccountRequest)
예제 #5
0
def post(request):
    """
        Post a new account request

        Parameters:
            request (HttpRequest): request

        Returns:
            Response object
    """
    try:
        # Get parameters
        username = request.DATA['username']
        first_name = request.DATA['firstname']
        last_name = request.DATA['lastname']
        password = request.DATA['password']
        email = request.DATA['email']

        account_request_from_request = AccountRequest(username, first_name,
                                                      last_name, password,
                                                      email)
        try:
            # Create the request
            request_content = account_request_api.insert(
                account_request_from_request)
            # Serialize the request
            serializer = AccountRequestSerializer(request_content)
            if serializer.is_valid():
                return Response(serializer.data, status=status.HTTP_200_OK)
            else:
                content = {'message': 'Serialization failed'}
                return Response(content, status=status.HTTP_400_BAD_REQUEST)

        except Exception as api_exception:
            content = {'message': api_exception.message}
            return Response(content, status=status.HTTP_400_BAD_REQUEST)

    except Exception as e:
        content = {'message': 'Expected parameters not provided.'}
        logger.exception(e.message)
        return Response(content, status=status.HTTP_400_BAD_REQUEST)
예제 #6
0
def request_new_account(request):
    """Page that allows to request a user account

    Parameters:
        request:

    Returns: Http response
    """
    assets = {
        "js": [{
            "path": "core_website_app/user/js/user_account_req.js",
            "is_raw": False
        }],
        "css": ["core_website_app/user/css/list.css"],
    }

    if request.method == "POST":
        request_form = RequestAccountForm(request.POST)
        if request_form.is_valid():
            # Call the API
            try:
                request_form_data = request_form.cleaned_data

                user = User(
                    username=request_form_data.get("username"),
                    first_name=request_form_data.get("firstname"),
                    last_name=request_form_data.get("lastname"),
                    password=make_password(request_form_data.get("password1")),
                    email=request_form_data.get("email"),
                    is_active=False,
                )

                account_request_api.insert(user)

                messages.add_message(
                    request,
                    messages.INFO,
                    "User Account Request sent to the administrator.",
                )
                return redirect(reverse("core_main_app_homepage"))
            except ApiError as e:
                error_message = str(e)

                error_template = get_template(
                    "core_website_app/user/request_error.html")
                error_box = error_template.render(
                    {"error_message": error_message})

                return render(
                    request,
                    "core_website_app/user/request_new_account.html",
                    assets=assets,
                    context={
                        "request_form": request_form,
                        "action_result": error_box
                    },
                )
            except ValidationError as e:
                error_message = "The following error(s) occurred during " "validation:"
                error_items = [str(error) for error in e.messages]

                error_template = get_template(
                    "core_website_app/user/request_error.html")
                error_box = error_template.render({
                    "error_message": error_message,
                    "error_items": error_items
                })

                return render(
                    request,
                    "core_website_app/user/request_new_account.html",
                    assets=assets,
                    context={
                        "request_form": request_form,
                        "action_result": error_box
                    },
                )
    else:
        request_form = RequestAccountForm()

    return render(
        request,
        "core_website_app/user/request_new_account.html",
        assets=assets,
        context={"request_form": request_form},
    )
예제 #7
0
def request_new_account(request):
    """Page that allows to request a user account

        Parameters:
            request:

        Returns: Http response
    """
    assets = {
        "js": [
            {
                "path": "core_website_app/user/js/user_account_req.js",
                "is_raw": False
            }
        ],
        "css": ['core_website_app/user/css/list.css']
    }

    if request.method == 'POST':
        request_form = RequestAccountForm(request.POST)
        if request_form.is_valid():
            # Call the API
            try:
                user = User(username=request.POST['username'],
                            first_name=request.POST['firstname'],
                            last_name=request.POST['lastname'],
                            password=make_password(request.POST['password']),
                            email=request.POST['email'],
                            is_active=False)

                account_request_api.insert(user)

                messages.add_message(request, messages.INFO, 'User Account Request sent to the administrator.')
                return redirect(reverse("core_main_app_homepage"))
            except ApiError as e:
                error_message = e.message

                error_template = get_template("core_website_app/user/request_error.html")
                error_box = error_template.render({"error_message": error_message})

                return render(request, 'core_website_app/user/request_new_account.html',
                              assets=assets,
                              context={'request_form': request_form, 'action_result': error_box})
            except ValidationError as e:
                error_message = "The following error(s) occurred during validation:"
                error_items = [str(field).capitalize() + ": " + str(error) for field, error in e.errors.items()]

                error_template = get_template("core_website_app/user/request_error.html")
                error_box = error_template.render({"error_message": error_message, "error_items": error_items})

                return render(request, 'core_website_app/user/request_new_account.html',
                              assets=assets,
                              context={'request_form': request_form, 'action_result': error_box})
    else:
        request_form = RequestAccountForm()

    context = {
        "request_form": request_form
    }

    return render(request, 'core_website_app/user/request_new_account.html', assets=assets, context=context)