@testspectra/react-native 1.3.2 → 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +31 -9
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -1681,8 +1681,8 @@ function createMockHandle(rule, release) {
1681
1681
  respondWith: async (newFixture, newOptions = {}) => {
1682
1682
  const newObj = newFixture;
1683
1683
  rule.response = newObj && newObj.body !== void 0 ? newObj.body : newFixture;
1684
- if (newOptions.statusCode || newObj && newObj.statusCode) {
1685
- rule.statusCode = newOptions.statusCode || newObj?.statusCode || 200;
1684
+ if (newOptions.statusCode || newObj && (newObj.statusCode || newObj.status)) {
1685
+ rule.statusCode = newOptions.statusCode || newObj?.statusCode || newObj?.status || 200;
1686
1686
  }
1687
1687
  if (newOptions.headers || newObj && newObj.headers) {
1688
1688
  rule.headers = newOptions.headers || newObj?.headers;
@@ -1695,7 +1695,7 @@ function createMockHandle(rule, release) {
1695
1695
  respondOnce: async (newFixture, newOptions = {}) => {
1696
1696
  const newObj = newFixture;
1697
1697
  const resp = newObj && newObj.body !== void 0 ? newObj.body : newFixture;
1698
- const statusCode = newOptions.statusCode || newObj && newObj.statusCode || rule.statusCode || 200;
1698
+ const statusCode = newOptions.statusCode || newObj && (newObj.statusCode || newObj.status) || rule.statusCode || 200;
1699
1699
  const headers = newOptions.headers || newObj && newObj.headers || rule.headers;
1700
1700
  const delayMs = newOptions.delayMs ?? (newObj && newObj.delayMs) ?? rule.delayMs;
1701
1701
  rule.respondOnceQueue.push({ response: resp, statusCode, headers, delayMs });
@@ -1822,6 +1822,27 @@ function recordMockCall(rule, request) {
1822
1822
  }
1823
1823
  return request;
1824
1824
  }
1825
+ function readMockEnvelope(value) {
1826
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return null;
1827
+ const record = value;
1828
+ const keys = Object.keys(record);
1829
+ if (keys.length === 0 || !keys.every((key) => ENVELOPE_KEYS.has(key))) return null;
1830
+ const status = typeof record.status === "number" ? record.status : record.statusCode;
1831
+ if (!("body" in record) && typeof status !== "number") return null;
1832
+ return { body: record.body ?? "", statusCode: status, headers: record.headers, delayMs: record.delayMs };
1833
+ }
1834
+ async function resolveMockResponse(rule, request) {
1835
+ const consumed = consumeMockResponse(rule);
1836
+ const value = typeof consumed.body === "function" ? await consumed.body(request) : consumed.body;
1837
+ const envelope = readMockEnvelope(value);
1838
+ if (!envelope) return { ...consumed, body: value };
1839
+ return {
1840
+ body: envelope.body,
1841
+ statusCode: envelope.statusCode ?? consumed.statusCode,
1842
+ headers: { ...consumed.headers, ...envelope.headers },
1843
+ delayMs: envelope.delayMs ?? consumed.delayMs
1844
+ };
1845
+ }
1825
1846
  function consumeMockResponse(rule) {
1826
1847
  if (rule.respondOnceQueue.length > 0) {
1827
1848
  const queued = rule.respondOnceQueue.shift();
@@ -1854,11 +1875,12 @@ function mockResponseBodyText(body) {
1854
1875
  if (typeof body === "object" && body !== null) return JSON.stringify(body);
1855
1876
  return String(body ?? "");
1856
1877
  }
1857
- var DEFAULT_MOCK_RESPONSE_HEADERS;
1878
+ var ENVELOPE_KEYS, DEFAULT_MOCK_RESPONSE_HEADERS;
1858
1879
  var init_mock_intercept = __esm({
1859
1880
  "../../core/worker-runtime/src/dsl/mock_intercept.ts"() {
1860
1881
  "use strict";
1861
1882
  init_reporter();
1883
+ ENVELOPE_KEYS = /* @__PURE__ */ new Set(["status", "statusCode", "headers", "body", "delayMs"]);
1862
1884
  DEFAULT_MOCK_RESPONSE_HEADERS = {
1863
1885
  "Content-Type": "application/json; charset=utf-8",
1864
1886
  "Access-Control-Allow-Origin": "*",
@@ -2120,7 +2142,7 @@ async function patchedFetch(origFetch, input, init) {
2120
2142
  if (rule.aborted) {
2121
2143
  throw new TypeError(`Spectra.intercept() aborted ${method} ${url} (${rule.abortReason || "Failed"})`);
2122
2144
  }
2123
- const consumed = consumeMockResponse(rule);
2145
+ const consumed = await resolveMockResponse(rule, intercepted);
2124
2146
  if (consumed.delayMs && consumed.delayMs > 0) await sleep(consumed.delayMs);
2125
2147
  return buildMockResponse(consumed);
2126
2148
  }
@@ -2157,8 +2179,7 @@ function patchXMLHttpRequest() {
2157
2179
  setTimeout(fireError, 0);
2158
2180
  return;
2159
2181
  }
2160
- const consumed = consumeMockResponse(rule);
2161
- const respond2 = () => {
2182
+ const respond2 = (consumed) => {
2162
2183
  const bodyText = mockResponseBodyText(consumed.body);
2163
2184
  Object.defineProperties(xhr, {
2164
2185
  status: { value: consumed.statusCode, configurable: true },
@@ -2174,8 +2195,9 @@ function patchXMLHttpRequest() {
2174
2195
  xhr.dispatchEvent?.(new Event("load"));
2175
2196
  xhr.dispatchEvent?.(new Event("loadend"));
2176
2197
  };
2177
- if (consumed.delayMs && consumed.delayMs > 0) setTimeout(respond2, consumed.delayMs);
2178
- else setTimeout(respond2, 0);
2198
+ void resolveMockResponse(rule, intercepted).then((consumed) => {
2199
+ setTimeout(() => respond2(consumed), consumed.delayMs && consumed.delayMs > 0 ? consumed.delayMs : 0);
2200
+ });
2179
2201
  };
2180
2202
  return xhr;
2181
2203
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@testspectra/react-native",
3
- "version": "1.3.2",
3
+ "version": "1.3.3",
4
4
  "description": "Native Android & iOS component test runner for React Native with TestSpectra Spectra.* DSL",
5
5
  "keywords": [
6
6
  "testspectra",
@@ -32,7 +32,7 @@
32
32
  "dependencies": {
33
33
  "cross-spawn": "^7.0.6",
34
34
  "esbuild": "^0.28.2",
35
- "@testspectra/matchers": "1.3.2"
35
+ "@testspectra/matchers": "1.3.3"
36
36
  },
37
37
  "peerDependencies": {
38
38
  "react": ">=18.0.0",