wrapito 12.3.0 → 13.0.0-beta2

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.
package/dist/index.d.cts CHANGED
@@ -54,7 +54,7 @@ type Extensions = {
54
54
  [key: string]: Extension;
55
55
  };
56
56
  type Component = React.ReactElement<any, any>;
57
- type RenderResult = RenderResult$1 | HTMLDivElement;
57
+ type RenderResult = RenderResult$1;
58
58
  type Mount = (component: Component) => RenderResult;
59
59
  interface Config {
60
60
  defaultHost: string;
@@ -71,7 +71,6 @@ interface BrowserHistory extends History {
71
71
 
72
72
  declare const wrap: (component: unknown) => Wrap;
73
73
 
74
- declare const mount: (Component: Component) => RenderResult;
75
74
  declare function configure(newConfig: Partial<Config>): void;
76
75
  declare const getConfig: () => Config;
77
76
 
@@ -90,4 +89,4 @@ declare const matchers: {
90
89
  };
91
90
  };
92
91
 
93
- export { type BrowserHistory, type Component, type Config, type Extension, type Extensions, type HttpMethod, type Mount, type NetworkResponses, type RenderResult, type RequestOptions, type WrapResponse as Response, type Wrap, type WrapExtensionAPI, type WrapOptions, type WrapRequest, type WrapResponse, matchers as assertions, configure, getConfig, matchers, mount, wrap };
92
+ export { type BrowserHistory, type Component, type Config, type Extension, type Extensions, type HttpMethod, type Mount, type NetworkResponses, type RenderResult, type RequestOptions, type WrapResponse as Response, type Wrap, type WrapExtensionAPI, type WrapOptions, type WrapRequest, type WrapResponse, matchers as assertions, configure, getConfig, matchers, wrap };
package/dist/index.d.ts CHANGED
@@ -54,7 +54,7 @@ type Extensions = {
54
54
  [key: string]: Extension;
55
55
  };
56
56
  type Component = React.ReactElement<any, any>;
57
- type RenderResult = RenderResult$1 | HTMLDivElement;
57
+ type RenderResult = RenderResult$1;
58
58
  type Mount = (component: Component) => RenderResult;
59
59
  interface Config {
60
60
  defaultHost: string;
@@ -71,7 +71,6 @@ interface BrowserHistory extends History {
71
71
 
72
72
  declare const wrap: (component: unknown) => Wrap;
73
73
 
74
- declare const mount: (Component: Component) => RenderResult;
75
74
  declare function configure(newConfig: Partial<Config>): void;
76
75
  declare const getConfig: () => Config;
77
76
 
@@ -90,4 +89,4 @@ declare const matchers: {
90
89
  };
91
90
  };
92
91
 
93
- export { type BrowserHistory, type Component, type Config, type Extension, type Extensions, type HttpMethod, type Mount, type NetworkResponses, type RenderResult, type RequestOptions, type WrapResponse as Response, type Wrap, type WrapExtensionAPI, type WrapOptions, type WrapRequest, type WrapResponse, matchers as assertions, configure, getConfig, matchers, mount, wrap };
92
+ export { type BrowserHistory, type Component, type Config, type Extension, type Extensions, type HttpMethod, type Mount, type NetworkResponses, type RenderResult, type RequestOptions, type WrapResponse as Response, type Wrap, type WrapExtensionAPI, type WrapOptions, type WrapRequest, type WrapResponse, matchers as assertions, configure, getConfig, matchers, wrap };
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
- "use strict";var me=Object.create;var T=Object.defineProperty;var de=Object.getOwnPropertyDescriptor;var he=Object.getOwnPropertyNames;var fe=Object.getPrototypeOf,ge=Object.prototype.hasOwnProperty;var ye=(e,t)=>{for(var n in t)T(e,n,{get:t[n],enumerable:!0})},$=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of he(t))!ge.call(e,o)&&o!==n&&T(e,o,{get:()=>t[o],enumerable:!(s=de(t,o))||s.enumerable});return e};var E=(e,t,n)=>(n=e!=null?me(fe(e)):{},$(t||!e||!e.__esModule?T(n,"default",{value:e,enumerable:!0}):n,e)),Re=e=>$(T({},"__esModule",{value:!0}),e);var Ye={};ye(Ye,{assertions:()=>Je,configure:()=>we,getConfig:()=>d,matchers:()=>Je,mount:()=>U,wrap:()=>Ce});module.exports=Re(Ye);var Y=E(require("react"),1);var f=E(require("chalk"),1);var H=E(require("object-hash"),1);var D=require("react-dom"),U=e=>{let t=document.body.appendChild(document.createElement("div"));return(0,D.render)(e,t),t},A={defaultHost:"",extend:{},mount:U,changeRoute:e=>window.history.replaceState(null,"",e)};function we(e){A={...A,...e}}var d=()=>({...A});var F=e=>t=>{let{method:n="GET",path:s,host:o=d().defaultHost,requestBody:r=void 0,catchParams:a}=t,l=o+s,i=!d().handleQueryParams||a,u=(0,H.default)({url:i?l:l.split("?")[0],method:n.toUpperCase(),requestBody:r}),c;return"_bodyInit"in e&&e._bodyInit!==void 0&&(c=JSON.parse(e._bodyInit)),(0,H.default)({url:i?e.url:e.url.split("?")[0],method:e.method,requestBody:c})===u};function P(e,t){if(!e)throw new Error(t)}function b(e,t){return typeof t===e}function be(e){return e instanceof Promise}function B(e,t,n){Object.defineProperty(e,t,n)}function k(e,t,n){Object.defineProperty(e,t,{value:n})}var M=Symbol.for("tinyspy:spy"),ke=new Set,xe=e=>{e.called=!1,e.callCount=0,e.calls=[],e.results=[],e.next=[]},Me=e=>(B(e,M,{value:{reset:()=>xe(e[M])}}),e[M]),I=e=>e[M]||Me(e);function Te(e){P(b("function",e)||b("undefined",e),"cannot spy on a non-function value");let t=function(...s){let o=I(t);o.called=!0,o.callCount++,o.calls.push(s);let r=o.next.shift();if(r){o.results.push(r);let[u,c]=r;if(u==="ok")return c;throw c}let a,l="ok";if(o.impl)try{new.target?a=Reflect.construct(o.impl,s,new.target):a=o.impl.apply(this,s),l="ok"}catch(u){throw a=u,l="error",o.results.push([l,u]),u}let i=[l,a];if(be(a)){let u=a.then(c=>i[1]=c).catch(c=>{throw i[0]="error",i[1]=c,c});Object.assign(u,a),a=u}return o.results.push(i),a};k(t,"_isMockFunction",!0),k(t,"length",e?e.length:0),k(t,"name",e&&e.name||"spy");let n=I(t);return n.reset(),n.impl=e,t}var L=(e,t)=>Object.getOwnPropertyDescriptor(e,t),_=(e,t)=>{t!=null&&typeof t=="function"&&t.prototype!=null&&Object.setPrototypeOf(e.prototype,t.prototype)};function G(e,t,n){P(!b("undefined",e),"spyOn could not find an object to spy upon"),P(b("object",e)||b("function",e),"cannot spyOn on a primitive value");let[s,o]=(()=>{if(!b("object",t))return[t,"value"];if("getter"in t&&"setter"in t)throw new Error("cannot spy on both getter and setter");if("getter"in t)return[t.getter,"get"];if("setter"in t)return[t.setter,"set"];throw new Error("specify getter or setter to spy on")})(),r=L(e,s),a=Object.getPrototypeOf(e),l=a&&L(a,s),i=r||l;P(i||s in e,`${String(s)} does not exist`);let u=!1;o==="value"&&i&&!i.value&&i.get&&(o="get",u=!0,n=i.get());let c;i?c=i[o]:o!=="value"?c=()=>e[s]:c=e[s],n||(n=c);let m=Te(n);o==="value"&&_(m,c);let p=w=>{let{value:W,...C}=i||{configurable:!0,writable:!0};o!=="value"&&delete C.writable,C[o]=w,B(e,s,C)},R=()=>i?B(e,s,i):p(c),h=m[M];return k(h,"restore",R),k(h,"getOriginal",()=>u?c():c),k(h,"willCall",w=>(h.impl=w,m)),p(u?()=>(_(m,n),m):m),ke.add(m),m}var Pe=new Set,Ie=0;function Oe(e){let t=e,n,s=[],o=[],r=I(e),a={get calls(){return r.calls},get instances(){return s},get invocationCallOrder(){return o},get results(){return r.results.map(([p,R])=>({type:p==="error"?"throw":"return",value:R}))},get lastCall(){return r.calls[r.calls.length-1]}},l=[],i=!1;function u(...p){return s.push(this),o.push(++Ie),(i?n:l.shift()||n||r.getOriginal()||(()=>{})).apply(this,p)}let c=t.name;t.getMockName=()=>c||"vi.fn()",t.mockName=p=>(c=p,t),t.mockClear=()=>(r.reset(),s=[],o=[],t),t.mockReset=()=>(t.mockClear(),n=()=>{},l=[],t),t.mockRestore=()=>(t.mockReset(),r.restore(),n=void 0,t),t.getMockImplementation=()=>n,t.mockImplementation=p=>(n=p,r.willCall(u),t),t.mockImplementationOnce=p=>(l.push(p),t);function m(p,R){let h=n;n=p,r.willCall(u),i=!0;let w=()=>{n=h,i=!1},W=R();return W instanceof Promise?W.then(()=>(w(),t)):(w(),t)}return t.withImplementation=m,t.mockReturnThis=()=>t.mockImplementation(function(){return this}),t.mockReturnValue=p=>t.mockImplementation(()=>p),t.mockReturnValueOnce=p=>t.mockImplementationOnce(()=>p),t.mockResolvedValue=p=>t.mockImplementation(()=>Promise.resolve(p)),t.mockResolvedValueOnce=p=>t.mockImplementationOnce(()=>Promise.resolve(p)),t.mockRejectedValue=p=>t.mockImplementation(()=>Promise.reject(p)),t.mockRejectedValueOnce=p=>t.mockImplementationOnce(()=>Promise.reject(p)),Object.defineProperty(t,"mock",{get:()=>a}),r.willCall(u),Pe.add(t),t}var O=e=>Oe(G({spy:e||(()=>{})},"spy"));beforeEach(()=>{global.window.fetch=O()});afterEach(()=>{global.window.fetch.mockReset()});var qe=async()=>{let e={json:()=>Promise.resolve(),status:200,ok:!0,headers:new Headers({"Content-Type":"application/json"})};return Promise.resolve(e)},V=async e=>{let{responseBody:t,status:n=200,headers:s={},delay:o}=e,r={json:()=>Promise.resolve(t),status:n,ok:n>=200&&n<=299,headers:new Headers({"Content-Type":"application/json",...s})};return o?new Promise(a=>setTimeout(()=>a(r),o)):Promise.resolve(r)},ve=e=>console.warn(`
1
+ "use strict";var ie=Object.create;var E=Object.defineProperty;var ce=Object.getOwnPropertyDescriptor;var pe=Object.getOwnPropertyNames;var ue=Object.getPrototypeOf,le=Object.prototype.hasOwnProperty;var me=(e,t)=>{for(var n in t)E(e,n,{get:t[n],enumerable:!0})},$=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of pe(t))!le.call(e,o)&&o!==n&&E(e,o,{get:()=>t[o],enumerable:!(s=ce(t,o))||s.enumerable});return e};var M=(e,t,n)=>(n=e!=null?ie(ue(e)):{},$(t||!e||!e.__esModule?E(n,"default",{value:e,enumerable:!0}):n,e)),de=e=>$(E({},"__esModule",{value:!0}),e);var Ge={};me(Ge,{assertions:()=>_e,configure:()=>he,getConfig:()=>d,matchers:()=>_e,wrap:()=>Ie});module.exports=de(Ge);var J=M(require("react"),1);var f=M(require("chalk"),1);var A=M(require("object-hash"),1);var D=require("@testing-library/react"),C={defaultHost:"",extend:{},mount:D.render,changeRoute:e=>window.history.replaceState(null,"",e)};function he(e){C={...C,...e}}var d=()=>({...C});var F=e=>t=>{let{method:n="GET",path:s,host:o=d().defaultHost,requestBody:r=void 0,catchParams:a}=t,l=o+s,p=!d().handleQueryParams||a,u=(0,A.default)({url:p?l:l.split("?")[0],method:n.toUpperCase(),requestBody:r}),i;return"_bodyInit"in e&&e._bodyInit!==void 0&&(i=JSON.parse(e._bodyInit)),(0,A.default)({url:p?e.url:e.url.split("?")[0],method:e.method,requestBody:i})===u};function P(e,t){if(!e)throw new Error(t)}function b(e,t){return typeof t===e}function fe(e){return e instanceof Promise}function B(e,t,n){Object.defineProperty(e,t,n)}function k(e,t,n){Object.defineProperty(e,t,{value:n})}var T=Symbol.for("tinyspy:spy"),ge=new Set,ye=e=>{e.called=!1,e.callCount=0,e.calls=[],e.results=[],e.next=[]},Re=e=>(B(e,T,{value:{reset:()=>ye(e[T])}}),e[T]),I=e=>e[T]||Re(e);function we(e){P(b("function",e)||b("undefined",e),"cannot spy on a non-function value");let t=function(...s){let o=I(t);o.called=!0,o.callCount++,o.calls.push(s);let r=o.next.shift();if(r){o.results.push(r);let[u,i]=r;if(u==="ok")return i;throw i}let a,l="ok";if(o.impl)try{new.target?a=Reflect.construct(o.impl,s,new.target):a=o.impl.apply(this,s),l="ok"}catch(u){throw a=u,l="error",o.results.push([l,u]),u}let p=[l,a];if(fe(a)){let u=a.then(i=>p[1]=i).catch(i=>{throw p[0]="error",p[1]=i,i});Object.assign(u,a),a=u}return o.results.push(p),a};k(t,"_isMockFunction",!0),k(t,"length",e?e.length:0),k(t,"name",e&&e.name||"spy");let n=I(t);return n.reset(),n.impl=e,t}var U=(e,t)=>Object.getOwnPropertyDescriptor(e,t),L=(e,t)=>{t!=null&&typeof t=="function"&&t.prototype!=null&&Object.setPrototypeOf(e.prototype,t.prototype)};function _(e,t,n){P(!b("undefined",e),"spyOn could not find an object to spy upon"),P(b("object",e)||b("function",e),"cannot spyOn on a primitive value");let[s,o]=(()=>{if(!b("object",t))return[t,"value"];if("getter"in t&&"setter"in t)throw new Error("cannot spy on both getter and setter");if("getter"in t)return[t.getter,"get"];if("setter"in t)return[t.setter,"set"];throw new Error("specify getter or setter to spy on")})(),r=U(e,s),a=Object.getPrototypeOf(e),l=a&&U(a,s),p=r||l;P(p||s in e,`${String(s)} does not exist`);let u=!1;o==="value"&&p&&!p.value&&p.get&&(o="get",u=!0,n=p.get());let i;p?i=p[o]:o!=="value"?i=()=>e[s]:i=e[s],n||(n=i);let m=we(n);o==="value"&&L(m,i);let c=w=>{let{value:q,...v}=p||{configurable:!0,writable:!0};o!=="value"&&delete v.writable,v[o]=w,B(e,s,v)},R=()=>p?B(e,s,p):c(i),h=m[T];return k(h,"restore",R),k(h,"getOriginal",()=>u?i():i),k(h,"willCall",w=>(h.impl=w,m)),c(u?()=>(L(m,n),m):m),ge.add(m),m}var ke=new Set,xe=0;function Te(e){let t=e,n,s=[],o=[],r=I(e),a={get calls(){return r.calls},get instances(){return s},get invocationCallOrder(){return o},get results(){return r.results.map(([c,R])=>({type:c==="error"?"throw":"return",value:R}))},get lastCall(){return r.calls[r.calls.length-1]}},l=[],p=!1;function u(...c){return s.push(this),o.push(++xe),(p?n:l.shift()||n||r.getOriginal()||(()=>{})).apply(this,c)}let i=t.name;t.getMockName=()=>i||"vi.fn()",t.mockName=c=>(i=c,t),t.mockClear=()=>(r.reset(),s=[],o=[],t),t.mockReset=()=>(t.mockClear(),n=()=>{},l=[],t),t.mockRestore=()=>(t.mockReset(),r.restore(),n=void 0,t),t.getMockImplementation=()=>n,t.mockImplementation=c=>(n=c,r.willCall(u),t),t.mockImplementationOnce=c=>(l.push(c),t);function m(c,R){let h=n;n=c,r.willCall(u),p=!0;let w=()=>{n=h,p=!1},q=R();return q instanceof Promise?q.then(()=>(w(),t)):(w(),t)}return t.withImplementation=m,t.mockReturnThis=()=>t.mockImplementation(function(){return this}),t.mockReturnValue=c=>t.mockImplementation(()=>c),t.mockReturnValueOnce=c=>t.mockImplementationOnce(()=>c),t.mockResolvedValue=c=>t.mockImplementation(()=>Promise.resolve(c)),t.mockResolvedValueOnce=c=>t.mockImplementationOnce(()=>Promise.resolve(c)),t.mockRejectedValue=c=>t.mockImplementation(()=>Promise.reject(c)),t.mockRejectedValueOnce=c=>t.mockImplementationOnce(()=>Promise.reject(c)),Object.defineProperty(t,"mock",{get:()=>a}),r.willCall(u),ke.add(t),t}var O=e=>Te(_({spy:e||(()=>{})},"spy"));beforeEach(()=>{global.window.fetch=O()});afterEach(()=>{global.window.fetch.mockReset()});var Ee=async()=>{let e={json:()=>Promise.resolve(),status:200,ok:!0,headers:new Headers({"Content-Type":"application/json"})};return Promise.resolve(e)},G=async e=>{let{responseBody:t,status:n=200,headers:s={},delay:o}=e,r={json:()=>Promise.resolve(t),status:n,ok:n>=200&&n<=299,headers:new Headers({"Content-Type":"application/json",...s})};return o?new Promise(a=>setTimeout(()=>a(r),o)):Promise.resolve(r)},Me=e=>console.warn(`
2
2
  ${f.default.white.bold.bgRed("wrapito")} ${f.default.redBright.bold("cannot find any mock matching:")}
3
3
  ${f.default.greenBright(`URL: ${e.url}`)}
4
4
  ${f.default.greenBright(`METHOD: ${e.method?.toLowerCase()}`)}
5
5
  ${f.default.greenBright(`REQUEST BODY: ${e._bodyInit}`)}
6
- `),Q=async(e,t,n)=>{let s=e.find(F(t));if(!s)return n&&ve(t),qe();let{multipleResponses:o}=s;if(!o)return V(s);let r=o.find(a=>!a.hasBeenReturned);if(!r){n&&We(s);return}return r.hasBeenReturned=!0,V(r)},J=(e=[],t=!1)=>{global.window.fetch.mockImplementation((s,o)=>{if(typeof s=="string"){let a=new Request(s,o);return Q(e,a,t)}return Q(e,s,t)})},We=e=>{let t=`\u{1F32F} Wrapito: Missing response in the multipleResponses array for path ${e.path} and method ${e.method}.`,n=f.default.greenBright(t);console.warn(n)};var j,g=e=>{j={...j,...e}},y=()=>({...j});beforeEach(()=>{global.fetch=O()});afterEach(()=>{global.fetch.mockReset()});var Ce=e=>(g({Component:e,responses:[],props:{},path:"",hasPath:!1,debug:process.env.npm_config_debugRequests==="true"}),x()),x=()=>{let e=je();return{withProps:Ne,withNetwork:Se,atPath:$e,debugRequests:De,mount:Ue,...e}},Ae=e=>{let t=y(),n=[...t.responses,...e];g({...t,responses:n})},He=(e,t)=>(t({addResponses:Ae},e),x()),Be=(e,t)=>{let{extend:n}=d(),s=n[t];return{...e,[t]:(...o)=>He(o,s)}},je=()=>{let{extend:e}=d();return Object.keys(e).reduce(Be,{})},Ne=e=>{let t=y();return g({...t,props:e}),x()},Se=(e=[])=>{let t=y(),n=Array.isArray(e)?e:[e];return g({...t,responses:[...t.responses,...n]}),x()},$e=(e,t)=>{let n=y();return g({...n,historyState:t,path:e,hasPath:!0}),x()},De=()=>{let e=y();return g({...e,debug:!0}),x()},Ue=()=>{let{portal:e,changeRoute:t,history:n,mount:s}=d(),{Component:o,props:r,responses:a,path:l,hasPath:i,debug:u,historyState:c}=y(),m=o;return e&&Fe(e),i&&n&&(console.warn("wrapito WARNING: history is DEPRECATED. Pass a changeRoute function to the config instead."),console.warn("Read about changeRoute in: https://github.com/mercadona/wrapito#changeRoute"),n.push(l,c)),i&&!n&&t(l),J(a,u),s(Y.createElement(m,{...r}))},Fe=e=>{if(document.getElementById(e))return;let t=document.createElement("div");t.setAttribute("id",e),document.body.appendChild(t)};var z=require("jest-diff"),N=(e,t)=>{let n=t?.host?`\u{1F32F} Wrapito: ${t?.host}${e} ain't got called`:`\u{1F32F} Wrapito: ${e} ain't got called`;return{pass:!1,message:()=>n}},K=(e,t,n)=>({pass:!1,message:()=>`\u{1F32F} Wrapito: ${e} is called ${n} times, you expected ${t} times`}),X=(e,t)=>({pass:!1,message:()=>`\u{1F32F} Wrapito: Fetch method does not match, expected ${e} received ${t??"none"}`}),Z=(e,t)=>{let n=t.map(s=>(0,z.diff)(e,s)).join(`
6
+ `),V=async(e,t,n)=>{let s=e.find(F(t));if(!s)return n&&Me(t),Ee();let{multipleResponses:o}=s;if(!o)return G(s);let r=o.find(a=>!a.hasBeenReturned);if(!r){n&&Pe(s);return}return r.hasBeenReturned=!0,G(r)},Q=(e=[],t=!1)=>{global.window.fetch.mockImplementation((s,o)=>{if(typeof s=="string"){let a=new Request(s,o);return V(e,a,t)}return V(e,s,t)})},Pe=e=>{let t=`\u{1F32F} Wrapito: Missing response in the multipleResponses array for path ${e.path} and method ${e.method}.`,n=f.default.greenBright(t);console.warn(n)};var j,g=e=>{j={...j,...e}},y=()=>({...j});beforeEach(()=>{global.fetch=O()});afterEach(()=>{global.fetch.mockReset()});var Ie=e=>(g({Component:e,responses:[],props:{},path:"",hasPath:!1,debug:process.env.npm_config_debugRequests==="true"}),x()),x=()=>{let e=ve();return{withProps:Ce,withNetwork:Ae,atPath:Be,debugRequests:je,mount:He,...e}},Oe=e=>{let t=y(),n=[...t.responses,...e];g({...t,responses:n})},We=(e,t)=>(t({addResponses:Oe},e),x()),qe=(e,t)=>{let{extend:n}=d(),s=n[t];return{...e,[t]:(...o)=>We(o,s)}},ve=()=>{let{extend:e}=d();return Object.keys(e).reduce(qe,{})},Ce=e=>{let t=y();return g({...t,props:e}),x()},Ae=(e=[])=>{let t=y(),n=Array.isArray(e)?e:[e];return g({...t,responses:[...t.responses,...n]}),x()},Be=(e,t)=>{let n=y();return g({...n,historyState:t,path:e,hasPath:!0}),x()},je=()=>{let e=y();return g({...e,debug:!0}),x()},He=()=>{let{portal:e,changeRoute:t,history:n,mount:s}=d(),{Component:o,props:r,responses:a,path:l,hasPath:p,debug:u,historyState:i}=y(),m=o;return e&&Se(e),p&&n&&(console.warn("wrapito WARNING: history is DEPRECATED. Pass a changeRoute function to the config instead."),console.warn("Read about changeRoute in: https://github.com/mercadona/wrapito#changeRoute"),n.push(l,i)),p&&!n&&t(l),Q(a,u),s(J.createElement(m,{...r}))},Se=e=>{if(document.getElementById(e))return;let t=document.createElement("div");t.setAttribute("id",e),document.body.appendChild(t)};var Y=require("jest-diff"),H=(e,t)=>{let n=t?.host?`\u{1F32F} Wrapito: ${t?.host}${e} ain't got called`:`\u{1F32F} Wrapito: ${e} ain't got called`;return{pass:!1,message:()=>n}},z=(e,t,n)=>({pass:!1,message:()=>`\u{1F32F} Wrapito: ${e} is called ${n} times, you expected ${t} times`}),K=(e,t)=>({pass:!1,message:()=>`\u{1F32F} Wrapito: Fetch method does not match, expected ${e} received ${t??"none"}`}),X=(e,t)=>{let n=t.map(s=>(0,Y.diff)(e,s)).join(`
7
7
 
8
8
  `);return{pass:!1,message:()=>`\u{1F32F} Wrapito: Fetch body does not match.
9
- ${n}`}},ee=(e,t)=>{let n=t.find(s=>e!==s);return{pass:!1,message:()=>`\u{1F32F} Wrapito: Host request does not match, expected ${e} received ${n}`}},te=()=>({pass:!1,message:()=>"\u{1F32F} Wrapito: Unable to find body."}),S=()=>({pass:!0,message:()=>"Test passing"}),ne=(e,t)=>{let n=t?.host?`\u{1F32F} Wrapito: ${t.host}${e} is called`:`\u{1F32F} Wrapito: ${e} is called`;return{pass:!0,message:()=>n}};var se=E(require("deep-equal"),1);var oe=()=>{let e=d().defaultHost;return e?.includes("http")?e:"https://default.com"},Le=(e="",t,n)=>t.includes(n)?t:e+t,q=e=>e instanceof Request,_e=e=>q(e)?e.url:e,v=(e,t={method:"GET"})=>fetch.mock.calls.filter(([s])=>{let o=_e(s),r=oe(),a=new URL(o,r),l=Le(t?.host,e,r),i=t?.host||r,u=new URL(l,i),c=a.pathname===u.pathname,m=a.search===u.search,p=a.host===u.host;return u.search?c&&m:t?.host?c&&p:c}),re=e=>e.flat(1).filter(q).map(t=>t.method),ae=e=>e.flat(1).filter(q).map(t=>t._bodyInit?JSON.parse(t._bodyInit):{}),ie=e=>e.flat(1).filter(q).map(t=>new URL(t.url,oe()).hostname),ce=(e,t)=>e&&!t.includes(e),pe=(e,t)=>t.map(s=>(0,se.default)(e,s)).every(s=>s===!1),ue=(e,t)=>t.every(s=>s!==e),le=e=>e.length===0;var Ge=(e,t)=>{let n=v(e);if(le(n))return N(e);let s=re(n),o=t?.method;if(ce(o,s))return X(o,s);let r=ae(n),a=t?.body;if(!a)return te();if(pe(a,r))return Z(a,r);let l=ie(n),i=t?.host;return i&&ue(i,l)?ee(i,l):S()},Ve=(e,t={method:"GET"})=>v(e,t).length?ne(e,t):N(e,t),Qe=(e,t,n={method:"GET"})=>{let s=v(e,n);return s.length!==t?K(e,t,s.length):S()},Je={toHaveBeenFetched:Ve,toHaveBeenFetchedWith:Ge,toHaveBeenFetchedTimes:Qe};0&&(module.exports={assertions,configure,getConfig,matchers,mount,wrap});
9
+ ${n}`}},Z=()=>({pass:!1,message:()=>"\u{1F32F} Wrapito: Unable to find body."}),S=()=>({pass:!0,message:()=>"Test passing"}),ee=(e,t)=>{let n=t?.host?`\u{1F32F} Wrapito: ${t.host}${e} is called`:`\u{1F32F} Wrapito: ${e} is called`;return{pass:!0,message:()=>n}};var te=M(require("deep-equal"),1);var Ne=()=>{let e=d().defaultHost;return e?.includes("http")?e:"https://default.com"},$e=(e="",t,n)=>t.includes(n)?t:e+t,N=e=>e instanceof Request,De=e=>N(e)?e.url:e,W=(e,t={method:"GET"})=>fetch.mock.calls.filter(([s])=>{let o=De(s),r=Ne(),a=new URL(o,r),l=$e(t?.host,e,r),p=t?.host||r,u=new URL(l,p),i=a.pathname===u.pathname,m=a.search===u.search,c=a.host===u.host;return u.search?i&&m:t?.host?i&&c:i}),ne=e=>e.flat(1).filter(N).map(t=>t.method),se=e=>e.flat(1).filter(N).map(t=>t._bodyInit?JSON.parse(t._bodyInit):{}),oe=(e,t)=>e&&!t.includes(e),re=(e,t)=>t.map(s=>(0,te.default)(e,s)).every(s=>s===!1),ae=e=>e.length===0;var Fe=(e,t)=>{let n=W(e);if(ae(n))return H(e);let s=ne(n),o=t?.method;if(oe(o,s))return K(o,s);let r=se(n),a=t?.body;return a?re(a,r)?X(a,r):S():Z()},Ue=(e,t={method:"GET"})=>W(e,t).length?ee(e,t):H(e,t),Le=(e,t,n={method:"GET"})=>{let s=W(e,n);return s.length!==t?z(e,t,s.length):S()},_e={toHaveBeenFetched:Ue,toHaveBeenFetchedWith:Fe,toHaveBeenFetchedTimes:Le};0&&(module.exports={assertions,configure,getConfig,matchers,wrap});
package/dist/index.mjs CHANGED
@@ -1,9 +1,9 @@
1
- import*as _ from"react";import k from"chalk";import j from"object-hash";import{render as re}from"react-dom";var ae=e=>{let t=document.body.appendChild(document.createElement("div"));return re(e,t),t},W={defaultHost:"",extend:{},mount:ae,changeRoute:e=>window.history.replaceState(null,"",e)};function Ne(e){W={...W,...e}}var d=()=>({...W});var N=e=>t=>{let{method:n="GET",path:s,host:o=d().defaultHost,requestBody:r=void 0,catchParams:a}=t,l=o+s,i=!d().handleQueryParams||a,u=j({url:i?l:l.split("?")[0],method:n.toUpperCase(),requestBody:r}),c;return"_bodyInit"in e&&e._bodyInit!==void 0&&(c=JSON.parse(e._bodyInit)),j({url:i?e.url:e.url.split("?")[0],method:e.method,requestBody:c})===u};function T(e,t){if(!e)throw new Error(t)}function w(e,t){return typeof t===e}function ie(e){return e instanceof Promise}function C(e,t,n){Object.defineProperty(e,t,n)}function b(e,t,n){Object.defineProperty(e,t,{value:n})}var M=Symbol.for("tinyspy:spy"),ce=new Set,pe=e=>{e.called=!1,e.callCount=0,e.calls=[],e.results=[],e.next=[]},ue=e=>(C(e,M,{value:{reset:()=>pe(e[M])}}),e[M]),E=e=>e[M]||ue(e);function le(e){T(w("function",e)||w("undefined",e),"cannot spy on a non-function value");let t=function(...s){let o=E(t);o.called=!0,o.callCount++,o.calls.push(s);let r=o.next.shift();if(r){o.results.push(r);let[u,c]=r;if(u==="ok")return c;throw c}let a,l="ok";if(o.impl)try{new.target?a=Reflect.construct(o.impl,s,new.target):a=o.impl.apply(this,s),l="ok"}catch(u){throw a=u,l="error",o.results.push([l,u]),u}let i=[l,a];if(ie(a)){let u=a.then(c=>i[1]=c).catch(c=>{throw i[0]="error",i[1]=c,c});Object.assign(u,a),a=u}return o.results.push(i),a};b(t,"_isMockFunction",!0),b(t,"length",e?e.length:0),b(t,"name",e&&e.name||"spy");let n=E(t);return n.reset(),n.impl=e,t}var S=(e,t)=>Object.getOwnPropertyDescriptor(e,t),$=(e,t)=>{t!=null&&typeof t=="function"&&t.prototype!=null&&Object.setPrototypeOf(e.prototype,t.prototype)};function D(e,t,n){T(!w("undefined",e),"spyOn could not find an object to spy upon"),T(w("object",e)||w("function",e),"cannot spyOn on a primitive value");let[s,o]=(()=>{if(!w("object",t))return[t,"value"];if("getter"in t&&"setter"in t)throw new Error("cannot spy on both getter and setter");if("getter"in t)return[t.getter,"get"];if("setter"in t)return[t.setter,"set"];throw new Error("specify getter or setter to spy on")})(),r=S(e,s),a=Object.getPrototypeOf(e),l=a&&S(a,s),i=r||l;T(i||s in e,`${String(s)} does not exist`);let u=!1;o==="value"&&i&&!i.value&&i.get&&(o="get",u=!0,n=i.get());let c;i?c=i[o]:o!=="value"?c=()=>e[s]:c=e[s],n||(n=c);let m=le(n);o==="value"&&$(m,c);let p=R=>{let{value:q,...v}=i||{configurable:!0,writable:!0};o!=="value"&&delete v.writable,v[o]=R,C(e,s,v)},y=()=>i?C(e,s,i):p(c),h=m[M];return b(h,"restore",y),b(h,"getOriginal",()=>u?c():c),b(h,"willCall",R=>(h.impl=R,m)),p(u?()=>($(m,n),m):m),ce.add(m),m}var de=new Set,he=0;function fe(e){let t=e,n,s=[],o=[],r=E(e),a={get calls(){return r.calls},get instances(){return s},get invocationCallOrder(){return o},get results(){return r.results.map(([p,y])=>({type:p==="error"?"throw":"return",value:y}))},get lastCall(){return r.calls[r.calls.length-1]}},l=[],i=!1;function u(...p){return s.push(this),o.push(++he),(i?n:l.shift()||n||r.getOriginal()||(()=>{})).apply(this,p)}let c=t.name;t.getMockName=()=>c||"vi.fn()",t.mockName=p=>(c=p,t),t.mockClear=()=>(r.reset(),s=[],o=[],t),t.mockReset=()=>(t.mockClear(),n=()=>{},l=[],t),t.mockRestore=()=>(t.mockReset(),r.restore(),n=void 0,t),t.getMockImplementation=()=>n,t.mockImplementation=p=>(n=p,r.willCall(u),t),t.mockImplementationOnce=p=>(l.push(p),t);function m(p,y){let h=n;n=p,r.willCall(u),i=!0;let R=()=>{n=h,i=!1},q=y();return q instanceof Promise?q.then(()=>(R(),t)):(R(),t)}return t.withImplementation=m,t.mockReturnThis=()=>t.mockImplementation(function(){return this}),t.mockReturnValue=p=>t.mockImplementation(()=>p),t.mockReturnValueOnce=p=>t.mockImplementationOnce(()=>p),t.mockResolvedValue=p=>t.mockImplementation(()=>Promise.resolve(p)),t.mockResolvedValueOnce=p=>t.mockImplementationOnce(()=>Promise.resolve(p)),t.mockRejectedValue=p=>t.mockImplementation(()=>Promise.reject(p)),t.mockRejectedValueOnce=p=>t.mockImplementationOnce(()=>Promise.reject(p)),Object.defineProperty(t,"mock",{get:()=>a}),r.willCall(u),de.add(t),t}var P=e=>fe(D({spy:e||(()=>{})},"spy"));beforeEach(()=>{global.window.fetch=P()});afterEach(()=>{global.window.fetch.mockReset()});var ge=async()=>{let e={json:()=>Promise.resolve(),status:200,ok:!0,headers:new Headers({"Content-Type":"application/json"})};return Promise.resolve(e)},U=async e=>{let{responseBody:t,status:n=200,headers:s={},delay:o}=e,r={json:()=>Promise.resolve(t),status:n,ok:n>=200&&n<=299,headers:new Headers({"Content-Type":"application/json",...s})};return o?new Promise(a=>setTimeout(()=>a(r),o)):Promise.resolve(r)},ye=e=>console.warn(`
1
+ import*as _ from"react";import k from"chalk";import H from"object-hash";import{render as te}from"@testing-library/react";var q={defaultHost:"",extend:{},mount:te,changeRoute:e=>window.history.replaceState(null,"",e)};function Ae(e){q={...q,...e}}var d=()=>({...q});var S=e=>t=>{let{method:n="GET",path:s,host:o=d().defaultHost,requestBody:r=void 0,catchParams:a}=t,l=o+s,p=!d().handleQueryParams||a,u=H({url:p?l:l.split("?")[0],method:n.toUpperCase(),requestBody:r}),i;return"_bodyInit"in e&&e._bodyInit!==void 0&&(i=JSON.parse(e._bodyInit)),H({url:p?e.url:e.url.split("?")[0],method:e.method,requestBody:i})===u};function E(e,t){if(!e)throw new Error(t)}function w(e,t){return typeof t===e}function ne(e){return e instanceof Promise}function v(e,t,n){Object.defineProperty(e,t,n)}function b(e,t,n){Object.defineProperty(e,t,{value:n})}var T=Symbol.for("tinyspy:spy"),se=new Set,oe=e=>{e.called=!1,e.callCount=0,e.calls=[],e.results=[],e.next=[]},re=e=>(v(e,T,{value:{reset:()=>oe(e[T])}}),e[T]),M=e=>e[T]||re(e);function ae(e){E(w("function",e)||w("undefined",e),"cannot spy on a non-function value");let t=function(...s){let o=M(t);o.called=!0,o.callCount++,o.calls.push(s);let r=o.next.shift();if(r){o.results.push(r);let[u,i]=r;if(u==="ok")return i;throw i}let a,l="ok";if(o.impl)try{new.target?a=Reflect.construct(o.impl,s,new.target):a=o.impl.apply(this,s),l="ok"}catch(u){throw a=u,l="error",o.results.push([l,u]),u}let p=[l,a];if(ne(a)){let u=a.then(i=>p[1]=i).catch(i=>{throw p[0]="error",p[1]=i,i});Object.assign(u,a),a=u}return o.results.push(p),a};b(t,"_isMockFunction",!0),b(t,"length",e?e.length:0),b(t,"name",e&&e.name||"spy");let n=M(t);return n.reset(),n.impl=e,t}var N=(e,t)=>Object.getOwnPropertyDescriptor(e,t),$=(e,t)=>{t!=null&&typeof t=="function"&&t.prototype!=null&&Object.setPrototypeOf(e.prototype,t.prototype)};function D(e,t,n){E(!w("undefined",e),"spyOn could not find an object to spy upon"),E(w("object",e)||w("function",e),"cannot spyOn on a primitive value");let[s,o]=(()=>{if(!w("object",t))return[t,"value"];if("getter"in t&&"setter"in t)throw new Error("cannot spy on both getter and setter");if("getter"in t)return[t.getter,"get"];if("setter"in t)return[t.setter,"set"];throw new Error("specify getter or setter to spy on")})(),r=N(e,s),a=Object.getPrototypeOf(e),l=a&&N(a,s),p=r||l;E(p||s in e,`${String(s)} does not exist`);let u=!1;o==="value"&&p&&!p.value&&p.get&&(o="get",u=!0,n=p.get());let i;p?i=p[o]:o!=="value"?i=()=>e[s]:i=e[s],n||(n=i);let m=ae(n);o==="value"&&$(m,i);let c=R=>{let{value:O,...W}=p||{configurable:!0,writable:!0};o!=="value"&&delete W.writable,W[o]=R,v(e,s,W)},y=()=>p?v(e,s,p):c(i),h=m[T];return b(h,"restore",y),b(h,"getOriginal",()=>u?i():i),b(h,"willCall",R=>(h.impl=R,m)),c(u?()=>($(m,n),m):m),se.add(m),m}var ce=new Set,pe=0;function ue(e){let t=e,n,s=[],o=[],r=M(e),a={get calls(){return r.calls},get instances(){return s},get invocationCallOrder(){return o},get results(){return r.results.map(([c,y])=>({type:c==="error"?"throw":"return",value:y}))},get lastCall(){return r.calls[r.calls.length-1]}},l=[],p=!1;function u(...c){return s.push(this),o.push(++pe),(p?n:l.shift()||n||r.getOriginal()||(()=>{})).apply(this,c)}let i=t.name;t.getMockName=()=>i||"vi.fn()",t.mockName=c=>(i=c,t),t.mockClear=()=>(r.reset(),s=[],o=[],t),t.mockReset=()=>(t.mockClear(),n=()=>{},l=[],t),t.mockRestore=()=>(t.mockReset(),r.restore(),n=void 0,t),t.getMockImplementation=()=>n,t.mockImplementation=c=>(n=c,r.willCall(u),t),t.mockImplementationOnce=c=>(l.push(c),t);function m(c,y){let h=n;n=c,r.willCall(u),p=!0;let R=()=>{n=h,p=!1},O=y();return O instanceof Promise?O.then(()=>(R(),t)):(R(),t)}return t.withImplementation=m,t.mockReturnThis=()=>t.mockImplementation(function(){return this}),t.mockReturnValue=c=>t.mockImplementation(()=>c),t.mockReturnValueOnce=c=>t.mockImplementationOnce(()=>c),t.mockResolvedValue=c=>t.mockImplementation(()=>Promise.resolve(c)),t.mockResolvedValueOnce=c=>t.mockImplementationOnce(()=>Promise.resolve(c)),t.mockRejectedValue=c=>t.mockImplementation(()=>Promise.reject(c)),t.mockRejectedValueOnce=c=>t.mockImplementationOnce(()=>Promise.reject(c)),Object.defineProperty(t,"mock",{get:()=>a}),r.willCall(u),ce.add(t),t}var P=e=>ue(D({spy:e||(()=>{})},"spy"));beforeEach(()=>{global.window.fetch=P()});afterEach(()=>{global.window.fetch.mockReset()});var le=async()=>{let e={json:()=>Promise.resolve(),status:200,ok:!0,headers:new Headers({"Content-Type":"application/json"})};return Promise.resolve(e)},F=async e=>{let{responseBody:t,status:n=200,headers:s={},delay:o}=e,r={json:()=>Promise.resolve(t),status:n,ok:n>=200&&n<=299,headers:new Headers({"Content-Type":"application/json",...s})};return o?new Promise(a=>setTimeout(()=>a(r),o)):Promise.resolve(r)},me=e=>console.warn(`
2
2
  ${k.white.bold.bgRed("wrapito")} ${k.redBright.bold("cannot find any mock matching:")}
3
3
  ${k.greenBright(`URL: ${e.url}`)}
4
4
  ${k.greenBright(`METHOD: ${e.method?.toLowerCase()}`)}
5
5
  ${k.greenBright(`REQUEST BODY: ${e._bodyInit}`)}
6
- `),F=async(e,t,n)=>{let s=e.find(N(t));if(!s)return n&&ye(t),ge();let{multipleResponses:o}=s;if(!o)return U(s);let r=o.find(a=>!a.hasBeenReturned);if(!r){n&&Re(s);return}return r.hasBeenReturned=!0,U(r)},L=(e=[],t=!1)=>{global.window.fetch.mockImplementation((s,o)=>{if(typeof s=="string"){let a=new Request(s,o);return F(e,a,t)}return F(e,s,t)})},Re=e=>{let t=`\u{1F32F} Wrapito: Missing response in the multipleResponses array for path ${e.path} and method ${e.method}.`,n=k.greenBright(t);console.warn(n)};var A,f=e=>{A={...A,...e}},g=()=>({...A});beforeEach(()=>{global.fetch=P()});afterEach(()=>{global.fetch.mockReset()});var Xe=e=>(f({Component:e,responses:[],props:{},path:"",hasPath:!1,debug:process.env.npm_config_debugRequests==="true"}),x()),x=()=>{let e=xe();return{withProps:Me,withNetwork:Te,atPath:Ee,debugRequests:Pe,mount:Ie,...e}},we=e=>{let t=g(),n=[...t.responses,...e];f({...t,responses:n})},be=(e,t)=>(t({addResponses:we},e),x()),ke=(e,t)=>{let{extend:n}=d(),s=n[t];return{...e,[t]:(...o)=>be(o,s)}},xe=()=>{let{extend:e}=d();return Object.keys(e).reduce(ke,{})},Me=e=>{let t=g();return f({...t,props:e}),x()},Te=(e=[])=>{let t=g(),n=Array.isArray(e)?e:[e];return f({...t,responses:[...t.responses,...n]}),x()},Ee=(e,t)=>{let n=g();return f({...n,historyState:t,path:e,hasPath:!0}),x()},Pe=()=>{let e=g();return f({...e,debug:!0}),x()},Ie=()=>{let{portal:e,changeRoute:t,history:n,mount:s}=d(),{Component:o,props:r,responses:a,path:l,hasPath:i,debug:u,historyState:c}=g(),m=o;return e&&Oe(e),i&&n&&(console.warn("wrapito WARNING: history is DEPRECATED. Pass a changeRoute function to the config instead."),console.warn("Read about changeRoute in: https://github.com/mercadona/wrapito#changeRoute"),n.push(l,c)),i&&!n&&t(l),L(a,u),s(_.createElement(m,{...r}))},Oe=e=>{if(document.getElementById(e))return;let t=document.createElement("div");t.setAttribute("id",e),document.body.appendChild(t)};import{diff as qe}from"jest-diff";var H=(e,t)=>{let n=t?.host?`\u{1F32F} Wrapito: ${t?.host}${e} ain't got called`:`\u{1F32F} Wrapito: ${e} ain't got called`;return{pass:!1,message:()=>n}},G=(e,t,n)=>({pass:!1,message:()=>`\u{1F32F} Wrapito: ${e} is called ${n} times, you expected ${t} times`}),V=(e,t)=>({pass:!1,message:()=>`\u{1F32F} Wrapito: Fetch method does not match, expected ${e} received ${t??"none"}`}),Q=(e,t)=>{let n=t.map(s=>qe(e,s)).join(`
6
+ `),U=async(e,t,n)=>{let s=e.find(S(t));if(!s)return n&&me(t),le();let{multipleResponses:o}=s;if(!o)return F(s);let r=o.find(a=>!a.hasBeenReturned);if(!r){n&&de(s);return}return r.hasBeenReturned=!0,F(r)},L=(e=[],t=!1)=>{global.window.fetch.mockImplementation((s,o)=>{if(typeof s=="string"){let a=new Request(s,o);return U(e,a,t)}return U(e,s,t)})},de=e=>{let t=`\u{1F32F} Wrapito: Missing response in the multipleResponses array for path ${e.path} and method ${e.method}.`,n=k.greenBright(t);console.warn(n)};var C,f=e=>{C={...C,...e}},g=()=>({...C});beforeEach(()=>{global.fetch=P()});afterEach(()=>{global.fetch.mockReset()});var Je=e=>(f({Component:e,responses:[],props:{},path:"",hasPath:!1,debug:process.env.npm_config_debugRequests==="true"}),x()),x=()=>{let e=ye();return{withProps:Re,withNetwork:we,atPath:be,debugRequests:ke,mount:xe,...e}},he=e=>{let t=g(),n=[...t.responses,...e];f({...t,responses:n})},fe=(e,t)=>(t({addResponses:he},e),x()),ge=(e,t)=>{let{extend:n}=d(),s=n[t];return{...e,[t]:(...o)=>fe(o,s)}},ye=()=>{let{extend:e}=d();return Object.keys(e).reduce(ge,{})},Re=e=>{let t=g();return f({...t,props:e}),x()},we=(e=[])=>{let t=g(),n=Array.isArray(e)?e:[e];return f({...t,responses:[...t.responses,...n]}),x()},be=(e,t)=>{let n=g();return f({...n,historyState:t,path:e,hasPath:!0}),x()},ke=()=>{let e=g();return f({...e,debug:!0}),x()},xe=()=>{let{portal:e,changeRoute:t,history:n,mount:s}=d(),{Component:o,props:r,responses:a,path:l,hasPath:p,debug:u,historyState:i}=g(),m=o;return e&&Te(e),p&&n&&(console.warn("wrapito WARNING: history is DEPRECATED. Pass a changeRoute function to the config instead."),console.warn("Read about changeRoute in: https://github.com/mercadona/wrapito#changeRoute"),n.push(l,i)),p&&!n&&t(l),L(a,u),s(_.createElement(m,{...r}))},Te=e=>{if(document.getElementById(e))return;let t=document.createElement("div");t.setAttribute("id",e),document.body.appendChild(t)};import{diff as Ee}from"jest-diff";var A=(e,t)=>{let n=t?.host?`\u{1F32F} Wrapito: ${t?.host}${e} ain't got called`:`\u{1F32F} Wrapito: ${e} ain't got called`;return{pass:!1,message:()=>n}},G=(e,t,n)=>({pass:!1,message:()=>`\u{1F32F} Wrapito: ${e} is called ${n} times, you expected ${t} times`}),V=(e,t)=>({pass:!1,message:()=>`\u{1F32F} Wrapito: Fetch method does not match, expected ${e} received ${t??"none"}`}),Q=(e,t)=>{let n=t.map(s=>Ee(e,s)).join(`
7
7
 
8
8
  `);return{pass:!1,message:()=>`\u{1F32F} Wrapito: Fetch body does not match.
9
- ${n}`}},J=(e,t)=>{let n=t.find(s=>e!==s);return{pass:!1,message:()=>`\u{1F32F} Wrapito: Host request does not match, expected ${e} received ${n}`}},Y=()=>({pass:!1,message:()=>"\u{1F32F} Wrapito: Unable to find body."}),B=()=>({pass:!0,message:()=>"Test passing"}),z=(e,t)=>{let n=t?.host?`\u{1F32F} Wrapito: ${t.host}${e} is called`:`\u{1F32F} Wrapito: ${e} is called`;return{pass:!0,message:()=>n}};import ve from"deep-equal";var K=()=>{let e=d().defaultHost;return e?.includes("http")?e:"https://default.com"},We=(e="",t,n)=>t.includes(n)?t:e+t,I=e=>e instanceof Request,Ce=e=>I(e)?e.url:e,O=(e,t={method:"GET"})=>fetch.mock.calls.filter(([s])=>{let o=Ce(s),r=K(),a=new URL(o,r),l=We(t?.host,e,r),i=t?.host||r,u=new URL(l,i),c=a.pathname===u.pathname,m=a.search===u.search,p=a.host===u.host;return u.search?c&&m:t?.host?c&&p:c}),X=e=>e.flat(1).filter(I).map(t=>t.method),Z=e=>e.flat(1).filter(I).map(t=>t._bodyInit?JSON.parse(t._bodyInit):{}),ee=e=>e.flat(1).filter(I).map(t=>new URL(t.url,K()).hostname),te=(e,t)=>e&&!t.includes(e),ne=(e,t)=>t.map(s=>ve(e,s)).every(s=>s===!1),se=(e,t)=>t.every(s=>s!==e),oe=e=>e.length===0;var Ae=(e,t)=>{let n=O(e);if(oe(n))return H(e);let s=X(n),o=t?.method;if(te(o,s))return V(o,s);let r=Z(n),a=t?.body;if(!a)return Y();if(ne(a,r))return Q(a,r);let l=ee(n),i=t?.host;return i&&se(i,l)?J(i,l):B()},He=(e,t={method:"GET"})=>O(e,t).length?z(e,t):H(e,t),Be=(e,t,n={method:"GET"})=>{let s=O(e,n);return s.length!==t?G(e,t,s.length):B()},it={toHaveBeenFetched:He,toHaveBeenFetchedWith:Ae,toHaveBeenFetchedTimes:Be};export{it as assertions,Ne as configure,d as getConfig,it as matchers,ae as mount,Xe as wrap};
9
+ ${n}`}},J=()=>({pass:!1,message:()=>"\u{1F32F} Wrapito: Unable to find body."}),B=()=>({pass:!0,message:()=>"Test passing"}),Y=(e,t)=>{let n=t?.host?`\u{1F32F} Wrapito: ${t.host}${e} is called`:`\u{1F32F} Wrapito: ${e} is called`;return{pass:!0,message:()=>n}};import Me from"deep-equal";var Pe=()=>{let e=d().defaultHost;return e?.includes("http")?e:"https://default.com"},Ie=(e="",t,n)=>t.includes(n)?t:e+t,j=e=>e instanceof Request,Oe=e=>j(e)?e.url:e,I=(e,t={method:"GET"})=>fetch.mock.calls.filter(([s])=>{let o=Oe(s),r=Pe(),a=new URL(o,r),l=Ie(t?.host,e,r),p=t?.host||r,u=new URL(l,p),i=a.pathname===u.pathname,m=a.search===u.search,c=a.host===u.host;return u.search?i&&m:t?.host?i&&c:i}),z=e=>e.flat(1).filter(j).map(t=>t.method),K=e=>e.flat(1).filter(j).map(t=>t._bodyInit?JSON.parse(t._bodyInit):{}),X=(e,t)=>e&&!t.includes(e),Z=(e,t)=>t.map(s=>Me(e,s)).every(s=>s===!1),ee=e=>e.length===0;var We=(e,t)=>{let n=I(e);if(ee(n))return A(e);let s=z(n),o=t?.method;if(X(o,s))return V(o,s);let r=K(n),a=t?.body;return a?Z(a,r)?Q(a,r):B():J()},qe=(e,t={method:"GET"})=>I(e,t).length?Y(e,t):A(e,t),ve=(e,t,n={method:"GET"})=>{let s=I(e,n);return s.length!==t?G(e,t,s.length):B()},st={toHaveBeenFetched:qe,toHaveBeenFetchedWith:We,toHaveBeenFetchedTimes:ve};export{st as assertions,Ae as configure,d as getConfig,st as matchers,Je as wrap};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wrapito",
3
- "version": "12.3.0",
3
+ "version": "13.0.0-beta2",
4
4
  "description": "🌯 🌯 Wrap you tests so that you can test both behaviour and components with less effort.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -60,28 +60,27 @@
60
60
  "whatwg-fetch": "^3.6.20"
61
61
  },
62
62
  "devDependencies": {
63
- "@testing-library/jest-dom": "^4.2.4",
64
- "@testing-library/react": "^12.1.5",
63
+ "@testing-library/jest-dom": "^6.6.4",
64
+ "@testing-library/react": "^16.3.0",
65
65
  "@types/deep-equal": "^1.0.4",
66
66
  "@types/history": "^4.7.11",
67
67
  "@types/node": "^20.10.5",
68
68
  "@types/object-hash": "^3.0.6",
69
- "@types/react": "^17.0.73",
70
- "@types/react-dom": "^17.0.25",
69
+ "@types/react": "^19.1.8",
71
70
  "@vitest/coverage-istanbul": "^1.1.0",
72
71
  "eslint": "^8.56.0",
73
72
  "eslint-config-prettier": "^9.1.0",
74
73
  "eslint-config-react-app": "^7.0.1",
75
74
  "eslint-plugin-prettier": "^5.1.1",
76
75
  "eslint-plugin-react": "^7.33.2",
77
- "jsdom": "^24.0.0",
76
+ "jsdom": "^26.1.0",
78
77
  "prettier": "^3.1.1",
79
- "react": "^17.0.0",
80
- "react-dom": "^17.0.2",
81
- "react-redux": "^7.2.9",
78
+ "react": "^19.1.0",
79
+ "react-dom": "^19.1.0",
80
+ "react-redux": "^9.2.0",
82
81
  "react-router-dom": "^5.3.4",
83
- "redux": "^4.2.1",
84
- "redux-thunk": "^2.4.2",
82
+ "redux": "^5.0.1",
83
+ "redux-thunk": "^3.1.0",
85
84
  "rollup": "^4.9.1",
86
85
  "tinyspy": "^2.2.1",
87
86
  "tsup": "^8.0.1",
@@ -89,7 +88,9 @@
89
88
  "vitest": "^1.1.0"
90
89
  },
91
90
  "peerDependencies": {
92
- "react": "*",
93
- "react-dom": "*"
91
+ "@testing-library/jest-dom": ">=5.16.4",
92
+ "@testing-library/react": ">=14.0.0",
93
+ "react-dom": ">=18.0.0",
94
+ "react": ">=18.0.0"
94
95
  }
95
96
  }