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 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 = { let rel = {
entityA: entA, entityA: entA,
roleA: rolA, roleA: rolA,
entityB: entB, entityB: entB,
roleB: rolB,
cardinality: card cardinality: card
}; };

View File

@@ -100,7 +100,7 @@ const adjustEntities = function(svgNode, graph) {
}; };
const getEdgeName = function(rel) { 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 statement
: entityName relationship entityName ':' role ',' role : entityName relationship entityName ':' role
{ {
yy.addEntity($1); yy.addEntity($1);
yy.addEntity($3); yy.addEntity($3);
yy.addRelationship($1, $5, $3, $7, $2); yy.addRelationship($1, $5, $3, $2);
/*console.log($1 + $2 + $3 + ':' + $5 + ',' + $7);*/ /*console.log($1 + $2 + $3 + ':' + $5);*/
}; };
entityName entityName

View File

@@ -15,7 +15,7 @@ describe('when parsing ER diagram it...', function() {
}); });
it('should associate two entities correctly', 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 entities = erDb.getEntities();
const relationships = erDb.getRelationships(); const relationships = erDb.getRelationships();
const carEntity = entities.CAR; const carEntity = entities.CAR;
@@ -28,33 +28,31 @@ describe('when parsing ER diagram it...', function() {
}); });
it('should not create duplicate entities', function() { it('should not create duplicate entities', function() {
const line1 = 'CAR !-?< DRIVER : "insured for", "can drive"'; const line1 = 'CAR !-?< DRIVER : "insured for"';
const line2 = 'DRIVER !-! LICENSE : has, "belongs to"'; const line2 = 'DRIVER !-! LICENSE : has';
erDiagram.parser.parse(`erDiagram\n${line1}\n${line2}`); erDiagram.parser.parse(`erDiagram\n${line1}\n${line2}`);
const entities = erDb.getEntities(); const entities = erDb.getEntities();
expect(Object.keys(entities).length).toBe(3); 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 teacherRole = 'is teacher of';
const studentRole = 'is student of'; const line1 = `TEACHER >?-?< STUDENT : "${teacherRole}"`;
const line1 = `TEACHER >?-?< STUDENT : "${teacherRole}", "${studentRole}"`;
erDiagram.parser.parse(`erDiagram\n${line1}`); erDiagram.parser.parse(`erDiagram\n${line1}`);
const rels = erDb.getRelationships(); const rels = erDb.getRelationships();
expect(rels[0].roleA).toBe(`${teacherRole}`); expect(rels[0].roleA).toBe(`${teacherRole}`);
expect(rels[0].roleB).toBe(`${studentRole}`);
}); });
it('should allow recursive relationships', function() { 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); expect(Object.keys(erDb.getEntities()).length).toBe(1);
}); });
it('should allow more than one relationship between the same two entities', function() { it('should allow more than one relationship between the same two entities', function() {
const line1 = 'CAR !-?< PERSON : "insured for", "may drive"'; const line1 = 'CAR !-?< PERSON : "insured for"';
const line2 = 'CAR >?-! PERSON : "owned by", "owns"'; const line2 = 'CAR >?-! PERSON : "owned by"';
erDiagram.parser.parse(`erDiagram\n${line1}\n${line2}`); erDiagram.parser.parse(`erDiagram\n${line1}\n${line2}`);
const entities = erDb.getEntities(); const entities = erDb.getEntities();
const rels = erDb.getRelationships(); const rels = erDb.getRelationships();
@@ -67,12 +65,12 @@ describe('when parsing ER diagram it...', function() {
/* TODO */ /* 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 */ /* TODO */
}); });
it('should handle only-one-to-one-or-more relationships', function() { 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(); const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2); 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() { 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(); const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2); 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() { 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(); const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2); 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() { 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(); const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2); 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() { 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(); const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2); 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() { 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(); const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2); 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() { 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(); const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2); 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() { 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(); const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2); 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() { 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(); const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2); 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() { 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(); const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2); 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() { 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(); const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2); 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() { 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(); const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2); 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() { 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(); const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2); 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() { 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(); const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2); 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() { 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(); const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2); 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() { 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(); const rels = erDb.getRelationships();
expect(Object.keys(erDb.getEntities()).length).toBe(2); 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() { it('should not accept a syntax error', function() {
const doc = 'erDiagram\nA xxx B : has, has'; const doc = 'erDiagram\nA xxx B : has';
expect(() => { expect(() => {
erDiagram.parser.parse(doc); erDiagram.parser.parse(doc);
}).toThrowError(); }).toThrowError();