diff --git a/html/gui/js/modules/Usage.js b/html/gui/js/modules/Usage.js index ddec5b08de..c52d12be29 100644 --- a/html/gui/js/modules/Usage.js +++ b/html/gui/js/modules/Usage.js @@ -512,8 +512,10 @@ Ext.extend(XDMoD.Module.Usage, XDMoD.PortalModule, { var disableNode = false; + var matchkey; for (var i = 0; i < CCR.xdmod.ui.disabledMenus.length && !disableNode; i++) { - disableNode = n.attributes.group_by == CCR.xdmod.ui.disabledMenus[i].group_by && n.attributes.category == CCR.xdmod.ui.disabledMenus[i].category; + matchkey = CCR.xdmod.ui.disabledMenus[i].category ? 'category' : 'realm'; + disableNode = n.attributes.group_by === CCR.xdmod.ui.disabledMenus[i].group_by && n.attributes[matchkey] === CCR.xdmod.ui.disabledMenus[i][matchkey]; } if (disableNode) { diff --git a/open_xdmod/modules/xdmod/automated_tests/test/specs/xdmod/usageTab.js b/open_xdmod/modules/xdmod/automated_tests/test/specs/xdmod/usageTab.js index 86e2f3a295..57bde9118c 100644 --- a/open_xdmod/modules/xdmod/automated_tests/test/specs/xdmod/usageTab.js +++ b/open_xdmod/modules/xdmod/automated_tests/test/specs/xdmod/usageTab.js @@ -10,20 +10,56 @@ describe('Usage', function () { start: '2016-12-25', end: '2017-01-02' }; - describe('Usage Tab', function xdmod() { + describe('(Center Director)', function xdmod() { it('Selected', function () { browser.waitForLoadedThenClick(usg.tab).call(); + browser.waitForChart(); + browser.waitForExist(usg.chartByTitle('CPU Hours: Total')); }); it('Set a known start and end date', function meSetStartEnd() { browser.setValue(usg.startField, baselineDate.start); browser.setValue(usg.endField, baselineDate.end); + browser.click(usg.refreshButton); + browser.waitForExist(usg.chartXAxisLabelByName(baselineDate.start)); }); it('Select Job Size Min', function () { - browser.waitForLoadedThenClick(usg.jobSizeMin); - }); - it('Legend Text is Correct', function () { + browser.waitForLoadedThenClick(usg.treeNodeByPath('Jobs Summary', 'Job Size: Min')); + browser.waitForExist(usg.chartByTitle('Job Size: Min (Core Count)')); usg.checkLegendText('Screwdriver'); }); + it('View CPU Hours by System Username', function () { + browser.waitForLoadedThenClick(usg.unfoldTreeNodeByName('Jobs Summary')); + browser.waitForLoadedThenClick(usg.unfoldTreeNodeByName('Jobs by System Username')); + browser.waitUntilAnimEndAndClick(usg.treeNodeByPath('Jobs by System Username', 'CPU Hours: Per Job')); + browser.waitForExist(usg.chartByTitle('CPU Hours: Per Job: by System Username')); + }); }); logIn.logout(); + describe('(Public User)', function () { + it('Selected', function () { + browser.waitForLoadedThenClick(usg.tab).call(); + browser.waitForChart(); + browser.waitForExist(usg.chartByTitle('CPU Hours: Total')); + }); + it('Set a known start and end date', function meSetStartEnd() { + browser.setValue(usg.startField, baselineDate.start); + browser.setValue(usg.endField, baselineDate.end); + browser.click(usg.refreshButton); + browser.waitForExist(usg.chartXAxisLabelByName(baselineDate.start)); + }); + it('View Job Size Min', function () { + browser.waitForLoadedThenClick(usg.treeNodeByPath('Jobs Summary', 'Job Size: Min')); + browser.waitForExist(usg.chartByTitle('Job Size: Min (Core Count)')); + usg.checkLegendText('Screwdriver'); + }); + it('Confirm System Username is not selectable', function () { + browser.waitForLoadedThenClick(usg.unfoldTreeNodeByName('Jobs Summary')); + browser.waitUntilAnimEndAndClick(usg.topTreeNodeByName('Jobs by System Username')); + // The click should do nothing and the chart should remain unchanged + // since nothing should happen, there is no action to wait for, so we + // have to pause for a bit + browser.pause(500); + browser.waitForExist(usg.chartByTitle('Job Size: Min (Core Count)')); + }); + }); }); diff --git a/open_xdmod/modules/xdmod/automated_tests/test/specs/xdmod/usageTab.page.js b/open_xdmod/modules/xdmod/automated_tests/test/specs/xdmod/usageTab.page.js index f02ad6c7f4..8d451857d1 100644 --- a/open_xdmod/modules/xdmod/automated_tests/test/specs/xdmod/usageTab.page.js +++ b/open_xdmod/modules/xdmod/automated_tests/test/specs/xdmod/usageTab.page.js @@ -1,15 +1,31 @@ +/* eslint-env node, es6 */ class Usage { constructor() { this.tab = '#main_tab_panel__tg_usage'; this.startField = '#tg_usage input[id^=start_field_ext]'; this.endField = '#tg_usage input[id^=end_field_ext]'; - this.jobSizeMin = '.x-tree-root-node > li:nth-child(1) > ul:nth-child(2) > li:nth-child(5)'; this.legendText = 'g.highcharts-legend-item'; + this.refreshButton = '//div[@id="tg_usage"]//button[text()="Refresh"]/ancestor::node()[5]'; + this.topTreeNodeByName = function (name) { + return '//div[@id="tg_usage"]//div[@class="x-tree-root-node"]/li/div[contains(@class,"x-tree-node-el")]//span[text() = "' + name + '"]'; + }; + this.treeNodeByPath = function (topname, childname) { + return module.exports.topTreeNodeByName(topname) + '/ancestor::node()[3]//span[text() = "' + childname + '"]'; + }; + this.unfoldTreeNodeByName = function (name) { + return module.exports.topTreeNodeByName(name) + '/ancestor::node()[2]/img[contains(@class,"x-tree-ec-icon")]'; + }; + this.chart = '//div[@id="tg_usage"]//div[@class="highcharts-container"]//*[local-name() = "svg"]'; + this.chartByTitle = function (title) { + return module.exports.chart + '/*[name()="text" and contains(@class, "title")]/*[name()="tspan" and contains(text(),"' + title + '")]'; + }; + this.chartXAxisLabelByName = function (name) { + return module.exports.chart + '/*[name() = "g" and contains(@class, "highcharts-xaxis-labels")]/*[name() = "text" and text() = "' + name + '"]'; + }; } checkLegendText(text) { browser.waitForChart(); - browser.pause(2500); browser.waitForExist(this.legendText, 50000); expect(browser.getText(this.legendText)).to.equal(text); }