withOverrides method

IntegrationTestHttpResponse withOverrides({
  1. String? pathOverride,
  2. dynamic bodyMerge,
  3. dynamic bodyOverrides,
  4. int? statusCodeOverride,
  5. bool ignoreQuery = false,
  6. Duration? delayOverride,
  7. HttpMethod? methodOverride,
})

Creates a new response by overriding specific fields of an existing response.

Implementation

IntegrationTestHttpResponse withOverrides({
  String? pathOverride,
  dynamic bodyMerge,
  dynamic bodyOverrides,
  int? statusCodeOverride,
  bool ignoreQuery = false,
  Duration? delayOverride,
  HttpMethod? methodOverride,
}) {
  // Return same instance if no overrides are needed
  if (pathOverride == null &&
      bodyMerge == null &&
      bodyOverrides == null &&
      statusCodeOverride == null &&
      ignoreQuery == false &&
      delayOverride == null &&
      methodOverride == null) {
    return this;
  }

  // Check if the overrides would result in the same values
  if (pathOverride == path &&
      bodyOverrides == null &&
      bodyMerge == null &&
      statusCodeOverride == statusCode &&
      ignoreQuery == this.ignoreQuery &&
      delayOverride == delay &&
      methodOverride == method) {
    return this;
  }

  // Calculate new body only if needed
  dynamic newBody = body;
  if (bodyMerge != null || bodyOverrides != null) {
    if (bodyMerge != null) {
      newBody = deepMerge(newBody, bodyMerge);
    }
    if (bodyOverrides != null) {
      newBody = bodyOverrides;
    }
    // If after merging/overriding the body is identical, and no other changes
    if (identical(newBody, body) &&
        pathOverride == null &&
        statusCodeOverride == null &&
        ignoreQuery == this.ignoreQuery &&
        delayOverride == null &&
        methodOverride == null) {
      return this;
    }
  }

  return IntegrationTestHttpResponse(
    path: pathOverride ?? path,
    statusCode: statusCodeOverride ?? statusCode,
    headers: headers,
    body: newBody,
    ignoreQuery: ignoreQuery,
    delay: delayOverride ?? delay,
    method: methodOverride ?? method,
  );
}