webgme-engine
Version:
WebGME server and Client API without a GUI
249 lines (206 loc) • 10.5 kB
JavaScript
// TODO: Karma is no longer maintained and does not support new versions of mocha.
// TODO: Therefore these tests have been disabled as new security patches need to be apply.
// TODO: When time consider migrating the test-karma tests to some other framework for browser testing.
// TODO: This file here is the main context setter-upper and this needs to be migrated as well.
/*eslint-env node*/
/*eslint no-console: 0*/
// Karma configuration
// Generated on Thu Mar 12 2015 16:54:00 GMT-0500 (Central Daylight Time)
// use test configuration
process.env.NODE_ENV = process.env.NODE_ENV || 'test';
// load gme configuration
var testFixture = require('./test/_globals.js'),
gmeConfig = testFixture.getGmeConfig(),
webgme = testFixture.WebGME,
Q = testFixture.Q,
gmeAuth,
storage,
server,
logger = testFixture.logger.fork('karma.conf'),
PROJECTS_TO_IMPORT = [
{name: 'ProjectAndBranchOperationsTest', path: './test-karma/client/js/client/basicProject.webgmex'},
{name: 'noBranchSeedProject', path: './test-karma/client/js/client/pluginProject.webgmex'},
{name: 'alreadyExists', path: './test-karma/client/js/client/pluginProject.webgmex'},
{name: 'createGenericBranch', path: './test-karma/client/js/client/pluginProject.webgmex'},
{name: 'removeGenericBranch', path: './test-karma/client/js/client/pluginProject.webgmex'},
{name: 'metaQueryAndManipulationTest', path: './test-karma/client/js/client/metaTestProject.webgmex'},
{name: 'ClientNodeInquiryTests', path: './test-karma/client/js/client/clientNodeTestProject.webgmex'},
{name: 'nodeManipulationProject', path: './test-karma/client/js/client/clientNodeTestProject.webgmex'},
{name: 'RESTLikeTests', path: './test-karma/client/js/client/clientNodeTestProject.webgmex'},
{name: 'undoRedoTests', path: './test-karma/client/js/client/clientNodeTestProject.webgmex'},
{name: 'territoryProject', path: './test-karma/client/js/client/clientNodeTestProject.webgmex'},
{name: 'projectSeedSingleMaster', path: './test-karma/client/js/client/clientNodeTestProject.webgmex'},
{
name: 'projectSeedSingleNonMaster',
path: './test-karma/client/js/client/clientNodeTestProject.webgmex',
branches: ['other']
},
{
name: 'projectSeedMultiple',
path: './test-karma/client/js/client/clientNodeTestProject.webgmex',
branches: ['master', 'other']
},
{name: 'pluginProject', path: './test-karma/client/js/client/pluginProject.webgmex'},
{name: 'branchWatcher', path: './test-karma/client/js/client/pluginProject.webgmex'},
{name: 'branchStatus', path: './test-karma/client/js/client/pluginProject.webgmex'},
{
name: 'ServerWorkerRequests',
path: './seeds/EmptyProject.webgmex',
tags: ['v1'],
branches: ['b1', 'b2', 'updateProjectFromFile']
}
];
(function initializeServer() {
'use strict';
console.log((new Date()).toISOString(), 'initializeServer started');
// Add a user to to GMEAuth
var projectNames = PROJECTS_TO_IMPORT.map(function (projectData) {
return projectData.name;
});
//console.log(projectNames);
testFixture.clearDBAndGetGMEAuth(gmeConfig, projectNames)
.then(function (gmeAuth_) {
// Open the database storage
gmeAuth = gmeAuth_;
storage = testFixture.getMongoStorage(logger, gmeConfig, gmeAuth);
return storage.openDatabase();
})
.then(function () {
// Import all the projects.
function importProject(projectInfo) {
var branchName = Object.hasOwn(projectInfo, 'branches') ?
projectInfo.branches[0] : 'master';
//console.log((new Date()).toISOString(), ' importing ' + projectInfo.name);
return testFixture.importProject(storage, {
projectSeed: projectInfo.path,
projectName: projectInfo.name,
branchName: branchName,
gmeConfig: gmeConfig,
logger: logger
})
.then(function (importResult) {
let i;
const createBranchesAndTags = [];
if (Object.hasOwn(projectInfo, 'branches') && projectInfo.branches.length > 1) {
// First one is already added thus i = 1.
for (i = 1; i < projectInfo.branches.length; i += 1) {
createBranchesAndTags.push(storage.createBranch(
{
projectId: testFixture.projectName2Id(projectInfo.name),
branchName: projectInfo.branches[i],
hash: importResult.commitHash
})
);
}
}
(projectInfo.tags || []).forEach((tag) => {
createBranchesAndTags.push(storage.createTag(
{
projectId: testFixture.projectName2Id(projectInfo.name),
tagName: tag,
hash: importResult.commitHash
})
);
});
return Q.allDone(createBranchesAndTags);
})
.then(function () {
var nextProject = PROJECTS_TO_IMPORT.shift();
if (nextProject) {
return importProject(nextProject);
}
});
}
return importProject(PROJECTS_TO_IMPORT.shift());
})
.then(function () {
// Close the storage
return storage.closeDatabase();
})
.then(function () {
server = webgme.standaloneServer(gmeConfig);
//setTimeout(function () {
server.start(function () {
console.log((new Date()).toISOString(), 'webgme server started');
});
//}, 10000); // timeout to emulate long server start up see test-main.js
})
.catch(function (err) {
console.error(err);
});
}());
module.exports = function (config) {
'use strict';
config.set({
// base path that will be used to resolve all patterns (eg. files, exclude)
basePath: '',
client: {
captureConsole: true,
mocha: {
timeout: 10000 // Increased from 2000 [ms]
}
},
// frameworks to use
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
frameworks: ['mocha', 'requirejs', 'chai'],
// list of files / patterns to load in the browser
files: [
// {pattern: 'src/**/*.js', included: false}, // THIS IS SLOW: SPECIFY EXPLICITLY WHAT WE NEED.
{pattern: 'src/common/**/*.js', included: false},
{pattern: 'src/**/*.wasm', included: false},
{pattern: 'src/client/*.js', included: false},
{pattern: 'src/plugin/*.js', included: false},
{pattern: 'src/plugin/coreplugins/MinimalWorkingExample/**/*', included: false},
{pattern: 'src/plugin/coreplugins/PluginGenerator/**/*', included: false},
{pattern: 'test-karma/assets/plugins/**/*', included: false},
{pattern: 'src/*.js', included: false},
{pattern: 'test/plugin/scenarios/plugins/**/*', included: false},
{pattern: 'seeds/*.webgmex', included: false}, //seeds
{pattern: 'test-karma/**/*.spec.js', included: false},
// {pattern: 'test-karma/**/*.inc.js', included: false}, //test include scripts
{pattern: 'test-karma/**/*.json', included: false}, //test assets
'test-main.js'
],
// list of files to exclude
exclude: [],
// preprocess matching files before serving them to the browser
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
preprocessors: {
'src/**/*.js': ['coverage']
},
// test results reporter to use
// possible values: 'dots', 'progress'
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
reporters: ['dots', 'coverage'],
// web server port
port: 9876,
// enable / disable colors in the output (reporters and logs)
colors: true,
// level of logging
// possible values:
// config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
logLevel: config.LOG_INFO,
// enable / disable watching file and executing tests whenever any file changes
autoWatch: false,
// start these browsers
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
browsers: ['Chrome', 'Firefox'],
reportSlowerThan: 1000,
// to avoid DISCONNECTED messages
browserDisconnectTimeout: 10000, // default 2000
browserDisconnectTolerance: 1, // default 0
browserNoActivityTimeout: 60000, //default 10000
// Continuous Integration mode
// if true, Karma captures browsers, runs the tests and exits
singleRun: true,
// forward these requests to the webgme server. All other files are served by the karma web server
proxies: {
'/base/gmeConfig.json': 'http://localhost:' + gmeConfig.server.port + '/gmeConfig.json',
'/docs': 'http://localhost:' + gmeConfig.server.port + '/docs',
'/rest': 'http://localhost:' + gmeConfig.server.port + '/rest',
'/api': 'http://localhost:' + gmeConfig.server.port + '/api',
// eslint-disable-next-line max-len
'/common/util/rust/sha1/web/wasm-sha1_bg.wasm': 'http://localhost:' + gmeConfig.server.port + '/common/util/rust/sha1/web/wasm-sha1_bg.wasm',
}
});
};