Skip to content

Commit

Permalink
Merge pull request #90 from Inist-CNRS/value_function
Browse files Browse the repository at this point in the history
[RFR] Value function
  • Loading branch information
ThieryMichel authored Feb 21, 2017
2 parents ae8c368 + 5073ed5 commit 9b3f48c
Show file tree
Hide file tree
Showing 7 changed files with 124 additions and 13 deletions.
98 changes: 88 additions & 10 deletions src/app/e2e/admin/publication.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ describe('Admin', () => {
await driver.findElement(By.css('#field_form .add-transformer')).click();

await driver.findElement(By.css('.operation')).click();
await driver.wait(until.elementLocated(By.css('.AUTOGENERATE_URI')));
await driver.findElement(By.css('.AUTOGENERATE_URI')).click();
await driver.wait(until.elementLocated(By.css('.transformer_AUTOGENERATE_URI')));
await driver.findElement(By.css('.transformer_AUTOGENERATE_URI')).click();
});

it('should have completed uri column with generated uri', async () => {
Expand Down Expand Up @@ -111,19 +111,19 @@ describe('Admin', () => {
const operationButton = await driver.findElement(By.css('.operation'));
await driver.wait(elementIsClicked(operationButton), DEFAULT_WAIT_TIMEOUT);

await driver.wait(until.elementLocated(By.css('.LINK')), DEFAULT_WAIT_TIMEOUT);
const linkButton = await driver.findElement(By.css('.LINK'));
await driver.wait(until.elementLocated(By.css('.transformer_LINK')), DEFAULT_WAIT_TIMEOUT);
const linkButton = await driver.findElement(By.css('.transformer_LINK'));
await driver.wait(elementIsClicked(linkButton), DEFAULT_WAIT_TIMEOUT);

await driver.findElement(By.css('#field_form .reference input'));
await driver.findElement(By.css('#field_form .transformer_arg_reference input'));
});

it('should configure transformer Link', async () => {
const reference = await driver.findElement(By.css('#field_form .reference input'));
const reference = await driver.findElement(By.css('#field_form .transformer_arg_reference input'));
await driver.wait(inputElementIsFocusable(reference), DEFAULT_WAIT_TIMEOUT);
reference.sendKeys('stronger_than');

const identifier = await driver.findElement(By.css('#field_form .identifier input'));
const identifier = await driver.findElement(By.css('#field_form .transformer_arg_identifier input'));
await driver.wait(inputElementIsFocusable(identifier), DEFAULT_WAIT_TIMEOUT);
identifier.sendKeys('id');
const backButton = await driver.findElement(By.css('.btn-exit-column-edition'));
Expand Down Expand Up @@ -171,6 +171,79 @@ describe('Admin', () => {
});
});

describe('adding VALUE column', () => {
it('should display form for newField4 column when clicking on btn-add-column', async () => {
await driver.executeScript('document.getElementsByClassName("add-column")[0].scrollIntoView(true);');
await driver.sleep(1000);
const button = await driver.findElement(By.css('.add-column'));
await driver.wait(elementIsClicked(button), DEFAULT_WAIT_TIMEOUT);

await driver.wait(until.elementLocated(By.css('#field_form')), DEFAULT_WAIT_TIMEOUT);
const name = await driver.findElement(By.css('#field_form input[name=name]'));
const label = await driver.findElement(By.css('#field_form input[name=label]'));

await driver.wait(elementValueIs(name, 'newField4'), DEFAULT_WAIT_TIMEOUT);
await driver.wait(elementValueIs(label, 'newField 4'), DEFAULT_WAIT_TIMEOUT);
});

it('should change column name', async () => {
const name = await driver.findElement(By.css('#field_form input[name=name]'));
await driver.wait(inputElementIsFocusable(name), DEFAULT_WAIT_TIMEOUT);

const label = await driver.findElement(By.css('#field_form input[name=label]'));
await driver.wait(inputElementIsFocusable(label), DEFAULT_WAIT_TIMEOUT);

await name.clear();
await name.sendKeys('custom');
await label.clear();
await label.sendKeys('Custom');
const th = await driver.findElement(By.css('.publication-preview th'));
await driver.wait(until.elementTextIs(th, 'Custom'), DEFAULT_WAIT_TIMEOUT);
});

it('should add a transformer VALUE', async () => {
const addTransformerButton = await driver.findElement(By.css('#field_form .add-transformer'));
await driver.wait(elementIsClicked(addTransformerButton), DEFAULT_WAIT_TIMEOUT);

const operationButton = await driver.findElement(By.css('.operation'));
await driver.wait(elementIsClicked(operationButton), DEFAULT_WAIT_TIMEOUT);

await driver.wait(until.elementLocated(By.css('.transformer_VALUE')), DEFAULT_WAIT_TIMEOUT);
const transformerButton = await driver.findElement(By.css('.transformer_VALUE'));
await driver.wait(elementIsClicked(transformerButton), DEFAULT_WAIT_TIMEOUT);

await driver.findElement(By.css('#field_form .transformer_arg_value input'));
});

it('should configure transformer VALUE', async () => {
const reference = await driver.findElement(By.css('#field_form .transformer_arg_value input'));
await driver.wait(inputElementIsFocusable(reference), DEFAULT_WAIT_TIMEOUT);
reference.sendKeys('a custom value');

const backButton = await driver.findElement(By.css('.btn-exit-column-edition'));
await driver.wait(elementIsClicked(backButton), DEFAULT_WAIT_TIMEOUT);
});

it('should have added custom column with value', async () => {
await driver.wait(
until.elementLocated(By.css('.publication-preview tr td:nth-child(4)')),
DEFAULT_WAIT_TIMEOUT,
);
const tds = await driver.findElements(By.css('.publication-preview tr td:nth-child(4)'));
expect(tds.length).toBe(4);

const expectedTexts = [
'a custom value',
'a custom value',
'a custom value',
'a custom value',
];
await Promise.all(tds.map((td, index) =>
driver.wait(until.elementTextIs(td, expectedTexts[index]), DEFAULT_WAIT_TIMEOUT)),
);
});
});

describe('Publishing', () => {
it('should display the "data published" message after publication', async () => {
const buttonPublish = await driver.findElement(By.css('.btn-publish'));
Expand All @@ -193,7 +266,7 @@ describe('Admin', () => {
await driver.wait(until.elementLocated(By.css('.dataset')), DEFAULT_WAIT_TIMEOUT);
const headers = await driver.findElements(By.css('.dataset table th'));
const headersText = await Promise.all(headers.map(h => h.getText()));
expect(headersText).toEqual(['uri', 'stronger', 'name']);
expect(headersText).toEqual(['uri', 'stronger', 'name', 'custom']);

const rows = await Promise.all([1, 2, 3, 4].map(index =>
Promise.all([
Expand All @@ -206,11 +279,15 @@ describe('Admin', () => {
driver
.findElement(By.css(`.dataset table tbody tr:nth-child(${index}) td.dataset-name`))
.getText(),
driver
.findElement(By.css(`.dataset table tbody tr:nth-child(${index}) td.dataset-custom`))
.getText(),
])
.then(([uri, stronger, name]) => ({
.then(([uri, stronger, name, custom]) => ({
uri,
stronger,
name,
custom,
}))));

const expected = {
Expand All @@ -220,8 +297,9 @@ describe('Admin', () => {
invalid_reference: '',
};

rows.forEach(({ stronger, name }) => {
rows.forEach(({ stronger, name, custom }) => {
expect((rows.find(r => r.uri === stronger) || { name: '' }).name).toEqual(expected[name]);
expect(custom).toEqual('a custom value');
});
});
});
Expand Down
2 changes: 1 addition & 1 deletion src/app/js/admin/fields/TransformerArgListItem.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import FormTextField from '../../lib/FormTextField';

const TransformerArgListItem = ({ fieldName, transformerArg }) => (
<Field
className={transformerArg.name}
className={`transformer_arg_${transformerArg.name}`}
name={`${fieldName}.value`}
type="text"
component={FormTextField}
Expand Down
2 changes: 1 addition & 1 deletion src/app/js/admin/fields/TransformerListItem.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ const TransformerListItem = ({ availableTransformers, fieldName, onRemove, p: po
label={polyglot.t('select_an_operation')}
>
{availableTransformers.map(
t => <MenuItem key={t.name} className={t.name} value={t.name} primaryText={t.name} />,
t => <MenuItem key={t.name} className={`transformer_${t.name}`} value={t.name} primaryText={t.name} />,
)}
</Field>
<FieldArray name={`${fieldName}.args`} component={TransformerArgList} />
Expand Down
2 changes: 1 addition & 1 deletion src/common/transformers/COLUMN.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ const transformation = (_, args) => {
const sourceField = args.find(a => a.name === 'column');

if (!sourceField) {
throw new Error('Innvalid Argument for COLUMN transformation');
throw new Error('Invalid Argument for COLUMN transformation');
}

return doc => new Promise((resolve, reject) => {
Expand Down
21 changes: 21 additions & 0 deletions src/common/transformers/VALUE.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
const transformation = (_, args) => () => new Promise((resolve, reject) => {
const valueArg = args.find(a => a.name === 'value');

if (!valueArg || !valueArg.value) {
reject(new Error('Invalid Argument for VALUE transformation'));
return;
}

resolve(valueArg.value);
});


transformation.getMetas = () => ({
name: 'VALUE',
args: [{
name: 'value',
type: 'string',
}],
});

export default transformation;
9 changes: 9 additions & 0 deletions src/common/transformers/VALUE.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import expect from 'expect';

import VALUE from './VALUE';

describe('VALUE', () => {
it('should return value from args', async () => {
expect(await VALUE(null, [{ name: 'value', value: 'a custom value' }])({})).toEqual('a custom value');
});
});
3 changes: 3 additions & 0 deletions src/common/transformers/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@ import AUTOGENERATE_URI from './AUTOGENERATE_URI';
import COLUMN from './COLUMN';
import UPPERCASE from './UPPERCASE';
import LINK from './LINK';
import VALUE from './VALUE';

const transformers = {
AUTOGENERATE_URI,
COLUMN,
UPPERCASE,
LINK,
VALUE,
};

export default transformers;
Expand All @@ -17,6 +19,7 @@ const transformersMetas = [
COLUMN,
LINK,
UPPERCASE,
VALUE,
].map(transformation => transformation.getMetas());

export const getTransformersMetas = () => transformersMetas;
Expand Down

0 comments on commit 9b3f48c

Please sign in to comment.