EDSM unit tests.

This commit is contained in:
marley 2023-05-17 10:52:26 -07:00
parent 1d0f22d1f4
commit edd9ef88a6
5 changed files with 191 additions and 103 deletions

View file

@ -0,0 +1,7 @@
<component name="ProjectDictionaryState">
<dictionary name="marley">
<words>
<w>edsm</w>
</words>
</dictionary>
</component>

View file

@ -1,6 +1,12 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="ExceptionCaughtLocallyJS" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="JSIgnoredPromiseFromCall" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
<inspection_tool class="SpellCheckingInspection" enabled="true" level="TYPO" enabled_by_default="true">
<option name="processCode" value="false" />
<option name="processLiterals" value="true" />
<option name="processComments" value="true" />
</inspection_tool>
</profile>
</component>

View file

@ -1,9 +1,9 @@
import type { systemEstimatedValue } from '../@types/edsmResponses';
import type {systemEstimatedValue} from '../@types/edsmResponses';
const EventEmitter = require('node:events');
import { Log } from './Log';
import { System } from './System';
import {Log} from './Log';
import {System} from './System';
export class EDSM extends EventEmitter {
static #instance: EDSM;
@ -23,8 +23,11 @@ export class EDSM extends EventEmitter {
/* ---------------------------------------------------------------------------- #request ---- */
// Submit a request to EDSM and return the response as an object
static async #request(url: string, options: {[x: string]: string}): Promise<object|undefined> {
let data: object|undefined = undefined;
static async #request(
url: string,
options: { [x: string]: string },
): Promise<object | undefined> {
let data: object | undefined = undefined;
try {
const response = await fetch(url + '?' + new URLSearchParams(options));
@ -43,9 +46,11 @@ export class EDSM extends EventEmitter {
/* ---------------------------------------------------------------------- getSystemValue ---- */
static async getSystemValue(system: System): Promise<systemEstimatedValue|undefined> {
static async getSystemValue(system: System): Promise<systemEstimatedValue | undefined> {
const url = 'https://www.edsm.net/api-system-v1/estimated-value';
const response = await EDSM.#request(url, {systemName: system.name});
return (response as systemEstimatedValue);
return (
response as systemEstimatedValue
);
}
}

View file

@ -1,9 +1,9 @@
import type { completeFsdJump, location, navRouteSystem } from '../@types/journalLines';
import type {completeFsdJump, location, navRouteSystem} from '../@types/journalLines';
import * as _ from 'lodash-es';
import { Body } from './Body';
import { EDSM } from './EDSM';
import {Body} from './Body';
import {EDSM} from './EDSM';
export class System {
name: string;
@ -12,14 +12,12 @@ export class System {
charted: boolean;
bodies: Body[];
// ESDM data
// EDSM data
estimatedValue?: number;
estimatedValueMapped?: number;
valuableBodies?: Body[];
constructor(line?: navRouteSystem|completeFsdJump|location) {
// In future, this is where we preform EDSM lookup
constructor(line?: navRouteSystem | completeFsdJump | location) {
if (!line) {
this.name = 'Unknown';
} else {

72
test/EDSM.test.ts Normal file
View file

@ -0,0 +1,72 @@
import {expect, jest} from '@jest/globals';
import {EDSM} from '../src/models/EDSM';
import {System} from '../src/models/System';
describe('EDSM', () => {
describe('connect()', () => {
it('should create new instance', () => {
expect(EDSM.connect()).toBeInstanceOf(EDSM);
});
it('should get previously created instance', () => {
const edsm = EDSM.connect();
expect(EDSM.connect()).toBeInstanceOf(EDSM);
});
});
describe('getSystemValue()', () => {
const mockFetch = (data?: {[i: string]: any}, ok: boolean = true) => {
global.fetch = jest.fn(() =>
Promise.resolve({
ok: ok,
json: () => Promise.resolve(data),
} as Response),
);
};
it('should get system info', async () => {
const system = new System({ "StarSystem":"LHS 3447", "SystemAddress":0, "StarPos":[0,0,0], "StarClass":"M" });
const data = {
"id": 13153,
"id64": 5306465653474,
"name": "LHS 3447",
"url": "https://www.edsm.net/en/system/bodies/id/13153/name/LHS+3447",
"estimatedValue": 353968,
"estimatedValueMapped": 1164029,
"valuableBodies": [
{
"bodyId": 3195879,
"bodyName": "LHS 3447 A 5",
"distance": 92282,
"valueMax": 879114
}
]
};
mockFetch(data);
const result = await EDSM.getSystemValue(system);
expect(result).toEqual(data);
});
it('should not get system info if system name is invalid', async () => {
const system = new System();
const data = {};
mockFetch({});
const result = await EDSM.getSystemValue(system);
expect(result).toEqual(data);
});
it('should return undefined if response is not ok', async () => {
const system = new System();
mockFetch({}, false);
const result = await EDSM.getSystemValue(system);
expect(result).toBeUndefined();
});
afterEach(() => {
jest.restoreAllMocks();
});
});
});