wrapito 13.3.0-beta21 → 13.3.0-beta22

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