From f7ac211a193a5846b30f9c370a31f0391b0ef044 Mon Sep 17 00:00:00 2001 From: Mohammed Nihal <57055998+nihal467@users.noreply.github.com> Date: Thu, 9 Nov 2023 17:57:03 +0530 Subject: [PATCH] New Cypress Test | Functionality test of Linking Skill to a User | User Tab (#6568) * linking skill to a user * fixed failure * removed duplicate code in asset module * minor-fix-assertion --- cypress/e2e/assets_spec/assets_manage.cy.ts | 17 ------- cypress/e2e/users_spec/user_manage.cy.ts | 49 +++++++++++++++++-- cypress/pageobject/Users/ManageUserPage.ts | 34 +++++++++++++ src/Components/Common/SkillSelect.tsx | 3 ++ src/Components/Form/AutoCompleteAsync.tsx | 3 ++ src/Components/Users/SkillsSlideOver.tsx | 4 +- .../Users/SkillsSlideOverComponents.tsx | 1 + src/Components/Users/UserProfile.tsx | 5 +- 8 files changed, 94 insertions(+), 22 deletions(-) diff --git a/cypress/e2e/assets_spec/assets_manage.cy.ts b/cypress/e2e/assets_spec/assets_manage.cy.ts index 8b440f68761..164bc239253 100644 --- a/cypress/e2e/assets_spec/assets_manage.cy.ts +++ b/cypress/e2e/assets_spec/assets_manage.cy.ts @@ -117,23 +117,6 @@ describe("Asset", () => { assetPage.verifyDeleteStatus(); }); - it("Verify Facility Asset Page Redirection", () => { - cy.visit("/facility"); - assetSearchPage.typeSearchKeyword(fillFacilityName); - assetSearchPage.pressEnter(); - facilityPage.verifyFacilityBadgeContent(fillFacilityName); - facilityPage.visitAlreadyCreatedFacility(); - facilityPage.clickManageFacilityDropdown(); - facilityPage.clickCreateAssetFacilityOption(); - facilityPage.verifyfacilitycreateassetredirection(); - facilityPage.verifyassetfacilitybackredirection(); - facilityPage.clickManageFacilityDropdown(); - facilityPage.clickviewAssetFacilityOption(); - facilityPage.verifyfacilityviewassetredirection(); - assetFilters.assertFacilityText(fillFacilityName); - facilityPage.verifyassetfacilitybackredirection(); - }); - afterEach(() => { cy.saveLocalStorage(); }); diff --git a/cypress/e2e/users_spec/user_manage.cy.ts b/cypress/e2e/users_spec/user_manage.cy.ts index b7e1e8b53e9..db865dc8126 100644 --- a/cypress/e2e/users_spec/user_manage.cy.ts +++ b/cypress/e2e/users_spec/user_manage.cy.ts @@ -10,10 +10,13 @@ describe("Manage User", () => { const usernametolinkfacilitydoc1 = "dummydoctor4"; const usernametolinkfacilitydoc2 = "dummydoctor5"; const usernametolinkfacilitydoc3 = "dummydoctor6"; - const usernametolinkskill = "devdistrictadmin"; + const usernametolinkskill = "devdoctor"; + const usernameforworkinghour = "devdistrictadmin"; const usernamerealname = "Dummy Doctor"; const facilitytolinkusername = "Dummy Shifting Center"; + const facilitytolinkskill = "Dummy Facility 1"; const workinghour = "23"; + const linkedskill = "General Medicine"; before(() => { loginPage.loginAsDisctrictAdmin(); @@ -25,10 +28,50 @@ describe("Manage User", () => { cy.awaitUrl("/users"); }); - it("add working hour for a user and verify its reflection in card and user profile", () => { - // verify mandatory field error and select working hour for a user + it("linking skills for a users and verify its reflection in profile", () => { + // select the district user and select one skill link and verify its profile reflection + userPage.typeInSearchInput(usernameforworkinghour); + userPage.checkUsernameText(usernameforworkinghour); + manageUserPage.clicklinkedskillbutton(); + manageUserPage.typeSkill(linkedskill); + manageUserPage.selectFacilityFromDropdown(linkedskill); + manageUserPage.clickAddSkillButton(); + manageUserPage.clickCloseSlideOver(); + manageUserPage.navigateToProfile(); + manageUserPage.assertSkillInAlreadyLinkedSkills(linkedskill); + }); + + it("linking skills for a doctor users and verify its reflection in doctor connect", () => { + // select a doctor user and link and unlink same skill twice and verify the badge is only shown once in doctor connect userPage.typeInSearchInput(usernametolinkskill); userPage.checkUsernameText(usernametolinkskill); + manageUserPage.clicklinkedskillbutton(); + manageUserPage.typeSkill(linkedskill); + manageUserPage.selectFacilityFromDropdown(linkedskill); + manageUserPage.clickAddSkillButton(); + manageUserPage.clickCloseSlideOver(); + cy.wait(5000); // temporary hack to fix the failure + manageUserPage.clicklinkedskillbutton(); + manageUserPage.assertSkillInAddedUserSkills(linkedskill); + manageUserPage.clickUnlinkSkill(); + manageUserPage.clickSubmit(); + manageUserPage.typeSkill(linkedskill); + manageUserPage.selectFacilityFromDropdown(linkedskill); + manageUserPage.clickAddSkillButton(); + manageUserPage.clickCloseSlideOver(); + // verifying the doctor connect + manageUserPage.navigateToFacility(); + manageUserPage.typeFacilitySearch(facilitytolinkskill); + manageUserPage.assertFacilityInCard(facilitytolinkskill); + manageUserPage.clickFacilityPatients(); + manageUserPage.clickDoctorConnectButton(); + manageUserPage.assertSkillIndoctorconnect(linkedskill); + }); + + it("add working hour for a user and verify its reflection in card and user profile", () => { + // verify mandatory field error and select working hour for a user + userPage.typeInSearchInput(usernameforworkinghour); + userPage.checkUsernameText(usernameforworkinghour); manageUserPage.clicksetaveragehourbutton(); manageUserPage.clearweeklyhourfield(); manageUserPage.clickSubmit(); diff --git a/cypress/pageobject/Users/ManageUserPage.ts b/cypress/pageobject/Users/ManageUserPage.ts index 70e617f7e35..1b340c875ee 100644 --- a/cypress/pageobject/Users/ManageUserPage.ts +++ b/cypress/pageobject/Users/ManageUserPage.ts @@ -103,10 +103,44 @@ export class ManageUserPage { cy.get("#facility-patients").click(); } + clicklinkedskillbutton() { + cy.get("#skills").click(); + } + + clickAddSkillButton() { + cy.intercept("GET", "**/api/v1/skill/**").as("getSkills"); + cy.get("#add-skill-button").click(); + cy.wait("@getSkills").its("response.statusCode").should("eq", 200); + } + + assertSkillInAlreadyLinkedSkills(skillName) { + cy.get("#already-linked-skills") + .contains(skillName) + .should("have.length", 1); + } + + assertSkillIndoctorconnect(skillName) { + cy.get("#doctor-connect-home-doctor") + .contains(skillName) + .should("have.length", 1); + } + + typeSkill(skillName) { + cy.get("#select-skill").click().type(skillName); + } + clickDoctorConnectButton() { cy.get("#doctor-connect-patient-button").click(); } + clickUnlinkSkill() { + cy.get("#unlink-skill").click(); + } + + assertSkillInAddedUserSkills(skillName) { + cy.get("#added-user-skills").should("contain", skillName); + } + assertDoctorConnectVisibility(realName) { cy.get("#doctor-connect-home-doctor").should("contain.text", realName); cy.get("#doctor-connect-remote-doctor").should("contain.text", realName); diff --git a/src/Components/Common/SkillSelect.tsx b/src/Components/Common/SkillSelect.tsx index 5ec97974879..3257971d03c 100644 --- a/src/Components/Common/SkillSelect.tsx +++ b/src/Components/Common/SkillSelect.tsx @@ -5,6 +5,7 @@ import AutoCompleteAsync from "../Form/AutoCompleteAsync"; import { SkillObjectModel } from "../Users/models"; interface SkillSelectProps { + id?: string; name: string; errors?: string | undefined; className?: string; @@ -20,6 +21,7 @@ interface SkillSelectProps { export const SkillSelect = (props: SkillSelectProps) => { const { + id, name, multiple, selected, @@ -64,6 +66,7 @@ export const SkillSelect = (props: SkillSelectProps) => { return ( Promise | undefined; @@ -31,6 +32,7 @@ interface Props { const AutoCompleteAsync = (props: Props) => { const { + id, name, selected, fetchData, @@ -82,6 +84,7 @@ const AutoCompleteAsync = (props: Props) => {
{ {!isLoading && (
{ username={username} /> addSkill(username, selectedSkill)} className="w-6rem" @@ -146,7 +148,7 @@ export default ({ show, setShow, username }: IProps) => {
) : ( -
+
{hasSkills ? ( {skill.skill_object.name}
-
+
{details.skills && details.skills.length ? details.skills?.map((skill: SkillObjectModel) => { return (