diff --git a/example/src/test/java/org/wordpress/android/fluxc/model/customer/WCCustomerMapperTest.kt b/example/src/test/java/org/wordpress/android/fluxc/model/customer/WCCustomerMapperTest.kt index 324fde5234..d17e875f10 100644 --- a/example/src/test/java/org/wordpress/android/fluxc/model/customer/WCCustomerMapperTest.kt +++ b/example/src/test/java/org/wordpress/android/fluxc/model/customer/WCCustomerMapperTest.kt @@ -273,4 +273,184 @@ class WCCustomerMapperTest { // THEN assertThat(result.isPayingCustomer).isEqualTo(false) } + + @Test + fun `given customer name, then first name is properly assigned`() { + // GIVEN + val siteId = 23 + val site = SiteModel().apply { id = siteId } + + val customerDTO = CustomerFromAnalyticsDTO(name = "firstname lastname") + + // WHEN + val result = mapper.mapToModel(site, customerDTO) + + // THEN + assertEquals("firstname", result.firstName) + } + + @Test + fun `given customer name as null, then first name returns empty string`() { + // GIVEN + val siteId = 23 + val site = SiteModel().apply { id = siteId } + + val customerDTO = CustomerFromAnalyticsDTO(name = null) + + // WHEN + val result = mapper.mapToModel(site, customerDTO) + + // THEN + assertEquals("", result.firstName) + } + + @Test + fun `given customer name with no space, then first name returns full string`() { + // GIVEN + val siteId = 23 + val site = SiteModel().apply { id = siteId } + + val customerDTO = CustomerFromAnalyticsDTO(name = "firstnamelastname") + + // WHEN + val result = mapper.mapToModel(site, customerDTO) + + // THEN + assertEquals("firstnamelastname", result.firstName) + } + + @Test + fun `given customer name, then last name is properly assigned`() { + // GIVEN + val siteId = 23 + val site = SiteModel().apply { id = siteId } + + val customerDTO = CustomerFromAnalyticsDTO(name = "firstname lastname") + + // WHEN + val result = mapper.mapToModel(site, customerDTO) + + // THEN + assertEquals("lastname", result.lastName) + } + + @Test + fun `given customer name as null, then last name returns empty string`() { + // GIVEN + val siteId = 23 + val site = SiteModel().apply { id = siteId } + + val customerDTO = CustomerFromAnalyticsDTO(name = null) + + // WHEN + val result = mapper.mapToModel(site, customerDTO) + + // THEN + assertEquals("", result.lastName) + } + + @Test + fun `given customer name has no space, then last name returns empty string`() { + // GIVEN + val siteId = 23 + val site = SiteModel().apply { id = siteId } + + val customerDTO = CustomerFromAnalyticsDTO(name = "firstnamelastname") + + // WHEN + val result = mapper.mapToModel(site, customerDTO) + + // THEN + assertEquals("", result.lastName) + } + + @Test + fun `given customer name has multiple spaces, then first name returns proper string`() { + // GIVEN + val siteId = 23 + val site = SiteModel().apply { id = siteId } + + val customerDTO = CustomerFromAnalyticsDTO(name = "firstname and a very long last name") + + // WHEN + val result = mapper.mapToModel(site, customerDTO) + + // THEN + assertEquals("firstname", result.firstName) + } + + @Test + fun `given customer name has multiple spaces, then last name returns proper string`() { + // GIVEN + val siteId = 23 + val site = SiteModel().apply { id = siteId } + + val customerDTO = CustomerFromAnalyticsDTO(name = "firstname and a very long last name") + + // WHEN + val result = mapper.mapToModel(site, customerDTO) + + // THEN + assertEquals("and a very long last name", result.lastName) + } + + @Test + fun `given customer name has leading space, then first name returns proper string`() { + // GIVEN + val siteId = 23 + val site = SiteModel().apply { id = siteId } + + val customerDTO = CustomerFromAnalyticsDTO(name = " firstname and a very long last name") + + // WHEN + val result = mapper.mapToModel(site, customerDTO) + + // THEN + assertEquals("firstname", result.firstName) + } + + @Test + fun `given customer name has trailing space, then last name returns proper string`() { + // GIVEN + val siteId = 23 + val site = SiteModel().apply { id = siteId } + + val customerDTO = CustomerFromAnalyticsDTO(name = "firstname and a very long last name ") + + // WHEN + val result = mapper.mapToModel(site, customerDTO) + + // THEN + assertEquals("and a very long last name", result.lastName) + } + + @Test + fun `given customer name has multiple in between space, then first name returns proper string`() { + // GIVEN + val siteId = 23 + val site = SiteModel().apply { id = siteId } + + val customerDTO = CustomerFromAnalyticsDTO(name = " firstname and a very long last name") + + // WHEN + val result = mapper.mapToModel(site, customerDTO) + + // THEN + assertEquals("firstname", result.firstName) + } + + @Test + fun `given customer name has multiple in between space, then last name returns proper string`() { + // GIVEN + val siteId = 23 + val site = SiteModel().apply { id = siteId } + + val customerDTO = CustomerFromAnalyticsDTO(name = " firstname and a very long last name") + + // WHEN + val result = mapper.mapToModel(site, customerDTO) + + // THEN + assertEquals("and a very long last name", result.lastName) + } } diff --git a/plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/customer/WCCustomerMapper.kt b/plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/customer/WCCustomerMapper.kt index a47f53af1d..cf618f3197 100644 --- a/plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/customer/WCCustomerMapper.kt +++ b/plugins/woocommerce/src/main/kotlin/org/wordpress/android/fluxc/model/customer/WCCustomerMapper.kt @@ -117,6 +117,10 @@ class WCCustomerMapper @Inject constructor() { } } - private fun String?.firstNameFromName() = this?.split(" ")?.firstOrNull() ?: "" - private fun String?.lastNameFromName() = this?.split(" ")?.lastOrNull() ?: "" + // Please refer WCCustomerMapperTest file which serves as documentation of how this function behaves. + private fun String?.firstNameFromName(): String = + this?.trim()?.substringBefore(' ')?.trim().orEmpty() + + private fun String?.lastNameFromName(): String = + this?.trim()?.substringAfter(' ', "")?.trim().orEmpty() }