wrapito 13.3.0-beta13 → 13.3.0-beta17
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 +4 -4
- package/dist/index.mjs +8 -8
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var ce=Object.create;var b=Object.defineProperty;var pe=Object.getOwnPropertyDescriptor;var ue=Object.getOwnPropertyNames;var de=Object.getPrototypeOf,he=Object.prototype.hasOwnProperty;var fe=(e,t)=>{for(var s in t)b(e,s,{get:t[s],enumerable:!0})},P=(e,t,s,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of ue(t))!he.call(e,n)&&n!==s&&b(e,n,{get:()=>t[n],enumerable:!(o=pe(t,n))||o.enumerable});return e};var w=(e,t,s)=>(s=e!=null?ce(de(e)):{},P(t||!e||!e.__esModule?b(s,"default",{value:e,enumerable:!0}):s,e)),me=e=>P(b({},"__esModule",{value:!0}),e);var Ne={};fe(Ne,{assertions:()=>Ce,configure:()=>ge,getConfig:()=>d,matchers:()=>Ce,wrap:()=>ye});module.exports=me(Ne);var v=w(require("react"),1);var g=w(require("chalk"),1);var q=w(require("object-hash"),1);var D=require("@testing-library/react"),I={defaultHost:"",extend:{},mount:D.render,changeRoute:e=>window.history.replaceState(null,"",e)};function ge(e){I={...I,...e}}var d=()=>({...I});var O=e=>t=>{let{method:s="GET",path:o,host:n=d().defaultHost,requestBody:r=void 0,catchParams:a}=t,h=n+o,u=!d().handleQueryParams||a,c=(0,q.default)({url:u?h:h.split("?")[0],method:s.toUpperCase(),requestBody:r}),i;return"_bodyInit"in e&&e._bodyInit!==void 0&&(i=JSON.parse(e._bodyInit)),(0,q.default)({url:u?e.url:e.url.split("?")[0],method:e.method,requestBody:i})===c};var A=async()=>{let e={json:()=>Promise.resolve(""),status:200,ok:!0,headers:new Headers({"Content-Type":"application/json"})};return Promise.resolve(e)},B=async e=>{let{responseBody:t,status:s=200,headers:o={},delay:n}=e,r={json:()=>Promise.resolve(t),status:s,ok:s>=200&&s<=299,headers:new Headers({"Content-Type":"application/json",...o})};return n?new Promise(a=>setTimeout(()=>a(r),n)):Promise.resolve(r)},le=e=>console.warn(`
|
|
2
2
|
${g.default.white.bold.bgRed("wrapito")} ${g.default.redBright.bold("cannot find any mock matching:")}
|
|
3
3
|
${g.default.greenBright(`URL: ${e.url}`)}
|
|
4
4
|
${g.default.greenBright(`METHOD: ${e.method?.toLowerCase()}`)}
|
|
5
5
|
${g.default.greenBright(`REQUEST BODY: ${e._bodyInit}`)}
|
|
6
|
-
`),
|
|
6
|
+
`),C=async(e,t,s)=>{let o=e.find(O(t));if(!o)return s&&le(t),A();let{multipleResponses:n}=o;if(!n)return B(o);let r=n.find(a=>!a.hasBeenReturned);return r?(r.hasBeenReturned=!0,B(r)):(s&&Re(o),A())},N=(e=[],t=!1)=>{global.window.fetch.mockImplementation((o,n)=>{if(typeof o=="string"){let a=new Request(o,n);return C(e,a,t)}return C(e,o,t)})},Re=e=>{let t=`\u{1F32F} Wrapito: Missing response in the multipleResponses array for path ${e.path} and method ${e.method}.`,s=g.default.greenBright(t);console.warn(s)};var E,f=e=>{E={...E,...e}},m=()=>({...E});var S=require("@vitest/spy");var p=require("whatwg-fetch"),T=()=>{if(!(typeof global.window>"u")){if(typeof global.window.fetch!="function"){let e=typeof globalThis.fetch=="function"?globalThis.fetch:p.fetch;e&&(global.window.fetch=e.bind(globalThis))}!global.window.Request&&p.Request&&(global.window.Request=p.Request),!global.window.Response&&p.Response&&(global.window.Response=p.Response),!global.window.Headers&&p.Headers&&(global.window.Headers=p.Headers)}};beforeEach(()=>{T(),(0,S.spyOn)(global.window,"fetch").mockRejectedValue(new Error("Mock instance failed."))});afterEach(()=>{global.window.fetch.mockReset()});var ye=e=>(f({Component:e,responses:[],props:{},path:"",hasPath:!1,interactionConfig:void 0,debug:process.env.npm_config_debugRequests==="true"}),l()),l=()=>{let e=Me();return{withProps:Ie,withNetwork:Ee,withInteraction:qe,atPath:Ue,debugRequests:We,mount:ke,...e}},be=e=>{let t=m(),s=[...t.responses,...e];f({...t,responses:s})},we=(e,t)=>(t({addResponses:be},e),l()),xe=(e,t)=>{let{extend:s}=d(),o=s[t];return{...e,[t]:(...n)=>we(n,o)}},Me=()=>{let{extend:e}=d();return Object.keys(e).reduce(xe,{})},Ie=e=>{let t=m();return f({...t,props:e}),l()},qe=e=>{let t=m();return f({...t,interactionConfig:e}),l()},Ee=(e=[])=>{let t=m(),s=Array.isArray(e)?e:[e];return f({...t,responses:[...t.responses,...s]}),l()},Ue=(e,t)=>{let s=m();return f({...s,historyState:t,path:e,hasPath:!0}),l()},We=()=>{let e=m();return f({...e,debug:!0}),l()},ke=()=>{let{portal:e,portals:t,changeRoute:s,history:o,mount:n,interaction:r}=d(),{Component:a,props:h,responses:u,path:c,hasPath:i,debug:y,historyState:M,interactionConfig:re}=m(),ae=a;e&&$(e),t&&He(t),i&&o&&(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"),o.push(c,M)),i&&!o&&s(c),N(u,y);let H=n(v.createElement(ae,{...h}));if(r){let ie=r.setup?r.setup(r.userLib,re):r.userLib;return{...H,user:ie}}return{...H,user:void 0}},$=e=>{if(document.getElementById(e))return;let t=document.createElement("div");t.setAttribute("id",e),t.setAttribute("data-testid",e),document.body.appendChild(t)},He=e=>{e.forEach(t=>{$(t)})};var U=require("jest-diff"),W=(e,t)=>{let s=t?.host?`\u{1F32F} Wrapito: ${t?.host}${e} ain't got called`:`\u{1F32F} Wrapito: ${e} ain't got called`;return{pass:!1,message:()=>s}},L=(e,t,s)=>({pass:!1,message:()=>`\u{1F32F} Wrapito: ${e} is called ${s} times, you expected ${t} times`}),j=(e,t)=>({pass:!1,message:()=>`\u{1F32F} Wrapito: Fetch method does not match, expected ${e} received ${t??"none"}`}),F=(e,t)=>{let s=t.map(o=>(0,U.diff)(e,o)).join(`
|
|
7
7
|
|
|
8
8
|
`);return{pass:!1,message:()=>`\u{1F32F} Wrapito: Fetch body does not match.
|
|
9
|
-
${s}`}},
|
|
9
|
+
${s}`}},_=(e,t)=>{let s=t.find(o=>e!==o);return{pass:!1,message:()=>`\u{1F32F} Wrapito: Host request does not match, expected ${e} received ${s}`}},G=(e,t)=>{let s=t.map(o=>(0,U.diff)(e,o)).join(`
|
|
10
10
|
|
|
11
11
|
`);return{pass:!1,message:()=>`\u{1F32F} Wrapito: Fetch headers do not match.
|
|
12
|
-
${s}`}},
|
|
12
|
+
${s}`}},Q=()=>({pass:!1,message:()=>"\u{1F32F} Wrapito: Unable to find body."}),k=()=>({pass:!0,message:()=>"Test passing"}),J=(e,t)=>{let s=t?.host?`\u{1F32F} Wrapito: ${t.host}${e} is called`:`\u{1F32F} Wrapito: ${e} is called`;return{pass:!0,message:()=>s}};var Y=w(require("deep-equal"),1);var V=()=>{let e=d().defaultHost;return e?.includes("http")?e:"https://default.com"},Pe=(e="",t,s)=>t.includes(s)?t:e+t,R=e=>e instanceof Request,De=e=>R(e)?e.url:e,x=(e,t={method:"GET"})=>fetch.mock.calls.filter(([o])=>{let n=De(o),r=V(),a=new URL(n,r),h=Pe(t?.host,e,r),u=t?.host||r,c=new URL(h,u),i=a.pathname===c.pathname,y=a.search===c.search,M=a.host===c.host;return c.search?i&&y:t?.host?i&&M:i}),X=e=>e.flat(1).filter(R).map(t=>t.method),z=e=>e.flat(1).filter(R).map(t=>t._bodyInit?JSON.parse(t._bodyInit):{}),K=e=>e.flat(1).filter(R).map(t=>new URL(t.url,V()).hostname),Z=e=>e.flat(1).filter(R).map(t=>{let s={};return t.headers.forEach((o,n)=>{s[n]=o}),s}),ee=(e,t)=>e&&!t.includes(e),te=(e,t)=>t.map(o=>(0,Y.default)(e,o)).every(o=>o===!1),se=(e,t)=>t.every(o=>o!==e),oe=(e,t)=>t.every(o=>Object.entries(e).some(([n,r])=>o[n.toLowerCase()]!==r)),ne=e=>e.length===0;var Oe=(e,t)=>{let s=x(e);if(ne(s))return W(e);let o=X(s),n=t?.method;if(ee(n,o))return j(n,o);let r=z(s),a=t?.body;if(!a)return Q();if(te(a,r))return F(a,r);let h=K(s),u=t?.host;if(u&&se(u,h))return _(u,h);let c=Z(s),i=t?.headers;return i&&oe(i,c)?G(i,c):k()},Ae=(e,t={method:"GET"})=>x(e,t).length?J(e,t):W(e,t),Be=(e,t,s={method:"GET"})=>{let o=x(e,s);return o.length!==t?L(e,t,o.length):k()},Ce={toHaveBeenFetched:Ae,toHaveBeenFetchedWith:Oe,toHaveBeenFetchedTimes:Be};0&&(module.exports={assertions,configure,getConfig,matchers,wrap});
|
package/dist/index.mjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import*as
|
|
2
|
-
${
|
|
3
|
-
${
|
|
4
|
-
${
|
|
5
|
-
${
|
|
6
|
-
`),
|
|
1
|
+
import*as C from"react";import g from"chalk";import E from"object-hash";import{render as ne}from"@testing-library/react";var w={defaultHost:"",extend:{},mount:ne,changeRoute:e=>window.history.replaceState(null,"",e)};function We(e){w={...w,...e}}var d=()=>({...w});var U=e=>t=>{let{method:s="GET",path:o,host:r=d().defaultHost,requestBody:n=void 0,catchParams:a}=t,u=r+o,p=!d().handleQueryParams||a,c=E({url:p?u:u.split("?")[0],method:s.toUpperCase(),requestBody:n}),i;return"_bodyInit"in e&&e._bodyInit!==void 0&&(i=JSON.parse(e._bodyInit)),E({url:p?e.url:e.url.split("?")[0],method:e.method,requestBody:i})===c};var W=async()=>{let e={json:()=>Promise.resolve(""),status:200,ok:!0,headers:new Headers({"Content-Type":"application/json"})};return Promise.resolve(e)},k=async e=>{let{responseBody:t,status:s=200,headers:o={},delay:r}=e,n={json:()=>Promise.resolve(t),status:s,ok:s>=200&&s<=299,headers:new Headers({"Content-Type":"application/json",...o})};return r?new Promise(a=>setTimeout(()=>a(n),r)):Promise.resolve(n)},re=e=>console.warn(`
|
|
2
|
+
${g.white.bold.bgRed("wrapito")} ${g.redBright.bold("cannot find any mock matching:")}
|
|
3
|
+
${g.greenBright(`URL: ${e.url}`)}
|
|
4
|
+
${g.greenBright(`METHOD: ${e.method?.toLowerCase()}`)}
|
|
5
|
+
${g.greenBright(`REQUEST BODY: ${e._bodyInit}`)}
|
|
6
|
+
`),H=async(e,t,s)=>{let o=e.find(U(t));if(!o)return s&&re(t),W();let{multipleResponses:r}=o;if(!r)return k(o);let n=r.find(a=>!a.hasBeenReturned);return n?(n.hasBeenReturned=!0,k(n)):(s&&ae(o),W())},P=(e=[],t=!1)=>{global.window.fetch.mockImplementation((o,r)=>{if(typeof o=="string"){let a=new Request(o,r);return H(e,a,t)}return H(e,o,t)})},ae=e=>{let t=`\u{1F32F} Wrapito: Missing response in the multipleResponses array for path ${e.path} and method ${e.method}.`,s=g.greenBright(t);console.warn(s)};var x,h=e=>{x={...x,...e}},f=()=>({...x});import{spyOn as ce}from"@vitest/spy";import{fetch as ie,Headers as D,Request as O,Response as A}from"whatwg-fetch";var B=()=>{if(!(typeof global.window>"u")){if(typeof global.window.fetch!="function"){let e=typeof globalThis.fetch=="function"?globalThis.fetch:ie;e&&(global.window.fetch=e.bind(globalThis))}!global.window.Request&&O&&(global.window.Request=O),!global.window.Response&&A&&(global.window.Response=A),!global.window.Headers&&D&&(global.window.Headers=D)}};beforeEach(()=>{B(),ce(global.window,"fetch").mockRejectedValue(new Error("Mock instance failed."))});afterEach(()=>{global.window.fetch.mockReset()});var _e=e=>(h({Component:e,responses:[],props:{},path:"",hasPath:!1,interactionConfig:void 0,debug:process.env.npm_config_debugRequests==="true"}),m()),m=()=>{let e=he();return{withProps:fe,withNetwork:ge,withInteraction:me,atPath:le,debugRequests:Re,mount:ye,...e}},pe=e=>{let t=f(),s=[...t.responses,...e];h({...t,responses:s})},ue=(e,t)=>(t({addResponses:pe},e),m()),de=(e,t)=>{let{extend:s}=d(),o=s[t];return{...e,[t]:(...r)=>ue(r,o)}},he=()=>{let{extend:e}=d();return Object.keys(e).reduce(de,{})},fe=e=>{let t=f();return h({...t,props:e}),m()},me=e=>{let t=f();return h({...t,interactionConfig:e}),m()},ge=(e=[])=>{let t=f(),s=Array.isArray(e)?e:[e];return h({...t,responses:[...t.responses,...s]}),m()},le=(e,t)=>{let s=f();return h({...s,historyState:t,path:e,hasPath:!0}),m()},Re=()=>{let e=f();return h({...e,debug:!0}),m()},ye=()=>{let{portal:e,portals:t,changeRoute:s,history:o,mount:r,interaction:n}=d(),{Component:a,props:u,responses:p,path:c,hasPath:i,debug:R,historyState:b,interactionConfig:te}=f(),se=a;e&&N(e),t&&be(t),i&&o&&(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"),o.push(c,b)),i&&!o&&s(c),P(p,R);let q=r(C.createElement(se,{...u}));if(n){let oe=n.setup?n.setup(n.userLib,te):n.userLib;return{...q,user:oe}}return{...q,user:void 0}},N=e=>{if(document.getElementById(e))return;let t=document.createElement("div");t.setAttribute("id",e),t.setAttribute("data-testid",e),document.body.appendChild(t)},be=e=>{e.forEach(t=>{N(t)})};import{diff as T}from"jest-diff";var M=(e,t)=>{let s=t?.host?`\u{1F32F} Wrapito: ${t?.host}${e} ain't got called`:`\u{1F32F} Wrapito: ${e} ain't got called`;return{pass:!1,message:()=>s}},v=(e,t,s)=>({pass:!1,message:()=>`\u{1F32F} Wrapito: ${e} is called ${s} times, you expected ${t} times`}),S=(e,t)=>({pass:!1,message:()=>`\u{1F32F} Wrapito: Fetch method does not match, expected ${e} received ${t??"none"}`}),$=(e,t)=>{let s=t.map(o=>T(e,o)).join(`
|
|
7
7
|
|
|
8
8
|
`);return{pass:!1,message:()=>`\u{1F32F} Wrapito: Fetch body does not match.
|
|
9
|
-
${s}`}},
|
|
9
|
+
${s}`}},L=(e,t)=>{let s=t.find(o=>e!==o);return{pass:!1,message:()=>`\u{1F32F} Wrapito: Host request does not match, expected ${e} received ${s}`}},j=(e,t)=>{let s=t.map(o=>T(e,o)).join(`
|
|
10
10
|
|
|
11
11
|
`);return{pass:!1,message:()=>`\u{1F32F} Wrapito: Fetch headers do not match.
|
|
12
|
-
${s}`}},
|
|
12
|
+
${s}`}},F=()=>({pass:!1,message:()=>"\u{1F32F} Wrapito: Unable to find body."}),I=()=>({pass:!0,message:()=>"Test passing"}),_=(e,t)=>{let s=t?.host?`\u{1F32F} Wrapito: ${t.host}${e} is called`:`\u{1F32F} Wrapito: ${e} is called`;return{pass:!0,message:()=>s}};import we from"deep-equal";var G=()=>{let e=d().defaultHost;return e?.includes("http")?e:"https://default.com"},xe=(e="",t,s)=>t.includes(s)?t:e+t,l=e=>e instanceof Request,Me=e=>l(e)?e.url:e,y=(e,t={method:"GET"})=>fetch.mock.calls.filter(([o])=>{let r=Me(o),n=G(),a=new URL(r,n),u=xe(t?.host,e,n),p=t?.host||n,c=new URL(u,p),i=a.pathname===c.pathname,R=a.search===c.search,b=a.host===c.host;return c.search?i&&R:t?.host?i&&b:i}),Q=e=>e.flat(1).filter(l).map(t=>t.method),J=e=>e.flat(1).filter(l).map(t=>t._bodyInit?JSON.parse(t._bodyInit):{}),Y=e=>e.flat(1).filter(l).map(t=>new URL(t.url,G()).hostname),V=e=>e.flat(1).filter(l).map(t=>{let s={};return t.headers.forEach((o,r)=>{s[r]=o}),s}),X=(e,t)=>e&&!t.includes(e),z=(e,t)=>t.map(o=>we(e,o)).every(o=>o===!1),K=(e,t)=>t.every(o=>o!==e),Z=(e,t)=>t.every(o=>Object.entries(e).some(([r,n])=>o[r.toLowerCase()]!==n)),ee=e=>e.length===0;var Ie=(e,t)=>{let s=y(e);if(ee(s))return M(e);let o=Q(s),r=t?.method;if(X(r,o))return S(r,o);let n=J(s),a=t?.body;if(!a)return F();if(z(a,n))return $(a,n);let u=Y(s),p=t?.host;if(p&&K(p,u))return L(p,u);let c=V(s),i=t?.headers;return i&&Z(i,c)?j(i,c):I()},qe=(e,t={method:"GET"})=>y(e,t).length?_(e,t):M(e,t),Ee=(e,t,s={method:"GET"})=>{let o=y(e,s);return o.length!==t?v(e,t,o.length):I()},Ze={toHaveBeenFetched:qe,toHaveBeenFetchedWith:Ie,toHaveBeenFetchedTimes:Ee};export{Ze as assertions,We as configure,d as getConfig,Ze as matchers,_e as wrap};
|