diff --git a/backend/backend/api/scheduledEvent.js b/backend/backend/api/scheduledEvent.js index 814c80d556..130de7977a 100755 --- a/backend/backend/api/scheduledEvent.js +++ b/backend/backend/api/scheduledEvent.js @@ -716,7 +716,10 @@ router.delete( } ); -router.get('/:projectId/slug/:slug', getUser, isAuthorized, async function(req, res) { +router.get('/:projectId/slug/:slug', getUser, isAuthorized, async function( + req, + res +) { try { const { slug } = req.params; const scheduledEvent = await ScheduledEventService.findOneBy({ diff --git a/backend/backend/api/statusPage.js b/backend/backend/api/statusPage.js index 09391af2ec..c2cc3bd35d 100755 --- a/backend/backend/api/statusPage.js +++ b/backend/backend/api/statusPage.js @@ -1154,7 +1154,10 @@ router.get('/:projectId/probes', checkUser, async function(req, res) { } }); -router.get('/:statusPageSlug/probes/statusPage', checkUser, async function(req, res) { +router.get('/:statusPageSlug/probes/statusPage', checkUser, async function( + req, + res +) { try { const skip = req.query.skip || 0; const limit = req.query.limit || 0; diff --git a/backend/backend/services/scheduleService.js b/backend/backend/services/scheduleService.js index 6f4df19fa6..db437fba9e 100755 --- a/backend/backend/services/scheduleService.js +++ b/backend/backend/services/scheduleService.js @@ -437,4 +437,4 @@ const ScheduleModel = require('../models/schedule'); const EscalationService = require('../services/escalationService'); const ErrorService = require('../services/errorService'); const generate = require('nanoid/generate'); -const slugify = require('slugify'); \ No newline at end of file +const slugify = require('slugify'); diff --git a/dashboard/src/components/basic/TeamMemberSelector.js b/dashboard/src/components/basic/TeamMemberSelector.js index 5c6e2fff36..cada516479 100755 --- a/dashboard/src/components/basic/TeamMemberSelector.js +++ b/dashboard/src/components/basic/TeamMemberSelector.js @@ -39,7 +39,6 @@ const TeamMemberSelector = ({ form[policyIndex].teams[teamIndex].teamMembers ); - const allowedOptionsForDropdown = renderType === 'team' ? [ diff --git a/dashboard/src/components/security/ApplicationSecurityView.js b/dashboard/src/components/security/ApplicationSecurityView.js index 1d699adee5..1555cbe3f7 100644 --- a/dashboard/src/components/security/ApplicationSecurityView.js +++ b/dashboard/src/components/security/ApplicationSecurityView.js @@ -57,13 +57,12 @@ const ApplicationSecurityView = ({ { projectId, applicationSecurityId, - name: ' Application Security' + name: ' Application Security', }, ], }); }; - const handleEdit = ({ projectId, componentId, diff --git a/dashboard/src/constants/scheduledEvent.js b/dashboard/src/constants/scheduledEvent.js index ca36873d41..5c88e8ad6f 100755 --- a/dashboard/src/constants/scheduledEvent.js +++ b/dashboard/src/constants/scheduledEvent.js @@ -92,7 +92,9 @@ export const NEXT_PAGE = 'NEXT_PAGE'; export const PREV_PAGE = 'PREV_PAGE'; // fetch scheduled event by slug -export const FETCH_SCHEDULED_EVENT_REQUEST_SLUG = 'FETCH_SCHEDULED_EVENT_REQUEST_SLUG'; -export const FETCH_SCHEDULED_EVENT_SUCCESS_SLUG = 'FETCH_SCHEDULED_EVENT_SUCCESS_SLUG'; -export const FETCH_SCHEDULED_EVENT_FAILURE_SLUG = 'FETCH_SCHEDULED_EVENT_FAILURE_SLUG'; - +export const FETCH_SCHEDULED_EVENT_REQUEST_SLUG = + 'FETCH_SCHEDULED_EVENT_REQUEST_SLUG'; +export const FETCH_SCHEDULED_EVENT_SUCCESS_SLUG = + 'FETCH_SCHEDULED_EVENT_SUCCESS_SLUG'; +export const FETCH_SCHEDULED_EVENT_FAILURE_SLUG = + 'FETCH_SCHEDULED_EVENT_FAILURE_SLUG'; diff --git a/dashboard/src/test/puppeteer/AlertDisabledWarning.test.js b/dashboard/src/test/puppeteer/AlertDisabledWarning.test.js index da2160d5c8..be0d4ed81e 100644 --- a/dashboard/src/test/puppeteer/AlertDisabledWarning.test.js +++ b/dashboard/src/test/puppeteer/AlertDisabledWarning.test.js @@ -10,75 +10,75 @@ const password = '1234567890'; const user = { email, - password + password, }; describe('Alert Warning', () => { const operationTimeOut = 1000000; beforeAll(async done => { - jest.setTimeout(2000000); + jest.setTimeout(2000000); browser = await puppeteer.launch(utils.puppeteerLaunchConfig); page = await browser.newPage(); await page.setUserAgent( 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' - ); - - await init.registerUser(user, page); - done(); + ); + + await init.registerUser(user, page); + done(); }); - afterAll(async done => { + afterAll(async done => { await browser.close(); done(); }); test( 'Should show a warning alert if call and sms alerts are disabled', - async (done) => { - - await page.goto(utils.DASHBOARD_URL); - await page.waitForSelector('#projectSettings',{visible:true}); - await page.click('#projectSettings'); - await page.waitForSelector('#billing',{visible:true}); - await page.click('#billing'); + async done => { + await page.goto(utils.DASHBOARD_URL); + await page.waitForSelector('#projectSettings', { visible: true }); + await page.click('#projectSettings'); + await page.waitForSelector('#billing', { visible: true }); + await page.click('#billing'); - const element = await page.waitForSelector('#alertWarning',{visible:true}); - expect(element).toBeDefined(); - done(); - + const element = await page.waitForSelector('#alertWarning', { + visible: true, + }); + expect(element).toBeDefined(); + done(); }, operationTimeOut ); test( 'Should not show any warning alert if call and sms alerts are enabled', - async (done) => { - await page.goto(utils.DASHBOARD_URL); - await page.waitForSelector('#projectSettings',{visible:true}); - await page.click('#projectSettings'); - await page.waitForSelector('#billing',{visible:true}); - await page.click('#billing a'); - await page.waitForSelector('#alertEnable',{visible:true}); + async done => { + await page.goto(utils.DASHBOARD_URL); + await page.waitForSelector('#projectSettings', { visible: true }); + await page.click('#projectSettings'); + await page.waitForSelector('#billing', { visible: true }); + await page.click('#billing a'); + await page.waitForSelector('#alertEnable', { visible: true }); - const rowLength = await page.$$eval( - '#alertOptionRow > div.bs-Fieldset-row', - rows => rows.length - ); + const rowLength = await page.$$eval( + '#alertOptionRow > div.bs-Fieldset-row', + rows => rows.length + ); - if (rowLength === 1) { - // enable sms and call alerts - // check the box - await page.evaluate(() => { - document.querySelector('#alertEnable').click(); - document.querySelector('#alertOptionSave').click(); - }); - } - const element = await page.waitForSelector('#alertWarning', { - hidden: true, + if (rowLength === 1) { + // enable sms and call alerts + // check the box + await page.evaluate(() => { + document.querySelector('#alertEnable').click(); + document.querySelector('#alertOptionSave').click(); }); - expect(element).toBeNull(); - done(); + } + const element = await page.waitForSelector('#alertWarning', { + hidden: true, + }); + expect(element).toBeNull(); + done(); }, operationTimeOut ); diff --git a/dashboard/src/test/puppeteer/BreadCrumb.test.js b/dashboard/src/test/puppeteer/BreadCrumb.test.js index 670f8f7425..417c9a3bde 100644 --- a/dashboard/src/test/puppeteer/BreadCrumb.test.js +++ b/dashboard/src/test/puppeteer/BreadCrumb.test.js @@ -11,82 +11,75 @@ const password = '1234567890'; const user = { email, - password + password, }; describe('BreadCrumb Component test', () => { const operationTimeOut = 500000; - beforeAll(async (done) => { + beforeAll(async done => { jest.setTimeout(500000); - + browser = await puppeteer.launch(utils.puppeteerLaunchConfig); page = await browser.newPage(); await page.setUserAgent( 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' - ); - // user - await init.registerUser(user, page); - done(); - + ); + // user + await init.registerUser(user, page); + done(); }); - afterAll(async (done) => { + afterAll(async done => { await browser.close(); done(); }); test( 'Should navigate between pages from the breadcrumbs', - async (done) => { + async done => { const componentName = utils.generateRandomString(); const monitorName = utils.generateRandomString(); - - await page.goto(utils.DASHBOARD_URL); - await init.addMonitorToComponent( - componentName, - monitorName, - page - ); - const monitorBreadcrumb = await page.waitForSelector( - `#cb${monitorName}`, - { - visible: true, - } - ); - const componentBreadcrumb = await page.waitForSelector( - '#cbMonitors' - ); - expect(monitorBreadcrumb).toBeDefined(); - expect(componentBreadcrumb).toBeDefined(); - await page.click('#cbMonitors'); + await page.goto(utils.DASHBOARD_URL); + await init.addMonitorToComponent(componentName, monitorName, page); - const monitorTitle = await page.waitForSelector( - `#monitor-title-${monitorName}`, - { visible: true } - ); - expect(monitorTitle).toBeDefined(); - done(); - + const monitorBreadcrumb = await page.waitForSelector( + `#cb${monitorName}`, + { + visible: true, + } + ); + const componentBreadcrumb = await page.waitForSelector( + '#cbMonitors' + ); + expect(monitorBreadcrumb).toBeDefined(); + expect(componentBreadcrumb).toBeDefined(); + await page.click('#cbMonitors'); + + const monitorTitle = await page.waitForSelector( + `#monitor-title-${monitorName}`, + { visible: true } + ); + expect(monitorTitle).toBeDefined(); + done(); }, operationTimeOut ); test( 'Should not go to the landing page when the project breadcrumb item is clicked', - async (done) => { - - await page.goto(utils.DASHBOARD_URL); - await page.waitForSelector('#cbUnnamedProject',{visible:true}); - await page.click('#cbUnnamedProject'); - let currentPage = await page.waitForSelector( - '#cbUnnamedProject',{visible:true} - ); - currentPage = await currentPage.getProperty('innerText'); - currentPage = await currentPage.jsonValue(); - expect(currentPage).toBe('Unnamed Project'); - + async done => { + await page.goto(utils.DASHBOARD_URL); + await page.waitForSelector('#cbUnnamedProject', { visible: true }); + await page.click('#cbUnnamedProject'); + let currentPage = await page.waitForSelector('#cbUnnamedProject', { + visible: true, + }); + currentPage = await currentPage.getProperty('innerText'); + currentPage = await currentPage.jsonValue(); + expect(currentPage).toBe('Unnamed Project'); + done(); }, operationTimeOut diff --git a/dashboard/src/test/puppeteer/CreateProject.test.js b/dashboard/src/test/puppeteer/CreateProject.test.js index 1c092dea19..7aa5e77e05 100755 --- a/dashboard/src/test/puppeteer/CreateProject.test.js +++ b/dashboard/src/test/puppeteer/CreateProject.test.js @@ -9,7 +9,7 @@ const email = utils.generateRandomBusinessEmail(); const password = '1234567890'; const user = { email, - password + password, }; describe('Project API', () => { @@ -17,15 +17,15 @@ describe('Project API', () => { beforeAll(async done => { jest.setTimeout(200000); - + browser = await puppeteer.launch(utils.puppeteerLaunchConfig); page = await browser.newPage(); await page.setUserAgent( 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' - ); - // user - await init.registerUser(user, page); - + ); + // user + await init.registerUser(user, page); + done(); }); diff --git a/dashboard/src/test/puppeteer/CustomField.test.js b/dashboard/src/test/puppeteer/CustomField.test.js index 930ac20031..9b8af9400d 100644 --- a/dashboard/src/test/puppeteer/CustomField.test.js +++ b/dashboard/src/test/puppeteer/CustomField.test.js @@ -9,7 +9,7 @@ const email = utils.generateRandomBusinessEmail(); const password = '1234567890'; const user = { email, - password + password, }; const incidentFieldText = { fieldName: 'textField', @@ -22,7 +22,7 @@ const incidentFieldText = { describe('Incident Custom Field', () => { const operationTimeOut = 500000; - + beforeAll(async done => { jest.setTimeout(360000); @@ -30,28 +30,28 @@ describe('Incident Custom Field', () => { page = await browser.newPage(); await page.setUserAgent( 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' - ); - // user - await init.registerUser(user, page); + ); + // user + await init.registerUser(user, page); done(); }); - afterAll(async done => { + afterAll(async done => { await browser.close(); done(); }); test( 'should configure incident custom field in a project', - async done => { - await init.addCustomField(page, incidentFieldText, 'incident'); + async done => { + await init.addCustomField(page, incidentFieldText, 'incident'); - const firstCustomField = await page.waitForSelector( - `#customfield_${incidentFieldText.fieldName}`, - { visible: true } - ); - expect(firstCustomField).toBeDefined(); + const firstCustomField = await page.waitForSelector( + `#customfield_${incidentFieldText.fieldName}`, + { visible: true } + ); + expect(firstCustomField).toBeDefined(); done(); }, operationTimeOut @@ -59,50 +59,50 @@ describe('Incident Custom Field', () => { test( 'should update a incident custom field in a project', - async done => { - await page.goto(utils.DASHBOARD_URL); - await page.waitForSelector('#projectSettings', { - visible: true, - }); - await page.click('#projectSettings'); - await page.waitForSelector('#more'); - await page.click('#more'); - await page.waitForSelector('#incidentSettings', { - visible: true, - }); - await page.click('#incidentSettings'); - await page.reload({ - waitUntil: 'networkidle0', - }); - await init.gotoTab(6, page); + async done => { + await page.goto(utils.DASHBOARD_URL); + await page.waitForSelector('#projectSettings', { + visible: true, + }); + await page.click('#projectSettings'); + await page.waitForSelector('#more'); + await page.click('#more'); + await page.waitForSelector('#incidentSettings', { + visible: true, + }); + await page.click('#incidentSettings'); + await page.reload({ + waitUntil: 'networkidle0', + }); + await init.gotoTab(6, page); - await page.waitForSelector('#editCustomField_0', { - visible: true, - }); - await page.click('#editCustomField_0'); - await page.waitForSelector('#customFieldForm', { - visible: true, - }); - await page.click('#fieldName', { clickCount: 3 }); - await page.type('#fieldName', incidentFieldNumber.fieldName); - await init.selectByText( - '#fieldType', - incidentFieldNumber.fieldType, - page - ); - await page.waitForSelector('#updateCustomField', { - visible: true, - }); - await page.click('#updateCustomField'); - await page.waitForSelector('#updateCustomField', { - hidden: true, - }); + await page.waitForSelector('#editCustomField_0', { + visible: true, + }); + await page.click('#editCustomField_0'); + await page.waitForSelector('#customFieldForm', { + visible: true, + }); + await page.click('#fieldName', { clickCount: 3 }); + await page.type('#fieldName', incidentFieldNumber.fieldName); + await init.selectByText( + '#fieldType', + incidentFieldNumber.fieldType, + page + ); + await page.waitForSelector('#updateCustomField', { + visible: true, + }); + await page.click('#updateCustomField'); + await page.waitForSelector('#updateCustomField', { + hidden: true, + }); - const updatedField = await page.waitForSelector( - `#customfield_${incidentFieldNumber.fieldName}`, - { visible: true } - ); - expect(updatedField).toBeDefined(); + const updatedField = await page.waitForSelector( + `#customfield_${incidentFieldNumber.fieldName}`, + { visible: true } + ); + expect(updatedField).toBeDefined(); done(); }, operationTimeOut @@ -110,41 +110,41 @@ describe('Incident Custom Field', () => { test( 'should delete a incident custom field in a project', - async done => { - await page.goto(utils.DASHBOARD_URL); - await page.waitForSelector('#projectSettings', { - visible: true, - }); - await page.click('#projectSettings'); - await page.waitForSelector('#more'); - await page.click('#more'); - await page.waitForSelector('#incidentSettings', { - visible: true, - }); - await page.click('#incidentSettings'); - await page.reload({ - waitUntil: 'networkidle0', - }); - await init.gotoTab(6, page); + async done => { + await page.goto(utils.DASHBOARD_URL); + await page.waitForSelector('#projectSettings', { + visible: true, + }); + await page.click('#projectSettings'); + await page.waitForSelector('#more'); + await page.click('#more'); + await page.waitForSelector('#incidentSettings', { + visible: true, + }); + await page.click('#incidentSettings'); + await page.reload({ + waitUntil: 'networkidle0', + }); + await init.gotoTab(6, page); - await page.waitForSelector('#deleteCustomField_0', { - visible: true, - }); - await page.click('#deleteCustomField_0'); - await page.waitForSelector('#deleteCustomFieldModalBtn', { - visible: true, - }); - await page.click('#deleteCustomFieldModalBtn'); - await page.waitForSelector('#deleteCustomFieldModalBtn', { - hidden: true, - }); + await page.waitForSelector('#deleteCustomField_0', { + visible: true, + }); + await page.click('#deleteCustomField_0'); + await page.waitForSelector('#deleteCustomFieldModalBtn', { + visible: true, + }); + await page.click('#deleteCustomFieldModalBtn'); + await page.waitForSelector('#deleteCustomFieldModalBtn', { + hidden: true, + }); + + const noCustomFields = await page.waitForSelector( + '#noCustomFields', + { visible: true } + ); + expect(noCustomFields).toBeDefined(); - const noCustomFields = await page.waitForSelector( - '#noCustomFields', - { visible: true } - ); - expect(noCustomFields).toBeDefined(); - done(); }, operationTimeOut diff --git a/dashboard/src/test/puppeteer/CustomTutorial.test.js b/dashboard/src/test/puppeteer/CustomTutorial.test.js index f5824171cf..dd211467d4 100644 --- a/dashboard/src/test/puppeteer/CustomTutorial.test.js +++ b/dashboard/src/test/puppeteer/CustomTutorial.test.js @@ -11,128 +11,127 @@ const user = { describe('Custom Tutorial With SubProjects', () => { const operationTimeOut = 500000; - - beforeAll(async (done) => { + + beforeAll(async done => { jest.setTimeout(500000); browser = await puppeteer.launch(utils.puppeteerLaunchConfig); page = await browser.newPage(); await page.setUserAgent( 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' - ); - - await init.registerUser(user, page); + ); + + await init.registerUser(user, page); done(); }); - afterAll(async (done) => { + afterAll(async done => { await browser.close(); done(); }); // User is automatically route to dashboard after registration. test( 'Should show indicator on how to create component, on visiting component page, it should also appear', - async (done) => { - const customTutorialType = 'component'; - // Navigate to home page - await page.goto(utils.DASHBOARD_URL, { - waitUntil: 'networkidle0', - }); - const componentBoxElement = await page.waitForSelector( - `#info-${customTutorialType}` - ); - expect(componentBoxElement).toBeDefined(); + async done => { + const customTutorialType = 'component'; + // Navigate to home page + await page.goto(utils.DASHBOARD_URL, { + waitUntil: 'networkidle0', + }); + const componentBoxElement = await page.waitForSelector( + `#info-${customTutorialType}` + ); + expect(componentBoxElement).toBeDefined(); - // click on component section - await page.waitForSelector('#components'); - await page.click('#components'); + // click on component section + await page.waitForSelector('#components'); + await page.click('#components'); + + // find that same tutorial box on component page + const newComponentBoxElement = await page.waitForSelector( + `#info-${customTutorialType}` + ); + expect(newComponentBoxElement).toBeDefined(); - // find that same tutorial box on component page - const newComponentBoxElement = await page.waitForSelector( - `#info-${customTutorialType}` - ); - expect(newComponentBoxElement).toBeDefined(); - done(); }, operationTimeOut ); test( 'Should show indicator on how to create component, and after closing, quick tip for component should appear', - async (done) => { - const customTutorialType = 'component'; - // Navigate to home page - await page.goto(utils.DASHBOARD_URL, { - waitUntil: 'networkidle0', - }); - - const componentBoxElement = await page.waitForSelector( - `#info-${customTutorialType}` - ); - expect(componentBoxElement).toBeDefined(); + async done => { + const customTutorialType = 'component'; + // Navigate to home page + await page.goto(utils.DASHBOARD_URL, { + waitUntil: 'networkidle0', + }); - // click on component section - await page.waitForSelector('#components'); - await page.click('#components'); + const componentBoxElement = await page.waitForSelector( + `#info-${customTutorialType}` + ); + expect(componentBoxElement).toBeDefined(); - // find that same tutorial box on component page - const newComponentBoxElement = await page.waitForSelector( - `#info-${customTutorialType}` - ); - expect(newComponentBoxElement).toBeDefined(); - // click on the call to action button - await page.waitForSelector(`#close-${customTutorialType}`); - await page.click(`#close-${customTutorialType}`); - // find component quick tip and confirm it shows - const componentQuickTip = await page.waitForSelector( - `#quick-tip-${customTutorialType}` - ); - expect(componentQuickTip).toBeDefined(); - done(); - + // click on component section + await page.waitForSelector('#components'); + await page.click('#components'); + + // find that same tutorial box on component page + const newComponentBoxElement = await page.waitForSelector( + `#info-${customTutorialType}` + ); + expect(newComponentBoxElement).toBeDefined(); + // click on the call to action button + await page.waitForSelector(`#close-${customTutorialType}`); + await page.click(`#close-${customTutorialType}`); + // find component quick tip and confirm it shows + const componentQuickTip = await page.waitForSelector( + `#quick-tip-${customTutorialType}` + ); + expect(componentQuickTip).toBeDefined(); + done(); }, operationTimeOut ); test( 'Should show indicator on how to create monitor, and after closing, it should not reapprear', - async (done) => { - const customTutorialType = 'monitor'; - // Navigate to home page - await page.goto(utils.DASHBOARD_URL, { - waitUntil: 'networkidle0', - }); - - const componentBoxElement = await page.waitForSelector( - `#info-${customTutorialType}` - ); - expect(componentBoxElement).toBeDefined(); + async done => { + const customTutorialType = 'monitor'; + // Navigate to home page + await page.goto(utils.DASHBOARD_URL, { + waitUntil: 'networkidle0', + }); + + const componentBoxElement = await page.waitForSelector( + `#info-${customTutorialType}` + ); + expect(componentBoxElement).toBeDefined(); + + // click on the call to action button + await page.waitForSelector(`#close-${customTutorialType}`); + await page.click(`#close-${customTutorialType}`); - // click on the call to action button - await page.waitForSelector(`#close-${customTutorialType}`); - await page.click(`#close-${customTutorialType}`); - done(); }, operationTimeOut ); test( 'Should show indicator on how to invite team member, and after closing, it should not reapprear', - async (done) => { - const customTutorialType = 'teamMember'; - // Navigate to home page - await page.goto(utils.DASHBOARD_URL, { - waitUntil: 'networkidle0', - }); - - const componentBoxElement = await page.waitForSelector( - `#info-${customTutorialType}` - ); - expect(componentBoxElement).toBeDefined(); + async done => { + const customTutorialType = 'teamMember'; + // Navigate to home page + await page.goto(utils.DASHBOARD_URL, { + waitUntil: 'networkidle0', + }); + + const componentBoxElement = await page.waitForSelector( + `#info-${customTutorialType}` + ); + expect(componentBoxElement).toBeDefined(); + + // click on the call to action button + await page.waitForSelector(`#close-${customTutorialType}`); + await page.click(`#close-${customTutorialType}`); - // click on the call to action button - await page.waitForSelector(`#close-${customTutorialType}`); - await page.click(`#close-${customTutorialType}`); - done(); }, operationTimeOut diff --git a/dashboard/src/test/puppeteer/FyipeApi.test.js b/dashboard/src/test/puppeteer/FyipeApi.test.js index 133203c650..ce85ed29b0 100644 --- a/dashboard/src/test/puppeteer/FyipeApi.test.js +++ b/dashboard/src/test/puppeteer/FyipeApi.test.js @@ -19,166 +19,177 @@ describe('API test', () => { let cluster; - beforeAll(async (done) => { + beforeAll(async done => { jest.setTimeout(500000); browser = await puppeteer.launch(utils.puppeteerLaunchConfig); page = await browser.newPage(); await page.setUserAgent( 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' - ); + ); + + // Register user + await init.registerUser(user, page); + await init.logout(page); + await init.registerUser(member, page); + await init.logout(page); + await init.loginUser(user, page); - // Register user - await init.registerUser(user, page); - await init.logout(page); - await init.registerUser(member, page); - await init.logout(page); - await init.loginUser(user, page); - done(); }); - afterAll(async (done) => { + afterAll(async done => { await browser.close(); done(); }); test( 'Should render the API page', - async (done) => { - await page.goto(utils.DASHBOARD_URL, { - waitUntil: 'networkidle0', - }); + async done => { + await page.goto(utils.DASHBOARD_URL, { + waitUntil: 'networkidle0', + }); - await page.waitForSelector('#projectSettings', {visible: true}); - await page.click('#projectSettings'); - await page.waitForSelector('#api', {visible: true}); - await page.click('#api a'); - let elementHandle = await page.$('#boxTitle', { - visible: true, - }); - elementHandle = await elementHandle.getProperty('innerText'); - elementHandle = await elementHandle.jsonValue(); - elementHandle.should.be.exactly('API Documentation'); - - done(); + await page.waitForSelector('#projectSettings', { visible: true }); + await page.click('#projectSettings'); + await page.waitForSelector('#api', { visible: true }); + await page.click('#api a'); + let elementHandle = await page.$('#boxTitle', { + visible: true, + }); + elementHandle = await elementHandle.getProperty('innerText'); + elementHandle = await elementHandle.jsonValue(); + elementHandle.should.be.exactly('API Documentation'); + + done(); }, operationTimeOut ); test( 'Should display the API key when clicked', - async (done) => { - await page.goto(utils.DASHBOARD_URL, { - waitUntil: 'networkidle0', - }); + async done => { + await page.goto(utils.DASHBOARD_URL, { + waitUntil: 'networkidle0', + }); - await page.waitForSelector('#projectSettings', {visible: true}); - await page.click('#projectSettings'); - await page.waitForSelector('#api', {visible: true}); - await page.click('#api a'); - let label = await page.$('#apiKey', { visible: true }); - label = await label.getProperty('innerText'); - label = await label.jsonValue(); + await page.waitForSelector('#projectSettings', { visible: true }); + await page.click('#projectSettings'); + await page.waitForSelector('#api', { visible: true }); + await page.click('#api a'); + let label = await page.$('#apiKey', { visible: true }); + label = await label.getProperty('innerText'); + label = await label.jsonValue(); - await page.click('#apiKey'); - let newLabel = await page.$('#apiKey', { visible: true }); - newLabel = await newLabel.getProperty('innerText'); - newLabel = await newLabel.jsonValue(); - expect(label).not.toEqual(newLabel); + await page.click('#apiKey'); + let newLabel = await page.$('#apiKey', { visible: true }); + newLabel = await newLabel.getProperty('innerText'); + newLabel = await newLabel.jsonValue(); + expect(label).not.toEqual(newLabel); - done(); - + done(); }, operationTimeOut ); test( 'Should reset the API Key', - async (done) => { - await page.goto(utils.DASHBOARD_URL, { - waitUntil: 'networkidle0', - }); + async done => { + await page.goto(utils.DASHBOARD_URL, { + waitUntil: 'networkidle0', + }); - await page.waitForSelector('#projectSettings', {visible: true}); - await page.click('#projectSettings'); - await page.waitForSelector('#api', {visible: true}); - await page.click('#api a'); + await page.waitForSelector('#projectSettings', { visible: true }); + await page.click('#projectSettings'); + await page.waitForSelector('#api', { visible: true }); + await page.click('#api a'); - await page.click('#apiKey'); - let oldApiKey = await page.$('#apiKey', { visible: true }); - oldApiKey = await oldApiKey.getProperty('innerText'); - oldApiKey = await oldApiKey.jsonValue(); + await page.click('#apiKey'); + let oldApiKey = await page.$('#apiKey', { visible: true }); + oldApiKey = await oldApiKey.getProperty('innerText'); + oldApiKey = await oldApiKey.jsonValue(); - await page.click('button[id=resetApiKey]', { delay: 100 }); - await page.waitForSelector('button[id=resetApiKeySave]', {visible: true}); - await page.click('button[id=resetApiKeySave]'); - await page.waitForSelector('button[id=resetApiKeySave]', {hidden:true}); + await page.click('button[id=resetApiKey]', { delay: 100 }); + await page.waitForSelector('button[id=resetApiKeySave]', { + visible: true, + }); + await page.click('button[id=resetApiKeySave]'); + await page.waitForSelector('button[id=resetApiKeySave]', { + hidden: true, + }); - let newApiKey = await page.$('#apiKey', { visible: true }); - newApiKey = await newApiKey.getProperty('innerText'); - newApiKey = await newApiKey.jsonValue(); + let newApiKey = await page.$('#apiKey', { visible: true }); + newApiKey = await newApiKey.getProperty('innerText'); + newApiKey = await newApiKey.jsonValue(); - expect(oldApiKey).not.toEqual(newApiKey); + expect(oldApiKey).not.toEqual(newApiKey); - done(); - + done(); }, operationTimeOut ); test( 'Should not access API settings if user is a member on a project', - async (done) => { + async done => { const projectName = 'Project1'; const role = 'Member'; - - await page.goto(utils.DASHBOARD_URL, { - waitUntil: 'networkidle0', - }); - // Rename project - await page.waitForSelector('#projectSettings', {visible: true}); - await page.click('#projectSettings'); - await page.waitForSelector('input[name=project_name]', {visible: true}); - await page.click('input[name=project_name]', { clickCount: 3 }); - await page.type('input[name=project_name]', projectName); - await page.waitForSelector('button[id=btnCreateProject]', {visible: true}); - await page.click('button[id=btnCreateProject]'); - // Invite member on the project - await page.goto(utils.DASHBOARD_URL); - await page.waitForSelector('#teamMembers', {visible: true}); - await page.click('#teamMembers'); - await page.waitForSelector(`#btn_${projectName}`, {visible: true}); - await page.click(`#btn_${projectName}`); - await page.waitForSelector('input[name=emails]', {visible: true}); - await page.click('input[name=emails]'); - await page.type('input[name=emails]', member.email); - await page.waitForSelector(`#${role}_${projectName}`, {visible: true}); - await page.click(`#${role}_${projectName}`); - await page.waitForSelector('button[type=submit]', {visible: true}); - await page.click('button[type=submit]'); - await page.waitForSelector('button[type=submit]', {hidden: true}); - await init.logout(page); + await page.goto(utils.DASHBOARD_URL, { + waitUntil: 'networkidle0', + }); + // Rename project + await page.waitForSelector('#projectSettings', { visible: true }); + await page.click('#projectSettings'); + await page.waitForSelector('input[name=project_name]', { + visible: true, + }); + await page.click('input[name=project_name]', { clickCount: 3 }); + await page.type('input[name=project_name]', projectName); + await page.waitForSelector('button[id=btnCreateProject]', { + visible: true, + }); + await page.click('button[id=btnCreateProject]'); - // Login as member - await init.loginUser(member, page); - await init.switchProject(projectName, page); - await page.waitForSelector('#projectSettings', {visible: true}); - await page.click('#projectSettings'); - await page.waitForSelector('#api', {visible: true}); - await page.click('#api a'); - let elementHandle = await page.$('#boxTitle', { - visible: true, - }); - expect(elementHandle).toEqual(null); + // Invite member on the project + await page.goto(utils.DASHBOARD_URL); + await page.waitForSelector('#teamMembers', { visible: true }); + await page.click('#teamMembers'); + await page.waitForSelector(`#btn_${projectName}`, { + visible: true, + }); + await page.click(`#btn_${projectName}`); + await page.waitForSelector('input[name=emails]', { visible: true }); + await page.click('input[name=emails]'); + await page.type('input[name=emails]', member.email); + await page.waitForSelector(`#${role}_${projectName}`, { + visible: true, + }); + await page.click(`#${role}_${projectName}`); + await page.waitForSelector('button[type=submit]', { + visible: true, + }); + await page.click('button[type=submit]'); + await page.waitForSelector('button[type=submit]', { hidden: true }); + await init.logout(page); - elementHandle = await page.$('#errorMessage', { - visible: true, - }); - expect(elementHandle).not.toBe(null); - done(); - + // Login as member + await init.loginUser(member, page); + await init.switchProject(projectName, page); + await page.waitForSelector('#projectSettings', { visible: true }); + await page.click('#projectSettings'); + await page.waitForSelector('#api', { visible: true }); + await page.click('#api a'); + let elementHandle = await page.$('#boxTitle', { + visible: true, + }); + expect(elementHandle).toEqual(null); + + elementHandle = await page.$('#errorMessage', { + visible: true, + }); + expect(elementHandle).not.toBe(null); + done(); }, operationTimeOut ); diff --git a/dashboard/src/test/puppeteer/IncomingRequest.test.js b/dashboard/src/test/puppeteer/IncomingRequest.test.js index 89edb5e15b..8c77954118 100644 --- a/dashboard/src/test/puppeteer/IncomingRequest.test.js +++ b/dashboard/src/test/puppeteer/IncomingRequest.test.js @@ -9,7 +9,7 @@ const email = utils.generateRandomBusinessEmail(); const password = '1234567890'; const user = { email, - password + password, }; const incidentRequest = { name: 'pyInt', @@ -30,66 +30,63 @@ describe('Incoming HTTP Request', () => { page = await browser.newPage(); await page.setUserAgent( 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' - ); - // user - await init.registerUser(user, page); + ); + // user + await init.registerUser(user, page); done(); }); - afterAll(async done => { + afterAll(async done => { await browser.close(); done(); }); test( 'should configure incoming http request to create incident in a project', - async done => { - await page.goto(utils.DASHBOARD_URL); - await page.waitForSelector('#projectSettings', { - visible: true, - }); - await page.click('#projectSettings'); - await page.waitForSelector('#integrations', { visible: true }); - await page.click('#integrations'); + async done => { + await page.goto(utils.DASHBOARD_URL); + await page.waitForSelector('#projectSettings', { + visible: true, + }); + await page.click('#projectSettings'); + await page.waitForSelector('#integrations', { visible: true }); + await page.click('#integrations'); - await page.waitForSelector('#addIncomingRequestBtn', { - visible: true, - }); - await page.click('#addIncomingRequestBtn'); - await page.waitForSelector('#name', { visible: true }); - await page.click('#name'); - await page.type('#name', incidentRequest.name); - await page.$eval('#createIncident', elem => elem.click()); - await page.waitForSelector('#isDefault', { visible: true }); - await page.$eval('#isDefault', elem => elem.click()); - await page.click('#advancedOptionsBtn'); - await page.waitForSelector('#incidentTitle', { visible: true }); - await page.click('#incidentTitle'); - await page.type( - '#incidentTitle', - incidentRequest.incidentTitle - ); - await page.click('#incidentDescription'); - await page.type( - '#incidentDescription', - incidentRequest.incidentDescription - ); + await page.waitForSelector('#addIncomingRequestBtn', { + visible: true, + }); + await page.click('#addIncomingRequestBtn'); + await page.waitForSelector('#name', { visible: true }); + await page.click('#name'); + await page.type('#name', incidentRequest.name); + await page.$eval('#createIncident', elem => elem.click()); + await page.waitForSelector('#isDefault', { visible: true }); + await page.$eval('#isDefault', elem => elem.click()); + await page.click('#advancedOptionsBtn'); + await page.waitForSelector('#incidentTitle', { visible: true }); + await page.click('#incidentTitle'); + await page.type('#incidentTitle', incidentRequest.incidentTitle); + await page.click('#incidentDescription'); + await page.type( + '#incidentDescription', + incidentRequest.incidentDescription + ); - await page.click('#createIncomingRequest'); - await page.waitForSelector('#createIncomingRequest', { - hidden: true, - }); - await page.waitForSelector('#requestOkBtn', { visible: true }); - await page.click('#requestOkBtn'); - await page.waitForSelector('#requestOkBtn', { hidden: true }); + await page.click('#createIncomingRequest'); + await page.waitForSelector('#createIncomingRequest', { + hidden: true, + }); + await page.waitForSelector('#requestOkBtn', { visible: true }); + await page.click('#requestOkBtn'); + await page.waitForSelector('#requestOkBtn', { hidden: true }); + + const firstIncomingHttpRequest = await page.waitForSelector( + '#copyIncomingRequestBtn_0', + { visible: true } + ); + expect(firstIncomingHttpRequest).toBeDefined(); - const firstIncomingHttpRequest = await page.waitForSelector( - '#copyIncomingRequestBtn_0', - { visible: true } - ); - expect(firstIncomingHttpRequest).toBeDefined(); - done(); }, operationTimeOut @@ -97,33 +94,33 @@ describe('Incoming HTTP Request', () => { test( 'should update an incoming http request in a project', - async done => { - await page.goto(utils.DASHBOARD_URL); - await page.waitForSelector('#projectSettings', { - visible: true, - }); - await page.click('#projectSettings'); - await page.waitForSelector('#integrations', { visible: true }); - await page.click('#integrations'); + async done => { + await page.goto(utils.DASHBOARD_URL); + await page.waitForSelector('#projectSettings', { + visible: true, + }); + await page.click('#projectSettings'); + await page.waitForSelector('#integrations', { visible: true }); + await page.click('#integrations'); - await page.waitForSelector('#editIncomingRequestBtn_0', { - visible: true, - }); - await page.click('#editIncomingRequestBtn_0'); - await page.waitForSelector('#name', { visible: true }); - await page.click('#name', { clickCount: 3 }); - // change the name of the incoming http request - await page.type('#name', 'newName'); - await page.click('#editIncomingRequest'); - await page.waitForSelector('#editIncomingRequest', { - hidden: true, - }); + await page.waitForSelector('#editIncomingRequestBtn_0', { + visible: true, + }); + await page.click('#editIncomingRequestBtn_0'); + await page.waitForSelector('#name', { visible: true }); + await page.click('#name', { clickCount: 3 }); + // change the name of the incoming http request + await page.type('#name', 'newName'); + await page.click('#editIncomingRequest'); + await page.waitForSelector('#editIncomingRequest', { + hidden: true, + }); - const updatedRequest = await page.waitForSelector( - '#incomingRequest_newName', - { visible: true } - ); - expect(updatedRequest).toBeDefined(); + const updatedRequest = await page.waitForSelector( + '#incomingRequest_newName', + { visible: true } + ); + expect(updatedRequest).toBeDefined(); done(); }, operationTimeOut @@ -131,32 +128,32 @@ describe('Incoming HTTP Request', () => { test( 'should delete an incoming http request in a project', - async done => { - await page.goto(utils.DASHBOARD_URL); - await page.waitForSelector('#projectSettings', { - visible: true, - }); - await page.click('#projectSettings'); - await page.waitForSelector('#integrations', { visible: true }); - await page.click('#integrations'); + async done => { + await page.goto(utils.DASHBOARD_URL); + await page.waitForSelector('#projectSettings', { + visible: true, + }); + await page.click('#projectSettings'); + await page.waitForSelector('#integrations', { visible: true }); + await page.click('#integrations'); - await page.waitForSelector('#deleteIncomingRequestBtn_0', { - visible: true, - }); - await page.click('#deleteIncomingRequestBtn_0'); - await page.waitForSelector('#deleteIncomingRequestBtn', { - visible: true, - }); - await page.click('#deleteIncomingRequestBtn'); - await page.waitForSelector('#deleteIncomingRequestBtn', { - hidden: true, - }); + await page.waitForSelector('#deleteIncomingRequestBtn_0', { + visible: true, + }); + await page.click('#deleteIncomingRequestBtn_0'); + await page.waitForSelector('#deleteIncomingRequestBtn', { + visible: true, + }); + await page.click('#deleteIncomingRequestBtn'); + await page.waitForSelector('#deleteIncomingRequestBtn', { + hidden: true, + }); - const noIncomingRequest = await page.waitForSelector( - '#noIncomingRequest', - { visible: true } - ); - expect(noIncomingRequest).toBeDefined(); + const noIncomingRequest = await page.waitForSelector( + '#noIncomingRequest', + { visible: true } + ); + expect(noIncomingRequest).toBeDefined(); done(); }, operationTimeOut diff --git a/dashboard/src/test/puppeteer/MonitorCustomField.test.js b/dashboard/src/test/puppeteer/MonitorCustomField.test.js index 3398943c07..60eb57d990 100644 --- a/dashboard/src/test/puppeteer/MonitorCustomField.test.js +++ b/dashboard/src/test/puppeteer/MonitorCustomField.test.js @@ -16,8 +16,8 @@ const monitorFieldText = { fieldType: 'number', }; const user = { - email, - password + email, + password, }; describe('Monitor Custom Field', () => { @@ -26,33 +26,33 @@ describe('Monitor Custom Field', () => { let cluster; beforeAll(async done => { jest.setTimeout(360000); - + browser = await puppeteer.launch(utils.puppeteerLaunchConfig); page = await browser.newPage(); await page.setUserAgent( 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' - ); + ); // user - await init.registerUser(user, page); + await init.registerUser(user, page); done(); }); - afterAll(async done => { + afterAll(async done => { await browser.close(); done(); }); test( 'should configure monitor custom field in a project', - async done => { - await init.addCustomField(page, monitorFieldText, 'monitor'); + async done => { + await init.addCustomField(page, monitorFieldText, 'monitor'); - const firstCustomField = await page.waitForSelector( - `#customfield_${monitorFieldText.fieldName}`, - { visible: true } - ); - expect(firstCustomField).toBeDefined(); + const firstCustomField = await page.waitForSelector( + `#customfield_${monitorFieldText.fieldName}`, + { visible: true } + ); + expect(firstCustomField).toBeDefined(); done(); }, operationTimeOut @@ -60,45 +60,45 @@ describe('Monitor Custom Field', () => { test( 'should update a monitor custom field in a project', - async done => { - await page.goto(utils.DASHBOARD_URL); - await page.waitForSelector('#projectSettings', { - visible: true, - }); - await page.click('#projectSettings'); - await page.waitForSelector('#more', {visible:true}); - await page.click('#more'); - await page.waitForSelector('#monitor', { visible: true }); - await page.click('#monitor'); - await page.reload({ - waitUntil: 'networkidle0', - }); - await init.gotoTab(2, page); + async done => { + await page.goto(utils.DASHBOARD_URL); + await page.waitForSelector('#projectSettings', { + visible: true, + }); + await page.click('#projectSettings'); + await page.waitForSelector('#more', { visible: true }); + await page.click('#more'); + await page.waitForSelector('#monitor', { visible: true }); + await page.click('#monitor'); + await page.reload({ + waitUntil: 'networkidle0', + }); + await init.gotoTab(2, page); - await page.waitForSelector('#editCustomField_0', { - visible: true, - }); - await page.click('#editCustomField_0'); - await page.waitForSelector('#customFieldForm', { - visible: true, - }); - await page.click('#fieldName', { clickCount: 3 }); - await page.type('#fieldName', monitorFieldNumber.fieldName); - await init.selectByText( - '#fieldType', - monitorFieldNumber.fieldType, - page - ); - await page.click('#updateCustomField'); - await page.waitForSelector('#updateCustomField', { - hidden: true, - }); + await page.waitForSelector('#editCustomField_0', { + visible: true, + }); + await page.click('#editCustomField_0'); + await page.waitForSelector('#customFieldForm', { + visible: true, + }); + await page.click('#fieldName', { clickCount: 3 }); + await page.type('#fieldName', monitorFieldNumber.fieldName); + await init.selectByText( + '#fieldType', + monitorFieldNumber.fieldType, + page + ); + await page.click('#updateCustomField'); + await page.waitForSelector('#updateCustomField', { + hidden: true, + }); - const updatedField = await page.waitForSelector( - `#customfield_${monitorFieldNumber.fieldName}`, - { visible: true } - ); - expect(updatedField).toBeDefined(); + const updatedField = await page.waitForSelector( + `#customfield_${monitorFieldNumber.fieldName}`, + { visible: true } + ); + expect(updatedField).toBeDefined(); done(); }, operationTimeOut @@ -106,38 +106,38 @@ describe('Monitor Custom Field', () => { test( 'should delete a monitor custom field in a project', - async done => { - await page.goto(utils.DASHBOARD_URL); - await page.waitForSelector('#projectSettings', { - visible: true, - }); - await page.click('#projectSettings'); - await page.waitForSelector('#more', {visible:true}); - await page.click('#more'); - await page.waitForSelector('#monitor', { visible: true }); - await page.click('#monitor'); - await page.reload({ - waitUntil: 'networkidle0', - }); - await init.gotoTab(2, page); + async done => { + await page.goto(utils.DASHBOARD_URL); + await page.waitForSelector('#projectSettings', { + visible: true, + }); + await page.click('#projectSettings'); + await page.waitForSelector('#more', { visible: true }); + await page.click('#more'); + await page.waitForSelector('#monitor', { visible: true }); + await page.click('#monitor'); + await page.reload({ + waitUntil: 'networkidle0', + }); + await init.gotoTab(2, page); - await page.waitForSelector('#deleteCustomField_0', { - visible: true, - }); - await page.click('#deleteCustomField_0'); - await page.waitForSelector('#deleteCustomFieldModalBtn', { - visible: true, - }); - await page.click('#deleteCustomFieldModalBtn'); - await page.waitForSelector('#deleteCustomFieldModalBtn', { - hidden: true, - }); + await page.waitForSelector('#deleteCustomField_0', { + visible: true, + }); + await page.click('#deleteCustomField_0'); + await page.waitForSelector('#deleteCustomFieldModalBtn', { + visible: true, + }); + await page.click('#deleteCustomFieldModalBtn'); + await page.waitForSelector('#deleteCustomFieldModalBtn', { + hidden: true, + }); - const noCustomFields = await page.waitForSelector( - '#noCustomFields', - { visible: true } - ); - expect(noCustomFields).toBeDefined(); + const noCustomFields = await page.waitForSelector( + '#noCustomFields', + { visible: true } + ); + expect(noCustomFields).toBeDefined(); done(); }, operationTimeOut diff --git a/dashboard/src/test/puppeteer/MonitorSubProject.test.enterprise.js b/dashboard/src/test/puppeteer/MonitorSubProject.test.enterprise.js index 4088846710..9ef69d7be1 100644 --- a/dashboard/src/test/puppeteer/MonitorSubProject.test.enterprise.js +++ b/dashboard/src/test/puppeteer/MonitorSubProject.test.enterprise.js @@ -9,7 +9,7 @@ const email = utils.generateRandomBusinessEmail(); const password = '1234567890'; const user = { email, - password + password, }; describe('Enterprise Monitor SubProject API', () => { const operationTimeOut = 500000; @@ -21,10 +21,10 @@ describe('Enterprise Monitor SubProject API', () => { page = await browser.newPage(); await page.setUserAgent( 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' - ); + ); // user - await init.registerEnterpriseUser(user, page); - + await init.registerEnterpriseUser(user, page); + done(); }); @@ -36,48 +36,48 @@ describe('Enterprise Monitor SubProject API', () => { test( 'Should create a monitor in sub-project for valid `admin`', async done => { - const subProjectName = utils.generateRandomString(); const componentName = utils.generateRandomString(); const subProjectMonitorName = utils.generateRandomString(); - - await init.adminLogout(page); - await init.loginUser(user, page); - //SubProject is only available for 'Growth Plan and above' - await init.growthPlanUpgrade(page); - await page.reload({ - waitUntil : 'networkidle0' - }); - await page.goto(utils.DASHBOARD_URL, { - waitUntil: 'networkidle0', - }); - // add sub-project - await init.addSubProject(subProjectName, page); + await init.adminLogout(page); + await init.loginUser(user, page); + //SubProject is only available for 'Growth Plan and above' + await init.growthPlanUpgrade(page); + await page.reload({ + waitUntil: 'networkidle0', + }); + await page.goto(utils.DASHBOARD_URL, { + waitUntil: 'networkidle0', + }); - // Create Component first - // Redirects automatically component to details page - await init.addComponent(componentName, page); + // add sub-project + await init.addSubProject(subProjectName, page); - // switch to invited project for new user - await page.waitForSelector('#monitors', {visible:true}); - await page.waitForSelector('#form-new-monitor', {visible:true}); - await page.click('input[id=name]'); - await page.type('input[id=name]', subProjectMonitorName); - await page.click('[data-testId=type_url]'); - await page.waitForSelector('#url', {visible:true}); - await page.click('#url'); - await page.type('#url', 'https://google.com'); - await page.click('button[type=submit]'); + // Create Component first + // Redirects automatically component to details page + await init.addComponent(componentName, page); - let spanElement = await page.waitForSelector( - `#monitor-title-${subProjectMonitorName}`, {visible:true} - ); + // switch to invited project for new user + await page.waitForSelector('#monitors', { visible: true }); + await page.waitForSelector('#form-new-monitor', { visible: true }); + await page.click('input[id=name]'); + await page.type('input[id=name]', subProjectMonitorName); + await page.click('[data-testId=type_url]'); + await page.waitForSelector('#url', { visible: true }); + await page.click('#url'); + await page.type('#url', 'https://google.com'); + await page.click('button[type=submit]'); + + let spanElement = await page.waitForSelector( + `#monitor-title-${subProjectMonitorName}`, + { visible: true } + ); + + spanElement = await spanElement.getProperty('innerText'); + spanElement = await spanElement.jsonValue(); + expect(spanElement).toBe(subProjectMonitorName); - spanElement = await spanElement.getProperty('innerText'); - spanElement = await spanElement.jsonValue(); - expect(spanElement).toBe(subProjectMonitorName); - done(); }, operationTimeOut diff --git a/dashboard/src/test/puppeteer/NewMonitor.test.js b/dashboard/src/test/puppeteer/NewMonitor.test.js index 93a6c54a87..8b6df12c55 100644 --- a/dashboard/src/test/puppeteer/NewMonitor.test.js +++ b/dashboard/src/test/puppeteer/NewMonitor.test.js @@ -9,26 +9,26 @@ const email = utils.generateRandomBusinessEmail(); const password = '1234567890'; const user = { email, - password + password, }; describe('New Monitor API', () => { const operationTimeOut = 500000; let cluster; - beforeAll(async (done) => { + beforeAll(async done => { jest.setTimeout(360000); - + browser = await puppeteer.launch(utils.puppeteerLaunchConfig); page = await browser.newPage(); await page.setUserAgent( 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' - ); - // user - await init.registerUser(user, page); + ); + // user + await init.registerUser(user, page); done(); }); - afterAll(async done => { + afterAll(async done => { await browser.close(); done(); }); @@ -36,44 +36,44 @@ describe('New Monitor API', () => { test( "should show upgrade modal if the current monitor count of a project equals it's monitor limit (Startup plan => 5 Monitors/User)", async done => { - const componentName = utils.generateRandomString(); - // create a component - // Redirects automatically component to details page - await init.addComponent(componentName, page); + const componentName = utils.generateRandomString(); + // create a component + // Redirects automatically component to details page + await init.addComponent(componentName, page); - for (let i = 0; i < 5; i++) { - const monitorName = utils.generateRandomString(); - - await init.addNewMonitorToComponent( - page, - componentName, - monitorName - ); - await page.waitForSelector('.ball-beat', { hidden: true }); - } - // try to add more monitor + for (let i = 0; i < 5; i++) { const monitorName = utils.generateRandomString(); - await page.goto(utils.DASHBOARD_URL); - await page.waitForSelector('#components', { visible: true }); - await page.click('#components'); - await page.waitForSelector('#component0', { visible: true }); - await page.click(`#more-details-${componentName}`); - await page.waitForSelector('#form-new-monitor', { visible: true }); - await page.waitForSelector('input[id=name]', { visible: true }); - await page.click('input[id=name]'); - await page.type('input[id=name]', monitorName); - // Added new URL-Montior - await page.click('[data-testId=type_url]'); - await page.waitForSelector('#url', { visible: true }); - await page.click('#url'); - await page.type('#url', 'https://google.com'); - await page.click('button[type=submit]'); - const pricingPlanModal = await page.waitForSelector( - '#pricingPlanModal', - { visible: true } + await init.addNewMonitorToComponent( + page, + componentName, + monitorName ); - expect(pricingPlanModal).toBeTruthy(); + await page.waitForSelector('.ball-beat', { hidden: true }); + } + // try to add more monitor + const monitorName = utils.generateRandomString(); + await page.goto(utils.DASHBOARD_URL); + await page.waitForSelector('#components', { visible: true }); + await page.click('#components'); + await page.waitForSelector('#component0', { visible: true }); + await page.click(`#more-details-${componentName}`); + await page.waitForSelector('#form-new-monitor', { visible: true }); + await page.waitForSelector('input[id=name]', { visible: true }); + await page.click('input[id=name]'); + await page.type('input[id=name]', monitorName); + // Added new URL-Montior + await page.click('[data-testId=type_url]'); + await page.waitForSelector('#url', { visible: true }); + await page.click('#url'); + await page.type('#url', 'https://google.com'); + await page.click('button[type=submit]'); + + const pricingPlanModal = await page.waitForSelector( + '#pricingPlanModal', + { visible: true } + ); + expect(pricingPlanModal).toBeTruthy(); done(); }, operationTimeOut @@ -83,45 +83,45 @@ describe('New Monitor API', () => { "should show upgrade modal if the current monitor count of a project equals it's monitor limit (Growth plan => 10 Monitors/User)", async done => { const projectName = utils.generateRandomString(); - const componentName = utils.generateRandomString(); - await init.addGrowthProject(projectName, page); - // create a component - // Redirects automatically component to details page - await init.addComponent(componentName, page); + const componentName = utils.generateRandomString(); + await init.addGrowthProject(projectName, page); + // create a component + // Redirects automatically component to details page + await init.addComponent(componentName, page); - for (let i = 0; i < 10; i++) { - const monitorName = utils.generateRandomString(); - - await init.addNewMonitorToComponent( - page, - componentName, - monitorName - ); - await page.waitForSelector('.ball-beat', { hidden: true }); - } - // try to add more monitor + for (let i = 0; i < 10; i++) { const monitorName = utils.generateRandomString(); - await page.goto(utils.DASHBOARD_URL); - await page.waitForSelector('#components', { visible: true }); - await page.click('#components'); - await page.waitForSelector('#component0', { visible: true }); - await page.click(`#more-details-${componentName}`); - await page.waitForSelector('#form-new-monitor', { visible: true }); - await page.waitForSelector('input[id=name]', { visible: true }); - await page.click('input[id=name]'); - await page.type('input[id=name]', monitorName); - // Added new URL-Montior - await page.click('[data-testId=type_url]'); - await page.waitForSelector('#url', { visible: true }); - await page.click('#url'); - await page.type('#url', 'https://google.com'); - await page.click('button[type=submit]'); - const pricingPlanModal = await page.waitForSelector( - '#pricingPlanModal', - { visible: true } + await init.addNewMonitorToComponent( + page, + componentName, + monitorName ); - expect(pricingPlanModal).toBeTruthy(); + await page.waitForSelector('.ball-beat', { hidden: true }); + } + // try to add more monitor + const monitorName = utils.generateRandomString(); + await page.goto(utils.DASHBOARD_URL); + await page.waitForSelector('#components', { visible: true }); + await page.click('#components'); + await page.waitForSelector('#component0', { visible: true }); + await page.click(`#more-details-${componentName}`); + await page.waitForSelector('#form-new-monitor', { visible: true }); + await page.waitForSelector('input[id=name]', { visible: true }); + await page.click('input[id=name]'); + await page.type('input[id=name]', monitorName); + // Added new URL-Montior + await page.click('[data-testId=type_url]'); + await page.waitForSelector('#url', { visible: true }); + await page.click('#url'); + await page.type('#url', 'https://google.com'); + await page.click('button[type=submit]'); + + const pricingPlanModal = await page.waitForSelector( + '#pricingPlanModal', + { visible: true } + ); + expect(pricingPlanModal).toBeTruthy(); done(); }, operationTimeOut @@ -131,46 +131,46 @@ describe('New Monitor API', () => { 'should not show any upgrade modal if the project plan is on Scale plan and above', async done => { const projectName = utils.generateRandomString(); - const componentName = utils.generateRandomString(); - await init.addScaleProject(projectName, page); - // create a component - // Redirects automatically component to details page - await init.addComponent(componentName, page); + const componentName = utils.generateRandomString(); + await init.addScaleProject(projectName, page); + // create a component + // Redirects automatically component to details page + await init.addComponent(componentName, page); - for (let i = 0; i < 15; i++) { - const monitorName = utils.generateRandomString(); - - await init.addNewMonitorToComponent( - page, - componentName, - monitorName - ); - await page.waitForSelector('.ball-beat', { hidden: true }); - } - - // try to add more monitor + for (let i = 0; i < 15; i++) { const monitorName = utils.generateRandomString(); - await page.goto(utils.DASHBOARD_URL); - await page.waitForSelector('#components', { visible: true }); - await page.click('#components'); - await page.waitForSelector('#component0', { visible: true }); - await page.click(`#more-details-${componentName}`); - await page.waitForSelector('#form-new-monitor'); - await page.waitForSelector('input[id=name]'); - await page.click('input[id=name]'); - await page.type('input[id=name]', monitorName); - // Added new URL-Montior - await page.click('[data-testId=type_url]'); - await page.waitForSelector('#url'); - await page.click('#url'); - await page.type('#url', 'https://google.com'); - await page.click('button[type=submit]'); - const pricingPlanModal = await page.waitForSelector( - '#pricingPlanModal', - { hidden: true } + await init.addNewMonitorToComponent( + page, + componentName, + monitorName ); - expect(pricingPlanModal).toBeNull(); + await page.waitForSelector('.ball-beat', { hidden: true }); + } + + // try to add more monitor + const monitorName = utils.generateRandomString(); + await page.goto(utils.DASHBOARD_URL); + await page.waitForSelector('#components', { visible: true }); + await page.click('#components'); + await page.waitForSelector('#component0', { visible: true }); + await page.click(`#more-details-${componentName}`); + await page.waitForSelector('#form-new-monitor'); + await page.waitForSelector('input[id=name]'); + await page.click('input[id=name]'); + await page.type('input[id=name]', monitorName); + // Added new URL-Montior + await page.click('[data-testId=type_url]'); + await page.waitForSelector('#url'); + await page.click('#url'); + await page.type('#url', 'https://google.com'); + await page.click('button[type=submit]'); + + const pricingPlanModal = await page.waitForSelector( + '#pricingPlanModal', + { hidden: true } + ); + expect(pricingPlanModal).toBeNull(); done(); }, operationTimeOut diff --git a/dashboard/src/test/puppeteer/PricingPlan.test.enterprise.js b/dashboard/src/test/puppeteer/PricingPlan.test.enterprise.js index 02cee246aa..18bf6ff101 100644 --- a/dashboard/src/test/puppeteer/PricingPlan.test.enterprise.js +++ b/dashboard/src/test/puppeteer/PricingPlan.test.enterprise.js @@ -10,7 +10,7 @@ const password = '1234567890'; const pageName = utils.generateRandomString(); const user = { email, - password + password, }; describe('Status Page', () => { @@ -19,64 +19,63 @@ describe('Status Page', () => { let cluster; beforeAll(async () => { jest.setTimeout(360000); - + browser = await puppeteer.launch(utils.puppeteerLaunchConfig); page = await browser.newPage(); await page.setUserAgent( 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' ); - // user - await init.registerEnterpriseUser(user, page); - await init.adminLogout(page); + // user + await init.registerEnterpriseUser(user, page); + await init.adminLogout(page); }); - afterAll(async done => { + afterAll(async done => { await browser.close(); done(); }); test( 'should not show upgrade modal if IS_SAAS_SERVICE is false', - async (done) => { - - await init.loginUser(user, page); - //Pricing Plan is selectable for a user under growth plane. - await init.growthPlanUpgrade(page); - await page.reload({ - waitUntil : 'networkidle0' - }); - await page.goto(utils.DASHBOARD_URL, { - waitUntil: 'networkidle0', - }); - await page.$eval('#statusPages', elem => elem.click()); - await page.waitForSelector( - 'button[type="button"] .bs-FileUploadButton', {visible: true} - ); - await page.click('button[type="button"] .bs-FileUploadButton'); - await page.waitForSelector('#name', {visible: true}); - await page.click('#name'); - await page.type('#name', pageName); - await page.click('#btnCreateStatusPage'); - // select the first item from the table row - const rowItem = await page.waitForSelector( - '#statusPagesListContainer > tr', - { visible: true } - ); - rowItem.click(); - await page.waitForSelector('ul#customTabList > li', { - visible: true, - }); - await page.$$eval('ul#customTabList > li', elems => - elems[5].click() // 'isPrivate' is under 'Advanced options' which is the last tab - ); - await page.$eval('input[name="isPrivate"]', elem => - elem.click() - ); + async done => { + await init.loginUser(user, page); + //Pricing Plan is selectable for a user under growth plane. + await init.growthPlanUpgrade(page); + await page.reload({ + waitUntil: 'networkidle0', + }); + await page.goto(utils.DASHBOARD_URL, { + waitUntil: 'networkidle0', + }); + await page.$eval('#statusPages', elem => elem.click()); + await page.waitForSelector( + 'button[type="button"] .bs-FileUploadButton', + { visible: true } + ); + await page.click('button[type="button"] .bs-FileUploadButton'); + await page.waitForSelector('#name', { visible: true }); + await page.click('#name'); + await page.type('#name', pageName); + await page.click('#btnCreateStatusPage'); + // select the first item from the table row + const rowItem = await page.waitForSelector( + '#statusPagesListContainer > tr', + { visible: true } + ); + rowItem.click(); + await page.waitForSelector('ul#customTabList > li', { + visible: true, + }); + await page.$$eval( + 'ul#customTabList > li', + elems => elems[5].click() // 'isPrivate' is under 'Advanced options' which is the last tab + ); + await page.$eval('input[name="isPrivate"]', elem => elem.click()); - const modal = await page.$('#pricingPlanModal'); + const modal = await page.$('#pricingPlanModal'); - expect(modal).toBeNull(); - done(); + expect(modal).toBeNull(); + done(); }, operationTimeOut ); diff --git a/dashboard/src/test/puppeteer/ProjectViewer.test.enterprise.js b/dashboard/src/test/puppeteer/ProjectViewer.test.enterprise.js index 632a11f492..d25ca61db5 100644 --- a/dashboard/src/test/puppeteer/ProjectViewer.test.enterprise.js +++ b/dashboard/src/test/puppeteer/ProjectViewer.test.enterprise.js @@ -14,7 +14,7 @@ const projectViewer = { }; const user = { email, - password + password, }; const role = 'Viewer'; @@ -29,219 +29,231 @@ describe('Sub-Project API', () => { page = await browser.newPage(); await page.setUserAgent( 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' - ); - // user - await init.registerEnterpriseUser(user, page); - await init.createUserFromAdminDashboard(projectViewer, page); + ); + // user + await init.registerEnterpriseUser(user, page); + await init.createUserFromAdminDashboard(projectViewer, page); done(); }); - afterAll(async done => { + afterAll(async done => { await browser.close(); done(); }); test( 'should create a new sub-project', - async done => { - // await page.goto(utils.DASHBOARD_URL, { - // waitUntil: 'networkidle0', - // }); - //Growth Plan is needed for a subproject - await init.growthPlanUpgrade(page); - await page.goto(utils.DASHBOARD_URL, { - waitUntil: 'networkidle0', - }); + async done => { + // await page.goto(utils.DASHBOARD_URL, { + // waitUntil: 'networkidle0', + // }); + //Growth Plan is needed for a subproject + await init.growthPlanUpgrade(page); + await page.goto(utils.DASHBOARD_URL, { + waitUntil: 'networkidle0', + }); - await init.renameProject(newProjectName, page); - await page.goto(utils.DASHBOARD_URL, { - waitUntil: 'networkidle0', - }); - await page.waitForSelector('#projectSettings',{visible:true}); - await page.click('#projectSettings'); - - await page.waitForSelector('#btn_Add_SubProjects', {visible: true}); - await page.click('#btn_Add_SubProjects'); - await page.waitForSelector('#title', {visible: true}); - await page.type('#title', subProjectName); - await page.click('#btnAddSubProjects'); - await page.waitForSelector('#title', { hidden: true }); - const subProjectSelector = await page.waitForSelector( - `#sub_project_name_${subProjectName}`, - { visible: true } - ); + await init.renameProject(newProjectName, page); + await page.goto(utils.DASHBOARD_URL, { + waitUntil: 'networkidle0', + }); + await page.waitForSelector('#projectSettings', { visible: true }); + await page.click('#projectSettings'); - expect( - await ( - await subProjectSelector.getProperty('textContent') - ).jsonValue() - ).toEqual(subProjectName); + await page.waitForSelector('#btn_Add_SubProjects', { + visible: true, + }); + await page.click('#btn_Add_SubProjects'); + await page.waitForSelector('#title', { visible: true }); + await page.type('#title', subProjectName); + await page.click('#btnAddSubProjects'); + await page.waitForSelector('#title', { hidden: true }); + const subProjectSelector = await page.waitForSelector( + `#sub_project_name_${subProjectName}`, + { visible: true } + ); + + expect( + await ( + await subProjectSelector.getProperty('textContent') + ).jsonValue() + ).toEqual(subProjectName); done(); }, operationTimeOut ); - test('should invite viewer to a subproject', async (done) => { - await page.goto(utils.DASHBOARD_URL, { - waitUntil: 'networkidle0', - }); - await page.waitForSelector('#teamMembers', {visible: true}); - await page.click('#teamMembers'); - let prevMemberCount = await page.$eval( - `#count_${subProjectName}`, - elem => elem.textContent - ); - prevMemberCount = Number(prevMemberCount.split(' ')[0]); - await page.waitForSelector(`button[id=btn_${subProjectName}]`, {visible: true}); - await page.click(`button[id=btn_${subProjectName}]`); - await page.waitForSelector(`#frm_${subProjectName}`, {visible: true}); - await page.type('input[name=emails]', email); - await page.click(`#${role}_${subProjectName}`); - await page.waitForSelector(`#btn_modal_${subProjectName}`, {visible: true}); - await page.click(`#btn_modal_${subProjectName}`); - await page.waitForSelector(`#btn_modal_${subProjectName}`, { - hidden: true, - }); - await page.waitForSelector(`#count_${subProjectName}`, {visible: true}); - let memberCount = await page.$eval( - `#count_${subProjectName}`, - elem => elem.textContent - ); - memberCount = Number(memberCount.split(' ')[0]); - expect(memberCount).toEqual(prevMemberCount + 1); - done(); + test('should invite viewer to a subproject', async done => { + await page.goto(utils.DASHBOARD_URL, { + waitUntil: 'networkidle0', + }); + await page.waitForSelector('#teamMembers', { visible: true }); + await page.click('#teamMembers'); + let prevMemberCount = await page.$eval( + `#count_${subProjectName}`, + elem => elem.textContent + ); + prevMemberCount = Number(prevMemberCount.split(' ')[0]); + await page.waitForSelector(`button[id=btn_${subProjectName}]`, { + visible: true, + }); + await page.click(`button[id=btn_${subProjectName}]`); + await page.waitForSelector(`#frm_${subProjectName}`, { visible: true }); + await page.type('input[name=emails]', email); + await page.click(`#${role}_${subProjectName}`); + await page.waitForSelector(`#btn_modal_${subProjectName}`, { + visible: true, + }); + await page.click(`#btn_modal_${subProjectName}`); + await page.waitForSelector(`#btn_modal_${subProjectName}`, { + hidden: true, + }); + await page.waitForSelector(`#count_${subProjectName}`, { + visible: true, + }); + let memberCount = await page.$eval( + `#count_${subProjectName}`, + elem => elem.textContent + ); + memberCount = Number(memberCount.split(' ')[0]); + expect(memberCount).toEqual(prevMemberCount + 1); + done(); }); - test('should invite viewer to a project', async (done) => { - await page.goto(utils.DASHBOARD_URL, { - waitUntil: 'networkidle0', - }); - await page.waitForSelector('#teamMembers', {visible: true}); - await page.click('#teamMembers'); - await page.waitForSelector(`#count_${newProjectName}`, {visible: true}); - let prevMemberCount = await page.$eval( - `#count_${newProjectName}`, - elem => elem.textContent - ); - prevMemberCount = Number(prevMemberCount.split(' ')[0]); + test('should invite viewer to a project', async done => { + await page.goto(utils.DASHBOARD_URL, { + waitUntil: 'networkidle0', + }); + await page.waitForSelector('#teamMembers', { visible: true }); + await page.click('#teamMembers'); + await page.waitForSelector(`#count_${newProjectName}`, { + visible: true, + }); + let prevMemberCount = await page.$eval( + `#count_${newProjectName}`, + elem => elem.textContent + ); + prevMemberCount = Number(prevMemberCount.split(' ')[0]); - await page.waitForSelector(`button[id=btn_${newProjectName}]`, {visible: true}); - await page.click(`button[id=btn_${newProjectName}]`); - await page.waitForSelector(`#frm_${newProjectName}`, {visible: true}); - await page.type('input[name=emails]', projectViewer.email); - await page.click(`#${role}_${newProjectName}`); - await page.waitForSelector(`#btn_modal_${newProjectName}`, {visible: true}); - await page.click(`#btn_modal_${newProjectName}`); - const elem = await page.$('button[id=btnConfirmInvite]'); - elem.click(); - await page.waitForSelector(`#btn_modal_${newProjectName}`, { - hidden: true, - }); - await page.waitForSelector(`#count_${newProjectName}`, {visible: true}); - let memberCount = await page.$eval( - `#count_${newProjectName}`, - elem => elem.textContent - ); - memberCount = Number(memberCount.split(' ')[0]); - expect(memberCount).toEqual(prevMemberCount + 1); - done(); + await page.waitForSelector(`button[id=btn_${newProjectName}]`, { + visible: true, + }); + await page.click(`button[id=btn_${newProjectName}]`); + await page.waitForSelector(`#frm_${newProjectName}`, { visible: true }); + await page.type('input[name=emails]', projectViewer.email); + await page.click(`#${role}_${newProjectName}`); + await page.waitForSelector(`#btn_modal_${newProjectName}`, { + visible: true, + }); + await page.click(`#btn_modal_${newProjectName}`); + const elem = await page.$('button[id=btnConfirmInvite]'); + elem.click(); + await page.waitForSelector(`#btn_modal_${newProjectName}`, { + hidden: true, + }); + await page.waitForSelector(`#count_${newProjectName}`, { + visible: true, + }); + let memberCount = await page.$eval( + `#count_${newProjectName}`, + elem => elem.textContent + ); + memberCount = Number(memberCount.split(' ')[0]); + expect(memberCount).toEqual(prevMemberCount + 1); + done(); }); - test('should create a status page', async (done) => { - await page.goto(utils.DASHBOARD_URL, { - waitUntil: 'networkidle0', - }); - await page.waitForSelector('#statusPages', {visible: true}); - await page.click('#statusPages'); - await page.waitForSelector(`#status_page_count_${newProjectName}`, {visible: true}); - let oldStatusPageCounter = await page.$eval( - `#status_page_count_${newProjectName}`, - elem => elem.textContent - ); - oldStatusPageCounter = Number(oldStatusPageCounter.split(' ')[0]); - await init.addStatusPageToProject( - statusPageName, - newProjectName, - page - ); - await page.waitForSelector(`#status_page_count_${newProjectName}`, {visible: true}); - let statusPageCounter = await page.$eval( - `#status_page_count_${newProjectName}`, - elem => elem.textContent - ); - statusPageCounter = Number(statusPageCounter.split(' ')[0]); - expect(statusPageCounter).toEqual(oldStatusPageCounter + 1); - done(); + test('should create a status page', async done => { + await page.goto(utils.DASHBOARD_URL, { + waitUntil: 'networkidle0', + }); + await page.waitForSelector('#statusPages', { visible: true }); + await page.click('#statusPages'); + await page.waitForSelector(`#status_page_count_${newProjectName}`, { + visible: true, + }); + let oldStatusPageCounter = await page.$eval( + `#status_page_count_${newProjectName}`, + elem => elem.textContent + ); + oldStatusPageCounter = Number(oldStatusPageCounter.split(' ')[0]); + await init.addStatusPageToProject(statusPageName, newProjectName, page); + await page.waitForSelector(`#status_page_count_${newProjectName}`, { + visible: true, + }); + let statusPageCounter = await page.$eval( + `#status_page_count_${newProjectName}`, + elem => elem.textContent + ); + statusPageCounter = Number(statusPageCounter.split(' ')[0]); + expect(statusPageCounter).toEqual(oldStatusPageCounter + 1); + done(); }); test( 'should display subproject status pages to a subproject viewer', - async (done) => { - // Login as viewer - await init.logout(page); - await init.loginUser({ email, password }, page); - await page.waitForSelector('#AccountSwitcherId', {visible: true}); - await page.click('#AccountSwitcherId'); - await page.waitForSelector('#accountSwitcher', {visible: true}); - const element = await page.$( - `#accountSwitcher > div[title=${newProjectName}]` - ); - element.click(); - await page.waitForSelector('#statusPageTable_0', {visible: true}); - const projectStatusPages = await page.$('#statusPageTable'); - expect(projectStatusPages).toEqual(null); + async done => { + // Login as viewer + await init.logout(page); + await init.loginUser({ email, password }, page); + await page.waitForSelector('#AccountSwitcherId', { visible: true }); + await page.click('#AccountSwitcherId'); + await page.waitForSelector('#accountSwitcher', { visible: true }); + const element = await page.$( + `#accountSwitcher > div[title=${newProjectName}]` + ); + element.click(); + await page.waitForSelector('#statusPageTable_0', { visible: true }); + const projectStatusPages = await page.$('#statusPageTable'); + expect(projectStatusPages).toEqual(null); - const subProjectStatusPages = await page.$( - '#statusPageTable_0' - ); - expect(subProjectStatusPages).not.toEqual(null); - done(); + const subProjectStatusPages = await page.$('#statusPageTable_0'); + expect(subProjectStatusPages).not.toEqual(null); + done(); }, operationTimeOut ); test( 'should display project and subproject status pages to project viewers', - async (done) => { - await init.logout(page); - await init.loginUser(projectViewer, page); - await page.waitForSelector('#AccountSwitcherId', {visible: true}); - await page.click('#AccountSwitcherId'); - await page.waitForSelector('#accountSwitcher', {visible: true}); - const element = await page.$( - `#accountSwitcher > div[title=${newProjectName}]` - ); - element.click(); - await page.waitForSelector('#statusPageTable_0', {visible: true}); - const projectStatusPages = await page.$('#statusPageTable'); - expect(projectStatusPages).not.toEqual(null); + async done => { + await init.logout(page); + await init.loginUser(projectViewer, page); + await page.waitForSelector('#AccountSwitcherId', { visible: true }); + await page.click('#AccountSwitcherId'); + await page.waitForSelector('#accountSwitcher', { visible: true }); + const element = await page.$( + `#accountSwitcher > div[title=${newProjectName}]` + ); + element.click(); + await page.waitForSelector('#statusPageTable_0', { visible: true }); + const projectStatusPages = await page.$('#statusPageTable'); + expect(projectStatusPages).not.toEqual(null); - const subProjectStatusPages = await page.$( - '#statusPageTable_0' - ); - expect(subProjectStatusPages).not.toEqual(null); - done(); + const subProjectStatusPages = await page.$('#statusPageTable_0'); + expect(subProjectStatusPages).not.toEqual(null); + done(); }, operationTimeOut ); - test('should redirect viewer to external status page', async (done) => { - await init.logout(page); - await init.loginUser(projectViewer, page); - await page.waitForSelector('#AccountSwitcherId', {visible: true}); - await page.click('#AccountSwitcherId'); - await page.waitForSelector('#accountSwitcher', {visible: true}); - const element = await page.$( - `#accountSwitcher > div[title=${newProjectName}]` - ); - element.click(); - const rowItem = await page.waitForSelector( - '#statusPagesListContainer > tr', - { visible: true } - ); - rowItem.click(); - const statusPage = await page.$(`#cb${statusPageName}`); - expect(statusPage).toEqual(null); - done(); + test('should redirect viewer to external status page', async done => { + await init.logout(page); + await init.loginUser(projectViewer, page); + await page.waitForSelector('#AccountSwitcherId', { visible: true }); + await page.click('#AccountSwitcherId'); + await page.waitForSelector('#accountSwitcher', { visible: true }); + const element = await page.$( + `#accountSwitcher > div[title=${newProjectName}]` + ); + element.click(); + const rowItem = await page.waitForSelector( + '#statusPagesListContainer > tr', + { visible: true } + ); + rowItem.click(); + const statusPage = await page.$(`#cb${statusPageName}`); + expect(statusPage).toEqual(null); + done(); }); }); diff --git a/dashboard/src/test/puppeteer/TeamSubProject.test.enterprise.js b/dashboard/src/test/puppeteer/TeamSubProject.test.enterprise.js index 2e45e3df62..2c639edc00 100644 --- a/dashboard/src/test/puppeteer/TeamSubProject.test.enterprise.js +++ b/dashboard/src/test/puppeteer/TeamSubProject.test.enterprise.js @@ -20,48 +20,54 @@ describe('Enterprise Team SubProject API', () => { beforeAll(async () => { jest.setTimeout(500000); - + browser = await puppeteer.launch(utils.puppeteerLaunchConfig); page = await browser.newPage(); await page.setUserAgent( 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' ); - // Register users - await init.registerEnterpriseUser(user, page); - await init.createUserFromAdminDashboard(newUser, page); - await init.adminLogout(page); + // Register users + await init.registerEnterpriseUser(user, page); + await init.createUserFromAdminDashboard(newUser, page); + await init.adminLogout(page); }); - afterAll(async done => { + afterAll(async done => { await browser.close(); done(); }); test( 'Should add a new user to sub-project (role -> `Member`)', - async (done) => { - const subProjectName = utils.generateRandomString(); + async done => { + const subProjectName = utils.generateRandomString(); - await init.loginUser(user, page); - //SubProject is only available for 'Growth Plan and above' - await init.growthPlanUpgrade(page); - await page.reload({ - waitUntil : 'networkidle0' - }); - await init.addSubProject(subProjectName, page); - const role = 'Member'; + await init.loginUser(user, page); + //SubProject is only available for 'Growth Plan and above' + await init.growthPlanUpgrade(page); + await page.reload({ + waitUntil: 'networkidle0', + }); + await init.addSubProject(subProjectName, page); + const role = 'Member'; - await page.waitForSelector('#teamMembers',{visible: true}); - await page.click('#teamMembers'); - await page.waitForSelector(`#btn_${subProjectName}`,{visible: true}); - await page.click(`#btn_${subProjectName}`); - await page.waitForSelector(`#frm_${subProjectName}`,{visible: true}); - await page.click(`#emails_${subProjectName}`); - await page.type(`#emails_${subProjectName}`, newUser.email); - await page.click(`#${role}_${subProjectName}`); - await page.click(`#btn_modal_${subProjectName}`); - await page.waitForSelector(`#btn_modal_${subProjectName}`,{hidden: true}); - done(); + await page.waitForSelector('#teamMembers', { visible: true }); + await page.click('#teamMembers'); + await page.waitForSelector(`#btn_${subProjectName}`, { + visible: true, + }); + await page.click(`#btn_${subProjectName}`); + await page.waitForSelector(`#frm_${subProjectName}`, { + visible: true, + }); + await page.click(`#emails_${subProjectName}`); + await page.type(`#emails_${subProjectName}`, newUser.email); + await page.click(`#${role}_${subProjectName}`); + await page.click(`#btn_modal_${subProjectName}`); + await page.waitForSelector(`#btn_modal_${subProjectName}`, { + hidden: true, + }); + done(); }, operationTimeOut ); diff --git a/home/server.js b/home/server.js index 3083661699..cc3b09bd1f 100755 --- a/home/server.js +++ b/home/server.js @@ -94,7 +94,8 @@ app.get('/product/public-status-page', function(req, res) { cta: true, blackLogo: false, requestDemoCta: false, - footerCtaText: "Start with Status Pages, expand into everything else. Sign up today." + footerCtaText: + 'Start with Status Pages, expand into everything else. Sign up today.', }); }); @@ -109,7 +110,8 @@ app.get('/product/private-status-page', function(req, res) { cta: true, blackLogo: false, requestDemoCta: false, - footerCtaText: "Start with Status Pages, expand into everything else. Sign up today." + footerCtaText: + 'Start with Status Pages, expand into everything else. Sign up today.', }); }); @@ -277,7 +279,8 @@ app.get('/product/api-monitoring', function(req, res) { cta: true, blackLogo: false, requestDemoCta: false, - footerCtaText: "Start with API monitoring, expand into everything else. Sign up today." + footerCtaText: + 'Start with API monitoring, expand into everything else. Sign up today.', }); }); diff --git a/init-script/scripts/3.0.9200.js b/init-script/scripts/3.0.9200.js index 1f6d374a35..416d3582e4 100644 --- a/init-script/scripts/3.0.9200.js +++ b/init-script/scripts/3.0.9200.js @@ -9,7 +9,7 @@ async function run() { }); for (let i = 0; i < statusPages.length; i++) { let { name } = statusPages[i]; - name = slugify(name || "statuspage"); + name = slugify(name || 'statuspage'); name = `${name}-${generate('1234567890', 8)}`; statusPages[i].slug = name.toLowerCase(); await update( diff --git a/init-script/scripts/3.0.9300.js b/init-script/scripts/3.0.9300.js index 485d8826a3..60b6f3ae14 100644 --- a/init-script/scripts/3.0.9300.js +++ b/init-script/scripts/3.0.9300.js @@ -9,7 +9,7 @@ async function run() { }); for (let i = 0; i < schedules.length; i++) { let { name } = schedules[i]; - name = slugify(name || "schedules"); + name = slugify(name || 'schedules'); name = `${name}-${generate('1234567890', 8)}`; schedules[i].slug = name.toLowerCase(); await update(