Skip to content

Commit

Permalink
fix(positive suite): API-27884 - add await to async function calls (#135
Browse files Browse the repository at this point in the history
)

* fix(positive suite): add await to async function calls

* fix(positive suite): aPI-27884 - add await to ParameterSchemaValidator validate calls
  • Loading branch information
christineyost authored Jul 13, 2023
1 parent 78655a1 commit 0832c4c
Show file tree
Hide file tree
Showing 8 changed files with 71 additions and 66 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,27 +17,27 @@ export default class RequestValidationConductor {
this.exampleGroup = exampleGroup;
}

validate(): Map<string, Message>[] {
async validate(): Promise<Map<string, Message>[]> {
let failures: Map<string, Message> = new Map();
let warnings: Map<string, Message> = new Map();

const parameterSchemaValidator = new ParameterSchemaValidator(
this.operation,
);
parameterSchemaValidator.validate();
await parameterSchemaValidator.validate();
failures = new Map([...failures, ...parameterSchemaValidator.failures]);
warnings = new Map([...warnings, ...parameterSchemaValidator.warnings]);

const requestBodyValidator = new RequestBodyValidator(this.operation);
requestBodyValidator.validate();
await requestBodyValidator.validate();
failures = new Map([...failures, ...requestBodyValidator.failures]);
warnings = new Map([...warnings, ...requestBodyValidator.warnings]);

const exampleGroupValidator = new ExampleGroupValidator(
this.exampleGroup,
this.operation,
);
exampleGroupValidator.validate();
await exampleGroupValidator.validate();
failures = new Map([...failures, ...exampleGroupValidator.failures]);
warnings = new Map([...warnings, ...exampleGroupValidator.warnings]);

Expand Down
2 changes: 1 addition & 1 deletion src/suites/positive/conductors/validation-conductor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ export default class ValidationConductor {
this.exampleGroup,
);

let [failures, warnings] = requestValidationConductor.validate();
let [failures, warnings] = await requestValidationConductor.validate();

if (failures.size === 0) {
const response = await this.schema.execute(
Expand Down
21 changes: 11 additions & 10 deletions src/suites/positive/validation/example-group-validator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,15 @@ class ExampleGroupValidator extends PositiveValidator {
this.operation = operation;
}

// eslint-disable-next-line @typescript-eslint/require-await
performValidation = async (): Promise<void> => {
this.checkMissingRequiredParameters();
const examples = this.exampleGroup.examples;

Object.entries(examples).forEach(([name, example]) => {
this.checkExample(name, example);
});
await Promise.all(
Object.entries(examples).map(async ([name, example]) => {
await this.checkExample(name, example);
}),
);
};

private checkMissingRequiredParameters(): void {
Expand All @@ -43,29 +44,29 @@ class ExampleGroupValidator extends PositiveValidator {
}
}

private checkExample(name: string, example: Json): void {
private async checkExample(name: string, example: Json): Promise<void> {
const path = ['parameters', name];

const parameter = this.operation.getParameter(name);

if (parameter) {
this.checkParameterObject(parameter, example, path);
await this.checkParameterObject(parameter, example, path);
}
}

private checkParameterObject(
private async checkParameterObject(
parameter: ParameterObject,
example: Json,
path: string[],
): void {
): Promise<void> {
if (parameterHasSchema(parameter)) {
this.validateObjectAgainstSchema(example, parameter.schema, [
await this.validateObjectAgainstSchema(example, parameter.schema, [
...path,
'example',
]);
} else {
const contentObjectKey = Object.keys(parameter.content)[0];
this.validateObjectAgainstSchema(
await this.validateObjectAgainstSchema(
example,
parameter.content[contentObjectKey].schema,
[...path, 'example'],
Expand Down
12 changes: 8 additions & 4 deletions src/suites/positive/validation/request-body-validator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,15 @@ class RequestBodyValidator extends PositiveValidator {
this.operation = operation;
}

// eslint-disable-next-line @typescript-eslint/require-await
performValidation = async (): Promise<void> => {
if (this.operation.requestBody !== undefined) {
this.checkRequestBody(this.operation.requestBody);
await this.checkRequestBody(this.operation.requestBody);
}
};

private checkRequestBody(requestBody: RequestBodyObject): void {
private async checkRequestBody(
requestBody: RequestBodyObject,
): Promise<void> {
const path: string[] = [REQUEST_BODY_PATH];

// check for content schema presence
Expand All @@ -41,7 +42,10 @@ class RequestBodyValidator extends PositiveValidator {
const schema = content[key].schema;
if (schema) {
const example = this.operation.exampleRequestBody;
this.validateObjectAgainstSchema(example, schema, [...path, 'example']);
await this.validateObjectAgainstSchema(example, schema, [
...path,
'example',
]);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ describe('RequestValidationConductor', () => {
});

describe('validate', () => {
it('returns the expected failures and warnings', () => {
it('returns the expected failures and warnings', async () => {
const expectedFailures = new Map<string, Message>([
...parameterSchemaFailureMap,
...requestBodyFailureMap,
Expand All @@ -80,7 +80,7 @@ describe('RequestValidationConductor', () => {
operationSimpleGet,
exampleGroupEmptyDefault,
);
const [failures, warnings] = requestValidationConductor.validate();
const [failures, warnings] = await requestValidationConductor.validate();

expect(failures).toEqual(expectedFailures);
expect(warnings).toEqual(requestBodyWarningMap);
Expand Down
18 changes: 9 additions & 9 deletions test/suites/positive/validation/example-group-validator.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { ExampleGroupValidator } from '../../../../src/suites/positive/validatio
describe('ExampleGroupValidator', () => {
describe('validate', () => {
describe('input parameters is missing a required parameter', () => {
it('adds a validation failure', () => {
it('adds a validation failure', async () => {
const operation = new OASOperation({
operationId: 'hobbits or something',
parameters: [
Expand All @@ -25,7 +25,7 @@ describe('ExampleGroupValidator', () => {
const exampleGroup = new ExampleGroup('default', {});
const validator = new ExampleGroupValidator(exampleGroup, operation);

validator.validate();
await validator.validate();

const failures = validator.failures;
expect(failures.size).toEqual(1);
Expand All @@ -35,7 +35,7 @@ describe('ExampleGroupValidator', () => {
});

describe('other parameter validation failures are present', () => {
it('validates all parameters', () => {
it('validates all parameters', async () => {
const operation = new OASOperation({
operationId: 'hobbits or something',
parameters: [
Expand Down Expand Up @@ -66,7 +66,7 @@ describe('ExampleGroupValidator', () => {
family: 1,
});
const validator = new ExampleGroupValidator(exampleGroup, operation);
validator.validate();
await validator.validate();

const failures = validator.failures;
expect(failures.size).toEqual(2);
Expand All @@ -80,7 +80,7 @@ describe('ExampleGroupValidator', () => {
});
});

it('adds a validation failures if example does not match schema', () => {
it('adds a validation failures if example does not match schema', async () => {
const operation = new OASOperation({
operationId: 'hobbits or something',
parameters: [
Expand All @@ -99,7 +99,7 @@ describe('ExampleGroupValidator', () => {
const exampleGroup = new ExampleGroup('default', { fit: 123 });
const validator = new ExampleGroupValidator(exampleGroup, operation);

validator.validate();
await validator.validate();

const failures = validator.failures;
expect(failures.size).toEqual(1);
Expand All @@ -108,7 +108,7 @@ describe('ExampleGroupValidator', () => {
);
});

it('is idempotent', () => {
it('is idempotent', async () => {
const operation = new OASOperation({
operationId: 'hobbits or something',
parameters: [
Expand All @@ -128,7 +128,7 @@ describe('ExampleGroupValidator', () => {
const exampleGroup = new ExampleGroup('default', {});
const validator = new ExampleGroupValidator(exampleGroup, operation);

validator.validate();
await validator.validate();

let failures = validator.failures;
expect(failures.size).toEqual(1);
Expand All @@ -137,7 +137,7 @@ describe('ExampleGroupValidator', () => {
);

// call valdiate again to check for idempotency
validator.validate();
await validator.validate();

failures = validator.failures;
expect(failures.size).toEqual(1);
Expand Down
34 changes: 17 additions & 17 deletions test/suites/positive/validation/parameter-schema-validator.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { ParameterSchemaValidator } from '../../../../src/suites/positive/valida

describe('ParameterSchemaValidator', () => {
describe('validate', () => {
it('it adds a validation failure if both content and schema exist on parameter', () => {
it('it adds a validation failure if both content and schema exist on parameter', async () => {
const operation = new OASOperation({
operationId: 'hobbits or something',
parameters: [
Expand All @@ -30,7 +30,7 @@ describe('ParameterSchemaValidator', () => {
});

const validator = new ParameterSchemaValidator(operation);
validator.validate();
await validator.validate();

const failures = validator.failures;

Expand All @@ -40,7 +40,7 @@ describe('ParameterSchemaValidator', () => {
);
});

it('registers a validation failure if content contains more than one entry', () => {
it('registers a validation failure if content contains more than one entry', async () => {
const operation = new OASOperation({
operationId: 'hobbits or something',
parameters: [
Expand Down Expand Up @@ -68,7 +68,7 @@ describe('ParameterSchemaValidator', () => {
});

const validator = new ParameterSchemaValidator(operation);
validator.validate();
await validator.validate();

const failures = validator.failures;

Expand All @@ -78,7 +78,7 @@ describe('ParameterSchemaValidator', () => {
);
});

it('adds a validation failure if content does not contain a schema object', () => {
it('adds a validation failure if content does not contain a schema object', async () => {
const operation = new OASOperation({
operationId: 'hobbits or something',
parameters: [
Expand All @@ -101,7 +101,7 @@ describe('ParameterSchemaValidator', () => {
});

const validator = new ParameterSchemaValidator(operation);
validator.validate();
await validator.validate();

const failures = validator.failures;

Expand All @@ -111,7 +111,7 @@ describe('ParameterSchemaValidator', () => {
);
});

it('adds a validation failure if neither content nor schema exist on parameter', () => {
it('adds a validation failure if neither content nor schema exist on parameter', async () => {
const operation = new OASOperation({
operationId: 'hobbits or something',
parameters: [
Expand All @@ -125,7 +125,7 @@ describe('ParameterSchemaValidator', () => {
});

const validator = new ParameterSchemaValidator(operation);
validator.validate();
await validator.validate();

const failures = validator.failures;

Expand All @@ -135,7 +135,7 @@ describe('ParameterSchemaValidator', () => {
);
});

it('adds a validation failure if parameter has both example and examples', () => {
it('adds a validation failure if parameter has both example and examples', async () => {
const operation = new OASOperation({
operationId: 'hobbits or something',
parameters: [
Expand All @@ -156,7 +156,7 @@ describe('ParameterSchemaValidator', () => {
});

const validator = new ParameterSchemaValidator(operation);
validator.validate();
await validator.validate();

const failures = validator.failures;

Expand All @@ -166,7 +166,7 @@ describe('ParameterSchemaValidator', () => {
);
});

it('does not register a validation failure if content is shaped correctly', () => {
it('does not register a validation failure if content is shaped correctly', async () => {
const operation = new OASOperation({
operationId: 'hobbits or something',
parameters: [
Expand All @@ -188,12 +188,12 @@ describe('ParameterSchemaValidator', () => {
});

const validator = new ParameterSchemaValidator(operation);
validator.validate();
await validator.validate();

expect(validator.failures.size).toEqual(0);
});

it('does not register a validation failure if schema is shaped correctly', () => {
it('does not register a validation failure if schema is shaped correctly', async () => {
const operation = new OASOperation({
operationId: 'hobbits or something',
parameters: [
Expand All @@ -210,12 +210,12 @@ describe('ParameterSchemaValidator', () => {
});

const validator = new ParameterSchemaValidator(operation);
validator.validate();
await validator.validate();

expect(validator.failures.size).toEqual(0);
});

it('is idempotent', () => {
it('is idempotent', async () => {
const operation = new OASOperation({
operationId: 'hobbits or something',
parameters: [
Expand All @@ -238,7 +238,7 @@ describe('ParameterSchemaValidator', () => {
});

const validator = new ParameterSchemaValidator(operation);
validator.validate();
await validator.validate();

let failures = validator.failures;

Expand All @@ -248,7 +248,7 @@ describe('ParameterSchemaValidator', () => {
);

// call valdiate again to check for idempotency
validator.validate();
await validator.validate();

failures = validator.failures;
expect(failures.size).toEqual(1);
Expand Down
Loading

0 comments on commit 0832c4c

Please sign in to comment.