blob: 9189e4675d3574fb866e8d49215b4d647fe013b2 [file] [log] [blame]
import './index';
import '../gold-scaffold-sk';
import { $$ } from 'common-sk/modules/dom';
import { deepCopy } from 'common-sk/modules/object';
import { toObject } from 'common-sk/modules/query';
import fetchMock from 'fetch-mock';
import { delay } from '../demo_util';
import { triageLogs } from './demo_data';
import { testOnlySetSettings } from '../settings';
import { exampleStatusData } from '../last-commit-sk/demo_data';
const fakeRpcDelayMillis = 300;
testOnlySetSettings({
title: 'Skia Public',
baseRepoURL: 'https://skia.googlesource.com/skia.git',
});
// The mock /json/v1/triagelog/undo RPC will populate this set.
const undoneIds = new Set();
// Mock /json/v1/triagelog RPC implementation.
function getTriageLogs(details, offset, size) {
// Filter out undone entries.
const allTriageLogs = triageLogs.filter((entry) => !undoneIds.has(entry.id));
// Log entries to be returned.
const data = [];
for (let i = offset; i < allTriageLogs.length && data.length < size; i++) {
let entry = allTriageLogs[i];
if (!details) {
entry = deepCopy(entry);
entry.details = undefined;
}
data.push(entry);
}
return {
data: data,
status: 200,
pagination: {
offset: offset,
size: size,
total: allTriageLogs.length,
},
};
}
// TODO(lovisolo): Consider extracting some of the mock fetch logic below into demo_utils.js.
fetchMock.post('glob:/json/v1/triagelog/undo?id=*', (url) => {
if ($$('#simulate-rpc-failure').checked) {
return 500; // Fake an internal server error.
}
// Parse query string.
const queryString = url.substring(url.indexOf('?') + 1);
const { id } = toObject(queryString, /* type hints */ { id: '' });
console.log(`Mock JSON endpoint: URL=${url}, id=${id}`);
// Undo entry.
undoneIds.add(id);
// Return results of the first search page with a 300ms delay.
return delay(getTriageLogs(false, 0, 20), fakeRpcDelayMillis);
});
fetchMock.get('glob:/json/v1/triagelog*', (url) => {
if ($$('#simulate-rpc-failure').checked) {
return 500; // Fake an internal server error.
}
// Parse query string.
const queryString = url.substring(url.indexOf('?') + 1);
const { details, offset, size } = toObject(queryString, /* type hints */ { details: false, offset: 0, size: 0 });
console.log(`Mock JSON endpoint: URL=${url}, details=${details}, offset=${offset}, size=${size}`);
// Fake a 300ms delay.
return delay(getTriageLogs(details, offset, size), fakeRpcDelayMillis);
});
fetchMock.get('/json/v1/trstatus', JSON.stringify(exampleStatusData));
// By adding these elements after all the fetches are mocked out, they should load ok.
const newScaf = document.createElement('gold-scaffold-sk');
newScaf.setAttribute('testing_offline', 'true');
const body = $$('body');
body.insertBefore(newScaf, body.childNodes[0]); // Make it the first element in body.
const page = document.createElement('triagelog-page-sk');
newScaf.appendChild(page);