wrapito 13.3.0-beta24 → 13.3.0-beta25

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.js CHANGED
@@ -1,12 +1,12 @@
1
- "use strict";var we=Object.create;var O=Object.defineProperty;var be=Object.getOwnPropertyDescriptor;var Ie=Object.getOwnPropertyNames;var xe=Object.getPrototypeOf,ke=Object.prototype.hasOwnProperty;var Me=(e,t)=>{for(var n in t)O(e,n,{get:t[n],enumerable:!0})},L=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Ie(t))!ke.call(e,r)&&r!==n&&O(e,r,{get:()=>t[r],enumerable:!(s=be(t,r))||s.enumerable});return e};var E=(e,t,n)=>(n=e!=null?we(xe(e)):{},L(t||!e||!e.__esModule?O(n,"default",{value:e,enumerable:!0}):n,e)),Te=e=>L(O({},"__esModule",{value:!0}),e);var st={};Me(st,{assertions:()=>nt,configure:()=>Oe,getConfig:()=>m,matchers:()=>nt,wrap:()=>Ne});module.exports=Te(st);var Z=E(require("react"),1);var w=E(require("chalk"),1);var W=E(require("object-hash"),1);var F=require("@testing-library/react"),A={defaultHost:"",extend:{},mount:F.render,changeRoute:e=>window.history.replaceState(null,"",e)};function Oe(e){A={...A,...e}}var m=()=>({...A});var _=e=>t=>{let{method:n="GET",path:s,host:r=m().defaultHost,requestBody:o=void 0,catchParams:i}=t,l=r+s,p=!m().handleQueryParams||i,u=(0,W.default)({url:p?l:l.split("?")[0],method:n.toUpperCase(),requestBody:o}),a;return"_bodyInit"in e&&e._bodyInit!==void 0&&(a=JSON.parse(e._bodyInit)),(0,W.default)({url:p?e.url:e.url.split("?")[0],method:e.method,requestBody:a})===u};function q(e,t){if(!e)throw new Error(t)}function I(e,t){return typeof t===e}function Ee(e){return e instanceof Promise}function C(e,t,n){Object.defineProperty(e,t,n)}function x(e,t,n){Object.defineProperty(e,t,{value:n})}var M=Symbol.for("tinyspy:spy"),qe=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]),P=e=>e[M]||Ue(e);function ve(e){q(I("function",e)||I("undefined",e),"cannot spy on a non-function value");let t=function(...s){let r=P(t);r.called=!0,r.callCount++,r.calls.push(s);let o=r.next.shift();if(o){r.results.push(o);let[u,a]=o;if(u==="ok")return a;throw a}let i,l="ok";if(r.impl)try{new.target?i=Reflect.construct(r.impl,s,new.target):i=r.impl.apply(this,s),l="ok"}catch(u){throw i=u,l="error",r.results.push([l,u]),u}let p=[l,i];if(Ee(i)){let u=i.then(a=>p[1]=a).catch(a=>{throw p[0]="error",p[1]=a,a});Object.assign(u,i),i=u}return r.results.push(p),i};x(t,"_isMockFunction",!0),x(t,"length",e?e.length:0),x(t,"name",e&&e.name||"spy");let n=P(t);return n.reset(),n.impl=e,t}var G=(e,t)=>Object.getOwnPropertyDescriptor(e,t),V=(e,t)=>{t!=null&&typeof t=="function"&&t.prototype!=null&&Object.setPrototypeOf(e.prototype,t.prototype)};function Q(e,t,n){q(!I("undefined",e),"spyOn could not find an object to spy upon"),q(I("object",e)||I("function",e),"cannot spyOn on a primitive value");let[s,r]=(()=>{if(!I("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")})(),o=G(e,s),i=Object.getPrototypeOf(e),l=i&&G(i,s),p=o||l;q(p||s in e,`${String(s)} does not exist`);let u=!1;r==="value"&&p&&!p.value&&p.get&&(r="get",u=!0,n=p.get());let a;p?a=p[r]:r!=="value"?a=()=>e[s]:a=e[s],n||(n=a);let d=ve(n);r==="value"&&V(d,a);let c=f=>{let{value:k,...v}=p||{configurable:!0,writable:!0};r!=="value"&&delete v.writable,v[r]=f,C(e,s,v)},g=()=>p?C(e,s,p):c(a),h=d[M];return x(h,"restore",g),x(h,"getOriginal",()=>u?a():a),x(h,"willCall",f=>(h.impl=f,d)),c(u?()=>(V(d,n),d):d),qe.add(d),d}var We=new Set,Ce=0;function De(e){let t=e,n,s=[],r=[],o=P(e),i={get calls(){return o.calls},get instances(){return s},get invocationCallOrder(){return r},get results(){return o.results.map(([c,g])=>({type:c==="error"?"throw":"return",value:g}))},get lastCall(){return o.calls[o.calls.length-1]}},l=[],p=!1;function u(...c){return s.push(this),r.push(++Ce),(p?n:l.shift()||n||o.getOriginal()||(()=>{})).apply(this,c)}let a=t.name;t.getMockName=()=>a||"vi.fn()",t.mockName=c=>(a=c,t),t.mockClear=()=>(o.reset(),s=[],r=[],t),t.mockReset=()=>(t.mockClear(),n=()=>{},l=[],t),t.mockRestore=()=>{let c=o.getOriginal();return t.mockClear(),l=[],p=!1,o.restore(),n=c,o.willCall(u),t},t.getMockImplementation=()=>n,t.mockImplementation=c=>(n=c,o.willCall(u),t),t.mockImplementationOnce=c=>(l.push(c),t);function d(c,g){let h=n;n=c,o.willCall(u),p=!0;let f=()=>{n=h,p=!1},k=g();return k instanceof Promise?k.then(()=>(f(),t)):(f(),t)}return t.withImplementation=d,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:()=>i}),o.willCall(u),We.add(t),t}var J=e=>De(Q({spy:e||(()=>{})},"spy"));var He=()=>typeof Headers>"u"?{get:()=>null,has:()=>!1}:new Headers({"Content-Type":"application/json"}),D=()=>({json:()=>Promise.resolve(),status:200,ok:!0,headers:He()});var H,S;beforeEach(()=>{H=globalThis.fetch,typeof window<"u"&&(S=window.fetch);let e=J(()=>Promise.resolve(D()));globalThis.fetch=e,typeof window<"u"&&(window.fetch=e)});afterEach(()=>{let e=globalThis.fetch;e?.mockRestore&&e.mockRestore();let t=H??S;globalThis.fetch=t??globalThis.fetch,typeof window<"u"&&(window.fetch=S??H??globalThis.fetch)});var Y=async()=>Promise.resolve(D()),z=async e=>{let{responseBody:t,status:n=200,headers:s={},delay:r}=e,o={json:()=>Promise.resolve(t),status:n,ok:n>=200&&n<=299,headers:new Headers({"Content-Type":"application/json",...s})};return r?new Promise(i=>setTimeout(()=>i(o),r)):Promise.resolve(o)},Se=e=>console.warn(`
2
- ${w.default.white.bold.bgRed("wrapito")} ${w.default.redBright.bold("cannot find any mock matching:")}
3
- ${w.default.greenBright(`URL: ${e.url}`)}
4
- ${w.default.greenBright(`METHOD: ${e.method?.toLowerCase()}`)}
5
- ${w.default.greenBright(`REQUEST BODY: ${e._bodyInit}`)}
6
- `),K=async(e,t,n)=>{let s=e.find(_(t));if(!s)return n&&Se(t),Y();let{multipleResponses:r}=s;if(!r)return z(s);let o=r.find(i=>!i.hasBeenReturned);return o?(o.hasBeenReturned=!0,z(o)):(n&&je(s),Y())},X=(e=[],t=!1)=>{globalThis.fetch.mockImplementation((s,r)=>{if(typeof s=="string"){let i=new Request(s,r);return K(e,i,t)}return K(e,s,t)})},je=e=>{let t=`\u{1F32F} Wrapito: Missing response in the multipleResponses array for path ${e.path} and method ${e.method}.`,n=w.default.greenBright(t);console.warn(n)};var j,y=e=>{j={...j,...e}},R=()=>({...j});var Ne=e=>(y({Component:e,responses:[],props:{},path:"",hasPath:!1,interactionConfig:void 0,debug:process.env.npm_config_debugRequests==="true"}),b()),b=()=>{let e=Fe();return{withProps:_e,withNetwork:Ve,withInteraction:Ge,atPath:Qe,debugRequests:Je,mount:Ye,...e}},Be=e=>{let t=R(),n=[...t.responses,...e];y({...t,responses:n})},$e=(e,t)=>(t({addResponses:Be},e),b()),Le=(e,t)=>{let{extend:n}=m(),s=n[t];return{...e,[t]:(...r)=>$e(r,s)}},Fe=()=>{let{extend:e}=m();return Object.keys(e).reduce(Le,{})},_e=e=>{let t=R();return y({...t,props:e}),b()},Ge=e=>{let t=R();return y({...t,interactionConfig:e}),b()},Ve=(e=[])=>{let t=R(),n=Array.isArray(e)?e:[e];return y({...t,responses:[...t.responses,...n]}),b()},Qe=(e,t)=>{let n=R();return y({...n,historyState:t,path:e,hasPath:!0}),b()},Je=()=>{let e=R();return y({...e,debug:!0}),b()},Ye=()=>{let{portal:e,portals:t,changeRoute:n,history:s,mount:r,interaction:o}=m(),{Component:i,props:l,responses:p,path:u,hasPath:a,debug:d,historyState:c,interactionConfig:g}=R(),h=i;e&&ee(e),t&&ze(t),a&&s&&(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"),s.push(u,c)),a&&!s&&n(u),X(p,d);let f=r(Z.createElement(h,{...l}));if(o){let k=o.setup?o.setup(o.userLib,g):o.userLib;return{...f,user:k}}return{...f,user:void 0}},ee=e=>{if(document.getElementById(e))return;let t=document.createElement("div");t.setAttribute("id",e),t.setAttribute("data-testid",e),document.body.appendChild(t)},ze=e=>{e.forEach(t=>{ee(t)})};var N=require("jest-diff"),B=(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}},te=(e,t,n)=>({pass:!1,message:()=>`\u{1F32F} Wrapito: ${e} is called ${n} times, you expected ${t} times`}),ne=(e,t)=>({pass:!1,message:()=>`\u{1F32F} Wrapito: Fetch method does not match, expected ${e} received ${t??"none"}`}),se=(e,t)=>{let n=t.map(s=>(0,N.diff)(e,s)).join(`
1
+ "use strict";var fe=Object.create;var E=Object.defineProperty;var ge=Object.getOwnPropertyDescriptor;var ye=Object.getOwnPropertyNames;var Re=Object.getPrototypeOf,be=Object.prototype.hasOwnProperty;var we=(e,t)=>{for(var n in t)E(e,n,{get:t[n],enumerable:!0})},B=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of ye(t))!be.call(e,r)&&r!==n&&E(e,r,{get:()=>t[r],enumerable:!(s=ge(t,r))||s.enumerable});return e};var T=(e,t,n)=>(n=e!=null?fe(Re(e)):{},B(t||!e||!e.__esModule?E(n,"default",{value:e,enumerable:!0}):n,e)),Ie=e=>B(E({},"__esModule",{value:!0}),e);var Ze={};we(Ze,{assertions:()=>Xe,configure:()=>xe,getConfig:()=>d,matchers:()=>Xe,wrap:()=>De});module.exports=Ie(Ze);var Y=T(require("react"),1);var b=T(require("chalk"),1);var C=T(require("object-hash"),1);var $=require("@testing-library/react"),W={defaultHost:"",extend:{},mount:$.render,changeRoute:e=>window.history.replaceState(null,"",e)};function xe(e){W={...W,...e}}var d=()=>({...W});var L=e=>t=>{let{method:n="GET",path:s,host:r=d().defaultHost,requestBody:o=void 0,catchParams:i}=t,l=r+s,c=!d().handleQueryParams||i,u=(0,C.default)({url:c?l:l.split("?")[0],method:n.toUpperCase(),requestBody:o}),a;return"_bodyInit"in e&&e._bodyInit!==void 0&&(a=JSON.parse(e._bodyInit)),(0,C.default)({url:c?e.url:e.url.split("?")[0],method:e.method,requestBody:a})===u};function q(e,t){if(!e)throw new Error(t)}function I(e,t){return typeof t===e}function ke(e){return e instanceof Promise}function D(e,t,n){Object.defineProperty(e,t,n)}function x(e,t,n){Object.defineProperty(e,t,{value:n})}var M=Symbol.for("tinyspy:spy"),Me=new Set,Oe=e=>{e.called=!1,e.callCount=0,e.calls=[],e.results=[],e.next=[]},Ee=e=>(D(e,M,{value:{reset:()=>Oe(e[M])}}),e[M]),P=e=>e[M]||Ee(e);function Te(e){q(I("function",e)||I("undefined",e),"cannot spy on a non-function value");let t=function(...s){let r=P(t);r.called=!0,r.callCount++,r.calls.push(s);let o=r.next.shift();if(o){r.results.push(o);let[u,a]=o;if(u==="ok")return a;throw a}let i,l="ok";if(r.impl)try{new.target?i=Reflect.construct(r.impl,s,new.target):i=r.impl.apply(this,s),l="ok"}catch(u){throw i=u,l="error",r.results.push([l,u]),u}let c=[l,i];if(ke(i)){let u=i.then(a=>c[1]=a).catch(a=>{throw c[0]="error",c[1]=a,a});Object.assign(u,i),i=u}return r.results.push(c),i};x(t,"_isMockFunction",!0),x(t,"length",e?e.length:0),x(t,"name",e&&e.name||"spy");let n=P(t);return n.reset(),n.impl=e,t}var F=(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){q(!I("undefined",e),"spyOn could not find an object to spy upon"),q(I("object",e)||I("function",e),"cannot spyOn on a primitive value");let[s,r]=(()=>{if(!I("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")})(),o=F(e,s),i=Object.getPrototypeOf(e),l=i&&F(i,s),c=o||l;q(c||s in e,`${String(s)} does not exist`);let u=!1;r==="value"&&c&&!c.value&&c.get&&(r="get",u=!0,n=c.get());let a;c?a=c[r]:r!=="value"?a=()=>e[s]:a=e[s],n||(n=a);let m=Te(n);r==="value"&&_(m,a);let p=f=>{let{value:k,...v}=c||{configurable:!0,writable:!0};r!=="value"&&delete v.writable,v[r]=f,D(e,s,v)},g=()=>c?D(e,s,c):p(a),h=m[M];return x(h,"restore",g),x(h,"getOriginal",()=>u?a():a),x(h,"willCall",f=>(h.impl=f,m)),p(u?()=>(_(m,n),m):m),Me.add(m),m}var Pe=new Set,Ue=0;function Ae(e){let t=e,n,s=[],r=[],o=P(e),i={get calls(){return o.calls},get instances(){return s},get invocationCallOrder(){return r},get results(){return o.results.map(([p,g])=>({type:p==="error"?"throw":"return",value:g}))},get lastCall(){return o.calls[o.calls.length-1]}},l=[],c=!1;function u(...p){return s.push(this),r.push(++Ue),(c?n:l.shift()||n||o.getOriginal()||(()=>{})).apply(this,p)}let a=t.name;t.getMockName=()=>a||"vi.fn()",t.mockName=p=>(a=p,t),t.mockClear=()=>(o.reset(),s=[],r=[],t),t.mockReset=()=>(t.mockClear(),n=()=>{},l=[],t),t.mockRestore=()=>(t.mockReset(),o.restore(),n=void 0,t),t.getMockImplementation=()=>n,t.mockImplementation=p=>(n=p,o.willCall(u),t),t.mockImplementationOnce=p=>(l.push(p),t);function m(p,g){let h=n;n=p,o.willCall(u),c=!0;let f=()=>{n=h,c=!1},k=g();return k instanceof Promise?k.then(()=>(f(),t)):(f(),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:()=>i}),o.willCall(u),Pe.add(t),t}var U=e=>Ae(G({spy:e||(()=>{})},"spy"));beforeEach(()=>{global.window.fetch=U()});afterEach(()=>{global.window.fetch.mockReset()});var ve=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:r}=e,o={json:()=>Promise.resolve(t),status:n,ok:n>=200&&n<=299,headers:new Headers({"Content-Type":"application/json",...s})};return r?new Promise(i=>setTimeout(()=>i(o),r)):Promise.resolve(o)},We=e=>console.warn(`
2
+ ${b.default.white.bold.bgRed("wrapito")} ${b.default.redBright.bold("cannot find any mock matching:")}
3
+ ${b.default.greenBright(`URL: ${e.url}`)}
4
+ ${b.default.greenBright(`METHOD: ${e.method?.toLowerCase()}`)}
5
+ ${b.default.greenBright(`REQUEST BODY: ${e._bodyInit}`)}
6
+ `),Q=async(e,t,n)=>{let s=e.find(L(t));if(!s)return n&&We(t),ve();let{multipleResponses:r}=s;if(!r)return V(s);let o=r.find(i=>!i.hasBeenReturned);if(!o){n&&Ce(s);return}return o.hasBeenReturned=!0,V(o)},J=(e=[],t=!1)=>{global.window.fetch.mockImplementation((s,r)=>{if(typeof s=="string"){let i=new Request(s,r);return Q(e,i,t)}return Q(e,s,t)})},Ce=e=>{let t=`\u{1F32F} Wrapito: Missing response in the multipleResponses array for path ${e.path} and method ${e.method}.`,n=b.default.greenBright(t);console.warn(n)};var H,y=e=>{H={...H,...e}},R=()=>({...H});beforeEach(()=>{global.fetch=U()});var De=e=>(y({Component:e,responses:[],props:{},path:"",hasPath:!1,interactionConfig:void 0,debug:process.env.npm_config_debugRequests==="true"}),w()),w=()=>{let e=Ne();return{withProps:Be,withNetwork:Le,withInteraction:$e,atPath:Fe,debugRequests:_e,mount:Ge,...e}},He=e=>{let t=R(),n=[...t.responses,...e];y({...t,responses:n})},Se=(e,t)=>(t({addResponses:He},e),w()),je=(e,t)=>{let{extend:n}=d(),s=n[t];return{...e,[t]:(...r)=>Se(r,s)}},Ne=()=>{let{extend:e}=d();return Object.keys(e).reduce(je,{})},Be=e=>{let t=R();return y({...t,props:e}),w()},$e=e=>{let t=R();return y({...t,interactionConfig:e}),w()},Le=(e=[])=>{let t=R(),n=Array.isArray(e)?e:[e];return y({...t,responses:[...t.responses,...n]}),w()},Fe=(e,t)=>{let n=R();return y({...n,historyState:t,path:e,hasPath:!0}),w()},_e=()=>{let e=R();return y({...e,debug:!0}),w()},Ge=()=>{let{portal:e,portals:t,changeRoute:n,history:s,mount:r,interaction:o}=d(),{Component:i,props:l,responses:c,path:u,hasPath:a,debug:m,historyState:p,interactionConfig:g}=R(),h=i;e&&z(e),t&&Ve(t),a&&s&&(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"),s.push(u,p)),a&&!s&&n(u),J(c,m);let f=r(Y.createElement(h,{...l}));if(o){let k=o.setup?o.setup(o.userLib,g):o.userLib;return{...f,user:k}}return{...f,user:void 0}},z=e=>{if(document.getElementById(e))return;let t=document.createElement("div");t.setAttribute("id",e),t.setAttribute("data-testid",e),document.body.appendChild(t)},Ve=e=>{e.forEach(t=>{z(t)})};var S=require("jest-diff"),j=(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,S.diff)(e,s)).join(`
7
7
 
8
8
  `);return{pass:!1,message:()=>`\u{1F32F} Wrapito: Fetch body does not match.
9
- ${n}`}},re=(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}`}},oe=(e,t)=>{let n=t.map(s=>(0,N.diff)(e,s)).join(`
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=(e,t)=>{let n=t.map(s=>(0,S.diff)(e,s)).join(`
10
10
 
11
11
  `);return{pass:!1,message:()=>`\u{1F32F} Wrapito: Fetch headers do not match.
12
- ${n}`}},ae=()=>({pass:!1,message:()=>"\u{1F32F} Wrapito: Unable to find body."}),$=()=>({pass:!0,message:()=>"Test passing"}),ie=(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 ce=E(require("deep-equal"),1);var pe=()=>{let e=m().defaultHost;return e?.includes("http")?e:"https://default.com"},Ke=(e="",t,n)=>t.includes(n)?t:e+t,T=e=>e instanceof Request,Xe=e=>T(e)?e.url:e,U=(e,t={method:"GET"})=>fetch.mock.calls.filter(([s])=>{let r=Xe(s),o=pe(),i=new URL(r,o),l=Ke(t?.host,e,o),p=t?.host||o,u=new URL(l,p),a=i.pathname===u.pathname,d=i.search===u.search,c=i.host===u.host;return u.search?a&&d:t?.host?a&&c:a}),ue=e=>e.flat(1).filter(T).map(t=>t.method),le=e=>e.flat(1).filter(T).map(t=>t._bodyInit?JSON.parse(t._bodyInit):{}),de=e=>e.flat(1).filter(T).map(t=>new URL(t.url,pe()).hostname),me=e=>e.flat(1).filter(T).map(t=>{let n={};return t.headers.forEach((s,r)=>{n[r]=s}),n}),he=(e,t)=>e&&!t.includes(e),fe=(e,t)=>t.map(s=>(0,ce.default)(e,s)).every(s=>s===!1),ge=(e,t)=>t.every(s=>s!==e),ye=(e,t)=>t.every(s=>Object.entries(e).some(([r,o])=>s[r.toLowerCase()]!==o)),Re=e=>e.length===0;var Ze=(e,t)=>{let n=U(e);if(Re(n))return B(e);let s=ue(n),r=t?.method;if(he(r,s))return ne(r,s);let o=le(n),i=t?.body;if(!i)return ae();if(fe(i,o))return se(i,o);let l=de(n),p=t?.host;if(p&&ge(p,l))return re(p,l);let u=me(n),a=t?.headers;return a&&ye(a,u)?oe(a,u):$()},et=(e,t={method:"GET"})=>U(e,t).length?ie(e,t):B(e,t),tt=(e,t,n={method:"GET"})=>{let s=U(e,n);return s.length!==t?te(e,t,s.length):$()},nt={toHaveBeenFetched:et,toHaveBeenFetchedWith:Ze,toHaveBeenFetchedTimes:tt};0&&(module.exports={assertions,configure,getConfig,matchers,wrap});
12
+ ${n}`}},ne=()=>({pass:!1,message:()=>"\u{1F32F} Wrapito: Unable to find body."}),N=()=>({pass:!0,message:()=>"Test passing"}),se=(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 re=T(require("deep-equal"),1);var oe=()=>{let e=d().defaultHost;return e?.includes("http")?e:"https://default.com"},Qe=(e="",t,n)=>t.includes(n)?t:e+t,O=e=>e instanceof Request,Je=e=>O(e)?e.url:e,A=(e,t={method:"GET"})=>fetch.mock.calls.filter(([s])=>{let r=Je(s),o=oe(),i=new URL(r,o),l=Qe(t?.host,e,o),c=t?.host||o,u=new URL(l,c),a=i.pathname===u.pathname,m=i.search===u.search,p=i.host===u.host;return u.search?a&&m:t?.host?a&&p:a}),ae=e=>e.flat(1).filter(O).map(t=>t.method),ie=e=>e.flat(1).filter(O).map(t=>t._bodyInit?JSON.parse(t._bodyInit):{}),ce=e=>e.flat(1).filter(O).map(t=>new URL(t.url,oe()).hostname),pe=e=>e.flat(1).filter(O).map(t=>{let n={};return t.headers.forEach((s,r)=>{n[r]=s}),n}),ue=(e,t)=>e&&!t.includes(e),le=(e,t)=>t.map(s=>(0,re.default)(e,s)).every(s=>s===!1),me=(e,t)=>t.every(s=>s!==e),de=(e,t)=>t.every(s=>Object.entries(e).some(([r,o])=>s[r.toLowerCase()]!==o)),he=e=>e.length===0;var Ye=(e,t)=>{let n=A(e);if(he(n))return j(e);let s=ae(n),r=t?.method;if(ue(r,s))return X(r,s);let o=ie(n),i=t?.body;if(!i)return ne();if(le(i,o))return Z(i,o);let l=ce(n),c=t?.host;if(c&&me(c,l))return ee(c,l);let u=pe(n),a=t?.headers;return a&&de(a,u)?te(a,u):N()},ze=(e,t={method:"GET"})=>A(e,t).length?se(e,t):j(e,t),Ke=(e,t,n={method:"GET"})=>{let s=A(e,n);return s.length!==t?K(e,t,s.length):N()},Xe={toHaveBeenFetched:ze,toHaveBeenFetchedWith:Ye,toHaveBeenFetchedTimes:Ke};0&&(module.exports={assertions,configure,getConfig,matchers,wrap});
package/dist/index.mjs CHANGED
@@ -1,12 +1,12 @@
1
- import*as J from"react";import x from"chalk";import j from"object-hash";import{render as he}from"@testing-library/react";var U={defaultHost:"",extend:{},mount:he,changeRoute:e=>window.history.replaceState(null,"",e)};function Ge(e){U={...U,...e}}var f=()=>({...U});var N=e=>t=>{let{method:n="GET",path:s,host:r=f().defaultHost,requestBody:o=void 0,catchParams:i}=t,l=r+s,p=!f().handleQueryParams||i,u=j({url:p?l:l.split("?")[0],method:n.toUpperCase(),requestBody:o}),a;return"_bodyInit"in e&&e._bodyInit!==void 0&&(a=JSON.parse(e._bodyInit)),j({url:p?e.url:e.url.split("?")[0],method:e.method,requestBody:a})===u};function O(e,t){if(!e)throw new Error(t)}function b(e,t){return typeof t===e}function fe(e){return e instanceof Promise}function v(e,t,n){Object.defineProperty(e,t,n)}function I(e,t,n){Object.defineProperty(e,t,{value:n})}var M=Symbol.for("tinyspy:spy"),ge=new Set,ye=e=>{e.called=!1,e.callCount=0,e.calls=[],e.results=[],e.next=[]},Re=e=>(v(e,M,{value:{reset:()=>ye(e[M])}}),e[M]),E=e=>e[M]||Re(e);function we(e){O(b("function",e)||b("undefined",e),"cannot spy on a non-function value");let t=function(...s){let r=E(t);r.called=!0,r.callCount++,r.calls.push(s);let o=r.next.shift();if(o){r.results.push(o);let[u,a]=o;if(u==="ok")return a;throw a}let i,l="ok";if(r.impl)try{new.target?i=Reflect.construct(r.impl,s,new.target):i=r.impl.apply(this,s),l="ok"}catch(u){throw i=u,l="error",r.results.push([l,u]),u}let p=[l,i];if(fe(i)){let u=i.then(a=>p[1]=a).catch(a=>{throw p[0]="error",p[1]=a,a});Object.assign(u,i),i=u}return r.results.push(p),i};I(t,"_isMockFunction",!0),I(t,"length",e?e.length:0),I(t,"name",e&&e.name||"spy");let n=E(t);return n.reset(),n.impl=e,t}var B=(e,t)=>Object.getOwnPropertyDescriptor(e,t),$=(e,t)=>{t!=null&&typeof t=="function"&&t.prototype!=null&&Object.setPrototypeOf(e.prototype,t.prototype)};function L(e,t,n){O(!b("undefined",e),"spyOn could not find an object to spy upon"),O(b("object",e)||b("function",e),"cannot spyOn on a primitive value");let[s,r]=(()=>{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")})(),o=B(e,s),i=Object.getPrototypeOf(e),l=i&&B(i,s),p=o||l;O(p||s in e,`${String(s)} does not exist`);let u=!1;r==="value"&&p&&!p.value&&p.get&&(r="get",u=!0,n=p.get());let a;p?a=p[r]:r!=="value"?a=()=>e[s]:a=e[s],n||(n=a);let d=we(n);r==="value"&&$(d,a);let c=h=>{let{value:k,...P}=p||{configurable:!0,writable:!0};r!=="value"&&delete P.writable,P[r]=h,v(e,s,P)},g=()=>p?v(e,s,p):c(a),m=d[M];return I(m,"restore",g),I(m,"getOriginal",()=>u?a():a),I(m,"willCall",h=>(m.impl=h,d)),c(u?()=>($(d,n),d):d),ge.add(d),d}var Ie=new Set,xe=0;function ke(e){let t=e,n,s=[],r=[],o=E(e),i={get calls(){return o.calls},get instances(){return s},get invocationCallOrder(){return r},get results(){return o.results.map(([c,g])=>({type:c==="error"?"throw":"return",value:g}))},get lastCall(){return o.calls[o.calls.length-1]}},l=[],p=!1;function u(...c){return s.push(this),r.push(++xe),(p?n:l.shift()||n||o.getOriginal()||(()=>{})).apply(this,c)}let a=t.name;t.getMockName=()=>a||"vi.fn()",t.mockName=c=>(a=c,t),t.mockClear=()=>(o.reset(),s=[],r=[],t),t.mockReset=()=>(t.mockClear(),n=()=>{},l=[],t),t.mockRestore=()=>{let c=o.getOriginal();return t.mockClear(),l=[],p=!1,o.restore(),n=c,o.willCall(u),t},t.getMockImplementation=()=>n,t.mockImplementation=c=>(n=c,o.willCall(u),t),t.mockImplementationOnce=c=>(l.push(c),t);function d(c,g){let m=n;n=c,o.willCall(u),p=!0;let h=()=>{n=m,p=!1},k=g();return k instanceof Promise?k.then(()=>(h(),t)):(h(),t)}return t.withImplementation=d,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:()=>i}),o.willCall(u),Ie.add(t),t}var F=e=>ke(L({spy:e||(()=>{})},"spy"));var Me=()=>typeof Headers>"u"?{get:()=>null,has:()=>!1}:new Headers({"Content-Type":"application/json"}),A=()=>({json:()=>Promise.resolve(),status:200,ok:!0,headers:Me()});var W,C;beforeEach(()=>{W=globalThis.fetch,typeof window<"u"&&(C=window.fetch);let e=F(()=>Promise.resolve(A()));globalThis.fetch=e,typeof window<"u"&&(window.fetch=e)});afterEach(()=>{let e=globalThis.fetch;e?.mockRestore&&e.mockRestore();let t=W??C;globalThis.fetch=t??globalThis.fetch,typeof window<"u"&&(window.fetch=C??W??globalThis.fetch)});var _=async()=>Promise.resolve(A()),G=async e=>{let{responseBody:t,status:n=200,headers:s={},delay:r}=e,o={json:()=>Promise.resolve(t),status:n,ok:n>=200&&n<=299,headers:new Headers({"Content-Type":"application/json",...s})};return r?new Promise(i=>setTimeout(()=>i(o),r)):Promise.resolve(o)},Te=e=>console.warn(`
1
+ import*as _ from"react";import x from"chalk";import H from"object-hash";import{render as ue}from"@testing-library/react";var A={defaultHost:"",extend:{},mount:ue,changeRoute:e=>window.history.replaceState(null,"",e)};function $e(e){A={...A,...e}}var f=()=>({...A});var S=e=>t=>{let{method:n="GET",path:s,host:r=f().defaultHost,requestBody:o=void 0,catchParams:i}=t,l=r+s,c=!f().handleQueryParams||i,u=H({url:c?l:l.split("?")[0],method:n.toUpperCase(),requestBody:o}),a;return"_bodyInit"in e&&e._bodyInit!==void 0&&(a=JSON.parse(e._bodyInit)),H({url:c?e.url:e.url.split("?")[0],method:e.method,requestBody:a})===u};function E(e,t){if(!e)throw new Error(t)}function w(e,t){return typeof t===e}function le(e){return e instanceof Promise}function v(e,t,n){Object.defineProperty(e,t,n)}function I(e,t,n){Object.defineProperty(e,t,{value:n})}var M=Symbol.for("tinyspy:spy"),me=new Set,de=e=>{e.called=!1,e.callCount=0,e.calls=[],e.results=[],e.next=[]},he=e=>(v(e,M,{value:{reset:()=>de(e[M])}}),e[M]),T=e=>e[M]||he(e);function fe(e){E(w("function",e)||w("undefined",e),"cannot spy on a non-function value");let t=function(...s){let r=T(t);r.called=!0,r.callCount++,r.calls.push(s);let o=r.next.shift();if(o){r.results.push(o);let[u,a]=o;if(u==="ok")return a;throw a}let i,l="ok";if(r.impl)try{new.target?i=Reflect.construct(r.impl,s,new.target):i=r.impl.apply(this,s),l="ok"}catch(u){throw i=u,l="error",r.results.push([l,u]),u}let c=[l,i];if(le(i)){let u=i.then(a=>c[1]=a).catch(a=>{throw c[0]="error",c[1]=a,a});Object.assign(u,i),i=u}return r.results.push(c),i};I(t,"_isMockFunction",!0),I(t,"length",e?e.length:0),I(t,"name",e&&e.name||"spy");let n=T(t);return n.reset(),n.impl=e,t}var j=(e,t)=>Object.getOwnPropertyDescriptor(e,t),N=(e,t)=>{t!=null&&typeof t=="function"&&t.prototype!=null&&Object.setPrototypeOf(e.prototype,t.prototype)};function B(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,r]=(()=>{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")})(),o=j(e,s),i=Object.getPrototypeOf(e),l=i&&j(i,s),c=o||l;E(c||s in e,`${String(s)} does not exist`);let u=!1;r==="value"&&c&&!c.value&&c.get&&(r="get",u=!0,n=c.get());let a;c?a=c[r]:r!=="value"?a=()=>e[s]:a=e[s],n||(n=a);let m=fe(n);r==="value"&&N(m,a);let p=h=>{let{value:k,...U}=c||{configurable:!0,writable:!0};r!=="value"&&delete U.writable,U[r]=h,v(e,s,U)},g=()=>c?v(e,s,c):p(a),d=m[M];return I(d,"restore",g),I(d,"getOriginal",()=>u?a():a),I(d,"willCall",h=>(d.impl=h,m)),p(u?()=>(N(m,n),m):m),me.add(m),m}var ye=new Set,Re=0;function be(e){let t=e,n,s=[],r=[],o=T(e),i={get calls(){return o.calls},get instances(){return s},get invocationCallOrder(){return r},get results(){return o.results.map(([p,g])=>({type:p==="error"?"throw":"return",value:g}))},get lastCall(){return o.calls[o.calls.length-1]}},l=[],c=!1;function u(...p){return s.push(this),r.push(++Re),(c?n:l.shift()||n||o.getOriginal()||(()=>{})).apply(this,p)}let a=t.name;t.getMockName=()=>a||"vi.fn()",t.mockName=p=>(a=p,t),t.mockClear=()=>(o.reset(),s=[],r=[],t),t.mockReset=()=>(t.mockClear(),n=()=>{},l=[],t),t.mockRestore=()=>(t.mockReset(),o.restore(),n=void 0,t),t.getMockImplementation=()=>n,t.mockImplementation=p=>(n=p,o.willCall(u),t),t.mockImplementationOnce=p=>(l.push(p),t);function m(p,g){let d=n;n=p,o.willCall(u),c=!0;let h=()=>{n=d,c=!1},k=g();return k instanceof Promise?k.then(()=>(h(),t)):(h(),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:()=>i}),o.willCall(u),ye.add(t),t}var q=e=>be(B({spy:e||(()=>{})},"spy"));beforeEach(()=>{global.window.fetch=q()});afterEach(()=>{global.window.fetch.mockReset()});var we=async()=>{let e={json:()=>Promise.resolve(),status:200,ok:!0,headers:new Headers({"Content-Type":"application/json"})};return Promise.resolve(e)},$=async e=>{let{responseBody:t,status:n=200,headers:s={},delay:r}=e,o={json:()=>Promise.resolve(t),status:n,ok:n>=200&&n<=299,headers:new Headers({"Content-Type":"application/json",...s})};return r?new Promise(i=>setTimeout(()=>i(o),r)):Promise.resolve(o)},Ie=e=>console.warn(`
2
2
  ${x.white.bold.bgRed("wrapito")} ${x.redBright.bold("cannot find any mock matching:")}
3
3
  ${x.greenBright(`URL: ${e.url}`)}
4
4
  ${x.greenBright(`METHOD: ${e.method?.toLowerCase()}`)}
5
5
  ${x.greenBright(`REQUEST BODY: ${e._bodyInit}`)}
6
- `),V=async(e,t,n)=>{let s=e.find(N(t));if(!s)return n&&Te(t),_();let{multipleResponses:r}=s;if(!r)return G(s);let o=r.find(i=>!i.hasBeenReturned);return o?(o.hasBeenReturned=!0,G(o)):(n&&Oe(s),_())},Q=(e=[],t=!1)=>{globalThis.fetch.mockImplementation((s,r)=>{if(typeof s=="string"){let i=new Request(s,r);return V(e,i,t)}return V(e,s,t)})},Oe=e=>{let t=`\u{1F32F} Wrapito: Missing response in the multipleResponses array for path ${e.path} and method ${e.method}.`,n=x.greenBright(t);console.warn(n)};var D,y=e=>{D={...D,...e}},R=()=>({...D});var it=e=>(y({Component:e,responses:[],props:{},path:"",hasPath:!1,interactionConfig:void 0,debug:process.env.npm_config_debugRequests==="true"}),w()),w=()=>{let e=Ue();return{withProps:ve,withNetwork:We,withInteraction:Ae,atPath:Ce,debugRequests:De,mount:He,...e}},Ee=e=>{let t=R(),n=[...t.responses,...e];y({...t,responses:n})},qe=(e,t)=>(t({addResponses:Ee},e),w()),Pe=(e,t)=>{let{extend:n}=f(),s=n[t];return{...e,[t]:(...r)=>qe(r,s)}},Ue=()=>{let{extend:e}=f();return Object.keys(e).reduce(Pe,{})},ve=e=>{let t=R();return y({...t,props:e}),w()},Ae=e=>{let t=R();return y({...t,interactionConfig:e}),w()},We=(e=[])=>{let t=R(),n=Array.isArray(e)?e:[e];return y({...t,responses:[...t.responses,...n]}),w()},Ce=(e,t)=>{let n=R();return y({...n,historyState:t,path:e,hasPath:!0}),w()},De=()=>{let e=R();return y({...e,debug:!0}),w()},He=()=>{let{portal:e,portals:t,changeRoute:n,history:s,mount:r,interaction:o}=f(),{Component:i,props:l,responses:p,path:u,hasPath:a,debug:d,historyState:c,interactionConfig:g}=R(),m=i;e&&Y(e),t&&Se(t),a&&s&&(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"),s.push(u,c)),a&&!s&&n(u),Q(p,d);let h=r(J.createElement(m,{...l}));if(o){let k=o.setup?o.setup(o.userLib,g):o.userLib;return{...h,user:k}}return{...h,user:void 0}},Y=e=>{if(document.getElementById(e))return;let t=document.createElement("div");t.setAttribute("id",e),t.setAttribute("data-testid",e),document.body.appendChild(t)},Se=e=>{e.forEach(t=>{Y(t)})};import{diff as z}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}},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=>z(e,s)).join(`
6
+ `),L=async(e,t,n)=>{let s=e.find(S(t));if(!s)return n&&Ie(t),we();let{multipleResponses:r}=s;if(!r)return $(s);let o=r.find(i=>!i.hasBeenReturned);if(!o){n&&xe(s);return}return o.hasBeenReturned=!0,$(o)},F=(e=[],t=!1)=>{global.window.fetch.mockImplementation((s,r)=>{if(typeof s=="string"){let i=new Request(s,r);return L(e,i,t)}return L(e,s,t)})},xe=e=>{let t=`\u{1F32F} Wrapito: Missing response in the multipleResponses array for path ${e.path} and method ${e.method}.`,n=x.greenBright(t);console.warn(n)};var W,y=e=>{W={...W,...e}},R=()=>({...W});beforeEach(()=>{global.fetch=q()});var nt=e=>(y({Component:e,responses:[],props:{},path:"",hasPath:!1,interactionConfig:void 0,debug:process.env.npm_config_debugRequests==="true"}),b()),b=()=>{let e=Ee();return{withProps:Te,withNetwork:Pe,withInteraction:qe,atPath:Ue,debugRequests:Ae,mount:ve,...e}},ke=e=>{let t=R(),n=[...t.responses,...e];y({...t,responses:n})},Me=(e,t)=>(t({addResponses:ke},e),b()),Oe=(e,t)=>{let{extend:n}=f(),s=n[t];return{...e,[t]:(...r)=>Me(r,s)}},Ee=()=>{let{extend:e}=f();return Object.keys(e).reduce(Oe,{})},Te=e=>{let t=R();return y({...t,props:e}),b()},qe=e=>{let t=R();return y({...t,interactionConfig:e}),b()},Pe=(e=[])=>{let t=R(),n=Array.isArray(e)?e:[e];return y({...t,responses:[...t.responses,...n]}),b()},Ue=(e,t)=>{let n=R();return y({...n,historyState:t,path:e,hasPath:!0}),b()},Ae=()=>{let e=R();return y({...e,debug:!0}),b()},ve=()=>{let{portal:e,portals:t,changeRoute:n,history:s,mount:r,interaction:o}=f(),{Component:i,props:l,responses:c,path:u,hasPath:a,debug:m,historyState:p,interactionConfig:g}=R(),d=i;e&&G(e),t&&We(t),a&&s&&(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"),s.push(u,p)),a&&!s&&n(u),F(c,m);let h=r(_.createElement(d,{...l}));if(o){let k=o.setup?o.setup(o.userLib,g):o.userLib;return{...h,user:k}}return{...h,user:void 0}},G=e=>{if(document.getElementById(e))return;let t=document.createElement("div");t.setAttribute("id",e),t.setAttribute("data-testid",e),document.body.appendChild(t)},We=e=>{e.forEach(t=>{G(t)})};import{diff as V}from"jest-diff";var C=(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}},Q=(e,t,n)=>({pass:!1,message:()=>`\u{1F32F} Wrapito: ${e} is called ${n} times, you expected ${t} times`}),J=(e,t)=>({pass:!1,message:()=>`\u{1F32F} Wrapito: Fetch method does not match, expected ${e} received ${t??"none"}`}),Y=(e,t)=>{let n=t.map(s=>V(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=(e,t)=>{let n=t.map(s=>z(e,s)).join(`
9
+ ${n}`}},z=(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}`}},K=(e,t)=>{let n=t.map(s=>V(e,s)).join(`
10
10
 
11
11
  `);return{pass:!1,message:()=>`\u{1F32F} Wrapito: Fetch headers do not match.
12
- ${n}`}},ne=()=>({pass:!1,message:()=>"\u{1F32F} Wrapito: Unable to find body."}),S=()=>({pass:!0,message:()=>"Test passing"}),se=(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 je from"deep-equal";var re=()=>{let e=f().defaultHost;return e?.includes("http")?e:"https://default.com"},Ne=(e="",t,n)=>t.includes(n)?t:e+t,T=e=>e instanceof Request,Be=e=>T(e)?e.url:e,q=(e,t={method:"GET"})=>fetch.mock.calls.filter(([s])=>{let r=Be(s),o=re(),i=new URL(r,o),l=Ne(t?.host,e,o),p=t?.host||o,u=new URL(l,p),a=i.pathname===u.pathname,d=i.search===u.search,c=i.host===u.host;return u.search?a&&d:t?.host?a&&c:a}),oe=e=>e.flat(1).filter(T).map(t=>t.method),ae=e=>e.flat(1).filter(T).map(t=>t._bodyInit?JSON.parse(t._bodyInit):{}),ie=e=>e.flat(1).filter(T).map(t=>new URL(t.url,re()).hostname),ce=e=>e.flat(1).filter(T).map(t=>{let n={};return t.headers.forEach((s,r)=>{n[r]=s}),n}),pe=(e,t)=>e&&!t.includes(e),ue=(e,t)=>t.map(s=>je(e,s)).every(s=>s===!1),le=(e,t)=>t.every(s=>s!==e),de=(e,t)=>t.every(s=>Object.entries(e).some(([r,o])=>s[r.toLowerCase()]!==o)),me=e=>e.length===0;var $e=(e,t)=>{let n=q(e);if(me(n))return H(e);let s=oe(n),r=t?.method;if(pe(r,s))return X(r,s);let o=ae(n),i=t?.body;if(!i)return ne();if(ue(i,o))return Z(i,o);let l=ie(n),p=t?.host;if(p&&le(p,l))return ee(p,l);let u=ce(n),a=t?.headers;return a&&de(a,u)?te(a,u):S()},Le=(e,t={method:"GET"})=>q(e,t).length?se(e,t):H(e,t),Fe=(e,t,n={method:"GET"})=>{let s=q(e,n);return s.length!==t?K(e,t,s.length):S()},gt={toHaveBeenFetched:Le,toHaveBeenFetchedWith:$e,toHaveBeenFetchedTimes:Fe};export{gt as assertions,Ge as configure,f as getConfig,gt as matchers,it as wrap};
12
+ ${n}`}},X=()=>({pass:!1,message:()=>"\u{1F32F} Wrapito: Unable to find body."}),D=()=>({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 Ce from"deep-equal";var ee=()=>{let e=f().defaultHost;return e?.includes("http")?e:"https://default.com"},De=(e="",t,n)=>t.includes(n)?t:e+t,O=e=>e instanceof Request,He=e=>O(e)?e.url:e,P=(e,t={method:"GET"})=>fetch.mock.calls.filter(([s])=>{let r=He(s),o=ee(),i=new URL(r,o),l=De(t?.host,e,o),c=t?.host||o,u=new URL(l,c),a=i.pathname===u.pathname,m=i.search===u.search,p=i.host===u.host;return u.search?a&&m:t?.host?a&&p:a}),te=e=>e.flat(1).filter(O).map(t=>t.method),ne=e=>e.flat(1).filter(O).map(t=>t._bodyInit?JSON.parse(t._bodyInit):{}),se=e=>e.flat(1).filter(O).map(t=>new URL(t.url,ee()).hostname),re=e=>e.flat(1).filter(O).map(t=>{let n={};return t.headers.forEach((s,r)=>{n[r]=s}),n}),oe=(e,t)=>e&&!t.includes(e),ae=(e,t)=>t.map(s=>Ce(e,s)).every(s=>s===!1),ie=(e,t)=>t.every(s=>s!==e),ce=(e,t)=>t.every(s=>Object.entries(e).some(([r,o])=>s[r.toLowerCase()]!==o)),pe=e=>e.length===0;var Se=(e,t)=>{let n=P(e);if(pe(n))return C(e);let s=te(n),r=t?.method;if(oe(r,s))return J(r,s);let o=ne(n),i=t?.body;if(!i)return X();if(ae(i,o))return Y(i,o);let l=se(n),c=t?.host;if(c&&ie(c,l))return z(c,l);let u=re(n),a=t?.headers;return a&&ce(a,u)?K(a,u):D()},je=(e,t={method:"GET"})=>P(e,t).length?Z(e,t):C(e,t),Ne=(e,t,n={method:"GET"})=>{let s=P(e,n);return s.length!==t?Q(e,t,s.length):D()},lt={toHaveBeenFetched:je,toHaveBeenFetchedWith:Se,toHaveBeenFetchedTimes:Ne};export{lt as assertions,$e as configure,f as getConfig,lt as matchers,nt as wrap};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wrapito",
3
- "version": "13.3.0-beta24",
3
+ "version": "13.3.0-beta25",
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": {