Remove roleB - only roleA is labelled

This commit is contained in:
Adrian Hall 2020-03-17 10:16:19 +00:00
parent 4f50e36e5b
commit a3b97f7c24
4 changed files with 38 additions and 34 deletions

View File

@ -35,12 +35,18 @@ const addEntity = function(name) {
const getEntities = () => entities;
const addRelationship = function(entA, rolA, entB, rolB, card) {
/**
* Add a relationship
* @param entA The first entity in the relationship
* @param rolA The role played by the first entity in relation to the second
* @param entB The second entity in the relationship
* @param card The cardinality of the relationship between the two entities
*/
const addRelationship = function(entA, rolA, entB, card) {
let rel = {
entityA: entA,
roleA: rolA,
entityB: entB,
roleB: rolB,
cardinality: card
};

View File

@ -100,7 +100,7 @@ const adjustEntities = function(svgNode, graph) {
};
const getEdgeName = function(rel) {
return (rel.entityA + rel.roleA + rel.roleB + rel.entityB).replace(/\s/g, '');
return (rel.entityA + rel.roleA + rel.entityB).replace(/\s/g, '');
};
/**

View File

@ -46,12 +46,12 @@ document
;
statement
: entityName relationship entityName ':' role ',' role
: entityName relationship entityName ':' role
{
yy.addEntity($1);
yy.addEntity($3);
yy.addRelationship($1, $5, $3, $7, $2);
/*console.log($1 + $2 + $3 + ':' + $5 + ',' + $7);*/
yy.addRelationship($1, $5, $3, $2);
/*console.log($1 + $2 + $3 + ':' + $5);*/
};
entityName

View File

@ -15,7 +15,7 @@ describe('when parsing ER diagram it...', function() {
});
it('should associate two entities correctly', function() {
erDiagram.parser.parse('erDiagram\nCAR !-?< DRIVER : "insured for", "can drive"');
erDiagram.parser.parse('erDiagram\nCAR !-?< DRIVER : "insured for"');
const entities = erDb.getEntities();
const relationships = erDb.getRelationships();
const carEntity = entities.CAR;
@ -28,33 +28,31 @@ describe('when parsing ER diagram it...', function() {
});
it('should not create duplicate entities', function() {
const line1 = 'CAR !-?< DRIVER : "insured for", "can drive"';
const line2 = 'DRIVER !-! LICENSE : has, "belongs to"';
const line1 = 'CAR !-?< DRIVER : "insured for"';
const line2 = 'DRIVER !-! LICENSE : has';
erDiagram.parser.parse(`erDiagram\n${line1}\n${line2}`);
const entities = erDb.getEntities();
expect(Object.keys(entities).length).toBe(3);
});
it('should create the roles specified', function() {
it('should create the role specified', function() {
const teacherRole = 'is teacher of';
const studentRole = 'is student of';
const line1 = `TEACHER >?-?< STUDENT : "${teacherRole}", "${studentRole}"`;
const line1 = `TEACHER >?-?< STUDENT : "${teacherRole}"`;
erDiagram.parser.parse(`erDiagram\n${line1}`);
const rels = erDb.getRelationships();
expect(rels[0].roleA).toBe(`${teacherRole}`);
expect(rels[0].roleB).toBe(`${studentRole}`);
});
it('should allow recursive relationships', function() {
erDiagram.parser.parse('erDiagram\nNODE !-?< NODE : "leads to", "comes from"');
erDiagram.parser.parse('erDiagram\nNODE !-?< NODE : "leads to"');
expect(Object.keys(erDb.getEntities()).length).toBe(1);
});
it('should allow more than one relationship between the same two entities', function() {
const line1 = 'CAR !-?< PERSON : "insured for", "may drive"';
const line2 = 'CAR >?-! PERSON : "owned by", "owns"';
const line1 = 'CAR !-?< PERSON : "insured for"';
const line2 = 'CAR >?-! PERSON : "owned by"';
erDiagram.parser.parse(`erDiagram\n${line1}\n${line2}`);
const entities = erDb.getEntities();
const rels = erDb.getRelationships();
@ -67,12 +65,12 @@ describe('when parsing ER diagram it...', function() {
/* TODO */
});
it ('should not allow relationships between the same two entities unless the roles are different', function() {
it ('should not allow multiple relationships between the same two entities unless the roles are different', function() {
/* TODO */
});
it('should handle only-one-to-one-or-more relationships', function() {
erDiagram.parser.parse('erDiagram\nA !-!< B : has, has');
erDiagram.parser.parse('erDiagram\nA !-!< B : has');
const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2);
@ -81,7 +79,7 @@ describe('when parsing ER diagram it...', function() {
});
it('should handle only-one-to-zero-or-more relationships', function() {
erDiagram.parser.parse('erDiagram\nA !-?< B : has, has');
erDiagram.parser.parse('erDiagram\nA !-?< B : has');
const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2);
@ -91,7 +89,7 @@ describe('when parsing ER diagram it...', function() {
});
it('should handle zero-or-one-to-zero-or-more relationships', function() {
erDiagram.parser.parse('erDiagram\nA ?-?< B : has, has');
erDiagram.parser.parse('erDiagram\nA ?-?< B : has');
const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2);
@ -100,7 +98,7 @@ describe('when parsing ER diagram it...', function() {
});
it('should handle zero-or-one-to-one-or-more relationships', function() {
erDiagram.parser.parse('erDiagram\nA ?-!< B : has, has');
erDiagram.parser.parse('erDiagram\nA ?-!< B : has');
const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2);
@ -109,7 +107,7 @@ describe('when parsing ER diagram it...', function() {
});
it('should handle one-or-more-to-only-one relationships', function() {
erDiagram.parser.parse('erDiagram\nA >!-! B : has, has');
erDiagram.parser.parse('erDiagram\nA >!-! B : has');
const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2);
@ -118,7 +116,7 @@ describe('when parsing ER diagram it...', function() {
});
it('should handle zero-or-more-to-only-one relationships', function() {
erDiagram.parser.parse('erDiagram\nA >?-! B : has, has');
erDiagram.parser.parse('erDiagram\nA >?-! B : has');
const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2);
@ -127,7 +125,7 @@ describe('when parsing ER diagram it...', function() {
});
it('should handle zero-or-more-to-zero-or-one relationships', function() {
erDiagram.parser.parse('erDiagram\nA >?-? B : has, has');
erDiagram.parser.parse('erDiagram\nA >?-? B : has');
const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2);
@ -136,7 +134,7 @@ describe('when parsing ER diagram it...', function() {
});
it('should handle one-or-more-to-zero-or-one relationships', function() {
erDiagram.parser.parse('erDiagram\nA >!-? B : has, has');
erDiagram.parser.parse('erDiagram\nA >!-? B : has');
const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2);
@ -145,7 +143,7 @@ describe('when parsing ER diagram it...', function() {
});
it('should handle zero-or-one-to-only-one relationships', function() {
erDiagram.parser.parse('erDiagram\nA ?-! B : has, has');
erDiagram.parser.parse('erDiagram\nA ?-! B : has');
const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2);
@ -154,7 +152,7 @@ describe('when parsing ER diagram it...', function() {
});
it('should handle only-one-to-only-one relationships', function() {
erDiagram.parser.parse('erDiagram\nA !-! B : has, has');
erDiagram.parser.parse('erDiagram\nA !-! B : has');
const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2);
@ -163,7 +161,7 @@ describe('when parsing ER diagram it...', function() {
});
it('should handle only-one-to-zero-or-one relationships', function() {
erDiagram.parser.parse('erDiagram\nA !-? B : has, has');
erDiagram.parser.parse('erDiagram\nA !-? B : has');
const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2);
@ -172,7 +170,7 @@ describe('when parsing ER diagram it...', function() {
});
it('should handle zero-or-one-to-zero-or-one relationships', function() {
erDiagram.parser.parse('erDiagram\nA ?-? B : has, has');
erDiagram.parser.parse('erDiagram\nA ?-? B : has');
const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2);
@ -181,7 +179,7 @@ describe('when parsing ER diagram it...', function() {
});
it('should handle zero-or-more-to-zero-or-more relationships', function() {
erDiagram.parser.parse('erDiagram\nA >?-?< B : has, has');
erDiagram.parser.parse('erDiagram\nA >?-?< B : has');
const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2);
@ -190,7 +188,7 @@ describe('when parsing ER diagram it...', function() {
});
it('should handle one-or-more-to-one-or-more relationships', function() {
erDiagram.parser.parse('erDiagram\nA >!-!< B : has, has');
erDiagram.parser.parse('erDiagram\nA >!-!< B : has');
const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2);
@ -199,7 +197,7 @@ describe('when parsing ER diagram it...', function() {
});
it('should handle zero-or-more-to-one-or-more relationships', function() {
erDiagram.parser.parse('erDiagram\nA >?-!< B : has, has');
erDiagram.parser.parse('erDiagram\nA >?-!< B : has');
const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2);
@ -208,7 +206,7 @@ describe('when parsing ER diagram it...', function() {
});
it('should handle one-or-more-to-zero-or-more relationships', function() {
erDiagram.parser.parse('erDiagram\nA >!-?< B : has, has');
erDiagram.parser.parse('erDiagram\nA >!-?< B : has');
const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2);
@ -217,7 +215,7 @@ describe('when parsing ER diagram it...', function() {
});
it('should not accept a syntax error', function() {
const doc = 'erDiagram\nA xxx B : has, has';
const doc = 'erDiagram\nA xxx B : has';
expect(() => {
erDiagram.parser.parse(doc);
}).toThrowError();