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],