mirror of
https://github.com/EDCD/coriolis.git
synced 2025-12-08 14:33:22 +00:00
React port nearing completetion. Adding tests
This commit is contained in:
@@ -16,7 +16,7 @@
|
||||
"Miner": "25A5A5A4D4A5A5C0s0s24242l2l---04054a1q02022o27"
|
||||
},
|
||||
"cobra_mk_iii": {
|
||||
"Example": "24A4A4A3D3A3A4C0s0s2d2d0m0445032b2o2753.AwRj4yKA.CwBhEYyrKhmMQ===",
|
||||
"Example": "24A4A4A3D3A3A4C0s0s2d2d0m0445032b2o2753.AwRj4yKA.CwBhEYyrKhmMQ==="
|
||||
},
|
||||
"imperial_clipper": {
|
||||
"Cargo": "03A5D5A5D4D5D4C--0s0s----0605450302020101",
|
||||
|
||||
@@ -1,196 +0,0 @@
|
||||
xdescribe('Import Controller', function() {
|
||||
beforeEach(module('app'));
|
||||
|
||||
var importController, $rootScope, $stateParams, scope;
|
||||
|
||||
var eventStub = {
|
||||
preventDefault: function(){ },
|
||||
stopPropagation: function(){ }
|
||||
};
|
||||
|
||||
beforeEach(inject(function(_$rootScope_, $controller) {
|
||||
$rootScope = _$rootScope_;
|
||||
$rootScope.discounts = {
|
||||
ship: 1,
|
||||
components: 1
|
||||
};
|
||||
$stateParams = { };
|
||||
scope = $rootScope.$new();
|
||||
scope.$parent.dismiss = function() {};
|
||||
|
||||
var store = {};
|
||||
|
||||
spyOn(localStorage, 'getItem').and.callFake(function (key) {
|
||||
return store[key];
|
||||
});
|
||||
spyOn(localStorage, 'setItem').and.callFake(function (key, value) {
|
||||
return store[key] = value + '';
|
||||
});
|
||||
spyOn(localStorage, 'clear').and.callFake(function () {
|
||||
store = {};
|
||||
});
|
||||
|
||||
importController = $controller('ImportController', { $rootScope: $rootScope, $scope: scope, $stateParams: $stateParams });
|
||||
}));
|
||||
|
||||
describe('Import Backup', function() {
|
||||
|
||||
it('imports a valid backup', function() {
|
||||
var importData = __json__['fixtures/valid-backup'];
|
||||
scope.importString = angular.toJson(importData);
|
||||
scope.validateImport();
|
||||
expect(scope.importValid).toBeTruthy();
|
||||
expect(scope.errorMsg).toEqual(null);
|
||||
scope.process();
|
||||
expect(scope.processed).toBeTruthy();
|
||||
scope.import();
|
||||
expect(angular.fromJson(localStorage.getItem('builds'))).toEqual(importData.builds);
|
||||
expect(angular.fromJson(localStorage.getItem('comparisons'))).toEqual(importData.comparisons);
|
||||
expect(localStorage.getItem('insurance')).toEqual(importData.insurance);
|
||||
expect(angular.fromJson(localStorage.getItem('discounts'))).toEqual(importData.discounts);
|
||||
});
|
||||
|
||||
it('imports an old valid backup', function() {
|
||||
var importData = __json__['fixtures/old-valid-export'];
|
||||
scope.importString = angular.toJson(importData);
|
||||
scope.validateImport();
|
||||
expect(scope.importValid).toBeTruthy();
|
||||
expect(scope.errorMsg).toEqual(null);
|
||||
scope.process();
|
||||
expect(scope.processed).toBeTruthy();
|
||||
scope.import();
|
||||
expect(angular.fromJson(localStorage.getItem('builds'))).toEqual(importData.builds);
|
||||
});
|
||||
|
||||
it('catches an invalid backup', function() {
|
||||
var importData = __json__['fixtures/valid-backup'];
|
||||
|
||||
scope.importString = 'null';
|
||||
scope.validateImport();
|
||||
expect(scope.importValid).toBeFalsy();
|
||||
expect(scope.errorMsg).toEqual('Must be an object or array!');
|
||||
|
||||
scope.importString = '{ "builds": "Should not be a string" }';
|
||||
scope.validateImport();
|
||||
expect(scope.importValid).toBeFalsy();
|
||||
expect(scope.errorMsg).toEqual('builds must be an object!');
|
||||
|
||||
scope.importString = angular.toJson(importData).replace('anaconda', 'invalid_ship');
|
||||
scope.validateImport();
|
||||
expect(scope.importValid).toBeFalsy();
|
||||
expect(scope.errorMsg).toEqual('"invalid_ship" is not a valid Ship Id!');
|
||||
|
||||
scope.importString = angular.toJson(importData).replace('Dream', '');
|
||||
scope.validateImport();
|
||||
expect(scope.importValid).toBeFalsy();
|
||||
expect(scope.errorMsg).toEqual('Imperial Clipper build "" must be a string at least 1 character long!');
|
||||
|
||||
invalidImportData = angular.copy(importData);
|
||||
invalidImportData.builds.asp = null; // Remove Asp Miner build used in comparison
|
||||
scope.importString = angular.toJson(invalidImportData);
|
||||
scope.validateImport();
|
||||
expect(scope.importValid).toBeFalsy();
|
||||
expect(scope.errorMsg).toEqual('asp build "Miner" data is missing!');
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('Import Detailed Build', function() {
|
||||
|
||||
it('imports a valid v1 build', function() {
|
||||
var importData = __json__['fixtures/anaconda-test-detailed-export-v1'];
|
||||
scope.importString = angular.toJson(importData);
|
||||
scope.validateImport();
|
||||
expect(scope.importValid).toBeTruthy();
|
||||
expect(scope.errorMsg).toEqual(null);
|
||||
scope.process();
|
||||
expect(scope.processed).toBeTruthy();
|
||||
scope.import();
|
||||
expect(angular.fromJson(localStorage.getItem('builds'))).toEqual({
|
||||
anaconda: { 'Test': '48A6A6A5A8A8A5C2c0o0o0o1m1m0q0q0404-0l0b0100034k5n052d04--0303326b.Iw18ZlA=.Aw18ZlA=' }
|
||||
});
|
||||
});
|
||||
|
||||
it('imports a valid v2 build', function() {
|
||||
var importData = __json__['fixtures/anaconda-test-detailed-export-v2'];
|
||||
scope.importString = angular.toJson(importData);
|
||||
scope.validateImport();
|
||||
expect(scope.importValid).toBeTruthy();
|
||||
expect(scope.errorMsg).toEqual(null);
|
||||
scope.process();
|
||||
expect(scope.processed).toBeTruthy();
|
||||
scope.import();
|
||||
expect(angular.fromJson(localStorage.getItem('builds'))).toEqual({
|
||||
anaconda: { 'Test': '48A6A6A5A8A8A5C2c0o0o0o1m1m0q0q0404-0l0b0100034k5n052d04--0303326b.AwRj4zNKqA==.CwBhCYzBGW9qCTSqs5xA' }
|
||||
});
|
||||
});
|
||||
|
||||
it('catches an invalid build', function() {
|
||||
var importData = __json__['fixtures/anaconda-test-detailed-export-v2'];
|
||||
scope.importString = angular.toJson(importData).replace('components', 'comps');
|
||||
scope.validateImport();
|
||||
expect(scope.importValid).toBeFalsy();
|
||||
expect(scope.errorMsg).toEqual('Anaconda Build "Test": Invalid data');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('Import Detaild Builds Array', function() {
|
||||
|
||||
it('imports all builds', function() {
|
||||
var importData = __json__['fixtures/valid-detailed-export'];
|
||||
var expectedBuilds = __json__['fixtures/expected-builds'];
|
||||
scope.importString = angular.toJson(importData);
|
||||
scope.validateImport();
|
||||
expect(scope.importValid).toBeTruthy();
|
||||
expect(scope.errorMsg).toEqual(null);
|
||||
scope.process();
|
||||
expect(scope.processed).toBeTruthy();
|
||||
scope.import();
|
||||
var builds = angular.fromJson(localStorage.getItem('builds'));
|
||||
for (var s in builds) {
|
||||
for (var b in builds[s]) {
|
||||
expect(builds[s][b]).toEqual(expectedBuilds[s][b]);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('Import E:D Shipyard Builds', function() {
|
||||
|
||||
it('imports a valid builds', function() {
|
||||
var imports = __json__['fixtures/ed-shipyard-import-valid'];
|
||||
|
||||
for (var i = 0; i < imports.length; i++ ) {
|
||||
scope.importString = imports[i].buildText;
|
||||
scope.validateImport();
|
||||
expect(scope.importValid).toBeTruthy();
|
||||
expect(scope.errorMsg).toEqual(null, 'Build #' + i + ': ' + imports[i].buildName);
|
||||
|
||||
if (scope.importValid) { // No point in carrying out other assertions
|
||||
scope.process();
|
||||
expect(scope.processed).toBeTruthy();
|
||||
scope.import();
|
||||
var allBuilds = angular.fromJson(localStorage.getItem('builds'));
|
||||
var shipBuilds = allBuilds ? allBuilds[imports[i].shipId] : null;
|
||||
var build = shipBuilds ? shipBuilds[imports[i].buildName] : null;
|
||||
expect(build).toEqual(imports[i].buildCode, 'Build #' + i + ': ' + imports[i].buildName);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
it('catches invalid builds', function() {
|
||||
var imports = __json__['fixtures/ed-shipyard-import-invalid'];
|
||||
for (var i = 0; i < imports.length; i++ ) {
|
||||
scope.importString = imports[i].buildText;
|
||||
scope.validateImport();
|
||||
expect(scope.importValid).toBeFalsy();
|
||||
expect(scope.errorMsg).toEqual(imports[i].errorMsg);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
218
__tests__/test-import.js
Normal file
218
__tests__/test-import.js
Normal file
@@ -0,0 +1,218 @@
|
||||
jest.dontMock('../src/app/stores/Persist');
|
||||
jest.dontMock('../src/app/components/TranslatedComponent');
|
||||
jest.dontMock('../src/app/components/ModalImport');
|
||||
|
||||
import React from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
import TU from 'react-testutils-additions';
|
||||
import Utils from './testUtils';
|
||||
import Persist from '../src/app/stores/Persist';
|
||||
import { getLanguage } from '../src/app/i18n/Language';
|
||||
|
||||
describe('Import Controller', function() {
|
||||
|
||||
const Persist = require('../src/app/stores/Persist').default;
|
||||
const ModalImport = require('../src/app/components/ModalImport').default;
|
||||
const mockContext = {
|
||||
language: getLanguage('en'),
|
||||
sizeRatio: 1,
|
||||
openMenu: jest.genMockFunction(),
|
||||
closeMenu: jest.genMockFunction(),
|
||||
showModal: jest.genMockFunction(),
|
||||
hideModal: jest.genMockFunction(),
|
||||
tooltip: jest.genMockFunction(),
|
||||
termtip: jest.genMockFunction(),
|
||||
onWindowResize: jest.genMockFunction()
|
||||
};
|
||||
|
||||
let modal, render, ContextProvider = Utils.createContextProvider(mockContext);
|
||||
|
||||
/**
|
||||
* Clear saved builds, and reset React DOM
|
||||
*/
|
||||
function reset() {
|
||||
Persist.deleteAll();
|
||||
render = TU.renderIntoDocument(<ContextProvider><ModalImport /></ContextProvider>);
|
||||
modal = TU.findRenderedComponentWithType(render, ModalImport);
|
||||
}
|
||||
|
||||
/**
|
||||
* Simulate user import text entry / paste
|
||||
* @param {string} text Import text / raw data
|
||||
*/
|
||||
function pasteText(text) {
|
||||
let textarea = TU.findRenderedDOMComponentWithTag(render, 'textarea');
|
||||
TU.Simulate.change(textarea, { target: { value: text } });
|
||||
}
|
||||
|
||||
/**
|
||||
* Simulate click on Proceed button
|
||||
*/
|
||||
function clickProceed() {
|
||||
let proceedButton = TU.findRenderedDOMComponentWithId(render, 'proceed');
|
||||
TU.Simulate.click(proceedButton);
|
||||
}
|
||||
|
||||
/**
|
||||
* Simulate click on Import button
|
||||
*/
|
||||
function clickImport() {
|
||||
let importButton = TU.findRenderedDOMComponentWithId(render, 'import');
|
||||
TU.Simulate.click(importButton);
|
||||
}
|
||||
|
||||
describe('Import Backup', function() {
|
||||
|
||||
beforeEach(reset);
|
||||
|
||||
it('imports a valid backup', function() {
|
||||
let importData = require('./fixtures/valid-backup');
|
||||
let importString = JSON.stringify(importData);
|
||||
|
||||
expect(modal.state.importValid).toEqual(false);
|
||||
expect(modal.state.errorMsg).toEqual(null);
|
||||
pasteText(importString);
|
||||
expect(modal.state.importValid).toBe(true);
|
||||
expect(modal.state.errorMsg).toEqual(null);
|
||||
expect(modal.state.builds).toEqual(importData.builds);
|
||||
expect(modal.state.comparisons).toEqual(importData.comparisons);
|
||||
expect(modal.state.discounts).toEqual(importData.discounts);
|
||||
expect(modal.state.insurance).toBe(importData.insurance.toLowerCase());
|
||||
clickProceed();
|
||||
expect(modal.state.processed).toBe(true);
|
||||
expect(modal.state.errorMsg).toEqual(null);
|
||||
clickImport();
|
||||
expect(Persist.getBuilds()).toEqual(importData.builds);
|
||||
expect(Persist.getComparisons()).toEqual(importData.comparisons);
|
||||
expect(Persist.getInsurance()).toEqual(importData.insurance.toLowerCase());
|
||||
expect(Persist.getShipDiscount()).toEqual(importData.discounts[0]);
|
||||
expect(Persist.getModuleDiscount()).toEqual(importData.discounts[1]);
|
||||
});
|
||||
|
||||
it('imports an old valid backup', function() {
|
||||
let importData = require('./fixtures/old-valid-export');
|
||||
let importStr = JSON.stringify(importData);
|
||||
|
||||
pasteText(importStr);
|
||||
expect(modal.state.builds).toEqual(importData.builds);
|
||||
expect(modal.state.importValid).toBe(true);
|
||||
expect(modal.state.errorMsg).toEqual(null);
|
||||
clickProceed();
|
||||
expect(modal.state.processed).toBeTruthy();
|
||||
clickImport();
|
||||
expect(Persist.getBuilds()).toEqual(importData.builds);
|
||||
});
|
||||
|
||||
it('catches an invalid backup', function() {
|
||||
let importData = require('./fixtures/valid-backup');
|
||||
let invalidImportData = Object.assign({}, importData);
|
||||
invalidImportData.builds.asp = null; // Remove Asp Miner build used in comparison
|
||||
|
||||
pasteText('"this is not valid"');
|
||||
expect(modal.state.importValid).toBeFalsy();
|
||||
expect(modal.state.errorMsg).toEqual('Must be an object or array!');
|
||||
pasteText('{ "builds": "Should not be a string" }');
|
||||
expect(modal.state.importValid).toBeFalsy();
|
||||
expect(modal.state.errorMsg).toEqual('builds must be an object!');
|
||||
pasteText(JSON.stringify(importData).replace('anaconda', 'invalid_ship'));
|
||||
expect(modal.state.importValid).toBeFalsy();
|
||||
expect(modal.state.errorMsg).toEqual('"invalid_ship" is not a valid Ship Id!');
|
||||
pasteText(JSON.stringify(importData).replace('Dream', ''));
|
||||
expect(modal.state.importValid).toBeFalsy();
|
||||
expect(modal.state.errorMsg).toEqual('Imperial Clipper build "" must be a string at least 1 character long!');
|
||||
pasteText(JSON.stringify(invalidImportData));
|
||||
expect(modal.state.importValid).toBeFalsy();
|
||||
expect(modal.state.errorMsg).toEqual('asp build "Miner" data is missing!');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Import Detailed Build', function() {
|
||||
|
||||
beforeEach(reset);
|
||||
|
||||
it('imports a valid v3 build', function() {
|
||||
let importData = require('./fixtures/anaconda-test-detailed-export-v3');
|
||||
pasteText(JSON.stringify(importData));
|
||||
|
||||
expect(modal.state.importValid).toBeTruthy();
|
||||
expect(modal.state.errorMsg).toEqual(null);
|
||||
|
||||
clickProceed();
|
||||
|
||||
expect(modal.state.processed).toBeTruthy();
|
||||
|
||||
clickImport();
|
||||
|
||||
expect(Persist.getBuilds()).toEqual({
|
||||
anaconda: { 'Test': '48A6A6A5A8A8A5C2c0o0o0o1m1m0q0q0404-0l0b0100034k5n052d04--0303326b.AwRj4zNKqA==.CwBhCYzBGW9qCTSqs5xA' }
|
||||
});
|
||||
});
|
||||
|
||||
it('catches an invalid build', function() {
|
||||
let importData = require('./fixtures/anaconda-test-detailed-export-v3');
|
||||
pasteText(JSON.stringify(importData).replace('components', 'comps'));
|
||||
|
||||
expect(modal.state.importValid).toBeFalsy();
|
||||
expect(modal.state.errorMsg).toEqual('Anaconda Build "Test": Invalid data');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Import Detaild Builds Array', function() {
|
||||
|
||||
beforeEach(reset);
|
||||
|
||||
it('imports all builds', function() {
|
||||
let importData = require('./fixtures/valid-detailed-export');
|
||||
let expectedBuilds = require('./fixtures/expected-builds');
|
||||
|
||||
pasteText(JSON.stringify(importData));
|
||||
expect(modal.state.importValid).toBeTruthy();
|
||||
expect(modal.state.errorMsg).toEqual(null);
|
||||
clickProceed();
|
||||
expect(modal.state.processed).toBeTruthy();
|
||||
clickImport();
|
||||
|
||||
let builds = Persist.getBuilds();
|
||||
|
||||
for (let s in builds) {
|
||||
for (let b in builds[s]) {
|
||||
expect(builds[s][b]).toEqual(expectedBuilds[s][b]);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe('Import E:D Shipyard Builds', function() {
|
||||
|
||||
it('imports a valid builds', function() {
|
||||
let imports = require('./fixtures/ed-shipyard-import-valid');
|
||||
|
||||
for (let i = 0; i < imports.length; i++ ) {
|
||||
reset();
|
||||
pasteText(imports[i].buildText);
|
||||
expect(modal.state.importValid).toBeTruthy();
|
||||
expect(modal.state.errorMsg).toEqual(null, 'Build #' + i + ': ' + imports[i].buildName);
|
||||
clickProceed();
|
||||
expect(modal.state.processed).toBeTruthy();
|
||||
clickImport();
|
||||
let allBuilds = Persist.getBuilds();
|
||||
let shipBuilds = allBuilds ? allBuilds[imports[i].shipId] : null;
|
||||
let build = shipBuilds ? shipBuilds[imports[i].buildName] : null;
|
||||
expect(build).toEqual(imports[i].buildCode, 'Build #' + i + ': ' + imports[i].buildName);
|
||||
}
|
||||
});
|
||||
|
||||
it('catches invalid builds', function() {
|
||||
let imports = require('./fixtures/ed-shipyard-import-invalid');
|
||||
|
||||
for (let i = 0; i < imports.length; i++ ) {
|
||||
reset();
|
||||
pasteText(imports[i].buildText);
|
||||
expect(modal.state.importValid).toBeFalsy();
|
||||
expect(modal.state.errorMsg).toEqual(imports[i].errorMsg);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
24
__tests__/testUtils.js
Normal file
24
__tests__/testUtils.js
Normal file
@@ -0,0 +1,24 @@
|
||||
import React from 'react';
|
||||
|
||||
const TestUtils = {
|
||||
createContextProvider: function(context) {
|
||||
var _contextTypes = {};
|
||||
|
||||
Object.keys(context).forEach(function(key) {
|
||||
_contextTypes[key] = React.PropTypes.any;
|
||||
});
|
||||
|
||||
return React.createClass({
|
||||
displayName: 'ContextProvider',
|
||||
childContextTypes: _contextTypes,
|
||||
getChildContext() { return context; },
|
||||
|
||||
render() {
|
||||
return React.Children.only(this.props.children);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export default TestUtils;
|
||||
Reference in New Issue
Block a user