public function createService(ServiceLocatorInterface $serviceLocator) { $dispatcher = new Dispatcher(); $config = $serviceLocator->get('Config'); $collectorName = $config['phpab']['analytics_collector']; if ($collectorName && $serviceLocator->has($collectorName)) { $dataCollector = $serviceLocator->get($collectorName); if (!$dataCollector instanceof SubscriberInterface) { throw new RuntimeException(sprintf('The data collector is not an instance of %s', SubscriberInterface::class)); } $dispatcher->addSubscriber($dataCollector); } return $dispatcher; }
public function testDispatchSubscriberNotAllDispatched() { // Arrange $callable = function ($subject) { $subject->touched++; }; $subscriber = $this->getMock(SubscriberInterface::class); $subscriber->method('getSubscribedEvents')->willReturn(['event.foo' => $callable, 'event.bar' => $callable]); $dispatcher = new Dispatcher(); $dispatcher->addSubscriber($subscriber); $subject = new \stdClass(); $subject->touched = 0; // Act $dispatcher->dispatch('event.foo', $subject); // Assert $this->assertEquals(1, $subject->touched); }
require_once __DIR__ . '/../vendor/autoload.php'; use PhpAb\Storage\Cookie; use PhpAb\Participation\Manager; use PhpAb\Analytics\DataCollector\Generic; use PhpAb\Event\Dispatcher; use PhpAb\Participation\Filter\Percentage; use PhpAb\Variant\Chooser\RandomChooser; use PhpAb\Variant\SimpleVariant; use PhpAb\Variant\CallbackVariant; use PhpAb\Engine\Engine; use PhpAb\Test\Test; $storage = new Cookie('phpab'); $manager = new Manager($storage); $analyticsData = new Generic(); $dispatcher = new Dispatcher(); $dispatcher->addSubscriber($analyticsData); $filter = new Percentage(50); $chooser = new RandomChooser(); $engine = new Engine($manager, $dispatcher, $filter, $chooser); $test = new Test('foo_test'); $test->addVariant(new SimpleVariant('_control')); $test->addVariant(new CallbackVariant('v1', function () { echo 'v1'; })); $test->addVariant(new CallbackVariant('v2', function () { echo 'v2'; })); $test->addVariant(new CallbackVariant('v3', function () { echo 'v3'; })); // Add some tests
/** * Testing that Engine picks previous test runs values */ public function testPreviousRunConsistencyInStorage() { // Arrange $storage = new Storage(new Runtime(['foo_test' => 'v1', 'bar_test' => '_control'])); $manager = new Manager($storage); $analyticsData = new Google(); $dispatcher = new Dispatcher(); $dispatcher->addSubscriber($analyticsData); $filter = new Percentage(5); $chooser = new RandomChooser(); $engine = new Engine($manager, $dispatcher, $filter, $chooser); $test = new Test('foo_test', [], [Google::EXPERIMENT_ID => 'EXPID1']); $test->addVariant(new SimpleVariant('_control')); $test->addVariant(new SimpleVariant('v1')); $test->addVariant(new SimpleVariant('v2')); $test2 = new Test('bar_test', [], [Google::EXPERIMENT_ID => 'EXPID2']); $test2->addVariant(new SimpleVariant('_control')); $test2->addVariant(new SimpleVariant('v1')); $engine->addTest($test); $engine->addTest($test2); $engine->start(); // Act $testData = $analyticsData->getTestsData(); // Assert $this->assertSame(['EXPID1' => 1, 'EXPID2' => 0], $testData); }