jhipster-rasha-core
Version:
JHipster's own domain language and core objects
162 lines (159 loc) • 6.34 kB
JavaScript
;
const expect = require('chai').expect,
fs = require('fs'),
fail = expect.fail,
Exporter = require('../../../lib/export/json_exporter'),
JDLParser = require('../../../lib/parser/jdl_parser'),
EntityParser = require('../../../lib/parser/entity_parser'),
parseFromFiles = require('../../../lib/reader/jdl_reader').parseFromFiles;
describe('::exportToJSON', () => {
describe('when passing invalid parameters', () => {
describe('such as undefined', () => {
it('throws an error', () => {
try {
Exporter.exportToJSON();
fail();
} catch (error) {
expect(error.name).to.eq('NullPointerException');
}
});
});
});
describe('when passing valid arguments', () => {
describe('when exporting JDL to entity json for SQL type', () => {
const input = parseFromFiles(['./test/test_files/complex_jdl.jdl']);
const content = EntityParser.parse({
jdlObject: JDLParser.parse(input, 'sql'),
databaseType: 'sql'
});
Exporter.exportToJSON(content);
const department = JSON.parse(fs.readFileSync('.jhipster/Department.json', {encoding: 'utf-8'}));
const jobHistory = JSON.parse(fs.readFileSync('.jhipster/JobHistory.json', {encoding: 'utf-8'}));
it('exports it', () => {
expect(fs.statSync('.jhipster/Department.json').isFile()).to.be.true;
expect(fs.statSync('.jhipster/JobHistory.json').isFile()).to.be.true;
expect(fs.statSync('.jhipster/Job.json').isFile()).to.be.true;
expect(fs.statSync('.jhipster/Employee.json').isFile()).to.be.true;
expect(fs.statSync('.jhipster/Location.json').isFile()).to.be.true;
expect(fs.statSync('.jhipster/Task.json').isFile()).to.be.true;
expect(fs.statSync('.jhipster/Country.json').isFile()).to.be.true;
expect(fs.statSync('.jhipster/Region.json').isFile()).to.be.true;
expect(department.relationships).to.deep.eq([
{
"relationshipType": "one-to-one",
"relationshipName": "location",
"otherEntityName": "location",
"otherEntityField": "id",
"ownerSide": true,
"otherEntityRelationshipName": "department"
},
{
"relationshipType": "one-to-many",
"javadoc": "A relationship",
"relationshipName": "employee",
"otherEntityName": "employee",
"otherEntityRelationshipName": "department"
}
]);
expect(department.fields).to.deep.eq([
{
"fieldName": "departmentId",
"fieldType": "Long"
},
{
"fieldName": "departmentName",
"fieldType": "String",
"fieldValidateRules": ["required"]
}
]);
expect(department.dto).to.eq('no');
expect(department.service).to.eq('no');
expect(department.pagination).to.eq('no');
expect(jobHistory.relationships).to.deep.eq([
{
"relationshipType": "one-to-one",
"relationshipName": "department",
"otherEntityName": "department",
"otherEntityField": "id",
"ownerSide": true,
"otherEntityRelationshipName": "jobHistory"
},
{
"relationshipType": "one-to-one",
"relationshipName": "job",
"otherEntityName": "job",
"otherEntityField": "id",
"ownerSide": true,
"otherEntityRelationshipName": "jobHistory"
},
{
"relationshipType": "one-to-one",
"relationshipName": "employee",
"otherEntityName": "employee",
"otherEntityField": "id",
"ownerSide": true,
"otherEntityRelationshipName": "jobHistory"
}
]);
expect(jobHistory.fields).to.deep.eq([
{
"fieldName": "startDate",
"fieldType": "ZonedDateTime"
},
{
"fieldName": "endDate",
"fieldType": "ZonedDateTime"
},
{
"fieldName": "language",
"fieldType": "Language",
"fieldValues": "FRENCH,ENGLISH,SPANISH"
}
]);
expect(jobHistory.dto).to.eq('no');
expect(jobHistory.service).to.eq('no');
expect(jobHistory.pagination).to.eq('infinite-scroll');
// clean up the mess...
fs.unlinkSync('.jhipster/Department.json');
fs.unlinkSync('.jhipster/JobHistory.json');
fs.unlinkSync('.jhipster/Job.json');
fs.unlinkSync('.jhipster/Employee.json');
fs.unlinkSync('.jhipster/Location.json');
fs.unlinkSync('.jhipster/Task.json');
fs.unlinkSync('.jhipster/Country.json');
fs.unlinkSync('.jhipster/Region.json');
fs.rmdirSync('.jhipster');
});
});
describe('when exporting JDL to entity json for an existing entity', () => {
let input = parseFromFiles(['./test/test_files/valid_jdl.jdl']);
let content = EntityParser.parse({
jdlObject: JDLParser.parse(input, 'sql'),
databaseType: 'sql'
});
it('exports it with same changeLogDate', function (done) {
Exporter.exportToJSON(content);
expect(fs.statSync('.jhipster/A.json').isFile()).to.be.true;
const changeLogDate = JSON.parse(fs.readFileSync('.jhipster/A.json', {encoding: 'utf-8'})).changelogDate;
setTimeout(() => {
input = parseFromFiles(['./test/test_files/valid_jdl.jdl']);
content = EntityParser.parse({
jdlObject: JDLParser.parse(input, 'sql'),
databaseType: 'sql'
});
Exporter.exportToJSON(content, true);
expect(fs.statSync('.jhipster/A.json').isFile()).to.be.true;
const newChangeLogDate = JSON.parse(fs.readFileSync('.jhipster/A.json', {encoding: 'utf-8'})).changelogDate;
expect(newChangeLogDate).to.eq(changeLogDate);
// clean up the mess...
fs.unlinkSync('.jhipster/A.json');
fs.unlinkSync('.jhipster/B.json');
fs.unlinkSync('.jhipster/C.json');
fs.unlinkSync('.jhipster/D.json');
fs.rmdirSync('.jhipster');
done();
}, 1000);
});
});
});
});