mirror of
https://github.com/cypress-io/cypress.git
synced 2026-01-01 20:19:58 -06:00
168 lines
6.1 KiB
JavaScript
168 lines
6.1 KiB
JavaScript
const snapshot = require('snap-shot-it')
|
|
const la = require('lazy-ass')
|
|
const is = require('check-more-types')
|
|
const { expect } = require('chai')
|
|
|
|
const uploadUtils = require('../../binary/util/upload')
|
|
const s3helpers = require('../../binary/s3-api').s3helpers
|
|
|
|
/* eslint-env mocha */
|
|
/* global sinon */
|
|
describe('move-binaries', () => {
|
|
const moveBinaries = require('../../binary/move-binaries')
|
|
|
|
context('parseBuildPath', () => {
|
|
const parseBuildPath = moveBinaries.parseBuildPath
|
|
|
|
it('parses into SHA and build', () => {
|
|
const path =
|
|
'beta/binary/3.3.0/darwin-x64/circle-develop-47e98fa1d0b18867a74da91a719d0f1ae73fcbc7-101843/'
|
|
const parsed = parseBuildPath(path)
|
|
|
|
la(is.commitId(parsed.commit), 'missing commit', parsed)
|
|
la(is.positive(parsed.build), 'missing build', parsed)
|
|
|
|
snapshot({
|
|
path,
|
|
parsed,
|
|
})
|
|
})
|
|
})
|
|
|
|
context('findBuildByCommit', () => {
|
|
const findBuildByCommit = moveBinaries.findBuildByCommit
|
|
const sha = '47e98fa1d0b18867a74da91a719d0f1ae73fcbc7'
|
|
|
|
it('is a function', () => {
|
|
la(is.fn(findBuildByCommit))
|
|
})
|
|
|
|
it('finds single matching path', () => {
|
|
const paths = [
|
|
'beta/binary/3.3.0/darwin-x64/circle-develop-47e98fa1d0b18867a74da91a719d0f1ae73fcbc7-101843/',
|
|
]
|
|
const found = findBuildByCommit(sha, paths)
|
|
|
|
la(found === paths[0], 'expected to find the only path', found)
|
|
})
|
|
|
|
it('finds single matching path among several', () => {
|
|
const paths = [
|
|
'beta/binary/3.3.0/darwin-x64/circle-develop-47e98fa1d0b18867a74da91a719d0f1ae73fcbc7-101843/',
|
|
// these are not matching
|
|
'beta/binary/3.3.0/darwin-x64/circle-develop-ffff8fa1d0b18867a74da91a719d0f1ae73fcbc7-101843/',
|
|
'beta/binary/3.3.0/darwin-x64/circle-develop-aaaa8fa1d0b18867a74da91a719d0f1ae73fcbc7-101843/',
|
|
]
|
|
const found = findBuildByCommit(sha, paths)
|
|
|
|
la(found === paths[0], 'expected to find the only path', found)
|
|
})
|
|
|
|
it('finds last matching build', () => {
|
|
const paths = [
|
|
// matching, but not the last one
|
|
'beta/binary/3.3.0/darwin-x64/circle-develop-47e98fa1d0b18867a74da91a719d0f1ae73fcbc7-50/',
|
|
// this is both matching and is the latest build (100)
|
|
'beta/binary/3.3.0/darwin-x64/circle-develop-47e98fa1d0b18867a74da91a719d0f1ae73fcbc7-100/',
|
|
// these are not matching
|
|
'beta/binary/3.3.0/darwin-x64/circle-develop-ffff8fa1d0b18867a74da91a719d0f1ae73fcbc7-101843/',
|
|
'beta/binary/3.3.0/darwin-x64/circle-develop-aaaa8fa1d0b18867a74da91a719d0f1ae73fcbc7-101843/',
|
|
// this one is matching, but not the latest one
|
|
'beta/binary/3.3.0/darwin-x64/circle-develop-47e98fa1d0b18867a74da91a719d0f1ae73fcbc7-2/',
|
|
]
|
|
const found = findBuildByCommit(sha, paths)
|
|
|
|
la(found === paths[1], 'expected to find the only path', found)
|
|
})
|
|
})
|
|
|
|
context('moveBinaries', () => {
|
|
const move = moveBinaries.moveBinaries
|
|
|
|
beforeEach(() => {
|
|
sinon.stub(uploadUtils, 'purgeDesktopAppAllPlatforms').resolves()
|
|
})
|
|
|
|
it('is a function', () => {
|
|
la(is.fn(move))
|
|
})
|
|
|
|
it('finds and copies latest build for each platform', () => {
|
|
// realistic end-to-end test
|
|
// stubs S3 method calls
|
|
// and lets our "moveBinaries" function collect builds
|
|
// find latest build for each platform (for the same commit)
|
|
// then call S3 to copy the desktop zip file to the final destination folder
|
|
|
|
const sha = '455046b928c861d4457b2ec5426a51de1fda74fd'
|
|
const version = '3.3.0'
|
|
|
|
// limit ourselves to single platform
|
|
sinon.stub(uploadUtils, 'getValidPlatformArchs').returns(['darwin-x64'])
|
|
|
|
// Mac builds for several commits in the beta folder
|
|
// below is the latest build matching the commit
|
|
const latestMacBuild =
|
|
'beta/binary/3.3.0/darwin-x64/circle-develop-455046b928c861d4457b2ec5426a51de1fda74fd-102457/'
|
|
const darwinBuilds = [
|
|
'beta/binary/3.3.0/darwin-x64/circle-develop-167934f0e45a07f03f6b1c5ddd6d8f201b5bb708-102287/',
|
|
'beta/binary/3.3.0/darwin-x64/circle-develop-455046b928c861d4457b2ec5426a51de1fda74fd-102212/',
|
|
'beta/binary/3.3.0/darwin-x64/circle-develop-47e98fa1d0b18867a74da91a719d0f1ae73fcbc7-101843/',
|
|
latestMacBuild,
|
|
'beta/binary/3.3.0/darwin-x64/circle-develop-5015cbbe876687deca571c221dfbc90715ad6d00-101982/',
|
|
'beta/binary/3.3.0/darwin-x64/circle-develop-9372bc3f67a6a83bd5ec8a69d7350f5a9b52ddf9-102246/',
|
|
'beta/binary/3.3.0/darwin-x64/circle-develop-455046b928c861d4457b2ec5426a51de1fda74fd-102359/',
|
|
'beta/binary/3.3.0/darwin-x64/circle-develop-ec36bf013224942f6198bf831d62af64b9b16cf5-102729/',
|
|
'beta/binary/3.3.0/darwin-x64/circle-issue-3996-6d539513e709ddd5aad866f6bf653280db6622cd-98450/',
|
|
]
|
|
|
|
// fake AWS config
|
|
const aws = {
|
|
bucket: 'cdn.cypress.io',
|
|
folder: 'desktop', // destination for test runner downloads
|
|
}
|
|
|
|
sinon.stub(uploadUtils, 'getS3Credentials').returns(aws)
|
|
|
|
// fake S3 api
|
|
const s3 = {}
|
|
|
|
sinon.stub(s3helpers, 'makeS3').returns(s3)
|
|
sinon
|
|
.stub(s3helpers, 'listS3Objects')
|
|
.withArgs('beta/binary/3.3.0/darwin-x64', aws.bucket)
|
|
.resolves(darwinBuilds)
|
|
|
|
sinon
|
|
.stub(s3helpers, 'verifyZipFileExists')
|
|
.withArgs(`${latestMacBuild}cypress.zip`, aws.bucket)
|
|
.resolves()
|
|
|
|
// our method will ask user to confirm copying
|
|
sinon.stub(moveBinaries.prompts, 'shouldCopy').resolves()
|
|
|
|
sinon
|
|
.stub(s3helpers, 'copyS3')
|
|
.withArgs(
|
|
`${latestMacBuild}cypress.zip`,
|
|
'desktop/3.3.0/darwin-x64/cypress.zip',
|
|
aws.bucket,
|
|
)
|
|
.resolves()
|
|
|
|
// first two arguments are sliced anyway
|
|
const nodeName = null
|
|
const scriptName = null
|
|
const args = [nodeName, scriptName, '--sha', sha, '--version', version]
|
|
|
|
return move(args).then((result) => {
|
|
la(is.object(result), 'expected a result', result)
|
|
|
|
expect(uploadUtils.purgeDesktopAppAllPlatforms).to.be.calledWith(version, 'cypress.zip')
|
|
|
|
snapshot('collected builds and copied desktop', result)
|
|
})
|
|
})
|
|
})
|
|
})
|