ike18t/wiremock_mapper_node

View on GitHub
lib/builders/response_builder.ts

Summary

Maintainability
A
0 mins
Test Coverage
export interface ResponseJSON {
  body?: string;
  fixedDelayMilliseconds?: number;
  headers?: { [key: string]: string };
  jsonBody?: object;
  status?: number;
  statusMessage?: string;
  transformer?: string;
}

export interface ResponseBuilder {
  withBody(value: string): ResponseBuilder;
  withDelay(milliseconds: number): ResponseBuilder;
  withHeader(key: string, value: string): ResponseBuilder;
  withJsonBody(value: object): ResponseBuilder;
  withStatus(statusCode: number): ResponseBuilder;
  withStatusMessage(statusMessage: string): ResponseBuilder;
  withTransformer(transformerName: string): ResponseBuilder;
}

export class ResponseBuilderImpl implements ResponseBuilder {
  protected jsonObject: ResponseJSON = {};

  public clone() {
    const clone = new ResponseBuilderImpl();
    clone.jsonObject = { ...this.jsonObject };
    return clone;
  }

  public toJSON = () => this.jsonObject;

  public withBody(value: string): ResponseBuilder {
    this.jsonObject.body = value;
    return this;
  }

  public withDelay(milliseconds: number): ResponseBuilder {
    this.jsonObject.fixedDelayMilliseconds = milliseconds;
    return this;
  }

  public withHeader(key: string, value: string): ResponseBuilder {
    if (this.jsonObject.headers === undefined) {
      this.jsonObject.headers = {};
    }
    this.jsonObject.headers[key] = value;
    return this;
  }

  public withJsonBody(value: object): ResponseBuilder {
    this.jsonObject.jsonBody = value;
    return this;
  }

  public withStatus(statusCode: number): ResponseBuilder {
    this.jsonObject.status = statusCode;
    return this;
  }

  public withStatusMessage(statusMessage: string): ResponseBuilder {
    this.jsonObject.statusMessage = statusMessage;
    return this;
  }

  public withTransformer(transformerName: string): ResponseBuilder {
    this.jsonObject.transformer = transformerName;
    return this;
  }
}