From 8f8cb6496545aa31aee77a5d55aafada1cb3eab2 Mon Sep 17 00:00:00 2001 From: roost-io Date: Sun, 11 Jan 2026 12:01:49 +0530 Subject: [PATCH] Functional test generated by RoostGPT Using AI Model gpt-4o --- functional_tests/README.md | 19 ++++ .../.roost/roost_metadata.json | 24 +++++ .../roost_test_1768113016.csv | 6 ++ .../roost_test_1768113016.feature | 84 ++++++++++++++++++ .../roost_test_1768113016.json | 1 + .../roost_test_1768113016.xlsx | Bin 0 -> 11629 bytes 6 files changed, 134 insertions(+) create mode 100644 functional_tests/README.md create mode 100644 functional_tests/roost_test_1768113016/.roost/roost_metadata.json create mode 100644 functional_tests/roost_test_1768113016/roost_test_1768113016.csv create mode 100644 functional_tests/roost_test_1768113016/roost_test_1768113016.feature create mode 100644 functional_tests/roost_test_1768113016/roost_test_1768113016.json create mode 100644 functional_tests/roost_test_1768113016/roost_test_1768113016.xlsx diff --git a/functional_tests/README.md b/functional_tests/README.md new file mode 100644 index 00000000..52e597b3 --- /dev/null +++ b/functional_tests/README.md @@ -0,0 +1,19 @@ +# Roost Generated Functional Test + +**Execution Date:** 1/11/2026, 12:01:48 PM + +**Test Unique Identifier:** "roost_test_1768113016" + +**Input(s):** + 1. bankspromot.txt + Path: ../tcs/bankspromot.txt + +**Test Output Folder:** + 1. [roost_test_1768113016.json](roost_test_1768113016/roost_test_1768113016.json) + 2. [roost_test_1768113016.feature](roost_test_1768113016/roost_test_1768113016.feature) + 3. [roost_test_1768113016.csv](roost_test_1768113016/roost_test_1768113016.csv) + 4. [roost_test_1768113016.xlsx](roost_test_1768113016/roost_test_1768113016.xlsx) + 5. [roost_test_1768113016.docx](roost_test_1768113016/roost_test_1768113016.docx) + +--- + diff --git a/functional_tests/roost_test_1768113016/.roost/roost_metadata.json b/functional_tests/roost_test_1768113016/.roost/roost_metadata.json new file mode 100644 index 00000000..42f525e9 --- /dev/null +++ b/functional_tests/roost_test_1768113016/.roost/roost_metadata.json @@ -0,0 +1,24 @@ +{ + "project": { + "name": "roost_test_1768113016", + "created_at": "2026-01-11T06:31:48.279Z", + "updated_at": "2026-01-11T06:31:48.279Z" + }, + "files": { + "input_files": [ + { + "fileName": "roost_test_1768113016.txt", + "fileURI": "/var/tmp/Roost/RoostGPT/TCSBaNCS_functional-after-fix/1768113016/functional_tests/roost_test_1768113016/roost_test_1768113016.txt", + "fileSha": "cf83e1357e" + }, + { + "fileName": "bankspromot.txt", + "fileURI": "/var/tmp/Roost/RoostGPT/TCSBaNCS_functional-after-fix/1768113016/functional_tests/roost_test_1768113016/bankspromot.txt", + "fileSha": "14a19da7ed" + } + ] + }, + "api_files": { + "input_files": [] + } +} \ No newline at end of file diff --git a/functional_tests/roost_test_1768113016/roost_test_1768113016.csv b/functional_tests/roost_test_1768113016/roost_test_1768113016.csv new file mode 100644 index 00000000..397b5877 --- /dev/null +++ b/functional_tests/roost_test_1768113016/roost_test_1768113016.csv @@ -0,0 +1,6 @@ +"Scenario: Agent Login with SSO and MFA" +"Scenario Outline: Supervisor Role-Based Access Control" +"Scenario Outline: Customer Identity Verification via OTP" +"Scenario Outline: Access Control on Transaction Handling by Agents" +"Scenario Outline: Secure Password Reset Process" +"Scenario Outline: Fraudulent Transaction Alerts and Blocking" diff --git a/functional_tests/roost_test_1768113016/roost_test_1768113016.feature b/functional_tests/roost_test_1768113016/roost_test_1768113016.feature new file mode 100644 index 00000000..5e29157f --- /dev/null +++ b/functional_tests/roost_test_1768113016/roost_test_1768113016.feature @@ -0,0 +1,84 @@ +Feature: Security and Access Control Functional Testing + + # UI Test Scenarios + @ui + Scenario: Agent Login with SSO and MFA + Given I navigate to the login page + When I enter "agent****" as username and proceed with SSO + And I complete the MFA step using "****1234" as OTP + Then I should see a success message and access the system dashboard + + @ui + Scenario Outline: Supervisor Role-Based Access Control + Given I log in as + When I attempt to access the supervisor dashboard + Then I should see + + Examples: + | role | access_message | + | supervisor | Access granted | + | agent | Not authorized message | + + # API Test Scenarios + @api + Scenario Outline: Customer Identity Verification via OTP + Given the API base URL is "https://api.example.com" + And the authorization token is set + When I initiate a high-risk transaction for customer with phone "+1*****1234" + And the system sends an OTP "****5678" + Then I send a POST request to "/api/verifyOTP" with payload """ + { + "otp": "" + } + """ + And the response status should be + And the response should contain "" + + Examples: + | otp | status | message | + | ****5678 | 200 | Transaction successful | + | wrongOTP | 401 | Invalid OTP | + + @api + Scenario Outline: Access Control on Transaction Handling by Agents + Given I log in as with appropriate credentials + When I navigate to the transaction handling section + Then I attempt to access a transaction requiring supervisor approval + And the response status should be + And the response should contain "" + + Examples: + | user_type | status | access_message | + | agent | 403 | Not authorized | + | supervisor| 200 | Access granted | + + @api + Scenario Outline: Secure Password Reset Process + Given the API base URL is "https://api.example.com" + When I initiate password reset for "agent****@example.com" + And I verify using "****1234" as OTP + Then I send a PATCH request to "/api/passwordReset" with payload """ + { + "newPassword": "" + } + """ + And the response status should be + And the response should contain "" + + Examples: + | new_password | status | message | + | ****1234 | 200 | Password reset successful | + | short | 400 | Invalid password | + + # Mixed UI and API Scenarios + @ui @api + Scenario Outline: Fraudulent Transaction Alerts and Blocking + Given I execute a transaction with ID "TXN****" that violates fraud detection rules + When the fraud detection system flags the transaction + Then the transaction is blocked + And an alert is sent to designated personnel with details "" + + Examples: + | alert_message | + | Alert: Excessive Amount Detected | + | Alert: Transaction Suspended | diff --git a/functional_tests/roost_test_1768113016/roost_test_1768113016.json b/functional_tests/roost_test_1768113016/roost_test_1768113016.json new file mode 100644 index 00000000..2ba57308 --- /dev/null +++ b/functional_tests/roost_test_1768113016/roost_test_1768113016.json @@ -0,0 +1 @@ +[{"type":"functional","title":"Agent Login with SSO and MFA","description":"Validate agent login process using Single Sign-On (SSO) and Multi-Factor Authentication (MFA).","testId":"TC-001","testDescription":"Ensure that an agent can securely log in to the system using SSO and MFA.","prerequisites":"Agent has valid credentials and MFA setup.","stepsToPerform":"1. Navigate to the login page.\n2. Enter username and proceed with SSO.\n3. Complete MFA step using OTP.\n4. Confirm successful login.","expectedResult":"Agent is logged into the system dashboard and a success message is displayed.","rolesInvolved":"Agent","testData":"Username: agent****, OTP: ****1234","negativeVariations":"Incorrect OTP, account lockout after multiple failed attempts.","auditAndLogsToVerify":"Login timestamp, user ID, MFA status.","securityAssertions":"Login requires SSO and MFA; accounts locked after failed attempts.","priority":"P0","automationFeasibility":"High, Suggested Tooling: Selenium","coverageTags":"authentication, mfa, security"},{"type":"functional","title":"Supervisor Role-Based Access Control","description":"Verify Role-Based Access Control for supervisor-level access.","testId":"TC-002","testDescription":"Ensure supervisors have access to management screens and agents do not.","prerequisites":"User accounts exist with appropriate roles assigned.","stepsToPerform":"1. Log in as supervisor.\n2. Attempt to access supervisor dashboard.\n3. Log in as agent.\n4. Attempt to access supervisor dashboard.","expectedResult":"Supervisor access allowed; agent access denied with a 'not authorized' message.","rolesInvolved":"Supervisor, Agent","testData":"Supervisor credentials: sup****, Agent credentials: ag****","negativeVariations":"Agent attempts unauthorized access.","auditAndLogsToVerify":"Access attempt logs with timestamps and user roles.","securityAssertions":"Access control rules are enforced based on roles.","priority":"P1","automationFeasibility":"Medium, Suggested Tooling: Selenium, Postman","coverageTags":"rbac, access control, security"},{"type":"functional","title":"Customer Identity Verification via OTP","description":"Test customer verification using One-Time Password (OTP) for secure transactions.","testId":"TC-003","testDescription":"Verify that customer identity can be confirmed using OTP during a risky transaction.","prerequisites":"Customer phone number registered in the system.","stepsToPerform":"1. Initiate a high-risk transaction.\n2. System sends OTP to customer's phone.\n3. Enter correct OTP to proceed.","expectedResult":"Transaction proceeds upon correct OTP entry.","rolesInvolved":"Customer, Agent","testData":"Phone: +1*****1234, OTP: ****5678","negativeVariations":"Invalid OTP prevents transaction.","auditAndLogsToVerify":"OTP generation logs, successful/failed authentication attempts.","securityAssertions":"Only correct OTP allows transaction progression.","priority":"P0","automationFeasibility":"High, Suggested Tooling: JMeter, Selenium","coverageTags":"otp, verification, security"},{"type":"functional","title":"PII Data Masking and Display","description":"Ensure PII data such as PAN and DOB are masked correctly.","testId":"TC-004","testDescription":"Verify that sensitive customer data is properly masked on agent screens.","prerequisites":"Customer data available in system with PII fields.","stepsToPerform":"1. Access customer profile as an agent.\n2. View masked fields (PAN, DOB).","expectedResult":"Sensitive fields are masked; only partial data is visible.","rolesInvolved":"Agent","testData":"PAN: 4111********1111, DOB: ****-**-15","negativeVariations":"Full PAN display in error messages.","auditAndLogsToVerify":"Access logs of PII fields.","securityAssertions":"PII masking adheres to regulatory requirements.","priority":"P0","automationFeasibility":"Medium, Suggested Tooling: Selenium","coverageTags":"pii, masking, compliance"},{"type":"functional","title":"Session Management and Timeout","description":"Test session timeout and automatic logout features.","testId":"TC-005","testDescription":"Verify that the system logs out users after a period of inactivity.","prerequisites":"Agent logged in to the system.","stepsToPerform":"1. Log in as agent.\n2. Remain inactive for period longer than session timeout.\n3. Attempt any action after session expires.","expectedResult":"User is logged out, and must re-authenticate.","rolesInvolved":"Agent","testData":"SessionTimeout: 15 minutes","negativeVariations":"Session remains active beyond timeout.","auditAndLogsToVerify":"Session start and end logs, inactivity duration.","securityAssertions":"Sessions auto-terminate after inactivity limit.","priority":"P0","automationFeasibility":"High, Suggested Tooling: Selenium","coverageTags":"session security, timeout, compliance"},{"type":"functional","title":"Access Control on Transaction Handling by Agents","description":"Validate that agents have the necessary permissions to view and handle specific customer transactions.","testId":"TC-006","testDescription":"Ensure that transaction handling is restricted based on agent roles.","prerequisites":"Agent login with appropriate role; transactions exist in the system.","stepsToPerform":"1. Log in as an agent.\n2. Navigate to the transaction handling section.\n3. Attempt to access a transaction requiring supervisor approval.","expectedResult":"Access to high-level transactions is denied with a 'not authorized' message.","rolesInvolved":"Agent, Supervisor","testData":"Agent credentials: ag*****","negativeVariations":"Agent tries to modify unauthorized transactions.","auditAndLogsToVerify":"Transaction access attempts, access denial logs.","securityAssertions":"Access to transactions is controlled by role-based permissions.","priority":"P1","automationFeasibility":"Medium, Suggested Tooling: Selenium","coverageTags":"access control, transactions, security"},{"type":"functional","title":"Sensitive Action Audit Trail","description":"Verify that every sensitive action in the system is recorded in the audit trail with complete details.","testId":"TC-007","testDescription":"Ensure actions such as beneficiary additions and card blocking are logged with necessary details.","prerequisites":"Successful agent login; access to customer account with permissions.","stepsToPerform":"1. Log in as an agent.\n2. Access a customer account.\n3. Add a new beneficiary.\n4. Block a customer card.","expectedResult":"All sensitive actions are logged with user, timestamp, and action details.","rolesInvolved":"Agent, Auditor","testData":"Beneficiary account: ****1234, Card: ****5678","negativeVariations":"Audit logs missing or incorrect for sensitive actions.","auditAndLogsToVerify":"Action logs for beneficiary additions and card blockings.","securityAssertions":"Audit logs are comprehensive and immutable.","priority":"P0","automationFeasibility":"High, Suggested Tooling: Log monitoring tools","coverageTags":"audit, sensitive actions, compliance"},{"type":"functional","title":"Concurrent Session Prevention","description":"Test the system's ability to prevent multiple concurrent sessions from a single user.","testId":"TC-008","testDescription":"Ensure that only one active session is possible per user, blocking simultaneous logins.","prerequisites":"Agent account with active session.","stepsToPerform":"1. Log in to the system as an agent.\n2. Attempt to log in with the same credentials on another device.","expectedResult":"Second login is denied, with a message indicating concurrent sessions are not allowed.","rolesInvolved":"Agent","testData":"Agent credentials: ag*****","negativeVariations":"Both sessions remain active, allowing concurrent logins.","auditAndLogsToVerify":"Session initiation and denial logs.","securityAssertions":"System prevents concurrent sessions effectively.","priority":"P0","automationFeasibility":"Medium, Suggested Tooling: Selenium","coverageTags":"session management, concurrency, security"},{"type":"functional","title":"Data Masking for Customer Information","description":"Confirm that customer data such as Social Security Numbers and account numbers are properly masked.","testId":"TC-009","testDescription":"Verify partial masking of SSNs and account numbers on the agent interface.","prerequisites":"Agent login and access to customer profiles.","stepsToPerform":"1. Access customer profile as an agent.\n2. View masked fields (SSN, Account Numbers).","expectedResult":"SSN and account number fields are partially masked and unreadable.","rolesInvolved":"Agent","testData":"SSN: 123-**-****, Account: 1234******7890","negativeVariations":"Full display of SSN or account numbers.","auditAndLogsToVerify":"Access logs to customer profile data.","securityAssertions":"Data masking adheres to regulatory and security standards.","priority":"P0","automationFeasibility":"High, Suggested Tooling: Selenium","coverageTags":"data masking, pii, compliance"},{"type":"functional","title":"Fraud Detection and Step-Up Authentication","description":"Evaluate the fraud detection system and the application of step-up authentication.","testId":"TC-010","testDescription":"Ensure risky actions trigger additional authentication measures to mitigate fraud.","prerequisites":"Customer account with flag triggers for high-risk transactions.","stepsToPerform":"1. Initiate a high-risk action as a customer.\n2. System detects risk and triggers additional verification.\n3. Complete verification to proceed.","expectedResult":"Action is paused until successful step-up verification.","rolesInvolved":"Customer, Fraud Monitoring Team","testData":"Phone: +1*******1234, Additional OTP: **5678","negativeVariations":"High-risk actions processed without step-up verification.","auditAndLogsToVerify":"Fraud detection signals, verification challenge initiation and response.","securityAssertions":"Step-up verification is enforced for all flagged actions.","priority":"P0","automationFeasibility":"High, Suggested Tooling: JMeter, Monitoring tools","coverageTags":"fraud detection, step-up, security"},{"type":"functional","title":"Secure Password Reset Process","description":"Validate the process for resetting an agent's password securely.","testId":"TC-011","testDescription":"Ensure the password reset procedure includes proper verification and confirmation steps.","prerequisites":"Agent's email and phone number registered in the system.","stepsToPerform":"1. Click on 'Forgot Password' on the login page.\n2. Enter registered email or phone number.\n3. Verify identity using OTP or security questions.\n4. Set a new password and confirm it.","expectedResult":"Password is reset and the agent is prompted to log in with the new password.","rolesInvolved":"Agent","testData":"Email: agent****@example.com, Phone: +1*****1234, New Password: ****1234","negativeVariations":"Incorrect answer to security questions or expired OTP prevents reset.","auditAndLogsToVerify":"Password reset request, verification step, completion timestamp.","securityAssertions":"Password reset requires verification and confirmation.","priority":"P0","automationFeasibility":"High, Suggested Tooling: Selenium","coverageTags":"password reset, security, verification"},{"type":"functional","title":"Least Privilege Access to Call Recordings","description":"Ensure agents have restricted access to sensitive call recordings.","testId":"TC-012","testDescription":"Verify that only authorized personnel can access call recordings.","prerequisites":"Call recordings exist in the system; roles defined with access permissions.","stepsToPerform":"1. Log in as an agent.\n2. Attempt to access call recordings.\n3. Log in as a supervisor.\n4. Access call recordings successfully.","expectedResult":"Agent access denied; supervisor access granted.","rolesInvolved":"Agent, Supervisor","testData":"Agent credentials: ag****, Supervisor credentials: sup****","negativeVariations":"Agent manages to bypass restrictions and access recordings.","auditAndLogsToVerify":"Access attempts, role-based access logs.","securityAssertions":"Call recordings are protected with least privilege access.","priority":"P0","automationFeasibility":"Medium, Suggested Tooling: Selenium, Access Management Tools","coverageTags":"access control, call recordings, security"},{"type":"functional","title":"Secure Handling of User Lockout","description":"Verify secure practices are in place for handling user lockout scenarios.","testId":"TC-013","testDescription":"Ensure users are notified properly and the process for unlocking accounts is secure.","prerequisites":"User is locked out due to multiple failed login attempts.","stepsToPerform":"1. Attempt to log in multiple times with incorrect credentials.\n2. Trigger account lockout.\n3. Follow the unlock procedure using email verification or administrator approval.","expectedResult":"User is notified of lockout and must follow secure procedures to unlock.","rolesInvolved":"Agent, Administrator","testData":"Email: user****@example.com, Attempts: 5, Unlock Method: Email Verification","negativeVariations":"Unlocked without proper verification.","auditAndLogsToVerify":"Lockout events, unlock procedure timestamp, verification logs.","securityAssertions":"Account lockout and unlock processes are properly logged and secure.","priority":"P1","automationFeasibility":"High, Suggested Tooling: Selenium","coverageTags":"user lockout, security, account management"},{"type":"functional","title":"Integrity of Customer Profile Changes","description":"Test the secure update mechanisms for customer profiles.","testId":"TC-014","testDescription":"Ensure changes to customer profiles are securely logged and authorized.","prerequisites":"Customer profile with editable fields available.","stepsToPerform":"1. Log in as an agent.\n2. Access a customer profile.\n3. Update critical information such as address or phone number.\n4. Complete an approval step if necessary.","expectedResult":"Changes are authorized and logged with audit details.","rolesInvolved":"Agent, Supervisor","testData":"Customer ID: CUST****, New Address: 123 New St, Confirmation Required: Yes","negativeVariations":"Unauthorized changes to profile fields.","auditAndLogsToVerify":"Profile changes, authorization logs, before/after state.","securityAssertions":"All profile changes require authorization and produce audit entries.","priority":"P0","automationFeasibility":"Medium, Suggested Tooling: Selenium, Log Management Tools","coverageTags":"profile management, audit, security"},{"type":"functional","title":"Fraudulent Transaction Alerts and Blocking","description":"Validate the system's ability to block suspicious transactions and alert relevant personnel.","testId":"TC-015","testDescription":"Ensure that fraudulent transaction attempts are detected, blocked, and logged.","prerequisites":"System configured with fraud detection rules; test accounts flagged for high-risk transactions.","stepsToPerform":"1. Execute a transaction that violates fraud detection rules.\n2. Observe system behavior as transaction is flagged and blocked.\n3. Notify relevant personnel via alerts.","expectedResult":"Transaction is blocked; alerts are sent to designated personnel.","rolesInvolved":"Agent, Fraud Analyst","testData":"Transaction ID: TXN****, Fraud Rule: Excessive Amount","negativeVariations":"Fraudulent transactions processed without detection.","auditAndLogsToVerify":"Fraud alert logs, transaction blocking events.","securityAssertions":"Fraud detection and blocking mechanisms are effective.","priority":"P0","automationFeasibility":"High, Suggested Tooling: Fraud Detection Systems, Alerting Tools","coverageTags":"fraud detection, transaction security, alerts"}] \ No newline at end of file diff --git a/functional_tests/roost_test_1768113016/roost_test_1768113016.xlsx b/functional_tests/roost_test_1768113016/roost_test_1768113016.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..7dd4b8e3fb51675d8f42f2e29c9b186e2cf8c552 GIT binary patch literal 11629 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 bQ{@*oR89)&uX_#UdEe3VJR@VMe~AANVajVe literal 0 HcmV?d00001