mirror of
https://github.com/EDCD/coriolis.git
synced 2025-12-08 22:33:24 +00:00
226 lines
8.3 KiB
JavaScript
226 lines
8.3 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
|
|
|
|
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() {
|
|
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/48A6A6A5A8A8A5C2c0o0o0o1m1m0q0q0404-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 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 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);
|
|
});
|
|
});
|
|
|
|
});
|