LP#1750894 Workstation/Cascade setting pgtap tests
authorBill Erickson <berickxx@gmail.com>
Wed, 30 May 2018 20:38:56 +0000 (16:38 -0400)
committerKathy Lussier <klussier@masslnc.org>
Fri, 3 Aug 2018 17:20:59 +0000 (13:20 -0400)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Kathy Lussier <klussier@masslnc.org>
Open-ILS/src/sql/Pg/t/lp1750894-workststation-settings.pg [new file with mode: 0644]

diff --git a/Open-ILS/src/sql/Pg/t/lp1750894-workststation-settings.pg b/Open-ILS/src/sql/Pg/t/lp1750894-workststation-settings.pg
new file mode 100644 (file)
index 0000000..5a3384f
--- /dev/null
@@ -0,0 +1,84 @@
+BEGIN;
+
+SELECT plan(5);
+
+INSERT INTO actor.workstation (name, owning_lib) values ('test', 1);
+
+INSERT INTO actor.workstation_setting (workstation, name, value) 
+VALUES (
+    (SELECT id FROM actor.workstation WHERE name = 'test'),
+    'eg.search.adv_pane', '"test-workstation"'
+);
+
+
+-- duplicate the setting type as an org setting to verify precedence
+INSERT INTO config.org_unit_setting_type (name, grp, datatype, label)
+VALUES (
+    'eg.search.adv_pane', 'gui', 'string',
+    oils_i18n_gettext(
+        'eg.search.adv_pane',
+        'Catalog Advanced Search Default Pane',
+        'cwst', 'label'
+    )
+);
+
+INSERT INTO actor.org_unit_setting (org_unit, name, value) 
+    VALUES (1, 'eg.search.adv_pane', '"test-org-unit"');
+
+SELECT is(
+    (   SELECT value::TEXT
+        FROM actor.get_cascade_setting('eg.search.adv_pane',
+            1, 1, (SELECT id FROM actor.workstation WHERE name = 'test'))),
+    '"test-workstation"',
+    'Workstation setting takes precedence over org setting'
+);
+
+DELETE FROM actor.workstation_setting WHERE name = 'eg.search.adv_pane';
+
+SELECT is(
+    (   SELECT value::TEXT
+        FROM actor.get_cascade_setting('eg.search.adv_pane',
+            1, 1, (SELECT id FROM actor.workstation WHERE name = 'test'))),
+    '"test-org-unit"',
+    'Org unit setting should now work'
+);
+
+PREPARE user_setting_insert AS
+    INSERT INTO config.usr_setting_type (name, grp, datatype, label)
+    VALUES (
+        'eg.search.adv_pane', 'gui', 'string',
+        oils_i18n_gettext(
+            'eg.search.adv_pane',
+            'Catalog Advanced Search Default Pane',
+            'cwst', 'label'
+        )
+    );
+
+SELECT throws_like(
+    'user_setting_insert',
+    '%Cannot be used as both a user setting and a workstation setting.', 
+    'User settings cannot also be workstation settings'
+);
+
+DELETE FROM config.workstation_setting_type WHERE name = 'eg.search.adv_pane';
+
+SELECT lives_ok(
+    'user_setting_insert',
+    'User settings can now be created'
+);
+
+INSERT INTO actor.usr_setting (usr, name, value) 
+    VALUES (1, 'eg.search.adv_pane', '"test-user"');
+
+SELECT is(
+    (   SELECT value::TEXT
+        FROM actor.get_cascade_setting('eg.search.adv_pane',
+            1, 1, (SELECT id FROM actor.workstation WHERE name = 'test'))),
+    '"test-user"',
+    'User setting takes precedence over org setting'
+);
+
+
+-- Finish the tests and clean up.
+SELECT * FROM finish();
+ROLLBACK;