mirror of
https://github.com/EDCD/coriolis.git
synced 2025-12-08 22:33:24 +00:00
174 lines
5.2 KiB
JavaScript
174 lines
5.2 KiB
JavaScript
jest.unmock('../src/app/stores/Persist');
|
|
|
|
import React from 'react';
|
|
import ReactDOM from 'react-dom';
|
|
import TU from 'react-testutils-additions';
|
|
|
|
let origAddEventListener = window.addEventListener;
|
|
let storageListener;
|
|
|
|
/**
|
|
* Mock local storage
|
|
*/
|
|
class LocalStorage {
|
|
/**
|
|
* Sets up storage variable
|
|
*/
|
|
constructor() {
|
|
this.ls = {};
|
|
}
|
|
|
|
/**
|
|
* Retrieves a value from local storage
|
|
* @param {String} key Storage key
|
|
* @return {*} Storage value
|
|
*/
|
|
getItem(key) {
|
|
return this.ls[key];
|
|
}
|
|
|
|
/**
|
|
* Writes a value to local storage
|
|
* @param {String} key Storage key
|
|
* @param {*} value Storage value
|
|
*/
|
|
setItem(key, value) {
|
|
this.ls[key] = value;
|
|
}
|
|
|
|
/**
|
|
* Clears a value from local storage
|
|
* @param {String} key Storage key
|
|
*/
|
|
removeItem(key) {
|
|
delete this.ls[key];
|
|
}
|
|
|
|
/**
|
|
* Clears local storage
|
|
*/
|
|
clear() {
|
|
this.ls = {};
|
|
}
|
|
}
|
|
|
|
const LOCAL_STORAGE = new LocalStorage();
|
|
|
|
window.addEventListener = function(eventName, listener) {
|
|
if(eventName == 'storage') {
|
|
storageListener = listener; // Keep track of latest storage listener
|
|
} else {
|
|
origAddEventListener.apply(arguments);
|
|
}
|
|
};
|
|
|
|
describe('Persist', function() {
|
|
const Persist = require('../src/app/stores/Persist').Persist;
|
|
|
|
describe('Multi tab/window', function() {
|
|
it("syncs builds", function() {
|
|
window.localStorage = localStorage;
|
|
localStorage.clear();
|
|
|
|
let p = new Persist();
|
|
let newBuilds = {
|
|
anaconda: { test: '1234' }
|
|
};
|
|
|
|
storageListener({ key: 'builds', newValue: JSON.stringify(newBuilds) });
|
|
expect(p.getBuild('anaconda', 'test')).toBe('1234');
|
|
});
|
|
});
|
|
|
|
describe('General and Settings', function() {
|
|
it("has defaults", function() {
|
|
window.localStorage = localStorage;
|
|
localStorage.clear();
|
|
|
|
let p = new Persist();
|
|
expect(p.getLangCode()).toBe('en');
|
|
expect(p.showTooltips()).toBe(true);
|
|
expect(p.getInsurance()).toBe('standard');
|
|
expect(p.getShipDiscount()).toBe(0);
|
|
expect(p.getModuleDiscount()).toBe(0);
|
|
expect(p.getSizeRatio()).toBe(1);
|
|
});
|
|
|
|
it("loads from localStorage correctly", function() {
|
|
window.localStorage = LOCAL_STORAGE;
|
|
let savedData = require('./fixtures/valid-backup');
|
|
LOCAL_STORAGE.clear();
|
|
LOCAL_STORAGE.setItem('builds', JSON.stringify(savedData.builds));
|
|
LOCAL_STORAGE.setItem('NG_TRANSLATE_LANG_KEY', 'de');
|
|
LOCAL_STORAGE.setItem('insurance', 'Standard');
|
|
LOCAL_STORAGE.setItem('shipDiscount', 0.25);
|
|
LOCAL_STORAGE.setItem('moduleDiscount', 0.15);
|
|
let p = new Persist();
|
|
|
|
expect(p.getInsurance()).toBe('standard');
|
|
expect(p.getShipDiscount()).toBe(0.25);
|
|
expect(p.getModuleDiscount()).toBe(0.15);
|
|
expect(p.getLangCode()).toEqual('de');
|
|
expect(p.getBuilds('anaconda')).toEqual(savedData.builds.anaconda);
|
|
expect(p.getBuilds('python')).toEqual(savedData.builds.python);
|
|
expect(p.getBuildsNamesFor('imperial_clipper')).toEqual(['Cargo', 'Current', 'Dream', 'Multi-purpose']);
|
|
expect(p.getBuild('type_7_transport', 'Cargo')).toEqual('02A5D5A4D3D3D5C--------0505040403480101');
|
|
});
|
|
|
|
it("uses defaults from a corrupted localStorage", function() {
|
|
window.localStorage = LOCAL_STORAGE;
|
|
LOCAL_STORAGE.clear();
|
|
LOCAL_STORAGE.setItem('builds', 'not valid json');
|
|
LOCAL_STORAGE.setItem('comparisons', '1, 3, 4');
|
|
LOCAL_STORAGE.setItem('insurance', 'this insurance does not exist');
|
|
LOCAL_STORAGE.setItem('shipDiscount', 'this is not a number');
|
|
LOCAL_STORAGE.setItem('moduleDiscount', 10); // Way to big
|
|
|
|
let p = new Persist();
|
|
expect(p.getLangCode()).toBe('en');
|
|
expect(p.showTooltips()).toBe(true);
|
|
expect(p.getInsurance()).toBe('standard');
|
|
expect(p.getShipDiscount()).toBe(0);
|
|
expect(p.getModuleDiscount()).toBe(0);
|
|
expect(p.getBuilds()).toEqual({});
|
|
expect(p.getComparisons()).toEqual({});
|
|
});
|
|
|
|
it("works without localStorage", function() {
|
|
window.localStorage = null;
|
|
let p = new Persist();
|
|
expect(p.getLangCode()).toBe('en');
|
|
expect(p.showTooltips()).toBe(true);
|
|
expect(p.getInsurance()).toBe('standard');
|
|
expect(p.getShipDiscount()).toBe(0);
|
|
expect(p.getModuleDiscount()).toBe(0);
|
|
expect(p.getSizeRatio()).toBe(1);
|
|
|
|
p.saveBuild('anaconda', 'test', '12345');
|
|
expect(p.getBuild('anaconda', 'test')).toBe('12345');
|
|
|
|
p.deleteBuild('anaconda', 'test');
|
|
expect(p.hasBuilds()).toBe(false);
|
|
});
|
|
|
|
it("generates the backup", function() {
|
|
window.localStorage = LOCAL_STORAGE;
|
|
let savedData = require('./fixtures/valid-backup');
|
|
LOCAL_STORAGE.clear();
|
|
LOCAL_STORAGE.setItem('builds', JSON.stringify(savedData.builds));
|
|
LOCAL_STORAGE.setItem('insurance', 'Beta');
|
|
LOCAL_STORAGE.setItem('shipDiscount', 0.25);
|
|
LOCAL_STORAGE.setItem('moduleDiscount', 0.15);
|
|
|
|
let p = new Persist();
|
|
let backup = p.getAll();
|
|
|
|
expect(backup.insurance).toBe('beta');
|
|
expect(backup.shipDiscount).toBe(0.25);
|
|
expect(backup.moduleDiscount).toBe(0.15);
|
|
expect(backup.builds).toEqual(savedData.builds);
|
|
expect(backup.comparisons).toEqual({});
|
|
});
|
|
});
|
|
});
|