Skip to content

Commit 62889c5

Browse files
author
Alexander Obuhovich
committed
Merge pull request #50 from aik099/42-refactor-browserconfigurationfactory-createapiclient
Move creation of API clients to corresponding browser configurations
2 parents 4f04e4f + 4dff5b0 commit 62889c5

12 files changed

+134
-176
lines changed

library/aik099/PHPUnit/BrowserConfiguration/ApiBrowserConfiguration.php

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -39,26 +39,16 @@ abstract class ApiBrowserConfiguration extends BrowserConfiguration
3939
*/
4040
const NAME_CAPABILITY = 'name';
4141

42-
/**
43-
* Browser configuration factory.
44-
*
45-
* @var IBrowserConfigurationFactory
46-
*/
47-
protected $browserConfigurationFactory;
48-
4942
/**
5043
* Creates browser configuration.
5144
*
52-
* @param EventDispatcherInterface $event_dispatcher Event dispatcher.
53-
* @param DriverFactoryRegistry $driver_factory_registry Driver factory registry.
54-
* @param IBrowserConfigurationFactory $browser_configuration_factory Browser configuration factory.
45+
* @param EventDispatcherInterface $event_dispatcher Event dispatcher.
46+
* @param DriverFactoryRegistry $driver_factory_registry Driver factory registry.
5547
*/
5648
public function __construct(
5749
EventDispatcherInterface $event_dispatcher,
58-
DriverFactoryRegistry $driver_factory_registry,
59-
IBrowserConfigurationFactory $browser_configuration_factory
50+
DriverFactoryRegistry $driver_factory_registry
6051
) {
61-
$this->browserConfigurationFactory = $browser_configuration_factory;
6252
$this->defaults['driver'] = 'selenium2';
6353
$this->defaults['apiUsername'] = '';
6454
$this->defaults['apiKey'] = '';
@@ -225,10 +215,7 @@ public function onTestEnded(TestEndedEvent $event)
225215
*
226216
* @return IAPIClient
227217
*/
228-
public function getAPIClient()
229-
{
230-
return $this->browserConfigurationFactory->createAPIClient($this);
231-
}
218+
public abstract function getAPIClient();
232219

233220
/**
234221
* Get Selenium2 current session id.

library/aik099/PHPUnit/BrowserConfiguration/BrowserConfigurationFactory.php

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,7 @@
1111
namespace aik099\PHPUnit\BrowserConfiguration;
1212

1313

14-
use aik099\PHPUnit\APIClient\BrowserStackAPIClient;
15-
use aik099\PHPUnit\APIClient\IAPIClient;
16-
use aik099\PHPUnit\APIClient\SauceLabsAPIClient;
1714
use aik099\PHPUnit\BrowserTestCase;
18-
use WebDriver\SauceLabs\SauceRest;
19-
use WebDriver\ServiceFactory;
2015

2116
/**
2217
* Browser configuration factory.
@@ -90,30 +85,4 @@ protected function create($type)
9085
return clone $this->browserConfigurations[$type];
9186
}
9287

93-
/**
94-
* Creates API client.
95-
*
96-
* @param BrowserConfiguration $browser Browser configuration.
97-
*
98-
* @return IAPIClient
99-
* @throws \LogicException When unsupported browser configuration given.
100-
*/
101-
public function createAPIClient(BrowserConfiguration $browser)
102-
{
103-
if ( $browser instanceof SauceLabsBrowserConfiguration ) {
104-
$sauce_rest = new SauceRest($browser->getApiUsername(), $browser->getApiKey());
105-
106-
return new SauceLabsAPIClient($sauce_rest);
107-
}
108-
elseif ( $browser instanceof BrowserStackBrowserConfiguration ) {
109-
return new BrowserStackAPIClient(
110-
$browser->getApiUsername(),
111-
$browser->getApiKey(),
112-
ServiceFactory::getInstance()->getService('service.curl')
113-
);
114-
}
115-
116-
throw new \LogicException('Unsupported browser configuration given');
117-
}
118-
11988
}

library/aik099/PHPUnit/BrowserConfiguration/BrowserStackBrowserConfiguration.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@
1111
namespace aik099\PHPUnit\BrowserConfiguration;
1212

1313

14+
use aik099\PHPUnit\APIClient\BrowserStackAPIClient;
15+
use aik099\PHPUnit\APIClient\IAPIClient;
1416
use aik099\PHPUnit\Event\TestEvent;
17+
use WebDriver\ServiceFactory;
1518

1619
/**
1720
* Browser configuration tailored to use with "BrowserStack" service.
@@ -22,6 +25,20 @@ class BrowserStackBrowserConfiguration extends ApiBrowserConfiguration
2225
{
2326
const TYPE = 'browserstack';
2427

28+
/**
29+
* Returns API class for service interaction.
30+
*
31+
* @return IAPIClient
32+
*/
33+
public function getAPIClient()
34+
{
35+
return new BrowserStackAPIClient(
36+
$this->getApiUsername(),
37+
$this->getApiKey(),
38+
ServiceFactory::getInstance()->getService('service.curl')
39+
);
40+
}
41+
2542
/**
2643
* Hook, called from "BrowserTestCase::setUp" method.
2744
*

library/aik099/PHPUnit/BrowserConfiguration/IBrowserConfigurationFactory.php

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
namespace aik099\PHPUnit\BrowserConfiguration;
1212

1313

14-
use aik099\PHPUnit\APIClient\IAPIClient;
1514
use aik099\PHPUnit\BrowserTestCase;
1615

1716
/**
@@ -42,14 +41,4 @@ public function createBrowserConfiguration(array $config, BrowserTestCase $test_
4241
*/
4342
public function register(BrowserConfiguration $browser);
4443

45-
/**
46-
* Creates API client.
47-
*
48-
* @param BrowserConfiguration $browser Browser configuration.
49-
*
50-
* @return IAPIClient
51-
* @throws \LogicException When unsupported browser configuration given.
52-
*/
53-
public function createAPIClient(BrowserConfiguration $browser);
54-
5544
}

library/aik099/PHPUnit/BrowserConfiguration/SauceLabsBrowserConfiguration.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@
1111
namespace aik099\PHPUnit\BrowserConfiguration;
1212

1313

14+
use aik099\PHPUnit\APIClient\IAPIClient;
15+
use aik099\PHPUnit\APIClient\SauceLabsAPIClient;
1416
use aik099\PHPUnit\Event\TestEvent;
17+
use WebDriver\SauceLabs\SauceRest;
1518

1619
/**
1720
* Browser configuration tailored to use with "Sauce Labs" service.
@@ -22,6 +25,18 @@ class SauceLabsBrowserConfiguration extends ApiBrowserConfiguration
2225
{
2326
const TYPE = 'saucelabs';
2427

28+
/**
29+
* Returns API class for service interaction.
30+
*
31+
* @return IAPIClient
32+
*/
33+
public function getAPIClient()
34+
{
35+
$sauce_rest = new SauceRest($this->getApiUsername(), $this->getApiKey());
36+
37+
return new SauceLabsAPIClient($sauce_rest);
38+
}
39+
2540
/**
2641
* Hook, called from "BrowserTestCase::setUp" method.
2742
*

library/aik099/PHPUnit/DIContainer.php

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -143,18 +143,10 @@ public function __construct(array $values = array())
143143
new BrowserConfiguration($c['event_dispatcher'], $c['driver_factory_registry'])
144144
);
145145
$browser_configuration_factory->register(
146-
new SauceLabsBrowserConfiguration(
147-
$c['event_dispatcher'],
148-
$c['driver_factory_registry'],
149-
$browser_configuration_factory
150-
)
146+
new SauceLabsBrowserConfiguration($c['event_dispatcher'], $c['driver_factory_registry'])
151147
);
152148
$browser_configuration_factory->register(
153-
new BrowserStackBrowserConfiguration(
154-
$c['event_dispatcher'],
155-
$c['driver_factory_registry'],
156-
$browser_configuration_factory
157-
)
149+
new BrowserStackBrowserConfiguration($c['event_dispatcher'], $c['driver_factory_registry'])
158150
);
159151

160152
return $browser_configuration_factory;

tests/aik099/PHPUnit/BrowserConfiguration/ApiBrowserConfigurationTestCase.php

Lines changed: 27 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,11 @@
1111
namespace tests\aik099\PHPUnit\BrowserConfiguration;
1212

1313

14+
use aik099\PHPUnit\APIClient\IAPIClient;
1415
use aik099\PHPUnit\BrowserConfiguration\ApiBrowserConfiguration;
15-
use aik099\PHPUnit\BrowserConfiguration\IBrowserConfigurationFactory;
1616
use aik099\PHPUnit\Event\TestEndedEvent;
1717
use aik099\PHPUnit\Event\TestEvent;
1818
use aik099\PHPUnit\Session\ISessionStrategyFactory;
19-
use Mockery\MockInterface;
2019
use Symfony\Component\EventDispatcher\EventDispatcher;
2120
use aik099\PHPUnit\BrowserTestCase;
2221
use Mockery as m;
@@ -29,25 +28,18 @@ abstract class ApiBrowserConfigurationTestCase extends BrowserConfigurationTest
2928
const AUTOMATIC_TEST_NAME = 'AUTOMATIC';
3029

3130
/**
32-
* Browser configuration class.
33-
*
34-
* @var string
35-
*/
36-
protected $browserConfigurationClass = '';
37-
38-
/**
39-
* Browser configuration factory.
31+
* Desired capabilities use to configure the tunnel.
4032
*
41-
* @var IBrowserConfigurationFactory|MockInterface
33+
* @var array
4234
*/
43-
protected $browserConfigurationFactory;
35+
protected $tunnelCapabilities = array();
4436

4537
/**
46-
* Desired capabilities use to configure the tunnel.
38+
* API client.
4739
*
48-
* @var array
40+
* @var IAPIClient
4941
*/
50-
protected $tunnelCapabilities = array();
42+
protected $apiClient;
5143

5244
/**
5345
* Configures all tests.
@@ -60,9 +52,10 @@ protected function setUp()
6052
$this->testsRequireSubscriber[] = 'testTestEndedEvent';
6153
$this->testsRequireSubscriber[] = 'testTestEndedWithoutSession';
6254
$this->testsRequireSubscriber[] = 'testTunnelIdentifier';
63-
$this->browserConfigurationFactory = m::mock(
64-
'aik099\\PHPUnit\\BrowserConfiguration\\IBrowserConfigurationFactory'
65-
);
55+
56+
if ( $this->getName(false) === 'testTestEndedEvent' ) {
57+
$this->mockBrowserMethods[] = 'getAPIClient';
58+
}
6659

6760
parent::setUp();
6861

@@ -133,7 +126,9 @@ public function testSetAPICorrect()
133126
*/
134127
public function testSetHostCorrect()
135128
{
136-
$browser = $this->createBrowserConfiguration(array(), false, true);
129+
$browser = $this->createBrowserConfiguration();
130+
$browser->setApiUsername('A');
131+
$browser->setApiKey('B');
137132

138133
$this->assertSame($browser, $browser->setHost('EXAMPLE_HOST'));
139134
$this->assertSame('A:[email protected]', $browser->getHost());
@@ -146,7 +141,10 @@ public function testSetHostCorrect()
146141
*/
147142
public function testSetPortCorrect()
148143
{
149-
$browser = $this->createBrowserConfiguration(array(), false, true);
144+
$browser = $this->createBrowserConfiguration();
145+
$browser->setApiUsername('A');
146+
$browser->setApiKey('B');
147+
150148
$this->assertSame($browser, $browser->setPort(5555));
151149
$this->assertSame(80, $browser->getPort());
152150
}
@@ -158,7 +156,10 @@ public function testSetPortCorrect()
158156
*/
159157
public function testSetBrowserNameCorrect()
160158
{
161-
$browser = $this->createBrowserConfiguration(array(), false, true);
159+
$browser = $this->createBrowserConfiguration();
160+
$browser->setApiUsername('A');
161+
$browser->setApiKey('B');
162+
162163
$this->assertSame($browser, $browser->setBrowserName(''));
163164
$this->assertSame('chrome', $browser->getBrowserName());
164165
}
@@ -174,7 +175,10 @@ public function testSetBrowserNameCorrect()
174175
*/
175176
public function testSetDesiredCapabilitiesCorrect(array $desired_capabilities = null, array $expected = null)
176177
{
177-
$browser = $this->createBrowserConfiguration(array(), false, true);
178+
$browser = $this->createBrowserConfiguration();
179+
$browser->setApiUsername('A');
180+
$browser->setApiKey('B');
181+
178182
$this->assertSame($browser, $browser->setDesiredCapabilities($desired_capabilities));
179183
$this->assertSame($expected, $browser->getDesiredCapabilities());
180184
}
@@ -296,9 +300,7 @@ public function testTestEndedEvent($driver_type)
296300
$test_case = $this->createTestCase('TEST_NAME');
297301

298302
$api_client = m::mock('aik099\\PHPUnit\\APIClient\\IAPIClient');
299-
$this->browserConfigurationFactory->shouldReceive('createAPIClient')
300-
->with($this->browser)
301-
->andReturn($api_client);
303+
$this->browser->shouldReceive('getAPIClient')->andReturn($api_client);
302304

303305
if ( $driver_type == 'selenium' ) {
304306
$driver = m::mock('\\Behat\\Mink\\Driver\\Selenium2Driver');
@@ -471,33 +473,4 @@ public function tunnelIdentifierDataProvider()
471473
);
472474
}
473475

474-
/**
475-
* Creates instance of browser configuration.
476-
*
477-
* @param array $aliases Aliases.
478-
* @param boolean $add_subscriber Expect addition of subscriber to event dispatcher.
479-
* @param boolean $with_api Include test API configuration.
480-
*
481-
* @return ApiBrowserConfiguration
482-
*/
483-
protected function createBrowserConfiguration(array $aliases = array(), $add_subscriber = false, $with_api = false)
484-
{
485-
/** @var ApiBrowserConfiguration $browser */
486-
$browser = new $this->browserConfigurationClass(
487-
$this->eventDispatcher,
488-
$this->driverFactoryRegistry,
489-
$this->browserConfigurationFactory
490-
);
491-
$browser->setAliases($aliases);
492-
493-
$this->eventDispatcher->shouldReceive('addSubscriber')->with($browser)->times($add_subscriber ? 1 : 0);
494-
495-
if ( $with_api ) {
496-
$browser->setApiUsername('A');
497-
$browser->setApiKey('B');
498-
}
499-
500-
return $browser;
501-
}
502-
503476
}

tests/aik099/PHPUnit/BrowserConfiguration/BrowserConfigurationFactoryTest.php

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313

1414
use aik099\PHPUnit\BrowserConfiguration\BrowserConfiguration;
1515
use aik099\PHPUnit\BrowserConfiguration\BrowserConfigurationFactory;
16-
use aik099\PHPUnit\BrowserConfiguration\BrowserStackBrowserConfiguration;
17-
use aik099\PHPUnit\BrowserConfiguration\SauceLabsBrowserConfiguration;
1816
use aik099\PHPUnit\MinkDriver\DriverFactoryRegistry;
1917
use Mockery as m;
2018
use tests\aik099\PHPUnit\TestCase\EventDispatcherAwareTestCase;
@@ -149,42 +147,6 @@ public function testRegisterFailure()
149147
$this->_factory->register($browser_configuration);
150148
}
151149

152-
/**
153-
* Test description.
154-
*
155-
* @return void
156-
*/
157-
public function testCreateAPIClientSuccess()
158-
{
159-
$browser = new SauceLabsBrowserConfiguration(
160-
$this->eventDispatcher,
161-
$this->_driverFactoryRegistry,
162-
$this->_factory
163-
);
164-
$api_client = $this->_factory->createAPIClient($browser);
165-
$this->assertInstanceOf('aik099\\PHPUnit\\APIClient\\SauceLabsAPIClient', $api_client);
166-
167-
$browser = new BrowserStackBrowserConfiguration(
168-
$this->eventDispatcher,
169-
$this->_driverFactoryRegistry,
170-
$this->_factory
171-
);
172-
$api_client = $this->_factory->createAPIClient($browser);
173-
$this->assertInstanceOf('aik099\\PHPUnit\\APIClient\\BrowserStackAPIClient', $api_client);
174-
}
175-
176-
/**
177-
* Test description.
178-
*
179-
* @return void
180-
* @expectedException \LogicException
181-
*/
182-
public function testCreateAPIClientFailure()
183-
{
184-
$browser = new BrowserConfiguration($this->eventDispatcher, $this->_driverFactoryRegistry);
185-
$this->_factory->createAPIClient($browser);
186-
}
187-
188150
/**
189151
* Creates browser configuration.
190152
*

0 commit comments

Comments
 (0)