Skip to content

Built for people who want to own their automations. Join the waitlist for an invite.

Package listing

@kentcdodds/lineage

src/ui/update-check.node.test.ts

85 lines · 1.6 KB · TypeScript
import assert from 'node:assert/strict'
import { describe, it } from 'node:test'
import { describeAvailableUpdate, shouldRunUpdateCheck } from './update-check.ts'

describe('update check on open', () => {
	it('runs when the app becomes visible and nothing is in flight', () => {
		assert.equal(
			shouldRunUpdateCheck({
				visible: true,
				inFlight: false,
				lastStartedAt: null,
				now: 10_000,
			}),
			true,
		)
		assert.equal(
			shouldRunUpdateCheck({
				visible: false,
				inFlight: false,
				lastStartedAt: null,
				now: 10_000,
			}),
			false,
		)
		assert.equal(
			shouldRunUpdateCheck({
				visible: true,
				inFlight: true,
				lastStartedAt: null,
				now: 10_000,
			}),
			false,
		)
	})

	it('collapses pageshow and visibilitychange that fire together', () => {
		assert.equal(
			shouldRunUpdateCheck({
				visible: true,
				inFlight: false,
				lastStartedAt: 10_000,
				now: 11_000,
				minIntervalMs: 3000,
			}),
			false,
		)
		assert.equal(
			shouldRunUpdateCheck({
				visible: true,
				inFlight: false,
				lastStartedAt: 10_000,
				now: 14_000,
				minIntervalMs: 3000,
			}),
			true,
		)
	})

	it('toasts for a waiting worker or a newer published sha', () => {
		assert.equal(
			describeAvailableUpdate({
				runningSha: 'aaa',
				latestSha: 'aaa',
				hasWaitingWorker: true,
			}),
			'worker',
		)
		assert.equal(
			describeAvailableUpdate({
				runningSha: 'aaa1111',
				latestSha: 'bbb2222',
				hasWaitingWorker: false,
			}),
			'published',
		)
		assert.equal(
			describeAvailableUpdate({
				runningSha: 'aaa1111',
				latestSha: 'aaa1111',
				hasWaitingWorker: false,
			}),
			null,
		)
	})
})