mirror of
https://github.com/cypress-io/cypress.git
synced 2026-02-06 07:10:12 -06:00
206 lines
6.1 KiB
JavaScript
206 lines
6.1 KiB
JavaScript
require('../spec_helper')
|
|
require(`../../lib/cwd`)
|
|
|
|
const Promise = require('bluebird')
|
|
const cache = require(`../../lib/cache`).cache
|
|
const { fs } = require(`../../lib/util/fs`)
|
|
|
|
describe('lib/cache', () => {
|
|
beforeEach(async () => {
|
|
await cache.remove()
|
|
})
|
|
|
|
context('projects', () => {
|
|
describe('#insertProject', () => {
|
|
it('inserts project by path', async () => {
|
|
await cache.insertProject('foo/bar')
|
|
const projects = await cache.__get('PROJECTS')
|
|
|
|
expect(projects).to.deep.eq(['foo/bar'])
|
|
})
|
|
|
|
it('inserts project at the start', async () => {
|
|
await cache.insertProject('foo')
|
|
await cache.insertProject('bar')
|
|
const projects = await cache.__get('PROJECTS')
|
|
|
|
expect(projects).to.deep.eq(['bar', 'foo'])
|
|
})
|
|
|
|
it('can insert multiple projects in a row', async () => {
|
|
await cache.insertProject('baz')
|
|
await cache.insertProject('bar')
|
|
await cache.insertProject('foo')
|
|
const projects = await cache.__get('PROJECTS')
|
|
|
|
expect(projects).to.deep.eq(['foo', 'bar', 'baz'])
|
|
})
|
|
|
|
it('moves project to start if it already exists', async () => {
|
|
await cache.insertProject('foo')
|
|
await cache.insertProject('bar')
|
|
await cache.insertProject('baz')
|
|
await cache.insertProject('bar')
|
|
const projects = await cache.__get('PROJECTS')
|
|
|
|
expect(projects).to.deep.eq(['bar', 'baz', 'foo'])
|
|
})
|
|
})
|
|
|
|
describe('#removeProject', () => {
|
|
it('removes project by path', async () => {
|
|
await cache.insertProject('/Users/brian/app')
|
|
await cache.removeProject('/Users/brian/app')
|
|
const projects = await cache.__get('PROJECTS')
|
|
|
|
expect(projects).to.deep.eq([])
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('#getProjectRoots', () => {
|
|
beforeEach(function () {
|
|
this.statAsync = sinon.stub(fs, 'statAsync')
|
|
})
|
|
|
|
afterEach(function () {
|
|
this.statAsync.restore()
|
|
})
|
|
|
|
it('returns an array of paths', async function () {
|
|
this.statAsync.withArgs('/Users/brian/app').resolves()
|
|
this.statAsync.withArgs('/Users/sam/app2').resolves()
|
|
|
|
await cache.insertProject('/Users/brian/app')
|
|
await cache.insertProject('/Users/sam/app2')
|
|
const paths = await cache.getProjectRoots()
|
|
|
|
expect(paths).to.deep.eq(['/Users/sam/app2', '/Users/brian/app'])
|
|
})
|
|
|
|
it('removes any paths which no longer exist on the filesystem', async function () {
|
|
this.statAsync.withArgs('/Users/brian/app').resolves()
|
|
this.statAsync.withArgs('/Users/sam/app2').rejects(new Error())
|
|
|
|
await cache.insertProject('/Users/brian/app')
|
|
await cache.insertProject('/Users/sam/app2')
|
|
const paths = await cache.getProjectRoots()
|
|
|
|
expect(paths).to.deep.eq(['/Users/brian/app'])
|
|
// we have to wait on the write event because
|
|
// of process.nextTick
|
|
await Promise.delay(100)
|
|
const projects = await cache.__get('PROJECTS')
|
|
|
|
expect(projects).to.deep.eq(['/Users/brian/app'])
|
|
})
|
|
})
|
|
})
|
|
|
|
context('project preferences', () => {
|
|
it('should insert a projects preferences into the cache', async () => {
|
|
const testProjectTitle = 'launchpad'
|
|
const testPreferences = { testingType: 'e2e', browserPath: '/some/test/path' }
|
|
|
|
await cache.insertProjectPreferences(testProjectTitle, testPreferences)
|
|
const preferences = await cache.__get('PROJECT_PREFERENCES')
|
|
|
|
expect(preferences[testProjectTitle]).to.deep.equal(testPreferences)
|
|
})
|
|
|
|
it('should insert multiple projects preferences into the cache', async () => {
|
|
const testProjectTitle = 'launchpad'
|
|
const testPreferences = { testingType: 'e2e', browserPath: '/some/test/path' }
|
|
const anotherTestProjectTitle = 'launchpad'
|
|
const anotherTestPreferene = { testingType: 'e2e', browserPath: '/some/test/path' }
|
|
|
|
await cache.insertProjectPreferences(testProjectTitle, testPreferences)
|
|
await cache.insertProjectPreferences(anotherTestProjectTitle, anotherTestPreferene)
|
|
const preferences = await cache.__get('PROJECT_PREFERENCES')
|
|
|
|
expect(preferences).to.have.property(testProjectTitle)
|
|
expect(preferences).to.have.property(anotherTestProjectTitle)
|
|
})
|
|
|
|
it('should clear the projects preferred preferences', async () => {
|
|
const testProjectTitle = 'launchpad'
|
|
const testPreferences = { testingType: 'e2e', browserPath: '/some/test/path' }
|
|
|
|
await cache.insertProjectPreferences(testProjectTitle, testPreferences)
|
|
await cache.removeProjectPreferences(testProjectTitle)
|
|
const preferences = await cache.__get('PROJECT_PREFERENCES')
|
|
|
|
expect(preferences[testProjectTitle]).to.equal(null)
|
|
})
|
|
})
|
|
|
|
context('#setUser / #getUser', () => {
|
|
beforeEach(function () {
|
|
this.user = {
|
|
id: 1,
|
|
name: 'brian',
|
|
email: 'a@b.com',
|
|
authToken: '1111-2222-3333-4444',
|
|
}
|
|
})
|
|
|
|
it('sets and gets user', async function () {
|
|
await cache.setUser(this.user)
|
|
const user = await cache.getUser()
|
|
|
|
expect(user).to.deep.eq(this.user)
|
|
})
|
|
})
|
|
|
|
context('#removeUser', () => {
|
|
it('sets user to empty object', async function () {
|
|
await cache.setUser(this.user)
|
|
await cache.removeUser()
|
|
const user = await cache.getUser()
|
|
|
|
expect(user).to.deep.eq({})
|
|
})
|
|
})
|
|
|
|
context('queues public methods', () => {
|
|
it('is able to write both values', async function () {
|
|
await Promise.all([
|
|
cache.setUser({ name: 'brian', authToken: 'auth-token-123' }),
|
|
cache.insertProject('foo'),
|
|
])
|
|
|
|
const json = await cache._read()
|
|
|
|
expect(json).to.deep.eq({
|
|
USER: {
|
|
name: 'brian',
|
|
authToken: 'auth-token-123',
|
|
},
|
|
PROJECTS: ['foo'],
|
|
PROJECT_PREFERENCES: {},
|
|
PROJECTS_CONFIG: {},
|
|
COHORTS: {},
|
|
})
|
|
})
|
|
})
|
|
|
|
context('cohorts', () => {
|
|
it('should get no cohorts when empty', async function () {
|
|
const cohorts = await cache.getCohorts()
|
|
|
|
expect(cohorts).to.deep.eq({})
|
|
})
|
|
|
|
it('should insert a cohort', async function () {
|
|
const cohort = {
|
|
name: 'cohort_id',
|
|
cohort: 'A',
|
|
}
|
|
|
|
await cache.insertCohort(cohort)
|
|
const cohorts = await cache.getCohorts()
|
|
|
|
expect(cohorts).to.deep.eq({ [cohort.name]: cohort })
|
|
})
|
|
})
|