MCPcopy Create free account
hub / github.com/decaporg/decap-cms / stubFetch

Function stubFetch

cypress/support/commands.js:68–124  ·  view source on GitHub ↗
(win, routes)

Source from the content-addressed store, hash-verified

66};
67
68const stubFetch = (win, routes) => {
69 const fetch = win.fetch;
70 cy.stub(win, 'fetch').callsFake((...args) => {
71 let routeIndex = routes.findIndex(r => matchRoute(r, args));
72 if (routeIndex >= 0) {
73 let route = routes.splice(routeIndex, 1)[0];
74 const message = `matched ${args[0]} to ${route.url} ${route.method} ${route.status}`;
75 console.log(message);
76 if (route.status === 302) {
77 console.log(`resolving redirect to ${route.headers.Location}`);
78 routeIndex = routes.findIndex(r => matchRoute(r, [route.headers.Location]));
79 route = routes.splice(routeIndex, 1)[0];
80 }
81
82 let blob;
83 if (route.response && route.response.encoding === 'base64') {
84 const buffer = Buffer.from(route.response.content, 'base64');
85 blob = new Blob([buffer]);
86 } else {
87 blob = new Blob([route.response || '']);
88 }
89 const fetchResponse = {
90 status: route.status,
91 headers: new Headers(route.headers),
92 blob: () => Promise.resolve(blob),
93 text: () => Promise.resolve(route.response),
94 json: () => Promise.resolve(JSON.parse(route.response)),
95 ok: route.status >= 200 && route.status <= 299,
96 };
97 return Promise.resolve(fetchResponse);
98 } else if (
99 args[0].includes('api.github.com') ||
100 args[0].includes('api.bitbucket.org') ||
101 args[0].includes('bitbucket.org') ||
102 args[0].includes('api.media.atlassian.com') ||
103 args[0].includes('gitlab.com') ||
104 args[0].includes('netlify.com') ||
105 args[0].includes('s3.amazonaws.com')
106 ) {
107 console.warn(
108 `No route match for api request. Fetch args: ${JSON.stringify(args)}. Returning 404`,
109 );
110 const fetchResponse = {
111 status: 404,
112 headers: new Headers(),
113 blob: () => Promise.resolve(new Blob(['{}'])),
114 text: () => Promise.resolve('{}'),
115 json: () => Promise.resolve({}),
116 ok: false,
117 };
118 return Promise.resolve(fetchResponse);
119 } else {
120 console.log(`No route match for fetch args: ${JSON.stringify(args)}`);
121 return fetch(...args);
122 }
123 });
124};
125

Callers 1

commands.jsFile · 0.85

Calls 1

matchRouteFunction · 0.85

Tested by

no test coverage detected