Skip to content

Commit 522a83b

Browse files
committed
enums to objects
1 parent 8ddfb25 commit 522a83b

File tree

3 files changed

+83
-73
lines changed

3 files changed

+83
-73
lines changed

src/Findings.ts

Lines changed: 20 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,11 @@ import {
3131
LOCATION,
3232
INFO,
3333
ALLOWED_INFO_IMPACT,
34-
DEFAULT_INFO_IMPACT
34+
DEFAULT_INFO_IMPACT,
35+
FindingStatus,
36+
Condition,
37+
FINDING_STATUS,
38+
CONDITIONS
3539
} from './constants'
3640
import {
3741
createMdBlock,
@@ -55,20 +59,6 @@ export type FindingMetadata = {
5559
resolution?: FindingStatus
5660
}
5761

58-
export enum FindingStatus {
59-
open = 'Open',
60-
fixed = 'Fixed',
61-
partiallyFixed = 'Partially Fixed',
62-
acknowledged = 'Acknowledged',
63-
deferred = 'Deferred'
64-
}
65-
66-
export enum Condition {
67-
ok = '✓',
68-
warning = '⚠',
69-
problem = 'X'
70-
}
71-
7262
interface ArraySortCallback<TypeOne> {
7363
(param1: TypeOne, param2: TypeOne): number
7464
}
@@ -163,32 +153,32 @@ export const calculateCondition = (
163153
remediation: FindingStatus,
164154
totalRisk: string
165155
): Condition => {
166-
if (remediation === FindingStatus.fixed) {
167-
return Condition.ok
156+
if (remediation === FINDING_STATUS.fixed) {
157+
return CONDITIONS.ok
168158
}
169159
if (totalRisk === HIGH || totalRisk === MEDIUM) {
170-
if (remediation === FindingStatus.open) {
171-
return Condition.problem
160+
if (remediation === FINDING_STATUS.open) {
161+
return CONDITIONS.problem
172162
}
173-
return Condition.warning
163+
return CONDITIONS.warning
174164
}
175-
if (remediation === FindingStatus.partiallyFixed) {
176-
return Condition.ok
165+
if (remediation === FINDING_STATUS.partiallyFixed) {
166+
return CONDITIONS.ok
177167
}
178-
return Condition.warning
168+
return CONDITIONS.warning
179169
}
180170

181171
const NEW_FINDING_MODEL = {
182172
[ID]: createFindingId(),
183173
[LIKELIHOOD_KEY]: HIGH,
184174
[IMPACT_KEY]: HIGH,
185175
[TITLE]: 'Untitled Finding',
186-
[REMEDIATION]: FindingStatus.open,
176+
[REMEDIATION]: FINDING_STATUS.open,
187177
[LOCATION]: ''
188178
}
189179

190180
export const parseFinding = (data: FindingMetadata) => {
191-
data[REMEDIATION] = data[REMEDIATION] || FindingStatus.open
181+
data[REMEDIATION] = data[REMEDIATION] || FINDING_STATUS.open
192182
const { impact, likelihood, risk } = calculateTotalRisk(data)
193183
const condition = calculateCondition(data[REMEDIATION], risk)
194184
return sortFindingFields(
@@ -297,12 +287,12 @@ export const FINDING_LIST_TITLES = findingFields.reduce(
297287
)
298288

299289
export const FINDING_RESUME_RISKS = [HIGH, MEDIUM, LOW]
300-
export const FINDING_RESUME_FIELDS: string[] = Object.values(FindingStatus)
290+
export const FINDING_RESUME_FIELDS: string[] = Object.values(FINDING_STATUS)
301291
.map((s) => s.toString())
302292
.concat([REPORTED])
303293
export const MANDATORY_RESUME_FIELDS = [
304-
FindingStatus.open.toString(),
305-
FindingStatus.fixed.toString(),
294+
FINDING_STATUS.open.toString(),
295+
FINDING_STATUS.fixed.toString(),
306296
REPORTED
307297
]
308298

@@ -327,8 +317,8 @@ export const getFindingResume = (findings: any[]) => {
327317
[TOTAL]: total,
328318
[REPORTED]: total,
329319
...grouped,
330-
[FIXED_PERCENT]: grouped[FindingStatus.fixed]
331-
? `${Math.ceil((grouped[FindingStatus.fixed] * 100) / total)}%`
320+
[FIXED_PERCENT]: grouped[FINDING_STATUS.fixed]
321+
? `${Math.ceil((grouped[FINDING_STATUS.fixed] * 100) / total)}%`
332322
: NONE
333323
}
334324
}

src/constants.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,22 @@ export const CODE_MARK = '```'
9393
export const TECH_BITS = 'tech-bits'
9494
export const ALLOWED_INFO_IMPACT = [RECOMMENTATION, BUG, WARNING]
9595
export const DEFAULT_INFO_IMPACT = RECOMMENTATION
96+
97+
export const FINDING_STATUS = {
98+
open: 'Open',
99+
fixed: 'Fixed',
100+
partiallyFixed: 'Partially Fixed',
101+
acknowledged: 'Acknowledged',
102+
deferred: 'Deferred'
103+
} as const
104+
105+
export type FindingStatus = typeof FINDING_STATUS[keyof typeof FINDING_STATUS]
106+
107+
export const CONDITIONS = {
108+
ok: '✓',
109+
warning: '⚠',
110+
problem: 'X'
111+
} as const
112+
113+
export type Condition = typeof CONDITIONS[keyof typeof CONDITIONS]
114+

src/test/findings.test.ts

Lines changed: 44 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,8 @@ import {
1212
parseFindingId,
1313
getFindingResume,
1414
getFindingResumeData,
15-
FindingStatus,
1615
FINDING_MODEL,
1716
sortFindingFields,
18-
Condition,
1917
isAllowedInfoImpact
2018
} from '../Findings'
2119
import {
@@ -33,7 +31,10 @@ import {
3331
REPORTED,
3432
RESOLUTION,
3533
SORTED_FINDING_FIELDS,
36-
DEFAULT_INFO_IMPACT
34+
DEFAULT_INFO_IMPACT,
35+
FINDING_STATUS,
36+
CONDITION,
37+
CONDITIONS
3738
} from '../constants'
3839
import { createMdBlock, isMdBlock, MdBlock, MdDoc, mdDocToMd } from '../mdModel'
3940
import { arrayUnique } from '../utils'
@@ -85,8 +86,8 @@ describe('findings', () => {
8586
expect(finding[LIKELIHOOD_KEY]).toBe(NONE)
8687
expect(finding[IMPACT_KEY]).toBe(DEFAULT_INFO_IMPACT)
8788
expect(finding[RISK_KEY]).toBe(INFO)
88-
expect(finding[RESOLUTION]).toBe(FindingStatus.open)
89-
expect(finding[STATUS]).toBe(Condition.warning)
89+
expect(finding[RESOLUTION]).toBe(FINDING_STATUS.open)
90+
expect(finding[STATUS]).toBe(CONDITIONS.warning)
9091
})
9192

9293
it('should return finding default values for INFO findings', () => {
@@ -95,8 +96,8 @@ describe('findings', () => {
9596
expect(finding[LIKELIHOOD_KEY]).toBe(NONE)
9697
expect(finding[IMPACT_KEY]).toBe(DEFAULT_INFO_IMPACT)
9798
expect(finding[RISK_KEY]).toBe(INFO)
98-
expect(finding[RESOLUTION]).toBe(FindingStatus.open)
99-
expect(finding[STATUS]).toBe(Condition.warning)
99+
expect(finding[RESOLUTION]).toBe(FINDING_STATUS.open)
100+
expect(finding[STATUS]).toBe(CONDITIONS.warning)
100101
})
101102
})
102103

@@ -319,57 +320,57 @@ describe('findings', () => {
319320

320321
describe('getfindingResumeData', () => {
321322
const data = [
322-
[HIGH, HIGH, FindingStatus.fixed],
323-
[MEDIUM, MEDIUM, FindingStatus.fixed],
324-
[LOW, LOW, FindingStatus.fixed],
325-
[HIGH, HIGH, FindingStatus.acknowledged],
326-
[MEDIUM, MEDIUM, FindingStatus.acknowledged],
327-
[LOW, LOW, FindingStatus.acknowledged],
328-
[HIGH, HIGH, FindingStatus.deferred],
329-
[MEDIUM, MEDIUM, FindingStatus.deferred],
330-
[LOW, LOW, FindingStatus.deferred],
331-
[HIGH, HIGH, FindingStatus.open],
332-
[MEDIUM, MEDIUM, FindingStatus.open],
333-
[LOW, LOW, FindingStatus.open],
334-
[HIGH, HIGH, FindingStatus.partiallyFixed],
335-
[MEDIUM, MEDIUM, FindingStatus.partiallyFixed],
336-
[LOW, LOW, FindingStatus.partiallyFixed]
323+
[HIGH, HIGH, FINDING_STATUS.fixed],
324+
[MEDIUM, MEDIUM, FINDING_STATUS.fixed],
325+
[LOW, LOW, FINDING_STATUS.fixed],
326+
[HIGH, HIGH, FINDING_STATUS.acknowledged],
327+
[MEDIUM, MEDIUM, FINDING_STATUS.acknowledged],
328+
[LOW, LOW, FINDING_STATUS.acknowledged],
329+
[HIGH, HIGH, FINDING_STATUS.deferred],
330+
[MEDIUM, MEDIUM, FINDING_STATUS.deferred],
331+
[LOW, LOW, FINDING_STATUS.deferred],
332+
[HIGH, HIGH, FINDING_STATUS.open],
333+
[MEDIUM, MEDIUM, FINDING_STATUS.open],
334+
[LOW, LOW, FINDING_STATUS.open],
335+
[HIGH, HIGH, FINDING_STATUS.partiallyFixed],
336+
[MEDIUM, MEDIUM, FINDING_STATUS.partiallyFixed],
337+
[LOW, LOW, FINDING_STATUS.partiallyFixed]
337338
].map(([likelihood, impact, resolution]) => {
338339
return { likelihood, impact, resolution }
339340
})
340341
const findings = data.map((f: any) => parseFinding(f))
341342

342343
const resumeData = getFindingResumeData(findings)
343-
it(`should return [${FindingStatus.open}] findings`, () => {
344-
expect(resumeData[FindingStatus.open]).toStrictEqual({
344+
it(`should return [${FINDING_STATUS.open}] findings`, () => {
345+
expect(resumeData[FINDING_STATUS.open]).toStrictEqual({
345346
[HIGH]: 1,
346347
[MEDIUM]: 1,
347348
[LOW]: 1
348349
})
349350
})
350-
it(`should return [${FindingStatus.acknowledged}] findings`, () => {
351-
expect(resumeData[FindingStatus.acknowledged]).toStrictEqual({
351+
it(`should return [${FINDING_STATUS.acknowledged}] findings`, () => {
352+
expect(resumeData[FINDING_STATUS.acknowledged]).toStrictEqual({
352353
[HIGH]: 1,
353354
[MEDIUM]: 1,
354355
[LOW]: 1
355356
})
356357
})
357-
it(`should return [${FindingStatus.deferred}] findings`, () => {
358-
expect(resumeData[FindingStatus.deferred]).toStrictEqual({
358+
it(`should return [${FINDING_STATUS.deferred}] findings`, () => {
359+
expect(resumeData[FINDING_STATUS.deferred]).toStrictEqual({
359360
[HIGH]: 1,
360361
[MEDIUM]: 1,
361362
[LOW]: 1
362363
})
363364
})
364-
it(`should return [${FindingStatus.fixed}] findings`, () => {
365-
expect(resumeData[FindingStatus.fixed]).toStrictEqual({
365+
it(`should return [${FINDING_STATUS.fixed}] findings`, () => {
366+
expect(resumeData[FINDING_STATUS.fixed]).toStrictEqual({
366367
[HIGH]: 1,
367368
[MEDIUM]: 1,
368369
[LOW]: 1
369370
})
370371
})
371-
it(`should return [${FindingStatus.partiallyFixed}] findings`, () => {
372-
expect(resumeData[FindingStatus.partiallyFixed]).toStrictEqual({
372+
it(`should return [${FINDING_STATUS.partiallyFixed}] findings`, () => {
373+
expect(resumeData[FINDING_STATUS.partiallyFixed]).toStrictEqual({
373374
[HIGH]: 1,
374375
[MEDIUM]: 1,
375376
[LOW]: 1
@@ -385,36 +386,36 @@ describe('findings', () => {
385386
})
386387

387388
describe('getfindingResumeDataWithCeroFields', () => {
388-
const data = [[HIGH, HIGH, FindingStatus.partiallyFixed]].map(
389+
const data = [[HIGH, HIGH, FINDING_STATUS.partiallyFixed]].map(
389390
([likelihood, impact, resolution]) => {
390391
return { likelihood, impact, resolution }
391392
}
392393
)
393394
const findings = data.map((f: any) => parseFinding(f))
394395

395396
const resumeData = getFindingResumeData(findings)
396-
it(`should return [${FindingStatus.open}] findings`, () => {
397-
expect(resumeData[FindingStatus.open]).toStrictEqual({
397+
it(`should return [${FINDING_STATUS.open}] findings`, () => {
398+
expect(resumeData[FINDING_STATUS.open]).toStrictEqual({
398399
[HIGH]: 0,
399400
[MEDIUM]: 0,
400401
[LOW]: 0
401402
})
402403
})
403-
it(`should return no [${FindingStatus.acknowledged}] findings`, () => {
404-
expect(resumeData[FindingStatus.acknowledged]).toBeUndefined()
404+
it(`should return no [${FINDING_STATUS.acknowledged}] findings`, () => {
405+
expect(resumeData[FINDING_STATUS.acknowledged]).toBeUndefined()
405406
})
406-
it(`should return no [${FindingStatus.deferred}] findings`, () => {
407-
expect(resumeData[FindingStatus.deferred]).toBeUndefined()
407+
it(`should return no [${FINDING_STATUS.deferred}] findings`, () => {
408+
expect(resumeData[FINDING_STATUS.deferred]).toBeUndefined()
408409
})
409-
it(`should return [${FindingStatus.fixed}] findings`, () => {
410-
expect(resumeData[FindingStatus.fixed]).toStrictEqual({
410+
it(`should return [${FINDING_STATUS.fixed}] findings`, () => {
411+
expect(resumeData[FINDING_STATUS.fixed]).toStrictEqual({
411412
[HIGH]: 0,
412413
[MEDIUM]: 0,
413414
[LOW]: 0
414415
})
415416
})
416-
it(`should return [${FindingStatus.partiallyFixed}] findings`, () => {
417-
expect(resumeData[FindingStatus.partiallyFixed]).toStrictEqual({
417+
it(`should return [${FINDING_STATUS.partiallyFixed}] findings`, () => {
418+
expect(resumeData[FINDING_STATUS.partiallyFixed]).toStrictEqual({
418419
[HIGH]: 1,
419420
[MEDIUM]: 0,
420421
[LOW]: 0

0 commit comments

Comments
 (0)