loopbackio / loopbackio/loopback-next

Required model property with default value throws error when property not provided in create

Open
#3,058 11 comments 2 reactions 1 assignee View on GitHub

@aharbis is already working on this.

Since Jun 7, 2019.

bug good first issue Hacktoberfest REST Validation
Dominant language
TypeScript
Stars
5.1k
Forks
1.1k
Avg merge
2d 21h
Merged PRs (30d)
27

Description

Description / Steps to reproduce / Feature proposal

Given a model property that is defined as required with a default value, trying to create a new model instance and omitting that property from the request yields a 422 error stating the property is missing.

For example, given the following model property definition:

  @property({
    type: 'string',
    required: true,
    default: 'admin',
  })
  username: string;

Trying to create a model instance and omitting the username property yields:

{
    "error": {
        "statusCode": 422,
        "name": "UnprocessableEntityError",
        "message": "The request body is invalid. See error object `details` property for more info.",
        "code": "VALIDATION_FAILED",
        "details": [
            {
                "path": "",
                "code": "required",
                "message": "should have required property 'username'",
                "info": {
                    "missingProperty": "username"
                }
            }
        ]
    }
}

I've recreated the issue using the todo application, and you can view that on my forked feature branch:

https://github.com/aharbis/loopback-next/tree/default-property

I am using Node v10.15.3, and based the recreate on an up-to-date fork of loopback-next.

Current Behavior

The default value defined for the model property is not utilized, and instead a 422 error is thrown stating the required property is missing.

Expected Behavior

If a required property has a default value, and the given property is not provided in the request to create the model instance, the default value should be used.

Finalized agreement:
LoopBack follow the OpenAPI standard and make no interpretations.
required means the user needs to provide the field in the request always, independent of the default.

i.e default: xxx, required: true shouldn't be set at the same time.

Accpetance Criteria

  • Update the docs Models.md, add explanations and examples
  • Add validation to check if the two fields is set at the runtime

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.