Files
shields/services/docker/docker-version.spec.js
2021-07-09 12:53:55 +01:00

175 lines
4.6 KiB
JavaScript

import { expect } from 'chai'
import { test, given } from 'sazerac'
import { InvalidResponse } from '../index.js'
import DockerVersion from './docker-version.service.js'
import {
versionDataNoTagDateSort,
versionPagedDataNoTagDateSort,
versionDataNoTagSemVerSort,
versionDataWithTag,
versionDataWithVaryingArchitectures,
} from './docker-fixtures.js'
describe('DockerVersion', function () {
test(DockerVersion.prototype.transform, () => {
given({
tag: '',
sort: 'date',
data: { results: [{ name: 'stable' }] },
}).expect({
version: 'stable',
})
given({
tag: '',
sort: 'date',
data: { results: [{ name: '3.9.5' }] },
}).expect({
version: '3.9.5',
})
given({
tag: '',
sort: 'date',
data: versionDataNoTagDateSort,
pagedData: versionPagedDataNoTagDateSort,
}).expect({
version: 'amd64-latest',
})
given({
tag: '',
sort: 'semver',
data: versionDataNoTagSemVerSort,
}).expect({
version: '3.11.3',
})
given({
tag: '3.10',
data: versionDataWithTag,
}).expect({
version: '3.10.4',
})
// tag & custom architecture
given({
tag: '3.9',
data: versionDataWithVaryingArchitectures,
arch: 'arm',
}).expect({
version: '3.9',
})
// sort & custom architecture
given({
data: versionDataWithVaryingArchitectures,
sort: 'semver',
arch: 'ppc64le',
}).expect({
version: '3.10.4',
})
})
it('throws InvalidResponse error with latest tag and no amd64 architecture digests', function () {
expect(() => {
DockerVersion.prototype.transform({
sort: 'date',
data: {
results: [
{
name: 'latest',
images: [
{
architecture: 'arm64',
digest:
'sha256:597bd5c319cc09d6bb295b4ef23cac50ec7c373fff5fe923cfd246ec09967b31',
},
{
architecture: 'arm',
digest:
'sha256:c5ea49127cd44d0f50eafda229a056bb83b6e691883c56fd863d42675fae3909',
},
],
},
],
},
})
})
.to.throw(InvalidResponse)
.with.property('prettyMessage', 'digest not found for latest tag')
})
// https://github.com/badges/shields/issues/5535
it('throws InvalidResponse error with custom tag and no amd64 architecture digests', function () {
expect(() => {
DockerVersion.prototype.transform({
tag: '3.10',
data: [
{
name: '3.10',
images: [
{
architecture: 'arm64',
digest:
'sha256:597bd5c319cc09d6bb295b4ef23cac50ec7c373fff5fe923cfd246ec09967b31',
},
{
architecture: 'arm',
digest:
'sha256:c5ea49127cd44d0f50eafda229a056bb83b6e691883c56fd863d42675fae3909',
},
],
},
],
})
})
.to.throw(InvalidResponse)
.with.property('prettyMessage', 'digest not found for given tag')
})
it('throws InvalidResponse error with custom tag and no matching architecture digests', function () {
expect(() => {
DockerVersion.prototype.transform({
tag: '3.10',
arch: '386',
data: [
{
name: '3.9',
images: [
{
digest:
'sha256:ab3fe83c0696e3f565c9b4a734ec309ae9bd0d74c192de4590fd6dc2ef717815',
architecture: 'amd64',
},
{
digest:
'sha256:c7b3e8392e08c971e98627e2bddd10c7fa9d2eae797a16bc94de9709bb9300d0',
architecture: '386',
},
{
digest:
'sha256:5292cebaf695db860087c5582d340a406613891b2819092747b0388da47936c8',
architecture: 'arm',
},
],
},
{
name: '3.10',
images: [
{
architecture: 'arm',
digest:
'sha256:c5ea49127cd44d0f50eafda229a056bb83b6e691883c56fd863d42675fae3909',
},
{
architecture: 'arm64',
digest:
'sha256:597bd5c319cc09d6bb295b4ef23cac50ec7c373fff5fe923cfd246ec09967b31',
},
],
},
],
})
})
.to.throw(InvalidResponse)
.with.property('prettyMessage', 'digest not found for given tag')
})
})