fix: more work
This commit is contained in:
parent
5748c97586
commit
49ce9f739e
|
@ -11,8 +11,11 @@ export async function checkForUpdates (db, dataSource, signal) {
|
|||
}
|
||||
|
||||
if (!eTag) { // work around lack of ETag/Access-Control-Expose-Headers
|
||||
console.info('A get etag, aborted=', signal.aborted)
|
||||
const eTagAndData = await getETagAndData(dataSource)
|
||||
console.info('A got etag, aborted=', signal.aborted)
|
||||
if (signal.aborted) {
|
||||
console.info('A returning early')
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -35,8 +38,11 @@ export async function checkForUpdates (db, dataSource, signal) {
|
|||
} else {
|
||||
console.log('Database update available')
|
||||
if (!emojiData) {
|
||||
console.info('B get etag, aborted=', signal.aborted)
|
||||
const eTagAndData = await getETagAndData(dataSource)
|
||||
console.info('B got etag, aborted=', signal.aborted)
|
||||
if (signal.aborted) {
|
||||
console.info('B returning early')
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ import {
|
|||
ALL_EMOJI_NO_ETAG,
|
||||
basicAfterEach,
|
||||
basicBeforeEach,
|
||||
tick
|
||||
tick, truncatedFrEmoji
|
||||
} from '../shared.js'
|
||||
import Database from '../../../src/database/Database.js'
|
||||
|
||||
|
@ -12,35 +12,47 @@ describe('database timing tests', () => {
|
|||
beforeEach(basicBeforeEach)
|
||||
afterEach(basicAfterEach)
|
||||
|
||||
const scenarios = [
|
||||
{
|
||||
testName: 'basic',
|
||||
dataSource: ALL_EMOJI
|
||||
},
|
||||
{
|
||||
testName: 'misconfigured etag server',
|
||||
dataSource: ALL_EMOJI_MISCONFIGURED_ETAG
|
||||
},
|
||||
{
|
||||
testName: 'missing etag server',
|
||||
dataSource: ALL_EMOJI_NO_ETAG
|
||||
}
|
||||
]
|
||||
scenarios.forEach(({ testName, dataSource }) => {
|
||||
describe(testName, () => {
|
||||
new Array(5).fill().forEach((_, count) => {
|
||||
test(`throws no errors when DB is canceled after ${count} ticks`, async () => {
|
||||
// first load
|
||||
const db = new Database({ dataSource })
|
||||
await tick(count)
|
||||
await db.close()
|
||||
await tick(40)
|
||||
const dataChanges = [false, true]
|
||||
dataChanges.forEach(dataChanged => {
|
||||
describe(`dataChanged=${dataChanged}`, () => {
|
||||
const scenarios = [
|
||||
{
|
||||
testName: 'basic',
|
||||
dataSource: ALL_EMOJI
|
||||
},
|
||||
{
|
||||
testName: 'misconfigured etag server',
|
||||
dataSource: ALL_EMOJI_MISCONFIGURED_ETAG
|
||||
},
|
||||
{
|
||||
testName: 'missing etag server',
|
||||
dataSource: ALL_EMOJI_NO_ETAG
|
||||
}
|
||||
]
|
||||
scenarios.forEach(({ testName, dataSource }) => {
|
||||
describe(testName, () => {
|
||||
new Array(10).fill().forEach((_, count) => {
|
||||
test(`throws no errors when DB is canceled after ${count} ticks`, async () => {
|
||||
// first load
|
||||
const db = new Database({ dataSource })
|
||||
await tick(count)
|
||||
await db.close()
|
||||
await tick(40)
|
||||
|
||||
// second load
|
||||
const db2 = new Database({ dataSource })
|
||||
await tick(count)
|
||||
await db2.close()
|
||||
await tick(40)
|
||||
if (dataChanged) {
|
||||
// second time - update, data is v2
|
||||
fetch.reset()
|
||||
fetch.get(dataSource, () => new Response(JSON.stringify(truncatedFrEmoji), { headers: { ETag: 'W/yyy' } }), { delay: 1 })
|
||||
fetch.head(dataSource, () => new Response(null, { headers: { ETag: 'W/yyy' } }), { delay: 1 })
|
||||
}
|
||||
|
||||
// second load
|
||||
const db2 = new Database({ dataSource })
|
||||
await tick(count)
|
||||
await db2.close()
|
||||
await tick(40)
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
|
@ -24,7 +24,7 @@ export function truncateEmoji (allEmoji) {
|
|||
}
|
||||
|
||||
export const truncatedEmoji = truncateEmoji(allEmoji)
|
||||
const truncatedFrEmoji = truncateEmoji(frEmoji)
|
||||
export const truncatedFrEmoji = truncateEmoji(frEmoji)
|
||||
const emojibaseV5Emoji = truncateEmoji(allEmojibaseV5Emoji)
|
||||
|
||||
export const ALL_EMOJI = 'http://localhost/emoji.json'
|
||||
|
|
Loading…
Reference in New Issue