From 32750fa2af522e1aea9eb9b9f407fc2de629efa8 Mon Sep 17 00:00:00 2001 From: pal-sig <88981777+pal-sig@users.noreply.github.com> Date: Thu, 2 Dec 2021 18:38:49 +0530 Subject: [PATCH] FEAT(UI): Test case for alerts (#414) * chore(UI): test case is fixed * chore(UI): test case for the alerts is updated --- frontend/cypress/fixtures/defaultRules.json | 28 ++++ .../integration/globalTime/default.spec.ts | 2 +- .../cypress/integration/rules/index.spec.ts | 128 ++++++++++++++++++ frontend/src/pages/EditRules/index.tsx | 12 +- 4 files changed, 163 insertions(+), 7 deletions(-) create mode 100644 frontend/cypress/fixtures/defaultRules.json create mode 100644 frontend/cypress/integration/rules/index.spec.ts diff --git a/frontend/cypress/fixtures/defaultRules.json b/frontend/cypress/fixtures/defaultRules.json new file mode 100644 index 0000000000..bc0ca42ec9 --- /dev/null +++ b/frontend/cypress/fixtures/defaultRules.json @@ -0,0 +1,28 @@ +{ + "status": "success", + "data": { + "rules": [ + { + "labels": { "severity": "warning" }, + "annotations": {}, + "state": "firing", + "name": "First Rule", + "id": 1 + }, + { + "labels": { "severity": "warning" }, + "annotations": {}, + "state": "firing", + "name": "Second Rule", + "id": 2 + }, + { + "labels": { "severity": "P0" }, + "annotations": {}, + "state": "firing", + "name": "Third Rule", + "id": 3 + } + ] + } +} diff --git a/frontend/cypress/integration/globalTime/default.spec.ts b/frontend/cypress/integration/globalTime/default.spec.ts index 249bcf30c6..70e03e9221 100644 --- a/frontend/cypress/integration/globalTime/default.spec.ts +++ b/frontend/cypress/integration/globalTime/default.spec.ts @@ -20,7 +20,7 @@ describe('default time', () => { it('Trace Page default time', () => { cy.checkDefaultGlobalOption({ - route: ROUTES.TRACES, + route: ROUTES.TRACE, }); }); diff --git a/frontend/cypress/integration/rules/index.spec.ts b/frontend/cypress/integration/rules/index.spec.ts new file mode 100644 index 0000000000..0ac59b3052 --- /dev/null +++ b/frontend/cypress/integration/rules/index.spec.ts @@ -0,0 +1,128 @@ +/// + +import ROUTES from 'constants/routes'; + +import defaultRules from '../../fixtures/defaultRules.json'; + +describe('Alerts', () => { + beforeEach(() => { + window.localStorage.setItem('isLoggedIn', 'yes'); + + cy + .intercept('get', '*rules*', { + fixture: 'defaultRules', + }) + .as('defaultRules'); + + cy.visit(Cypress.env('baseUrl') + `${ROUTES.LIST_ALL_ALERT}`); + + cy.wait('@defaultRules'); + }); + + it('Edit Rules Page Failure', async () => { + cy + .intercept('**/rules/**', { + statusCode: 500, + }) + .as('Get Rules Error'); + + cy.get('button.ant-btn.ant-btn-link:nth-child(2)').then((e) => { + const firstDelete = e[0]; + firstDelete.click(); + + cy.waitFor('@Get Rules Error'); + + cy + .window() + .location() + .then((e) => { + expect(e.pathname).to.be.equals(`/alerts/edit/1`); + }); + + cy.findByText('Something went wrong').then((e) => { + expect(e.length).to.be.equals(1); + }); + }); + }); + + it('Edit Rules Page Success', async () => { + const text = 'this is the sample value'; + + cy + .intercept('**/rules/**', { + statusCode: 200, + body: { + data: { + data: text, + }, + }, + }) + .as('Get Rules Success'); + + cy.get('button.ant-btn.ant-btn-link:nth-child(2)').then((e) => { + const firstDelete = e[0]; + firstDelete.click(); + + cy.waitFor('@Get Rules Success'); + + cy.wait(1000); + + cy.findByText('Save').then((e) => { + const [el] = e.get(); + + el.click(); + }); + }); + }); + + it('All Rules are rendered correctly', async () => { + cy + .window() + .location() + .then(({ pathname }) => { + expect(pathname).to.be.equals(ROUTES.LIST_ALL_ALERT); + + cy.get('tbody').then((e) => { + const tarray = e.children().get(); + + expect(tarray.length).to.be.equals(3); + + tarray.forEach(({ children }, index) => { + const name = children[1]?.textContent; + const label = children[2]?.textContent; + + expect(name).to.be.equals(defaultRules.data.rules[index].name); + + const defaultLabels = defaultRules.data.rules[index].labels; + + expect(label).to.be.equals(defaultLabels['severity']); + }); + }); + }); + }); + + it('Rules are Deleted', async () => { + cy + .intercept('**/rules/**', { + body: { + data: 'Deleted', + message: 'Success', + }, + statusCode: 200, + }) + .as('deleteRules'); + + cy.get('button.ant-btn.ant-btn-link:first-child').then((e) => { + const firstDelete = e[0]; + + firstDelete.click(); + }); + + cy.wait('@deleteRules'); + + cy.get('tbody').then((e) => { + const trray = e.children().get(); + expect(trray.length).to.be.equals(2); + }); + }); +}); diff --git a/frontend/src/pages/EditRules/index.tsx b/frontend/src/pages/EditRules/index.tsx index 699b4ac92e..dd4e28e231 100644 --- a/frontend/src/pages/EditRules/index.tsx +++ b/frontend/src/pages/EditRules/index.tsx @@ -2,11 +2,11 @@ import get from 'api/alerts/get'; import Spinner from 'components/Spinner'; import EditRulesContainer from 'container/EditRules'; import useFetch from 'hooks/useFetch'; -import React, { useCallback, useRef } from 'react'; +import React from 'react'; import { useParams } from 'react-router'; import { PayloadProps, Props } from 'types/api/alerts/get'; -const EditRules = () => { +const EditRules = (): JSX.Element => { const { ruleId } = useParams(); const { loading, error, payload, errorMessage } = useFetch< @@ -16,14 +16,14 @@ const EditRules = () => { id: parseInt(ruleId), }); - if (loading || payload === undefined) { - return ; - } - if (error) { return
{errorMessage}
; } + if (loading || payload === undefined) { + return ; + } + return ; };