Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions elisa/eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
import config from '@labkey/eslint-config';
export default config;
28 changes: 28 additions & 0 deletions elisa/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
module.exports = {
globals: {
LABKEY: {
contextPath: ''
}
},
moduleFileExtensions: [
'tsx',
'ts',
'js'
],
preset: 'ts-jest',
setupFilesAfterEnv: [
'<rootDir>/test/js/setup.ts'
],
testEnvironment: 'jsdom',
testMatch: null,
testRegex: '(\\.(test))\\.(ts|tsx)$',
testResultsProcessor: 'jest-teamcity-reporter',
transform: {
'^.+\\.tsx?$': [
'ts-jest',
{
tsconfig: 'node_modules/@labkey/build/webpack/tsconfig.test.json',
}
]
}
};
15,020 changes: 7,114 additions & 7,906 deletions elisa/package-lock.json

Large diffs are not rendered by default.

49 changes: 9 additions & 40 deletions elisa/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,49 +12,18 @@
"clean": "rimraf resources/web/elisa/gen && rimraf resources/web/gen",
"test": "cross-env NODE_ENV=test jest --silent"
},
"jest": {
"globals": {
"LABKEY": {}
},
"moduleFileExtensions": [
"tsx",
"ts",
"js"
],
"preset": "ts-jest",
"setupFilesAfterEnv": [
"<rootDir>/test/js/setup.ts"
],
"testEnvironment": "jsdom",
"testMatch": null,
"testRegex": "(\\.(test|spec))\\.(ts|tsx)$",
"testResultsProcessor": "jest-teamcity-reporter",
"transform": {
"^.+\\.tsx?$": [
"ts-jest",
{
"isolatedModules": true,
"tsconfig": "node_modules/@labkey/build/webpack/tsconfig.json"
}
]
}
},
"dependencies": {
"@labkey/components": "4.2.0"
"@labkey/components": "6.56.0"
},
"devDependencies": {
"@labkey/build": "7.4.0",
"@labkey/eslint-config-react": "0.0.15",
"@types/enzyme": "3.10.18",
"@types/jest": "29.5.12",
"@types/react": "16.14.60",
"enzyme": "3.11.0",
"enzyme-adapter-react-16": "1.15.8",
"enzyme-to-json": "3.6.2",
"jest": "29.7.0",
"jest-environment-jsdom": "29.7.0",
"@labkey/build": "8.6.0",
"@labkey/eslint-config": "1.0.1",
"@types/jest": "30.0.0",
"@types/react": "18.3.23",
"@types/react-dom": "18.3.7",
"jest": "30.0.4",
"jest-environment-jsdom": "30.0.4",
"jest-teamcity-reporter": "0.9.0",
"react-test-renderer": "16.14.0",
"ts-jest": "29.2.3"
"ts-jest": "29.4.0"
}
}
83 changes: 0 additions & 83 deletions elisa/src/client/RunDetails/RunDetails.spec.tsx

This file was deleted.

67 changes: 67 additions & 0 deletions elisa/src/client/RunDetails/RunDetails.test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import React from 'react';
import { render, waitFor } from '@testing-library/react';

import { RunDetailsImpl } from './RunDetails';
import { TEST_PLOT_DATA } from './utils.test';
import { REQUIRED_COLUMN_NAMES } from './constants';

class MockClass {
render() {
}
}

LABKEY.vis = {
Geom: {
Path: MockClass,
Point: MockClass,
},
Layer: MockClass,
Plot: MockClass,
};

describe('RunDetailsImpl', () => {
test('check initial display', async () => {
render(
<RunDetailsImpl
columnInfo={REQUIRED_COLUMN_NAMES.reduce((columnInfo, name) => {
columnInfo[name] = {};
return columnInfo;
}, {})}
data={TEST_PLOT_DATA}
getCurveFitXYPairs={jest.fn().mockResolvedValue({})}
measures={[]}
protocolId={1}
runId={2}
runPropertiesRow={undefined}
/>
);
await waitFor(() => {
expect(document.querySelectorAll('.run-details-left')).toHaveLength(1);
});

expect(document.querySelectorAll('.data-selections-panel')).toHaveLength(1);
expect(document.querySelectorAll('.plot-options-panel')).toHaveLength(1);
expect(document.querySelectorAll('.curve-fit-panel')).toHaveLength(1);
expect(document.querySelectorAll('.run-details-right')).toHaveLength(1);
expect(document.querySelectorAll('.calibration-curve-panel')).toHaveLength(1);
expect(document.querySelectorAll('.alert')).toHaveLength(0);
});

test('missing field keys', async () => {
render(
<RunDetailsImpl
columnInfo={{}}
data={TEST_PLOT_DATA}
measures={[]}
protocolId={1}
runId={2}
runPropertiesRow={undefined}
/>
);
await waitFor(() => {
expect(document.querySelectorAll('.alert')).toHaveLength(1);
});

expect(document.querySelector('.alert')).toHaveTextContent(REQUIRED_COLUMN_NAMES.join(', '));
});
});
9 changes: 7 additions & 2 deletions elisa/src/client/RunDetails/RunDetails.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import {
parsePlotDataFromResponse,
shouldReloadCurveFitData
} from "./utils";
import { getCurveFitXYPairs } from "./actions";
import { GetCurveFitXYPairs, getCurveFitXYPairs } from './actions';
import { CalibrationCurvePanel } from "./components/CalibrationCurvePanel";
import { DataSelectionsPanel } from "./components/DataSelectionsPanel";
import { PlotOptionsPanel } from "./components/PlotOptionsPanel";
Expand Down Expand Up @@ -138,6 +138,7 @@ export class RunDetails extends PureComponent<Props, State> {
interface ImplProps extends CommonRunProps {
data: any[],
columnInfo: {[key: string]: any},
getCurveFitXYPairs?: GetCurveFitXYPairs;
measures: string[]
}

Expand All @@ -153,6 +154,10 @@ interface ImplState {

// exported just for jest testing
export class RunDetailsImpl extends PureComponent<ImplProps, ImplState> {
static defaultProps = {
getCurveFitXYPairs: getCurveFitXYPairs,
};

constructor(props: ImplProps) {
super(props);

Expand Down Expand Up @@ -188,7 +193,7 @@ export class RunDetailsImpl extends PureComponent<ImplProps, ImplState> {
const { plotOptions } = this.state;
const filteredData = filterDataByPlotOptions(data, [], [], plotOptions, false);

getCurveFitXYPairs(protocolId, runId, plotOptions.plateName, plotOptions.spot, filteredData)
this.props.getCurveFitXYPairs(protocolId, runId, plotOptions.plateName, plotOptions.spot, filteredData)
.then(curveFitData => {
this.setState(() => ({ curveFitData }));
})
Expand Down
10 changes: 9 additions & 1 deletion elisa/src/client/RunDetails/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,15 @@ import { CurveFitData } from "./models";
import { getMaxFromData, getMinFromData } from "./utils";
import { DEFAULT_X_AXIS_PROP } from "./constants";

export function getCurveFitXYPairs(protocolId: number, runId: number, plateName: string, spot: number, data: any[]): Promise<CurveFitData> {
export type GetCurveFitXYPairs = (
protocolId: number,
runId: number,
plateName: string,
spot: number,
data: any[]
) => Promise<CurveFitData>;

export const getCurveFitXYPairs: GetCurveFitXYPairs = (protocolId, runId, plateName, spot, data) => {
return new Promise((resolve, reject) => {
const xMin = getMinFromData(data, DEFAULT_X_AXIS_PROP);
let xMax = getMaxFromData(data, DEFAULT_X_AXIS_PROP);
Expand Down
4 changes: 2 additions & 2 deletions elisa/src/client/RunDetails/app.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import React from 'react';
import ReactDOM from 'react-dom';
import { createRoot } from 'react-dom/client';
import { App } from '@labkey/api';

import { AppContext, RunDetails } from './RunDetails';

import './RunDetails.scss';

App.registerApp<AppContext>('elisaRunDetails', (target: string, ctx: AppContext) => {
ReactDOM.render(<RunDetails context={ctx} />, document.getElementById(target));
createRoot(document.getElementById(target)).render(<RunDetails context={ctx} />);
});

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import React from 'react';
import { render } from '@testing-library/react';
import { CalibrationCurvePanel } from './CalibrationCurvePanel';
import { getDefaultPlotOptions } from '../utils';

describe('CalibrationCurvePanel', () => {
test('default props', () => {
render(
<CalibrationCurvePanel
columnInfo={{}}
curveFitData={undefined}
data={[]}
plotOptions={getDefaultPlotOptions([], [])}
protocolId={1}
runId={2}
runPropertiesRow={{}}
/>
);

expect(document.querySelectorAll('.calibration-curve-panel')).toHaveLength(1);
expect(document.querySelectorAll('.plot-panel-display')).toHaveLength(1);
expect(document.querySelectorAll('.plot-button-bar')).toHaveLength(1);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ export class CalibrationCurvePanel extends PureComponent<Props, State> {

render() {
return (
<div className="panel panel-default">
<div className="panel panel-default calibration-curve-panel">
<div className="panel-heading">
Calibration Curve
</div>
Expand Down
Loading