Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 0 additions & 10 deletions .idea/jarRepositories.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.amigoscode.testing.customer;

import com.amigoscode.testing.utils.PhoneNumberValidator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

Expand All @@ -10,15 +11,23 @@
public class CustomerRegistrationService {

private final CustomerRepository customerRepository;
private final PhoneNumberValidator phoneNumberValidator;

@Autowired
public CustomerRegistrationService(CustomerRepository customerRepository) {
public CustomerRegistrationService(CustomerRepository customerRepository, PhoneNumberValidator phoneNumberValidator) {
this.customerRepository = customerRepository;

this.phoneNumberValidator = phoneNumberValidator;
}

public void registerNewCustomer(CustomerRegistrationRequest request) {
String phoneNumber = request.getCustomer().getPhoneNumber();


//TODO: Validate that phone number is valid
if (!phoneNumberValidator.test(phoneNumber)){
throw new IllegalStateException("Phone Number " + phoneNumber + " is not valid");
}
Optional<Customer> customerOptional = customerRepository
.selectCustomerByPhoneNumber(phoneNumber);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.amigoscode.testing.utils;

import java.util.function.Predicate;
import org.springframework.stereotype.Service;

@Service
public class PhoneNumberValidator implements Predicate<String> {

@Override
public boolean test(String phoneNumber) {
return phoneNumber.startsWith("+44") &&
phoneNumber.length() == 13;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.amigoscode.testing.customer;

import com.amigoscode.testing.utils.PhoneNumberValidator;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
Expand All @@ -22,6 +23,9 @@ class CustomerRegistrationServiceTest {
@Mock
private CustomerRepository customerRepository;

@Mock
private PhoneNumberValidator phoneNumberValidator;

@Captor
private ArgumentCaptor<Customer> customerArgumentCaptor;

Expand All @@ -30,7 +34,7 @@ class CustomerRegistrationServiceTest {
@BeforeEach
void setUp() {
MockitoAnnotations.initMocks(this);
underTest = new CustomerRegistrationService(customerRepository);
underTest = new CustomerRegistrationService(customerRepository, phoneNumberValidator);
}

@Test
Expand All @@ -46,6 +50,9 @@ void itShouldSaveNewCustomer() {
given(customerRepository.selectCustomerByPhoneNumber(phoneNumber))
.willReturn(Optional.empty());

//...Valid phone number
given(phoneNumberValidator.test(phoneNumber)).willReturn(true);

// When
underTest.registerNewCustomer(request);

Expand All @@ -56,10 +63,10 @@ void itShouldSaveNewCustomer() {
}

@Test
void itShouldSaveNewCustomerWhenIdIsNull() {
void itShouldNotSaveNewCustomerWhenPhoneNumberIsInvalid() {
// Given a phone number and a customer
String phoneNumber = "000099";
Customer customer = new Customer(null, "Maryam", phoneNumber);
Customer customer = new Customer(UUID.randomUUID(), "Maryam", phoneNumber);

// ... a request
CustomerRegistrationRequest request = new CustomerRegistrationRequest(customer);
Expand All @@ -68,6 +75,30 @@ void itShouldSaveNewCustomerWhenIdIsNull() {
given(customerRepository.selectCustomerByPhoneNumber(phoneNumber))
.willReturn(Optional.empty());

//...Valid phone number
given(phoneNumberValidator.test(phoneNumber)).willReturn(false);

// When
assertThatThrownBy(() -> underTest.registerNewCustomer(request))
.isInstanceOf(IllegalStateException.class)
.hasMessageContaining("Phone Number " + phoneNumber + " is not valid");

// Then
then(customerRepository).shouldHaveNoInteractions();
}

@Test
void itShouldSaveNewCustomerWhenIdIsNull() {
// Given a phone number and a customer
String phoneNumber = "000099";
Customer customer = new Customer(null, "Maryam", phoneNumber);

// ... a request
CustomerRegistrationRequest request = new CustomerRegistrationRequest(customer);

given(phoneNumberValidator.test(phoneNumber)).willReturn(true);


// When
underTest.registerNewCustomer(request);

Expand All @@ -92,6 +123,9 @@ void itShouldNotSaveCustomerWhenCustomerExists() {
given(customerRepository.selectCustomerByPhoneNumber(phoneNumber))
.willReturn(Optional.of(customer));

given(phoneNumberValidator.test(phoneNumber)).willReturn(true);


// When
underTest.registerNewCustomer(request);

Expand All @@ -113,6 +147,9 @@ void itShouldThrowWhenPhoneNumberIsTaken() {
given(customerRepository.selectCustomerByPhoneNumber(phoneNumber))
.willReturn(Optional.of(customerTwo));

given(phoneNumberValidator.test(phoneNumber)).willReturn(true);


// When
// Then
assertThatThrownBy(() -> underTest.registerNewCustomer(request))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class PaymentIntegrationTest {
void itShouldCreatePaymentSuccessfully() throws Exception {
// Given a customer
UUID customerId = UUID.randomUUID();
Customer customer = new Customer(customerId, "James", "0000000");
Customer customer = new Customer(customerId, "James", "+447000000000");

CustomerRegistrationRequest customerRegistrationRequest = new CustomerRegistrationRequest(customer);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.amigoscode.testing.utils;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import static org.assertj.core.api.Assertions.assertThat;

class PhoneNumberValidatorTest {
private PhoneNumberValidator underTest;
@BeforeEach
void setUp() {
underTest = new PhoneNumberValidator();
}

@ParameterizedTest
@CsvSource({
"+447000000000, true",
"+447000000000878, false",
"447000000000, false"
})
void itShouldValidatePhoneNumber(String phoneNumber, boolean expected){
//When
boolean isValid = underTest.test(phoneNumber);

//Then
assertThat(isValid).isEqualTo(expected);
}

}
105 changes: 0 additions & 105 deletions testing.iml

This file was deleted.