Files
2023-08-01 13:49:46 +02:00

91 lines
3.5 KiB
JavaScript

require('chai').should()
const {describe, it} = require('mocha')
const releases = require('..')
const semver = require('semver')
const flat = require('flat')
describe('electron-releases', () => {
it('is an array', () => {
releases.should.be.an('array')
})
it('contains over 270 releases', () => {
releases.length.should.be.above(270)
})
it('uses snake_case for all properties', () => {
const keys = Object.keys(flat(releases))
keys.length.should.be.above(0)
keys.every(key => key.toLowerCase() === key).should.eq(true)
})
it('sets `tag_name` on every release', () => {
releases.every(release => {
return release.tag_name &&
release.tag_name.length &&
release.tag_name.startsWith('v') &&
semver.valid(release.tag_name.replace('v', ''))
}).should.eq(true)
})
it('sets `version` on every release', () => {
releases.every(release => semver.valid(release.version)).should.eq(true)
})
it('does NOT include drafts', () => {
const prereleases = releases.filter(release => release.prerelease)
prereleases.length.should.be.above(0)
})
it('includes prereleases', () => {
const prereleases = releases.filter(release => release.prerelease)
prereleases.length.should.be.above(0)
})
it('includes version data for V8, Chromium, Node.js, etc', () => {
const releasesWithVersionData = releases.filter(release => release.deps)
releasesWithVersionData.length.should.be.above(154)
})
it('includes one release with the `beta` npm dist tag', () => {
const betas = releases.filter(release => release.npm_dist_tag === 'beta')
betas.length.should.eq(1)
})
it('includes one release with the `latest` npm dist tag', () => {
const latests = releases.filter(release => release.npm_dist_tag === 'latest')
latests.length.should.eq(1)
})
it('includes npm_package_name prop to indicate npm publish status', () => {
releases.find(release => release.version === '1.4.7').npm_package_name.should.eq('electron')
releases.find(release => release.version === '1.0.0').npm_package_name.should.eq('electron-prebuilt')
releases.filter(release => release.npm_package_name === 'electron').length.should.be.above(62)
// assert exact number because the days of publishing electron-prebuilt are over
releases.filter(release => release.npm_package_name === 'electron-prebuilt').length.should.eq(96)
})
// for context, see https://electronjs.org/blog/npm-install-electron
it('sets `electron` as `npm_package_name` for releases >=1.3.1', () => {
const npmReleasesOfElectron = releases.filter(release => release.npm_package_name === 'electron')
npmReleasesOfElectron.length.should.be.above(0)
npmReleasesOfElectron.every(release => semver.gte(release.version, '1.3.1')).should.eq(true)
})
it('sets `electron-prebuilt` as `npm_package_name` for releases <1.3.1', () => {
const npmReleasesOfElectronPrebuilt = releases.filter(release => release.npm_package_name === 'electron-prebuilt')
npmReleasesOfElectronPrebuilt.length.should.be.above(0)
npmReleasesOfElectronPrebuilt.every(release => semver.lt(release.version, '1.3.1')).should.eq(true)
})
it('includes processed changelogs in HTML format')//, () => {
// })
it('includes a total_downloads property for each release', () => {
const npmReleases = releases.filter(release => release.npm_package_name)
npmReleases.length.should.be.above(0)
npmReleases.every(release => release.total_downloads > 0).should.eq(true)
})
})