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;
 }
Exemple #2
0
 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
Exemple #4
0
 /**
  * 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);
 }