[open-ils-commits] [GIT] Evergreen ILS branch rel_2_12 updated. d9834fd852d20b5567cce37be4782db9b3645687
Evergreen Git
git at git.evergreen-ils.org
Tue Mar 20 14:30:07 EDT 2018
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Evergreen ILS".
The branch, rel_2_12 has been updated
via d9834fd852d20b5567cce37be4782db9b3645687 (commit)
via 0c30ba2653f86c2f5e5a852102855d65cde3e55c (commit)
from ec07bcef94bb38e1829b9900606b4c67c32489f0 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit d9834fd852d20b5567cce37be4782db9b3645687
Author: Galen Charlton <gmc at equinoxinitiative.org>
Date: Tue Mar 6 18:00:23 2018 -0500
LP#1721807: fix webstaff report templates that have might_have and has_many joins
This patch fixes a bug where using a virtual field in the web staff
report template editor to join another table would result in a syntax
error in the generated SQL.
To test
-------
[1] Apply the patch and verify that the regression test in the previous
commit passes.
[2] Create new report template in the web staff client that include
virtual fields and joins and verify that they work. One example
would be a report that uses ILS User as the base source and joins
in the patron notes virtual field.
[3] If available, clone a report template originally created in the web
staff client that had previously failed, then save it. The new
report should work.
Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
Signed-off-by: Chris Sharp <csharp at georgialibraries.org>
Signed-off-by: Kathy Lussier <klussier at masslnc.org>
diff --git a/Open-ILS/web/js/ui/default/staff/reporter/template/app.js b/Open-ILS/web/js/ui/default/staff/reporter/template/app.js
index b56a759..c79d3c3 100644
--- a/Open-ILS/web/js/ui/default/staff/reporter/template/app.js
+++ b/Open-ILS/web/js/ui/default/staff/reporter/template/app.js
@@ -119,7 +119,14 @@ function($scope , $q , $routeParams , $location , $timeout , $window, egCore ,
if (i) { // not at the top of the tree
if (i == 1) join_path = join_path.split('-')[0];
- var uplink = p.uplink.name;
+ // SQLBuilder relies on the first dash-separated component
+ // of the join key to specify the column of left-hand relation
+ // to join on; for has_many and might_have link types, we have to grab the
+ // primary key of the left-hand table; otherwise, we can
+ // just use the field/column name found in p.uplink.name.
+ var uplink = (p.uplink.reltype == 'has_many' || p.uplink.reltype == 'might_have') ?
+ egCore.idl.classes[p.from.split('.').slice(-1)[0]].pkey + '-' + p.uplink.name :
+ p.uplink.name;
join_path += '-' + uplink;
alias = hex_md5(join_path);
commit 0c30ba2653f86c2f5e5a852102855d65cde3e55c
Author: Galen Charlton <gmc at equinoxinitiative.org>
Date: Wed Mar 7 14:27:44 2018 -0500
LP#1721807: regression test
This adds an automated regression test as well as some additional
unit tests for the web staff reporter app and template service. This
patch could be applied by itself to verify that the regression
test (run using 'npm run test' for master or 'grunt test' for rel_3_0)
fails.
Signed-off-by: Galen Charlton <gmc at equinoxinitiative.org>
Signed-off-by: Chris Sharp <csharp at georgialibraries.org>
Signed-off-by: Kathy Lussier <klussier at masslnc.org>
diff --git a/Open-ILS/web/js/ui/default/staff/reporter/template/app.js b/Open-ILS/web/js/ui/default/staff/reporter/template/app.js
index 272a0eb..b56a759 100644
--- a/Open-ILS/web/js/ui/default/staff/reporter/template/app.js
+++ b/Open-ILS/web/js/ui/default/staff/reporter/template/app.js
@@ -155,7 +155,9 @@ function($scope , $q , $routeParams , $location , $timeout , $window, egCore ,
});
return tree;
- }
+ };
+ // expose for testing
+ $scope._mergePaths = mergePaths;
$scope.constructTemplate = function () {
var param_counter = 0;
diff --git a/Open-ILS/web/js/ui/default/staff/test/karma.conf.js b/Open-ILS/web/js/ui/default/staff/test/karma.conf.js
index 8c7b650..9199e1e 100644
--- a/Open-ILS/web/js/ui/default/staff/test/karma.conf.js
+++ b/Open-ILS/web/js/ui/default/staff/test/karma.conf.js
@@ -50,6 +50,7 @@ module.exports = function(config){
'app.js',
'circ/**/*.js',
'cat/**/*.js',
+ 'reporter/**/*.js',
'admin/**/*.js',
'test/unit/egIDL.js', // order matters for some of these
'test/unit/egOrg.js',
diff --git a/Open-ILS/web/js/ui/default/staff/test/unit/egReporter.js b/Open-ILS/web/js/ui/default/staff/test/unit/egReporter.js
new file mode 100644
index 0000000..743483e
--- /dev/null
+++ b/Open-ILS/web/js/ui/default/staff/test/unit/egReporter.js
@@ -0,0 +1,185 @@
+'use strict';
+
+describe('egReporterTest', function() {
+ beforeEach(module('egCoreMod'));
+ beforeEach(module('egReportMod'));
+ beforeEach(module('egReporter'));
+
+ var reportEditCtrl, reportEditScope;
+ beforeEach(inject(function ($rootScope, $controller, $location, egIDL) {
+ egIDL.parseIDL();
+ reportEditScope = $rootScope.$new();
+ reportEditCtrl = $controller('ReporterTemplateEdit', {$scope: reportEditScope});
+ }));
+
+ /** egReportTemplateSvc tests **/
+ describe('egReportTemplateSvcTests', function() {
+
+ it('egReportTemplateSvc should start with empty lists', inject(function(egReportTemplateSvc) {
+ expect(egReportTemplateSvc.display_fields.length).toEqual(0);
+ expect(egReportTemplateSvc.filter_fields.length).toEqual(0);
+ }));
+
+ });
+
+ // test template
+ var display_fields = [{
+ "name": "family_name",
+ "label": "Last Name",
+ "datatype": "text",
+ "index": 0,
+ "path": [
+ {
+ "label": "ILS User",
+ "id": "au",
+ "jtype": "inner",
+ "classname": "au",
+ "struct": {
+ "name": "au",
+ "label": "ILS User",
+ "table": "actor.usr",
+ "core": true,
+ "pkey": "id",
+ "pkey_sequence": "actor.usr_id_seq",
+ "core_label": "Core sources",
+ "classname": "au"
+ },
+ "table": "actor.usr"
+ }
+ ],
+ "path_label": "ILS User",
+ "transform": {
+ "transform": "Bare",
+ "label": "Raw Data",
+ "aggregate": false
+ },
+ "doc_text": ""
+ }, {
+ "name": "first_given_name",
+ "label": "First Name",
+ "datatype": "text",
+ "index": 1,
+ "path": [
+ {
+ "label": "ILS User",
+ "id": "au",
+ "jtype": "inner",
+ "classname": "au",
+ "struct": {
+ "name": "au",
+ "label": "ILS User",
+ "table": "actor.usr",
+ "core": true,
+ "pkey": "id",
+ "pkey_sequence": "actor.usr_id_seq",
+ "core_label": "Core sources",
+ "classname": "au"
+ },
+ "table": "actor.usr"
+ }
+ ],
+ "path_label": "ILS User",
+ "transform": {
+ "transform": "Bare",
+ "label": "Raw Data",
+ "aggregate": false
+ },
+ "doc_text": ""
+ }, {
+ "name": "value",
+ "label": "Note Content",
+ "datatype": "text",
+ "index": 2,
+ "path": [
+ {
+ "label": "ILS User",
+ "id": "au",
+ "jtype": "inner",
+ "classname": "au",
+ "struct": {
+ "name": "au",
+ "label": "ILS User",
+ "table": "actor.usr",
+ "core": true,
+ "pkey": "id",
+ "pkey_sequence": "actor.usr_id_seq",
+ "core_label": "Core sources",
+ "classname": "au"
+ },
+ "table": "actor.usr"
+ },
+ {
+ "label": "User Notes",
+ "from": "au",
+ "link": {
+ "name": "notes",
+ "label": "User Notes",
+ "virtual": true,
+ "type": "link",
+ "key": "usr",
+ "class": "aun",
+ "reltype": "has_many",
+ "datatype": "link"
+ },
+ "id": "au.aun",
+ "jtype": "left",
+ "uplink": {
+ "name": "notes",
+ "label": "User Notes",
+ "virtual": true,
+ "type": "link",
+ "key": "usr",
+ "class": "aun",
+ "reltype": "has_many",
+ "datatype": "link"
+ },
+ "classname": "aun",
+ "struct": {
+ "name": "aun",
+ "label": "User Note",
+ "table": "actor.usr_note",
+ "pkey": "id",
+ "pkey_sequence": "actor.usr_note_id_seq",
+ "core_label": "Non-core sources",
+ "classname": "aun"
+ },
+ "table": "actor.usr_note"
+ }
+ ],
+ "path_label": "ILS User -> User Notes (left)",
+ "transform": {
+ "transform": "Bare",
+ "label": "Raw Data",
+ "aggregate": false
+ },
+ "doc_text": ""
+ }];
+
+ describe('egReporterTemplateEditTests', function() {
+ it('initialize and set core source for ReporterTemplateEdit', inject(function(egIDL, egCore) {
+ egIDL.parseIDL();
+
+ // initialize
+ expect(reportEditScope.class_tree.length).toEqual(0);
+ expect(reportEditScope.coreSourceChosen).toEqual(false);
+
+ // set core source
+ reportEditScope.changeCoreSource('au');
+ expect(reportEditScope.coreSourceChosen).toEqual(true);
+ expect(reportEditScope.class_tree.length).toEqual(1);
+
+ }));
+
+ it('LP#1721807: construct join key correctly when using virtual field', function() {
+ var tmpl = reportEditScope._mergePaths(display_fields);
+ expect(tmpl).toBeDefined();
+ expect(Object.keys(tmpl)).toContain('join');
+ expect(Object.keys(tmpl.join).length).toEqual(1);
+ var join_key = Object.keys(tmpl.join)[0];
+ var lcol = join_key.split(/-/)[0];
+ expect(lcol).toEqual('id');
+ });
+
+ });
+
+});
-----------------------------------------------------------------------
Summary of changes:
.../js/ui/default/staff/reporter/template/app.js | 13 ++-
.../web/js/ui/default/staff/test/karma.conf.js | 1 +
.../js/ui/default/staff/test/unit/egReporter.js | 185 ++++++++++++++++++++
3 files changed, 197 insertions(+), 2 deletions(-)
create mode 100644 Open-ILS/web/js/ui/default/staff/test/unit/egReporter.js
hooks/post-receive
--
Evergreen ILS
More information about the open-ils-commits
mailing list