Skip to content

Commit f940f7f

Browse files
committed
Add unit tests for Screen and ScreenFactory classes
1 parent 8694f23 commit f940f7f

4 files changed

Lines changed: 238 additions & 3 deletions

File tree

tests/BundleInitializationTest.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Nyholm\BundleTest\TestKernel;
66
use SoureCode\Bundle\Screen\Factory\ScreenFactoryInterface;
7+
use SoureCode\Bundle\Screen\Manager\ScreenManager;
78
use SoureCode\Bundle\Screen\Provider\ScreenProviderInterface;
89
use SoureCode\Bundle\Screen\SoureCodeScreenBundle;
910
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
@@ -39,8 +40,8 @@ public function testInitBundle(): void
3940

4041
$this->assertTrue($container->has(ScreenFactoryInterface::class));
4142

42-
$provider = self::getContainer()->get('soure_code.screen.provider.chain');
43-
44-
$this->assertInstanceOf(ScreenProviderInterface::class, $provider);
43+
$this->assertInstanceOf(ScreenFactoryInterface::class, self::getContainer()->get('soure_code.screen.factory'));
44+
$this->assertInstanceOf(ScreenProviderInterface::class, self::getContainer()->get('soure_code.screen.provider.chain'));
45+
$this->assertInstanceOf(ScreenManager::class, self::getContainer()->get(ScreenManager::class));
4546
}
4647
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
namespace SoureCode\Bundle\Screen\Tests\Factory;
4+
5+
use SoureCode\Bundle\Screen\Factory\ScreenFactory;
6+
use SoureCode\Bundle\Screen\Model\Screen;
7+
use PHPUnit\Framework\TestCase;
8+
9+
class ScreenFactoryTest extends TestCase
10+
{
11+
public function testCreate(): void
12+
{
13+
// Arrange
14+
$expectedName = 'test_screen';
15+
$expectedCommand = ['ls', '-la'];
16+
$factory = new ScreenFactory(Screen::class);
17+
$config = ['command' => $expectedCommand];
18+
19+
// Act
20+
$actual = $factory->create($expectedName, $config);
21+
22+
// Assert
23+
$this->assertSame($expectedName, $actual->getName());
24+
$this->assertSame($expectedCommand, $actual->getCommand());
25+
}
26+
27+
public function testConstructor(): void
28+
{
29+
// Arrange
30+
$expectedClassName = Screen::class;
31+
32+
// Act
33+
$factory = new ScreenFactory($expectedClassName);
34+
35+
// Assert
36+
$reflection = new \ReflectionClass($factory);
37+
$property = $reflection->getProperty('screenClassName');
38+
$property->setAccessible(true);
39+
$actual = $property->getValue($factory);
40+
41+
$this->assertSame($expectedClassName, $actual);
42+
}
43+
}
44+

tests/Model/ScreenTest.php

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<?php
2+
3+
namespace SoureCode\Bundle\Screen\Tests\Model;
4+
5+
use SoureCode\Bundle\Screen\Model\Screen;
6+
use PHPUnit\Framework\TestCase;
7+
8+
class ScreenTest extends TestCase
9+
{
10+
11+
public function testConstructor(): void
12+
{
13+
// Arrange
14+
$expectedName = 'test_screen';
15+
$expectedCommand = ['ls', '-la'];
16+
17+
// Act
18+
$actual = new Screen($expectedName, $expectedCommand);
19+
20+
// Assert
21+
$this->assertSame($expectedName, $actual->getName());
22+
$this->assertSame($expectedCommand, $actual->getCommand());
23+
}
24+
25+
public function testSetName(): void
26+
{
27+
// Arrange
28+
$screen = new Screen('initial', ['echo', 'foo']);
29+
$expected = 'new_name';
30+
31+
// Act
32+
$screen->setName($expected);
33+
34+
// Assert
35+
$this->assertSame($expected, $screen->getName());
36+
}
37+
38+
public function testGetName(): void
39+
{
40+
// Arrange
41+
$expected = 'screen_name';
42+
$screen = new Screen($expected, ['cmd']);
43+
44+
// Act
45+
$actual = $screen->getName();
46+
47+
// Assert
48+
$this->assertSame($expected, $actual);
49+
}
50+
51+
public function testGetCommand(): void
52+
{
53+
// Arrange
54+
$expected = ['php', '-v'];
55+
$screen = new Screen('screen', $expected);
56+
57+
// Act
58+
$actual = $screen->getCommand();
59+
60+
// Assert
61+
$this->assertSame($expected, $actual);
62+
}
63+
64+
public function testSetCommand(): void
65+
{
66+
// Arrange
67+
$screen = new Screen('screen', ['foo']);
68+
$expected = ['bar', 'baz'];
69+
70+
// Act
71+
$screen->setCommand($expected);
72+
73+
// Assert
74+
$this->assertSame($expected, $screen->getCommand());
75+
}
76+
}
77+
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
<?php
2+
3+
namespace SoureCode\Bundle\Screen\Tests\Provider;
4+
5+
use SoureCode\Bundle\Screen\Provider\ConfigScreenProvider;
6+
use PHPUnit\Framework\TestCase;
7+
use SoureCode\Bundle\Screen\Factory\ScreenFactoryInterface;
8+
use SoureCode\Bundle\Screen\Model\ScreenInterface;
9+
10+
class ConfigScreenProviderTest extends TestCase
11+
{
12+
public function testConstructor(): void
13+
{
14+
// Arrange
15+
$screenFactory = $this->createMock(ScreenFactoryInterface::class);
16+
$screenConfigs = [
17+
'screen1' => ['command' => ['cmd1']],
18+
];
19+
20+
// Act
21+
$actual = new ConfigScreenProvider($screenFactory, $screenConfigs);
22+
23+
// Assert
24+
$this->assertInstanceOf(ConfigScreenProvider::class, $actual);
25+
}
26+
27+
public function testHas(): void
28+
{
29+
// Arrange
30+
$screenFactory = $this->createMock(ScreenFactoryInterface::class);
31+
$screenConfigs = [
32+
'screen1' => ['command' => ['cmd1']],
33+
];
34+
$provider = new ConfigScreenProvider($screenFactory, $screenConfigs);
35+
36+
// Act
37+
$actualTrue = $provider->has('screen1');
38+
$actualFalse = $provider->has('screen2');
39+
40+
// Assert
41+
$this->assertTrue($actualTrue);
42+
$this->assertFalse($actualFalse);
43+
}
44+
45+
public function testGet(): void
46+
{
47+
// Arrange
48+
$screenFactory = $this->createMock(ScreenFactoryInterface::class);
49+
$screenConfigs = [
50+
'screen1' => ['command' => ['cmd1']],
51+
];
52+
$expectedScreen = $this->createMock(ScreenInterface::class);
53+
$screenFactory->expects($this->once())
54+
->method('create')
55+
->with('screen1', $screenConfigs['screen1'])
56+
->willReturn($expectedScreen);
57+
58+
$provider = new ConfigScreenProvider($screenFactory, $screenConfigs);
59+
60+
// Act
61+
$actual = $provider->get('screen1');
62+
63+
// Assert
64+
$this->assertSame($expectedScreen, $actual);
65+
}
66+
67+
public function testGetThrowsExceptionForUnknownScreen(): void
68+
{
69+
// Arrange
70+
$screenFactory = $this->createMock(ScreenFactoryInterface::class);
71+
$screenConfigs = [];
72+
$provider = new ConfigScreenProvider($screenFactory, $screenConfigs);
73+
74+
// Assert
75+
$this->expectException(\InvalidArgumentException::class);
76+
77+
// Act
78+
$provider->get('unknown');
79+
}
80+
81+
public function testAll(): void
82+
{
83+
// Arrange
84+
$screenFactory = $this->createMock(ScreenFactoryInterface::class);
85+
$screenConfigs = [
86+
'screen1' => ['command' => ['cmd1']],
87+
'screen2' => ['command' => ['cmd2']],
88+
];
89+
$expectedScreen1 = $this->createMock(ScreenInterface::class);
90+
$expectedScreen2 = $this->createMock(ScreenInterface::class);
91+
92+
$screenFactory->expects($this->exactly(2))
93+
->method('create')
94+
->withConsecutive(
95+
['screen1', $screenConfigs['screen1']],
96+
['screen2', $screenConfigs['screen2']]
97+
)
98+
->willReturnOnConsecutiveCalls($expectedScreen1, $expectedScreen2);
99+
100+
$provider = new ConfigScreenProvider($screenFactory, $screenConfigs);
101+
102+
// Act
103+
$actual = $provider->all();
104+
105+
// Assert
106+
$expected = [
107+
'screen1' => $expectedScreen1,
108+
'screen2' => $expectedScreen2,
109+
];
110+
$this->assertSame($expected, $actual);
111+
}
112+
}
113+

0 commit comments

Comments
 (0)