Skip to content

Commit 0b31123

Browse files
committed
feat(guards): isExceptionClassName
1 parent 866bc88 commit 0b31123

File tree

3 files changed

+47
-0
lines changed

3 files changed

+47
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import ExceptionClassName from '@packages/exceptions/enums/exception-class-name.enum'
2+
import ExceptionId from '@packages/exceptions/enums/exception-id.enum'
3+
import type { Testcase } from '@tests/utils/types'
4+
import testSubject from '../is-exception-class-name.guard'
5+
6+
/**
7+
* @file Unit Tests - isExceptionClassName
8+
* @module exceptions/guards/tests/unit/isExceptionClassName
9+
*/
10+
11+
describe('unit:guards/isExceptionClassName', () => {
12+
type Case = Testcase<boolean> & { value: any }
13+
14+
const cases: Case[] = [
15+
{ expected: false, value: ExceptionId.TOO_MANY_REQUESTS },
16+
{ expected: true, value: ExceptionClassName.URI_TOO_LONG }
17+
]
18+
19+
it.each<Case>(cases)('should return $expected given $value', testcase => {
20+
// Arrange
21+
const { expected, value } = testcase
22+
23+
// Act + Expect
24+
expect(testSubject(value)).toBe(expected)
25+
})
26+
})

packages/exceptions/src/guards/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* @module exceptions/guards
44
*/
55

6+
export { default as isExceptionClassName } from './is-exception-class-name.guard'
67
export { default as isExceptionCode } from './is-exception-code.guard'
78
export { default as isExceptionId } from './is-exception-id.guard'
89
export { default as isExceptionJSON } from './is-exception-json.guard'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import ExceptionClassName from '@packages/exceptions/enums/exception-class-name.enum'
2+
import ExceptionId from '@packages/exceptions/enums/exception-id.enum'
3+
4+
/**
5+
* @file Type Guards - isExceptionClassName
6+
* @module exceptions/guards/isExceptionClassName
7+
*/
8+
9+
/**
10+
* Checks if `value` is a valid `ExceptionClassName`.
11+
*
12+
* @param {any} [value] - Value to check
13+
* @return {boolean} `true` if `ExceptionClassName`, `false` otherwise
14+
*/
15+
const isExceptionClassName = (value: any = {}): value is ExceptionClassName => {
16+
const ids = Object.values(ExceptionId)
17+
return ids.map(id => ExceptionClassName[id]).includes(value)
18+
}
19+
20+
export default isExceptionClassName

0 commit comments

Comments
 (0)