refactor: clean up WorkspaceBuildLogs types (#4738)

* refactor: clean up types in WorkspaceBuildLogs

* feat: add tests for groupLogsByStage

* fixup!: formatting
This commit is contained in:
Joe Previte
2022-10-24 21:57:12 -03:00
committed by GitHub
parent dea329705a
commit 49b3ea02cc
2 changed files with 45 additions and 8 deletions
@@ -0,0 +1,37 @@
import { ProvisionerJobLog } from "api/typesGenerated"
import { groupLogsByStage } from "./WorkspaceBuildLogs"
describe("groupLogsByStage", () => {
it("should group them by stage", () => {
const input: ProvisionerJobLog[] = [
{
id: "1",
created_at: "oct 13",
log_source: "provisioner",
log_level: "debug",
stage: "build",
output: "test",
},
{
id: "2",
created_at: "oct 13",
log_source: "provisioner",
log_level: "debug",
stage: "cleanup",
output: "test",
},
{
id: "3",
created_at: "oct 13",
log_source: "provisioner",
log_level: "debug",
stage: "cleanup",
output: "done",
},
]
const actual = groupLogsByStage(input)
expect(actual["cleanup"].length).toBe(2)
})
})
@@ -10,18 +10,18 @@ const Language = {
}
type Stage = ProvisionerJobLog["stage"]
type LogsGroupedByStage = Record<Stage, ProvisionerJobLog[]>
type GroupLogsByStageFn = (logs: ProvisionerJobLog[]) => LogsGroupedByStage
const groupLogsByStage = (logs: ProvisionerJobLog[]) => {
const logsByStage: Record<Stage, ProvisionerJobLog[]> = {}
export const groupLogsByStage: GroupLogsByStageFn = (logs) => {
const logsByStage: LogsGroupedByStage = {}
for (const log of logs) {
// If there is no log in the stage record, add an empty array
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
if (logsByStage[log.stage] === undefined) {
logsByStage[log.stage] = []
if (log.stage in logsByStage) {
logsByStage[log.stage].push(log)
} else {
logsByStage[log.stage] = [log]
}
logsByStage[log.stage].push(log)
}
return logsByStage