diff --git a/beat/web/reports/static/reports/test/report-spec.js b/beat/web/reports/static/reports/test/report-spec.js index d2ba27040bea572f9744500052493b7e9326c4cb..0b39326d40db4c9df74f187bb024f212790966a5 100644 --- a/beat/web/reports/static/reports/test/report-spec.js +++ b/beat/web/reports/static/reports/test/report-spec.js @@ -1,6 +1,24 @@ // general tests for the reports app describe('reports app', function(){ + const until = protractor.ExpectedConditions; browser.ignoreSynchronization = true; + // just to make sure the window is maximized + browser.driver.manage().window().maximize(); + + // login to the default user ('user') once before running all these tests + beforeAll(function(){ + browser.get('http://localhost:8000/login/?next=/'); + //browser.findElement(by.partialLinkText('Sign-in')).click(); + browser.findElement(by.id('id_username')).sendKeys('user'); + browser.findElement(by.id('id_password')).sendKeys('user'); + browser.findElement(by.partialButtonText('Sign-in')).click(); + return browser.wait(function(){ + return browser.getCurrentUrl().then(function(url){ + const rxUserLoggedIn = /events\/user\//; + return rxUserLoggedIn.test(url); + }); + }); + }); // if there's an error in the web browser's console, // fail the test and print the error @@ -23,33 +41,19 @@ describe('reports app', function(){ // /reports describe('home', function(){ beforeEach(function(){ - browser.get('http://localhost:8000/reports'); + browser.get('http://localhost:8000/reports/user'); }); it('should load', function(){ - expect(browser.getTitle()).toEqual('BEAT - Public Reports'); + expect(browser.getTitle()).toEqual("BEAT - user's Reports"); }); }); // /reports/user describe('home for the test user', function(){ - // login to the default user ('user') once before running all these tests - beforeAll(function(){ - browser.get('http://localhost:8000/login/?next=/'); - //browser.findElement(by.partialLinkText('Sign-in')).click(); - browser.findElement(by.id('id_username')).sendKeys('user'); - browser.findElement(by.id('id_password')).sendKeys('user'); - browser.findElement(by.partialButtonText('Sign-in')).click(); - return browser.wait(function(){ - return browser.getCurrentUrl().then(function(url){ - const rxUserLoggedIn = /events\/user\//; - return rxUserLoggedIn.test(url); - }); - }); - }); // go to user's reports page before each test - beforeEach(function(){ + beforeAll(function(){ browser.get('http://localhost:8000/reports/user/'); }); @@ -82,4 +86,47 @@ describe('reports app', function(){ expect(browser.getTitle()).toBe('BEAT - Report'); }); }); + + describe('adding experiments to the "test" report', function(){ + // go to experiments page + beforeAll(function(){ + browser.get('http://localhost:8000/experiments/user/'); + }); + + it('should show the experiments list page', function(){ + expect(browser.getTitle()).toEqual("BEAT - user's Experiments"); + }); + + it('should list successfully-ran experiments accessible by user', function(){ + expect(browser.isElementPresent(by.css('.Done'))).toBeTruthy(); + }); + + it('should add up to the first 5 experiments to the "test" report', function(){ + let finishedExpTableRows = element.all(by.css('.Done')); + let addButton = element(by.css('#add-to-report')); + expect(addButton.getAttribute('disabled')).toBe('true'); + + let fiveRows = finishedExpTableRows.filter((r, i) => i < 5); + + fiveRows + .then(rs => Promise.all(rs.map(r => r.element(by.css('.report-checkbox')).element(by.css('input')).click()))) + .then(() => { + browser.wait(until.elementToBeClickable(addButton), 5000, 'Button still isnt clickable!'); + return browser.executeScript('arguments[0].click();', addButton.getWebElement()); + }) + .then(() => browser.wait(until.presenceOf(element(by.css('.modal'))), 5000, 'Element taking too long to appear in the DOM')) + .then(() => element(by.css('.chosen-single')).click()) + .then(() => element(by.css('.chosen-results')).element(by.css('.active-result')).click()) + .then(() => { + let submitButton = element(by.buttonText('Add')); + return submitButton.click(); + }) + .then(() => browser.wait(until.presenceOf(element(by.buttonText("View Report"))), 5000)) + .then(() => { + let headerText = element(by.css('.report-results > h5')); + expect(headerText.getText()).toContain('Successfully added'); + }) + ; + }); + }); });