Instruções
construir um validador de manifesto de carga
Neste laboratório, você usará JavaScript para normalizar e validar manifestos de carga. Um manifesto de carga é um documento que normalmente lista mercadorias sendo transportadas (por exemplo, por navio ou trem) e inclui detalhes sobre essas mercadorias.
Cada manifesto de carga será representado como um objeto com as seguintes propriedades:
containerId: um inteiro positivo que identifica o container de carga associado.destination: uma string não vazia (após remover espaços em branco) que indica o destino alvo da carga.weight: um número positivo que representa o peso da carga.unit: uma string que descreve as unidades para a propriedade de peso da carga (ou"kg"para quilogramas ou"lb"para libras).hazmat: um valor booleano que indica se é necessário manuseio de material perigoso.
{
containerId: 1,
destination: "Monterey, California, USA",
weight: 831,
unit: "lb",
hazmat: false
}
Objetivo: Atenda às user stories abaixo e faça todos os testes passarem para completar o laboratório.
User stories:
1. Você deve implementar uma função chamada normalizeUnits com um parâmetro manifest.
- A função não deve modificar o objeto manifesto original e deve sempre retornar um novo objeto onde
weightestá normalizado para quilogramas eunitestá definido como"kg". - Se o peso do objeto manifesto estiver expresso em libras (
unit: "lb"), a função deve converter oweightpara quilogramas usando a conversão aproximada, 1 lb = 0,45 kg, e atualizar ounitde acordo. - Se o peso já estiver expresso em quilogramas (
unit: "kg"), oweighte ounitdevem permanecer inalterados.
validateManifest com um parâmetro manifest.
- A função não deve modificar o objeto manifesto original e deve sempre retornar um novo objeto.
- Se o manifesto de entrada for válido (sem propriedades faltando ou inválidas), a função deve retornar um objeto vazio.
- Se o manifesto de entrada não for válido, a função deve retornar um objeto contendo entradas para cada propriedade faltando ou inválida. Propriedades faltando devem ter o valor
"Missing"e propriedades inválidas devem ter o valor"Invalid".
destination e tem uma propriedade weight inválida:
{
destination: "Missing",
weight: "Invalid"
}
3. Você deve implementar uma função chamada processManifest com um parâmetro manifest. A função deve registrar:
- Se o objeto manifesto for válido,
Validation success: ${containerId}e então o peso do manifesto em quilogramas assim,Total weight: ${weight} kg. UsenormalizeUnits()para essa conversão. - Se o objeto manifesto não for válido,
Validation error: ${containerId}e então o objeto retornado pela chamada devalidateManifest()com o objeto manifesto.
console.log().
O que fazer:
Testes:
- Você deve ter uma função chamada `normalizeUnits` com um parâmetro `manifest`.
- Chamar `normalizeUnits()` com `{ containerId: 68, destination: "Salinas", weight: 101, unit: "lb", hazmat: true }` deve retornar o novo objeto `{ containerId: 68, destination: "Salinas", weight: 45.45, unit: "kg", hazmat: true }` sem modificar a entrada original.
- Sua função `normalizeUnits` deve retornar uma cópia do objeto manifesto de entrada com seu `weight` normalizado para quilogramas e seu `unit` definido como `"kg"`. Use a conversão aproximada `1 lb = 0.45 kg` para a conversão do peso.
- Sua função `normalizeUnits` deve retornar uma nova cópia do objeto `manifest` de entrada sem modificar o original.
- Você deve ter uma função chamada `validateManifest` com um parâmetro `manifest`.
- Chamar `validateManifest()` com `{ containerId: 1, destination: "Santa Cruz", weight: 304, unit: "kg", hazmat: false }` deve retornar o novo objeto `{}`.
- Se o objeto manifesto de entrada for válido, sua função `validateManifest` deve retornar um objeto vazio `{}`.
- Chamar `validateManifest()` com `{}` deve retornar o novo objeto `{ containerId: "Missing", destination: "Missing", weight: "Missing", unit: "Missing", hazmat: "Missing" }` sem modificar a entrada original.
- Chamar `validateManifest()` com `{ containerId: null, destination: "Santa Cruz", weight: 304, unit: "kg", hazmat: false }` deve retornar o novo objeto `{ containerId: "Invalid" }` sem modificar a entrada original.
- Chamar `validateManifest()` com `{ containerId: 0, destination: 405, weight: -84, unit: "pounds", hazmat: "no" }` deve retornar o novo objeto `{ containerId: "Invalid", destination: "Invalid", weight: "Invalid", unit: "Invalid", hazmat: "Invalid" }` sem modificar a entrada original.
- Chamar `validateManifest()` com `{ containerId: -2 }` deve retornar o novo objeto `{ containerId: "Invalid", destination: "Missing", weight: "Missing", unit: "Missing", hazmat: "Missing" }` sem modificar a entrada original.
- Chamar `validateManifest()` com `{ containerId: 3.50 }` deve retornar o novo objeto `{ containerId: "Invalid", destination: "Missing", weight: "Missing", unit: "Missing", hazmat: "Missing" }` sem modificar a entrada original. Você pode usar `Number.isInteger()` para validar valores inteiros.
- Chamar `validateManifest()` com `{ destination: " " }` deve retornar o novo objeto `{ containerId: "Missing", destination: "Invalid", weight: "Missing", unit: "Missing", hazmat: "Missing" }` sem modificar a entrada original. Você pode usar `String.trim()` para remover espaços em branco de uma string.
- Chamar `validateManifest()` com `{ weight: NaN }` deve retornar o novo objeto `{ containerId: "Missing", destination: "Missing", weight: "Invalid", unit: "Missing", hazmat: "Missing" }` sem modificar a entrada original. Você pode usar `Number.isNaN()` para validar valores NaN.
- Se o objeto manifesto de entrada não for válido, sua função `validateManifest` deve retornar um objeto descrevendo propriedades faltando e/ou inválidas.
- Sua função `validateManifest` deve retornar um novo objeto sem modificar o original.
- Você deve ter uma função chamada `processManifest` com um parâmetro `manifest`.
- Chamar `processManifest()` com `{ containerId: 55, destination: "Carmel", weight: 400, unit: "lb", hazmat: false }` deve primeiro registrar `"Validation success: 55"` e depois registrar `"Total weight: 180 kg"`.
- Se o objeto manifesto de entrada for válido, sua função `processManifest` deve primeiro registrar a mensagem de sucesso, `Validation success: ${containerId}`.
- Se o objeto manifesto de entrada for válido, sua função `processManifest` deve normalizá-lo para quilogramas usando `normalizeUnits()` e depois registrar: `Total weight: ${weight} kg`.
- Se o objeto manifesto de entrada for válido, sua função `processManifest` deve registrar uma mensagem de sucesso com o `containerId` do objeto, e depois registrar o `weight` do objeto em quilogramas. Você deve usar `normalizeUnits()` para a conversão e ter duas chamadas `console.log()`.
- Chamar `processManifest()` com `{ containerId: -88, destination: "Soledad", weight: NaN }` deve primeiro registrar `Validation error: -88` e depois registrar o objeto `{ containerId: "Invalid", weight: "Invalid", unit: "Missing", hazmat: "Missing" }`.
- Chamar `processManifest()` com `{ destination: "Watsonville", hazmat: true }` deve primeiro registrar `Validation error: undefined` e depois registrar o objeto `{ containerId: "Missing", weight: "Missing", unit: "Missing" }`.
- Se o objeto manifesto de entrada não for válido, sua função `processManifest` deve primeiro registrar a mensagem de erro, `Validation error: ${containerId}`.
- Se o objeto manifesto de entrada não for válido, sua função `processManifest` também deve registrar o objeto retornado pela chamada de `validateManifest()` com o objeto manifesto original. Chame `console.log()` diretamente com o objeto retornado.
- Se o objeto manifesto de entrada não for válido, sua função `processManifest` deve registrar uma mensagem de erro com o `containerId` do objeto, e depois registrar o objeto retornado pela chamada de `validateManifest()` com o objeto de entrada. Isso deve envolver duas chamadas `console.log()`.
Preview