From e3859fdc3bb30a997d5f562b9c322ec2662e7004 Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Tue, 2 Dec 2025 10:36:23 +0530 Subject: [PATCH 01/23] MOSIP-43846 : Reporting Enhancements for Admin UI Automation Signed-off-by: Bhuvanashree B S --- .../adminui/testcase/BlockListTest.java | 43 +- .../adminui/testcase/BulkUploadTest.java | 56 +- .../testrig/adminui/testcase/CenterTest.java | 107 ++-- .../adminui/testcase/CenterTypeTest.java | 43 +- .../testcase/DeviceSpecificationTest.java | 50 +- .../testrig/adminui/testcase/DeviceTest.java | 48 +- .../adminui/testcase/DeviceTypesTest.java | 45 +- .../testcase/DocumentCategoriesTest.java | 51 +- .../adminui/testcase/DocumentTypes.java | 42 +- .../adminui/testcase/DynamicFieldTest.java | 38 +- .../adminui/testcase/HolidaysTest.java | 45 +- .../testcase/MachineSpecificationTest.java | 47 +- .../testrig/adminui/testcase/MachineTest.java | 68 ++- .../adminui/testcase/MachineTypesTest.java | 40 +- .../adminui/testcase/TemplateTest.java | 50 +- .../utility/AdminExtentReportManager.java | 233 ++++++++ .../adminui/utility/AdminTestListener.java | 78 +++ .../testrig/adminui/utility/BaseClass.java | 79 ++- .../testrig/adminui/utility/Commons.java | 505 ++++++++++-------- .../testrig/adminui/utility/TestRunner.java | 1 + 20 files changed, 1128 insertions(+), 541 deletions(-) create mode 100644 uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminExtentReportManager.java create mode 100644 uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/BlockListTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/BlockListTest.java index a44cf4b5..bdce18ad 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/BlockListTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/BlockListTest.java @@ -7,27 +7,38 @@ import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; - public class BlockListTest extends BaseClass { @Test public void blocklistedwordsCRUD() throws IOException { - String blocklistedWord=ConfigManager.getdummyData(); - String idBlocklisted="admin/masterdata/blocklisted-words/view"; - Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']")); - Commons.click(driver(), By.id(idBlocklisted)); - Commons.click(driver(), By.id("Create")); - Commons.enter(driver(), By.id("word"), blocklistedWord); - Commons.enter(driver(), By.id("description"), data); - Commons.create(driver()); - Commons.filter(driver(), By.id("word"), blocklistedWord); - Commons.edit(driver(),blocklistedWord+"auto",By.id("word")); - Commons.filter(driver(), By.id("word"), blocklistedWord+"A"); - Commons.activate(driver()); - Commons.edit(driver(),blocklistedWord+"B",By.id("word")); - Commons.filter(driver(), By.id("word"), blocklistedWord+"B"); - Commons.deactivate(driver()); + String blocklistedWord = ConfigManager.getdummyData(); + String idBlocklisted = "admin/masterdata/blocklisted-words/view"; + + Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']"), "Clicked on Master Data menu"); + + Commons.click(driver(), By.id(idBlocklisted), "Opened Blocklisted Words page"); + + Commons.click(driver(), By.id("Create"), "Clicked on Create Blocklisted Word button"); + + Commons.enter(driver(), By.id("word"), blocklistedWord, "Entered new blocklisted word"); + + Commons.enter(driver(), By.id("description"), data, "Entered description for blocklisted word"); + + Commons.create(driver(), "Submitted Blocklisted Word creation"); + + Commons.filter(driver(), By.id("word"), blocklistedWord, "Filtered using created word"); + + Commons.edit(driver(), blocklistedWord + "auto", By.id("word"), "Edited blocklisted word first time"); + + Commons.filter(driver(), By.id("word"), blocklistedWord + "A", "Filtered using updated word"); + + Commons.activate(driver(), "Activated the word record"); + + Commons.edit(driver(), blocklistedWord + "B", By.id("word"), "Edited blocklisted word second time"); + + Commons.filter(driver(), By.id("word"), blocklistedWord + "B", "Filtered after second update"); + Commons.deactivate(driver(), "Deactivated the word record"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/BulkUploadTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/BulkUploadTest.java index 35f7a292..8ed5fcf3 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/BulkUploadTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/BulkUploadTest.java @@ -11,40 +11,50 @@ import io.mosip.testrig.adminui.utility.Screenshot; import io.mosip.testrig.adminui.utility.TestRunner; - public class BulkUploadTest extends BaseClass { - private static final Logger logger = Logger.getLogger(BulkUploadTest.class); + private static final Logger logger = Logger.getLogger(BulkUploadTest.class); - @Test (dataProvider = "data-provider") + @Test(dataProvider = "data-provider") public void bulkUploadCRUD(String table) throws Exception { - Commons.click(driver(),By.id("admin/bulkupload")); - Commons.click(driver(),By.xpath("//a[@href='#/admin/bulkupload/masterdataupload']")); + Commons.click(driver(), By.id("admin/bulkupload"), "Clicked on Bulk Upload menu"); + Commons.click(driver(), By.xpath("//a[@href='#/admin/bulkupload/masterdataupload']"), + "Opened Master Data Upload page"); + + for (int count = 0; count <= 2; count++) { + + Commons.click(driver(), By.id("Upload Data"), "Clicked on Upload Data button"); - for(int count=0;count<=2;count++) { - Commons.click(driver(),By.id("Upload Data")); + if (count == 0) + Commons.dropdown(driver(), By.id("operation"), By.id("Insert"), "Selected Insert operation"); + if (count == 1) + Commons.dropdown(driver(), By.id("operation"), By.id("Update"), "Selected Update operation"); + if (count == 2) + Commons.dropdown(driver(), By.id("operation"), By.id("Delete"), "Selected Delete operation"); - if(count==0) Commons.dropdown(driver(),By.id("operation"),By.id("Insert")); - if(count==1) Commons.dropdown(driver(),By.id("operation"),By.id("Update")); - if(count==2) Commons.dropdown(driver(),By.id("operation"),By.id("Delete")); - Commons.dropdown(driver(),By.id("tableName"),By.id(table)); - String filePath = TestRunner.getResourcePath()+ "//BulkUploadFiles//"+ ConfigManager.getloginlang()+"//"+table+".csv"; - Commons.enter( driver(), By.id("fileInput"), filePath); + Commons.dropdown(driver(), By.id("tableName"), By.id(table), "Selected table: " + table); - Commons.click(driver(),By.xpath("//button[@id='createButton']")); - Commons.click(driver(),By.id("confirmpopup")); + String filePath = TestRunner.getResourcePath() + "//BulkUploadFiles//" + ConfigManager.getloginlang() + "//" + + table + ".csv"; + Commons.enter(driver(), By.id("fileInput"), filePath, "Entered file path for table: " + table); + + Commons.click(driver(), By.xpath("//button[@id='createButton']"), "Clicked on Create/Upload button"); + Commons.click(driver(), By.id("confirmpopup"), "Confirmed the upload in popup"); Commons.wait(2000); - String divText=driver().findElement(By.xpath("//div[@class='mat-dialog-content']//div")).getText(); - String divTextArr[]=divText.split(":"); - logger.info(divTextArr[1].trim()); - Commons.click(driver(),By.id("confirmmessagepopup")); //DONE + + String divText = driver().findElement(By.xpath("//div[@class='mat-dialog-content']//div")).getText(); + String divTextArr[] = divText.split(":"); + logger.info("Bulk Upload Result: " + divTextArr[1].trim()); + + Commons.click(driver(), By.id("confirmmessagepopup"), "Closed the confirmation message popup"); Commons.wait(2000); - String transId=driver().findElement(By.xpath("//table[@class='mat-table']//tr[2]//td[1]")).getText(); - String status=driver().findElement(By.xpath("//table[@class='mat-table']//tr[2]//td[5]")).getText(); - Reporter.log("

"); + String transId = driver().findElement(By.xpath("//table[@class='mat-table']//tr[2]//td[1]")).getText(); + String status = driver().findElement(By.xpath("//table[@class='mat-table']//tr[2]//td[5]")).getText(); + Reporter.log("

"); Assert.assertTrue(transId.equals(divTextArr[1].trim())); - Assert.assertTrue(status.equalsIgnoreCase("COMPLETED"),"Status Should be COMPLETED"); + Assert.assertTrue(status.equalsIgnoreCase("COMPLETED"), "Status Should be COMPLETED"); } } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/CenterTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/CenterTest.java index 54e00eec..067c0db0 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/CenterTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/CenterTest.java @@ -7,56 +7,75 @@ import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.BaseTestCaseFunc; import io.mosip.testrig.adminui.utility.Commons; -public class CenterTest extends BaseClass{ + +public class CenterTest extends BaseClass { @Test public void centerCRUD() throws Exception { - int totalHierarchyLevels=BaseTestCaseFunc.getHierarchyNumbers(); - Reporter.log("centerCRUD",true); - String holidayDate=ConfigManager.getholidayDateCenter(); - Commons.click(driver(),By.id("admin/resources")); - Commons.click(driver(),By.id("/admin/resources/centers")); - Commons.click(driver(), By.id("Create Center")); - Commons.enter(driver(), By.id("name"), data); - Commons.dropdown(driver(),By.id("centerTypeCode")); - Commons.enter(driver(), By.id("contactPerson"),data); - Commons.enter(driver(),By.id("contactPhone"),data); - Commons.enter(driver(),By.id("longitude"),"1.1234"); - Commons.enter(driver(),By.id("latitude"),"2.2345"); - Commons.enter(driver(),By.id("addressLine1"),data); - Commons.enter(driver(),By.id("addressLine2"),data); - Commons.enter(driver(),By.id("addressLine3"),data); - for(int i=1;i<=totalHierarchyLevels;i++) { - Commons.dropdown(driver(), By.xpath("(//*[@id='fieldName'])["+i+"]")); + int totalHierarchyLevels = BaseTestCaseFunc.getHierarchyNumbers(); + Reporter.log("centerCRUD", true); + String holidayDate = ConfigManager.getholidayDateCenter(); + + Commons.click(driver(), By.id("admin/resources"), "Clicked on Resources menu"); + Commons.click(driver(), By.id("/admin/resources/centers"), "Opened Centers page"); + Commons.click(driver(), By.id("Create Center"), "Clicked on Create Center button"); + + Commons.enter(driver(), By.id("name"), data, "Entered Center name"); + Commons.dropdown(driver(), By.id("centerTypeCode"), "Selected Center Type"); + Commons.enter(driver(), By.id("contactPerson"), data, "Entered contact person"); + Commons.enter(driver(), By.id("contactPhone"), data, "Entered contact phone"); + Commons.enter(driver(), By.id("longitude"), "1.1234", "Entered longitude"); + Commons.enter(driver(), By.id("latitude"), "2.2345", "Entered latitude"); + Commons.enter(driver(), By.id("addressLine1"), data, "Entered address line 1"); + Commons.enter(driver(), By.id("addressLine2"), data, "Entered address line 2"); + Commons.enter(driver(), By.id("addressLine3"), data, "Entered address line 3"); + + for (int i = 1; i <= totalHierarchyLevels; i++) { + Commons.dropdown(driver(), By.xpath("(//*[@id='fieldName'])[" + i + "]"), "Selected hierarchy level " + i); } - try{ - Commons.dropdown(driver(), By.id("zone")); - }catch(Exception e) { + try { + Commons.dropdown(driver(), By.id("zone"), "Selected Zone"); + } catch (Exception e) { + Reporter.log("Zone dropdown not available", true); } - Commons.dropdown(driver(), By.id("holidayZone")); - Commons.enter(driver(),By.id("noKiosk"),"10"); - Commons.dropdown(driver(),By.id("processingTime"),"45"); - Commons.dropdown(driver(),By.id("startTime"),"9:00 AM"); - Commons.dropdown(driver(),By.id("endTime"),"5:00 PM"); - Commons.dropdown(driver(),By.id("lunchStartTime"),"1:00 PM"); - Commons.dropdown(driver(),By.id("lunchEndTime"),"2:00 PM"); - Commons.click(driver(),By.cssSelector(".mat-list-item:nth-child(1) .mat-pseudo-checkbox")); - Commons.click(driver(),By.cssSelector(".mat-list-item:nth-child(2) .mat-pseudo-checkbox")); - Commons.click(driver(),By.cssSelector(".mat-list-item:nth-child(3) > .mat-list-item-content")); - Commons.click(driver(),By.cssSelector(".mat-list-item:nth-child(4) > .mat-list-item-content")); - Commons.click(driver(),By.cssSelector(".mat-list-item:nth-child(5) > .mat-list-item-content")); - Commons.calendar(holidayDate); - Commons.click(driver(), By.id("createExceptionalHoliday")); - Commons.createRes(driver()); - Commons.filterCenter(driver(), By.id("name"), data); - Commons.editCenter(driver(),data+1,By.id("name")); - Commons.filterCenter(driver(), By.id("name"), data+1); - Commons.activate(driver()); - Commons.editCenter(driver(),data+2,By.id("name")); - Commons.filterCenter(driver(), By.id("name"), data+2); - Commons.deactivate(driver()); - Commons.decommission(driver()); + + Commons.dropdown(driver(), By.id("holidayZone"), "Selected Holiday Zone"); + Commons.enter(driver(), By.id("noKiosk"), "10", "Entered number of kiosks"); + Commons.dropdown(driver(), By.id("processingTime"), "45", "Selected processing time"); + Commons.dropdown(driver(), By.id("startTime"), "9:00 AM", "Selected start time"); + Commons.dropdown(driver(), By.id("endTime"), "5:00 PM", "Selected end time"); + Commons.dropdown(driver(), By.id("lunchStartTime"), "1:00 PM", "Selected lunch start time"); + Commons.dropdown(driver(), By.id("lunchEndTime"), "2:00 PM", "Selected lunch end time"); + + Commons.click(driver(), By.cssSelector(".mat-list-item:nth-child(1) .mat-pseudo-checkbox"), + "Selected first service checkbox"); + Commons.click(driver(), By.cssSelector(".mat-list-item:nth-child(2) .mat-pseudo-checkbox"), + "Selected second service checkbox"); + Commons.click(driver(), By.cssSelector(".mat-list-item:nth-child(3) > .mat-list-item-content"), + "Selected third service"); + Commons.click(driver(), By.cssSelector(".mat-list-item:nth-child(4) > .mat-list-item-content"), + "Selected fourth service"); + Commons.click(driver(), By.cssSelector(".mat-list-item:nth-child(5) > .mat-list-item-content"), + "Selected fifth service"); + + Commons.calendar(holidayDate, "Selected exceptional holiday date"); + Commons.click(driver(), By.id("createExceptionalHoliday"), "Created exceptional holiday"); + + Commons.createRes(driver(), "Submitted Center creation"); + Commons.filterCenter(driver(), By.id("name"), data, "Filtered using created Center name"); + + Commons.editCenter(driver(), data + 1, By.id("name"), "Edited Center name first time"); + Commons.filterCenter(driver(), By.id("name"), data + 1, "Filtered using updated Center name first time"); + + Commons.activate(driver(), "Activated the Center"); + + Commons.editCenter(driver(), data + 2, By.id("name"), "Edited Center name second time"); + Commons.filterCenter(driver(), By.id("name"), data + 2, "Filtered using updated Center name second time"); + + Commons.deactivate(driver(), "Deactivated the Center"); + Commons.decommission(driver(), "Decommissioned the Center"); } + } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/CenterTypeTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/CenterTypeTest.java index c1c7a741..245717cc 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/CenterTypeTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/CenterTypeTest.java @@ -1,34 +1,37 @@ package io.mosip.testrig.adminui.testcase; + import java.io.IOException; import org.openqa.selenium.By; import org.testng.annotations.Test; - import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class CenterTypeTest extends BaseClass{ + +public class CenterTypeTest extends BaseClass { @Test public void centerTypeCRUD() throws IOException { - String idCenterTypeCard="admin/masterdata/center-type/view"; - - Commons.click(driver(),By.xpath("//a[@href='#/admin/masterdata']")); - Commons.click(driver(),By.id(idCenterTypeCard)); - Commons.click(driver(),By.id("Create")); - Commons.enter(driver(),By.id("code"),data); - Commons.enter(driver(),By.id("name"),data); - Commons.enter(driver(),By.id("descr"),data); - Commons.create(driver()); - Commons.filter(driver(), By.id("name"), data); - - Commons.edit(driver(),data+1,By.id("name")); - Commons.filter(driver(), By.id("name"), data+1); - - Commons.activate(driver()); - Commons.edit(driver(),data+2,By.id("name")); - Commons.filter(driver(), By.id("name"), data+2); - Commons.deactivate(driver()); + String idCenterTypeCard = "admin/masterdata/center-type/view"; + + Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']"), "Clicked on Master Data menu"); + Commons.click(driver(), By.id(idCenterTypeCard), "Opened Center Type page"); + Commons.click(driver(), By.id("Create"), "Clicked on Create Center Type button"); + + Commons.enter(driver(), By.id("code"), data, "Entered code for new Center Type"); + Commons.enter(driver(), By.id("name"), data, "Entered name for new Center Type"); + Commons.enter(driver(), By.id("descr"), data, "Entered description for new Center Type"); + + Commons.create(driver(), "Submitted new Center Type creation"); + Commons.filter(driver(), By.id("name"), data, "Filtered using created Center Type name"); + + Commons.edit(driver(), data + 1, By.id("name"), "Edited Center Type name first time"); + Commons.filter(driver(), By.id("name"), data + 1, "Filtered using updated Center Type name"); + + Commons.activate(driver(), "Activated the Center Type"); + Commons.edit(driver(), data + 2, By.id("name"), "Edited Center Type name second time"); + Commons.filter(driver(), By.id("name"), data + 2, "Filtered using updated Center Type name second time"); + Commons.deactivate(driver(), "Deactivated the Center Type"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceSpecificationTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceSpecificationTest.java index a588464f..2df08649 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceSpecificationTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceSpecificationTest.java @@ -1,34 +1,40 @@ package io.mosip.testrig.adminui.testcase; + import java.io.IOException; import org.openqa.selenium.By; import org.testng.annotations.Test; import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class DeviceSpecificationTest extends BaseClass{ - +public class DeviceSpecificationTest extends BaseClass { @Test public void deviceSpecCRUD() throws IOException { - String devicespec="admin/masterdata/device-specs/view"; - Commons.click(driver(),By.xpath("//a[@href='#/admin/masterdata']")); - Commons.click(driver(),By.id(devicespec)); - Commons.click(driver(),By.id("Create")); - - Commons.enter(driver(),By.id("name"),data); - Commons.enter(driver(),By.id("description"),data); - Commons.enter(driver(),By.id("brand"),data); - Commons.enter(driver(),By.id("model"),data); - Commons.enter(driver(),By.id("minDriverversion"),data); - Commons.dropdown(driver(),By.id("deviceTypeCode")); - - Commons.create(driver()); - Commons.filter(driver(), By.id("name"), data); - Commons.edit(driver(),data+1,By.id("name")); - Commons.filter(driver(), By.id("name"), data+1); - Commons.activate(driver()); - Commons.edit(driver(),data+2,By.id("name")); - Commons.filter(driver(), By.id("name"), data+2); - Commons.deactivate(driver()); + String devicespec = "admin/masterdata/device-specs/view"; + Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']"), "Clicked on Master Data menu"); + Commons.click(driver(), By.id(devicespec), "Opened Device Specification page"); + Commons.click(driver(), By.id("Create"), "Clicked on Create Device Specification"); + + Commons.enter(driver(), By.id("name"), data, "Entered Device Name"); + Commons.enter(driver(), By.id("description"), data, "Entered Device Description"); + Commons.enter(driver(), By.id("brand"), data, "Entered Device Brand"); + Commons.enter(driver(), By.id("model"), data, "Entered Device Model"); + Commons.enter(driver(), By.id("minDriverversion"), data, "Entered Minimum Driver Version"); + + Commons.dropdown(driver(), By.id("deviceTypeCode"), "Selected Device Type"); + + Commons.create(driver(), "Saved the new Device Specification"); + + Commons.filter(driver(), By.id("name"), data, "Filtered Device Spec by name"); + + Commons.edit(driver(), data + 1, By.id("name"), "Edited Device Name"); + Commons.filter(driver(), By.id("name"), data + 1, "Filtered again after edit"); + + Commons.activate(driver(), "Activated Device Specification"); + + Commons.edit(driver(), data + 2, By.id("name"), "Edited Device Name again after activation"); + Commons.filter(driver(), By.id("name"), data + 2, "Filtered again after second edit"); + + Commons.deactivate(driver(), "Deactivated Device Specification"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceTest.java index 69eab082..39a3fd54 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceTest.java @@ -1,6 +1,5 @@ package io.mosip.testrig.adminui.testcase; - import java.io.IOException; import org.openqa.selenium.By; @@ -9,31 +8,38 @@ import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class DeviceTest extends BaseClass{ +public class DeviceTest extends BaseClass { @Test public void deviceCRUD() throws InterruptedException, IOException { String validityDate; validityDate = ConfigManager.getvalidityDate(); - Commons.click(driver(),By.id("admin/resources")); - Commons.click(driver(),By.id("/admin/resources/devices")); - Commons.click(driver(),By.id("Create Device")); - Commons.enter(driver(), By.id("name"),data); - Commons.enter(driver(), By.id("serialNumber"),data); - Commons.enter(driver(), By.id("macAddress"),"1.1234"); - Commons.enter(driver(), By.id("ipAddress"),"2.2345"); - Commons.calendar(validityDate); - Commons.dropdown(driver(),By.id("deviceSpecId")); - Commons.dropdown(driver(),By.id("regCenterId")); - Commons.createRes(driver()); - Commons.filter(driver(), By.id("name"), data); - Commons.editRes(driver(),data+1,By.id("name")); - Commons.filter(driver(), By.id("name"), data+1); - Commons.activate(driver()); - Commons.editRes(driver(),data+2,By.id("name")); - Commons.filter(driver(), By.id("name"), data+2); - Commons.deactivate(driver()); - Commons.decommission(driver()); + Commons.click(driver(), By.id("admin/resources"), "Clicked on Resources menu"); + Commons.click(driver(), By.id("/admin/resources/devices"), "Opened Devices page"); + Commons.click(driver(), By.id("Create Device"), "Clicked on Create Device"); + + Commons.enter(driver(), By.id("name"), data, "Entered Device Name"); + Commons.enter(driver(), By.id("serialNumber"), data, "Entered Serial Number"); + Commons.enter(driver(), By.id("macAddress"), "1.1234", "Entered MAC Address"); + Commons.enter(driver(), By.id("ipAddress"), "2.2345", "Entered IP Address"); + + Commons.calendar(validityDate, "Selected Device Validity Date"); + Commons.dropdown(driver(), By.id("deviceSpecId"), "Selected Device Specification"); + Commons.dropdown(driver(), By.id("regCenterId"), "Selected Registration Center"); + + Commons.createRes(driver(), "Created Device Record Successfully"); + + Commons.filter(driver(), By.id("name"), data, "Filtered device by name"); + + Commons.editRes(driver(), data + 1, By.id("name"), "Edited Device Name"); + Commons.filter(driver(), By.id("name"), data + 1, "Filtered again after edit"); + + Commons.activate(driver(), "Activated Device"); + + Commons.editRes(driver(), data + 2, By.id("name"), "Edited Device again after activation"); + Commons.filter(driver(), By.id("name"), data + 2, "Filtered after second edit"); + Commons.deactivate(driver(), "Deactivated Device"); + Commons.decommission(driver(), "Decommissioned Device"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceTypesTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceTypesTest.java index 40184efb..dbc33c1e 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceTypesTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceTypesTest.java @@ -1,28 +1,41 @@ package io.mosip.testrig.adminui.testcase; + import java.io.IOException; import org.openqa.selenium.By; import org.testng.annotations.Test; import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class DeviceTypesTest extends BaseClass{ +public class DeviceTypesTest extends BaseClass { @Test public void deviceTypesCRUD() throws IOException { - String deviceTypes="admin/masterdata/device-types/view"; - Commons.click(driver(),By.xpath("//a[@href='#/admin/masterdata']")); - Commons.click(driver(),By.id(deviceTypes)); - Commons.click(driver(),By.id("Create")); - Commons.enter(driver(),By.id("code"),data); - Commons.enter(driver(),By.id("name"),data); - Commons.enter(driver(),By.id("description"),data); - Commons.create(driver()); - Commons.filter(driver(), By.id("name"), data); - Commons.edit(driver(),data+1,By.id("name")); - Commons.filter(driver(), By.id("name"), data+1); - Commons.activate(driver()); - Commons.edit(driver(),data+2,By.id("name")); - Commons.filter(driver(), By.id("name"), data+2); - Commons.deactivate(driver()); + String deviceTypes = "admin/masterdata/device-types/view"; + Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']"), "Clicked on Master Data menu"); + Commons.click(driver(), By.id(deviceTypes), "Opened Device Types page"); + Commons.click(driver(), By.id("Create"), "Clicked on Create Device Type button"); + + Commons.enter(driver(), By.id("code"), data, "Entered Device Type Code"); + Commons.enter(driver(), By.id("name"), data, "Entered Device Type Name"); + Commons.enter(driver(), By.id("description"), data, "Entered Device Type Description"); + Commons.create(driver(), "Created Device Type"); + + Commons.filter(driver(), By.id("name"), data, "Filtered by device type name"); + + Commons.edit(driver(), data + 1, By.id("name"), "Editing Device Type Name"); + Commons.enter(driver(), By.id("description"), data + 1, "Updated Device Type Description"); + Commons.create(driver(), "Saved Edited Device Type"); + + Commons.filter(driver(), By.id("name"), data + 1, "Filtered after edit"); + + Commons.activate(driver(), "Activated Device Type"); + + Commons.edit(driver(), data + 2, By.id("name"), "Editing Device Type Name"); + Commons.enter(driver(), By.id("description"), data + 2, "Updated Device Type Description again"); + Commons.create(driver(), "Saved Edited Device Type"); + + Commons.filter(driver(), By.id("name"), data + 2, "Filtered after second edit"); + + Commons.deactivate(driver(), "Deactivated Device Type"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DocumentCategoriesTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DocumentCategoriesTest.java index f79389f4..c2698d83 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DocumentCategoriesTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DocumentCategoriesTest.java @@ -1,32 +1,45 @@ package io.mosip.testrig.adminui.testcase; + import java.io.IOException; import org.openqa.selenium.By; import org.testng.annotations.Test; - import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class DocumentCategoriesTest extends BaseClass{ - +public class DocumentCategoriesTest extends BaseClass { + @Test public void documentCategoriesCRUD() throws IOException { - - String documentCategories="admin/masterdata/document-categories/view"; - Commons.click(driver(),By.xpath("//a[@href='#/admin/masterdata']")); - Commons.click(driver(),By.id(documentCategories)); - Commons.click(driver(),By.id("Create")); - Commons.enter(driver(),By.id("code"),data); - Commons.enter(driver(),By.id("name"),data); - Commons.enter(driver(),By.id("description"),data); - Commons.create(driver()); - Commons.filter(driver(), By.id("name"), data); - Commons.edit(driver(),data+1,By.id("name")); - Commons.filter(driver(), By.id("name"), data+1); - Commons.activate(driver()); - Commons.edit(driver(),data+2,By.id("name")); - Commons.filter(driver(), By.id("name"), data+2); - Commons.deactivate(driver()); + + String documentCategories = "admin/masterdata/document-categories/view"; + Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']"), "Clicked on Master Data menu"); + Commons.click(driver(), By.id(documentCategories), "Opened Document Categories page"); + Commons.click(driver(), By.id("Create"), "Clicked on Create Document Category"); + + Commons.enter(driver(), By.id("code"), data, "Entered Document Category Code"); + Commons.enter(driver(), By.id("name"), data, "Entered Document Category Name"); + Commons.enter(driver(), By.id("description"), data, "Entered Document Category Description"); + + Commons.create(driver(), "Created Document Category"); + + Commons.filter(driver(), By.id("name"), data, "Filtered by Document Category Name"); + + Commons.edit(driver(), data + 1, By.id("name"), "Editing Document Category Name"); + Commons.enter(driver(), By.id("description"), data + 1, "Updated Document Category Description"); + Commons.create(driver(), "Saved Edited Document Category"); + + Commons.filter(driver(), By.id("name"), data + 1, "Filtered after edit"); + + Commons.activate(driver(), "Activated Document Category"); + + Commons.edit(driver(), data + 2, By.id("name"), "Editing Document Category again"); + Commons.enter(driver(), By.id("description"), data + 2, "Updated Document Category Description again"); + Commons.create(driver(), "Saved Edited Document Category"); + + Commons.filter(driver(), By.id("name"), data + 2, "Filtered after second edit"); + + Commons.deactivate(driver(), "Deactivated Document Category"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DocumentTypes.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DocumentTypes.java index ecb8cde4..f43853bf 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DocumentTypes.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DocumentTypes.java @@ -1,4 +1,5 @@ package io.mosip.testrig.adminui.testcase; + import java.io.IOException; import org.openqa.selenium.By; @@ -6,25 +7,32 @@ import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class DocumentTypes extends BaseClass{ - +public class DocumentTypes extends BaseClass { + @Test public void documentTypesCRUD() throws IOException { - String documentTypes="admin/masterdata/document-type/view"; - Commons.click(driver(),By.xpath("//a[@href='#/admin/masterdata']")); - Commons.click(driver(),By.id(documentTypes)); - Commons.click(driver(),By.id("Create")); - Commons.enter(driver(),By.id("code"),data); - Commons.enter(driver(),By.id("name"),data); - Commons.enter(driver(),By.id("description"),data); - Commons.create(driver()); - Commons.filter(driver(), By.id("name"), data); - Commons.edit(driver(),data+1,By.id("name")); - Commons.filter(driver(), By.id("name"), data+1); - Commons.activate(driver()); - Commons.edit(driver(),data+2,By.id("name")); - Commons.filter(driver(), By.id("name"), data+2); - Commons.deactivate(driver()); + String documentTypes = "admin/masterdata/document-type/view"; + Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']"), "Clicked on Master Data menu"); + Commons.click(driver(), By.id(documentTypes), "Opened Document Types page"); + Commons.click(driver(), By.id("Create"), "Clicked on Create Document Type"); + + Commons.enter(driver(), By.id("code"), data, "Entered Document Type Code"); + Commons.enter(driver(), By.id("name"), data, "Entered Document Type Name"); + Commons.enter(driver(), By.id("description"), data, "Entered Document Type Description"); + + Commons.create(driver(), "Created Document Type"); + + Commons.filter(driver(), By.id("name"), data, "Filtered by Document Type Name"); + + Commons.edit(driver(), data + 1, By.id("name"), "Editing Document Type Name"); + Commons.filter(driver(), By.id("name"), data + 1, "Filtered after editing Document Type"); + + Commons.activate(driver(), "Activated Document Type"); + + Commons.edit(driver(), data + 2, By.id("name"), "Editing Document Type Name again"); + Commons.filter(driver(), By.id("name"), data + 2, "Filtered after second edit"); + + Commons.deactivate(driver(), "Deactivated Document Type"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DynamicFieldTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DynamicFieldTest.java index 770c51b4..336c0c90 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DynamicFieldTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DynamicFieldTest.java @@ -1,29 +1,35 @@ package io.mosip.testrig.adminui.testcase; + import java.io.IOException; import org.openqa.selenium.By; import org.testng.annotations.Test; import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class DynamicFieldTest extends BaseClass{ - +public class DynamicFieldTest extends BaseClass { @Test public void dynamicFieldCRUD() throws IOException { - Commons.click(driver(),By.xpath("//a[@href='#/admin/masterdata']")); - Commons.click(driver(),By.id("createDynamicField")); - Commons.enter(driver(),By.id("code"),data); - Commons.enter(driver(),By.id("name"),"Automation"); - Commons.enter(driver(),By.id("description"),"Automation"); - Commons.enter(driver(),By.id("value"),data); - Commons.create(driver()); - Commons.filter(driver(), By.id("description"), "Automation"); - Commons.edit(driver(),data+1,By.id("code")); - Commons.filter(driver(), By.id("description"), "Automation"); - Commons.activate(driver()); - Commons.edit(driver(),data+2,By.id("code")); - Commons.filter(driver(), By.id("description"), "Automation"); - Commons.deactivate(driver()); + Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']"), "Clicked on Master Data menu"); + Commons.click(driver(), By.id("createDynamicField"), "Opened Create Dynamic Field page"); + + Commons.enter(driver(), By.id("code"), data, "Entered Dynamic Field Code"); + Commons.enter(driver(), By.id("name"), "Automation", "Entered Dynamic Field Name"); + Commons.enter(driver(), By.id("description"), "Automation", "Entered Dynamic Field Description"); + Commons.enter(driver(), By.id("value"), data, "Entered Dynamic Field Value"); + + Commons.create(driver(), "Created Dynamic Field"); + Commons.filter(driver(), By.id("description"), "Automation", "Filtered by Dynamic Field Description"); + + Commons.edit(driver(), data + 1, By.id("code"), "Editing Dynamic Field Code"); + Commons.filter(driver(), By.id("description"), "Automation", "Filtered after Dynamic Field edit"); + + Commons.activate(driver(), "Activated Dynamic Field"); + + Commons.edit(driver(), data + 2, By.id("code"), "Editing Dynamic Field Code again"); + Commons.filter(driver(), By.id("description"), "Automation", "Filtered after second edit"); + + Commons.deactivate(driver(), "Deactivated Dynamic Field"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/HolidaysTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/HolidaysTest.java index ad7464c8..42a39ec7 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/HolidaysTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/HolidaysTest.java @@ -1,31 +1,40 @@ package io.mosip.testrig.adminui.testcase; + import org.openqa.selenium.By; import org.testng.annotations.Test; import io.mosip.testrig.adminui.kernel.util.ConfigManager; import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class HolidaysTest extends BaseClass{ +public class HolidaysTest extends BaseClass { @Test public void holidaysCRUD() throws Exception { - String listofholidays="admin/masterdata/holiday/view"; - String holidayDate=ConfigManager.getholidayDate(); - Commons.click(driver(),By.xpath("//a[@href='#/admin/masterdata']")); - Commons.click(driver(),By.id(listofholidays)); - Commons.click(driver(),By.id("Create")); - Commons.enter(driver(),By.id("holidayName"),data); - Commons.enter(driver(),By.id("holidayDesc"),data); - Commons.calendar(holidayDate); - Commons.dropdown(driver(),By.id("locationCode")); - Commons.create(driver()); - Commons.filter(driver(), By.id("holidayName"), data); - Commons.edit(driver(),data+1,By.id("holidayName")); - Commons.filter(driver(), By.id("holidayName"), data+1); - Commons.activate(driver()); - Commons.edit(driver(),data+2,By.id("holidayName")); - Commons.filter(driver(), By.id("holidayName"), data+2); - Commons.deactivate(driver()); + String listofholidays = "admin/masterdata/holiday/view"; + String holidayDate = ConfigManager.getholidayDate(); + Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']"), "Clicked on Master Data menu"); + Commons.click(driver(), By.id(listofholidays), "Opened List of Holidays page"); + Commons.click(driver(), By.id("Create"), "Clicked Create Holiday"); + + Commons.enter(driver(), By.id("holidayName"), data, "Entered Holiday Name"); + Commons.enter(driver(), By.id("holidayDesc"), data, "Entered Holiday Description"); + + Commons.calendar(holidayDate, "Selected Holiday Date"); + Commons.dropdown(driver(), By.id("locationCode"), "Selected Holiday Location"); + + Commons.create(driver(), "Created Holiday"); + + Commons.filter(driver(), By.id("holidayName"), data, "Filtered Holiday by Name"); + + Commons.edit(driver(), data + 1, By.id("holidayName"), "Editing Holiday Name"); + Commons.filter(driver(), By.id("holidayName"), data + 1, "Filtered after edit"); + + Commons.activate(driver(), "Activated Holiday"); + + Commons.edit(driver(), data + 2, By.id("holidayName"), "Editing Holiday Name again"); + Commons.filter(driver(), By.id("holidayName"), data + 2, "Filtered after second edit"); + + Commons.deactivate(driver(), "Deactivated Holiday"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineSpecificationTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineSpecificationTest.java index 4e901858..50f5b6b5 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineSpecificationTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineSpecificationTest.java @@ -1,32 +1,41 @@ package io.mosip.testrig.adminui.testcase; + import java.io.IOException; import org.openqa.selenium.By; import org.testng.annotations.Test; import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class MachineSpecificationTest extends BaseClass{ +public class MachineSpecificationTest extends BaseClass { @Test public void machineSpecCRUD() throws IOException { - String machinespec="admin/masterdata/machine-specs/view"; - Commons.click(driver(),By.xpath("//a[@href='#/admin/masterdata']")); - Commons.click(driver(),By.id(machinespec)); - Commons.click(driver(),By.id("Create")); - Commons.enter(driver(),By.id("name"),data); - Commons.enter(driver(),By.id("brand"),data); - Commons.enter(driver(),By.id("model"),data); - Commons.enter(driver(),By.id("minDriverversion"),data); - Commons.enter(driver(),By.id("description"),data); - Commons.dropdown(driver(),By.id("machineTypeCode")); - Commons.create(driver()); - Commons.filter(driver(), By.id("name"), data); - Commons.edit(driver(),data+1,By.id("name")); - Commons.filter(driver(), By.id("name"), data+1); - Commons.activate(driver()); - Commons.edit(driver(),data+2,By.id("name")); - Commons.filter(driver(), By.id("name"), data+2); - Commons.deactivate(driver()); + String machinespec = "admin/masterdata/machine-specs/view"; + Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']"), "Clicked on Master Data menu"); + Commons.click(driver(), By.id(machinespec), "Opened Machine Specs page"); + Commons.click(driver(), By.id("Create"), "Clicked Create Machine Spec"); + + Commons.enter(driver(), By.id("name"), data, "Entered Machine Name"); + Commons.enter(driver(), By.id("brand"), data, "Entered Machine Brand"); + Commons.enter(driver(), By.id("model"), data, "Entered Machine Model"); + Commons.enter(driver(), By.id("minDriverversion"), data, "Entered Minimum Driver Version"); + Commons.enter(driver(), By.id("description"), data, "Entered Machine Description"); + + Commons.dropdown(driver(), By.id("machineTypeCode"), "Selected Machine Type"); + + Commons.create(driver(), "Created Machine Spec"); + + Commons.filter(driver(), By.id("name"), data, "Filtered by Machine Name"); + + Commons.edit(driver(), data + 1, By.id("name"), "Edited Machine Name"); + Commons.filter(driver(), By.id("name"), data + 1, "Filtered after edit"); + + Commons.activate(driver(), "Activated Machine Spec"); + + Commons.edit(driver(), data + 2, By.id("name"), "Edited Machine Name again"); + Commons.filter(driver(), By.id("name"), data + 2, "Filtered after second edit"); + + Commons.deactivate(driver(), "Deactivated Machine Spec"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTest.java index 7a81f5dd..d0a71624 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTest.java @@ -1,45 +1,55 @@ package io.mosip.testrig.adminui.testcase; + import org.openqa.selenium.By; import org.testng.annotations.Test; import io.mosip.testrig.adminui.kernel.util.ConfigManager; import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class MachineTest extends BaseClass{ +public class MachineTest extends BaseClass { @Test public void machineCRUD() throws Exception { - String holidayDateCenter=ConfigManager.getholidayDateCenter(); - String publicKey=ConfigManager.getpublicKey(); - String signPublicKey=ConfigManager.getsignPublicKey(); - Commons.click(driver(),By.id("admin/resources")); - Commons.click(driver(),By.xpath("//a[@href='#/admin/resources/machines']")); - Commons.click(driver(),By.id("Create Machine")); - Commons.enter(driver(),By.id("name"),data); - Commons.enter(driver(),By.id("serialNumber"),"1234567"); - Commons.enter(driver(),By.id("macAddress"),"1.2.3.4.5.6"); - Commons.enter(driver(),By.id("ipAddress"),"2.3.4.5.6"); - + String holidayDateCenter = ConfigManager.getholidayDateCenter(); + String publicKey = ConfigManager.getpublicKey(); + String signPublicKey = ConfigManager.getsignPublicKey(); + Commons.click(driver(), By.id("admin/resources"), "Clicked on Resources menu"); + Commons.click(driver(), By.xpath("//a[@href='#/admin/resources/machines']"), "Opened Machines page"); + Commons.click(driver(), By.id("Create Machine"), "Clicked Create Machine"); + + Commons.enter(driver(), By.id("name"), data, "Entered Machine Name"); + Commons.enter(driver(), By.id("serialNumber"), "1234567", "Entered Serial Number"); + Commons.enter(driver(), By.id("macAddress"), "1.2.3.4.5.6", "Entered MAC Address"); + Commons.enter(driver(), By.id("ipAddress"), "2.3.4.5.6", "Entered IP Address"); + String loginLang = ConfigManager.getloginlang(); - Commons.calendar(holidayDateCenter, loginLang.toLowerCase()); + Commons.calendar(holidayDateCenter, loginLang.toLowerCase(), "Selected Validity Date"); - Commons.dropdown(driver(),By.id("machineSpecId")); - Commons.enter(driver(),By.id("publicKey"),publicKey); - Commons.enter(driver(),By.id("signPublicKey"),signPublicKey); - try{ - Commons.dropdown(driver(), By.id("zone")); + Commons.dropdown(driver(), By.id("machineSpecId"), "Selected Machine Spec"); + Commons.enter(driver(), By.id("publicKey"), publicKey, "Entered Public Key"); + Commons.enter(driver(), By.id("signPublicKey"), signPublicKey, "Entered Sign Public Key"); - }catch(Exception e) { + try { + Commons.dropdown(driver(), By.id("zone"), "Selected Zone"); + } catch (Exception e) { } - Commons.dropdown(driver(),By.id("regCenterId")); - Commons.createRes(driver()); - Commons.filter(driver(), By.id("name"), data); - Commons.editRes(driver(),data+1,By.id("name")); - Commons.filter(driver(), By.id("name"), data+1); - Commons.activate(driver()); - Commons.editRes(driver(),data+2,By.id("name")); - Commons.filter(driver(), By.id("name"), data+2); - Commons.deactivate(driver()); - Commons.decommission(driver()); + + Commons.dropdown(driver(), By.id("regCenterId"), "Selected Registration Center"); + + Commons.createRes(driver(), "Created Machine Record"); + + Commons.filter(driver(), By.id("name"), data, "Filtered by Machine Name"); + + Commons.editRes(driver(), data + 1, By.id("name"), "Edited Machine Name"); + Commons.filter(driver(), By.id("name"), data + 1, "Filtered after edit"); + + Commons.activate(driver(), "Activated Machine Record"); + + Commons.editRes(driver(), data + 2, By.id("name"), "Edited Machine Name again"); + Commons.filter(driver(), By.id("name"), data + 2, "Filtered after second edit"); + + Commons.deactivate(driver(), "Deactivated Machine Record"); + + Commons.decommission(driver(), "Decommissioned Machine Record"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTypesTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTypesTest.java index 11195536..0a080436 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTypesTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTypesTest.java @@ -1,29 +1,37 @@ package io.mosip.testrig.adminui.testcase; + import java.io.IOException; import org.openqa.selenium.By; import org.testng.annotations.Test; import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class MachineTypesTest extends BaseClass{ +public class MachineTypesTest extends BaseClass { @Test public void machineTypesCRUD() throws IOException { - String machinetypes="admin/masterdata/machine-type/view" ; - Commons.click(driver(),By.xpath("//a[@href='#/admin/masterdata']")); - Commons.click(driver(),By.id(machinetypes)); - Commons.click(driver(),By.id("Create")); - Commons.enter(driver(),By.id("code"),data); - Commons.enter(driver(),By.id("name"),data); - Commons.enter(driver(),By.id("description"),data); - Commons.create(driver()); - Commons.filter(driver(), By.id("name"), data); - Commons.edit(driver(),data+1,By.id("name")); - Commons.filter(driver(), By.id("name"), data+1); - Commons.activate(driver()); - Commons.edit(driver(),data+2,By.id("name")); - Commons.filter(driver(), By.id("name"), data+2); - Commons.deactivate(driver()); + String machinetypes = "admin/masterdata/machine-type/view"; + Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']"), "Clicked on Master Data menu"); + Commons.click(driver(), By.id(machinetypes), "Navigated to Machine Types page"); + Commons.click(driver(), By.id("Create"), "Clicked on Create button"); + + Commons.enter(driver(), By.id("code"), data, "Entered Machine Type Code"); + Commons.enter(driver(), By.id("name"), data, "Entered Machine Type Name"); + Commons.enter(driver(), By.id("description"), data, "Entered Machine Type Description"); + + Commons.create(driver(), "Clicked Create to save the Machine Type"); + + Commons.filter(driver(), By.id("name"), data, "Filtered Machine Types by Name"); + + Commons.edit(driver(), data + 1, By.id("name"), "Edited Machine Type Name to " + (data + 1)); + Commons.filter(driver(), By.id("name"), data + 1, "Filtered Machine Types by Edited Name"); + + Commons.activate(driver(), "Activated the Machine Type"); + + Commons.edit(driver(), data + 2, By.id("name"), "Edited Machine Type Name to " + (data + 2)); + Commons.filter(driver(), By.id("name"), data + 2, "Filtered Machine Types by Edited Name"); + + Commons.deactivate(driver(), "Deactivated the Machine Type"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/TemplateTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/TemplateTest.java index 14943e14..9e8e4ce4 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/TemplateTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/TemplateTest.java @@ -1,33 +1,41 @@ package io.mosip.testrig.adminui.testcase; + import java.io.IOException; import org.openqa.selenium.By; import org.testng.annotations.Test; import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.utility.Commons; -public class TemplateTest extends BaseClass{ - +public class TemplateTest extends BaseClass { @Test public void templateCRUD() throws IOException { - String templatesid="admin/masterdata/templates/view"; - Commons.click(driver(),By.xpath("//a[@href='#/admin/masterdata']")); - Commons.click(driver(),By.id(templatesid)); - Commons.click(driver(),By.id("Create")); - Commons.enter(driver(),By.id("name"),data); - Commons.enter(driver(),By.id("description"),data); - Commons.enter(driver(),By.id("model"),data); - Commons.enter(driver(),By.id("fileText"),data); - Commons.dropdown(driver(),By.id("fileFormatCode")); - Commons.dropdown(driver(),By.id("templateTypeCode")); - Commons.dropdown(driver(),By.id("moduleId")); - Commons.create(driver()); - Commons.filter(driver(), By.id("name"), data); - Commons.edit(driver(),data+1,By.id("name")); - Commons.filter(driver(), By.id("name"), data+1); - Commons.activate(driver()); - Commons.edit(driver(),data+2,By.id("name")); - Commons.filter(driver(), By.id("name"), data+2); - Commons.deactivate(driver()); + String templatesid = "admin/masterdata/templates/view"; + Commons.click(driver(), By.xpath("//a[@href='#/admin/masterdata']"), "Clicked on Master Data menu"); + Commons.click(driver(), By.id(templatesid), "Navigated to Templates page"); + + Commons.click(driver(), By.id("Create"), "Clicked on Create button"); + Commons.enter(driver(), By.id("name"), data, "Entered Template Name"); + Commons.enter(driver(), By.id("description"), data, "Entered Template Description"); + Commons.enter(driver(), By.id("model"), data, "Entered Template Model"); + Commons.enter(driver(), By.id("fileText"), data, "Entered File Text"); + + Commons.dropdown(driver(), By.id("fileFormatCode"), "Selected File Format"); + Commons.dropdown(driver(), By.id("templateTypeCode"), "Selected Template Type"); + Commons.dropdown(driver(), By.id("moduleId"), "Selected Module"); + + Commons.create(driver(), "Clicked Create to save the Template"); + + Commons.filter(driver(), By.id("name"), data, "Filtered Templates by Name"); + + Commons.edit(driver(), data + 1, By.id("name"), "Edited Template Name to " + (data + 1)); + Commons.filter(driver(), By.id("name"), data + 1, "Filtered Templates by Edited Name"); + + Commons.activate(driver(), "Activated the Template"); + + Commons.edit(driver(), data + 2, By.id("name"), "Edited Template Name to " + (data + 2)); + Commons.filter(driver(), By.id("name"), data + 2, "Filtered Templates by Edited Name"); + + Commons.deactivate(driver(), "Deactivated the Template"); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminExtentReportManager.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminExtentReportManager.java new file mode 100644 index 00000000..75146c5b --- /dev/null +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminExtentReportManager.java @@ -0,0 +1,233 @@ +package io.mosip.testrig.adminui.utility; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Properties; + +import com.aventstack.extentreports.ExtentReports; +import com.aventstack.extentreports.ExtentTest; +import com.aventstack.extentreports.MediaEntityBuilder; +import com.aventstack.extentreports.reporter.ExtentSparkReporter; +import com.aventstack.extentreports.reporter.configuration.Theme; + +import io.mosip.testrig.adminui.kernel.util.ConfigManager; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class AdminExtentReportManager { + + private static ExtentReports extent; + private static final ThreadLocal testThread = new ThreadLocal<>(); + private static final Logger LOGGER = LoggerFactory.getLogger(AdminExtentReportManager.class); + + private static boolean systemInfoAdded = false; + private static String gitBranch = "unknown"; + private static String gitCommitId = "unknown"; + private static final String currentDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); + + private static int passedCount = 0; + private static int failedCount = 0; + private static int skippedCount = 0; + + public synchronized static void initReport() { + if (extent == null) { + fetchGitDetails(); + + String reportName = "Admin UI Test Execution Report"; + reportName += " ---- Admin UI ---- Report Date: " + currentDate + " ---- Tested Environment: " + + safeEnvName() + " ---- Branch: " + gitBranch + " & Commit: " + gitCommitId; + + String timestamp = new SimpleDateFormat("yyyy-MMM-dd_HH-mm").format(new Date()).toLowerCase(); + String reportPath = "test-output/AdminReport_" + timestamp + ".html"; + + ExtentSparkReporter spark = new ExtentSparkReporter(reportPath); + spark.config().setTheme(Theme.DARK); + spark.config().setDocumentTitle("Admin UI Automation Report"); + spark.config().setReportName(reportName); + + extent = new ExtentReports(); + extent.attachReporter(spark); + + addSystemInfo(); + } + } + + public synchronized static ExtentTest createTest(String testName) { + initReport(); + ExtentTest test = extent.createTest(testName); + testThread.set(test); + return test; + } + + public static ExtentTest getTest() { + return testThread.get(); + } + + public static void removeTest() { + testThread.remove(); + } + + private synchronized static void addSystemInfo() { + if (extent != null && !systemInfoAdded) { + LOGGER.info("Adding Git info to extent report: Branch = {}, Commit = {}", gitBranch, gitCommitId); + + extent.setSystemInfo("Git Branch", gitBranch); + extent.setSystemInfo("Git Commit ID", gitCommitId); + extent.setSystemInfo("Generated On", currentDate); + extent.setSystemInfo("Env", safeEnvName()); + + try { + extent.setSystemInfo("Run Language", ConfigManager.getloginlang()); + } catch (Exception ignored) { + } + + systemInfoAdded = true; + } + } + + private static String runCommand(String... command) throws IOException { + Process process = new ProcessBuilder(command).redirectErrorStream(true).start(); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) { + + String line = reader.readLine(); + int exit = 0; + try { + exit = process.waitFor(); + } catch (InterruptedException ie) { + } + if (exit == 0 && line != null) { + return line.trim(); + } + } + throw new IOException("Command produced no output or non-zero exit code"); + } + + private static void fetchGitDetails() { + try { + gitBranch = runCommand("git", "rev-parse", "--abbrev-ref", "HEAD"); + gitCommitId = runCommand("git", "rev-parse", "--short", "HEAD"); + LOGGER.info("Fetched git via CLI: branch={}, commit={}", gitBranch, gitCommitId); + } catch (Exception e) { + LOGGER.warn("Failed to fetch git via CLI: {}. Falling back to git.properties", e.getMessage()); + loadFromGitProperties(); + } + } + + private static void loadFromGitProperties() { + Properties properties = new Properties(); + try (InputStream is = AdminExtentReportManager.class.getClassLoader().getResourceAsStream("git.properties")) { + + if (is != null) { + properties.load(is); + gitBranch = properties.getProperty("git.branch", "unknown"); + gitCommitId = properties.getProperty("git.commit.id.abbrev", "unknown"); + LOGGER.info("Loaded git.properties: branch={}, commit={}", gitBranch, gitCommitId); + } else { + LOGGER.warn("git.properties not found; using defaults"); + } + } catch (IOException ex) { + LOGGER.error("Error reading git.properties: {}", ex.getMessage()); + } + } + + private static String safeEnvName() { + try { + String env = ConfigManager.getiam_adminportal_path(); + if (env != null && !env.isEmpty()) { + env = env.toLowerCase().replace("https://", "").replace("http://", ""); + return env.replaceAll("^.*?\\.([^.]+)\\.mosip.*$", "$1"); + } + } catch (Exception ignored) { + } + + return "unknown"; + } + + public synchronized static void incrementPassed() { + passedCount++; + } + + public synchronized static void incrementFailed() { + failedCount++; + } + + public synchronized static void incrementSkipped() { + skippedCount++; + } + + public static int getPassedCount() { + return passedCount; + } + + public static int getFailedCount() { + return failedCount; + } + + public static int getSkippedCount() { + return skippedCount; + } + + public static int getTotalCount() { + return passedCount + failedCount + skippedCount; + } + + public static void logStep(String message) { + ExtentTest test = testThread.get(); + if (test != null) { + test.info(message); + } else { + LOGGER.warn("logStep called but no extent test active: {}", message); + } + } + + public static void logStepWithLocator(String message, String locatorHtml) { + ExtentTest test = testThread.get(); + if (test != null) { + String safeLocator = (locatorHtml == null) ? "[no locator]" : locatorHtml; + String html = message + "
Locator Details
" + escapeHtml(safeLocator)
+					+ "
"; + test.info(html); + } else { + LOGGER.warn("logStepWithLocator called but no extent test active: {} / {}", message, locatorHtml); + } + } + + public static void logLocator(String locatorHtml) { + ExtentTest test = testThread.get(); + if (test != null) { + String safeLocator = (locatorHtml == null) ? "[no locator]" : locatorHtml; + String html = "
Locator Details
" + escapeHtml(safeLocator)
+					+ "
"; + test.info(html); + } else { + LOGGER.warn("logLocator called but no extent test active: {}", locatorHtml); + } + } + + private static String escapeHtml(String s) { + if (s == null) + return ""; + return s.replace("&", "&").replace("<", "<").replace(">", ">"); + } + + public static void attachScreenshotFromBase64(String base64, String title) { + ExtentTest test = testThread.get(); + if (test != null && base64 != null) { + try { + test.info(title, MediaEntityBuilder.createScreenCaptureFromBase64String(base64).build()); + } catch (Exception e) { + LOGGER.warn("Failed to attach screenshot to report: {}", e.getMessage()); + } + } + } + + public static synchronized void flushReport() { + if (extent != null) { + extent.flush(); + } + } +} diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java new file mode 100644 index 00000000..6a17869c --- /dev/null +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java @@ -0,0 +1,78 @@ +package io.mosip.testrig.adminui.utility; + +import org.testng.ITestListener; +import org.testng.ITestResult; +import org.testng.ITestContext; +import org.openqa.selenium.OutputType; +import org.openqa.selenium.TakesScreenshot; +import org.openqa.selenium.WebDriver; + +import io.mosip.testrig.adminui.utility.BaseClass; + +import io.mosip.testrig.adminui.utility.AdminExtentReportManager; + +public class AdminTestListener implements ITestListener { + + @Override + public void onStart(ITestContext context) { + AdminExtentReportManager.initReport(); + } + + @Override + public void onTestStart(ITestResult result) { + String testName = result.getMethod().getMethodName(); + + if (result.getParameters().length > 0) { + testName = testName + " | Params: " + java.util.Arrays.toString(result.getParameters()); + } + + AdminExtentReportManager.createTest(testName); + AdminExtentReportManager.logStep("🟦 Test Started : " + testName); + } + + @Override + public void onTestSuccess(ITestResult result) { + AdminExtentReportManager.logStep("🟩 Test Passed : " + result.getName()); + AdminExtentReportManager.incrementPassed(); + AdminExtentReportManager.getTest().pass("Test Passed Successfully!"); + } + + @Override + public void onTestFailure(ITestResult result) { + String testName = result.getName(); + AdminExtentReportManager.logStep("🟥 Test Failed : " + testName); + + AdminExtentReportManager.incrementFailed(); + + try { + WebDriver driver = BaseClass.driver(); + if (driver != null) { + byte[] screenshotBytes = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES); + String base64Screenshot = java.util.Base64.getEncoder().encodeToString(screenshotBytes); + + AdminExtentReportManager.attachScreenshotFromBase64(base64Screenshot, + "Failure Screenshot - " + testName); + } + } catch (Exception e) { + AdminExtentReportManager.logStep("⚠️ Screenshot capture failed: " + e.getMessage()); + } + + if (AdminExtentReportManager.getTest() != null) { + AdminExtentReportManager.getTest().fail(result.getThrowable()); + } + } + + @Override + public void onTestSkipped(ITestResult result) { + AdminExtentReportManager.logStep("⚠️ Test Skipped : " + result.getName()); + AdminExtentReportManager.incrementSkipped(); + AdminExtentReportManager.getTest().skip("Skipped due to preconditions/Dependencies"); + } + + @Override + public void onFinish(ITestContext context) { + AdminExtentReportManager.flushReport(); + } + + @Override public void onTestFailedButWithinSuccessPercentage(ITestResult result) {} +} diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/BaseClass.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/BaseClass.java index d1e6cd9b..26b91202 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/BaseClass.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/BaseClass.java @@ -1,6 +1,7 @@ package io.mosip.testrig.adminui.utility; import java.io.File; +import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -15,6 +16,9 @@ import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.DataProvider; +import org.testng.ITestResult; + +import com.aventstack.extentreports.ExtentTest; import io.github.bonigarcia.wdm.WebDriverManager; import io.mosip.testrig.adminui.kernel.util.ConfigManager; @@ -42,8 +46,10 @@ protected static WebDriver driver() { } @BeforeMethod - public void setUp() throws Exception { - Reporter.log("BaseClass", true); + public void setUp(Method testMethod) throws Exception { + AdminExtentReportManager.initReport(); + + Reporter.log("BaseClass setup started", true); logger.info("Start set up"); if (System.getProperty("os.name").equalsIgnoreCase("Linux") && ConfigManager.getdocker().equals("yes")) { @@ -69,7 +75,7 @@ public void setUp() throws Exception { js = (JavascriptExecutor) driver(); vars = new HashMap(); driver().get(envPath); - logger.info("launch url --" + envPath); + logger.info("Launch URL: " + envPath); driver().manage().window().maximize(); Commons.wait(500); driver().manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); @@ -83,24 +89,67 @@ public void setUp() throws Exception { loginlang = JsonUtil.JsonObjArrayListParsing2(ConfigManager.getlangcode()); } - Commons.click(driver(), By.xpath("//*[@id='kc-locale-dropdown']")); + Commons.click(driver(), By.xpath("//*[@id='kc-locale-dropdown']"), "Clicked on language dropdown"); String xpath = "//li/a[" + "normalize-space(text())='" + loginlang + "' " + "or contains(translate(normalize-space(text()), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), '" + language1.toLowerCase() + "') " + "]"; - Commons.click(driver(), By.xpath(xpath)); + Commons.click(driver(), By.xpath(xpath), "Selected language: " + loginlang); + + Commons.enter(driver(), By.id("username"), userid, "Entered username"); + Commons.enter(driver(), By.id("password"), password, "Entered password"); + Commons.click(driver(), By.xpath("//input[@name='login']"), "Clicked login button"); + + if (AdminExtentReportManager.getTest() == null) { + String className = this.getClass().getSimpleName(); + String methodName = testMethod.getName(); + + String lang = "unknown"; + try { + lang = ConfigManager.getloginlang(); + } catch (Exception ignored) { + } + + String cleanName = className + " | " + methodName + " | Language: " + lang; - Commons.enter(driver(), By.id("username"), userid); - Commons.enter(driver(), By.id("password"), password); - Commons.click(driver(), By.xpath("//input[@name='login']")); + AdminExtentReportManager.createTest(cleanName); + AdminExtentReportManager.logStep("Setup complete for " + cleanName); + } } - @AfterMethod - public void tearDown() { - if (driverThread.get() != null) { - driverThread.get().quit(); - driverThread.remove(); + @AfterMethod(alwaysRun = true) + public void tearDown(ITestResult result) { + try { + if (result != null && result.getStatus() == ITestResult.FAILURE) { + try { + WebDriver drv = driver(); + if (drv != null) { + byte[] screenshot = ((org.openqa.selenium.TakesScreenshot) drv) + .getScreenshotAs(org.openqa.selenium.OutputType.BYTES); + String base64 = java.util.Base64.getEncoder().encodeToString(screenshot); + ExtentTest test = AdminExtentReportManager.getTest(); + if (test != null) { + test.fail("❌ Test Failed: " + result.getName()); + test.fail(result.getThrowable()); + } + AdminExtentReportManager.attachScreenshotFromBase64(base64, "Failure Screenshot"); + } + } catch (Exception e) { + logger.warn("Unable to capture screenshot in tearDown: " + e.getMessage()); + } + } else if (result != null && result.getStatus() == ITestResult.SUCCESS) { + AdminExtentReportManager.getTest().pass("✅ Test Passed: " + result.getName()); + } else if (result != null && result.getStatus() == ITestResult.SKIP) { + AdminExtentReportManager.getTest().skip("⚠️ Test Skipped: " + result.getName()); + } + } finally { + if (driverThread.get() != null) { + driverThread.get().quit(); + driverThread.remove(); + } + AdminExtentReportManager.flushReport(); + AdminExtentReportManager.removeTest(); } } @@ -143,9 +192,7 @@ public static String convertDigits(String number, String locale) { } return result.toString(); } else { - return number; } } - -} +} \ No newline at end of file diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/Commons.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/Commons.java index e941da9b..d8fff14b 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/Commons.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/Commons.java @@ -18,367 +18,456 @@ import io.mosip.testrig.adminui.kernel.util.ConfigManager; -public class Commons extends BaseClass{ +public class Commons extends BaseClass { + private static final Logger logger = Logger.getLogger(Commons.class); - public static String appendDate=getPreAppend()+getDateTime(); + public static String appendDate = getPreAppend() + getDateTime(); - public static String getDateTime() { + public static String getDateTime() { DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMddHHmm"); LocalDateTime now = LocalDateTime.now(); return dtf.format(now); } - public static void filter(WebDriver driver, By by,String data) throws IOException { + private static void logStep(String description, By by) { + AdminExtentReportManager.logStepWithLocator(description, getLocator(by)); + } + + private static String getLocator(By by) { + if (by == null) + return ""; + String s = by.toString(); + if (s.contains(": ")) { + String[] p = s.split(": ", 2); + return "By." + p[0].replace("By.", "") + "(\"" + p[1] + "\")"; + } + return s; + } + + public static void filter(WebDriver driver, By by, String data, String description) throws IOException { + AdminExtentReportManager.logStep(description + " | Filter Value → " + data); try { - logger.info("Inside Filter " + by + data); - Commons.click(driver, By.id("Filter")); + logger.info("Inside Filter " + by + " with data: " + data); + Commons.click(driver, By.id("Filter"), "Click Filter"); wait(3000); - Commons.enter(driver, by, data); + Commons.enter(driver, by, data, "Enter filter text"); wait(3000); - Commons.click(driver, By.id("applyTxt")); + Commons.click(driver, By.id("applyTxt"), "Apply filter"); } catch (Exception e) { - Reporter.log("

"); + Reporter.log("

"); logger.info(e.getMessage()); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); - } } - public static void filterCenter(WebDriver driver, By by,String data) throws IOException { - logger.info("Inside filterCenter " + by + data); - try { - Commons.click(driver, By.id("Filter")); - - Commons.dropdowncenter(driver, by, data); + public static void filter(WebDriver driver, By by, String data) throws IOException { + filter(driver, by, data, "Filter by text"); + } - Commons.click(driver, By.id("applyTxt")); + public static void filterCenter(WebDriver driver, By by, String data, String description) throws IOException { + AdminExtentReportManager.logStep(description + " | Filter Value → " + data); + try { + Commons.click(driver, By.id("Filter"), "Click Filter"); + Commons.dropdowncenter(driver, by, data); + Commons.click(driver, By.id("applyTxt"), "Apply Filter"); } catch (Exception e) { - Reporter.log("

"); + Reporter.log("

"); logger.info(e.getMessage()); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); - } } - public static void click(WebDriver driver, By by) throws IOException { - logger.info("Clicking " + by ); + public static void filterCenter(WebDriver driver, By by, String data) throws IOException { + filterCenter(driver, by, data, "Filter Center by value"); + } + + public static void click(WebDriver driver, By by, String description) throws IOException { + logStep(description, by); + logger.info("Clicking " + by); try { wait(1000); driver.findElement(by).click(); wait(500); } catch (Exception e) { - Reporter.log("

"); - logger.error( e.getMessage()); + Reporter.log("

"); + logger.error(e.getMessage()); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); } } - public static void enter(WebDriver driver, By by,String value) throws IOException { - logger.info("Entering " + by +value); + public static void click(WebDriver driver, By by) throws IOException { + click(driver, by, "Clicked element"); + } + + public static void enter(WebDriver driver, By by, String value, String description) throws IOException { + logStep(description + " | Value → " + value, by); + logger.info("Entering " + by + value); try { driver.findElement(by).clear(); driver.findElement(by).sendKeys(value); - }catch (StaleElementReferenceException sere) { - Reporter.log("

"); + } catch (StaleElementReferenceException sere) { + Reporter.log("

"); driver.findElement(by).sendKeys(value); - } - catch (TimeoutException toe) { - Reporter.log("

"); + } catch (TimeoutException toe) { + Reporter.log("

"); driver.findElement(by).sendKeys(value); - logger.info( "Element identified by " + by.toString() + " was not clickable after 20 seconds"); - } - catch (Exception e) { - Reporter.log("

"); + logger.info("Element identified by " + by.toString() + " was not clickable after 20 seconds"); + } catch (Exception e) { + Reporter.log("

"); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); } - } - public static void dropdown(WebDriver driver, By by) throws IOException{ - logger.info("Selecting DropDown Index Zero Value " + by ); + public static void enter(WebDriver driver, By by, String value) throws IOException { + enter(driver, by, value, "Entered text"); + } + + public static void dropdown(WebDriver driver, By by, String description) throws IOException { + logStep(description + " | Selected index 0", by); + logger.info("Selecting DropDown Index Zero Value " + by); try { wait(500); - click(driver,by);//REGION + click(driver, by,"Clicked dropdown to expand options");//REGION wait(500); - String att= driver.findElement(by).getAttribute("aria-owns"); - String[] list=att.split(" "); - click(driver,By.id(list[0])); + String att = driver.findElement(by).getAttribute("aria-owns"); + String[] list = att.split(" "); + click(driver, By.id(list[0]),"Clicked on first element from the list"); wait(500); - }catch (Exception e) { - Reporter.log("

"); + } catch (Exception e) { + Reporter.log("

"); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); - } } - public static void dropdown(WebDriver driver, By by,String value){ - logger.info("Selecting DropDown By Value " + by +value ); + public static void dropdown(WebDriver driver, By by, String value, String description) { + logStep(description + " | Select dropdown using value: " + value, by); + logger.info("Selecting DropDown By Value " + by + value); try { wait(500); - click(driver,by); + click(driver, by, "Clicked dropdown to expand options"); wait(500); - String val="'"+value +"'"; - click(driver,By.xpath("//span[contains(text(),"+val+")]")); + + String val = "'" + value + "'"; + click(driver, By.xpath("//span[contains(text()," + val + ")]"),"Selected value: " + value + " from the list"); wait(500); - }catch (Exception e) { + } catch (Exception e) { logger.info(e.getMessage()); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); - } } - public static void dropdowncenter(WebDriver driver, By by,String value){ - logger.info("Selecting DropDown By Value " + by +value ); + public static void dropdowncenter(WebDriver driver, By by, String value, String description) { + logStep(description + " | Select dropdown center using value: " + value, by); + logger.info("Selecting DropDown By Value " + by + value); try { wait(500); - click(driver,by); + click(driver, by, "Clicked dropdown field to view options"); wait(500); - click(driver,By.id(value)); + click(driver, By.id(value), "Selected dropdown value with ID: " + value); wait(500); - }catch (Exception e) { + } catch (Exception e) { logger.info(e.getMessage()); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); - } } - public static void dropdown(WebDriver driver, By by,By value){ - logger.info("Selecting DropDown By Value " + by +value ); - try { + public static void dropdowncenter(WebDriver driver, By by, String value) { + dropdowncenter(driver, by, value, "Select dropdown center value"); + } + + public static void dropdown(WebDriver driver, By by, By value, String description) throws IOException { + logStep(description, by); + logger.info("Selecting DropDown By Value " + by + value); + try { wait(500); - click(driver,by); + click(driver, by,"Clicked on dropdown field to expand options"); wait(500); - click(driver,value); + click(driver, value,"Selected value from the dropdown"); wait(500); - }catch (Exception e) { + } catch (Exception e) { logger.info(e.getMessage()); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); - } } - public static String getTestData(){ + public static String getTestData() { return JsonUtil.readJsonFileText("TestData.json"); } - public static void deactivate(WebDriver driver) throws IOException { - Commons.click(driver,By.id("ellipsis-button0")); - Commons.click(driver, By.id("Deactivate0")); - if(isElementDisplayed(By.id("confirmpopup"))) - Commons.click(driver,By.id("confirmpopup")); - Commons.click(driver, By.id("confirmmessagepopup")); + public static void deactivate(WebDriver driver, String description) throws IOException { + AdminExtentReportManager.logStep(description); + Commons.click(driver, By.id("ellipsis-button0"), "Clicked on Ellipsis button for the first record"); + Commons.click(driver, By.id("Deactivate0"), "Clicked on Deactivate for the first record"); + if (isElementDisplayed(By.id("confirmpopup"))) { + Commons.click(driver, By.id("confirmpopup"), "Clicked on Confirm popup if displayed"); + } + Commons.click(driver, By.id("confirmmessagepopup"), "Clicked on Confirm Message popup after deactivation"); logger.info("Click deactivate and Confirm"); } - public static void activate(WebDriver driver) throws IOException { - Commons.click(driver,By.id("ellipsis-button0")); - Commons.click(driver, By.id("Activate0")); - if(isElementDisplayed(By.id("confirmpopup"))) - Commons.click(driver,By.id("confirmpopup")); - Commons.click(driver, By.id("confirmmessagepopup")); + public static void deactivate(WebDriver driver) throws IOException { + deactivate(driver, "Deactivate Record"); + } + + public static void activate(WebDriver driver, String description) throws IOException { + AdminExtentReportManager.logStep(description); + Commons.click(driver, By.id("ellipsis-button0"), "Clicked on Ellipsis button for the first record"); + Commons.click(driver, By.id("Activate0"), "Clicked on Activate for the first record"); + if (isElementDisplayed(By.id("confirmpopup"))) { + Commons.click(driver, By.id("confirmpopup"), "Clicked on Confirm popup if displayed"); + } + Commons.click(driver, By.id("confirmmessagepopup"), "Clicked on Confirm Message popup after activation"); logger.info("Click activate and Confirm"); } - public static void edit(WebDriver driver,String data,By by) { + public static void activate(WebDriver driver) throws IOException { + activate(driver, "Activate Record"); + } + + public static void edit(WebDriver driver, String data, By by, String description) throws IOException { + logStep(description + " | New Value → " + data, by); try { - Commons.click(driver,By.id("ellipsis-button0")); - Commons.click(driver, By.id("Edit0")); - - Assert.assertNotEquals(data, - driver.findElement(by).getText()); + Commons.click(driver, By.id("ellipsis-button0"), "Clicked on Ellipsis button for the first record"); + Commons.click(driver, By.id("Edit0"), "Clicked on Edit for the first record"); + Assert.assertNotEquals(data, driver.findElement(by).getText(), + "Verified existing value is different from new data"); driver.findElement(by).clear(); + Commons.enter(driver, by, data, "Entered new data: " + data); + Commons.click(driver, By.id("createButton"), "Clicked on Create button to save changes"); + if (isElementDisplayed(By.id("confirmpopup"))) + Commons.click(driver, By.id("confirmpopup"), "Clicked on Confirm popup if displayed"); + Commons.click(driver, By.id("confirmmessagepopup"), "Clicked on Confirm Message popup after editing"); - Commons.enter(driver, by, data); - - Commons.click(driver, By.id("createButton")); - if(isElementDisplayed(By.id("confirmpopup"))) - Commons.click(driver,By.id("confirmpopup")); - Commons.click(driver, By.id("confirmmessagepopup")); - - logger.info("Click Edit and Confirm" + by + data); + logger.info("Click Edit and Confirm " + by + data); } catch (Exception e) { logger.info(e.getMessage()); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); - } } - public static void editRes(WebDriver driver,String data,By by) throws IOException { + public static void edit(WebDriver driver, String data, By by) throws IOException { + edit(driver, data, by, "Edit the record and confirm"); + } + + public static void editRes(WebDriver driver, String data, By by, String description) throws IOException { + logStep(description + " | New Value → " + data, by); + try { - Commons.click(driver,By.id("ellipsis-button0")); - Commons.click(driver, By.id("Edit0")); + Commons.click(driver, By.id("ellipsis-button0"), "Clicked on Ellipsis button for the first record"); + Commons.click(driver, By.id("Edit0"), "Clicked on Edit for the first record"); wait(3000); - Assert.assertNotEquals(data, - driver.findElement(by).getText()); + Assert.assertNotEquals(data, driver.findElement(by).getText(), + "Verified existing value is different from new data"); wait(3000); driver.findElement(by).clear(); - - Commons.enter(driver, by, data); - - Commons.click(driver, By.id("createButton")); - if(isElementDisplayed(By.id("confirmpopup"))) - Commons.click(driver,By.id("confirmpopup")); - Commons.click(driver, By.id("confirmmessagepopup")); - - logger.info("Click Edit and Confirm" + by + data); - }catch (Exception e) { - Reporter.log("

"); + Commons.enter(driver, by, data, "Entered new data: " + data); + Commons.click(driver, By.id("createButton"), "Clicked on Create button to save changes"); + if (isElementDisplayed(By.id("confirmpopup"))) + Commons.click(driver, By.id("confirmpopup"), "Clicked on Confirm popup if displayed"); + Commons.click(driver, By.id("confirmmessagepopup"), "Clicked on Confirm Message popup after editing"); + logger.info("Click Edit and Confirm " + by + data); + } + catch (Exception e) { + Reporter.log("

"); logger.info(e.getMessage()); + JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); - } } - public static void editCenter(WebDriver driver,String data,By by) { - try { - Commons.click(driver,By.id("ellipsis-button0")); - Commons.click(driver, By.id("Edit0")); - - Assert.assertNotEquals(data, - driver.findElement(by).getText()); - driver.findElement(by).clear(); - - Commons.enter(driver, by, data); + public static void editRes(WebDriver driver, String data, By by) throws IOException { + editRes(driver, data, by, "Edit Resource"); + } - Commons.click(driver, By.xpath("(//*[@id='createButton'])[1]")); - if(isElementDisplayed(By.id("confirmpopup"))) - Commons.click(driver,By.id("confirmpopup")); - Commons.click(driver, By.id("confirmmessagepopup")); + public static void editCenter(WebDriver driver, String data, By by, String description) throws IOException { + logStep(description + " | New Value → " + data, by); - Commons.click(driver, By.xpath("(//*[@id='cancel'])[1]")); - Commons.click(driver, By.xpath("(//*[@id='cancel'])[1]")); - logger.info("Click editCenter and Confirm" + by + data); - } - catch (Exception e) { + try { + Commons.click(driver, By.id("ellipsis-button0"), "Clicked on Ellipsis button for the first record"); + Commons.click(driver, By.id("Edit0"), "Clicked on Edit for the first record"); + Assert.assertNotEquals(data, driver.findElement(by).getText(), + "Verified existing value is different from new data"); + driver.findElement(by).clear(); + Commons.enter(driver, by, data, "Entered new data: " + data); + Commons.click(driver, By.xpath("(//*[@id='createButton'])[1]"), "Clicked on Create button to save changes"); + if (isElementDisplayed(By.id("confirmpopup"))) { + Commons.click(driver, By.id("confirmpopup"), "Clicked on Confirm popup if displayed"); + } + Commons.click(driver, By.id("confirmmessagepopup"), "Clicked on Confirm Message popup after editing"); + Commons.click(driver, By.xpath("(//*[@id='cancel'])[1]"), "Clicked on first Cancel button"); + Commons.click(driver, By.xpath("(//*[@id='cancel'])[1]"), "Clicked on second Cancel button"); + logger.info("Click editCenter and Confirm " + by + data); + } catch (Exception e) { + Reporter.log("

"); logger.info(e.getMessage()); + JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); - } } - public static void create(WebDriver driver) throws IOException { - Commons.click(driver, By.xpath("//button[@id='createButton']")); - if(isElementDisplayed(By.id("confirmpopup"))) - Commons.click(driver, By.id("confirmpopup")); - Commons.click(driver, By.id("confirmmessagepopup")); + public static void editCenter(WebDriver driver, String data, By by) throws IOException { + editCenter(driver, data, by, "Edit Center"); + } + + public static void create(WebDriver driver, String description) throws IOException { + AdminExtentReportManager.logStep(description); + Commons.click(driver, By.xpath("//button[@id='createButton']"), "Clicked on Create button"); + if (isElementDisplayed(By.id("confirmpopup"))) + Commons.click(driver, By.id("confirmpopup"), "Clicked on Confirm popup"); + Commons.click(driver, By.id("confirmmessagepopup"), "Clicked on Confirm Message popup"); logger.info("Click create"); } - public static void createRes(WebDriver driver) throws IOException { - Commons.click(driver, By.xpath("//button[@id='createButton']")); - if(isElementDisplayed(By.id("confirmpopup"))) - Commons.click(driver,By.id("confirmpopup")); - Commons.click(driver, By.id("confirmmessagepopup")); + public static void create(WebDriver driver) throws IOException { + create(driver, "Submit Create"); + } + + public static void createRes(WebDriver driver, String description) throws IOException { + AdminExtentReportManager.logStep(description); + Commons.click(driver, By.xpath("//button[@id='createButton']"), "Clicked on Create button"); + if (isElementDisplayed(By.id("confirmpopup"))) + Commons.click(driver, By.id("confirmpopup"), "Clicked on Confirm popup if displayed"); + Commons.click(driver, By.id("confirmmessagepopup"), "Clicked on Confirm Message popup"); logger.info("Click and confirm"); } - public static void decommission(WebDriver driver) throws IOException { - Commons.click(driver,By.id("ellipsis-button0")); - Commons.click(driver,By.id("Decommission0")); - if(isElementDisplayed(By.id("confirmpopup"))) - Commons.click(driver,By.id("confirmpopup")); - Commons.click(driver, By.id("confirmmessagepopup")); + public static void createRes(WebDriver driver) throws IOException { + create(driver, "Create Resource"); + } + + public static void decommission(WebDriver driver, String description) throws IOException { + AdminExtentReportManager.logStep(description); + Commons.click(driver, By.id("ellipsis-button0"), "Clicked on Ellipsis button for the first record"); + Commons.click(driver, By.id("Decommission0"), "Clicked on Decommission for the first record"); + if (isElementDisplayed(By.id("confirmpopup"))) + Commons.click(driver, By.id("confirmpopup"), "Clicked on Confirm popup if displayed"); + Commons.click(driver, By.id("confirmmessagepopup"), "Clicked on Confirm Message popup after decommission"); logger.info("Click decommission and confirm"); } + public static void decommission(WebDriver driver) throws IOException { + decommission(driver, "Decommission Record"); + } + public static String getPreAppend() { String preappend = null; try { - preappend =ConfigManager.getpreappend(); + preappend = ConfigManager.getpreappend(); } catch (Exception e) { e.printStackTrace(); } return preappend; } - public static void calendar(String date) throws IOException { - String a=date.replaceAll("/",""); - String mon=""; - if(a.substring(0,2).equals("10")) { - mon= a.substring(0,2); - }else { - mon=a.substring(0,2).replace("0",""); + public static void calendar(String date, String description) throws IOException { + AdminExtentReportManager.logStep(description + " | Date → " + date); + String a = date.replaceAll("/", ""); + String mon = ""; + if (a.substring(0, 2).equals("10")) { + mon = a.substring(0, 2); + } else { + mon = a.substring(0, 2).replace("0", ""); } - String d=""; - if(a.substring(2,4).equals("10") || a.substring(2,4).equals("20")||a.substring(2,4).equals("30")) { - d=a.substring(2,4); - }else { - d=a.substring(2,4).replace("0",""); + String d = ""; + if (a.substring(2, 4).equals("10") || a.substring(2, 4).equals("20") || a.substring(2, 4).equals("30")) { + d = a.substring(2, 4); + } else { + d = a.substring(2, 4).replace("0", ""); } - int month=Integer.parseInt(mon) ; - int day=Integer.parseInt(d); - int year=Integer.parseInt(a.substring(4,8)); + int month = Integer.parseInt(mon); + int day = Integer.parseInt(d); + int year = Integer.parseInt(a.substring(4, 8)); try { - Commons.click(driver(),By.xpath("//*[@class='mat-datepicker-toggle']//button")); + Commons.click(driver(), By.xpath("//*[@class='mat-datepicker-toggle']//button"), "Opened the datepicker"); wait(500); - Commons.click(driver(),By.xpath("//*[@class='mat-calendar-arrow']")); + + Commons.click(driver(), By.xpath("//*[@class='mat-calendar-arrow']"), + "Navigated to year selection in datepicker"); wait(500); - Commons.click(driver(),By.xpath("//*[text()='"+year+"']")); + + Commons.click(driver(), By.xpath("//*[text()='" + year + "']"), "Selected year: " + year); wait(500); - List cli= driver().findElements(By.xpath("//*[@class='mat-calendar-body-cell-content']")); - cli.get(month-1).click(); + + List cli = driver().findElements(By.xpath("//*[@class='mat-calendar-body-cell-content']")); + cli.get(month - 1).click(); wait(500); - Commons.click(driver(),By.xpath("//*[text()='"+day+"']")); - }catch (Exception e) { - Reporter.log("

"); + + Commons.click(driver(), By.xpath("//*[text()='" + day + "']"), "Selected day: " + day); + } catch (Exception e) { + Reporter.log("

"); logger.info(e.getMessage()); } } - - public static void calendar(String date, String locale) throws IOException { - String a = date.replaceAll("/", ""); - int month = Integer.parseInt(a.substring(0, 2)); - int day = Integer.parseInt(a.substring(2, 4)); - int year = Integer.parseInt(a.substring(4, 8)); - - try { - // Open calendar - Commons.click(driver(), By.xpath("//*[@class='mat-datepicker-toggle']//button")); - Thread.sleep(500); - - // Expand year/month selector - Commons.click(driver(), By.xpath("//*[@class='mat-calendar-arrow']")); - Thread.sleep(500); - - // Click year - String yearText = convertDigits(String.valueOf(year), locale); - Commons.click(driver(), By.xpath("//*[normalize-space(text())='" + yearText + "']")); - Thread.sleep(500); - - // Select month (index based to avoid translation issues) - List months = driver().findElements(By.xpath("//*[@class='mat-calendar-body-cell-content']")); - months.get(month - 1).click(); - Thread.sleep(500); - - // Select day (convert if Arabic locale) - String dayText = convertDigits(String.valueOf(day), locale); - Commons.click(driver(), By.xpath("//*[normalize-space(text())='" + dayText + "']")); - } catch (Exception e) { - Reporter.log("

"); - logger.info(e.getMessage()); - } + + public static void calendar(String date, String locale, String description) throws IOException { + AdminExtentReportManager.logStep(description + " | Date → " + date); + String a = date.replaceAll("/", ""); + int month = Integer.parseInt(a.substring(0, 2)); + int day = Integer.parseInt(a.substring(2, 4)); + int year = Integer.parseInt(a.substring(4, 8)); + + try { + // Open calendar + Commons.click(driver(), By.xpath("//*[@class='mat-datepicker-toggle']//button"), "Opened the datepicker"); + Thread.sleep(500); + + // Expand year/month selector + Commons.click(driver(), By.xpath("//*[@class='mat-calendar-arrow']"), + "Expanded year/month selector in datepicker"); + Thread.sleep(500); + + // Click the desired year + String yearText = convertDigits(String.valueOf(year), locale); + Commons.click(driver(), By.xpath("//*[normalize-space(text())='" + yearText + "']"), + "Selected year: " + yearText); + Thread.sleep(500); + + // Select month (index based to avoid translation issues) + List months = driver().findElements(By.xpath("//*[@class='mat-calendar-body-cell-content']")); + months.get(month - 1).click(); + Thread.sleep(500); + + // Select day (convert if Arabic locale) + String dayText = convertDigits(String.valueOf(day), locale); + Commons.click(driver(), By.xpath("//*[normalize-space(text())='" + dayText + "']"), + "Selected day: " + dayText); + } catch (Exception e) { + Reporter.log("

"); + logger.info(e.getMessage()); + } } public static void wait(int waitTime) { @@ -390,12 +479,12 @@ public static void wait(int waitTime) { } public static boolean isElementDisplayed(By by) { - try { - wait(500); // Make sure you have a proper wait method or use Thread.sleep(500); - return driver().findElement(by).isDisplayed(); - } catch (Exception e) { - return false; - } + try { + wait(500); // Make sure you have a proper wait method or use Thread.sleep(500); + return driver().findElement(by).isDisplayed(); + } catch (Exception e) { + return false; + } } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java index 97bba12a..b6d038c6 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java @@ -44,6 +44,7 @@ public static void startTestRunner() throws Exception { XmlSuite suite = new XmlSuite(); suite.setName("ADMIN-UI-AUTOMATION"); suite.addListener("io.mosip.testrig.adminui.utility.EmailableReport"); + suite.addListener("io.mosip.testrig.adminui.utility.AdminTestListener"); XmlClass blocklistedwordsCRUD = new XmlClass("io.mosip.testrig.adminui.testcase.BlockListTest"); XmlClass bulkUploadCRUD = new XmlClass("io.mosip.testrig.adminui.testcase.BulkUploadTest"); XmlClass centerCRUD = new XmlClass("io.mosip.testrig.adminui.testcase.CenterTest"); From 79e3077169e9c2c714d6d6cab6412859e8384603 Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Tue, 2 Dec 2025 13:00:39 +0530 Subject: [PATCH 02/23] MOSIP-43846 : Reporting Enhancements for Admin UI Automation Signed-off-by: Bhuvanashree B S --- .../io/mosip/testrig/adminui/testcase/DeviceTypesTest.java | 4 ---- .../testrig/adminui/testcase/DocumentCategoriesTest.java | 4 ---- 2 files changed, 8 deletions(-) diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceTypesTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceTypesTest.java index dbc33c1e..6de9edd8 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceTypesTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DeviceTypesTest.java @@ -23,16 +23,12 @@ public void deviceTypesCRUD() throws IOException { Commons.filter(driver(), By.id("name"), data, "Filtered by device type name"); Commons.edit(driver(), data + 1, By.id("name"), "Editing Device Type Name"); - Commons.enter(driver(), By.id("description"), data + 1, "Updated Device Type Description"); - Commons.create(driver(), "Saved Edited Device Type"); Commons.filter(driver(), By.id("name"), data + 1, "Filtered after edit"); Commons.activate(driver(), "Activated Device Type"); Commons.edit(driver(), data + 2, By.id("name"), "Editing Device Type Name"); - Commons.enter(driver(), By.id("description"), data + 2, "Updated Device Type Description again"); - Commons.create(driver(), "Saved Edited Device Type"); Commons.filter(driver(), By.id("name"), data + 2, "Filtered after second edit"); diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DocumentCategoriesTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DocumentCategoriesTest.java index c2698d83..84115300 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DocumentCategoriesTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/DocumentCategoriesTest.java @@ -26,16 +26,12 @@ public void documentCategoriesCRUD() throws IOException { Commons.filter(driver(), By.id("name"), data, "Filtered by Document Category Name"); Commons.edit(driver(), data + 1, By.id("name"), "Editing Document Category Name"); - Commons.enter(driver(), By.id("description"), data + 1, "Updated Document Category Description"); - Commons.create(driver(), "Saved Edited Document Category"); Commons.filter(driver(), By.id("name"), data + 1, "Filtered after edit"); Commons.activate(driver(), "Activated Document Category"); Commons.edit(driver(), data + 2, By.id("name"), "Editing Document Category again"); - Commons.enter(driver(), By.id("description"), data + 2, "Updated Document Category Description again"); - Commons.create(driver(), "Saved Edited Document Category"); Commons.filter(driver(), By.id("name"), data + 2, "Filtered after second edit"); From 4d17a617b3ec51c6f633e2859d4fc0042ff3947b Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Tue, 2 Dec 2025 15:02:01 +0530 Subject: [PATCH 03/23] resolved codeRabbit comments Signed-off-by: Bhuvanashree B S --- .../adminui/utility/AdminTestListener.java | 48 ++++++++----------- .../testrig/adminui/utility/BaseClass.java | 10 +++- .../testrig/adminui/utility/Commons.java | 2 +- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java index 6a17869c..d1690160 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java @@ -2,6 +2,9 @@ import org.testng.ITestListener; import org.testng.ITestResult; + +import com.aventstack.extentreports.ExtentTest; + import org.testng.ITestContext; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; @@ -32,43 +35,34 @@ public void onTestStart(ITestResult result) { @Override public void onTestSuccess(ITestResult result) { - AdminExtentReportManager.logStep("🟩 Test Passed : " + result.getName()); - AdminExtentReportManager.incrementPassed(); - AdminExtentReportManager.getTest().pass("Test Passed Successfully!"); + ExtentTest test = AdminExtentReportManager.getTest(); + if (test != null) { + AdminExtentReportManager.logStep("🟩 Test Passed : " + result.getName()); + AdminExtentReportManager.incrementPassed(); + test.pass("Test Passed Successfully!"); + } } @Override public void onTestFailure(ITestResult result) { - String testName = result.getName(); - AdminExtentReportManager.logStep("🟥 Test Failed : " + testName); - - AdminExtentReportManager.incrementFailed(); - - try { - WebDriver driver = BaseClass.driver(); - if (driver != null) { - byte[] screenshotBytes = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES); - String base64Screenshot = java.util.Base64.getEncoder().encodeToString(screenshotBytes); - - AdminExtentReportManager.attachScreenshotFromBase64(base64Screenshot, - "Failure Screenshot - " + testName); - } - } catch (Exception e) { - AdminExtentReportManager.logStep("⚠️ Screenshot capture failed: " + e.getMessage()); - } - - if (AdminExtentReportManager.getTest() != null) { - AdminExtentReportManager.getTest().fail(result.getThrowable()); + ExtentTest test = AdminExtentReportManager.getTest(); + if (test != null) { + AdminExtentReportManager.logStep("🟥 Test Failed : " + result.getName()); + AdminExtentReportManager.incrementFailed(); + test.fail(result.getThrowable()); } } @Override public void onTestSkipped(ITestResult result) { - AdminExtentReportManager.logStep("⚠️ Test Skipped : " + result.getName()); - AdminExtentReportManager.incrementSkipped(); - AdminExtentReportManager.getTest().skip("Skipped due to preconditions/Dependencies"); + ExtentTest test = AdminExtentReportManager.getTest(); + if (test != null) { + AdminExtentReportManager.logStep("⚠️ Test Skipped : " + result.getName()); + AdminExtentReportManager.incrementSkipped(); + test.skip("Skipped due to preconditions/Dependencies"); + } } - + @Override public void onFinish(ITestContext context) { AdminExtentReportManager.flushReport(); diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/BaseClass.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/BaseClass.java index 26b91202..734d27c1 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/BaseClass.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/BaseClass.java @@ -139,9 +139,15 @@ public void tearDown(ITestResult result) { logger.warn("Unable to capture screenshot in tearDown: " + e.getMessage()); } } else if (result != null && result.getStatus() == ITestResult.SUCCESS) { - AdminExtentReportManager.getTest().pass("✅ Test Passed: " + result.getName()); + ExtentTest test = AdminExtentReportManager.getTest(); + if (test != null) { + test.pass("✅ Test Passed: " + result.getName()); + } } else if (result != null && result.getStatus() == ITestResult.SKIP) { - AdminExtentReportManager.getTest().skip("⚠️ Test Skipped: " + result.getName()); + ExtentTest test = AdminExtentReportManager.getTest(); + if (test != null) { + test.skip("⚠️ Test Skipped: " + result.getName()); + } } } finally { if (driverThread.get() != null) { diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/Commons.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/Commons.java index d8fff14b..b6550009 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/Commons.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/Commons.java @@ -362,7 +362,7 @@ public static void createRes(WebDriver driver, String description) throws IOExce } public static void createRes(WebDriver driver) throws IOException { - create(driver, "Create Resource"); + createRes(driver, "Create Resource"); } public static void decommission(WebDriver driver, String description) throws IOException { From ba96af3f64815efcb81fdc756543db0c3e2a4a2c Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Tue, 2 Dec 2025 16:02:15 +0530 Subject: [PATCH 04/23] Resolved codeRabbit comments Signed-off-by: Bhuvanashree B S --- .../testrig/adminui/utility/BaseClass.java | 23 ++++--------------- .../testrig/adminui/utility/Commons.java | 8 +++---- 2 files changed, 9 insertions(+), 22 deletions(-) diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/BaseClass.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/BaseClass.java index 734d27c1..e4cbfd41 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/BaseClass.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/BaseClass.java @@ -2,6 +2,7 @@ import java.io.File; import java.lang.reflect.Method; +import java.time.Duration; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -78,7 +79,7 @@ public void setUp(Method testMethod) throws Exception { logger.info("Launch URL: " + envPath); driver().manage().window().maximize(); Commons.wait(500); - driver().manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); + driver().manage().timeouts().implicitlyWait(Duration.ofSeconds(20)); String language1 = ConfigManager.getloginlang(); String loginlang; @@ -128,33 +129,19 @@ public void tearDown(ITestResult result) { byte[] screenshot = ((org.openqa.selenium.TakesScreenshot) drv) .getScreenshotAs(org.openqa.selenium.OutputType.BYTES); String base64 = java.util.Base64.getEncoder().encodeToString(screenshot); - ExtentTest test = AdminExtentReportManager.getTest(); - if (test != null) { - test.fail("❌ Test Failed: " + result.getName()); - test.fail(result.getThrowable()); - } - AdminExtentReportManager.attachScreenshotFromBase64(base64, "Failure Screenshot"); + + AdminExtentReportManager.attachScreenshotFromBase64(base64, + "Failure Screenshot - " + result.getName()); } } catch (Exception e) { logger.warn("Unable to capture screenshot in tearDown: " + e.getMessage()); } - } else if (result != null && result.getStatus() == ITestResult.SUCCESS) { - ExtentTest test = AdminExtentReportManager.getTest(); - if (test != null) { - test.pass("✅ Test Passed: " + result.getName()); - } - } else if (result != null && result.getStatus() == ITestResult.SKIP) { - ExtentTest test = AdminExtentReportManager.getTest(); - if (test != null) { - test.skip("⚠️ Test Skipped: " + result.getName()); - } } } finally { if (driverThread.get() != null) { driverThread.get().quit(); driverThread.remove(); } - AdminExtentReportManager.flushReport(); AdminExtentReportManager.removeTest(); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/Commons.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/Commons.java index b6550009..7364aed5 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/Commons.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/Commons.java @@ -441,23 +441,23 @@ public static void calendar(String date, String locale, String description) thro try { // Open calendar Commons.click(driver(), By.xpath("//*[@class='mat-datepicker-toggle']//button"), "Opened the datepicker"); - Thread.sleep(500); + wait(500); // Expand year/month selector Commons.click(driver(), By.xpath("//*[@class='mat-calendar-arrow']"), "Expanded year/month selector in datepicker"); - Thread.sleep(500); + wait(500); // Click the desired year String yearText = convertDigits(String.valueOf(year), locale); Commons.click(driver(), By.xpath("//*[normalize-space(text())='" + yearText + "']"), "Selected year: " + yearText); - Thread.sleep(500); + wait(500); // Select month (index based to avoid translation issues) List months = driver().findElements(By.xpath("//*[@class='mat-calendar-body-cell-content']")); months.get(month - 1).click(); - Thread.sleep(500); + wait(500); // Select day (convert if Arabic locale) String dayText = convertDigits(String.valueOf(day), locale); From bbeeb7b7bb57f32c16fd6444ba351600495dd263 Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Tue, 2 Dec 2025 16:47:56 +0530 Subject: [PATCH 05/23] Addressed codeRabbit comment Signed-off-by: Bhuvanashree B S --- .../testrig/adminui/utility/BaseClass.java | 3 +- .../testrig/adminui/utility/Commons.java | 65 +++++++++++++------ 2 files changed, 45 insertions(+), 23 deletions(-) diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/BaseClass.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/BaseClass.java index e4cbfd41..a31578c8 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/BaseClass.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/BaseClass.java @@ -5,7 +5,6 @@ import java.time.Duration; import java.util.HashMap; import java.util.Map; -import java.util.concurrent.TimeUnit; import org.apache.log4j.Logger; import org.openqa.selenium.By; @@ -99,7 +98,7 @@ public void setUp(Method testMethod) throws Exception { Commons.click(driver(), By.xpath(xpath), "Selected language: " + loginlang); Commons.enter(driver(), By.id("username"), userid, "Entered username"); - Commons.enter(driver(), By.id("password"), password, "Entered password"); + Commons.enterSensitive(driver(), By.id("password"), password, "Entered password"); Commons.click(driver(), By.xpath("//input[@name='login']"), "Clicked login button"); if (AdminExtentReportManager.getTest() == null) { diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/Commons.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/Commons.java index 7364aed5..9b65e635 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/Commons.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/Commons.java @@ -54,8 +54,7 @@ public static void filter(WebDriver driver, By by, String data, String descripti Commons.enter(driver, by, data, "Enter filter text"); wait(3000); Commons.click(driver, By.id("applyTxt"), "Apply filter"); - } - catch (Exception e) { + } catch (Exception e) { Reporter.log("

"); logger.info(e.getMessage()); @@ -74,8 +73,7 @@ public static void filterCenter(WebDriver driver, By by, String data, String des Commons.click(driver, By.id("Filter"), "Click Filter"); Commons.dropdowncenter(driver, by, data); Commons.click(driver, By.id("applyTxt"), "Apply Filter"); - } - catch (Exception e) { + } catch (Exception e) { Reporter.log("

"); logger.info(e.getMessage()); @@ -135,18 +133,42 @@ public static void enter(WebDriver driver, By by, String value, String descripti public static void enter(WebDriver driver, By by, String value) throws IOException { enter(driver, by, value, "Entered text"); } - + + public static void enterSensitive(WebDriver driver, By by, String value, String description) throws IOException { + logStep(description + " | Value → ****", by); + logger.info("Entering sensitive value into element " + by); + + try { + driver.findElement(by).clear(); + driver.findElement(by).sendKeys(value); + } catch (StaleElementReferenceException sere) { + Reporter.log("

"); + driver.findElement(by).sendKeys(value); + } catch (TimeoutException toe) { + Reporter.log("

"); + driver.findElement(by).sendKeys(value); + logger.info("Sensitive element " + by.toString() + " was not clickable after timeout"); + } catch (Exception e) { + Reporter.log("

"); + JavascriptExecutor executor = (JavascriptExecutor) driver; + executor.executeScript("arguments[0].click();", driver.findElement(by)); + } + } + public static void dropdown(WebDriver driver, By by, String description) throws IOException { logStep(description + " | Selected index 0", by); logger.info("Selecting DropDown Index Zero Value " + by); try { wait(500); - click(driver, by,"Clicked dropdown to expand options");//REGION + click(driver, by, "Clicked dropdown to expand options"); wait(500); String att = driver.findElement(by).getAttribute("aria-owns"); String[] list = att.split(" "); - click(driver, By.id(list[0]),"Clicked on first element from the list"); + click(driver, By.id(list[0]), "Clicked on first element from the list"); wait(500); } catch (Exception e) { Reporter.log("

"); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); } } - public static void dropdowncenter(WebDriver driver, By by, String value, String description) { + public static void dropdowncenter(WebDriver driver, By by, String value, String description) throws IOException { logStep(description + " | Select dropdown center using value: " + value, by); logger.info("Selecting DropDown By Value " + by + value); @@ -185,15 +209,15 @@ public static void dropdowncenter(WebDriver driver, By by, String value, String wait(500); click(driver, By.id(value), "Selected dropdown value with ID: " + value); wait(500); - } catch (Exception e) { - logger.info(e.getMessage()); + Reporter.log("

"); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); } } - public static void dropdowncenter(WebDriver driver, By by, String value) { + public static void dropdowncenter(WebDriver driver, By by, String value) throws IOException { dropdowncenter(driver, by, value, "Select dropdown center value"); } @@ -202,12 +226,13 @@ public static void dropdown(WebDriver driver, By by, By value, String descriptio logger.info("Selecting DropDown By Value " + by + value); try { wait(500); - click(driver, by,"Clicked on dropdown field to expand options"); + click(driver, by, "Clicked on dropdown field to expand options"); wait(500); - click(driver, value,"Selected value from the dropdown"); + click(driver, value, "Selected value from the dropdown"); wait(500); } catch (Exception e) { - logger.info(e.getMessage()); + Reporter.log("

"); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); } @@ -263,8 +288,7 @@ public static void edit(WebDriver driver, String data, By by, String description Commons.click(driver, By.id("confirmmessagepopup"), "Clicked on Confirm Message popup after editing"); logger.info("Click Edit and Confirm " + by + data); - } - catch (Exception e) { + } catch (Exception e) { logger.info(e.getMessage()); JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", driver.findElement(by)); @@ -292,8 +316,7 @@ public static void editRes(WebDriver driver, String data, By by, String descript Commons.click(driver, By.id("confirmpopup"), "Clicked on Confirm popup if displayed"); Commons.click(driver, By.id("confirmmessagepopup"), "Clicked on Confirm Message popup after editing"); logger.info("Click Edit and Confirm " + by + data); - } - catch (Exception e) { + } catch (Exception e) { Reporter.log("

"); logger.info(e.getMessage()); From faf58e2a8ebaa5d0f315c6c83d99877b215759f2 Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Thu, 4 Dec 2025 17:12:54 +0530 Subject: [PATCH 06/23] Added method to push report to Minio Signed-off-by: Bhuvanashree B S --- .../utility/AdminExtentReportManager.java | 46 +++++++++++++++++-- .../src/main/resources/testngFile/testng.xml | 1 + 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminExtentReportManager.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminExtentReportManager.java index 75146c5b..88b2f320 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminExtentReportManager.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminExtentReportManager.java @@ -1,6 +1,7 @@ package io.mosip.testrig.adminui.utility; import java.io.BufferedReader; +import java.io.File; import java.io.InputStream; import java.io.InputStreamReader; import java.io.IOException; @@ -15,6 +16,8 @@ import com.aventstack.extentreports.reporter.configuration.Theme; import io.mosip.testrig.adminui.kernel.util.ConfigManager; +import io.mosip.testrig.adminui.kernel.util.S3Adapter; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -32,6 +35,7 @@ public class AdminExtentReportManager { private static int passedCount = 0; private static int failedCount = 0; private static int skippedCount = 0; + private static String reportPath; public synchronized static void initReport() { if (extent == null) { @@ -42,7 +46,7 @@ public synchronized static void initReport() { + safeEnvName() + " ---- Branch: " + gitBranch + " & Commit: " + gitCommitId; String timestamp = new SimpleDateFormat("yyyy-MMM-dd_HH-mm").format(new Date()).toLowerCase(); - String reportPath = "test-output/AdminReport_" + timestamp + ".html"; + reportPath = "test-output/AdminReport_" + timestamp + ".html"; ExtentSparkReporter spark = new ExtentSparkReporter(reportPath); spark.config().setTheme(Theme.DARK); @@ -226,8 +230,42 @@ public static void attachScreenshotFromBase64(String base64, String title) { } public static synchronized void flushReport() { - if (extent != null) { - extent.flush(); - } + if (extent != null) { + extent.flush(); + LOGGER.info("Extent report flushed successfully."); + + try { + pushReportToS3(reportPath); + } catch (Exception e) { + LOGGER.error("Error while uploading report: ", e); + } + } + } + + public static synchronized void pushReportToS3(String reportFilePath) { + if (ConfigManager.getPushReportsToS3().equalsIgnoreCase("yes")) { + S3Adapter s3Adapter = new S3Adapter(); + File reportFile = new File(reportFilePath); + boolean isStoreSuccess = false; + try { + isStoreSuccess = s3Adapter.putObject( + ConfigManager.getS3Account(), + "Adminui", + null, + null, + reportFile.getName(), + reportFile + ); + if (isStoreSuccess) { + LOGGER.info("Admin Extent report successfully pushed to S3/MinIO: {} "+reportFile.getName()); + } else { + LOGGER.error("Failed to push Admin Extent report to S3/MinIO: { } "+ reportFile.getName()); + } + } catch (Exception e) { + LOGGER.error("Exception while pushing Admin Extent report to S3/MinIO: {} "+e.getMessage()); + } + } } + + } diff --git a/uitest-admin/src/main/resources/testngFile/testng.xml b/uitest-admin/src/main/resources/testngFile/testng.xml index a72d9faa..a6c215a5 100644 --- a/uitest-admin/src/main/resources/testngFile/testng.xml +++ b/uitest-admin/src/main/resources/testngFile/testng.xml @@ -26,6 +26,7 @@ + From f5c932aa0f27517a0781cf298d857b395bc24199 Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Thu, 4 Dec 2025 17:54:24 +0530 Subject: [PATCH 07/23] changed base image in Dockerfile Signed-off-by: Bhuvanashree B S --- uitest-admin/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uitest-admin/Dockerfile b/uitest-admin/Dockerfile index 5475b9d4..75a6f3fa 100644 --- a/uitest-admin/Dockerfile +++ b/uitest-admin/Dockerfile @@ -1,5 +1,5 @@ # Start with a base image that includes Java 21 -FROM openjdk:21-slim +FROM eclipse-temurin:21-jre-alpine # Install additional dependencies, such as Selenium, Chrome, and kubectl USER root From c5884b81a22e2a567fb35c3ccf2f479184a5469b Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Thu, 4 Dec 2025 18:39:11 +0530 Subject: [PATCH 08/23] changed base image in Dockerfile Signed-off-by: Bhuvanashree B S --- uitest-admin/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uitest-admin/Dockerfile b/uitest-admin/Dockerfile index 75a6f3fa..1d06f7d2 100644 --- a/uitest-admin/Dockerfile +++ b/uitest-admin/Dockerfile @@ -1,5 +1,5 @@ # Start with a base image that includes Java 21 -FROM eclipse-temurin:21-jre-alpine +FROM eclipse-temurin:21-jdk # Install additional dependencies, such as Selenium, Chrome, and kubectl USER root From cc75283760981849a5e66de31105f0501ee3f31b Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Fri, 5 Dec 2025 10:38:04 +0530 Subject: [PATCH 09/23] In Docker file base image updated Signed-off-by: Bhuvanashree B S --- uitest-admin/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uitest-admin/Dockerfile b/uitest-admin/Dockerfile index 1d06f7d2..df13468c 100644 --- a/uitest-admin/Dockerfile +++ b/uitest-admin/Dockerfile @@ -1,5 +1,5 @@ # Start with a base image that includes Java 21 -FROM eclipse-temurin:21-jdk +FROM abhishek8shankar/uitest-admin:develop # Install additional dependencies, such as Selenium, Chrome, and kubectl USER root From 1baf7a2d01e9cfc5f9f932c5cab84b86d1458270 Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Fri, 5 Dec 2025 11:36:47 +0530 Subject: [PATCH 10/23] Updated docker file Signed-off-by: Bhuvanashree B S --- uitest-admin/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uitest-admin/Dockerfile b/uitest-admin/Dockerfile index df13468c..1d06f7d2 100644 --- a/uitest-admin/Dockerfile +++ b/uitest-admin/Dockerfile @@ -1,5 +1,5 @@ # Start with a base image that includes Java 21 -FROM abhishek8shankar/uitest-admin:develop +FROM eclipse-temurin:21-jdk # Install additional dependencies, such as Selenium, Chrome, and kubectl USER root From 86dcfdde7328a3601b50606a12b6c03bfb61d48a Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Fri, 5 Dec 2025 12:31:57 +0530 Subject: [PATCH 11/23] Updated docker file Signed-off-by: Bhuvanashree B S --- uitest-admin/Dockerfile | 68 ++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 31 deletions(-) diff --git a/uitest-admin/Dockerfile b/uitest-admin/Dockerfile index 1d06f7d2..6c119d60 100644 --- a/uitest-admin/Dockerfile +++ b/uitest-admin/Dockerfile @@ -1,53 +1,59 @@ -# Start with a base image that includes Java 21 -FROM eclipse-temurin:21-jdk +# --- Base image --- +FROM eclipse-temurin:21-jre-alpine -# Install additional dependencies, such as Selenium, Chrome, and kubectl -USER root - -RUN apt-get update && \ - apt-get install -y wget curl unzip xvfb libxi6 libgconf-2-4 chromium chromium-driver - -# Install kubectl -RUN curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" && \ - chmod +x kubectl && \ - mv kubectl /usr/local/bin/kubectl - -# Define build-time arguments and labels +# --- Build-time arguments (MUST be declared before LABEL) --- ARG SOURCE ARG COMMIT_HASH ARG COMMIT_ID ARG BUILD_TIME -# Set labels for metadata +# --- Metadata labels (used by CI for validation) --- LABEL source=${SOURCE} LABEL commit_hash=${COMMIT_HASH} LABEL commit_id=${COMMIT_ID} LABEL build_time=${BUILD_TIME} -# Define build-time arguments for user and group +# --- Additional build-time args --- ARG container_user=mosip ARG container_user_group=mosip ARG container_user_uid=1001 ARG container_user_gid=1001 - -# Set working directory for the user -ENV work_dir=/home/${container_user}/ - -# Create a new user with specified permissions -RUN groupadd -g ${container_user_gid} ${container_user_group} \ - && useradd -u ${container_user_uid} -g ${container_user_group} -s /bin/bash -m ${container_user} -d ${work_dir} \ - && chown -R ${container_user}:${container_user} /home/${container_user}/ - -# Switch to the specified user for the subsequent commands -USER ${container_user_uid}:${container_user_gid} +ARG KUBECTL_VERSION=1.22.9 + +# --- Environment variables --- +ENV DISPLAY=:99 +ENV work_dir=/home/${container_user} + +# --- Install dependencies & setup user --- +RUN apk -q update && \ + apk add --no-cache wget curl unzip xvfb libxi chromium chromium-chromedriver bash shadow && \ + \ + addgroup -g ${container_user_gid} ${container_user_group} && \ + adduser -s /bin/sh -u ${container_user_uid} -G ${container_user_group} -h /home/${container_user} --disabled-password ${container_user} && \ + \ + curl -LO "https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl" && \ + chmod +x kubectl && mv kubectl /usr/local/bin/ && \ + \ + mkdir -p ${work_dir}/src/test/resources/ \ + ${work_dir}/test-output/SparkReport/ \ + ${work_dir}/screenshots/ && \ + chmod -R 775 ${work_dir} # Copy your application files into the container COPY --chown=${container_user_uid}:${container_user} --chmod=771 ./entrypoint.sh ${work_dir}/entrypoint.sh COPY --chown=${container_user}:${container_user} ./src/main/resources/ ${work_dir}/resources/ COPY --chown=${container_user_uid}:${container_user} ./target/*.jar ${work_dir} -# Set the working directory -WORKDIR /home/${container_user}/ +# --- Fix permissions for entrypoint and JARs --- +RUN chmod +x ${work_dir}/entrypoint.sh && \ + find ${work_dir} -name "*.jar" -exec chmod 644 {} \; && \ + chown -R ${container_user}:${container_user} ${work_dir}; + +# --- Switch to non-root user --- +USER ${container_user_uid}:${container_user_gid} + +# --- Set working directory --- +WORKDIR ${work_dir} -# Entrypoint for the container -ENTRYPOINT ["/bin/bash", "-c", "./entrypoint.sh"] +# --- Default entrypoint --- +ENTRYPOINT ["bash", "entrypoint.sh"] \ No newline at end of file From 9fa44b465a508f53afe9ce07b25ff2e0b81b4c79 Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Fri, 5 Dec 2025 13:23:08 +0530 Subject: [PATCH 12/23] Addressed the comments and made changes Signed-off-by: Bhuvanashree B S --- .../adminui/testcase/BulkUploadTest.java | 4 +- .../utility/AdminExtentReportManager.java | 65 ++++---- .../adminui/utility/AdminTestListener.java | 141 +++++++++++------- .../testrig/adminui/utility/BaseClass.java | 19 +-- .../testrig/adminui/utility/Commons.java | 87 ++++++----- 5 files changed, 172 insertions(+), 144 deletions(-) diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/BulkUploadTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/BulkUploadTest.java index 8ed5fcf3..a09cda9d 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/BulkUploadTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/BulkUploadTest.java @@ -41,14 +41,14 @@ public void bulkUploadCRUD(String table) throws Exception { Commons.click(driver(), By.xpath("//button[@id='createButton']"), "Clicked on Create/Upload button"); Commons.click(driver(), By.id("confirmpopup"), "Confirmed the upload in popup"); - Commons.wait(2000); + Commons.waitForElementVisible(driver(), By.xpath("//div[@class='mat-dialog-content']//div")); String divText = driver().findElement(By.xpath("//div[@class='mat-dialog-content']//div")).getText(); String divTextArr[] = divText.split(":"); logger.info("Bulk Upload Result: " + divTextArr[1].trim()); Commons.click(driver(), By.id("confirmmessagepopup"), "Closed the confirmation message popup"); - Commons.wait(2000); + Commons.waitForElementVisible(driver(), By.xpath("//table[@class='mat-table']//tr[2]//td[1]")); String transId = driver().findElement(By.xpath("//table[@class='mat-table']//tr[2]//td[1]")).getText(); String status = driver().findElement(By.xpath("//table[@class='mat-table']//tr[2]//td[5]")).getText(); Reporter.log("

((JavascriptExecutor) webDriver).executeScript("return document.readyState") + .equals("complete")); + } + private static void logStep(String description, By by) { AdminExtentReportManager.logStepWithLocator(description, getLocator(by)); } @@ -50,9 +70,9 @@ public static void filter(WebDriver driver, By by, String data, String descripti try { logger.info("Inside Filter " + by + " with data: " + data); Commons.click(driver, By.id("Filter"), "Click Filter"); - wait(3000); + waitForElementVisible(driver, by); Commons.enter(driver, by, data, "Enter filter text"); - wait(3000); + waitForElementClickable(driver, By.id("applyTxt")); Commons.click(driver, By.id("applyTxt"), "Apply filter"); } catch (Exception e) { Reporter.log("

"); @@ -162,14 +181,14 @@ public static void dropdown(WebDriver driver, By by, String description) throws logStep(description + " | Selected index 0", by); logger.info("Selecting DropDown Index Zero Value " + by); try { - wait(500); + waitForElementClickable(driver, by); click(driver, by, "Clicked dropdown to expand options"); - wait(500); String att = driver.findElement(by).getAttribute("aria-owns"); String[] list = att.split(" "); + waitForElementClickable(driver, By.id(list[0])); click(driver, By.id(list[0]), "Clicked on first element from the list"); - wait(500); + } catch (Exception e) { Reporter.log("

"); @@ -183,14 +202,13 @@ public static void dropdown(WebDriver driver, By by, String value, String descri logger.info("Selecting DropDown By Value " + by + value); try { - wait(500); + waitForElementClickable(driver, by); click(driver, by, "Clicked dropdown to expand options"); - wait(500); - + waitForElementClickable(driver, By.xpath("//span[contains(text(),'" + value + "')]")); String val = "'" + value + "'"; click(driver, By.xpath("//span[contains(text()," + val + ")]"), "Selected value: " + value + " from the list"); - wait(500); + } catch (Exception e) { Reporter.log("

"); @@ -204,11 +222,11 @@ public static void dropdowncenter(WebDriver driver, By by, String value, String logger.info("Selecting DropDown By Value " + by + value); try { - wait(500); + waitForElementClickable(driver, by); click(driver, by, "Clicked dropdown field to view options"); - wait(500); + waitForElementClickable(driver, By.id(value)); click(driver, By.id(value), "Selected dropdown value with ID: " + value); - wait(500); + } catch (Exception e) { Reporter.log("

"); @@ -225,11 +243,10 @@ public static void dropdown(WebDriver driver, By by, By value, String descriptio logStep(description, by); logger.info("Selecting DropDown By Value " + by + value); try { - wait(500); + waitForElementClickable(driver, by); click(driver, by, "Clicked on dropdown field to expand options"); - wait(500); + waitForElementClickable(driver, value); click(driver, value, "Selected value from the dropdown"); - wait(500); } catch (Exception e) { Reporter.log("

"); @@ -245,6 +262,7 @@ public static String getTestData() { public static void deactivate(WebDriver driver, String description) throws IOException { AdminExtentReportManager.logStep(description); Commons.click(driver, By.id("ellipsis-button0"), "Clicked on Ellipsis button for the first record"); + waitForElementClickable(driver, By.id("Deactivate0")); Commons.click(driver, By.id("Deactivate0"), "Clicked on Deactivate for the first record"); if (isElementDisplayed(By.id("confirmpopup"))) { Commons.click(driver, By.id("confirmpopup"), "Clicked on Confirm popup if displayed"); @@ -260,6 +278,7 @@ public static void deactivate(WebDriver driver) throws IOException { public static void activate(WebDriver driver, String description) throws IOException { AdminExtentReportManager.logStep(description); Commons.click(driver, By.id("ellipsis-button0"), "Clicked on Ellipsis button for the first record"); + waitForElementClickable(driver, By.id("Activate0")); Commons.click(driver, By.id("Activate0"), "Clicked on Activate for the first record"); if (isElementDisplayed(By.id("confirmpopup"))) { Commons.click(driver, By.id("confirmpopup"), "Clicked on Confirm popup if displayed"); @@ -305,10 +324,9 @@ public static void editRes(WebDriver driver, String data, By by, String descript try { Commons.click(driver, By.id("ellipsis-button0"), "Clicked on Ellipsis button for the first record"); Commons.click(driver, By.id("Edit0"), "Clicked on Edit for the first record"); - wait(3000); + waitForElementVisible(driver, by); Assert.assertNotEquals(data, driver.findElement(by).getText(), "Verified existing value is different from new data"); - wait(3000); driver.findElement(by).clear(); Commons.enter(driver, by, data, "Entered new data: " + data); Commons.click(driver, By.id("createButton"), "Clicked on Create button to save changes"); @@ -336,15 +354,18 @@ public static void editCenter(WebDriver driver, String data, By by, String descr try { Commons.click(driver, By.id("ellipsis-button0"), "Clicked on Ellipsis button for the first record"); Commons.click(driver, By.id("Edit0"), "Clicked on Edit for the first record"); + waitForPageLoad(driver); Assert.assertNotEquals(data, driver.findElement(by).getText(), "Verified existing value is different from new data"); driver.findElement(by).clear(); Commons.enter(driver, by, data, "Entered new data: " + data); + waitForElementClickable(driver, By.xpath("(//*[@id='createButton'])[1]")); Commons.click(driver, By.xpath("(//*[@id='createButton'])[1]"), "Clicked on Create button to save changes"); if (isElementDisplayed(By.id("confirmpopup"))) { Commons.click(driver, By.id("confirmpopup"), "Clicked on Confirm popup if displayed"); } Commons.click(driver, By.id("confirmmessagepopup"), "Clicked on Confirm Message popup after editing"); + waitForElementClickable(driver, By.xpath("(//*[@id='cancel'])[1]")); Commons.click(driver, By.xpath("(//*[@id='cancel'])[1]"), "Clicked on first Cancel button"); Commons.click(driver, By.xpath("(//*[@id='cancel'])[1]"), "Clicked on second Cancel button"); logger.info("Click editCenter and Confirm " + by + data); @@ -391,6 +412,7 @@ public static void createRes(WebDriver driver) throws IOException { public static void decommission(WebDriver driver, String description) throws IOException { AdminExtentReportManager.logStep(description); Commons.click(driver, By.id("ellipsis-button0"), "Clicked on Ellipsis button for the first record"); + waitForElementClickable(driver, By.id("Decommission0")); Commons.click(driver, By.id("Decommission0"), "Clicked on Decommission for the first record"); if (isElementDisplayed(By.id("confirmpopup"))) Commons.click(driver, By.id("confirmpopup"), "Clicked on Confirm popup if displayed"); @@ -432,20 +454,20 @@ public static void calendar(String date, String description) throws IOException int day = Integer.parseInt(d); int year = Integer.parseInt(a.substring(4, 8)); try { + waitForElementClickable(driver(), By.xpath("//*[@class='mat-datepicker-toggle']//button")); Commons.click(driver(), By.xpath("//*[@class='mat-datepicker-toggle']//button"), "Opened the datepicker"); - wait(500); + waitForElementClickable(driver(), By.xpath("//*[@class='mat-calendar-arrow']")); Commons.click(driver(), By.xpath("//*[@class='mat-calendar-arrow']"), "Navigated to year selection in datepicker"); - wait(500); + waitForElementClickable(driver(), By.xpath("//*[text()='" + year + "']")); Commons.click(driver(), By.xpath("//*[text()='" + year + "']"), "Selected year: " + year); - wait(500); List cli = driver().findElements(By.xpath("//*[@class='mat-calendar-body-cell-content']")); cli.get(month - 1).click(); - wait(500); + waitForElementClickable(driver(), By.xpath("//*[text()='" + day + "']")); Commons.click(driver(), By.xpath("//*[text()='" + day + "']"), "Selected day: " + day); } catch (Exception e) { Reporter.log("

months = driver().findElements(By.xpath("//*[@class='mat-calendar-body-cell-content']")); months.get(month - 1).click(); - wait(500); // Select day (convert if Arabic locale) String dayText = convertDigits(String.valueOf(day), locale); + waitForElementClickable(driver(), By.xpath("//*[normalize-space(text())='" + dayText + "']")); Commons.click(driver(), By.xpath("//*[normalize-space(text())='" + dayText + "']"), "Selected day: " + dayText); } catch (Exception e) { @@ -493,21 +514,13 @@ public static void calendar(String date, String locale, String description) thro } } - public static void wait(int waitTime) { - try { - Thread.sleep(waitTime); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - public static boolean isElementDisplayed(By by) { try { - wait(500); // Make sure you have a proper wait method or use Thread.sleep(500); + waitForElementVisible(driver(), by); return driver().findElement(by).isDisplayed(); } catch (Exception e) { return false; } } -} +} \ No newline at end of file From 3d5e74059a9a5c48671b015170106dfddd0a4662 Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Mon, 8 Dec 2025 16:04:15 +0530 Subject: [PATCH 13/23] Updated Dockerfile Signed-off-by: Bhuvanashree B S --- uitest-admin/Dockerfile | 68 +++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 37 deletions(-) diff --git a/uitest-admin/Dockerfile b/uitest-admin/Dockerfile index 6c119d60..3469a4e1 100644 --- a/uitest-admin/Dockerfile +++ b/uitest-admin/Dockerfile @@ -1,59 +1,53 @@ -# --- Base image --- -FROM eclipse-temurin:21-jre-alpine +# Start with a base image that includes Java 21 +FROM openjdk:21-slim -# --- Build-time arguments (MUST be declared before LABEL) --- +# Install additional dependencies, such as Selenium, Chrome, and kubectl +USER root + +RUN apt-get update && \ + apt-get install -y wget curl unzip xvfb libxi6 libgconf-2-4 chromium chromium-driver + +# Install kubectl +RUN curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" && \ + chmod +x kubectl && \ + mv kubectl /usr/local/bin/kubectl + +# Define build-time arguments and labels ARG SOURCE ARG COMMIT_HASH ARG COMMIT_ID ARG BUILD_TIME -# --- Metadata labels (used by CI for validation) --- +# Set labels for metadata LABEL source=${SOURCE} LABEL commit_hash=${COMMIT_HASH} LABEL commit_id=${COMMIT_ID} LABEL build_time=${BUILD_TIME} -# --- Additional build-time args --- +# Define build-time arguments for user and group ARG container_user=mosip ARG container_user_group=mosip ARG container_user_uid=1001 ARG container_user_gid=1001 -ARG KUBECTL_VERSION=1.22.9 - -# --- Environment variables --- -ENV DISPLAY=:99 -ENV work_dir=/home/${container_user} - -# --- Install dependencies & setup user --- -RUN apk -q update && \ - apk add --no-cache wget curl unzip xvfb libxi chromium chromium-chromedriver bash shadow && \ - \ - addgroup -g ${container_user_gid} ${container_user_group} && \ - adduser -s /bin/sh -u ${container_user_uid} -G ${container_user_group} -h /home/${container_user} --disabled-password ${container_user} && \ - \ - curl -LO "https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl" && \ - chmod +x kubectl && mv kubectl /usr/local/bin/ && \ - \ - mkdir -p ${work_dir}/src/test/resources/ \ - ${work_dir}/test-output/SparkReport/ \ - ${work_dir}/screenshots/ && \ - chmod -R 775 ${work_dir} + +# Set working directory for the user +ENV work_dir=/home/${container_user}/ + +# Create a new user with specified permissions +RUN groupadd -g ${container_user_gid} ${container_user_group} \ + && useradd -u ${container_user_uid} -g ${container_user_group} -s /bin/bash -m ${container_user} -d ${work_dir} \ + && chown -R ${container_user}:${container_user} /home/${container_user}/ + +# Switch to the specified user for the subsequent commands +USER ${container_user_uid}:${container_user_gid} # Copy your application files into the container COPY --chown=${container_user_uid}:${container_user} --chmod=771 ./entrypoint.sh ${work_dir}/entrypoint.sh COPY --chown=${container_user}:${container_user} ./src/main/resources/ ${work_dir}/resources/ COPY --chown=${container_user_uid}:${container_user} ./target/*.jar ${work_dir} -# --- Fix permissions for entrypoint and JARs --- -RUN chmod +x ${work_dir}/entrypoint.sh && \ - find ${work_dir} -name "*.jar" -exec chmod 644 {} \; && \ - chown -R ${container_user}:${container_user} ${work_dir}; - -# --- Switch to non-root user --- -USER ${container_user_uid}:${container_user_gid} - -# --- Set working directory --- -WORKDIR ${work_dir} +# Set the working directory +WORKDIR /home/${container_user}/ -# --- Default entrypoint --- -ENTRYPOINT ["bash", "entrypoint.sh"] \ No newline at end of file +# Entrypoint for the container +ENTRYPOINT ["/bin/bash", "-c", "./entrypoint.sh"] \ No newline at end of file From 9f02e9368428b0693eda36cafd7c36eb3f15a0ec Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Thu, 11 Dec 2025 19:05:18 +0530 Subject: [PATCH 14/23] MOSIP-43846 : Add Known Issue (KI) Support to Emailable & Extent Reports Signed-off-by: Bhuvanashree B S --- .../utility/AdminExtentReportManager.java | 11 +- .../adminui/utility/AdminTestListener.java | 21 +- .../adminui/utility/EmailableReport.java | 223 ++++++++++-------- .../adminui/utility/KnownIssueListener.java | 28 +++ .../testrig/adminui/utility/TestRunner.java | 99 ++++---- .../main/resources/config/Known_Issues.txt | 2 + .../src/main/resources/testngFile/testng.xml | 1 + 7 files changed, 241 insertions(+), 144 deletions(-) create mode 100644 uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/KnownIssueListener.java create mode 100644 uitest-admin/src/main/resources/config/Known_Issues.txt diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminExtentReportManager.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminExtentReportManager.java index fd10f448..e8647c93 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminExtentReportManager.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminExtentReportManager.java @@ -35,6 +35,7 @@ public class AdminExtentReportManager { private static int passedCount = 0; private static int failedCount = 0; private static int skippedCount = 0; + private static int knownIssueCount = 0; private static String reportPath; public synchronized static void initReport() { @@ -162,6 +163,10 @@ public synchronized static void incrementFailed() { public synchronized static void incrementSkipped() { skippedCount++; } + + public synchronized static void incrementKnownIssue() { + knownIssueCount++; + } public static int getPassedCount() { return passedCount; @@ -174,9 +179,13 @@ public static int getFailedCount() { public static int getSkippedCount() { return skippedCount; } + + public static int getKnownIssueCount() { + return knownIssueCount; + } public static int getTotalCount() { - return passedCount + failedCount + skippedCount; + return passedCount + failedCount + skippedCount + knownIssueCount; } public static void logStep(String message) { diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java index 2e264baa..9b9df667 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java @@ -65,9 +65,18 @@ public void onTestFailure(ITestResult result) { public void onTestSkipped(ITestResult result) { ExtentTest test = AdminExtentReportManager.getTest(); if (test != null) { - AdminExtentReportManager.logStep("⚠️ Test Skipped : " + result.getName()); - AdminExtentReportManager.incrementSkipped(); - test.skip("Skipped due to preconditions/Dependencies"); + if (TestRunner.knownIssues.contains(result.getName())) { + AdminExtentReportManager.logStep("🟠 Known Issue : " + result.getName()); + AdminExtentReportManager.incrementKnownIssue(); + test.skip("Marked as Known Issue"); + + } else { + + AdminExtentReportManager.logStep("⚠️ Test Skipped : " + result.getName()); + AdminExtentReportManager.incrementSkipped(); + test.skip("Skipped due to preconditions/Dependencies"); + + } } } @@ -79,13 +88,15 @@ public void onFinish(ITestContext context) { int passed = AdminExtentReportManager.getPassedCount(); int failed = AdminExtentReportManager.getFailedCount(); int skipped = AdminExtentReportManager.getSkippedCount(); - int total = AdminExtentReportManager.getTotalCount(); + int knownIssues = AdminExtentReportManager.getKnownIssueCount(); + + int total = passed + failed + skipped + knownIssues; String originalReport = AdminExtentReportManager.getReportPath(); File oldFile = new File(originalReport); String newReportName = originalReport.replace(".html", - "-T-" + total + "-P-" + passed + "-F-" + failed + "-S-" + skipped + ".html"); + "-T-" + total + "-P-" + passed + "-F-" + failed + "-S-" + skipped + "-KI-" + knownIssues + ".html"); File newFile = new File(newReportName); diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java index fc061021..80a939db 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java @@ -12,6 +12,7 @@ import java.text.NumberFormat; import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; @@ -35,6 +36,7 @@ import io.mosip.testrig.adminui.fw.util.AdminTestUtil; import io.mosip.testrig.adminui.kernel.util.ConfigManager; import io.mosip.testrig.adminui.kernel.util.S3Adapter; +import io.mosip.testrig.adminui.utility.TestRunner; /** * Reporter that generates a single-page HTML report of the test results. @@ -56,6 +58,7 @@ public class EmailableReport implements IReporter { int totalPassedTests = 0; int totalSkippedTests = 0; int totalFailedTests = 0; + int totalKnownIssues = 0; public void setFileName(String fileName) { this.fileName = fileName; @@ -65,50 +68,78 @@ public String getFileName() { return fileName; } - @Override - public void generateReport(List xmlSuites, List suites, String outputDir) { - try (PrintWriter writer = createWriter(outputDir)) { - this.writer = writer; - - for (ISuite suite : suites) suiteResults.add(new SuiteResult(suite)); - - writeDocumentStart(); - writeHead(); - writeBody(); - writeDocumentEnd(); - } catch (IOException e) { - logger.error("Error creating TestNG report", e); - return; - } - - // --- Prepare filename details --- - String lang = getValueForKey("loginlang"); - if (lang == null || lang.isEmpty()) lang = "eng"; - - String date = java.time.LocalDateTime.now() - .format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm")); - - String env = "base-run"; - try { - String envUser = ConfigManager.getiam_apienvuser(); - if (envUser != null && !envUser.isEmpty()) - env = envUser.replaceAll(".*?\\.([^\\.]+\\.[^\\.]+).*", "$1"); - } catch (Exception ignored) {} - - int total = totalPassedTests + totalSkippedTests + totalFailedTests; - - String newName = String.format( - "ADMINUI-%s-%s-%s-report_T-%d_P-%d_S-%d_F-%d.html", - env, lang, date, total, totalPassedTests, totalSkippedTests, totalFailedTests - ); - - // --- Rename file --- - File oldFile = new File(outputDir, fileName); - File newFile = new File(outputDir, newName); - if (oldFile.exists() && oldFile.renameTo(newFile)) - logger.info("Report renamed to: " + newName); + public void generateReport(List xmlSuites, List suites, String outputDirectory) { + try { + writer = createWriter(outputDirectory); + } catch (IOException e) { + logger.error("Unable to create output file", e); + return; + } + for (ISuite suite : suites) { + suiteResults.add(new SuiteResult(suite)); + } + writeDocumentStart(); + writeHead(); + writeBody(); + writeDocumentEnd(); + writer.close(); + + for (SuiteResult sr : suiteResults) { + for (TestResult tr : sr.getTestResults()) { + totalKnownIssues += tr.getKnownIssueTestCount(); + } + } + + int totalTestCases = totalPassedTests + totalSkippedTests + totalFailedTests + totalKnownIssues; + + String oldString = System.getProperty("emailable.report2.name", fileName); + String temp = "-report_T-" + totalTestCases + "_P-" + totalPassedTests + "_S-" + totalSkippedTests + "_F-" + + totalFailedTests + "_KI-" + totalKnownIssues; + String newString = oldString.replace("-report", temp); + + String reportDir = outputDirectory; // or System.getProperty("testng.output.dir") + File orignialReportFile = new File(reportDir, oldString); + logger.info("reportFile is::" + System.getProperty("user.dir") + "/" + System.getProperty("testng.outpur.dir") + + "/" + System.getProperty("emailable.report2.name")); + + File newReportFile = new File( + System.getProperty("user.dir") + "/" + System.getProperty("testng.outpur.dir") + "/" + newString); + logger.info("New reportFile is::" + System.getProperty("user.dir") + "/" + + System.getProperty("testng.outpur.dir") + "/" + newString); + + if (orignialReportFile.exists()) { + if (orignialReportFile.renameTo(newReportFile)) { + orignialReportFile.delete(); + logger.info("Report File re-named successfully!"); + + if (ConfigManager.getPushReportsToS3().equalsIgnoreCase("yes")) { + S3Adapter s3Adapter = new S3Adapter(); + boolean isStoreSuccess = false; + boolean isStoreSuccess2 = true; // or remove this flag until a second upload is added + try { + isStoreSuccess = s3Adapter.putObject(ConfigManager.getS3Account(), "Adminui", null, null, + newString, newReportFile); + logger.info("isStoreSuccess:: " + isStoreSuccess); + + /* Need to figure how to handle EXTENT report handling */ + + } catch (Exception e) { + logger.error("error occured while pushing the object" + e.getMessage()); + } + if (isStoreSuccess && isStoreSuccess2) { + logger.info("Pushed report to S3"); + } else { + logger.error("Failed while pushing file to S3"); + } + } + } else { + logger.error("Renamed report file doesn't exist"); + } + } else { + logger.error("Original report File does not exist!"); + } } - + private String getCommitId() { Properties properties = new Properties(); try (InputStream is = EmailableReport.class.getClassLoader().getResourceAsStream("git.properties")) { @@ -155,21 +186,22 @@ protected void writeStylesheet() { writer.print("table a {font-weight:bold}"); writer.print(".stripe td {background-color: #E6EBF9}"); writer.print(".num {text-align:center}"); - writer.print(".orange-bg {background-color: #FFA500}"); + writer.print(".orange-bg {background-color: #FFCF70}"); writer.print(".grey-bg {background-color: #808080}"); - writer.print(".thich-orange-bg {background-color: #CC5500}"); - writer.print(".green-bg {background-color: #0A0}"); - writer.print(".attn {background-color: #D00}"); - writer.print(".passedodd td {background-color: #3F3}"); - writer.print(".passedeven td {background-color: #0A0}"); - writer.print(".skippedodd td {background-color: #FFA500}"); - writer.print(".skippedeven td,.stripe {background-color: #FFA500}"); - writer.print(".failedodd td {background-color: #F33}"); - writer.print(".failedeven td,.stripe {background-color: #D00}"); - writer.print(".ignoredodd td {background-color: #808080}"); - writer.print(".ignoredeven td {background-color: #808080}"); - writer.print(".known_issuesodd td {background-color: #CC5500}"); - writer.print(".known_issueseven td {background-color: #CC5500}"); + writer.print(".thich-orange-bg {background-color: #E6934B}"); + writer.print(".green-bg {background-color: #6FD96F}"); + writer.print(".attn {background-color: #FF4C4C}"); + writer.print(".passedodd td {background-color: #6FD96F;}"); + writer.print(".passedeven td {background-color: #6FD96F;}"); + writer.print(".skippedodd td {background-color: #FFE7A6;}"); + writer.print(".skippedeven td {background-color: #FFE7A6;}"); + writer.print(".failedodd td {background-color: #FF4C4C;}"); + writer.print(".failedeven td {background-color: #FF4C4C;}"); + writer.print(".ignoredodd td {background-color: #808080;}"); + writer.print(".ignoredeven td {background-color: #808080;}"); + writer.print(".known_issuesodd td {background-color: #E6934B;}"); + writer.print(".known_issueseven td {background-color: #E6934B;}"); + writer.print(".stripe td {background-color: #E6EBF9}"); writer.print(".stacktrace {white-space:pre;font-family:monospace}"); writer.print(".totop {font-size:85%;text-align:center;border-bottom:2px solid #000}"); writer.print(""); @@ -198,11 +230,8 @@ protected void writeSuiteSummary() { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); formattedDate = currentDate.format(formatter); - Process process = Runtime.getRuntime().exec("git rev-parse --abbrev-ref HEAD"); - BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); - branch = reader.readLine(); } catch (Exception e) { - // TODO: handle exception + formattedDate = currentDate.toString(); } totalPassedTests = 0; totalSkippedTests = 0; @@ -229,6 +258,7 @@ protected void writeSuiteSummary() { writer.print("# Passed"); writer.print("# Skipped"); writer.print("# Failed"); + writer.print("# Known Issues"); writer.print("Time (min)"); // writer.print("Included Groups"); // writer.print("Excluded Groups"); @@ -252,6 +282,9 @@ protected void writeSuiteSummary() { writeTableData(integerFormat.format(passedTests), (passedTests > 0 ? "num green-bg" : "num")); writeTableData(integerFormat.format(skippedTests), (skippedTests > 0 ? "num orange-bg" : "num")); writeTableData(integerFormat.format(failedTests), (failedTests > 0 ? "num attn" : "num")); + int knownIssues = testResult.getKnownIssueTestCount(); + writeTableData(String.valueOf(knownIssues), (knownIssues > 0 ? "num thich-orange-bg" : "num")); + double minutes = duration / 60000.0; writeTableData(String.format("%.2f", minutes), "num"); @@ -325,6 +358,8 @@ protected void writeScenarioSummary() { "skipped", scenarioIndex); scenarioIndex += writeScenarioSummary(testName + " — Passed", testResult.getPassedTestResults(), "passed", scenarioIndex); + scenarioIndex += writeScenarioSummary(testName + " — Known Issues", + testResult.getKnownIssueTestResults(), "known_issues", scenarioIndex); writer.print(""); @@ -385,8 +420,10 @@ private int writeScenarioSummary(String description, List classResu // specified CSS class .append("").append(methodName) .append("") // Table cell with a hyperlink - .append("").append(String.format("%.2f", scenarioDurationMin)).append(""); // Table cell with - // scenario duration + .append("").append(String.format("%.2f", scenarioDurationMin)).append(""); // Table + // cell + // with + // scenario duration scenarioIndex++; } @@ -426,10 +463,6 @@ protected void writeScenarioDetails() { } } - /** - * Writes the scenario details for the results of a given state for a single - * test. - */ private int writeScenarioDetails(List classResults, int startingScenarioIndex) { int scenarioIndex = startingScenarioIndex; for (ClassResult classResult : classResults) { @@ -451,9 +484,6 @@ private int writeScenarioDetails(List classResults, int startingSce return scenarioIndex - startingScenarioIndex; } - /** - * Writes the details for an individual test scenario. - */ private void writeScenario(int scenarioIndex, String label, ITestResult result) { writer.print("

getTestResults() { } } + private static Set getKnownIssueSubset(Set resultsSet) { + List filtered = new ArrayList<>(); + + for (ITestResult r : resultsSet) { + if (TestRunner.knownIssues.contains(r.getName())) { + filtered.add(r); + } + } + return Set.copyOf(filtered); + } + /** * Groups {@link ClassResult}s by test, type (configuration or test), and * status. @@ -635,28 +676,34 @@ public int compare(ITestResult o1, ITestResult o2) { private final int failedTestCount; private final int skippedTestCount; private final int passedTestCount; + private final List knownIssueTestResults; + private final int knownIssueTestCount; private final long duration; private final String includedGroups; private final String excludedGroups; public TestResult(ITestContext context) { testName = context.getName(); - Set failedConfigurations = context.getFailedConfigurations().getAllResults(); Set failedTests = context.getFailedTests().getAllResults(); Set skippedConfigurations = context.getSkippedConfigurations().getAllResults(); - Set skippedTests = context.getSkippedTests().getAllResults(); + Set rawSkipped = context.getSkippedTests().getAllResults(); Set passedTests = context.getPassedTests().getAllResults(); + Set knownIssueTests = getKnownIssueSubset(rawSkipped); + Set finalSkipped = new java.util.HashSet<>(rawSkipped); + finalSkipped.removeAll(knownIssueTests); failedConfigurationResults = groupResults(failedConfigurations); failedTestResults = groupResults(failedTests); skippedConfigurationResults = groupResults(skippedConfigurations); - skippedTestResults = groupResults(skippedTests); + skippedTestResults = groupResults(finalSkipped); passedTestResults = groupResults(passedTests); failedTestCount = failedTests.size(); - skippedTestCount = skippedTests.size(); + skippedTestCount = finalSkipped.size(); passedTestCount = passedTests.size(); + knownIssueTestCount = knownIssueTests.size(); + knownIssueTestResults = groupResults(knownIssueTests); duration = context.getEndDate().getTime() - context.getStartDate().getTime(); @@ -758,6 +805,14 @@ public List getPassedTestResults() { return passedTestResults; } + public List getKnownIssueTestResults() { + return knownIssueTestResults; + } + + public int getKnownIssueTestCount() { + return knownIssueTestCount; + } + public int getFailedTestCount() { return failedTestCount; } @@ -847,25 +902,5 @@ public List getResults() { return results; } } - - private static String getValueForKey(String key) { - String value = System.getenv(key); - if (value == null || value.isEmpty()) { - try { - java.lang.reflect.Field field = io.mosip.testrig.adminui.kernel.util.ConfigManager.class.getDeclaredField("propsKernel"); - field.setAccessible(true); - Object props = field.get(null); - if (props instanceof java.util.Properties) { - value = ((java.util.Properties) props).getProperty(key); - } - } catch (Exception e) { - value = ""; - } - } - - return value; - } - - } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/KnownIssueListener.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/KnownIssueListener.java new file mode 100644 index 00000000..b07c7796 --- /dev/null +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/KnownIssueListener.java @@ -0,0 +1,28 @@ +package io.mosip.testrig.adminui.utility; + +import org.apache.log4j.Logger; +import org.testng.IInvokedMethod; +import org.testng.IInvokedMethodListener; +import org.testng.ITestResult; +import org.testng.SkipException; + +public class KnownIssueListener implements IInvokedMethodListener { + static Logger logger = Logger.getLogger(KnownIssueListener.class); + + @Override + public void beforeInvocation(IInvokedMethod method, ITestResult testResult) { + if (method.isTestMethod()) { + String tcName = testResult.getMethod().getMethodName(); + + if (TestRunner.knownIssues.contains(tcName)) { + logger.info("Skipping Known Issue TestCase: " + tcName); + throw new SkipException("Known Issue - Skipped: " + tcName); + } + } + } + + @Override + public void afterInvocation(IInvokedMethod method, ITestResult testResult) { + } +} + diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java index b6d038c6..66680898 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java @@ -1,6 +1,8 @@ package io.mosip.testrig.adminui.utility; import java.io.File; +import java.io.BufferedReader; +import java.io.FileReader; import java.util.ArrayList; import java.util.List; @@ -15,32 +17,44 @@ import io.mosip.testrig.adminui.fw.util.AdminTestUtil; import io.mosip.testrig.adminui.kernel.util.ConfigManager; - public class TestRunner { private static final Logger logger = Logger.getLogger(TestRunner.class); static TestListenerAdapter tla = new TestListenerAdapter(); public static String jarUrl = TestRunner.class.getProtectionDomain().getCodeSource().getLocation().getPath(); - public static String uin=""; - public static String perpetualVid=""; - public static String onetimeuseVid=""; - public static String temporaryVid=""; + public static String uin = ""; + public static String perpetualVid = ""; + public static String onetimeuseVid = ""; + public static String temporaryVid = ""; static TestNG testNg; + public static List knownIssues = new ArrayList<>(); public static void main(String[] args) throws Exception { - + AdminTestUtil.initialize(); DBManager.clearMasterDbData(); + + try (BufferedReader br = new BufferedReader(new FileReader(getResourcePath() + "/config/Known_Issues.txt"))) { + String line; + while ((line = br.readLine()) != null) { + if (!line.trim().isEmpty()) { + knownIssues.add(line.trim()); + } + } + logger.info("Known Issues Loaded: " + knownIssues); + } catch (Exception e) { + logger.warn("Known_Issues.txt not found or unreadable: " + e.getMessage()); + } + startTestRunner(); } - public static void startTestRunner() throws Exception { File homeDir = null; TestNG runner = new TestNG(); - if(!ConfigManager.gettestcases().equals("")) { + if (!ConfigManager.gettestcases().equals("")) { XmlSuite suite = new XmlSuite(); suite.setName("ADMIN-UI-AUTOMATION"); suite.addListener("io.mosip.testrig.adminui.utility.EmailableReport"); @@ -57,61 +71,60 @@ public static void startTestRunner() throws Exception { XmlClass dynamicFieldCRUD = new XmlClass("io.mosip.testrig.adminui.testcase.DynamicFieldTest"); XmlClass holidaysCRUD = new XmlClass("io.mosip.testrig.adminui.testcase.HolidaysTest"); XmlClass machineSpecCRUD = new XmlClass("io.mosip.testrig.adminui.testcase.MachineSpecificationTest"); - XmlClass machineCRUD= new XmlClass("io.mosip.testrig.adminui.testcase.MachineTest"); + XmlClass machineCRUD = new XmlClass("io.mosip.testrig.adminui.testcase.MachineTest"); XmlClass machineTypesCRUD = new XmlClass("io.mosip.testrig.adminui.testcase.MachineTypesTest"); XmlClass templateCRUD = new XmlClass("io.mosip.testrig.adminui.testcase.TemplateTest"); List classes = new ArrayList<>(); - String[] Scenarioname=ConfigManager.gettestcases().split(","); - for(String test:Scenarioname) { - if(test.equals("blocklistedwordsCRUD")) + String[] Scenarioname = ConfigManager.gettestcases().split(","); + for (String test : Scenarioname) { + if (test.equals("blocklistedwordsCRUD")) classes.add(blocklistedwordsCRUD); - if(test.equals("bulkUploadCRUD")) + if (test.equals("bulkUploadCRUD")) classes.add(bulkUploadCRUD); - if(test.equals("centerCRUD")) + if (test.equals("centerCRUD")) classes.add(centerCRUD); - if(test.equals("centerTypeCRUD")) + if (test.equals("centerTypeCRUD")) classes.add(centerTypeCRUD); - if(test.equals("deviceSpecCRUD")) + if (test.equals("deviceSpecCRUD")) classes.add(deviceSpecCRUD); - if(test.equals("deviceCRUD")) + if (test.equals("deviceCRUD")) classes.add(deviceCRUD); - if(test.equals("deviceTypesCRUD")) + if (test.equals("deviceTypesCRUD")) classes.add(deviceTypesCRUD); - if(test.equals("documentCategoriesCRUD")) + if (test.equals("documentCategoriesCRUD")) classes.add(documentCategoriesCRUD); - if(test.equals("documentTypesCRUD")) + if (test.equals("documentTypesCRUD")) classes.add(documentTypesCRUD); - if(test.equals("dynamicFieldCRUD")) + if (test.equals("dynamicFieldCRUD")) classes.add(dynamicFieldCRUD); - if(test.equals("holidaysCRUD")) + if (test.equals("holidaysCRUD")) classes.add(holidaysCRUD); - if(test.equals("machineSpecCRUD")) + if (test.equals("machineSpecCRUD")) classes.add(machineSpecCRUD); - if(test.equals("machineCRUD")) + if (test.equals("machineCRUD")) classes.add(machineCRUD); - if(test.equals("machineTypesCRUD")) + if (test.equals("machineTypesCRUD")) classes.add(machineTypesCRUD); - if(test.equals("templateCRUD")) + if (test.equals("templateCRUD")) classes.add(templateCRUD); } - XmlTest test = new XmlTest(suite); test.setName("MyTest"); test.setXmlClasses(classes); @@ -121,7 +134,7 @@ public static void startTestRunner() throws Exception { runner.setXmlSuites(suites); - }else { + } else { List suitefiles = new ArrayList(); String os = System.getProperty("os.name"); if (checkRunType().contains("IDE") || os.toLowerCase().contains("windows") == true) { @@ -137,23 +150,20 @@ public static void startTestRunner() throws Exception { suitefiles.add(file.getAbsolutePath()); } } - + runner.addListener(new KnownIssueListener()); runner.setTestSuites(suitefiles); - } // Set other properties and run TestNG System.getProperties().setProperty("testng.outpur.dir", "testng-report"); runner.setOutputDirectory("testng-report"); - System.getProperties().setProperty("emailable.report2.name", "ADMINUI-" + BaseTestCaseFunc.environment - + "-run-" + System.currentTimeMillis() + "-report.html"); + System.getProperties().setProperty("emailable.report2.name", + "ADMINUI-" + BaseTestCaseFunc.environment + "-run-" + System.currentTimeMillis() + "-report.html"); runner.run(); DBManager.clearMasterDbData(); System.exit(0); } - - public static String getGlobalResourcePath() { if (checkRunType().equalsIgnoreCase("JAR")) { return new File(jarUrl).getParentFile().getAbsolutePath().toString(); @@ -169,12 +179,13 @@ public static String getGlobalResourcePath() { public static String getResourcePath() { if (checkRunType().equalsIgnoreCase("JAR")) { - return new File(jarUrl).getParentFile().getAbsolutePath().toString()+"/resources/"; + return new File(jarUrl).getParentFile().getAbsolutePath().toString() + "/resources/"; } else if (checkRunType().equalsIgnoreCase("IDE")) { String path = System.getProperty("user.dir") + System.getProperty("path.config"); - // String path = new File(TestRunner.class.getClassLoader().getResource("").getPath()).getAbsolutePath() - // .toString(); + // String path = new + // File(TestRunner.class.getClassLoader().getResource("").getPath()).getAbsolutePath() + // .toString(); if (path.contains("test-classes")) path = path.replace("test-classes", "classes"); return path; @@ -188,17 +199,17 @@ public static String checkRunType() { else return "IDE"; } - public static String GetKernalFilename(){ + + public static String GetKernalFilename() { String path = System.getProperty("env.user"); - String kernalpath=null; - if(System.getProperty("env.user")==null || System.getProperty("env.user").equals("")) { - kernalpath="Kernel.properties"; + String kernalpath = null; + if (System.getProperty("env.user") == null || System.getProperty("env.user").equals("")) { + kernalpath = "Kernel.properties"; - }else { - kernalpath="Kernel_"+path+".properties"; + } else { + kernalpath = "Kernel_" + path + ".properties"; } return kernalpath; } - } diff --git a/uitest-admin/src/main/resources/config/Known_Issues.txt b/uitest-admin/src/main/resources/config/Known_Issues.txt new file mode 100644 index 00000000..3ef9f19b --- /dev/null +++ b/uitest-admin/src/main/resources/config/Known_Issues.txt @@ -0,0 +1,2 @@ +deviceTypesCRUD +templateCRUD \ No newline at end of file diff --git a/uitest-admin/src/main/resources/testngFile/testng.xml b/uitest-admin/src/main/resources/testngFile/testng.xml index a6c215a5..b55bc77c 100644 --- a/uitest-admin/src/main/resources/testngFile/testng.xml +++ b/uitest-admin/src/main/resources/testngFile/testng.xml @@ -26,6 +26,7 @@ + From d7757bf21b02690413ba2679d7feb7ab24517bea Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Thu, 11 Dec 2025 19:08:16 +0530 Subject: [PATCH 15/23] Updated DockerFile Signed-off-by: Bhuvanashree B S --- uitest-admin/Dockerfile | 68 ++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 31 deletions(-) diff --git a/uitest-admin/Dockerfile b/uitest-admin/Dockerfile index 3469a4e1..6c119d60 100644 --- a/uitest-admin/Dockerfile +++ b/uitest-admin/Dockerfile @@ -1,53 +1,59 @@ -# Start with a base image that includes Java 21 -FROM openjdk:21-slim +# --- Base image --- +FROM eclipse-temurin:21-jre-alpine -# Install additional dependencies, such as Selenium, Chrome, and kubectl -USER root - -RUN apt-get update && \ - apt-get install -y wget curl unzip xvfb libxi6 libgconf-2-4 chromium chromium-driver - -# Install kubectl -RUN curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" && \ - chmod +x kubectl && \ - mv kubectl /usr/local/bin/kubectl - -# Define build-time arguments and labels +# --- Build-time arguments (MUST be declared before LABEL) --- ARG SOURCE ARG COMMIT_HASH ARG COMMIT_ID ARG BUILD_TIME -# Set labels for metadata +# --- Metadata labels (used by CI for validation) --- LABEL source=${SOURCE} LABEL commit_hash=${COMMIT_HASH} LABEL commit_id=${COMMIT_ID} LABEL build_time=${BUILD_TIME} -# Define build-time arguments for user and group +# --- Additional build-time args --- ARG container_user=mosip ARG container_user_group=mosip ARG container_user_uid=1001 ARG container_user_gid=1001 - -# Set working directory for the user -ENV work_dir=/home/${container_user}/ - -# Create a new user with specified permissions -RUN groupadd -g ${container_user_gid} ${container_user_group} \ - && useradd -u ${container_user_uid} -g ${container_user_group} -s /bin/bash -m ${container_user} -d ${work_dir} \ - && chown -R ${container_user}:${container_user} /home/${container_user}/ - -# Switch to the specified user for the subsequent commands -USER ${container_user_uid}:${container_user_gid} +ARG KUBECTL_VERSION=1.22.9 + +# --- Environment variables --- +ENV DISPLAY=:99 +ENV work_dir=/home/${container_user} + +# --- Install dependencies & setup user --- +RUN apk -q update && \ + apk add --no-cache wget curl unzip xvfb libxi chromium chromium-chromedriver bash shadow && \ + \ + addgroup -g ${container_user_gid} ${container_user_group} && \ + adduser -s /bin/sh -u ${container_user_uid} -G ${container_user_group} -h /home/${container_user} --disabled-password ${container_user} && \ + \ + curl -LO "https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VERSION}/bin/linux/amd64/kubectl" && \ + chmod +x kubectl && mv kubectl /usr/local/bin/ && \ + \ + mkdir -p ${work_dir}/src/test/resources/ \ + ${work_dir}/test-output/SparkReport/ \ + ${work_dir}/screenshots/ && \ + chmod -R 775 ${work_dir} # Copy your application files into the container COPY --chown=${container_user_uid}:${container_user} --chmod=771 ./entrypoint.sh ${work_dir}/entrypoint.sh COPY --chown=${container_user}:${container_user} ./src/main/resources/ ${work_dir}/resources/ COPY --chown=${container_user_uid}:${container_user} ./target/*.jar ${work_dir} -# Set the working directory -WORKDIR /home/${container_user}/ +# --- Fix permissions for entrypoint and JARs --- +RUN chmod +x ${work_dir}/entrypoint.sh && \ + find ${work_dir} -name "*.jar" -exec chmod 644 {} \; && \ + chown -R ${container_user}:${container_user} ${work_dir}; + +# --- Switch to non-root user --- +USER ${container_user_uid}:${container_user_gid} + +# --- Set working directory --- +WORKDIR ${work_dir} -# Entrypoint for the container -ENTRYPOINT ["/bin/bash", "-c", "./entrypoint.sh"] \ No newline at end of file +# --- Default entrypoint --- +ENTRYPOINT ["bash", "entrypoint.sh"] \ No newline at end of file From b07fa39da6ff4250ad16fc79e41c45d5321e956c Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Thu, 11 Dec 2025 19:19:04 +0530 Subject: [PATCH 16/23] addressed codeRabbit Comments Signed-off-by: Bhuvanashree B S --- .../java/io/mosip/testrig/adminui/utility/TestRunner.java | 2 +- uitest-admin/src/main/resources/config/Known_Issues.txt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java index 66680898..d87ac66c 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java @@ -155,7 +155,7 @@ public static void startTestRunner() throws Exception { } // Set other properties and run TestNG - System.getProperties().setProperty("testng.outpur.dir", "testng-report"); + System.getProperties().setProperty("testng.output.dir", "testng-report"); runner.setOutputDirectory("testng-report"); System.getProperties().setProperty("emailable.report2.name", "ADMINUI-" + BaseTestCaseFunc.environment + "-run-" + System.currentTimeMillis() + "-report.html"); diff --git a/uitest-admin/src/main/resources/config/Known_Issues.txt b/uitest-admin/src/main/resources/config/Known_Issues.txt index 3ef9f19b..047420c4 100644 --- a/uitest-admin/src/main/resources/config/Known_Issues.txt +++ b/uitest-admin/src/main/resources/config/Known_Issues.txt @@ -1,2 +1,2 @@ -deviceTypesCRUD -templateCRUD \ No newline at end of file +#Add the Known Issue Testcase here +#Ex:deviceTypesCRUD \ No newline at end of file From cbdf1543c5ff1e92e59a43956ab9b08663bd58fe Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Fri, 12 Dec 2025 10:36:23 +0530 Subject: [PATCH 17/23] Resolved codeRabbit comment Signed-off-by: Bhuvanashree B S --- .../io/mosip/testrig/adminui/utility/TestRunner.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java index d87ac66c..79bd43e8 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java @@ -13,6 +13,10 @@ import org.testng.xml.XmlSuite; import org.testng.xml.XmlTest; +import java.io.FileInputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; + import io.mosip.testrig.adminui.dbaccess.DBManager; import io.mosip.testrig.adminui.fw.util.AdminTestUtil; import io.mosip.testrig.adminui.kernel.util.ConfigManager; @@ -34,8 +38,9 @@ public static void main(String[] args) throws Exception { AdminTestUtil.initialize(); DBManager.clearMasterDbData(); - - try (BufferedReader br = new BufferedReader(new FileReader(getResourcePath() + "/config/Known_Issues.txt"))) { + + try (BufferedReader br = new BufferedReader(new InputStreamReader( + new FileInputStream(getResourcePath() + "/config/Known_Issues.txt"), StandardCharsets.UTF_8))) { String line; while ((line = br.readLine()) != null) { if (!line.trim().isEmpty()) { @@ -59,6 +64,7 @@ public static void startTestRunner() throws Exception { suite.setName("ADMIN-UI-AUTOMATION"); suite.addListener("io.mosip.testrig.adminui.utility.EmailableReport"); suite.addListener("io.mosip.testrig.adminui.utility.AdminTestListener"); + suite.addListener("io.mosip.testrig.adminui.utility.KnownIssueListener"); XmlClass blocklistedwordsCRUD = new XmlClass("io.mosip.testrig.adminui.testcase.BlockListTest"); XmlClass bulkUploadCRUD = new XmlClass("io.mosip.testrig.adminui.testcase.BulkUploadTest"); XmlClass centerCRUD = new XmlClass("io.mosip.testrig.adminui.testcase.CenterTest"); From e64dd759bc4972bc7039eb030a1478b07e38941a Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Mon, 15 Dec 2025 11:43:15 +0530 Subject: [PATCH 18/23] Corrected the typo spelling mistake Signed-off-by: Bhuvanashree B S --- .../io/mosip/testrig/adminui/utility/EmailableReport.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java index 80a939db..7a38298f 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java @@ -99,13 +99,13 @@ public void generateReport(List xmlSuites, List suites, String String reportDir = outputDirectory; // or System.getProperty("testng.output.dir") File orignialReportFile = new File(reportDir, oldString); - logger.info("reportFile is::" + System.getProperty("user.dir") + "/" + System.getProperty("testng.outpur.dir") + logger.info("reportFile is::" + System.getProperty("user.dir") + "/" + System.getProperty("testng.output.dir") + "/" + System.getProperty("emailable.report2.name")); File newReportFile = new File( - System.getProperty("user.dir") + "/" + System.getProperty("testng.outpur.dir") + "/" + newString); + System.getProperty("user.dir") + "/" + System.getProperty("testng.output.dir") + "/" + newString); logger.info("New reportFile is::" + System.getProperty("user.dir") + "/" - + System.getProperty("testng.outpur.dir") + "/" + newString); + + System.getProperty("testng.output.dir") + "/" + newString); if (orignialReportFile.exists()) { if (orignialReportFile.renameTo(newReportFile)) { From bda525b978d2a0d76cc6ec9a878fbc84d0b5f29e Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Mon, 15 Dec 2025 15:09:29 +0530 Subject: [PATCH 19/23] Fixed duplicate reports pushing into minio bucket Signed-off-by: Bhuvanashree B S --- .../adminui/utility/AdminExtentReportManager.java | 14 ++++---------- .../testrig/adminui/utility/AdminTestListener.java | 11 ++++------- .../testrig/adminui/utility/EmailableReport.java | 1 + 3 files changed, 9 insertions(+), 17 deletions(-) diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminExtentReportManager.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminExtentReportManager.java index e8647c93..fb178d7a 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminExtentReportManager.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminExtentReportManager.java @@ -163,9 +163,9 @@ public synchronized static void incrementFailed() { public synchronized static void incrementSkipped() { skippedCount++; } - + public synchronized static void incrementKnownIssue() { - knownIssueCount++; + knownIssueCount++; } public static int getPassedCount() { @@ -179,9 +179,9 @@ public static int getFailedCount() { public static int getSkippedCount() { return skippedCount; } - + public static int getKnownIssueCount() { - return knownIssueCount; + return knownIssueCount; } public static int getTotalCount() { @@ -242,12 +242,6 @@ public static synchronized void flushReport() { if (extent != null) { extent.flush(); LOGGER.info("Extent report flushed successfully."); - - try { - pushReportToS3(reportPath); - } catch (Exception e) { - LOGGER.error("Error while uploading report: ", e); - } } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java index 9b9df667..453f99ea 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java @@ -9,15 +9,12 @@ import java.io.File; -import org.openqa.selenium.OutputType; -import org.openqa.selenium.TakesScreenshot; -import org.openqa.selenium.WebDriver; +import org.apache.log4j.Logger; -import io.mosip.testrig.adminui.utility.BaseClass; import io.mosip.testrig.adminui.kernel.util.ConfigManager; -import io.mosip.testrig.adminui.utility.AdminExtentReportManager; public class AdminTestListener implements ITestListener { + static Logger logger = Logger.getLogger(EmailableReport.class); @Override public void onStart(ITestContext context) { @@ -101,9 +98,9 @@ public void onFinish(ITestContext context) { File newFile = new File(newReportName); if (oldFile.renameTo(newFile)) { - System.out.println("Renamed Report: " + newReportName); + logger.info("Renamed Report: " + newReportName); } else { - System.out.println("Report rename failed, still uploading original name."); + logger.info("Report rename failed, still uploading original name."); newReportName = originalReport; } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java index 7a38298f..d613f07a 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java @@ -69,6 +69,7 @@ public String getFileName() { } public void generateReport(List xmlSuites, List suites, String outputDirectory) { + totalKnownIssues = 0; try { writer = createWriter(outputDirectory); } catch (IOException e) { From 32cb50d473d98eb701bb2baef2372da35e52bf55 Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Mon, 15 Dec 2025 19:51:37 +0530 Subject: [PATCH 20/23] Solved codeRabbit comments Signed-off-by: Bhuvanashree B S --- .../adminui/utility/EmailableReport.java | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java index d613f07a..6cbfad96 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java @@ -98,15 +98,10 @@ public void generateReport(List xmlSuites, List suites, String + totalFailedTests + "_KI-" + totalKnownIssues; String newString = oldString.replace("-report", temp); - String reportDir = outputDirectory; // or System.getProperty("testng.output.dir") - File orignialReportFile = new File(reportDir, oldString); - logger.info("reportFile is::" + System.getProperty("user.dir") + "/" + System.getProperty("testng.output.dir") - + "/" + System.getProperty("emailable.report2.name")); - - File newReportFile = new File( - System.getProperty("user.dir") + "/" + System.getProperty("testng.output.dir") + "/" + newString); - logger.info("New reportFile is::" + System.getProperty("user.dir") + "/" - + System.getProperty("testng.output.dir") + "/" + newString); + File orignialReportFile = new File(outputDirectory, oldString); + File newReportFile = new File(outputDirectory, newString); + logger.info("reportFile is::" + orignialReportFile.getAbsolutePath()); + logger.info("New reportFile is::" + newReportFile.getAbsolutePath()); if (orignialReportFile.exists()) { if (orignialReportFile.renameTo(newReportFile)) { @@ -115,8 +110,7 @@ public void generateReport(List xmlSuites, List suites, String if (ConfigManager.getPushReportsToS3().equalsIgnoreCase("yes")) { S3Adapter s3Adapter = new S3Adapter(); - boolean isStoreSuccess = false; - boolean isStoreSuccess2 = true; // or remove this flag until a second upload is added + boolean isStoreSuccess = false; // or remove this flag until a second upload is added try { isStoreSuccess = s3Adapter.putObject(ConfigManager.getS3Account(), "Adminui", null, null, newString, newReportFile); @@ -127,7 +121,7 @@ public void generateReport(List xmlSuites, List suites, String } catch (Exception e) { logger.error("error occured while pushing the object" + e.getMessage()); } - if (isStoreSuccess && isStoreSuccess2) { + if (isStoreSuccess) { logger.info("Pushed report to S3"); } else { logger.error("Failed while pushing file to S3"); From 36917c40bee1cbe113d63f97a8bf96af1b298347 Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Fri, 19 Dec 2025 18:44:15 +0530 Subject: [PATCH 21/23] Improved Known Issue reporting with bug ID links Signed-off-by: Bhuvanashree B S --- uitest-admin/pom.xml | 2 +- .../testrig/adminui/testcase/MachineTest.java | 6 +++- .../adminui/utility/AdminTestListener.java | 31 +++++++++++++------ .../adminui/utility/EmailableReport.java | 2 +- .../adminui/utility/KnownIssueListener.java | 27 ++++++++-------- .../testrig/adminui/utility/TestRunner.java | 21 +++++++++++-- .../main/resources/config/Known_Issues.txt | 5 +-- 7 files changed, 62 insertions(+), 32 deletions(-) diff --git a/uitest-admin/pom.xml b/uitest-admin/pom.xml index 846706e2..e18fdbe9 100644 --- a/uitest-admin/pom.xml +++ b/uitest-admin/pom.xml @@ -75,7 +75,7 @@ com.aventstack extentreports - 5.0.9 + 5.1.2 io.github.bonigarcia diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTest.java index d0a71624..1e7be079 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTest.java @@ -1,12 +1,15 @@ package io.mosip.testrig.adminui.testcase; +import org.apache.log4j.Logger; import org.openqa.selenium.By; import org.testng.annotations.Test; import io.mosip.testrig.adminui.kernel.util.ConfigManager; import io.mosip.testrig.adminui.utility.BaseClass; +import io.mosip.testrig.adminui.utility.BaseTestCaseFunc; import io.mosip.testrig.adminui.utility.Commons; public class MachineTest extends BaseClass { + protected static Logger logger = Logger.getLogger(MachineTest.class); @Test public void machineCRUD() throws Exception { @@ -30,8 +33,9 @@ public void machineCRUD() throws Exception { Commons.enter(driver(), By.id("signPublicKey"), signPublicKey, "Entered Sign Public Key"); try { - Commons.dropdown(driver(), By.id("zone"), "Selected Zone"); + Commons.dropdown(driver(), By.id("zone"), "Selected Zone"); } catch (Exception e) { + logger.info("Zone dropdown not available"); } Commons.dropdown(driver(), By.id("regCenterId"), "Selected Registration Center"); diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java index 453f99ea..9b25f42a 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java @@ -15,6 +15,7 @@ public class AdminTestListener implements ITestListener { static Logger logger = Logger.getLogger(EmailableReport.class); + private static final String BUG_BASE_URL = "https://mosip.atlassian.net/browse/"; @Override public void onStart(ITestContext context) { @@ -61,19 +62,29 @@ public void onTestFailure(ITestResult result) { @Override public void onTestSkipped(ITestResult result) { ExtentTest test = AdminExtentReportManager.getTest(); - if (test != null) { - if (TestRunner.knownIssues.contains(result.getName())) { - AdminExtentReportManager.logStep("🟠 Known Issue : " + result.getName()); - AdminExtentReportManager.incrementKnownIssue(); - test.skip("Marked as Known Issue"); + if (test == null) + return; + + String testName = result.getName(); + + if (TestRunner.knownIssues.containsKey(testName)) { + + String bugId = TestRunner.knownIssues.get(testName); + String bugUrl = BUG_BASE_URL + bugId; - } else { + AdminExtentReportManager.incrementKnownIssue(); - AdminExtentReportManager.logStep("⚠️ Test Skipped : " + result.getName()); - AdminExtentReportManager.incrementSkipped(); - test.skip("Skipped due to preconditions/Dependencies"); + String message = "🟠 Test skipped due to a known issue.
" + "Refer to Bug ID: " + bugId + ""; + + test.skip(message); + AdminExtentReportManager.logStep("Test is Marked as Known Issue: " + bugId); + + } else { - } + AdminExtentReportManager.incrementSkipped(); + test.skip("⚠️ Test Skipped due to preconditions / dependencies"); + AdminExtentReportManager.logStep("⚠️ Test Skipped : " + testName); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java index 6cbfad96..16fc3af6 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/EmailableReport.java @@ -635,7 +635,7 @@ private static Set getKnownIssueSubset(Set resultsSet) List filtered = new ArrayList<>(); for (ITestResult r : resultsSet) { - if (TestRunner.knownIssues.contains(r.getName())) { + if (TestRunner.knownIssues.containsKey(r.getName())) { filtered.add(r); } } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/KnownIssueListener.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/KnownIssueListener.java index b07c7796..59b7c429 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/KnownIssueListener.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/KnownIssueListener.java @@ -9,20 +9,19 @@ public class KnownIssueListener implements IInvokedMethodListener { static Logger logger = Logger.getLogger(KnownIssueListener.class); - @Override - public void beforeInvocation(IInvokedMethod method, ITestResult testResult) { - if (method.isTestMethod()) { - String tcName = testResult.getMethod().getMethodName(); + @Override + public void beforeInvocation(IInvokedMethod method, ITestResult testResult) { + if (method.isTestMethod()) { + String tcName = testResult.getMethod().getMethodName(); - if (TestRunner.knownIssues.contains(tcName)) { - logger.info("Skipping Known Issue TestCase: " + tcName); - throw new SkipException("Known Issue - Skipped: " + tcName); - } - } - } + if (TestRunner.knownIssues.containsKey(tcName)) { + logger.info("Skipping Known Issue TestCase: " + tcName); + throw new SkipException("Known Issue - Skipped: " + tcName); + } + } + } - @Override - public void afterInvocation(IInvokedMethod method, ITestResult testResult) { - } + @Override + public void afterInvocation(IInvokedMethod method, ITestResult testResult) { + } } - diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java index 79bd43e8..a45baf73 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java @@ -4,7 +4,9 @@ import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.apache.log4j.Logger; import org.testng.TestListenerAdapter; @@ -32,7 +34,7 @@ public class TestRunner { public static String temporaryVid = ""; static TestNG testNg; - public static List knownIssues = new ArrayList<>(); + public static Map knownIssues = new HashMap<>(); public static void main(String[] args) throws Exception { @@ -41,13 +43,26 @@ public static void main(String[] args) throws Exception { try (BufferedReader br = new BufferedReader(new InputStreamReader( new FileInputStream(getResourcePath() + "/config/Known_Issues.txt"), StandardCharsets.UTF_8))) { + String line; while ((line = br.readLine()) != null) { - if (!line.trim().isEmpty()) { - knownIssues.add(line.trim()); + line = line.trim(); + + if (line.isEmpty() || line.startsWith("#") || !line.contains("------")) { + continue; + } + + String[] parts = line.split("------"); + if (parts.length == 2) { + String bugId = parts[0].trim(); + String testCaseName = parts[1].trim(); + + knownIssues.put(testCaseName, bugId); } } + logger.info("Known Issues Loaded: " + knownIssues); + } catch (Exception e) { logger.warn("Known_Issues.txt not found or unreadable: " + e.getMessage()); } diff --git a/uitest-admin/src/main/resources/config/Known_Issues.txt b/uitest-admin/src/main/resources/config/Known_Issues.txt index 047420c4..48731920 100644 --- a/uitest-admin/src/main/resources/config/Known_Issues.txt +++ b/uitest-admin/src/main/resources/config/Known_Issues.txt @@ -1,2 +1,3 @@ -#Add the Known Issue Testcase here -#Ex:deviceTypesCRUD \ No newline at end of file +#Add the Known Issue Testcase with its bug id here +#Ex:bugId------testcaseName +#Ex:MOSIP-2724------deviceTypesCRUD \ No newline at end of file From d5e5cc10ea99e5fc74b9885bf7e848f0626e4343 Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Fri, 19 Dec 2025 19:02:34 +0530 Subject: [PATCH 22/23] Solved codeRabbit comments Signed-off-by: Bhuvanashree B S --- .../java/io/mosip/testrig/adminui/testcase/MachineTest.java | 1 - .../io/mosip/testrig/adminui/utility/AdminTestListener.java | 2 +- .../main/java/io/mosip/testrig/adminui/utility/TestRunner.java | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTest.java index 1e7be079..1683c576 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTest.java @@ -5,7 +5,6 @@ import org.testng.annotations.Test; import io.mosip.testrig.adminui.kernel.util.ConfigManager; import io.mosip.testrig.adminui.utility.BaseClass; -import io.mosip.testrig.adminui.utility.BaseTestCaseFunc; import io.mosip.testrig.adminui.utility.Commons; public class MachineTest extends BaseClass { diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java index 9b25f42a..74de6faf 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/AdminTestListener.java @@ -14,7 +14,7 @@ import io.mosip.testrig.adminui.kernel.util.ConfigManager; public class AdminTestListener implements ITestListener { - static Logger logger = Logger.getLogger(EmailableReport.class); + static Logger logger = Logger.getLogger(AdminTestListener.class); private static final String BUG_BASE_URL = "https://mosip.atlassian.net/browse/"; @Override diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java index a45baf73..1f86cd71 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java @@ -2,7 +2,6 @@ import java.io.File; import java.io.BufferedReader; -import java.io.FileReader; import java.util.ArrayList; import java.util.HashMap; import java.util.List; From 23f326295eeeb8e01e6c6975e572da8274335d48 Mon Sep 17 00:00:00 2001 From: Bhuvanashree B S Date: Fri, 19 Dec 2025 19:43:15 +0530 Subject: [PATCH 23/23] Solved codeRabbit comments Signed-off-by: Bhuvanashree B S --- .../java/io/mosip/testrig/adminui/testcase/MachineTest.java | 3 ++- .../java/io/mosip/testrig/adminui/utility/TestRunner.java | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTest.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTest.java index 1683c576..c21bd258 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTest.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/testcase/MachineTest.java @@ -2,6 +2,7 @@ import org.apache.log4j.Logger; import org.openqa.selenium.By; +import org.openqa.selenium.NoSuchElementException; import org.testng.annotations.Test; import io.mosip.testrig.adminui.kernel.util.ConfigManager; import io.mosip.testrig.adminui.utility.BaseClass; @@ -33,7 +34,7 @@ public void machineCRUD() throws Exception { try { Commons.dropdown(driver(), By.id("zone"), "Selected Zone"); - } catch (Exception e) { + } catch (NoSuchElementException e) { logger.info("Zone dropdown not available"); } diff --git a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java index 1f86cd71..0592e671 100644 --- a/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java +++ b/uitest-admin/src/main/java/io/mosip/testrig/adminui/utility/TestRunner.java @@ -51,8 +51,8 @@ public static void main(String[] args) throws Exception { continue; } - String[] parts = line.split("------"); - if (parts.length == 2) { + String[] parts = line.split("------", 2); + if (parts.length == 2 && !parts[0].trim().isEmpty() && !parts[1].trim().isEmpty()) { String bugId = parts[0].trim(); String testCaseName = parts[1].trim();