181 lines
4.8 KiB
JavaScript

// ***********************************************************
// This example plugins/index.js can be used to load plugins
//
// You can change the location of this file or turn off loading
// the plugins file with the 'pluginsFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/plugins-guide
// ***********************************************************
// This function is called when a project is opened or re-opened (e.g. due to
// the project's config changing)
require('dotenv').config();
const { merge } = require('lodash');
const { addMatchImageSnapshotPlugin } = require('cypress-image-snapshot/plugin');
const {
setupGitHub,
teardownGitHub,
setupGitHubTest,
teardownGitHubTest,
seedGitHubRepo,
} = require('./github');
const {
setupGitGateway,
teardownGitGateway,
setupGitGatewayTest,
teardownGitGatewayTest,
} = require('./gitGateway');
const { setupGitLab, teardownGitLab, setupGitLabTest, teardownGitLabTest } = require('./gitlab');
const {
setupBitBucket,
teardownBitBucket,
setupBitBucketTest,
teardownBitBucketTest,
} = require('./bitbucket');
const { setupProxy, teardownProxy, setupProxyTest, teardownProxyTest } = require('./proxy');
const { setupTestBackend } = require('./testBackend');
const { copyBackendFiles, switchVersion, updateConfig } = require('../utils/config');
module.exports = async (on, config) => {
// `on` is used to hook into various events Cypress emits
on('task', {
async setupBackend({ backend, options }) {
console.log('Preparing environment for backend', backend);
await copyBackendFiles(backend);
let result = null;
switch (backend) {
case 'github':
result = await setupGitHub(options);
break;
case 'git-gateway':
result = await setupGitGateway(options);
break;
case 'gitlab':
result = await setupGitLab(options);
break;
case 'bitbucket':
result = await setupBitBucket(options);
break;
case 'proxy':
result = await setupProxy(options);
break;
case 'test':
result = await setupTestBackend(options);
break;
}
return result;
},
async teardownBackend(taskData) {
const { backend } = taskData;
console.log('Tearing down backend', backend);
switch (backend) {
case 'github':
await teardownGitHub(taskData);
break;
case 'git-gateway':
await teardownGitGateway(taskData);
break;
case 'gitlab':
await teardownGitLab(taskData);
break;
case 'bitbucket':
await teardownBitBucket(taskData);
break;
case 'proxy':
await teardownProxy(taskData);
break;
}
console.log('Restoring defaults');
await copyBackendFiles('test');
return null;
},
async setupBackendTest(taskData) {
const { backend, testName } = taskData;
console.log(`Setting up single test '${testName}' for backend`, backend);
switch (backend) {
case 'github':
await setupGitHubTest(taskData);
break;
case 'git-gateway':
await setupGitGatewayTest(taskData);
break;
case 'gitlab':
await setupGitLabTest(taskData);
break;
case 'bitbucket':
await setupBitBucketTest(taskData);
break;
case 'proxy':
await setupProxyTest(taskData);
break;
}
return null;
},
async teardownBackendTest(taskData) {
const { backend, testName } = taskData;
console.log(`Tearing down single test '${testName}' for backend`, backend);
switch (backend) {
case 'github':
await teardownGitHubTest(taskData);
break;
case 'git-gateway':
await teardownGitGatewayTest(taskData);
break;
case 'gitlab':
await teardownGitLabTest(taskData);
break;
case 'bitbucket':
await teardownBitBucketTest(taskData);
break;
case 'proxy':
await teardownProxyTest(taskData);
break;
}
return null;
},
async seedRepo(taskData) {
const { backend } = taskData;
console.log(`Seeding repository for backend`, backend);
switch (backend) {
case 'github':
await seedGitHubRepo(taskData);
break;
}
return null;
},
async switchToVersion(taskData) {
const { version } = taskData;
console.log(`Switching CMS to version '${version}'`);
await switchVersion(version);
return null;
},
async updateConfig(config) {
await updateConfig(current => {
merge(current, config);
});
return null;
},
});
addMatchImageSnapshotPlugin(on, config);
};