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.
Exemplo de objeto manifesto de carga:
{
  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 weight está normalizado para quilogramas e unit está definido como "kg".
  • Se o peso do objeto manifesto estiver expresso em libras (unit: "lb"), a função deve converter o weight para quilogramas usando a conversão aproximada, 1 lb = 0,45 kg, e atualizar o unit de acordo.
  • Se o peso já estiver expresso em quilogramas (unit: "kg"), o weight e o unit devem permanecer inalterados.
2. Você deve implementar uma função chamada 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".
Exemplo de valor de retorno onde o objeto de entrada está faltando a propriedade 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. Use normalizeUnits() para essa conversão.
  • Se o objeto manifesto não for válido, Validation error: ${containerId} e então o objeto retornado pela chamada de validateManifest() com o objeto manifesto.
Nota: cada um desses dois casos deve ter duas chamadas 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