Completed
Pull Request — master (#3)
by Tonina
60:42
created

ChangeAddressUseCaseTest   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 124
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 92
dl 0
loc 124
rs 10
c 0
b 0
f 0
wmc 9

9 Methods

Rating   Name   Duplication   Size   Complexity  
A testGivenInvalidAddressChangeRequest_errorResponseIsReturned() 0 8 1
A testGivenUnknownAddressChangeRequestIdentifier_errorResponseIsReturned() 0 8 1
A testGivenValidAddressChangeRequest_successResponseIsReturned() 0 8 1
A testGivenEmptyAddressChangeRequest_errorResponseIsReturned() 0 8 1
A newOptOutOnlyRequest() 0 16 1
A newMissingDataChangeAddressRequest() 0 16 1
A newEmptyChangeAddressRequest() 0 16 1
A newChangeAddressRequest() 0 16 1
A testGivenValidOptOutOnlyChangeRequest_successResponseIsReturned() 0 8 1
1
<?php
2
3
declare( strict_types = 1 );
4
5
namespace WMDE\Fundraising\AddressChangeContext\Tests\Unit\UseCases;
6
7
use PHPUnit\Framework\TestCase;
8
use WMDE\Fundraising\AddressChange\Domain\AddressChangeRepository;
9
use WMDE\Fundraising\AddressChange\Domain\Model\AddressChange;
10
use WMDE\Fundraising\AddressChange\UseCases\ChangeAddress\ChangeAddressRequest;
11
use WMDE\Fundraising\AddressChange\UseCases\ChangeAddress\ChangeAddressUseCase;
12
13
/**
14
 * @covers \WMDE\Fundraising\AddressChange\UseCases\ChangeAddress\ChangeAddressUseCase
15
 */
16
class ChangeAddressUseCaseTest extends TestCase {
17
18
	private const VALID_SAMPLE_UUID = 'd8441c6e-1f7a-4710-97d3-0e2126c86d40';
19
20
	public function testGivenValidAddressChangeRequest_successResponseIsReturned(): void {
21
		$mockAddressChangeRepository = $this->createMock( AddressChangeRepository::class );
22
		$mockAddressChangeRepository->method( 'getAddressChangeByUuid' )->willReturn(
0 ignored issues
show
Bug introduced by
The method method() does not exist on PHPUnit\Framework\MockObject\MockObject. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

22
		$mockAddressChangeRepository->/** @scrutinizer ignore-call */ 
23
                                method( 'getAddressChangeByUuid' )->willReturn(

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
23
			AddressChange::createNewPersonAddressChange( self::VALID_SAMPLE_UUID )
24
		);
25
		$useCase = new ChangeAddressUseCase( $mockAddressChangeRepository );
26
		$response = $useCase->changeAddress( $this->newChangeAddressRequest() );
27
		$this->assertTrue( $response->isSuccess() );
28
	}
29
30
	public function testGivenInvalidAddressChangeRequest_errorResponseIsReturned(): void {
31
		$mockAddressChangeRepository = $this->createMock( AddressChangeRepository::class );
32
		$mockAddressChangeRepository->method( 'getAddressChangeByUuid' )->willReturn(
33
			AddressChange::createNewPersonAddressChange( self::VALID_SAMPLE_UUID )
34
		);
35
		$useCase = new ChangeAddressUseCase( $mockAddressChangeRepository );
36
		$response = $useCase->changeAddress( $this->newMissingDataChangeAddressRequest() );
37
		$this->assertFalse( $response->isSuccess() );
38
	}
39
40
	public function testGivenUnknownAddressChangeRequestIdentifier_errorResponseIsReturned(): void {
41
		$mockAddressChangeRepository = $this->createMock( AddressChangeRepository::class );
42
		$mockAddressChangeRepository->method( 'getAddressChangeByUuid' )->willReturn(
43
			null
44
		);
45
		$useCase = new ChangeAddressUseCase( $mockAddressChangeRepository );
46
		$response = $useCase->changeAddress( $this->newChangeAddressRequest() );
47
		$this->assertFalse( $response->isSuccess() );
48
	}
49
50
	public function testGivenValidOptOutOnlyChangeRequest_successResponseIsReturned(): void {
51
		$mockAddressChangeRepository = $this->createMock( AddressChangeRepository::class );
52
		$mockAddressChangeRepository->method( 'getAddressChangeByUuid' )->willReturn(
53
			AddressChange::createNewPersonAddressChange( self::VALID_SAMPLE_UUID )
54
		);
55
		$useCase = new ChangeAddressUseCase( $mockAddressChangeRepository );
56
		$response = $useCase->changeAddress( $this->newOptOutOnlyRequest() );
57
		$this->assertTrue( $response->isSuccess() );
58
	}
59
60
	public function testGivenEmptyAddressChangeRequest_errorResponseIsReturned(): void {
61
		$mockAddressChangeRepository = $this->createMock( AddressChangeRepository::class );
62
		$mockAddressChangeRepository->method( 'getAddressChangeByUuid' )->willReturn(
63
			AddressChange::createNewPersonAddressChange( self::VALID_SAMPLE_UUID )
64
		);
65
		$useCase = new ChangeAddressUseCase( $mockAddressChangeRepository );
66
		$response = $useCase->changeAddress( $this->newEmptyChangeAddressRequest() );
67
		$this->assertFalse( $response->isSuccess() );
68
	}
69
70
	private function newChangeAddressRequest(): ChangeAddressRequest {
71
		$request = new ChangeAddressRequest();
72
		$request->setIdentifier( self::VALID_SAMPLE_UUID );
73
		$request->setAddress( 'Test' );
74
		$request->setAddressType( AddressChange::ADDRESS_TYPE_PERSON );
75
		$request->setCity( 'Test City' );
76
		$request->setCountry( 'Test Country' );
77
		$request->setFirstName( 'Test Name' );
78
		$request->setLastName( 'Test Last Name' );
79
		$request->setPostcode( '12345' );
80
		$request->setSalutation( 'Herr' );
81
		$request->setTitle( 'Prof. Dr.' );
82
		$request->setDonationReceipt( true );
83
		$request->setIsOptOutOnly( false );
84
		$request->freeze();
85
		return $request;
86
	}
87
88
	private function newMissingDataChangeAddressRequest(): ChangeAddressRequest {
89
		$request = new ChangeAddressRequest();
90
		$request->setIdentifier( self::VALID_SAMPLE_UUID );
91
		$request->setAddress( 'Test' );
92
		$request->setAddressType( AddressChange::ADDRESS_TYPE_PERSON );
93
		$request->setCity( '' );
94
		$request->setCountry( 'Test Country' );
95
		$request->setFirstName( 'Test Name' );
96
		$request->setLastName( 'Test Last Name' );
97
		$request->setPostcode( '12345' );
98
		$request->setSalutation( 'Herr' );
99
		$request->setTitle( 'Prof. Dr.' );
100
		$request->setDonationReceipt( false );
101
		$request->setIsOptOutOnly( false );
102
		$request->freeze();
103
		return $request;
104
	}
105
106
	private function newEmptyChangeAddressRequest(): ChangeAddressRequest {
107
		$request = new ChangeAddressRequest();
108
		$request->setIdentifier( self::VALID_SAMPLE_UUID );
109
		$request->setAddress( '' );
110
		$request->setAddressType( AddressChange::ADDRESS_TYPE_PERSON );
111
		$request->setCity( '' );
112
		$request->setCountry( '' );
113
		$request->setFirstName( '' );
114
		$request->setLastName( '' );
115
		$request->setPostcode( '' );
116
		$request->setSalutation( '' );
117
		$request->setTitle( '' );
118
		$request->setDonationReceipt( true );
119
		$request->setIsOptOutOnly( false );
120
		$request->freeze();
121
		return $request;
122
	}
123
124
	private function newOptOutOnlyRequest(): ChangeAddressRequest {
125
		$request = new ChangeAddressRequest();
126
		$request->setIdentifier( self::VALID_SAMPLE_UUID );
127
		$request->setAddress( '' );
128
		$request->setAddressType( AddressChange::ADDRESS_TYPE_PERSON );
129
		$request->setCity( '' );
130
		$request->setCountry( '' );
131
		$request->setFirstName( '' );
132
		$request->setLastName( '' );
133
		$request->setPostcode( '' );
134
		$request->setSalutation( '' );
135
		$request->setTitle( '' );
136
		$request->setDonationReceipt( false );
137
		$request->setIsOptOutOnly( true );
138
		$request->freeze();
139
		return $request;
140
	}
141
	
142
}
143