mirror of
https://github.com/EDCD/coriolis.git
synced 2025-12-08 22:33:24 +00:00
261 lines
10 KiB
JavaScript
261 lines
10 KiB
JavaScript
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 { getLanguage } from '../src/app/i18n/Language';
|
|
|
|
describe('Import Modal', function() {
|
|
|
|
let MockRouter = require('../src/app/Router').default;
|
|
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() {
|
|
MockRouter.go.mockClear();
|
|
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.shipDiscount).toEqual(importData.discounts[0]);
|
|
expect(modal.state.moduleDiscount).toEqual(importData.discounts[1]);
|
|
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() {
|
|
const importData = require('./fixtures/old-valid-export');
|
|
const 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() {
|
|
const importData = require('./fixtures/valid-backup');
|
|
let invalidImportData = Object.assign({}, importData);
|
|
//invalidImportData.builds.asp = null; // Remove Asp Miner build used in comparison
|
|
delete(invalidImportData.builds.asp);
|
|
|
|
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 V3 Build', function() {
|
|
|
|
beforeEach(reset);
|
|
|
|
it('imports a valid v3 build', function() {
|
|
const importData = require('./fixtures/anaconda-test-detailed-export-v3');
|
|
pasteText(JSON.stringify(importData));
|
|
|
|
expect(modal.state.importValid).toBeTruthy();
|
|
expect(modal.state.errorMsg).toEqual(null);
|
|
expect(modal.state.singleBuild).toBe(true);
|
|
clickProceed();
|
|
expect(MockRouter.go.mock.calls.length).toBe(1);
|
|
expect(MockRouter.go.mock.calls[0][0]).toBe('/outfit/anaconda/4putkFklkdzsuf52c0o0o0o1m1m0q0q0404-0l0b0100034k5n052d04--0303326b.AwRj4zNKqA==.CwBhCYzBGW9qCTSqs5xA.?bn=Test%20My%20Ship');
|
|
});
|
|
|
|
it('catches an invalid build', function() {
|
|
const 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 My Ship": Invalid data');
|
|
});
|
|
});
|
|
|
|
describe('Import Detailed V4 Build', function() {
|
|
|
|
beforeEach(reset);
|
|
|
|
it('imports a valid v4 build', function() {
|
|
const importData = require('./fixtures/anaconda-test-detailed-export-v4');
|
|
pasteText(JSON.stringify(importData));
|
|
|
|
expect(modal.state.importValid).toBeTruthy();
|
|
expect(modal.state.errorMsg).toEqual(null);
|
|
expect(modal.state.singleBuild).toBe(true);
|
|
clickProceed();
|
|
expect(MockRouter.go.mock.calls.length).toBe(1);
|
|
expect(MockRouter.go.mock.calls[0][0]).toBe('/outfit/anaconda/4putkFklkdzsuf52c0o0o0o1m1m0q0q0404-0l0b0100034k5n052d04--0303326b.AwRj4zNKqA==.CwBhCYzBGW9qCTSqs5xA.H4sIAAAAAAAAA2MUe8HMwPD-PwDDhxeuCAAAAA==?bn=Test%20My%20Ship');
|
|
});
|
|
});
|
|
|
|
describe('Import Detaild Builds Array', function() {
|
|
|
|
beforeEach(reset);
|
|
|
|
it('imports all builds', function() {
|
|
const importData = require('./fixtures/valid-detailed-export');
|
|
const 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 Companion API Build', function() {
|
|
|
|
beforeEach(reset);
|
|
|
|
it('imports a valid v4 build', function() {
|
|
const importData = require('./fixtures/companion-api-import-1');
|
|
pasteText(JSON.stringify(importData));
|
|
|
|
expect(modal.state.importValid).toBeTruthy();
|
|
expect(modal.state.errorMsg).toEqual(null);
|
|
expect(modal.state.singleBuild).toBe(true);
|
|
clickProceed();
|
|
expect(MockRouter.go.mock.calls.length).toBe(1);
|
|
expect(MockRouter.go.mock.calls[0][0]).toBe('/outfit/federal_corvette/2putsFklndzsxf50x0x7l28281919040404040402020l06p05sf63c5ifhv66g2f.AwRj4zNaKA==.CwRgDBldUExuBiQqA===.H4sIAAAAAAAAAx2Rzy4DURTGz7TuzHRu47ZjWreKlg5iQ9KFZ9CENyBWtWo8gIUFsamteAIJi0qEWIhdN11ZEN1IwyNYVKRpcXzH5su553f_XyfvKiLTYma-TkScyHVcokoYEdmbBNDsiDla-WUOT5LgyfAshHdvyGyjFFHUQCSrBU8TLT4gYq4DNL_LhNTFN3PwiqdZQyX2C-sekep-Mrs1RIbnDppsIogD1UAtN7JEM9eIzZg8hmhsEU32gFmrdgB_UARvjYEr4QMUMffoxGnV-M8X3hZ_lAO-gmWq2Eq2IVtDOzZ2Hbbuws6KxCKmKUUydgRb3woSiUXMs6Cs7Qt6FCQSi5hxkNKhj6qhfcPU_kU4wYrFMseSOmFXMKbuwZsViUWMlq1sbhvJ_lKyfqTqEJGJyoC5eIpU9x2TRnUswYXyF77BW4Z3qQuv05GDTpfvcDzvSbxJ5DtV_aHS1I4clyB2A5_b-pAL8x_enn626gEAAA==?bn=Imported%20Federal%20Corvette');
|
|
});
|
|
});
|
|
|
|
describe('Import E:D Shipyard Builds', function() {
|
|
|
|
it('imports a valid builds', function() {
|
|
const imports = require('./fixtures/ed-shipyard-import-valid');
|
|
|
|
for (let i = 0; i < imports.length; i++ ) {
|
|
reset();
|
|
let fixture = imports[i];
|
|
pasteText(fixture.buildText);
|
|
expect(modal.state.importValid).toBeTruthy();
|
|
expect(modal.state.errorMsg).toEqual(null);
|
|
clickProceed();
|
|
expect(MockRouter.go.mock.calls.length).toBe(1);
|
|
expect(MockRouter.go.mock.calls[0][0]).toBe('/outfit/' + fixture.shipId + '/' + fixture.buildCode + '?bn=' + encodeURIComponent(fixture.buildName));
|
|
}
|
|
});
|
|
|
|
it('catches invalid builds', function() {
|
|
const 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);
|
|
}
|
|
});
|
|
});
|
|
|
|
describe('Imports from a Comparison', function() {
|
|
|
|
it('imports a valid comparison', function() {
|
|
const importBuilds = require('./fixtures/valid-backup').builds;
|
|
Persist.deleteAll();
|
|
render = TU.renderIntoDocument(<ContextProvider><ModalImport builds={importBuilds} /></ContextProvider>);
|
|
modal = TU.findRenderedComponentWithType(render, ModalImport);
|
|
|
|
expect(modal.state.processed).toBe(true);
|
|
expect(modal.state.errorMsg).toEqual(null);
|
|
clickImport();
|
|
expect(Persist.getBuilds()).toEqual(importBuilds);
|
|
});
|
|
});
|
|
|
|
});
|