Desafio_Quality

API REST desenvolvida pelo grupo Beta Campers para o Desafio Quality focado em testes durante o IT Bootcamp Backend Java (wave 6).

Autores

Sumário

Observações

Funcionalidades

Imóveis

POST /api/v1/property
Cadastra um novo imóvel.

Payload Example:
{
        "propName": "Casa A",
        "districtId": 1,
        "propRooms": [
            {
                "roomName": "Quarto de solteiro",
                "roomWidth": 2.5,
                "roomLength": 4.2
            },
            {
                "roomName": "Quarto de casal",
                "roomWidth": 3.5,
                "roomLength": 4.6
            },
            {
                "roomName": "Cozinha",
                "roomWidth": 3.6,
                "roomLength": 4.8
            },
            {
                "roomName": "Banheiro",
                "roomWidth": 1.8,
                "roomLength": 2.4
            }
        ]
 }
    
Response:

{
    "propId": 1,
    "propName": "Casa A",
    "propDistrict": {
        "districtId": 1,
        "districtName": "lalala",
        "valueDistrictM2": 12
    },
    "propRooms": [
        {
            "roomName": "Quarto de solteiro",
            "roomWidth": 2.5,
            "roomLength": 4.2
        },
        {
            "roomName": "Quarto de casal",
            "roomWidth": 3.5,
            "roomLength": 4.6
        },
        {
            "roomName": "Cozinha",
            "roomWidth": 3.6,
            "roomLength": 4.8
        },
        {
            "roomName": "Banheiro",
            "roomWidth": 1.8,
            "roomLength": 2.4
        }
    ]
}
  • Será validado se:
    • O nome do imóvel não está vazio
    • O nome do imóvel começa com letra maiúscula
    • O nome do imóvel não excede o limite de 30 caracteres
    • O nome do bairro não está vazio
    • O imóvel tem pelo menos um cômodo
    • O nome do cômodo não pode estar vazio
    • O nome do cômodo começa com letra maiúscula
    • O nome do cômodo não excede o limite de 30 caracteres
    • A largura do cômodo não está vazia
    • A largura do cômodo não excede o limite de 25 metros
    • O comprimento do cômodo não excede 33 metros

GET /api/v1/1/area
Retorna a área de um imóvel.

Response:
48.2

GET /api/v1/1/value
Retorna o valor de um imóvel.

Response:
482.00

GET /api/v1/1/largest-room
Retorna o maior cômodo do imóvel.

Response:
{
    "roomName": "Cozinha",
    "roomWidth": 3.6,
    "roomLength": 4.8,
    "roomArea": 17.28
}

GET /api/v1/1/roomsArea
Retorna nome, largura, comprimento e área de um cômodo.

Response:
[
    {
        "roomName": "Quarto de solteiro",
        "roomWidth": 2.5,
        "roomLength": 4.2,
        "roomArea": 10.5
    },
    {
        "roomName": "Quarto de casal",
        "roomWidth": 3.5,
        "roomLength": 4.6,
        "roomArea": 16.099999999999998
    },
    {
        "roomName": "Cozinha",
        "roomWidth": 3.6,
        "roomLength": 4.8,
        "roomArea": 17.28
    },
    {
        "roomName": "Banheiro",
        "roomWidth": 1.8,
        "roomLength": 2.4,
        "roomArea": 4.32
    }
]

Bairros

POST /api/v1/1/district
Cadastra um novo bairro.

Payload example:
    {
    "districtName" : "Centro",
    "valueDistrictM2" : "12"
    }
    
Response:
    {
    "districtId": 1,
    "districtName": "Centro",
    "valueDistrictM2": 70
    }
    
  • Será validado se:
    • O nome do bairro não está vazio
    • O nome do bairro começa com letra maiúscula
    • O nome do imóvel não excede o limite de 45 caracteres
    • O valor do m2 do bairro não está vazio
    • O valor do m2 não excede 13 dígitos e 2 casas decimais

GET /api/v1/1/district/1
Retorna o bairro de acordo com o Id passado.

Response:
{
    "districtId": 1,
    "districtName": "Centro",
    "valueDistrictM2": 70
}

Testes

Testes Unitários Repositório District

getById_returnDistrict_whenDistrictExists
Testa o caso do método getById, quando o bairro existe e deve retornar o bairro. É gerado um bairro como exemplo e ele é salvo. Em seguida é aplicado o método getById.

Por fim é analisado se:

  • O resultado retornado do getById não é null
  • Se o id retornado é igual ao requisitado
  • Se o nome retornado é igual ao requisitado

getById_throwException_whenDistrictNotExist
Testa o caso do método getById, de quando o bairro não existe e lança uma exceção. É gerado um bairro sem Id e é esperado que quando for usado o método getById retorne uma exceção.

Por fim é analisado se:

  • Se contém o Id do bairro na mensagem de erro
  • Se o Status recebido é NOT FOUND

save_returnDistrict_whenNewDistrict
Testa o caso do método save, quando é adicionado um novo bairro e o mesmo é retornado. É gerado um novo bairro e ele é aplicado o método save.

Por fim é analisado se:

  • O resultado retornado do save não é null
  • Se o id retornado é positivo
  • Se o nome do bairro retornado é o mesmo do bairro criado.

save_updateDistrict_whenDistrictWithId
Testa o caso do método save, quando é o bairro existe e é atualizado. É gerado um novo bairro com Id e ele é salvo. É modificado o nome e o valor é salvo.

Por fim é analisado se:

  • O resultado retornado do save não é null
  • Se o Id retornado continua sendo o mesmo
  • Se o nome do bairro foi atualizado

save_throwException_whenDistrictIdExistsAndDistrictNotExist
Testa o caso do método save, de quando o Id já existe e o bairro não existe e lança uma exceção. É gerado um bairro com Id e é esperado que quando for usado o método save retorne uma exceção.

Por fim é analisado se:

  • Se contém o Id do bairro na mensagem de erro
  • Se o Status recebido é NOT FOUND

Testes Unitários Repositório Property

getById_returnProperty_whenPropertyExist
Testa o caso do método getById, quando o imóvel existe e deve retornar o imóvel. É gerado um imóvel como exemplo e ele é salvo. Em seguida é aplicado o método getById.

Por fim é analisado se:

  • O resultado retornado do getById não é null
  • Se o id retornado é igual ao requisitado

getById_throwException_whenPropertyNotExist
Testa o caso do método getById, de quando o imóvel não existe e lança uma exceção. É gerado um imóvel sem Id e é esperado que quando for usado o método getById retorne uma exceção.

Por fim é analisado se:

  • Se contém o Id não existente do imóvel na mensagem de erro
  • Se o Status recebido é NOT FOUND

save_returnProperty_whenNewProperty
Testa o caso do método save, quando é adicionado um novo imóvel e o mesmo é retornado. É gerado um novo imóvel e nele é aplicado o método save.

Por fim é analisado se:

  • O resultado retornado do save não é null

save_throwException_whenNull
Testa o caso do método save, quando o parâmetro passado é null e lança uma exceção. É verificado se a exceção é lançada quando o parâemtro é null.