Completed
Push — master ( d68816...af1be9 )
by Jeroen De
10s
created

newSucceedingBankDataGenerator()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
c 0
b 0
f 0
rs 9.4285
cc 1
eloc 4
nc 1
nop 0
1
<?php
2
3
declare( strict_types = 1 );
4
5
namespace WMDE\Fundraising\PaymentContext\Tests\Integration\UseCases\GenerateIban;
6
7
use PHPUnit\Framework\TestCase;
8
use WMDE\Fundraising\PaymentContext\Domain\BankDataGenerator;
9
use WMDE\Fundraising\PaymentContext\ResponseModel\IbanResponse;
10
use WMDE\Fundraising\PaymentContext\Tests\Data\ValidBankData;
11
use WMDE\Fundraising\PaymentContext\Tests\Fixtures\FailingIbanBlacklist;
12
use WMDE\Fundraising\PaymentContext\Tests\Fixtures\SucceedingIbanBlacklist;
13
use WMDE\Fundraising\PaymentContext\UseCases\GenerateIban\GenerateIbanRequest;
14
use WMDE\Fundraising\PaymentContext\UseCases\GenerateIban\GenerateIbanUseCase;
15
16
/**
17
 * @covers \WMDE\Fundraising\PaymentContext\UseCases\GenerateIban\GenerateIbanUseCase
18
 *
19
 * @licence GNU GPL v2+
20
 * @author Kai Nissen <[email protected]>
21
 */
22
class GenerateIbanUseCaseTest extends TestCase {
23
24
	private $bankDataGenerator;
25
	private $ibanBlacklist;
26
27
	public function setUp() {
28
		$this->bankDataGenerator = $this->newSucceedingBankDataGenerator();
29
		$this->ibanBlacklist = new SucceedingIbanBlacklist();
30
	}
31
32
	private function newSucceedingBankDataGenerator(): BankDataGenerator {
33
		$generator = $this->createMock( BankDataGenerator::class );
34
35
		$generator->method( $this->anything() )->willReturn( new ValidBankData() );
36
37
		return $generator;
38
	}
39
40
	private function newGenerateIbanUseCase(): GenerateIbanUseCase {
41
		return new GenerateIbanUseCase(
42
			$this->bankDataGenerator,
0 ignored issues
show
Bug introduced by
It seems like $this->bankDataGenerator can also be of type object<PHPUnit\Framework\MockObject\MockObject>; however, WMDE\Fundraising\Payment...nUseCase::__construct() does only seem to accept object<WMDE\Fundraising\...main\BankDataGenerator>, maybe add an additional type check?

If a method or function can return multiple different values and unless you are sure that you only can receive a single value in this context, we recommend to add an additional type check:

/**
 * @return array|string
 */
function returnsDifferentValues($x) {
    if ($x) {
        return 'foo';
    }

    return array();
}

$x = returnsDifferentValues($y);
if (is_array($x)) {
    // $x is an array.
}

If this a common case that PHP Analyzer should handle natively, please let us know by opening an issue.

Loading history...
43
			$this->ibanBlacklist
44
		);
45
	}
46
47
	public function testWhenValidBankAccountDataIsGiven_fullBankDataIsReturned(): void {
48
		$this->bankDataGenerator = $this->createMock( BankDataGenerator::class );
49
50
		$this->bankDataGenerator->expects( $this->once() )
51
			->method( 'getBankDataFromAccountData' )
52
			->with( $this->equalTo( '1015754243' ), $this->equalTo( '20050550' ) )
53
			->willReturn( new ValidBankData() );
54
55
		$useCase = $this->newGenerateIbanUseCase();
56
57
		$this->assertEquals(
58
			IbanResponse::newSuccessResponse( new ValidBankData() ),
59
			$useCase->generateIban( new GenerateIbanRequest( '1015754243', '20050550' ) )
60
		);
61
	}
62
63
	public function testWhenBankDataGeneratorThrowsException_failureResponseIsReturned(): void {
64
		$this->bankDataGenerator = $this->createMock( BankDataGenerator::class );
65
		$this->bankDataGenerator->method( $this->anything() )->willThrowException( new \RuntimeException() );
66
67
		$useCase = $this->newGenerateIbanUseCase();
68
69
		$this->assertEquals(
70
			IbanResponse::newFailureResponse(),
71
			$useCase->generateIban( new GenerateIbanRequest( '1015754241', '20050550' ) )
72
		);
73
	}
74
75
	public function testWhenBlockedBankAccountDataIsGiven_failureResponseIsReturned(): void {
76
		$this->ibanBlacklist = new FailingIbanBlacklist();
77
78
		$useCase = $this->newGenerateIbanUseCase();
79
80
		$this->assertEquals(
81
			IbanResponse::newFailureResponse(),
82
			$useCase->generateIban( new GenerateIbanRequest( '1194700', '10020500' ) )
83
		);
84
	}
85
}
86