From 406879cb09d29c912fd0902d9e07d0160954d3de Mon Sep 17 00:00:00 2001
From: Simon Rozsival
Date: Sun, 29 Oct 2017 11:58:32 +0100
Subject: [PATCH 1/3] :construction: Fix initial values of simple limits form
---
.../EditSimpleLimits/EditSimpleLimits.js | 42 +++++++++++++------
1 file changed, 30 insertions(+), 12 deletions(-)
diff --git a/src/components/forms/EditSimpleLimits/EditSimpleLimits.js b/src/components/forms/EditSimpleLimits/EditSimpleLimits.js
index c5b50bd3c..29d79c59d 100644
--- a/src/components/forms/EditSimpleLimits/EditSimpleLimits.js
+++ b/src/components/forms/EditSimpleLimits/EditSimpleLimits.js
@@ -9,6 +9,15 @@ import styles from './styles.less';
const formName = id => `editEnvironmentSimpleLimits-${id}`;
+const fillInDefaultValuesWhereMissing = (testNames, limits) =>
+ testNames.reduce(
+ (acc, test) => ({
+ ...acc,
+ [test]: limits[test] || { memory: 0, 'wall-time': 0 }
+ }),
+ {}
+ );
+
const EditSimpleLimits = ({
environments = [],
editLimits,
@@ -32,18 +41,27 @@ const EditSimpleLimits = ({
{description}
- {limits =>
- forEnv.name === id)}
- initialValues={{ limits }}
- form={formName(id)}
- onSubmit={editLimits(id)}
- setHorizontally={setHorizontally(formName(id), id)}
- setVertically={setVertically(formName(id), id)}
- setAll={setAll(formName(id), id)}
- />}
+ {limits => {
+ const envConfig = config.find(forEnv => forEnv.name === id);
+ return (
+ test.name),
+ limits
+ )
+ }}
+ form={formName(id)}
+ onSubmit={editLimits(id)}
+ setHorizontally={setHorizontally(formName(id), id)}
+ setVertically={setVertically(formName(id), id)}
+ setAll={setAll(formName(id), id)}
+ />
+ );
+ }}
From 6678ae592d94c129cceb98bdf1e3def5d4fb4a70 Mon Sep 17 00:00:00 2001
From: Simon Rozsival
Date: Sun, 29 Oct 2017 11:58:57 +0100
Subject: [PATCH 2/3] :bug: Fix reducer
---
src/redux/modules/simpleLimits.js | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/src/redux/modules/simpleLimits.js b/src/redux/modules/simpleLimits.js
index 5b4836562..7e88ddea8 100644
--- a/src/redux/modules/simpleLimits.js
+++ b/src/redux/modules/simpleLimits.js
@@ -57,21 +57,25 @@ const getSimpleLimitsOf = (
testName
) =>
form[formName].values.limits[testName] ||
- form[formName].values.limits[testName] ||
+ form[formName].values.initial[testName] ||
{};
-const isSimpleLimitsForm = ({ values }, testName) =>
- values.limits &&
- Object.keys(values).length === 1 &&
- values.limits[testName] &&
- values.limits[testName].hasOwnProperty('wall-time') &
- values.limits[testName].hasOwnProperty('memory');
+const isSimpleLimitsForm = ({ registeredFields }, testName) =>
+ registeredFields &&
+ registeredFields.hasOwnProperty(`limits.${testName}.wall-time`) &&
+ registeredFields.hasOwnProperty(`limits.${testName}.memory`);
const getAllSimpleLimitsFormNames = ({ form }, testName) =>
Object.keys(form).filter(name => isSimpleLimitsForm(form[name], testName));
const getAllTestNames = ({ form }, formName) =>
- Object.keys(form[formName].values.limits);
+ Object.keys(form[formName].registeredFields)
+ .map(name => {
+ const firstDot = name.indexOf('.');
+ const lastDot = name.lastIndexOf('.');
+ return name.substring(firstDot + 1, lastDot);
+ })
+ .reduce((acc, name) => (acc.indexOf(name) >= 0 ? acc : [...acc, name]), []);
const field = testName => `limits.${testName}`;
From 2d99e11d6ca2d57be170673333d51ffc02a8bbe8 Mon Sep 17 00:00:00 2001
From: Simon Rozsival
Date: Sun, 29 Oct 2017 17:38:00 +0100
Subject: [PATCH 3/3] :white_check_mark: Adapt tests
---
test/redux/simpleLimits.js | 42 +++++++++++++++++++++++++++++++-------
1 file changed, 35 insertions(+), 7 deletions(-)
diff --git a/test/redux/simpleLimits.js b/test/redux/simpleLimits.js
index 052d5aaed..a6b46752f 100644
--- a/test/redux/simpleLimits.js
+++ b/test/redux/simpleLimits.js
@@ -15,22 +15,46 @@ const exerciseId = random();
const runtimeEnvironmentId = random();
const testA = random();
const testB = random();
+const registeredFields = {
+ [`limits.${testA}.memory`]: {
+ name: `limits.${testA}.memory`,
+ type: 'Field',
+ count: 1
+ },
+ [`limits.${testA}.wall-time`]: {
+ name: `limits.${testA}.wall-time`,
+ type: 'Field',
+ count: 1
+ },
+ [`limits.${testB}.memory`]: {
+ name: `limits.${testB}.memory`,
+ type: 'Field',
+ count: 1
+ },
+ [`limits.${testB}.wall-time`]: {
+ name: `limits.${testB}.wall-time`,
+ type: 'Field',
+ count: 1
+ }
+};
const initialState = {
form: {
[formA]: {
+ registeredFields,
values: {
limits: {
- [testA]: { memory: 1, 'wall-time': 2, parallel: 3 },
- [testB]: { memory: 4, 'wall-time': 5, parallel: 6 }
+ [testA]: { memory: 1, 'wall-time': 2 },
+ [testB]: { memory: 4, 'wall-time': 5 }
}
}
},
[formB]: {
+ registeredFields,
values: {
limits: {
- [testA]: { memory: 7, 'wall-time': 8, parallel: 9 },
- [testB]: { memory: 10, 'wall-time': 11, parallel: 12 }
+ [testA]: { memory: 7, 'wall-time': 8 },
+ [testB]: { memory: 10, 'wall-time': 11 }
}
}
}
@@ -42,7 +66,7 @@ const getTestStore = () =>
describe('simpleLimits', () => {
describe('reducer', () => {
- it('must copy values horizontally across the same test', () => {
+ it('must copy values horizontally across the same tests', () => {
const { dispatch, getState } = getTestStore();
setHorizontally(formA, exerciseId, runtimeEnvironmentId, testA)(
@@ -54,6 +78,7 @@ describe('simpleLimits', () => {
form: {
[formA]: initialState.form[formA],
[formB]: {
+ registeredFields,
values: {
limits: {
[testA]: initialState.form[formA].values.limits[testA],
@@ -65,7 +90,7 @@ describe('simpleLimits', () => {
});
});
- it('must copy values vertically across the runtime environment', () => {
+ it('must copy values vertically across the runtime environments', () => {
const { dispatch, getState } = getTestStore();
setVertically(formA, exerciseId, runtimeEnvironmentId, testA)(
@@ -76,6 +101,7 @@ describe('simpleLimits', () => {
expect(getState()).to.eql({
form: {
[formA]: {
+ registeredFields,
values: {
limits: {
[testA]: initialState.form[formA].values.limits[testA],
@@ -88,7 +114,7 @@ describe('simpleLimits', () => {
});
});
- it('must copy values vertucally across the runtime environment', () => {
+ it('must copy values in all directions across the runtime environments', () => {
const { dispatch, getState } = getTestStore();
setAll(formA, exerciseId, runtimeEnvironmentId, testA)(
@@ -99,6 +125,7 @@ describe('simpleLimits', () => {
expect(getState()).to.eql({
form: {
[formA]: {
+ registeredFields,
values: {
limits: {
[testA]: initialState.form[formA].values.limits[testA],
@@ -107,6 +134,7 @@ describe('simpleLimits', () => {
}
},
[formB]: {
+ registeredFields,
values: {
limits: {
[testA]: initialState.form[formA].values.limits[testA],