From 1c8b09b2b636ea9512f43e0289f99c8ab47ddb93 Mon Sep 17 00:00:00 2001 From: samyou-softwire <108681823+samyou-softwire@users.noreply.github.com> Date: Thu, 30 Jul 2026 18:32:34 +0100 Subject: [PATCH 1/4] PDJB-1290: Allow for the address steps to have default values --- .../shared/stepConfig/LookupAddressStepConfig.kt | 13 +++++++++++++ .../shared/stepConfig/ManualAddressStepConfig.kt | 16 ++++++++++++++++ .../shared/stepConfig/SelectAddressStepConfig.kt | 12 ++++++++++++ 3 files changed, 41 insertions(+) diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/LookupAddressStepConfig.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/LookupAddressStepConfig.kt index ac6930236b..9c42b098c3 100644 --- a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/LookupAddressStepConfig.kt +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/LookupAddressStepConfig.kt @@ -1,6 +1,7 @@ package uk.gov.communities.prsdb.webapp.journeys.shared.stepConfig import uk.gov.communities.prsdb.webapp.annotations.webAnnotations.JourneyFrameworkComponent +import uk.gov.communities.prsdb.webapp.constants.FORM_MODEL_ATTR_NAME import uk.gov.communities.prsdb.webapp.exceptions.NotNullFormModelValueIsNullException.Companion.notNullValue import uk.gov.communities.prsdb.webapp.journeys.AbstractRequestableStepConfig import uk.gov.communities.prsdb.webapp.journeys.JourneyStep.RequestableStep @@ -25,6 +26,18 @@ class LookupAddressStepConfig( override fun chooseTemplate(state: AddressSearchState) = "forms/lookupAddressForm" + override fun resolvePageContent( + state: AddressSearchState, + defaultContent: Map, + ): Map { + val prefillPostcode = defaultContent["prefillPostcode"] as? String ?: return defaultContent + val formModel = defaultContent[FORM_MODEL_ATTR_NAME] as? LookupAddressFormModel ?: return defaultContent + if (!formModel.postcode.isNullOrBlank()) return defaultContent + formModel.postcode = prefillPostcode + formModel.houseNameOrNumber = defaultContent["prefillHouseNameOrNumber"] as? String + return defaultContent + (FORM_MODEL_ATTR_NAME to formModel) + } + override fun mode(state: AddressSearchState) = state.cachedAddresses?.let { when (it.isEmpty()) { diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/ManualAddressStepConfig.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/ManualAddressStepConfig.kt index 3416f79353..80f2638c71 100644 --- a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/ManualAddressStepConfig.kt +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/ManualAddressStepConfig.kt @@ -1,6 +1,7 @@ package uk.gov.communities.prsdb.webapp.journeys.shared.stepConfig import uk.gov.communities.prsdb.webapp.annotations.webAnnotations.JourneyFrameworkComponent +import uk.gov.communities.prsdb.webapp.constants.FORM_MODEL_ATTR_NAME import uk.gov.communities.prsdb.webapp.journeys.AbstractRequestableStepConfig import uk.gov.communities.prsdb.webapp.journeys.JourneyStep.RequestableStep import uk.gov.communities.prsdb.webapp.journeys.shared.Complete @@ -24,6 +25,21 @@ class ManualAddressStepConfig : AbstractRequestableStepConfig, + ): Map { + val prefillAddressLineOne = defaultContent["prefillAddressLineOne"] as? String ?: return defaultContent + val formModel = defaultContent[FORM_MODEL_ATTR_NAME] as? ManualAddressFormModel ?: return defaultContent + if (!formModel.addressLineOne.isNullOrBlank()) return defaultContent + formModel.addressLineOne = prefillAddressLineOne + formModel.addressLineTwo = defaultContent["prefillAddressLineTwo"] as? String + formModel.townOrCity = defaultContent["prefillTownOrCity"] as? String + formModel.county = defaultContent["prefillCounty"] as? String + formModel.postcode = defaultContent["prefillPostcode"] as? String + return defaultContent + (FORM_MODEL_ATTR_NAME to formModel) + } + override fun mode(state: AddressState) = getFormModelFromStateOrNull(state)?.let { Complete.COMPLETE } } diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/SelectAddressStepConfig.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/SelectAddressStepConfig.kt index ca60b00e25..ea0a698360 100644 --- a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/SelectAddressStepConfig.kt +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/SelectAddressStepConfig.kt @@ -2,6 +2,7 @@ package uk.gov.communities.prsdb.webapp.journeys.shared.stepConfig import org.springframework.validation.BindingResult import uk.gov.communities.prsdb.webapp.annotations.webAnnotations.JourneyFrameworkComponent +import uk.gov.communities.prsdb.webapp.constants.FORM_MODEL_ATTR_NAME import uk.gov.communities.prsdb.webapp.constants.MANUAL_ADDRESS_CHOSEN import uk.gov.communities.prsdb.webapp.exceptions.NotNullFormModelValueIsNullException import uk.gov.communities.prsdb.webapp.exceptions.NotNullFormModelValueIsNullException.Companion.notNullValue @@ -51,6 +52,17 @@ class SelectAddressStepConfig( override fun chooseTemplate(state: AddressState) = "forms/selectAddressForm" + override fun resolvePageContent( + state: AddressState, + defaultContent: Map, + ): Map { + val prefillSelectedAddress = defaultContent["prefillSelectedAddress"] as? String ?: return defaultContent + val formModel = defaultContent[FORM_MODEL_ATTR_NAME] as? SelectAddressFormModel ?: return defaultContent + if (!formModel.address.isNullOrBlank()) return defaultContent + formModel.address = prefillSelectedAddress + return defaultContent + (FORM_MODEL_ATTR_NAME to formModel) + } + override fun mode(state: AddressState) = getFormModelFromStateOrNull(state)?.address?.let { selectedAddress -> when { From ea2226fca2a2ba361cf940e3a998f70b1a7b8d64 Mon Sep 17 00:00:00 2001 From: samyou-softwire <108681823+samyou-softwire@users.noreply.github.com> Date: Thu, 30 Jul 2026 18:32:55 +0100 Subject: [PATCH 2/4] PDJB-1290: Store the address options pressed and autofill with --- .../stepConfig/SaveGovBodyMemberStepConfig.kt | 11 +++++ .../tasks/OrgLandlordRegistrationTask.kt | 46 +++++++++++++++++-- .../GoverningBodyMemberDataModel.kt | 8 ++++ 3 files changed, 60 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/SaveGovBodyMemberStepConfig.kt b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/SaveGovBodyMemberStepConfig.kt index 6ec0fb55e4..398ca181af 100644 --- a/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/SaveGovBodyMemberStepConfig.kt +++ b/src/main/kotlin/uk/gov/communities/prsdb/webapp/journeys/landlordRegistration/stepConfig/SaveGovBodyMemberStepConfig.kt @@ -30,6 +30,9 @@ class SaveGovBodyMemberStepConfig : AbstractInternalStepConfig Date: Fri, 31 Jul 2026 12:25:20 +0100 Subject: [PATCH 3/4] PDJB-1290: unit tests --- .../LookupAddressStepConfigTests.kt | 78 +++++++++++++++++++ .../ManualAddressStepConfigTests.kt | 78 +++++++++++++++++++ .../SelectAddressStepConfigTests.kt | 47 +++++++++++ 3 files changed, 203 insertions(+) create mode 100644 src/test/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/LookupAddressStepConfigTests.kt create mode 100644 src/test/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/ManualAddressStepConfigTests.kt diff --git a/src/test/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/LookupAddressStepConfigTests.kt b/src/test/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/LookupAddressStepConfigTests.kt new file mode 100644 index 0000000000..8e8eab8679 --- /dev/null +++ b/src/test/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/LookupAddressStepConfigTests.kt @@ -0,0 +1,78 @@ +package uk.gov.communities.prsdb.webapp.journeys.shared.stepConfig + +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertNull +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.extension.ExtendWith +import org.mockito.Mock +import org.mockito.junit.jupiter.MockitoExtension +import uk.gov.communities.prsdb.webapp.constants.FORM_MODEL_ATTR_NAME +import uk.gov.communities.prsdb.webapp.journeys.shared.states.AddressSearchState +import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.LookupAddressFormModel +import uk.gov.communities.prsdb.webapp.services.AddressService +import uk.gov.communities.prsdb.webapp.testHelpers.mockObjects.AlwaysTrueValidator + +@ExtendWith(MockitoExtension::class) +class LookupAddressStepConfigTests { + @Mock + lateinit var mockAddressService: AddressService + + @Mock + lateinit var mockState: AddressSearchState + + @Test + fun `resolvePageContent pre-fills postcode and house name when prefill data is provided`() { + val stepConfig = setupStepConfig() + val formModel = LookupAddressFormModel() + val content = + mapOf( + FORM_MODEL_ATTR_NAME to formModel, + "prefillPostcode" to "EG1 2AA", + "prefillHouseNameOrNumber" to "1", + ) + + val result = stepConfig.resolvePageContent(mockState, content) + + val resultFormModel = result[FORM_MODEL_ATTR_NAME] as LookupAddressFormModel + assertEquals("EG1 2AA", resultFormModel.postcode) + assertEquals("1", resultFormModel.houseNameOrNumber) + } + + @Test + fun `resolvePageContent does not overwrite existing postcode`() { + val stepConfig = setupStepConfig() + val formModel = LookupAddressFormModel() + formModel.postcode = "SW1A 1AA" + val content = + mapOf( + FORM_MODEL_ATTR_NAME to formModel, + "prefillPostcode" to "EG1 2AA", + "prefillHouseNameOrNumber" to "1", + ) + + val result = stepConfig.resolvePageContent(mockState, content) + + val resultFormModel = result[FORM_MODEL_ATTR_NAME] as LookupAddressFormModel + assertEquals("SW1A 1AA", resultFormModel.postcode) + } + + @Test + fun `resolvePageContent returns default content when no prefill data is provided`() { + val stepConfig = setupStepConfig() + val formModel = LookupAddressFormModel() + val content = mapOf(FORM_MODEL_ATTR_NAME to formModel) + + val result = stepConfig.resolvePageContent(mockState, content) + + val resultFormModel = result[FORM_MODEL_ATTR_NAME] as LookupAddressFormModel + assertNull(resultFormModel.postcode) + assertNull(resultFormModel.houseNameOrNumber) + } + + private fun setupStepConfig(): LookupAddressStepConfig { + val stepConfig = LookupAddressStepConfig(mockAddressService) + stepConfig.routeSegment = LookupAddressStep.ROUTE_SEGMENT + stepConfig.validator = AlwaysTrueValidator() + return stepConfig + } +} diff --git a/src/test/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/ManualAddressStepConfigTests.kt b/src/test/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/ManualAddressStepConfigTests.kt new file mode 100644 index 0000000000..2f6ffa29b6 --- /dev/null +++ b/src/test/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/ManualAddressStepConfigTests.kt @@ -0,0 +1,78 @@ +package uk.gov.communities.prsdb.webapp.journeys.shared.stepConfig + +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertNull +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.extension.ExtendWith +import org.mockito.Mock +import org.mockito.junit.jupiter.MockitoExtension +import uk.gov.communities.prsdb.webapp.constants.FORM_MODEL_ATTR_NAME +import uk.gov.communities.prsdb.webapp.journeys.shared.states.AddressState +import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.ManualAddressFormModel +import uk.gov.communities.prsdb.webapp.testHelpers.mockObjects.AlwaysTrueValidator + +@ExtendWith(MockitoExtension::class) +class ManualAddressStepConfigTests { + @Mock + lateinit var mockState: AddressState + + @Test + fun `resolvePageContent pre-fills all manual address fields when prefill data is provided`() { + val stepConfig = setupStepConfig() + val formModel = ManualAddressFormModel() + val content = + mapOf( + FORM_MODEL_ATTR_NAME to formModel, + "prefillAddressLineOne" to "123 Main Street", + "prefillAddressLineTwo" to "Flat 4", + "prefillTownOrCity" to "London", + "prefillCounty" to "Greater London", + "prefillPostcode" to "EG1 2AA", + ) + + val result = stepConfig.resolvePageContent(mockState, content) + + val resultFormModel = result[FORM_MODEL_ATTR_NAME] as ManualAddressFormModel + assertEquals("123 Main Street", resultFormModel.addressLineOne) + assertEquals("Flat 4", resultFormModel.addressLineTwo) + assertEquals("London", resultFormModel.townOrCity) + assertEquals("Greater London", resultFormModel.county) + assertEquals("EG1 2AA", resultFormModel.postcode) + } + + @Test + fun `resolvePageContent does not overwrite existing address line one`() { + val stepConfig = setupStepConfig() + val formModel = ManualAddressFormModel() + formModel.addressLineOne = "456 Other Road" + val content = + mapOf( + FORM_MODEL_ATTR_NAME to formModel, + "prefillAddressLineOne" to "123 Main Street", + ) + + val result = stepConfig.resolvePageContent(mockState, content) + + val resultFormModel = result[FORM_MODEL_ATTR_NAME] as ManualAddressFormModel + assertEquals("456 Other Road", resultFormModel.addressLineOne) + } + + @Test + fun `resolvePageContent returns default content when no prefill data is provided`() { + val stepConfig = setupStepConfig() + val formModel = ManualAddressFormModel() + val content = mapOf(FORM_MODEL_ATTR_NAME to formModel) + + val result = stepConfig.resolvePageContent(mockState, content) + + val resultFormModel = result[FORM_MODEL_ATTR_NAME] as ManualAddressFormModel + assertNull(resultFormModel.addressLineOne) + } + + private fun setupStepConfig(): ManualAddressStepConfig { + val stepConfig = ManualAddressStepConfig() + stepConfig.routeSegment = ManualAddressStep.ROUTE_SEGMENT + stepConfig.validator = AlwaysTrueValidator() + return stepConfig + } +} diff --git a/src/test/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/SelectAddressStepConfigTests.kt b/src/test/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/SelectAddressStepConfigTests.kt index 06604cdd7c..9585a75b49 100644 --- a/src/test/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/SelectAddressStepConfigTests.kt +++ b/src/test/kotlin/uk/gov/communities/prsdb/webapp/journeys/shared/stepConfig/SelectAddressStepConfigTests.kt @@ -7,8 +7,10 @@ import org.junit.jupiter.api.extension.ExtendWith import org.mockito.Mock import org.mockito.junit.jupiter.MockitoExtension import org.mockito.kotlin.whenever +import uk.gov.communities.prsdb.webapp.constants.FORM_MODEL_ATTR_NAME import uk.gov.communities.prsdb.webapp.constants.MANUAL_ADDRESS_CHOSEN import uk.gov.communities.prsdb.webapp.journeys.shared.states.AddressState +import uk.gov.communities.prsdb.webapp.models.requestModels.formModels.SelectAddressFormModel import uk.gov.communities.prsdb.webapp.services.AddressAvailabilityService import uk.gov.communities.prsdb.webapp.testHelpers.mockObjects.AlwaysTrueValidator @@ -89,6 +91,51 @@ class SelectAddressStepConfigTests { assertEquals(SelectAddressMode.ADDRESS_SELECTED, result) } + @Test + fun `resolvePageContent pre-fills selected address when prefillSelectedAddress is provided`() { + val stepConfig = setupStepConfig() + val formModel = SelectAddressFormModel() + val content = + mapOf( + FORM_MODEL_ATTR_NAME to formModel, + "prefillSelectedAddress" to "1 PRSDB Square, EG1 2AA", + ) + + val result = stepConfig.resolvePageContent(mockAddressState, content) + + val resultFormModel = result[FORM_MODEL_ATTR_NAME] as SelectAddressFormModel + assertEquals("1 PRSDB Square, EG1 2AA", resultFormModel.address) + } + + @Test + fun `resolvePageContent does not overwrite existing address selection`() { + val stepConfig = setupStepConfig() + val formModel = SelectAddressFormModel() + formModel.address = "2 PRSDB Square, EG1 2AA" + val content = + mapOf( + FORM_MODEL_ATTR_NAME to formModel, + "prefillSelectedAddress" to "1 PRSDB Square, EG1 2AA", + ) + + val result = stepConfig.resolvePageContent(mockAddressState, content) + + val resultFormModel = result[FORM_MODEL_ATTR_NAME] as SelectAddressFormModel + assertEquals("2 PRSDB Square, EG1 2AA", resultFormModel.address) + } + + @Test + fun `resolvePageContent returns default content when no prefillSelectedAddress is provided`() { + val stepConfig = setupStepConfig() + val formModel = SelectAddressFormModel() + val content = mapOf(FORM_MODEL_ATTR_NAME to formModel) + + val result = stepConfig.resolvePageContent(mockAddressState, content) + + val resultFormModel = result[FORM_MODEL_ATTR_NAME] as SelectAddressFormModel + assertNull(resultFormModel.address) + } + private fun setupStepConfig(): SelectAddressStepConfig { val stepConfig = SelectAddressStepConfig(mockAddressAvailabilityService) stepConfig.routeSegment = routeSegment From 155767a1381cce6fb7b4b59bdce10a92eee9aec7 Mon Sep 17 00:00:00 2001 From: samyou-softwire <108681823+samyou-softwire@users.noreply.github.com> Date: Fri, 31 Jul 2026 12:25:36 +0100 Subject: [PATCH 4/4] PDJB-1290: journey tests --- .../LandlordRegistrationJourneyTests.kt | 150 ++++++++++++++++-- ...nualAddressFormPageLandlordRegistration.kt | 14 ++ 2 files changed, 155 insertions(+), 9 deletions(-) create mode 100644 src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/pageObjects/pages/landlordRegistrationJourneyPages/OrgGovBodyMemberManualAddressFormPageLandlordRegistration.kt diff --git a/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/LandlordRegistrationJourneyTests.kt b/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/LandlordRegistrationJourneyTests.kt index 5b0868946e..d9f829fbb9 100644 --- a/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/LandlordRegistrationJourneyTests.kt +++ b/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/LandlordRegistrationJourneyTests.kt @@ -47,6 +47,7 @@ import uk.gov.communities.prsdb.webapp.integration.pageObjects.pages.landlordReg import uk.gov.communities.prsdb.webapp.integration.pageObjects.pages.landlordRegistrationJourneyPages.OrgGovBodyMemberDobFormPageLandlordRegistration import uk.gov.communities.prsdb.webapp.integration.pageObjects.pages.landlordRegistrationJourneyPages.OrgGovBodyMemberListFormPageLandlordRegistration import uk.gov.communities.prsdb.webapp.integration.pageObjects.pages.landlordRegistrationJourneyPages.OrgGovBodyMemberLookupAddressFormPageLandlordRegistration +import uk.gov.communities.prsdb.webapp.integration.pageObjects.pages.landlordRegistrationJourneyPages.OrgGovBodyMemberManualAddressFormPageLandlordRegistration import uk.gov.communities.prsdb.webapp.integration.pageObjects.pages.landlordRegistrationJourneyPages.OrgGovBodyMemberNameFormPageLandlordRegistration import uk.gov.communities.prsdb.webapp.integration.pageObjects.pages.landlordRegistrationJourneyPages.OrgGovBodyMemberSelectAddressFormPageLandlordRegistration import uk.gov.communities.prsdb.webapp.integration.pageObjects.pages.landlordRegistrationJourneyPages.OrgGovBodyWhoToProvideFormPageLandlordRegistration @@ -579,13 +580,144 @@ class LandlordRegistrationJourneyTests : IntegrationTestWithMutableData("data-mo assertThat(updatedListPage.summaryList.getRowByIndex(1).value).containsText("Bob Jones") } - private fun createTestGovBodyMember(name: String) = - uk.gov.communities.prsdb.webapp.models.dataModels.GoverningBodyMemberDataModel( - name = name, - type = GoverningBodyMemberType.DIRECTOR, - dateOfBirth = kotlinx.datetime.LocalDate(1970, 1, 1), - address = - uk.gov.communities.prsdb.webapp.models.dataModels - .AddressDataModel(singleLineAddress = "Test Address"), - ) + @Test + fun `editing a governing body member pre-fills all questions including looked-up address`(page: Page) { + featureFlagManager.enable(ORGANISATION_LANDLORD_REGISTRATION) + + val memberListPage = + navigator.skipToOrgLandlordRegistrationGovBodyMemberListPage( + mapOf( + 1 to + createTestGovBodyMember( + name = "Alice Smith", + type = GoverningBodyMemberType.TRUSTEE, + dateOfBirth = kotlinx.datetime.LocalDate(1985, 3, 15), + addressSearchPostcode = "EG1 2AA", + addressSearchHouseNameOrNumber = "1", + selectedAddress = "1 PRSDB Square, EG1 2AA", + ), + ), + ) + + memberListPage.summaryList + .getRowByIndex(0) + .actions + .getActionLink("Change") + .clickAndWait() + + val whoToProvidePage = assertPageIs(page, OrgGovBodyWhoToProvideFormPageLandlordRegistration::class) + assertEquals("TRUSTEE", whoToProvidePage.form.radios.selectedValue) + whoToProvidePage.form.submit() + + val namePage = assertPageIs(page, OrgGovBodyMemberNameFormPageLandlordRegistration::class) + assertThat(namePage.form.nameInput).hasValue("Alice Smith") + namePage.form.submit() + + val dobPage = assertPageIs(page, OrgGovBodyMemberDobFormPageLandlordRegistration::class) + assertThat(dobPage.form.dayInput).hasValue("15") + assertThat(dobPage.form.monthInput).hasValue("3") + assertThat(dobPage.form.yearInput).hasValue("1985") + dobPage.form.submit() + + val lookupAddressPage = assertPageIs(page, OrgGovBodyMemberLookupAddressFormPageLandlordRegistration::class) + assertThat(lookupAddressPage.form.postcodeInput).hasValue("EG1 2AA") + assertThat(lookupAddressPage.form.houseNameOrNumberInput).hasValue("1") + lookupAddressPage.form.submit() + + val selectAddressPage = assertPageIs(page, OrgGovBodyMemberSelectAddressFormPageLandlordRegistration::class) + assertEquals("1 PRSDB Square, EG1 2AA", selectAddressPage.form.addressRadios.selectedValue) + selectAddressPage.form.submit() + + val updatedListPage = assertPageIs(page, OrgGovBodyMemberListFormPageLandlordRegistration::class) + assertThat(updatedListPage.summaryList.getRowByIndex(0).value).containsText("Alice Smith") + } + + @Test + fun `editing a governing body member pre-fills manual address`(page: Page) { + featureFlagManager.enable(ORGANISATION_LANDLORD_REGISTRATION) + + val memberListPage = + navigator.skipToOrgLandlordRegistrationGovBodyMemberListPage( + mapOf( + 1 to + createTestGovBodyMember( + name = "Bob Jones", + type = GoverningBodyMemberType.DIRECTOR, + dateOfBirth = kotlinx.datetime.LocalDate(1990, 7, 20), + addressSearchPostcode = "EG1 2AA", + addressSearchHouseNameOrNumber = "1", + selectedAddress = MANUAL_ADDRESS_CHOSEN, + manualAddressLineOne = "123 Main Street", + manualAddressLineTwo = "Flat 4", + manualTownOrCity = "London", + manualCounty = "Greater London", + manualPostcode = "EG1 2AA", + ), + ), + ) + + memberListPage.summaryList + .getRowByIndex(0) + .actions + .getActionLink("Change") + .clickAndWait() + + val whoToProvidePage = assertPageIs(page, OrgGovBodyWhoToProvideFormPageLandlordRegistration::class) + whoToProvidePage.form.submit() + + val namePage = assertPageIs(page, OrgGovBodyMemberNameFormPageLandlordRegistration::class) + namePage.form.submit() + + val dobPage = assertPageIs(page, OrgGovBodyMemberDobFormPageLandlordRegistration::class) + dobPage.form.submit() + + val lookupAddressPage = assertPageIs(page, OrgGovBodyMemberLookupAddressFormPageLandlordRegistration::class) + assertThat(lookupAddressPage.form.postcodeInput).hasValue("EG1 2AA") + assertThat(lookupAddressPage.form.houseNameOrNumberInput).hasValue("1") + lookupAddressPage.form.submit() + + val selectAddressPage = assertPageIs(page, OrgGovBodyMemberSelectAddressFormPageLandlordRegistration::class) + assertEquals(MANUAL_ADDRESS_CHOSEN, selectAddressPage.form.addressRadios.selectedValue) + selectAddressPage.form.submit() + + val manualAddressPage = assertPageIs(page, OrgGovBodyMemberManualAddressFormPageLandlordRegistration::class) + assertThat(manualAddressPage.form.addressLineOneInput).hasValue("123 Main Street") + assertThat(manualAddressPage.form.addressLineTwoInput).hasValue("Flat 4") + assertThat(manualAddressPage.form.townOrCityInput).hasValue("London") + assertThat(manualAddressPage.form.countyInput).hasValue("Greater London") + assertThat(manualAddressPage.form.postcodeInput).hasValue("EG1 2AA") + manualAddressPage.form.submit() + + val updatedListPage = assertPageIs(page, OrgGovBodyMemberListFormPageLandlordRegistration::class) + assertThat(updatedListPage.summaryList.getRowByIndex(0).value).containsText("Bob Jones") + } + + private fun createTestGovBodyMember( + name: String, + type: GoverningBodyMemberType = GoverningBodyMemberType.DIRECTOR, + dateOfBirth: kotlinx.datetime.LocalDate = kotlinx.datetime.LocalDate(1970, 1, 1), + addressSearchPostcode: String? = null, + addressSearchHouseNameOrNumber: String? = null, + selectedAddress: String? = null, + manualAddressLineOne: String? = null, + manualAddressLineTwo: String? = null, + manualTownOrCity: String? = null, + manualCounty: String? = null, + manualPostcode: String? = null, + ) = uk.gov.communities.prsdb.webapp.models.dataModels.GoverningBodyMemberDataModel( + name = name, + type = type, + dateOfBirth = dateOfBirth, + address = + uk.gov.communities.prsdb.webapp.models.dataModels + .AddressDataModel(singleLineAddress = "Test Address"), + addressSearchPostcode = addressSearchPostcode, + addressSearchHouseNameOrNumber = addressSearchHouseNameOrNumber, + selectedAddress = selectedAddress, + manualAddressLineOne = manualAddressLineOne, + manualAddressLineTwo = manualAddressLineTwo, + manualTownOrCity = manualTownOrCity, + manualCounty = manualCounty, + manualPostcode = manualPostcode, + ) } diff --git a/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/pageObjects/pages/landlordRegistrationJourneyPages/OrgGovBodyMemberManualAddressFormPageLandlordRegistration.kt b/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/pageObjects/pages/landlordRegistrationJourneyPages/OrgGovBodyMemberManualAddressFormPageLandlordRegistration.kt new file mode 100644 index 0000000000..76965994b4 --- /dev/null +++ b/src/test/kotlin/uk/gov/communities/prsdb/webapp/integration/pageObjects/pages/landlordRegistrationJourneyPages/OrgGovBodyMemberManualAddressFormPageLandlordRegistration.kt @@ -0,0 +1,14 @@ +package uk.gov.communities.prsdb.webapp.integration.pageObjects.pages.landlordRegistrationJourneyPages + +import com.microsoft.playwright.Page +import uk.gov.communities.prsdb.webapp.controllers.RegisterLandlordController.Companion.LANDLORD_REGISTRATION_ROUTE +import uk.gov.communities.prsdb.webapp.integration.pageObjects.pages.basePages.ManualAddressFormPage +import uk.gov.communities.prsdb.webapp.journeys.shared.stepConfig.ManualAddressStep +import uk.gov.communities.prsdb.webapp.journeys.shared.tasks.GovBodyMemberAddressTask + +class OrgGovBodyMemberManualAddressFormPageLandlordRegistration( + page: Page, +) : ManualAddressFormPage( + page, + "$LANDLORD_REGISTRATION_ROUTE/${GovBodyMemberAddressTask.ROUTE_SEGMENT}/${ManualAddressStep.ROUTE_SEGMENT}", + )