Skip to content

Commit 9b09658

Browse files
authored
feat(ns-openapi-3-0): add Security Schema Object predicate (#3810)
1 parent 444a4ba commit 9b09658

File tree

3 files changed

+67
-0
lines changed

3 files changed

+67
-0
lines changed

packages/apidom-ns-openapi-3-0/src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export {
4444
isSchemaElement,
4545
isBooleanJsonSchemaElement,
4646
isSecurityRequirementElement,
47+
isSecuritySchemeElement,
4748
isServerElement,
4849
isServerVariableElement,
4950
isMediaTypeElement,

packages/apidom-ns-openapi-3-0/src/predicates.ts

+11
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import ResponseElement from './elements/Response';
2222
import ResponsesElement from './elements/Responses';
2323
import SchemaElement from './elements/Schema';
2424
import SecurityRequirementElement from './elements/SecurityRequirement';
25+
import SecuritySchemeElement from './elements/SecurityScheme';
2526
import ServerElement from './elements/Server';
2627
import ServerVariableElement from './elements/ServerVariable';
2728
import MediaTypeElement from './elements/MediaType';
@@ -246,6 +247,16 @@ export const isSecurityRequirementElement = createPredicate(
246247
},
247248
);
248249

250+
export const isSecuritySchemeElement = createPredicate(
251+
({ hasBasicElementProps, isElementType, primitiveEq }) => {
252+
return (element: unknown): element is SecuritySchemeElement =>
253+
element instanceof SecuritySchemeElement ||
254+
(hasBasicElementProps(element) &&
255+
isElementType('securityScheme', element) &&
256+
primitiveEq('object', element));
257+
},
258+
);
259+
249260
export const isServerElement = createPredicate(
250261
({ hasBasicElementProps, isElementType, primitiveEq }) => {
251262
return (element: unknown): element is ServerElement =>

packages/apidom-ns-openapi-3-0/test/predicates.ts

+55
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
isOpenApi3_0Element,
1212
isServerElement,
1313
isServerVariableElement,
14+
isSecuritySchemeElement,
1415
isPathsElement,
1516
isPathItemElement,
1617
isOperationElement,
@@ -23,6 +24,7 @@ import {
2324
ContactElement,
2425
ServerElement,
2526
ServerVariableElement,
27+
SecuritySchemeElement,
2628
PathsElement,
2729
PathItemElement,
2830
OperationElement,
@@ -515,6 +517,59 @@ describe('predicates', function () {
515517
});
516518
});
517519

520+
context('isSecuritySchemeElement', function () {
521+
context('given SecuritySchemeElement instance value', function () {
522+
specify('should return true', function () {
523+
const element = new SecuritySchemeElement();
524+
525+
assert.isTrue(isSecuritySchemeElement(element));
526+
});
527+
});
528+
529+
context('given subtype instance value', function () {
530+
specify('should return true', function () {
531+
class SecuritySchemeSubElement extends SecuritySchemeElement {}
532+
533+
assert.isTrue(isSecuritySchemeElement(new SecuritySchemeSubElement()));
534+
});
535+
});
536+
537+
context('given non SecuritySchemeElement instance value', function () {
538+
specify('should return false', function () {
539+
assert.isFalse(isSecuritySchemeElement(1));
540+
assert.isFalse(isSecuritySchemeElement(null));
541+
assert.isFalse(isSecuritySchemeElement(undefined));
542+
assert.isFalse(isSecuritySchemeElement({}));
543+
assert.isFalse(isSecuritySchemeElement([]));
544+
assert.isFalse(isSecuritySchemeElement('string'));
545+
});
546+
});
547+
548+
specify('should support duck-typing', function () {
549+
const securitySchemeElementDuck = {
550+
_storedElement: 'securityScheme',
551+
_content: [],
552+
primitive() {
553+
return 'object';
554+
},
555+
get element() {
556+
return this._storedElement;
557+
},
558+
};
559+
560+
const securitySchemeElementSwan = {
561+
_storedElement: undefined,
562+
_content: undefined,
563+
primitive() {
564+
return 'swan';
565+
},
566+
};
567+
568+
assert.isTrue(isSecuritySchemeElement(securitySchemeElementDuck));
569+
assert.isFalse(isSecuritySchemeElement(securitySchemeElementSwan));
570+
});
571+
});
572+
518573
context('isPathsElement', function () {
519574
context('given PathsElement instance value', function () {
520575
specify('should return true', function () {

0 commit comments

Comments
 (0)