Skip to content

Commit

Permalink
chore: add PHP 8.1 img check (#699)
Browse files Browse the repository at this point in the history
  • Loading branch information
damcou committed Jan 4, 2022
1 parent f3f88ae commit ed034da
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 161 deletions.
14 changes: 13 additions & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ jobs:
- run:
name: Check code styles
command: vendor/bin/php-cs-fixer fix -v --dry-run
command: PHP_CS_FIXER_IGNORE_ENV=1 vendor/bin/php-cs-fixer fix -v --dry-run

# Run tests with phpunit
#
Expand Down Expand Up @@ -110,6 +110,10 @@ jobs:
workflows:
workflow:
jobs:
- test:
name: 'Guzzle 7 - PHP 8.1'
version: "8.1"
http_client: guzzlehttp/guzzle:"^7.0"
- test:
name: 'Guzzle 7 - PHP 8.0'
version: "8.0"
Expand All @@ -118,6 +122,10 @@ workflows:
name: 'Guzzle 7 - PHP 7.4'
version: "7.4"
http_client: guzzlehttp/guzzle:"^7.0"
- test:
name: 'Guzzle 6 - PHP 8.1'
version: "8.1"
http_client: guzzlehttp/guzzle:"^6.0"
- test:
name: 'Guzzle 6 - PHP 8.0'
version: "8.0"
Expand All @@ -130,6 +138,10 @@ workflows:
name: 'Guzzle 6 - PHP 7.2'
version: "7.2"
http_client: guzzlehttp/guzzle:"^6.0"
- test:
name: 'Legacy client - PHP 8.1'
version: "8.1"
http_client: legacy
- test:
name: 'Legacy client - PHP 8.0'
version: "8.0"
Expand Down
249 changes: 89 additions & 160 deletions tests/Integration/AnalyticsClientTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,38 +3,67 @@
namespace Algolia\AlgoliaSearch\Tests\Integration;

use Algolia\AlgoliaSearch\AnalyticsClient;
use Algolia\AlgoliaSearch\SearchIndex;
use Algolia\AlgoliaSearch\Config\AnalyticsConfig;
use Algolia\AlgoliaSearch\Http\HttpClientInterface;
use Algolia\AlgoliaSearch\Http\Psr7\Response;
use Algolia\AlgoliaSearch\RetryStrategy\ApiWrapper;
use Algolia\AlgoliaSearch\RetryStrategy\ClusterHosts;
use Algolia\AlgoliaSearch\Tests\TestHelper;
use DateTime;
use Psr\Http\Message\RequestInterface;

class AnalyticsClientTest extends BaseTest
class AnalyticsClientTest extends BaseTest implements HttpClientInterface
{
public function testAbTesting()
/**
* @var RequestInterface[]
*/
private $recordedRequests = [];

protected function assertRequests(array $requests)
{
$this->indexes['ab_testing'] = TestHelper::getTestIndexName('ab_testing');
$this->indexes['ab_testing_dev'] = TestHelper::getTestIndexName('ab_testing_dev');
$this->assertGreaterThan(0, count($requests));
$this->assertEquals(count($requests), count($this->recordedRequests));

foreach ($requests as $i => $request) {
$recordedRequest = $this->recordedRequests[$i];

/** @var SearchIndex $index */
$index = TestHelper::getClient()->initIndex($this->indexes['ab_testing']);
$this->assertEquals($request['method'], $recordedRequest->getMethod());
$this->assertEquals($request['path'], $recordedRequest->getUri()->getPath());
$this->assertEquals($request['body'], $recordedRequest->getBody()->getContents());
}
}

/** @var SearchIndex $indexDev */
$indexDev = TestHelper::getClient()->initIndex($this->indexes['ab_testing_dev']);
protected function getClient()
{
$api = new ApiWrapper($this, AnalyticsConfig::create(), ClusterHosts::create('127.0.0.1'));
$config = AnalyticsConfig::create('foo', 'bar');

return new AnalyticsClient($api, $config);
}

$responses = [];
public function sendRequest(RequestInterface $request, $timeout, $connectTimeout)
{
$this->recordedRequests[] = $request;

$object = ['objectID' => 'one'];
return new Response(200, [], '{}');
}

$index->saveObject($object, ['autoGenerateObjectIDIfNotExist' => true])->wait();
$indexDev->saveObject($object, ['autoGenerateObjectIDIfNotExist' => true])->wait();
public function testAbTesting()
{
$this->indexes['ab_testing'] = TestHelper::getTestIndexName('ab_testing');
$this->indexes['ab_testing_dev'] = TestHelper::getTestIndexName('ab_testing_dev');
$this->indexes['aa_testing'] = TestHelper::getTestIndexName('aa_testing');

$dateTime = new DateTime('tomorrow');
$abTestName = $this->indexes['ab_testing'];
$aaTestName = $this->indexes['aa_testing'];
$date = $dateTime->format('Y-m-d\TH:i:s\Z');

$abTest = [
'name' => $abTestName,
'variants' => [
[
'index' => $this->indexes['ab_testing'],
'index' => $abTestName,
'trafficPercentage' => 60,
'description' => 'a description',
],
Expand All @@ -43,162 +72,62 @@ public function testAbTesting()
'trafficPercentage' => 40,
],
],
'endAt' => $dateTime->format('Y-m-d\TH:i:s\Z'),
'endAt' => $date,
];

$analyticsClient = AnalyticsClient::create(
getenv('ALGOLIA_APPLICATION_ID_1'),
getenv('ALGOLIA_ADMIN_KEY_1')
);

$cpt = 0;
do {
if ($cpt >= 10) {
break;
}
$index->exists() && $indexDev->exists();
sleep(1);
$cpt++;
} while (false);

$response = TestHelper::retry(function () use ($analyticsClient, $abTest) {
return $analyticsClient->addABTest($abTest);
}, 0.1, 40);

$abTestId = $response['abTestID'];
$index->waitTask($response['taskID']);

$result = $analyticsClient->getABTest($abTestId);

$this->assertSame($abTest['name'], $result['name']);
$this->assertSame($abTest['endAt'], $result['endAt']);
$this->assertSame($abTest['variants'][0]['index'], $result['variants'][0]['index']);
$this->assertSame($abTest['variants'][0]['trafficPercentage'], $result['variants'][0]['trafficPercentage']);
$this->assertSame($abTest['variants'][0]['description'], $result['variants'][0]['description']);
$this->assertSame($abTest['variants'][1]['index'], $result['variants'][1]['index']);
$this->assertSame($abTest['variants'][1]['trafficPercentage'], $result['variants'][1]['trafficPercentage']);
$this->assertNotEquals('stopped', $result['status']);

$results = $analyticsClient->getABTests();
$found = false;

foreach ($results['abtests'] as $fetchedAbTest) {
if ($fetchedAbTest['name'] != $abTest['name']) {
continue;
}
$this->assertSame($abTest['name'], $fetchedAbTest['name']);
$this->assertSame($abTest['endAt'], $fetchedAbTest['endAt']);
$this->assertSame($abTest['variants'][0]['index'], $fetchedAbTest['variants'][0]['index']);
$this->assertSame(
$abTest['variants'][0]['trafficPercentage'],
$fetchedAbTest['variants'][0]['trafficPercentage']
);
$this->assertSame($abTest['variants'][0]['description'], $fetchedAbTest['variants'][0]['description']);
$this->assertSame($abTest['variants'][1]['index'], $fetchedAbTest['variants'][1]['index']);
$this->assertSame(
$abTest['variants'][1]['trafficPercentage'],
$fetchedAbTest['variants'][1]['trafficPercentage']
);
$this->assertNotEquals('stopped', $fetchedAbTest['status']);
$found = true;
}

$this->assertTrue($found);

$response = $analyticsClient->stopABTest($abTestId);
$index->waitTask($response['taskID']);

$result = $analyticsClient->getABTest($abTestId);
$this->assertEquals('stopped', $result['status']);

$response = $analyticsClient->deleteABTest($abTestId);
$index->waitTask($response['taskID']);

try {
$result = $analyticsClient->getABTest($abTestId);
} catch (\Exception $e) {
$this->assertInstanceOf('Algolia\AlgoliaSearch\Exceptions\NotFoundException', $e);
$this->assertEquals(404, $e->getCode());
$this->assertEquals('ABTestID not found', $e->getMessage());
}
}

public function testAaTesting()
{
$this->indexes['aa_testing'] = TestHelper::getTestIndexName('aa_testing');

/** @var SearchIndex $index */
$index = TestHelper::getClient()->initIndex($this->indexes['aa_testing']);

$analyticsClient = AnalyticsClient::create(
getenv('ALGOLIA_APPLICATION_ID_1'),
getenv('ALGOLIA_ADMIN_KEY_1')
);

$object = ['objectID' => 'one'];
$res = $index->saveObject($object, ['autoGenerateObjectIDIfNotExist' => true])->wait();
$dateTime = new DateTime('tomorrow');
$abTestName = $this->indexes['aa_testing'];

$aaTest = [
'name' => $abTestName,
'name' => $aaTestName,
'variants' => [
['index' => $this->indexes['aa_testing'], 'trafficPercentage' => 90],
['index' => $aaTestName, 'trafficPercentage' => 90],
[
'index' => $this->indexes['aa_testing'],
'index' => $aaTestName,
'trafficPercentage' => 10,
'customSearchParameters' => ['ignorePlurals' => true],
],
],
'endAt' => $dateTime->format('Y-m-d\TH:i:s\Z'),
'endAt' => $date,
];

$cpt = 0;
do {
if ($cpt >= 10) {
break;
}
$index->exists();
sleep(1);
$cpt++;
} while (false);

$response = TestHelper::retry(function () use ($analyticsClient, $aaTest) {
return $analyticsClient->addABTest($aaTest);
}, 0.1, 40);

$aaTestId = $response['abTestID'];
TestHelper::getClient()->waitTask($this->indexes['aa_testing'], $response['taskID']);

$fetchedAbTest = $analyticsClient->getABTest($aaTestId);

$this->assertSame($aaTest['name'], $fetchedAbTest['name']);
$this->assertSame($aaTest['endAt'], $fetchedAbTest['endAt']);
$this->assertSame($aaTest['variants'][0]['index'], $fetchedAbTest['variants'][0]['index']);
$this->assertSame(
$aaTest['variants'][0]['trafficPercentage'],
$fetchedAbTest['variants'][0]['trafficPercentage']
);
$this->assertSame($aaTest['variants'][1]['index'], $fetchedAbTest['variants'][1]['index']);
$this->assertSame(
$aaTest['variants'][1]['trafficPercentage'],
$fetchedAbTest['variants'][1]['trafficPercentage']
);
$this->assertSame(
$aaTest['variants'][1]['customSearchParameters'],
$fetchedAbTest['variants'][1]['customSearchParameters']
);
$this->assertNotEquals('stopped', $fetchedAbTest['status']);

$response = $analyticsClient->deleteABTest($aaTestId);
$index->waitTask($response['taskID']);

try {
$result = $analyticsClient->getABTest($aaTestId);
} catch (\Exception $e) {
$this->assertInstanceOf('Algolia\AlgoliaSearch\Exceptions\NotFoundException', $e);
$this->assertEquals(404, $e->getCode());
$this->assertEquals('ABTestID not found', $e->getMessage());
}
$analyticsClient = $this->getClient();
// Test AB Testing format
$analyticsClient->addABTest($abTest);
// Test AA Testing format
$analyticsClient->addABTest($aaTest);

$abTestId = 'myAbTestID';
// Test Stop AB test
$analyticsClient->stopABTest($abTestId);
// Test get AB test
$analyticsClient->getABTest($abTestId);
// Test delete AB test
$analyticsClient->deleteABTest($abTestId);

$this->assertRequests([
[
'path' => '/2/abtests',
'method' => 'POST',
'body' => '{"name":"'.$abTestName.'","variants":[{"index":"'.$abTestName.'","trafficPercentage":60,"description":"a description"},{"index":"'.$this->indexes['ab_testing_dev'].'","trafficPercentage":40}],"endAt":"'.$date.'"}',
],
[
'path' => '/2/abtests',
'method' => 'POST',
'body' => '{"name":"'.$aaTestName.'","variants":[{"index":"'.$aaTestName.'","trafficPercentage":90},{"index":"'.$aaTestName.'","trafficPercentage":10,"customSearchParameters":{"ignorePlurals":true}}],"endAt":"'.$date.'"}',
],
[
'path' => '/2/abtests/myAbTestID/stop',
'method' => 'POST',
'body' => '',
],
[
'path' => '/2/abtests/myAbTestID',
'method' => 'GET',
'body' => '',
],
[
'path' => '/2/abtests/myAbTestID',
'method' => 'DELETE',
'body' => '',
],
]);
}
}

0 comments on commit ed034da

Please sign in to comment.