Skip to content

Commit 7bd632d

Browse files
author
cons
committed
issue84-bulkAssociation merge
2 parents 75a62dd + 4d928f8 commit 7bd632d

20 files changed

+709
-42
lines changed

funks.js

+1
Original file line numberDiff line numberDiff line change
@@ -669,6 +669,7 @@ module.exports.parseAssociations = function(dataModel){
669669
assoc["target_cp"] = capitalizeString(association.target) ;//inflection.capitalize(association.target);
670670
assoc["target_cp_pl"] = capitalizeString(inflection.pluralize(association.target));//inflection.capitalize(inflection.pluralize(association.target));
671671
assoc["targetKey"] = association.targetKey;
672+
assoc["targetKey_cp"] = capitalizeString(association.targetKey);
672673
if(association.keyIn){
673674
assoc["keyIn_lc"] = uncapitalizeString(association.keyIn);
674675
}

test/mocha_integration_test.js

+128
Original file line numberDiff line numberDiff line change
@@ -2869,3 +2869,131 @@ describe(
28692869
});
28702870

28712871
});
2872+
2873+
describe('bulkAssociation', function() {
2874+
// set up the environment
2875+
before(async function(){
2876+
//measurements for sql and zendro-server tests
2877+
let res = itHelpers.request_graph_ql_post('mutation{addMeasurement(measurement_id:"m1" ){measurement_id}}');
2878+
expect(res.statusCode).to.equal(200);
2879+
res = itHelpers.request_graph_ql_post('mutation{addMeasurement(measurement_id:"m2" ){measurement_id}}');
2880+
expect(res.statusCode).to.equal(200);
2881+
res = itHelpers.request_graph_ql_post('mutation{addMeasurement(measurement_id:"m3" ){measurement_id}}');
2882+
expect(res.statusCode).to.equal(200);
2883+
res = itHelpers.request_graph_ql_post('mutation{addMeasurement(measurement_id:"m4" ){measurement_id}}');
2884+
expect(res.statusCode).to.equal(200);
2885+
res = itHelpers.request_graph_ql_post('mutation{addAccession(accession_id:"a1" ){accession_id}}');
2886+
expect(res.statusCode).to.equal(200);
2887+
res = itHelpers.request_graph_ql_post('mutation{addAccession(accession_id:"a2" ){accession_id}}');
2888+
expect(res.statusCode).to.equal(200);
2889+
//dogs for distributed tests
2890+
res = itHelpers.request_graph_ql_post('mutation {addDog(dog_id: "instance1-d01") {dog_id}}');
2891+
expect(res.statusCode).to.equal(200);
2892+
res = itHelpers.request_graph_ql_post('mutation {addDog(dog_id: "instance1-d02") {dog_id}}');
2893+
expect(res.statusCode).to.equal(200);
2894+
res = itHelpers.request_graph_ql_post('mutation {addDog(dog_id: "instance2-d01") {dog_id}}');
2895+
expect(res.statusCode).to.equal(200);
2896+
res = itHelpers.request_graph_ql_post('mutation {addDog(dog_id: "instance2-d02") {dog_id}}');
2897+
expect(res.statusCode).to.equal(200);
2898+
res = itHelpers.request_graph_ql_post('mutation {addPerson(person_id: "instance1-p01") {person_id}}');
2899+
expect(res.statusCode).to.equal(200);
2900+
res = itHelpers.request_graph_ql_post('mutation {addPerson(person_id: "instance2-p01") {person_id}}');
2901+
expect(res.statusCode).to.equal(200);
2902+
});
2903+
2904+
//clean up records
2905+
after(async function() {
2906+
itHelpers.request_graph_ql_post('mutation{deleteMeasurement(measurement_id:"m1")}');
2907+
itHelpers.request_graph_ql_post('mutation{deleteMeasurement(measurement_id:"m2")}');
2908+
itHelpers.request_graph_ql_post('mutation{deleteMeasurement(measurement_id:"m3")}');
2909+
itHelpers.request_graph_ql_post('mutation{deleteMeasurement(measurement_id:"m4")}');
2910+
itHelpers.request_graph_ql_post('mutation{deleteAccession(accession_id:"a1")}');
2911+
itHelpers.request_graph_ql_post('mutation{deleteAccession(accession_id:"a2")}');
2912+
itHelpers.request_graph_ql_post('mutation {deleteDog(dog_id: "instance1-d01")}');
2913+
itHelpers.request_graph_ql_post('mutation {deleteDog(dog_id: "instance1-d02")}');
2914+
itHelpers.request_graph_ql_post('mutation {deleteDog(dog_id: "instance2-d01")}');
2915+
itHelpers.request_graph_ql_post('mutation {deleteDog(dog_id: "instance2-d02")}');
2916+
itHelpers.request_graph_ql_post('mutation {deletePerson(person_id: "instance1-p01")}');
2917+
itHelpers.request_graph_ql_post('mutation {deletePerson(person_id: "instance2-p01")}');
2918+
});
2919+
2920+
it('01. bulkAssociation - sql', function() {
2921+
let res = itHelpers.request_graph_ql_post('mutation{bulkAssociateMeasurementWithAccessionId(bulkAssociationInput: [{measurement_id:"m1", accessionId: "a1"},{measurement_id:"m2", accessionId: "a1"},{measurement_id:"m3", accessionId: "a2"},{measurement_id:"m4", accessionId: "a2"}] )}');
2922+
expect(res.statusCode).to.equal(200);
2923+
let resBody = JSON.parse(res.body.toString('utf8'));
2924+
expect(resBody.data.bulkAssociateMeasurementWithAccessionId).equal("Records successfully updated!");
2925+
//check if records have been correctly updated
2926+
res = itHelpers.request_graph_ql_post('{accessions{accession_id measurementsFilter{measurement_id}}}')
2927+
resBody = JSON.parse(res.body.toString('utf8'));
2928+
expect(resBody).to.deep.equal({
2929+
"data":{"accessions":[{"accession_id":"a1","measurementsFilter":[{"measurement_id":"m1"},{"measurement_id":"m2"}]},{"accession_id":"a2","measurementsFilter":[{"measurement_id":"m3"},{"measurement_id":"m4"}]}]}
2930+
});
2931+
});
2932+
2933+
it('02. bulkDisAssociation - sql', function() {
2934+
let res = itHelpers.request_graph_ql_post('mutation{bulkDisAssociateMeasurementWithAccessionId(bulkAssociationInput: [{measurement_id:"m1", accessionId: "a1"},{measurement_id:"m2", accessionId: "a1"},{measurement_id:"m3", accessionId: "a2"},{measurement_id:"m4", accessionId: "a2"}] )}');
2935+
expect(res.statusCode).to.equal(200);
2936+
let resBody = JSON.parse(res.body.toString('utf8'));
2937+
expect(resBody.data.bulkDisAssociateMeasurementWithAccessionId).equal("Records successfully updated!");
2938+
//check if records have been correctly updated
2939+
res = itHelpers.request_graph_ql_post('{accessions{accession_id measurementsFilter{measurement_id}}}')
2940+
resBody = JSON.parse(res.body.toString('utf8'));
2941+
expect(resBody).to.deep.equal({
2942+
"data":{"accessions":[{"accession_id":"a1","measurementsFilter":[]},{"accession_id":"a2","measurementsFilter":[]}]}
2943+
});
2944+
});
2945+
2946+
it('03. bulkAssociation - zendro-server', function() {
2947+
let res = itHelpers.request_graph_ql_post_instance2('mutation{bulkAssociateMeasurementWithAccessionId(bulkAssociationInput: [{measurement_id:"m1", accessionId: "a1"},{measurement_id:"m2", accessionId: "a1"},{measurement_id:"m3", accessionId: "a2"},{measurement_id:"m4", accessionId: "a2"}] )}');
2948+
expect(res.statusCode).to.equal(200);
2949+
let resBody = JSON.parse(res.body.toString('utf8'));
2950+
expect(resBody.data.bulkAssociateMeasurementWithAccessionId).equal("Records successfully updated!");
2951+
//check if records have been correctly updated
2952+
res = itHelpers.request_graph_ql_post('{accessions{accession_id measurementsFilter{measurement_id}}}')
2953+
resBody = JSON.parse(res.body.toString('utf8'));
2954+
expect(resBody).to.deep.equal({
2955+
"data":{"accessions":[{"accession_id":"a1","measurementsFilter":[{"measurement_id":"m1"},{"measurement_id":"m2"}]},{"accession_id":"a2","measurementsFilter":[{"measurement_id":"m3"},{"measurement_id":"m4"}]}]}
2956+
});
2957+
});
2958+
2959+
it('04. bulkDisAssociation - zendro-server', function() {
2960+
let res = itHelpers.request_graph_ql_post_instance2('mutation{bulkDisAssociateMeasurementWithAccessionId(bulkAssociationInput: [{measurement_id:"m1", accessionId: "a1"},{measurement_id:"m2", accessionId: "a1"},{measurement_id:"m3", accessionId: "a2"},{measurement_id:"m4", accessionId: "a2"}] )}');
2961+
expect(res.statusCode).to.equal(200);
2962+
let resBody = JSON.parse(res.body.toString('utf8'));
2963+
expect(resBody.data.bulkDisAssociateMeasurementWithAccessionId).equal("Records successfully updated!");
2964+
//check if records have been correctly updated
2965+
res = itHelpers.request_graph_ql_post('{accessions{accession_id measurementsFilter{measurement_id}}}')
2966+
resBody = JSON.parse(res.body.toString('utf8'));
2967+
expect(resBody).to.deep.equal({
2968+
"data":{"accessions":[{"accession_id":"a1","measurementsFilter":[]},{"accession_id":"a2","measurementsFilter":[]}]}
2969+
});
2970+
});
2971+
2972+
it('05. bulkAssociation - ddm', function() {
2973+
let res = itHelpers.request_graph_ql_post('mutation{bulkAssociateDogWithPerson_id(bulkAssociationInput: [{dog_id:"instance1-d01", person_id: "instance1-p01"},{dog_id:"instance2-d01", person_id: "instance1-p01"},{dog_id:"instance1-d02", person_id: "instance2-p01"},{dog_id:"instance2-d02", person_id: "instance2-p01"}] )}');
2974+
expect(res.statusCode).to.equal(200);
2975+
let resBody = JSON.parse(res.body.toString('utf8'));
2976+
expect(resBody.data.bulkAssociateDogWithPerson_id).equal("Records successfully updated!");
2977+
//check if records have been correctly updated
2978+
res = itHelpers.request_graph_ql_post('{peopleConnection{edges{node{person_id dogsConnection{edges{node{dog_id}}}}}}}');
2979+
resBody = JSON.parse(res.body.toString('utf8'));
2980+
expect(resBody).to.deep.equal({
2981+
"data":{"peopleConnection":{"edges":[{"node":{"person_id":"instance1-p01","dogsConnection":{"edges":[{"node":{"dog_id":"instance1-d01"}},{"node":{"dog_id":"instance2-d01"}}]}}},{"node":{"person_id":"instance2-p01","dogsConnection":{"edges":[{"node":{"dog_id":"instance1-d02"}},{"node":{"dog_id":"instance2-d02"}}]}}}]}}
2982+
});
2983+
});
2984+
2985+
it('06. bulkDisAssociation - ddm', function() {
2986+
let res = itHelpers.request_graph_ql_post('mutation{bulkDisAssociateDogWithPerson_id(bulkAssociationInput: [{dog_id:"instance1-d01", person_id: "instance1-p01"},{dog_id:"instance2-d01", person_id: "instance1-p01"},{dog_id:"instance1-d02", person_id: "instance2-p01"},{dog_id:"instance2-d02", person_id: "instance2-p01"}] )}');
2987+
expect(res.statusCode).to.equal(200);
2988+
let resBody = JSON.parse(res.body.toString('utf8'));
2989+
expect(resBody.data.bulkDisAssociateDogWithPerson_id).equal("Records successfully updated!");
2990+
//check if records have been correctly updated
2991+
res = itHelpers.request_graph_ql_post('{peopleConnection{edges{node{person_id dogsConnection{edges{node{dog_id}}}}}}}');
2992+
resBody = JSON.parse(res.body.toString('utf8'));
2993+
expect(resBody).to.deep.equal({
2994+
"data":{"peopleConnection":{"edges":[{"node":{"person_id":"instance1-p01","dogsConnection":{"edges":[]}}},{"node":{"person_id":"instance2-p01","dogsConnection":{"edges":[]}}}]}}
2995+
});
2996+
});
2997+
2998+
2999+
});

test/mocha_unit_test.js

+90-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const expect = require('chai').expect;
2+
const assert = require('chai').assert;
23
//const test = require('./unit_test_misc/data_test');
34
const models = require('./unit_test_misc/data_models');
45
const funks = require('../funks');
@@ -8,9 +9,20 @@ const models_distributed = require('./unit_test_misc/data_models_distributed');
89
const models_refactoring = require('./unit_test_misc/data_models_refactoring');
910
const models_generic = require('./unit_test_misc/data_models_generic');
1011
const requireFromString = require('require-from-string');
11-
12+
const helpers = require('./unit_test_misc/helpers/reporting_helpers')
1213
//const components_code = require('./unit_test_misc/components_code');
1314

15+
const testCompare = function(actual, expected, errorMessage = 'Generated output differs from expected') {
16+
let act = actual.replace(/\s/g, '');
17+
let exp = expected.replace(/\s/g, '');
18+
try {
19+
expect(act, errorMessage).to.have.string(exp);
20+
} catch (e) {
21+
report = helpers.diffByLine(actual, expected);
22+
assert.fail(errorMessage + ':\n' + report);
23+
}
24+
}
25+
1426
describe('Lower-case models', function(){
1527

1628
let data_test = require('./unit_test_misc/test-describe/lower-case-models');
@@ -1323,6 +1335,7 @@ describe('Parse associations', function() {
13231335
"type": "to_one",
13241336
"target": "individual",
13251337
"targetKey": "individual_id",
1338+
"targetKey_cp": "Individual_id",
13261339
"keyIn": "transcript_count",
13271340
"targetStorageType": "sql",
13281341
"name": "individual",
@@ -1380,6 +1393,7 @@ describe('Parse associations', function() {
13801393
"target": "transcript_count",
13811394
"keyIn": "transcript_count",
13821395
"targetKey": "individual_id",
1396+
"targetKey_cp": "Individual_id",
13831397
"targetStorageType": "sql",
13841398
"name": "transcript_counts",
13851399
"name_lc": "transcript_counts",
@@ -1438,6 +1452,7 @@ describe('Parse associations', function() {
14381452
"type": "to_many_through_sql_cross_table",
14391453
"target": "Project",
14401454
"targetKey": "projectId",
1455+
"targetKey_cp": "ProjectId",
14411456
"sourceKey": "researcherId",
14421457
"keysIn": "project_to_researcher",
14431458
"targetStorageType": "sql",
@@ -1507,6 +1522,7 @@ describe('Parse associations', function() {
15071522
"type": "to_many",
15081523
"target": "Dog",
15091524
"targetKey": "personId",
1525+
"targetKey_cp": "PersonId",
15101526
"keyIn": "Dog",
15111527
"targetStorageType": "sql",
15121528
"name": "dogs",
@@ -1526,6 +1542,7 @@ describe('Parse associations', function() {
15261542
"type": "to_many_through_sql_cross_table",
15271543
"target": "Book",
15281544
"targetKey": "bookId",
1545+
"targetKey_cp": "BookId",
15291546
"sourceKey": "personId",
15301547
"keysIn": "books_to_people",
15311548
"targetStorageType": "sql",
@@ -1593,6 +1610,7 @@ describe('Parse associations', function() {
15931610
"type": "to_one",
15941611
"target": "Person",
15951612
"targetKey": "personId",
1613+
"targetKey_cp": "PersonId",
15961614
"keyIn": "Dog",
15971615
"targetStorageType": "sql",
15981616
"label": "firstName",
@@ -1612,6 +1630,7 @@ describe('Parse associations', function() {
16121630
"type": "to_one",
16131631
"target": "Researcher",
16141632
"targetKey": "researcherId",
1633+
"targetKey_cp": "ResearcherId",
16151634
"keyIn": "Dog",
16161635
"targetStorageType": "sql",
16171636
"label": "firstName",
@@ -2394,3 +2413,73 @@ describe('Handle Errors in DDM', function(){
23942413
});
23952414

23962415
});
2416+
2417+
describe('bulkAssociation', function(){
2418+
let data_test = require('./unit_test_misc/test-describe/bulkAssociation');
2419+
it('schema mutations - book', async function(){
2420+
let opts = funks.getOptions(models.book_extendedIds);
2421+
let generated_schema = await funks.generateJs('create-schemas', opts);
2422+
testCompare(generated_schema, data_test.bulkAssociation_schema_mutation);
2423+
});
2424+
2425+
it('schema inputType - book', async function(){
2426+
let opts = funks.getOptions(models.book_extendedIds);
2427+
let generated_schema = await funks.generateJs('create-schemas', opts);
2428+
testCompare(generated_schema, data_test.bulkAssociation_schema_inputType);
2429+
});
2430+
2431+
it('bulkAssociate resolver - book', async function(){
2432+
let opts = funks.getOptions(models.book_extendedIds);
2433+
let generated_resolver = await funks.generateJs('create-resolvers', opts);
2434+
testCompare(generated_resolver, data_test.bulkAssociation_resolver_add);
2435+
});
2436+
2437+
it('bulkDisAssociate resolver - book', async function(){
2438+
let opts = funks.getOptions(models.book_extendedIds);
2439+
let generated_resolver = await funks.generateJs('create-resolvers', opts);
2440+
testCompare(generated_resolver, data_test.bulkAssociation_resolver_remove);
2441+
});
2442+
2443+
it('bulkAssociate model sql - book', async function(){
2444+
let opts = funks.getOptions(models.book_extendedIds);
2445+
let generated_model = await funks.generateJs('create-models', opts);
2446+
testCompare(generated_model, data_test.bulkAssociation_model_sql_add);
2447+
});
2448+
2449+
it('bulkDisAssociate model sql - book', async function(){
2450+
let opts = funks.getOptions(models.book_extendedIds);
2451+
let generated_model = await funks.generateJs('create-models', opts);
2452+
testCompare(generated_model, data_test.bulkAssociation_model_sql_remove);
2453+
});
2454+
2455+
it('bulkAssociate model zendro/ddm-adapter - dog', async function(){
2456+
let opts = funks.getOptions(models_zendro.dog_one_assoc);
2457+
let generated_model = await funks.generateJs('create-models-zendro', opts);
2458+
testCompare(generated_model, data_test.bulkAssociation_model_zendro_ddm_adapter_add);
2459+
});
2460+
2461+
it('bulkDisAssociate model zendro/ddm-adapter - dog', async function(){
2462+
let opts = funks.getOptions(models_zendro.dog_one_assoc);
2463+
let generated_model = await funks.generateJs('create-models-zendro', opts);
2464+
testCompare(generated_model, data_test.bulkAssociation_model_zendro_ddm_adapter_remove);
2465+
});
2466+
2467+
it('bulkAssociate model ddm - dog', async function(){
2468+
let opts = funks.getOptions(models_distributed.dog_ddm);
2469+
let generated_model = await funks.generateJs('create-distributed-model', opts);
2470+
testCompare(generated_model, data_test.bulkAssociation_model_ddm_add);
2471+
});
2472+
2473+
it('bulkDisAssociate model ddm - dog', async function(){
2474+
let opts = funks.getOptions(models_distributed.dog_ddm);
2475+
let generated_model = await funks.generateJs('create-distributed-model', opts);
2476+
testCompare(generated_model, data_test.bulkAssociation_model_ddm_remove);
2477+
});
2478+
2479+
it('mapBulkAssociationInputToAdapters model ddm - dog', async function(){
2480+
let opts = funks.getOptions(models_distributed.dog_ddm_integration_test);
2481+
let generated_model = await funks.generateJs('create-distributed-model', opts);
2482+
testCompare(generated_model, data_test.bulkAssociation_mapBulkAssociationInputToAdapters);
2483+
});
2484+
2485+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
require('colors');
2+
var difftool = require('diff');
3+
4+
module.exports = {
5+
diffByLine: function (actual, expected) {
6+
var diff = difftool.diffTrimmedLines(actual, expected);
7+
//var diff = difftool.diffWords(actual, expected);
8+
var report = [];
9+
10+
var lastRemoved = false;
11+
var lastValue = '';
12+
13+
diff.forEach((item, i) => {
14+
if (lastRemoved && item.added) {
15+
if (lastValue.replace(/\s/g, '') != item.value.replace(/\s/g, '')) { //skip whitespace-only differences
16+
report.push('Actual: '+lastValue['red']);
17+
report.push('Expected: '+item.value['grey']);
18+
}
19+
}
20+
else if (!item.added && !item.removed) {
21+
report.push(item.value['green']);
22+
}
23+
24+
lastRemoved = item.removed;
25+
lastValue = item.value;
26+
});
27+
28+
return report.join('');
29+
}
30+
}

test/unit_test_misc/test-describe/all-generic-webservice.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,9 @@ type Query {
120120
121121
122122
deletePerson(id: ID!): String!
123-
bulkAddPersonCsv: String! }
123+
bulkAddPersonCsv: String!
124+
bulkAssociatePersonWithCompanyId(bulkAssociationInput: [bulkAssociationPersonWithCompanyIdInput], skipAssociationsExistenceChecks:Boolean = false): String!
125+
bulkDisAssociatePersonWithCompanyId(bulkAssociationInput: [bulkAssociationPersonWithCompanyIdInput], skipAssociationsExistenceChecks:Boolean = false): String! }
124126
125127
`
126128
module.exports.model_person = `

0 commit comments

Comments
 (0)