Protractor tests. Loan product/account tests.
diff --git a/Pages/CustomerLoans.js b/Pages/CustomerLoans.js index 3f23c2b..c329df9 100644 --- a/Pages/CustomerLoans.js +++ b/Pages/CustomerLoans.js
@@ -260,11 +260,6 @@ $$(".td-step-label").get(2).click(); browser.sleep(1000); }, - goToStepDocuments: function(){ - browser.sleep(100); - browser.wait(EC.elementToBeClickable($$(".td-step-label").get(3)), 3000); - $$(".td-step-label").get(3).click(); - }, verifyButtonCreateMemberLoanDisabled: function(){ expect(primaryButton.filter(function(elem, index) { return elem.$("span").getText().then(function(text) { @@ -388,12 +383,22 @@ browser.wait(EC.elementToBeClickable($('a[href="' + link + '"]')), 6000); $('a[href="' + link + '"]').click(); }, + goToTasksForCustomerLoan: function (customer, productIdentifier, accountIdentifier) { + link = "/customers/detail/" + customer + "/loans/products/" + productIdentifier + "/detail/" + accountIdentifier + "/tasks"; + browser.wait(EC.elementToBeClickable($('a[href="' + link + '"]')), 5000); + $('a[href="' + link + '"]').click(); + }, viewDebtIncomeReportForCustomerLoan: function(customer, productIdentifier, accountIdentifier){ link = "/customers/detail/" + customer + "/loans/products/" + productIdentifier + "/detail/" + accountIdentifier + "/debtIncome"; browser.wait(EC.elementToBeClickable($('a[href="' + link + '"]')), 5000); $('a[href="' + link + '"]').click(); browser.wait(EC.visibilityOf($("fims-layout-card-over")), 2000); }, + viewLoanDocumentsForCustomerLoan: function(customer, loanProduct, loanAccount){ + link = "/customers/detail/" + customer + "/loans/products/" + loanProduct + "/detail/" + loanAccount + "/documents"; + browser.wait(EC.elementToBeClickable($('a[href="' + link + '"]')), 6000); + $('a[href="' + link + '"]').click(); + }, //table verifyPrincipalForLoanAccountInRow: function(principalAmount, row){ browser.wait(EC.visibilityOf($("table tbody")), 3000); @@ -477,7 +482,7 @@ })).toBe(true); }, verifyMemberRatioIs:function (text){ - expect($$("mat-tab-header div[role='tab']").get(0).getText()).toMatch("Member(Ratio: " + text + ")"); + expect($$("mat-tab-header div[role='tab']").get(0).getText()).toEqual("Member(Ratio: " + text + ")"); }, verifyCoSignerRatioIs:function (text){ expect($$("mat-tab-header div[role='tab']").get(1).getText()).toEqual("Co-signer(Ratio: " + text + ")"); @@ -508,9 +513,50 @@ verifyCreateLoanButtonIsNotDisplayed: function(){ expect($("a[title='Create new loan for member ']").isPresent()).toBe(false); }, + verifyEditLoanButtonIsNotDisplayed: function(){ + expect($("a[title='Edit member loan']").isPresent()).toBe(false); + }, + verifyEditLoanButtonIsDisplayed: function(){ + expect($("a[title='Edit member loan']").isPresent()).toBe(true); + }, verifyMessagesAreDisplayed: function(message, message2){ browser.wait(EC.visibilityOf($("td-message")), 2500); expect($("td-message .td-message-label").getText()).toEqual(message); expect($("td-message .td-message-sublabel").getText()).toEqual(message2); + }, + //planned payments + verifyDateForPlannedPaymentsInRow: function(date, row){ + browser.wait(EC.visibilityOf($("table tbody")), 3000); + expect($$("table tbody tr").get(row - 1).$$(".td-data-table-cell").get(0).getText()).toEqual(date); + }, + verifyBalanceForPlannedPaymentsInRow: function(balance, row){ + browser.wait(EC.visibilityOf($("table tbody tr")), 4000); + expect($$("table tbody tr").get(row - 1).$$(".td-data-table-cell").get(4).getText()).toEqual(balance); + }, + verifyPaymentForPlannedPaymentsInRow: function(payment, row){ + browser.wait(EC.visibilityOf($("table tbody")), 3000); + expect($$("table tbody tr").get(row - 1).$$(".td-data-table-cell").get(1).getText()).toEqual(payment); + }, + verifyInterestForPlannedPaymentsInRow: function(interest, row){ + browser.wait(EC.visibilityOf($("table tbody")), 3000); + expect($$("table tbody tr").get(row - 1).$$(".td-data-table-cell").get(2).getText()).toEqual(interest); + }, + verifyPrincipalForPlannedPaymentsInRow: function(principal, row){ + browser.wait(EC.visibilityOf($("table tbody")), 3000); + expect($$("table tbody tr").get(row - 1).$$(".td-data-table-cell").get(3).getText()).toEqual(principal); + }, + //tasks + selectExecuteTaskCheckbox: function(){ + browser.wait(EC.visibilityOf($("mat-checkbox[title='Execute task']")), 3000); + $("mat-checkbox[title='Execute task']").click(); + expect($("mat-checkbox[title='Execute task']").getAttribute("class")).toMatch("mat-checkbox-checked"); + }, + clickButtonForTask: function (action) { + browser.sleep(500); + $$('.mat-raised-button.mat-primary').filter(function (elem, index) { + return elem.$("span").getText().then(function (text) { + return text === action; + }); + }).click(); } };
diff --git a/Pages/Customers.js b/Pages/Customers.js index 60135f6..5451cf6 100644 --- a/Pages/Customers.js +++ b/Pages/Customers.js
@@ -313,11 +313,6 @@ browser.wait(EC.elementToBeClickable($('a[href="' + link + '"]')), 5000); $('a[href="' + link + '"]').click(); }, - clickLinkTasks: function (customer, productIdentifier, accountIdentifier) { - link = "/customers/detail/" + customer + "/loans/products/" + productIdentifier + "/detail/" + accountIdentifier + "/tasks"; - browser.wait(EC.elementToBeClickable($('a[href="' + link + '"]')), 5000); - $('a[href="' + link + '"]').click(); - }, selectExecuteTaskCheckbox: function(){ browser.wait(EC.visibilityOf($("mat-checkbox[title='Execute task']")), 3000); $("mat-checkbox[title='Execute task']").click();
diff --git a/Pages/Loans.js b/Pages/Loans.js index 46e41fd..61d7a26 100644 --- a/Pages/Loans.js +++ b/Pages/Loans.js
@@ -36,6 +36,7 @@ var arrearsAllowanceAccountInput = $("fims-account-select[formcontrolname='account'] input"); var primaryButton = $$(".mat-raised-button.mat-primary"); +var buttons = $$(".mat-button"); var feeAmountInput = $("fims-text-input[controlname='amount'] input"); var feeProportionalToSelect = $("mat-select[formcontrolname='proportionalTo'] .mat-select-trigger"); @@ -50,6 +51,9 @@ var actionSelect1 = $("mat-select[formcontrolname='action'] .mat-select-trigger"); var actionSelect2 = $$("mat-select[formcontrolname='action'] .mat-select-trigger").get(1); +var daysLateInputs = $$("fims-text-input[controlname='daysLate'] input"); +var percentProvisions = $$("fims-text-input[controlname='percentProvision'] input"); + module.exports = { goToLoanProductsViaSidePanel: function() { $("a[href='/loans']").click(); @@ -210,6 +214,15 @@ }); }).click(); }, + clickEnabledUpdateLossProvisionButton: function(){ + browser.executeScript("arguments[0].scrollIntoView();", primaryButton.first().getWebElement()); + browser.wait(EC.elementToBeClickable(primaryButton.first()), 3000); + primaryButton.filter(function(elem, index) { + return elem.$("span").getText().then(function(text) { + return text === "UPDATE LOSS PROVISION"; + }); + }).click(); + }, clickLinkManageFeesForLoanProduct: function(identifier){ link = "/loans/detail/" + identifier + "/charges"; browser.wait(EC.visibilityOf($('a[href="'+ link + '"]'))); @@ -225,6 +238,32 @@ browser.wait(EC.visibilityOf($('a[href="'+ link + '"]'))); $('a[href="'+ link + '"]').click(); }, + clickLinkLossProvisionConfigurationForLoanProduct: function(identifier){ + link = "/loans/detail/" + identifier + "/lossProvision"; + browser.wait(EC.visibilityOf($('a[href="'+ link + '"]'))); + $('a[href="'+ link + '"]').click(); + }, + clickButtonAddStep: function(){ + browser.sleep(200); + buttons.filter(function(elem, index) { + return elem.$("span").getText().then(function(text) { + return text === "ADD STEP"; + }); + }).first().click(); + }, + enterTextIntoDaysLateInputField: function(text, number) { + browser.wait(EC.visibilityOf(daysLateInputs.get(number-1)), 2000) + daysLateInputs.get(number-1).clear().click().sendKeys(text); + }, + enterTextIntoPercentProvisionInputField: function(text, number) { + browser.wait(EC.visibilityOf(percentProvisions.get(number-1)), 2000) + percentProvisions.get(number-1).clear().click().sendKeys(text); + }, + clickButtonEditLossProvisionConfigurationForLoanProduct: function(identifier){ + link = "/loans/detail/" + identifier + "/lossProvision/edit" ; + browser.wait(EC.visibilityOf($('a[href="'+ link + '"]'))); + $('a[href="'+ link + '"]').click(); + }, clickButtonCreateTaskForLoanProduct: function(identifier){ link = "/loans/detail/" + identifier + "/tasks/create"; browser.wait(EC.visibilityOf($('a[href="'+ link + '"]')));
diff --git a/Specs/gate1.js b/Specs/gate1.js index 6195ace..02fc42a 100644 --- a/Specs/gate1.js +++ b/Specs/gate1.js
@@ -487,7 +487,7 @@ }); it('should be able to open loan - mandatory task', function () { Common.clickLinkShowForRowWithId(loanAccountShortName); - Customers.clickLinkTasks(customerAccount, loanShortName, loanAccountShortName); + CustomerLoans.goToTasksForCustomerLoan(customerAccount, loanShortName, loanAccountShortName); Customers.selectExecuteTaskCheckbox(); Common.verifyMessagePopupIsDisplayed("Task executed successfully"); Customers.clickButtonForTask("OPEN"); @@ -497,7 +497,7 @@ Common.verifyMessagePopupIsDisplayed("Case is going to be updated"); }); it('should be able to approve loan - mandatory task already executed', function () { - Customers.clickLinkTasks(customerAccount, loanShortName, loanAccountShortName); + CustomerLoans.goToTasksForCustomerLoan(customerAccount, loanShortName, loanAccountShortName); //checkbox already selected since one task only that already has been executed Customers.clickButtonForTask("APPROVE"); Customers.clickButtonForTransaction("APPROVE"); @@ -507,7 +507,7 @@ it('should be able to disburse loan - no task', function () { //currently error if this is done too quickly; workaround browser.sleep("10000"); - Customers.clickLinkTasks(customerAccount, loanShortName, loanAccountShortName); + CustomerLoans.goToTasksForCustomerLoan(customerAccount, loanShortName, loanAccountShortName); Customers.clickButtonForTask("DISBURSE"); Customers.verifyTransactionCharge("Processing fee", "150.00"); Customers.verifyTransactionCharge("Loan origination fee", "50.00");
diff --git a/Specs/loans1_creation&assignment.js b/Specs/loans1_creation&assignment.js index 32d3c36..e46b86c 100644 --- a/Specs/loans1_creation&assignment.js +++ b/Specs/loans1_creation&assignment.js
@@ -286,6 +286,7 @@ }); it('should enable the first loan product', function () { Common.clickLinkShowForRowWithId(loanShortName); + //ToDo: details CustomerLoans.verifyMessagesAreDisplayed("Product not enabled", "To assign this product to a member it needs to be enabled first"); Loans.clickButtonEnableProduct(); Common.verifyMessagePopupIsDisplayed("Product is going to be enabled"); @@ -329,6 +330,19 @@ Loans.clickEnabledCreateProductButton(); Common.verifyMessagePopupIsDisplayed("Product is going to be saved"); }); + it('should configure loan loss provision', function () { + Common.clickLinkShowForRowWithId(loanShortName2); + //ToDo: details + Loans.clickLinkLossProvisionConfigurationForLoanProduct(loanShortName2); + Loans.clickButtonEditLossProvisionConfigurationForLoanProduct(loanShortName2); + Loans.clickButtonAddStep(); + Loans.enterTextIntoPercentProvisionInputField("5", 1); + Loans.clickButtonAddStep(); + Loans.enterTextIntoDaysLateInputField("10", 2); + Loans.enterTextIntoPercentProvisionInputField("25", 2); + Loans.clickEnabledUpdateLossProvisionButton(); + Common.verifyMessagePopupIsDisplayed("oss provision configuration is going to be saved"); + }); it('should not be able to select loan product if not enabled', function () { Customers.goToManageCustomersViaSidePanel(); Common.clickSearchButtonToMakeSearchInputFieldAppear(); @@ -485,31 +499,84 @@ CustomerLoans.verifyCreatedByForLoanIs(employeeIdentifier); }); it('planned payment', function () { - CustomerLoans.viewPlannedPaymentForCustomerLoan(customerAccount, loanShortName, loanAccountShortName); - //error, ATEN-474 + // CustomerLoans.viewPlannedPaymentForCustomerLoan(customerAccount, loanShortName2, loanAccountShortName); + // error, ATEN-474 + // CustomerLoans.verifyBalanceForPlannedPaymentsInRow("1500" ,"1"); + // Common.clickBackButtonInTitleBar(); }); it('debt/income ratio', function () { CustomerLoans.viewDebtIncomeReportForCustomerLoan(customerAccount, loanShortName2, loanAccountShortName); CustomerLoans.verifyMemberRatioIs("01.50"); + //ToDo: more details CustomerLoans.verifyCoSignerRatioIs("00.42"); + //ToDo: more details Common.clickBackButtonInTitleBar(); }); it('should be able to edit loan account until it has been approved', function () { CustomerLoans.clickUpdateLoanAccountForMember(customerAccount, loanShortName2, loanAccountShortName); - browser.pause(); - //edit loan account to different one (different product, different settings) - CustomerLoans.selectProduct(loanShortName); - //error principal & interest rate, bug - CustomerLoans.verifyButtonUpdateMemberLoanDisabled(); - CustomerLoans.enterTextIntoPrincipalAmountInputField(10000); - CustomerLoans.enterTextIntoInterestRateInputField("3.60"); - CustomerLoans.verifyButtonUpdateMemberLoanDisabled(); + //edit loan account settings + //ToDo: different loan product - should not be possible or work as expected (currently error on saving) + CustomerLoans.enterTextIntoPrincipalAmountInputField("500"); + CustomerLoans.verifyInterestRateInputFieldIsDisabledAndHasText("15.00"); + CustomerLoans.enterTextIntoTermInputField("50"); + CustomerLoans.selectTemporalUnitForTerm("weeks"); + CustomerLoans.enterTextIntoPaymentPeriodInputField("10"); + CustomerLoans.selectPaymentPeriod("weeks"); CustomerLoans.clickEnabledUpdateMemberLoanButton(); - //unexpected error, bug Common.verifyMessagePopupIsDisplayed("Case is going to be saved"); //planned payment - //... + CustomerLoans.viewPlannedPaymentForCustomerLoan(customerAccount, loanShortName2, loanAccountShortName); + CustomerLoans.verifyBalanceForPlannedPaymentsInRow("500" ,"1"); + CustomerLoans.verifyBalanceForPlannedPaymentsInRow("0" ,"6"); + Common.clickBackButtonInTitleBar(); + //edit loan account again and update debt to income ratio + CustomerLoans.clickUpdateLoanAccountForMember(customerAccount, loanShortName2, loanAccountShortName); + CustomerLoans.goToStepDebtToIncomeRatio(); + CustomerLoans.removeDebtAtPosition(1); + CustomerLoans.verifyDebtTotalIs("5,000.00"); + CustomerLoans.verifyDebtIncomeRatioIs("00.50"); + CustomerLoans.enterTextIntoAmountInputFieldForIncome("100000", 2); + CustomerLoans.verifyIncomeTotalIs("105,000.00"); + CustomerLoans.verifyDebtIncomeRatioIs("00.05"); + CustomerLoans.clickEnabledUpdateMemberLoanButton(); + Common.verifyMessagePopupIsDisplayed("Case is going to be saved"); + //debt to income report + CustomerLoans.viewDebtIncomeReportForCustomerLoan(customerAccount, loanShortName2, loanAccountShortName); + CustomerLoans.verifyMemberRatioIs("00.05"); + CustomerLoans.verifyCoSignerRatioIs("00.42"); + //ToDo: more details + Common.clickBackButtonInTitleBar(); }); + it('should not be able to edit loan account once it has been approved', function () { + //open loan; can still be edited + CustomerLoans.goToTasksForCustomerLoan(customerAccount, loanShortName2, loanAccountShortName); + CustomerLoans.clickButtonForTask("OPEN"); + browser.pause(); + Common.verifyMessagePopupIsDisplayed("Case is going to be updated"); + CustomerLoans.verifyLoanStatusIs("PENDING"); + CustomerLoans.verifyEditLoanButtonIsDisplayed(); + //approve loan; can no longer be edited + CustomerLoans.goToTasksForCustomerLoan(customerAccount, loanShortName2, loanAccountShortName); + //ToDo: task DENY + CustomerLoans.clickButtonForTask("APPROVE"); + Common.verifyMessagePopupIsDisplayed("Case is going to be updated"); + CustomerLoans.verifyLoanStatusIs("APPROVED"); + CustomerLoans.verifyEditLoanButtonIsNotDisplayed(); + //disburse loan; default fees & loss provision configured + CustomerLoans.goToTasksForCustomerLoan(customerAccount, loanShortName2, loanAccountShortName); + browser.pause(); + //ToDo: task CLOSE + CustomerLoans.clickButtonForTask("DISBURSE"); + Common.verifyMessagePopupIsDisplayed("Case is going to be updated"); + CustomerLoans.verifyLoanStatusIs("ACTIVE"); + CustomerLoans.verifyEditLoanButtonIsNotDisplayed(); + browser.pause(); + //ToDo: task CLOSE + }); + it('should be able to add documents to loan', function () { + CustomerLoans.viewLoanDocumentsForCustomerLoan(customerAccount, loanShortName2, loanAccountShortName); + }); + it('update/deletion of unassigned/assigned product', function () { //assigned product cannot be deleted anymore //what about disabled/edited?
diff --git a/conf.js b/conf.js index 3339ef4..8c0bb55 100644 --- a/conf.js +++ b/conf.js
@@ -6,7 +6,7 @@ framework: 'jasmine', specs: [ - 'Specs/teller_management.js' + 'Specs/loans1_creation&assignment.js' ], directConnect: true, allScriptsTimeout: 45000, @@ -31,6 +31,7 @@ browser.ignoreSynchronization = true; //browser.driver.get('https://pilot.kuelap.io/index.html'); browser.driver.get('http://localhost:4200'); + //browser.driver.get(' https://sandbox.kuelap.io/index.html'); browser.driver.findElement(by.css(".mat-input-element[formcontrolname='tenant']")).sendKeys('playground'); browser.driver.findElement(by.css(".mat-input-element[formcontrolname='username']")).sendKeys('operator');