fga-eps-mds / 2022-1-MeasureSoftGram-Doc

Repositório destinado à documentação do projeto MeasureSoftGram para a disciplinas de EPS durante o semestre 01/2022
https://fga-eps-mds.github.io/2022-1-MeasureSoftGram-Doc/
GNU General Public License v3.0
0 stars 1 forks source link

Criar uma pré-configuração de um produto via API #266

Closed durvalcarvalho closed 2 years ago

durvalcarvalho commented 2 years ago

Descrição

Eu como Miguel, gostaria de criar pré-configurações de produtos via API, pois dessa maneira eu poderia integrar o sistema do MeasureSoftGram com o sistema já existente que utilizam na organização que trabalho, permitindo assim que os usuários desse sistema atual consigam utilizar o MeasureSoftGram sem precisar abrir outro site.

Critérios de Aceitação:

Observações

Para testar esses critérios de aceitação foi sugerido situações de teste neste comentário.

durvalcarvalho commented 2 years ago

Como testar a API com base nos critérios de aceitação

Durante a criação de um produto deve-se sempre criar uma pré-configuração default

Faça uma requisição para o endpoint /api/v1/organizations/ID1/products/ enviando os campos name e description e depois consulte o endpoint /api/v1/organizations/ID1/products/ID2/current/pre-config/ onde ID1 é o identificador de uma organização e ID2 é o identificador do produto recém criado.

Exemplo:

# Criação de um produto
curl --location --request POST 'https://measuresoftgram-service.herokuapp.com/api/v1/organizations/4/products/' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "morpheus-dream",
    "description": "Sistema de geração de filmes aleatórios"
}'

# Obtençao da pré-configuração do produto recem criado
curl --location --request GET 'https://measuresoftgram-service.herokuapp.com/api/v1/organizations/4/products/5/current/pre-config/'





Uma vez criado uma nova pré-configuração ela deve ser considerada a pré-configuração vigente

Crie uma nova pré-configuração no endpoint /api/v1/organizations/ID1/products/ID2/create/pre-config/ e depois faça outra requisição para o endpoint /api/v1/organizations/ID1/products/ID2/current/pre-config/, onde ID1 é o identificador de uma organização e ID2 é o identificador de um produto.

Exemplo:

# Pré-configuração válida
curl --location --request POST 'https://measuresoftgram-service.herokuapp.com/api/v1/organizations/4/products/5/create/pre-config/' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "Nova pre-config da release V13.13.13",
    "data": {
        "characteristics": [
            {
                "key": "reliability",
                "weight": 60,
                "subcharacteristics": [
                    {
                        "key": "testing_status",
                        "weight": 100,
                        "measures": [
                            {
                                "key": "passed_tests",
                                "weight": 33
                            },
                            {
                                "key": "test_builds",
                                "weight": 33
                            },
                            {
                                "key": "test_coverage",
                                "weight": 34
                            }
                        ]
                    }
                ]
            },
            {
                "key": "maintainability",
                "weight": 40,
                "subcharacteristics": [
                    {
                        "key": "modifiability",
                        "weight": 100,
                        "measures": [
                            {
                                "key": "non_complex_file_density",
                                "weight": 33
                            },
                            {
                                "key": "commented_file_density",
                                "weight": 33
                            },
                            {
                                "key": "duplication_absense",
                                "weight": 34
                            }
                        ]
                    }
                ]
            }
        ]
    }
}'

# Obtençao da pré-configuração vigente do produto em questão
curl --location --request GET 'https://measuresoftgram-service.herokuapp.com/api/v1/organizations/4/products/5/current/pre-config/'





Deve ser possível visualizar a pré-configuração vigente de um produto

Faça uma requisição para o endpoint /api/v1/organizations/ID1/products/ID2/current/pre-config/, onde ID1 é o identificador de uma organização e ID2 é o identificador de um produto.

Exemplo:

# Obtençao da pré-configuração vigente do produto em questão
curl --location --request GET 'https://measuresoftgram-service.herokuapp.com/api/v1/organizations/4/products/5/current/pre-config/'





Não deve ser aceito pré-configurações com entidades (medidas, subcaracterísticas, características) inválidas

Tente cria uma requisição inválida utilizando o endpoint /api/v1/organizations/ID1/products/ID2/create/pre-config/, onde ID1 é o identificador de uma organização e ID2 é o identificador de um produto.

É esperado que seja retornado uma resposta indicando o problema na requisição e que não seja criado nenhuma nova pré-configuração.

Exemplo:

# Criação de uma pré-configuração inválida: formato inválido
curl --location --request POST 'https://measuresoftgram-service.herokuapp.com/api/v1/organizations/4/products/5/create/pre-config/' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "Pré-config inválida",
    "data": {
        "characteristics": [
            {
                "key": "reliability",
                "weight": 60,
                "subcharacteristics": []
            }
        ]
    }
}'

# Criação de uma pré-configuração inválida: characteristics inválida
curl --location --request POST 'https://measuresoftgram-service.herokuapp.com/api/v1/organizations/4/products/5/create/pre-config/' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "Pré-config inválida",
    "data": {
        "characteristics": [
            {
                "key": "fake-characteristics",
                "weight": 60,
                "subcharacteristics": [
                    {
                        "key": "testing_status",
                        "weight": 100,
                        "measures": [
                            {
                                "key": "passed_tests",
                                "weight": 33
                            },
                            {
                                "key": "test_builds",
                                "weight": 33
                            },
                            {
                                "key": "test_coverage",
                                "weight": 34
                            }
                        ]
                    }
                ]
            }
        ]
    }
}'

# Criação de uma pré-configuração inválida: subcharacteristics modifiability associada com a characteristics reliability
curl --location --request POST 'https://measuresoftgram-service.herokuapp.com/api/v1/organizations/4/products/5/create/pre-config/' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "Pré-config inválida",
    "data": {
        "characteristics": [
            {
                "key": "reliability",
                "weight": 60,
                "subcharacteristics": [
                    {
                        "key": "modifiability",
                        "weight": 100,
                        "measures": [
                            {
                                "key": "passed_tests",
                                "weight": 33
                            },
                            {
                                "key": "test_builds",
                                "weight": 33
                            },
                            {
                                "key": "test_coverage",
                                "weight": 34
                            }
                        ]
                    }
                ]
            }
        ]
    }
}'





A somatória dos pesos das entidades de um mesmo nível da pré-configuração deve sempre ser igual a 100.

Tente cria uma requisição inválida utilizando o endpoint /api/v1/organizations/ID1/products/ID2/create/pre-config/, onde ID1 é o identificador de uma organização e ID2 é o identificador de um produto.

É esperado que somente pré-configuração em que os pesos do mesmo nível da árvore é 100 sejam aceitas.

Exemplo:

# Criação de uma pré-configuração válida
curl --location --request POST 'https://measuresoftgram-service.herokuapp.com/api/v1/organizations/4/products/5/create/pre-config/' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "Nova pre-config da release V5.1.0",
    "data": {
        "characteristics": [
            {
                "key": "reliability",
                "weight": 60,
                "subcharacteristics": [
                    {
                        "key": "testing_status",
                        "weight": 100,
                        "measures": [
                            {
                                "key": "passed_tests",
                                "weight": 33
                            },
                            {
                                "key": "test_builds",
                                "weight": 33
                            },
                            {
                                "key": "test_coverage",
                                "weight": 34
                            }
                        ]
                    }
                ]
            },
            {
                "key": "maintainability",
                "weight": 40,
                "subcharacteristics": [
                    {
                        "key": "modifiability",
                        "weight": 100,
                        "measures": [
                            {
                                "key": "non_complex_file_density",
                                "weight": 33
                            },
                            {
                                "key": "commented_file_density",
                                "weight": 33
                            },
                            {
                                "key": "duplication_absense",
                                "weight": 34
                            }
                        ]
                    }
                ]
            }
        ]
    }
}'

# Criação de uma pré-configuração inválida: a somatória dos pesos das characteristics não sáo igual a 100
curl --location --request POST 'https://measuresoftgram-service.herokuapp.com/api/v1/organizations/4/products/5/create/pre-config/' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "Nova pre-config da release V5.1.0",
    "data": {
        "characteristics": [
            {
                "key": "reliability",
                "weight": 10,
                "subcharacteristics": [
                    {
                        "key": "testing_status",
                        "weight": 100,
                        "measures": [
                            {
                                "key": "passed_tests",
                                "weight": 33
                            },
                            {
                                "key": "test_builds",
                                "weight": 33
                            },
                            {
                                "key": "test_coverage",
                                "weight": 34
                            }
                        ]
                    }
                ]
            },
            {
                "key": "maintainability",
                "weight": 40,
                "subcharacteristics": [
                    {
                        "key": "modifiability",
                        "weight": 100,
                        "measures": [
                            {
                                "key": "non_complex_file_density",
                                "weight": 33
                            },
                            {
                                "key": "commented_file_density",
                                "weight": 33
                            },
                            {
                                "key": "duplication_absense",
                                "weight": 34
                            }
                        ]
                    }
                ]
            }
        ]
    }
}'





Não deve ser aceito pré-configurações com entidades válidas mas com relações inválidas (como por exemplo associar uma subcaracterística com uma características errada)

Tente cria uma requisição inválida utilizando o endpoint /api/v1/organizations/ID1/products/ID2/create/pre-config/, onde ID1 é o identificador de uma organização e ID2 é o identificador de um produto.

# Criação de uma pré-configuração inválida: subcharacteristics modifiability associada com a characteristics reliability
curl --location --request POST 'https://measuresoftgram-service.herokuapp.com/api/v1/organizations/4/products/5/create/pre-config/' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "Pré-config inválida",
    "data": {
        "characteristics": [
            {
                "key": "reliability",
                "weight": 60,
                "subcharacteristics": [
                    {
                        "key": "modifiability",
                        "weight": 100,
                        "measures": [
                            {
                                "key": "passed_tests",
                                "weight": 33
                            },
                            {
                                "key": "test_builds",
                                "weight": 33
                            },
                            {
                                "key": "test_coverage",
                                "weight": 34
                            }
                        ]
                    }
                ]
            }
        ]
    }
}'