diff --git a/.github/workflows/CI_COVERAGE.yml b/.github/workflows/CI_COVERAGE.yml
index 2866c931..b8bb1f70 100644
--- a/.github/workflows/CI_COVERAGE.yml
+++ b/.github/workflows/CI_COVERAGE.yml
@@ -2,7 +2,7 @@ name: CI PHP 8
on:
push:
- branches: [ main]
+ branches: [ main, q2]
jobs:
build:
diff --git a/.github/workflows/CI_PHP_8.yml b/.github/workflows/CI_PHP_8.yml
index b9e2a82f..c689e009 100644
--- a/.github/workflows/CI_PHP_8.yml
+++ b/.github/workflows/CI_PHP_8.yml
@@ -2,7 +2,7 @@ name: CI PHP 8
on:
pull_request:
- branches: [ main ]
+ branches: [ main, q2 ]
jobs:
build:
diff --git a/.gitignore b/.gitignore
index 92a1729a..98d8c720 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,5 @@ bucketing.json
flagship
/src/Api/HIT_LOG
/.phpunit.cache
+demo-test.php
+docker-compose.demo.yml
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 2af03ac8..ce6abab7 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,3 +1,11 @@
{
- "php.version": "8.1"
-}
\ No newline at end of file
+ "php.version": "8.1",
+ "phpcs.executablePath": "./vendor/bin/phpcs",
+ "phpcs.standard": "PSR12",
+ "editor.formatOnSave": true,
+ "editor.codeActionsOnSave": {
+ "source.fixAll": "always"
+ },
+ "php-cs-fixer.executablePath": "./vendor/bin/php-cs-fixer",
+ "php-cs-fixer.onsave": true,
+}
diff --git a/composer.json b/composer.json
index cbbec3fc..a49799a4 100644
--- a/composer.json
+++ b/composer.json
@@ -33,6 +33,6 @@
"scripts": {
"test": "phpunit",
"check-style": "phpcs --standard=PSR12 -n src tests",
- "fix-style": "phpcbf --standard=PSR12 src tests"
+ "fix-style": "phpcbf --standard=phpcs.xml src tests"
}
}
diff --git a/composer.lock b/composer.lock
index b8a49bbb..c0719d09 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1741,16 +1741,16 @@
},
{
"name": "squizlabs/php_codesniffer",
- "version": "3.10.1",
+ "version": "3.10.2",
"source": {
"type": "git",
"url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
- "reference": "8f90f7a53ce271935282967f53d0894f8f1ff877"
+ "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/8f90f7a53ce271935282967f53d0894f8f1ff877",
- "reference": "8f90f7a53ce271935282967f53d0894f8f1ff877",
+ "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/86e5f5dd9a840c46810ebe5ff1885581c42a3017",
+ "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017",
"shasum": ""
},
"require": {
@@ -1817,7 +1817,7 @@
"type": "open_collective"
}
],
- "time": "2024-05-22T21:24:41+00:00"
+ "time": "2024-07-21T23:26:44+00:00"
},
{
"name": "theseer/tokenizer",
diff --git a/phpcs.xml b/phpcs.xml
new file mode 100644
index 00000000..f6d98641
--- /dev/null
+++ b/phpcs.xml
@@ -0,0 +1,62 @@
+
+
+ PHP CodeSniffer configuration for the Flagship SDK project.
+
+
+
+
+
+ src
+ tests
+
+
+ vendor
+
+
+
+ 5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Api/BatchingCachingStrategyAbstract.php b/src/Api/BatchingCachingStrategyAbstract.php
index e7ed794a..47ed18ee 100644
--- a/src/Api/BatchingCachingStrategyAbstract.php
+++ b/src/Api/BatchingCachingStrategyAbstract.php
@@ -164,10 +164,10 @@ public function hydrateActivatePoolQueue($key, Activate $hit): void
public function getActivateHeaders(): array
{
return [
- FlagshipConstant::HEADER_X_API_KEY => $this->config->getApiKey(),
+ FlagshipConstant::HEADER_X_API_KEY => $this->config->getApiKey(),
FlagshipConstant::HEADER_X_SDK_VERSION => FlagshipConstant::SDK_VERSION,
- FlagshipConstant::HEADER_CONTENT_TYPE => FlagshipConstant::HEADER_APPLICATION_JSON,
- FlagshipConstant::HEADER_X_SDK_CLIENT => FlagshipConstant::SDK_LANGUAGE,
+ FlagshipConstant::HEADER_CONTENT_TYPE => FlagshipConstant::HEADER_APPLICATION_JSON,
+ FlagshipConstant::HEADER_X_SDK_CLIENT => FlagshipConstant::SDK_LANGUAGE,
];
}
@@ -298,15 +298,9 @@ protected function onVisitorExposed(Activate $activate): void
}
}
- /**
- * @return void
- */
- protected function sendActivateHit(): void
+ protected function sendActivateHitBatch(ActivateBatch $activateBatch)
{
$headers = $this->getActivateHeaders();
-
- $activateBatch = new ActivateBatch($this->config, $this->activatePoolQueue);
-
$requestBody = $activateBatch->toApiKeys();
$url = FlagshipConstant::BASE_API_URL . '/' . FlagshipConstant::URL_ACTIVATE_MODIFICATION;
$now = $this->getNow();
@@ -323,7 +317,8 @@ protected function sendActivateHit(): void
FlagshipConstant::HIT_SENT_SUCCESS,
[
FlagshipConstant::SEND_ACTIVATE,
- $this->getLogFormat(null, $url, $requestBody, $headers, $this->getNow() - $now)]
+ $this->getLogFormat(null, $url, $requestBody, $headers, $this->getNow() - $now),
+ ]
);
$hitKeysToRemove = [];
@@ -342,30 +337,53 @@ protected function sendActivateHit(): void
$this->cacheHit($this->activatePoolQueue);
$troubleshooting = new Troubleshooting();
$troubleshooting->setLabel(TroubleshootingLabel::SEND_ACTIVATE_HIT_ROUTE_ERROR)
- ->setLogLevel(LogLevel::ERROR)
- ->setVisitorId($this->flagshipInstanceId)
- ->setFlagshipInstanceId($this->flagshipInstanceId)
- ->setTraffic(100)
- ->setConfig($this->config)
->setHttpRequestBody($requestBody)
->setHttpRequestHeaders($headers)
->setHttpRequestMethod("POST")
->setHttpRequestUrl($url)
->setHttpResponseBody($exception->getMessage())
->setHttpResponseTime($this->getNow() - $now)
- ;
+ ->setFlagshipInstanceId($this->flagshipInstanceId)
+ ->setLogLevel(LogLevel::ERROR)
+ ->setTraffic(100)->setConfig($this->config)
+ ->setVisitorId($this->flagshipInstanceId);
+
$this->addTroubleshootingHit($troubleshooting);
$this->sendTroubleshootingQueue();
$this->logErrorSprintf(
$this->config,
FlagshipConstant::TRACKING_MANAGER,
FlagshipConstant::UNEXPECTED_ERROR_OCCURRED,
- [FlagshipConstant::SEND_ACTIVATE,
- $this->getLogFormat($exception->getMessage(), $url, $requestBody, $headers, $this->getNow() - $now)]
+ [
+ FlagshipConstant::SEND_ACTIVATE,
+ $this->getLogFormat($exception->getMessage(), $url, $requestBody, $headers, $this->getNow() - $now),
+ ]
);
}
}
+ /**
+ * @return void
+ */
+ protected function sendActivateHit(): void
+ {
+ $filteredItems = array_filter($this->activatePoolQueue, function ($item) {
+ return $this->getNow() - $item->getCreatedAt() < FlagshipConstant::DEFAULT_HIT_CACHE_TIME_MS;
+ });
+
+
+ if (empty($filteredItems)) {
+ return;
+ }
+
+ $batches = array_chunk($filteredItems, FlagshipConstant::MAX_ACTIVATE_HIT_PER_BATCH);
+
+ foreach ($batches as $batch) {
+ $activateBatch = new ActivateBatch($this->config, $batch);
+ $this->sendActivateHitBatch($activateBatch);
+ }
+ }
+
/**
* @param string $visitorId
* @return string []
@@ -440,7 +458,7 @@ public function sendBatch(): void
}
$header = [
- FlagshipConstant::HEADER_CONTENT_TYPE => FlagshipConstant::HEADER_APPLICATION_JSON
+ FlagshipConstant::HEADER_CONTENT_TYPE => FlagshipConstant::HEADER_APPLICATION_JSON,
];
$requestBody = $batchHit->toApiKeys();
@@ -458,7 +476,8 @@ public function sendBatch(): void
FlagshipConstant::HIT_SENT_SUCCESS,
[
FlagshipConstant::SEND_BATCH,
- $this->getLogFormat(null, $url, $requestBody, $header, $this->getNow() - $now)]
+ $this->getLogFormat(null, $url, $requestBody, $header, $this->getNow() - $now),
+ ]
);
$this->hitsPoolQueue = [];
@@ -470,25 +489,25 @@ public function sendBatch(): void
$troubleshooting = new Troubleshooting();
$troubleshooting->setLabel(TroubleshootingLabel::SEND_BATCH_HIT_ROUTE_RESPONSE_ERROR)
->setLogLevel(LogLevel::ERROR)
- ->setVisitorId($this->flagshipInstanceId)
->setFlagshipInstanceId($this->flagshipInstanceId)
- ->setTraffic(100)
- ->setConfig($this->config)
->setHttpRequestBody($requestBody)
->setHttpRequestHeaders($header)
->setHttpRequestMethod("POST")
->setHttpRequestUrl($url)
->setHttpResponseBody($exception->getMessage())
->setHttpResponseTime($this->getNow() - $now)
- ;
+ ->setTraffic(100)->setConfig($this->config)
+ ->setVisitorId($this->flagshipInstanceId);
$this->addTroubleshootingHit($troubleshooting);
$this->sendTroubleshootingQueue();
$this->logErrorSprintf(
$this->config,
FlagshipConstant::TRACKING_MANAGER,
FlagshipConstant::UNEXPECTED_ERROR_OCCURRED,
- [FlagshipConstant::SEND_BATCH,
- $this->getLogFormat($exception->getMessage(), $url, $requestBody, $header, $this->getNow() - $now)]
+ [
+ FlagshipConstant::SEND_BATCH,
+ $this->getLogFormat($exception->getMessage(), $url, $requestBody, $header, $this->getNow() - $now),
+ ]
);
}
}
@@ -510,13 +529,13 @@ public function cacheHit(array $hits): void
foreach ($hits as $hit) {
$hitData = [
HitCacheFields::VERSION => 1,
- HitCacheFields::DATA => [
- HitCacheFields::VISITOR_ID => $hit->getVisitorId(),
+ HitCacheFields::DATA => [
+ HitCacheFields::VISITOR_ID => $hit->getVisitorId(),
HitCacheFields::ANONYMOUS_ID => $hit->getAnonymousId(),
- HitCacheFields::TYPE => $hit->getType(),
- HitCacheFields::CONTENT => $hit->toArray(),
- HitCacheFields::TIME => $this->getNow()
- ]
+ HitCacheFields::TYPE => $hit->getType(),
+ HitCacheFields::CONTENT => $hit->toArray(),
+ HitCacheFields::TIME => $this->getNow(),
+ ],
];
$data[$hit->getKey()] = $hitData;
@@ -535,7 +554,10 @@ public function cacheHit(array $hits): void
$this->config,
FlagshipConstant::PROCESS_CACHE,
FlagshipConstant::HIT_CACHE_ERROR,
- ["cacheHit", $exception->getMessage()]
+ [
+ "cacheHit",
+ $exception->getMessage(),
+ ]
);
}
}
@@ -564,7 +586,10 @@ public function flushHits(array $hitKeys): void
$this->config,
FlagshipConstant::PROCESS_CACHE,
FlagshipConstant::HIT_CACHE_ERROR,
- ["flushHits", $exception->getMessage()]
+ [
+ "flushHits",
+ $exception->getMessage(),
+ ]
);
}
}
@@ -586,7 +611,10 @@ public function flushAllHits(): void
$this->config,
FlagshipConstant::PROCESS_CACHE,
FlagshipConstant::HIT_CACHE_ERROR,
- ["flushAllHits", $exception->getMessage()]
+ [
+ "flushAllHits",
+ $exception->getMessage(),
+ ]
);
}
}
@@ -656,8 +684,10 @@ protected function sendTroubleshooting(Troubleshooting $hit): void
$this->config,
FlagshipConstant::SEND_TROUBLESHOOTING,
FlagshipConstant::UNEXPECTED_ERROR_OCCURRED,
- [FlagshipConstant::SEND_TROUBLESHOOTING,
- $this->getLogFormat($exception->getMessage(), $url, $requestBody, [], $this->getNow() - $now)]
+ [
+ FlagshipConstant::SEND_TROUBLESHOOTING,
+ $this->getLogFormat($exception->getMessage(), $url, $requestBody, [], $this->getNow() - $now),
+ ]
);
}
}
@@ -703,8 +733,10 @@ public function sendUsageHit(UsageHit $hit): void
$this->config,
FlagshipConstant::SEND_USAGE_HIT,
FlagshipConstant::UNEXPECTED_ERROR_OCCURRED,
- [FlagshipConstant::SEND_USAGE_HIT,
- $this->getLogFormat($exception->getMessage(), $url, $requestBody, [], $this->getNow() - $now)]
+ [
+ FlagshipConstant::SEND_USAGE_HIT,
+ $this->getLogFormat($exception->getMessage(), $url, $requestBody, [], $this->getNow() - $now),
+ ]
);
}
}
diff --git a/src/Api/NoBatchingContinuousCachingStrategy.php b/src/Api/NoBatchingContinuousCachingStrategy.php
index 6ee3e1c1..2eec3226 100644
--- a/src/Api/NoBatchingContinuousCachingStrategy.php
+++ b/src/Api/NoBatchingContinuousCachingStrategy.php
@@ -51,8 +51,8 @@ protected function onError(HitAbstract $hit): void
protected function sendHit(HitAbstract $hit): void
{
$header = [
- FlagshipConstant::HEADER_CONTENT_TYPE => FlagshipConstant::HEADER_APPLICATION_JSON
- ];
+ FlagshipConstant::HEADER_CONTENT_TYPE => FlagshipConstant::HEADER_APPLICATION_JSON,
+ ];
$requestBody = $hit->toApiKeys();
$now = $this->getNow();
@@ -68,8 +68,9 @@ protected function sendHit(HitAbstract $hit): void
FlagshipConstant::TRACKING_MANAGER,
FlagshipConstant::HIT_SENT_SUCCESS,
[
- FlagshipConstant::SEND_HIT,
- $this->getLogFormat(null, $url, $requestBody, $header, $this->getNow() - $now)]
+ FlagshipConstant::SEND_HIT,
+ $this->getLogFormat(null, $url, $requestBody, $header, $this->getNow() - $now),
+ ]
);
} catch (Exception $exception) {
$this->onError($hit);
@@ -77,23 +78,13 @@ protected function sendHit(HitAbstract $hit): void
$this->config,
FlagshipConstant::TRACKING_MANAGER,
FlagshipConstant::UNEXPECTED_ERROR_OCCURRED,
- [FlagshipConstant::SEND_HIT,
- $this->getLogFormat($exception->getMessage(), $url, $requestBody, $header, $this->getNow() - $now)]
+ [
+ FlagshipConstant::SEND_HIT,
+ $this->getLogFormat($exception->getMessage(), $url, $requestBody, $header, $this->getNow() - $now),
+ ]
);
$troubleshooting = new Troubleshooting();
- $troubleshooting->setLabel(TroubleshootingLabel::SEND_HIT_ROUTE_ERROR)
- ->setLogLevel(LogLevel::ERROR)
- ->setVisitorId($this->flagshipInstanceId)
- ->setFlagshipInstanceId($this->flagshipInstanceId)
- ->setTraffic(100)
- ->setConfig($this->config)
- ->setHttpRequestBody($requestBody)
- ->setHttpRequestHeaders($header)
- ->setHttpRequestMethod("POST")
- ->setHttpRequestUrl($url)
- ->setHttpResponseBody($exception->getMessage())
- ->setHttpResponseTime($this->getNow() - $now)
- ;
+ $troubleshooting->setLabel(TroubleshootingLabel::SEND_HIT_ROUTE_ERROR)->setLogLevel(LogLevel::ERROR)->setVisitorId($this->flagshipInstanceId)->setFlagshipInstanceId($this->flagshipInstanceId)->setTraffic(100)->setConfig($this->config)->setHttpRequestBody($requestBody)->setHttpRequestHeaders($header)->setHttpRequestMethod("POST")->setHttpRequestUrl($url)->setHttpResponseBody($exception->getMessage())->setHttpResponseTime($this->getNow() - $now);
$this->addTroubleshootingHit($troubleshooting);
$this->sendTroubleshootingQueue();
}
@@ -126,8 +117,9 @@ public function activateFlag(Activate $hit): void
FlagshipConstant::TRACKING_MANAGER,
FlagshipConstant::HIT_SENT_SUCCESS,
[
- FlagshipConstant::SEND_ACTIVATE,
- $this->getLogFormat(null, $url, $requestBody, $headers, $this->getNow() - $now)]
+ FlagshipConstant::SEND_ACTIVATE,
+ $this->getLogFormat(null, $url, $requestBody, $headers, $this->getNow() - $now),
+ ]
);
} catch (Exception $exception) {
$this->onError($hit);
@@ -135,24 +127,14 @@ public function activateFlag(Activate $hit): void
$this->config,
FlagshipConstant::TRACKING_MANAGER,
FlagshipConstant::UNEXPECTED_ERROR_OCCURRED,
- [FlagshipConstant::SEND_ACTIVATE,
- $this->getLogFormat($exception->getMessage(), $url, $requestBody, $headers, $this->getNow() - $now)]
+ [
+ FlagshipConstant::SEND_ACTIVATE,
+ $this->getLogFormat($exception->getMessage(), $url, $requestBody, $headers, $this->getNow() - $now),
+ ]
);
$troubleshooting = new Troubleshooting();
- $troubleshooting->setLabel(TroubleshootingLabel::SEND_ACTIVATE_HIT_ROUTE_ERROR)
- ->setLogLevel(LogLevel::ERROR)
- ->setVisitorId($this->flagshipInstanceId)
- ->setFlagshipInstanceId($this->flagshipInstanceId)
- ->setTraffic(100)
- ->setConfig($this->config)
- ->setHttpRequestBody($requestBody)
- ->setHttpRequestHeaders($headers)
- ->setHttpRequestMethod("POST")
- ->setHttpRequestUrl($url)
- ->setHttpResponseBody($exception->getMessage())
- ->setHttpResponseTime($this->getNow() - $now)
- ;
+ $troubleshooting->setLabel(TroubleshootingLabel::SEND_ACTIVATE_HIT_ROUTE_ERROR)->setLogLevel(LogLevel::ERROR)->setVisitorId($this->flagshipInstanceId)->setFlagshipInstanceId($this->flagshipInstanceId)->setTraffic(100)->setConfig($this->config)->setHttpRequestBody($requestBody)->setHttpRequestHeaders($headers)->setHttpRequestMethod("POST")->setHttpRequestUrl($url)->setHttpResponseBody($exception->getMessage())->setHttpResponseTime($this->getNow() - $now);
$this->addTroubleshootingHit($troubleshooting);
$this->sendTroubleshootingQueue();
}
diff --git a/src/Api/TrackingManagerAbstract.php b/src/Api/TrackingManagerAbstract.php
index e15a080a..c8385cc3 100644
--- a/src/Api/TrackingManagerAbstract.php
+++ b/src/Api/TrackingManagerAbstract.php
@@ -219,7 +219,10 @@ public function lookupHits(): void
$this->config,
FlagshipConstant::PROCESS_CACHE,
FlagshipConstant::HIT_CACHE_ERROR,
- ["lookupHits", $exception->getMessage()]
+ [
+ "lookupHits",
+ $exception->getMessage(),
+ ]
);
}
}
diff --git a/src/Config/FlagshipConfig.php b/src/Config/FlagshipConfig.php
index 43b89356..1242b85f 100644
--- a/src/Config/FlagshipConfig.php
+++ b/src/Config/FlagshipConfig.php
@@ -48,7 +48,7 @@ abstract class FlagshipConfig implements JsonSerializable
/**
* @var LogLevel
*/
- private LogLevel $logLevel = LogLevel::ALL;
+ private LogLevel $logLevel = LogLevel::INFO;
/**
* @var (callable(FSSdkStatus $status): void) | null
@@ -86,7 +86,7 @@ abstract class FlagshipConfig implements JsonSerializable
* @param string|null $envId Environment id provided by Flagship.
* @param string|null $apiKey Secure api key provided by Flagship.
*/
- public function __construct(string $envId = null, string $apiKey = null)
+ public function __construct(string|null $envId = null, string|null $apiKey = null)
{
$this->envId = $envId;
$this->apiKey = $apiKey;
@@ -335,11 +335,11 @@ public function setDisableDeveloperUsageTracking(bool $disableDeveloperUsageTrac
public function jsonSerialize(): mixed
{
return [
- FlagshipField::FIELD_ENVIRONMENT_ID => $this->getEnvId(),
- FlagshipField::FIELD_API_KEY => $this->getApiKey(),
- FlagshipField::FIELD_TIMEOUT => $this->getTimeout(),
- FlagshipField::FIELD_LOG_LEVEL => $this->getLogLevel()
- ];
+ FlagshipField::FIELD_ENVIRONMENT_ID => $this->getEnvId(),
+ FlagshipField::FIELD_API_KEY => $this->getApiKey(),
+ FlagshipField::FIELD_TIMEOUT => $this->getTimeout(),
+ FlagshipField::FIELD_LOG_LEVEL => $this->getLogLevel(),
+ ];
}
public static function bucketing(string $bucketingUrl): BucketingConfig
diff --git a/src/Decision/ApiManager.php b/src/Decision/ApiManager.php
index 0d392267..50dc6255 100644
--- a/src/Decision/ApiManager.php
+++ b/src/Decision/ApiManager.php
@@ -40,22 +40,19 @@ protected function setTroubleshootingData(?array $body): void
$startDate = new DateTime($troubleshooting[FlagshipField::START_DATE]);
$endDate = new DateTime($troubleshooting[FlagshipField::END_DATE]);
$troubleshootingData = new TroubleshootingData();
- $troubleshootingData->setStartDate($startDate)
- ->setEndDate($endDate)
- ->setTimezone($troubleshooting[FlagshipField::TIMEZONE])
- ->setTraffic($troubleshooting[FlagshipField::TRAFFIC]);
+ $troubleshootingData->setStartDate($startDate)->setEndDate($endDate)->setTimezone($troubleshooting[FlagshipField::TIMEZONE])->setTraffic($troubleshooting[FlagshipField::TRAFFIC]);
$this->troubleshootingData = $troubleshootingData;
}
public function getCampaigns(VisitorAbstract $visitor): array|null
{
$postData = [
- "visitorId" => $visitor->getVisitorId(),
- "anonymousId" => $visitor->getAnonymousId(),
- "trigger_hit" => false,
- "context" => count($visitor->getContext()) > 0 ? $visitor->getContext() : null,
- "visitor_consent" => $visitor->hasConsented()
- ];
+ "visitorId" => $visitor->getVisitorId(),
+ "anonymousId" => $visitor->getAnonymousId(),
+ "trigger_hit" => false,
+ "context" => count($visitor->getContext()) > 0 ? $visitor->getContext() : null,
+ "visitor_consent" => $visitor->hasConsented(),
+ ];
$headers = $this->buildHeader($this->getConfig()->getApiKey());
$url = $this->buildDecisionApiUrl($this->getConfig()->getEnvId() . '/' .
FlagshipConstant::URL_CAMPAIGNS . '?' .
@@ -76,26 +73,10 @@ public function getCampaigns(VisitorAbstract $visitor): array|null
return $body[FlagshipField::FIELD_CAMPAIGNS] ?? null;
} catch (Exception $exception) {
$visitor->setFetchStatus(new FetchFlagsStatus(FSFetchStatus::FETCH_REQUIRED, FSFetchReason::FETCH_ERROR));
- $this->logError($this->getConfig(), $exception->getMessage(), [
- FlagshipConstant::TAG => __FUNCTION__
- ]);
+ $this->logError($this->getConfig(), $exception->getMessage(), [FlagshipConstant::TAG => __FUNCTION__]);
$troubleshooting = new Troubleshooting();
- $troubleshooting->setLabel(TroubleshootingLabel::GET_CAMPAIGNS_ROUTE_RESPONSE_ERROR)
- ->setHttpRequestBody($postData)
- ->setHttpRequestHeaders($headers)
- ->setHttpRequestMethod("POST")
- ->setHttpRequestUrl($url)
- ->setHttpResponseBody($exception->getMessage())
- ->setHttpResponseTime($this->getNow() - $now)
- ->setVisitorContext($visitor->getContext())
- ->setLogLevel(LogLevel::ERROR)
- ->setVisitorSessionId($visitor->getInstanceId())
- ->setFlagshipInstanceId($visitor->getFlagshipInstanceId())
- ->setTraffic(100)
- ->setConfig($this->getConfig())
- ->setVisitorId($visitor->getVisitorId())
- ->setAnonymousId($visitor->getAnonymousId());
+ $troubleshooting->setLabel(TroubleshootingLabel::GET_CAMPAIGNS_ROUTE_RESPONSE_ERROR)->setHttpRequestBody($postData)->setHttpRequestHeaders($headers)->setHttpRequestMethod("POST")->setHttpRequestUrl($url)->setHttpResponseBody($exception->getMessage())->setHttpResponseTime($this->getNow() - $now)->setVisitorContext($visitor->getContext())->setLogLevel(LogLevel::ERROR)->setVisitorSessionId($visitor->getInstanceId())->setFlagshipInstanceId($visitor->getFlagshipInstanceId())->setTraffic(100)->setConfig($this->getConfig())->setVisitorId($visitor->getVisitorId())->setAnonymousId($visitor->getAnonymousId());
$visitor->sendTroubleshootingHit($troubleshooting);
return null;
}
diff --git a/src/Decision/BucketingManager.php b/src/Decision/BucketingManager.php
index 06c9f108..3f366579 100644
--- a/src/Decision/BucketingManager.php
+++ b/src/Decision/BucketingManager.php
@@ -77,10 +77,12 @@ public function __construct(HttpClientInterface $httpClient, BucketingConfig $co
*/
protected function sendContext(VisitorAbstract $visitor): void
{
- if (count($visitor->getContext()) <= self::NB_MIN_CONTEXT_KEYS || !$visitor->hasConsented()) {
+ if (count($visitor->getContext()) <= self::NB_MIN_CONTEXT_KEYS || !$visitor->hasConsented()|| !$visitor->getHasContextBeenUpdated()) {
return;
}
+ $visitor->setHasContextBeenUpdated(false);
+
$segmentHit = new Segment($visitor->getContext());
$visitor->sendHit($segmentHit);
}
@@ -92,14 +94,14 @@ protected function sendContext(VisitorAbstract $visitor): void
protected function getThirdPartySegment(string $visitorId): array
{
$url = sprintf(FlagshipConstant::THIRD_PARTY_SEGMENT_URL, $this->getConfig()->getEnvId(), $visitorId);
- $now = $this->getNow();
+ $now = $this->getNow();
$context = [];
try {
$response = $this->httpClient->get($url);
$content = $response->getBody();
foreach ($content as $item) {
$key = $item[self::PARTNER] . "::" . $item[self::SEGMENT];
- $context[$key] = $item[self::VALUE];
+ $context[$key] = $item[self::VALUE];
}
$this->logDebugSprintf(
$this->config,
@@ -116,20 +118,24 @@ protected function getThirdPartySegment(string $visitorId): array
$response->getHeaders(),
$response->getBody(),
$response->getStatusCode()
- )]
+ )
+ ]
);
} catch (Exception $exception) {
$this->logErrorSprintf(
$this->getConfig(),
self::GET_THIRD_PARTY_SEGMENT,
FlagshipConstant::UNEXPECTED_ERROR_OCCURRED,
- [self::THIRD_PARTY_SEGMENT, $this->getLogFormat(
- $exception->getMessage(),
- $url,
- [],
- [],
- $this->getNow() - $now
- )]
+ [
+ self::THIRD_PARTY_SEGMENT,
+ $this->getLogFormat(
+ $exception->getMessage(),
+ $url,
+ [],
+ [],
+ $this->getNow() - $now
+ ),
+ ]
);
}
return $context;
@@ -152,33 +158,31 @@ protected function getBucketingFile(): mixed
$troubleshooting = new Troubleshooting();
$troubleshooting->setLabel(TroubleshootingLabel::SDK_BUCKETING_FILE)
->setFlagshipInstanceId($this->getFlagshipInstanceId())
- ->setVisitorId($this->getFlagshipInstanceId())
->setTraffic(0)
->setLogLevel(LogLevel::INFO)
- ->setConfig($this->getConfig())
->setHttpRequestMethod("GET")
->setHttpRequestUrl($url)
->setHttpResponseBody($response->getBody())
->setHttpResponseHeaders($response->getHeaders())
->setHttpResponseCode($response->getStatusCode())
- ->setHttpResponseTime($this->getNow() - $now);
+ ->setHttpResponseTime($this->getNow() - $now)
+ ->setVisitorId($this->getFlagshipInstanceId())
+ ->setConfig($this->getConfig());
$this->troubleshootingHit = $troubleshooting;
return $response->getBody();
} catch (Exception $exception) {
- $this->logError($this->getConfig(), $exception->getMessage(), [
- FlagshipConstant::TAG => __FUNCTION__
- ]);
+ $this->logError($this->getConfig(), $exception->getMessage(), [FlagshipConstant::TAG => __FUNCTION__]);
$troubleshooting = new Troubleshooting();
$troubleshooting->setLabel(TroubleshootingLabel::SDK_BUCKETING_FILE_ERROR)
->setFlagshipInstanceId($this->getFlagshipInstanceId())
- ->setVisitorId($this->getFlagshipInstanceId())
- ->setTraffic(0)
- ->setLogLevel(LogLevel::ERROR)
- ->setConfig($this->getConfig())
->setHttpRequestMethod("GET")
->setHttpRequestUrl($url)
->setHttpResponseBody($exception->getMessage())
- ->setHttpResponseTime($this->getNow() - $now);
+ ->setHttpResponseTime($this->getNow() - $now)
+ ->setTraffic(0)
+ ->setLogLevel(LogLevel::ERROR)
+ ->setConfig($this->getConfig())
+ ->setVisitorId($this->getFlagshipInstanceId());
$this->troubleshootingHit = $troubleshooting;
}
return null;
@@ -285,14 +289,14 @@ private function getVisitorCampaigns(
$visitor
);
$visitorCampaigns[] = [
- FlagshipField::FIELD_ID => $campaignId,
- FlagshipField::FIELD_NANE => $campaignName,
- FlagshipField::FIELD_SLUG => $slug,
- FlagshipField::FIELD_VARIATION_GROUP_ID => $variationGroup[FlagshipField::FIELD_ID],
- FlagshipField::FIELD_VARIATION_GROUP_NAME => $variationGroup[FlagshipField::FIELD_NANE] ?? null,
- FlagshipField::FIELD_VARIATION => $variations,
- FlagshipField::FIELD_CAMPAIGN_TYPE => $campaignType
- ];
+ FlagshipField::FIELD_ID => $campaignId,
+ FlagshipField::FIELD_NANE => $campaignName,
+ FlagshipField::FIELD_SLUG => $slug,
+ FlagshipField::FIELD_VARIATION_GROUP_ID => $variationGroup[FlagshipField::FIELD_ID],
+ FlagshipField::FIELD_VARIATION_GROUP_NAME => $variationGroup[FlagshipField::FIELD_NANE] ?? null,
+ FlagshipField::FIELD_VARIATION => $variations,
+ FlagshipField::FIELD_CAMPAIGN_TYPE => $campaignType,
+ ];
break;
}
}
@@ -306,8 +310,7 @@ private function getVisitorCampaigns(
*/
private function getVisitorAssignmentsHistory(string $variationGroupId, VisitorAbstract $visitor): mixed
{
- return $visitor->visitorCache[StrategyAbstract::DATA]
- [StrategyAbstract::ASSIGNMENTS_HISTORY][$variationGroupId] ?? null;
+ return $visitor->visitorCache[StrategyAbstract::DATA][StrategyAbstract::ASSIGNMENTS_HISTORY][$variationGroupId] ?? null;
}
private function findVariationById(array $variations, $key)
@@ -342,28 +345,33 @@ private function getVariation(array $variationGroup, VisitorAbstract $visitor):
if (!isset($variation[FlagshipField::FIELD_ALLOCATION])) {
continue;
}
- $assignmentsVariationId = $this->getVisitorAssignmentsHistory($groupVariationId, $visitor);
+ $assignmentsVariationId = $this->getVisitorAssignmentsHistory($groupVariationId, $visitor);
if ($assignmentsVariationId) {
$newVariation = $this->findVariationById($variations, $assignmentsVariationId);
if (!$newVariation) {
continue;
}
$visitorVariation = [
- FlagshipField::FIELD_ID => $newVariation[FlagshipField::FIELD_ID],
- FlagshipField::FIELD_MODIFICATIONS => $newVariation[FlagshipField::FIELD_MODIFICATIONS],
- FlagshipField::FIELD_REFERENCE => !empty($newVariation[FlagshipField::FIELD_REFERENCE]),
- FlagshipField::FIELD_NANE => $newVariation[FlagshipField::FIELD_NANE] ?? null
- ];
+ FlagshipField::FIELD_ID => $newVariation[FlagshipField::FIELD_ID],
+ FlagshipField::FIELD_MODIFICATIONS => $newVariation[FlagshipField::FIELD_MODIFICATIONS],
+ FlagshipField::FIELD_REFERENCE => !empty($newVariation[FlagshipField::FIELD_REFERENCE]),
+ FlagshipField::FIELD_NANE => $newVariation[FlagshipField::FIELD_NANE] ?? null,
+ ];
break;
}
+
+ if (!isset($variation[FlagshipField::FIELD_ALLOCATION]) || $variation[FlagshipField::FIELD_ALLOCATION] <= 0) {
+ continue;
+ }
+
$totalAllocation += $variation[FlagshipField::FIELD_ALLOCATION];
if ($hashAllocation < $totalAllocation) {
$visitorVariation = [
- FlagshipField::FIELD_ID => $variation[FlagshipField::FIELD_ID],
- FlagshipField::FIELD_MODIFICATIONS => $variation[FlagshipField::FIELD_MODIFICATIONS],
- FlagshipField::FIELD_REFERENCE => !empty($variation[FlagshipField::FIELD_REFERENCE]),
- FlagshipField::FIELD_NANE => $variation[FlagshipField::FIELD_NANE] ?? null
- ];
+ FlagshipField::FIELD_ID => $variation[FlagshipField::FIELD_ID],
+ FlagshipField::FIELD_MODIFICATIONS => $variation[FlagshipField::FIELD_MODIFICATIONS],
+ FlagshipField::FIELD_REFERENCE => !empty($variation[FlagshipField::FIELD_REFERENCE]),
+ FlagshipField::FIELD_NANE => $variation[FlagshipField::FIELD_NANE] ?? null,
+ ];
break;
}
}
@@ -433,7 +441,7 @@ private function checkAndTargeting(array $innerTargetings, VisitorAbstract $visi
break;
}
$isMatching = true;
- continue ;
+ continue;
}
switch ($key) {
diff --git a/src/Enum/EventCategory.php b/src/Enum/EventCategory.php
index 0dcac344..177ca33f 100644
--- a/src/Enum/EventCategory.php
+++ b/src/Enum/EventCategory.php
@@ -16,4 +16,4 @@ enum EventCategory: string
* Represents user engagement event category.
*/
case USER_ENGAGEMENT = "USER_ENGAGEMENT";
-}
\ No newline at end of file
+}
diff --git a/src/Enum/FlagshipConstant.php b/src/Enum/FlagshipConstant.php
index 6e9418d1..f964ff67 100644
--- a/src/Enum/FlagshipConstant.php
+++ b/src/Enum/FlagshipConstant.php
@@ -16,6 +16,8 @@ class FlagshipConstant
public const DEFAULT_HIT_CACHE_TIME_MS = 14400000;
+ public const MAX_ACTIVATE_HIT_PER_BATCH = 100;
+
/**
* SDK language
*/
@@ -52,7 +54,7 @@ class FlagshipConstant
/**
* SDK version
*/
- public const SDK_VERSION = "4.0.1";
+ public const SDK_VERSION = "4.1.0";
public const GET_FLAG = 'GET_FLAG';
@@ -62,24 +64,23 @@ class FlagshipConstant
public const CONTEXT_PARAM_ERROR = "params 'key' must be a non null String, and 'value' must be one of the
following types : String, Number, Boolean";
- public const USER_EXPOSED_NO_FLAG_ERROR = "For the visitor '%s', no flags were found with the key '%s'.
+ public const USER_EXPOSED_NO_FLAG_ERROR = "For the visitor '%s', no flags were found with the key '%s'.
As a result, user exposure will not be sent.";
public const VISITOR_EXPOSED_VALUE_NOT_CALLED =
- "Visitor '%s', the flag with the key '%s' has been exposed without calling the `getValue` method first.";
+ "For the visitor `%s`, assuming the getValue() method has not previously been invoked for the flag `%s`. Therefore, the exposure is canceled";
public const GET_FLAG_MISSING_ERROR =
- "For the visitor '%s', no flags were found with the key '%s'.
+ "For the visitor '%s', no flags were found with the key '%s'.
Therefore, the default value '%s' has been returned.";
public const GET_FLAG_NOT_FOUND =
- "For the visitor '%s', no flags were found with the key '%s'. Therefore, an empty flag has been returned.";
+ "For the visitor '%s', no flags were found with the key '%s'. Therefore, an empty flag has been returned.";
public const NO_FLAG_METADATA =
- "For the visitor '%s',no flags were found with the key '%s'. As a result, an empty metadata object is returned";
+ "For the visitor '%s',no flags were found with the key '%s'. As a result, an empty metadata object is returned";
public const GET_FLAG_CAST_ERROR =
- "For the visitor '%s', the flag with key '%s' has a different type compared to the default value.
+ "For the visitor '%s', the flag with key '%s' has a different type compared to the default value.
Therefore, the default value '%s' has been returned.";
public const USER_EXPOSED_CAST_ERROR =
- "For the visitor '%s', the flag with key '%s' has been exposed
- despite having a different type compared to the default value";
+ "For the visitor `%s`, the flag with the key `%s` has a different type compared to the default value. Therefore, the exposure is interrupted";
public const DECISION_MANAGER_MISSING_ERROR = "decisionManager must not be null.";
public const TRACKER_MANAGER_MISSING_ERROR = "trackerManager must not be null.";
public const CURL_LIBRARY_IS_NOT_LOADED = 'curl library is not loaded';
@@ -88,15 +89,17 @@ class FlagshipConstant
public const METHOD_DEACTIVATED_ERROR = "Method '%s' is deactivated while SDK status is: %s.";
public const METHOD_DEACTIVATED_SEND_CONSENT_ERROR = "Send consent hit is deactivated while SDK status is: %s.";
public const METHOD_DEACTIVATED_CONSENT_ERROR =
- "Method '%s' is deactivated for visitor '%s': visitor did not consent.";
+ "Method '%s' is deactivated for visitor '%s': visitor did not consent.";
public const METHOD_DEACTIVATED_BUCKETING_ERROR = "Method '%s' is deactivated on Bucketing mode.";
public const FLAGSHIP_PREDEFINED_CONTEXT_ERROR = "Flagship predefined context %s must be %s";
- public const FLAGSHIP_VISITOR_NOT_AUTHENTIFICATE = "Visitor is not authentificated yet";
+ public const FLAGSHIP_VISITOR_NOT_AUTHENTIFICATE = "Visitor is not authentificated yet";
public const IS_NOT_CALLABLE_ERROR = "'%s' is not callable";
//Messages Info
public const SDK_STARTED_INFO = "Flagship SDK (version: %s) READY";
public const FLAGSHIP_SDK = "Flagship SDK";
+ public const XPC_BUCKETING_WARNING = "Experience continuity is disabled on bucketing mode when visitor cache is not set ";
+
//Tag
public const TAG = 'TAG';
@@ -177,12 +180,14 @@ class FlagshipConstant
public const FETCH_FLAGS_STARTED = 'visitor `%s` fetchFlags process is started';
public const PROCESS_FETCHING_FLAGS = 'FETCH_FLAGS';
public const FETCH_CAMPAIGNS_SUCCESS =
- 'Visitor %s, anonymousId %s with context %s has just fetched campaigns %s in %s ms';
+ 'Visitor %s, anonymousId %s with context %s has just fetched campaigns %s in %s ms';
public const FETCH_CAMPAIGNS_FROM_CACHE =
'Visitor %s, anonymousId %s with context %s has just fetched campaigns from cache %s in %s ms';
public const FETCH_FLAGS_FROM_CAMPAIGNS =
'Visitor %s, anonymousId %s with context %s has just fetched flags %s from Campaigns';
public const FLAG_USER_EXPOSED = 'FLAG_USER_EXPOSED';
+
+ public const ADD_HIT = 'ADD HIT';
public const FLAG_VALUE = 'FLAG_VALUE';
public const GET_FLAG_VALUE = 'Visitor %s, Flag for key %s returns value %s';
public const LOG_FORMAT_MESSAGE = "message";
@@ -194,5 +199,5 @@ class FlagshipConstant
public const LOG_FORMAT_DURATION = 'DURATION';
public const ANALYTIC_HIT_ALLOCATION = 1;
public const FLAGSHIP_VISITOR_ALREADY_AUTHENTICATE =
- "Visitor is already authenticated";
+ "Visitor is already authenticated";
}
diff --git a/src/Enum/FlagshipContext.php b/src/Enum/FlagshipContext.php
index 93409729..ff5cf6d1 100644
--- a/src/Enum/FlagshipContext.php
+++ b/src/Enum/FlagshipContext.php
@@ -121,27 +121,27 @@ class FlagshipContext
public const FLAGSHIP_VISITOR = 'fs_users';
private static array $predefinedContext = [
- self::DEVICE_LOCALE => "string",
- self::DEVICE_TYPE => "string",
- self::DEVICE_MODEL => "string",
- self::LOCATION_CITY => "string",
- self::LOCATION_REGION => "string",
- self::LOCATION_COUNTRY => "string",
- self::LOCATION_LAT => "float",
- self::LOCATION_LONG => "float",
- self::IP => "string",
- self::OS_NAME => "string",
- self::OS_VERSION_NAME => "string",
- self::OS_VERSION_CODE => "float",
- self::CARRIER_NAME => "string",
- self::INTERNET_CONNECTION => "string",
- self::APP_VERSION_NAME => "string",
- self::APP_VERSION_CODE => "float",
- self::INTERFACE_NAME => "string",
- self::FLAGSHIP_CLIENT => "string",
- self::FLAGSHIP_VERSION => "string",
- self::FLAGSHIP_VISITOR => "string"
- ];
+ self::DEVICE_LOCALE => "string",
+ self::DEVICE_TYPE => "string",
+ self::DEVICE_MODEL => "string",
+ self::LOCATION_CITY => "string",
+ self::LOCATION_REGION => "string",
+ self::LOCATION_COUNTRY => "string",
+ self::LOCATION_LAT => "float",
+ self::LOCATION_LONG => "float",
+ self::IP => "string",
+ self::OS_NAME => "string",
+ self::OS_VERSION_NAME => "string",
+ self::OS_VERSION_CODE => "float",
+ self::CARRIER_NAME => "string",
+ self::INTERNET_CONNECTION => "string",
+ self::APP_VERSION_NAME => "string",
+ self::APP_VERSION_CODE => "float",
+ self::INTERFACE_NAME => "string",
+ self::FLAGSHIP_CLIENT => "string",
+ self::FLAGSHIP_VERSION => "string",
+ self::FLAGSHIP_VISITOR => "string",
+ ];
/**
* @param $context string
diff --git a/src/Enum/TroubleshootingLabel.php b/src/Enum/TroubleshootingLabel.php
index 528a059c..0acd0b75 100644
--- a/src/Enum/TroubleshootingLabel.php
+++ b/src/Enum/TroubleshootingLabel.php
@@ -23,4 +23,4 @@ enum TroubleshootingLabel: string
case SDK_CONFIG = "SDK_CONFIG";
case SEND_HIT_ROUTE_ERROR = "SEND_HIT_ROUTE_ERROR";
case FLAG_VALUE_NOT_CALLED = "FLAG_VALUE_NOT_CALLED";
-}
\ No newline at end of file
+}
diff --git a/src/Enum/VisitorCacheStatus.php b/src/Enum/VisitorCacheStatus.php
new file mode 100644
index 00000000..b16af0b4
--- /dev/null
+++ b/src/Enum/VisitorCacheStatus.php
@@ -0,0 +1,11 @@
+visitor->getConfig(),
FlagshipConstant::GET_FLAG,
FlagshipConstant::GET_FLAG_NOT_FOUND,
- [$this->visitor->getVisitorId(), $key]
+ [
+ $this->visitor->getVisitorId(),
+ $key,
+ ]
);
return new FSFlag($key);
}
@@ -121,18 +124,18 @@ public function toJSON(): string
foreach ($this->flags as $key => $flag) {
$metadata = $flag->getMetadata();
$serializedData[] = [
- 'key' => $key,
- 'campaignId' => $metadata->getCampaignId(),
- 'campaignName' => $metadata->getCampaignName(),
- 'variationGroupId' => $metadata->getVariationGroupId(),
- 'variationGroupName' => $metadata->getVariationGroupName(),
- 'variationId' => $metadata->getVariationId(),
- 'variationName' => $metadata->getVariationName(),
- 'isReference' => $metadata->isReference(),
- 'campaignType' => $metadata->getCampaignType(),
- 'slug' => $metadata->getSlug(),
- 'hex' => $this->valueToHex(['v' => $flag->getValue(null, false)])
- ];
+ 'key' => $key,
+ 'campaignId' => $metadata->getCampaignId(),
+ 'campaignName' => $metadata->getCampaignName(),
+ 'variationGroupId' => $metadata->getVariationGroupId(),
+ 'variationGroupName' => $metadata->getVariationGroupName(),
+ 'variationId' => $metadata->getVariationId(),
+ 'variationName' => $metadata->getVariationName(),
+ 'isReference' => $metadata->isReference(),
+ 'campaignType' => $metadata->getCampaignType(),
+ 'slug' => $metadata->getSlug(),
+ 'hex' => $this->valueToHex(['v' => $flag->getValue(null, false)]),
+ ];
}
return json_encode($serializedData);
}
diff --git a/src/Flag/FSFlagMetadata.php b/src/Flag/FSFlagMetadata.php
index 9d699fd1..fa982da8 100644
--- a/src/Flag/FSFlagMetadata.php
+++ b/src/Flag/FSFlagMetadata.php
@@ -175,15 +175,15 @@ public function getSlug(): ?string
public function jsonSerialize(): mixed
{
return [
- "campaignId" => $this->getCampaignId(),
- "campaignName" => $this->getCampaignName(),
- "variationGroupId" => $this->getVariationGroupId(),
- "variationGroupName" => $this->getVariationGroupName(),
- "variationId" => $this->getVariationId(),
- "variationName" => $this->getVariationName(),
- "isReference" => $this->isReference(),
- "campaignType" => $this->getCampaignType(),
- "slug" => $this->getSlug()
- ];
+ "campaignId" => $this->getCampaignId(),
+ "campaignName" => $this->getCampaignName(),
+ "variationGroupId" => $this->getVariationGroupId(),
+ "variationGroupName" => $this->getVariationGroupName(),
+ "variationId" => $this->getVariationId(),
+ "variationName" => $this->getVariationName(),
+ "isReference" => $this->isReference(),
+ "campaignType" => $this->getCampaignType(),
+ "slug" => $this->getSlug(),
+ ];
}
}
diff --git a/src/Flagship.php b/src/Flagship.php
index 43138a4e..8502875d 100644
--- a/src/Flagship.php
+++ b/src/Flagship.php
@@ -127,7 +127,11 @@ public static function start(string $envId, string $apiKey, ?FlagshipConfig $con
$murmurHash = $container->get(MurmurHash::class);
$decisionManager = $container->get(
BucketingManager::class,
- [$httpClient, $config, $murmurHash]
+ [
+ $httpClient,
+ $config,
+ $murmurHash,
+ ]
);
} else {
$decisionManager = $container->get(ApiManager::class, [$httpClient, $config]);
@@ -139,7 +143,11 @@ public static function start(string $envId, string $apiKey, ?FlagshipConfig $con
$trackingManager = $container->get(
TrackingManager::class,
- [$config, $httpClient, $flagship->flagshipInstanceId]
+ [
+ $config,
+ $httpClient,
+ $flagship->flagshipInstanceId,
+ ]
);
$configManager = $container->get(ConfigManager::class, [$config, $decisionManager, $trackingManager], true);
diff --git a/src/Hit/Activate.php b/src/Hit/Activate.php
index d9c0a443..47cff6de 100644
--- a/src/Hit/Activate.php
+++ b/src/Hit/Activate.php
@@ -198,13 +198,13 @@ public function setFlagDefaultValue(float|array|bool|int|string|null $flagDefaul
public function toApiKeys(): array
{
$apiKeys = [
- FlagshipConstant::VISITOR_ID_API_ITEM => $this->getVisitorId(),
- FlagshipConstant::VARIATION_ID_API_ITEM => $this->getVariationId(),
- FlagshipConstant::VARIATION_GROUP_ID_API_ITEM => $this->getVariationGroupId(),
- FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $this->config->getEnvId(),
- FlagshipConstant::ANONYMOUS_ID => null,
- FlagshipConstant::QT_API_ITEM => round(microtime(true) * 1000) - $this->createdAt,
- ];
+ FlagshipConstant::VISITOR_ID_API_ITEM => $this->getVisitorId(),
+ FlagshipConstant::VARIATION_ID_API_ITEM => $this->getVariationId(),
+ FlagshipConstant::VARIATION_GROUP_ID_API_ITEM => $this->getVariationGroupId(),
+ FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $this->config->getEnvId(),
+ FlagshipConstant::ANONYMOUS_ID => null,
+ FlagshipConstant::QT_API_ITEM => round(microtime(true) * 1000) - $this->createdAt,
+ ];
if ($this->getVisitorId() && $this->getAnonymousId()) {
$apiKeys[FlagshipConstant::VISITOR_ID_API_ITEM] = $this->getVisitorId();
diff --git a/src/Hit/ActivateBatch.php b/src/Hit/ActivateBatch.php
index f3d668b3..d60bec1d 100644
--- a/src/Hit/ActivateBatch.php
+++ b/src/Hit/ActivateBatch.php
@@ -39,8 +39,8 @@ public function toApiKeys(): array
$activates[] = $apiKeys;
}
return [
- FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $this->config->getEnvId(),
- FlagshipConstant::BATCH => $activates
- ];
+ FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $this->config->getEnvId(),
+ FlagshipConstant::BATCH => $activates,
+ ];
}
}
diff --git a/src/Hit/Diagnostic.php b/src/Hit/Diagnostic.php
index 78cd37a7..e83f0b70 100644
--- a/src/Hit/Diagnostic.php
+++ b/src/Hit/Diagnostic.php
@@ -297,11 +297,7 @@ public function __construct($type)
parent::__construct($type);
$this->setVersion(FlagshipConstant::TROUBLESHOOTING_VERSION);
$date = $this->getCurrentDateTime();
- $this->setTimestamp($date->format('c'))
- ->setTimeZone($date->getTimezone()->getName())
- ->setStackType(FlagshipConstant::SDK)
- ->setStackName(FlagshipConstant::SDK_LANGUAGE)
- ->setStackVersion(FlagshipConstant::SDK_VERSION);
+ $this->setTimestamp($date->format('c'))->setTimeZone($date->getTimezone()->getName())->setStackType(FlagshipConstant::SDK)->setStackName(FlagshipConstant::SDK_LANGUAGE)->setStackVersion(FlagshipConstant::SDK_VERSION);
}
/**
@@ -1320,16 +1316,16 @@ public function setSdkConfigLogLevel(LogLevel $sdkConfigLogLeve): static
public function toApiKeys(): array
{
$customVariable = [
- 'version' => $this->getVersion(),
- 'logLevel' => $this->getLogLevel()->name,
- 'envId' => $this->getConfig()->getEnvId(),
- "timestamp" => $this->getTimestamp(),
- 'timeZone' => $this->getTimeZone(),
- 'label' => $this->getLabel()->value,
- 'stack.type' => $this->getStackType(),
- 'stack.name' => $this->getStackName(),
- 'stack.version' => $this->getStackVersion()
- ];
+ 'version' => $this->getVersion(),
+ 'logLevel' => $this->getLogLevel()->name,
+ 'envId' => $this->getConfig()->getEnvId(),
+ "timestamp" => $this->getTimestamp(),
+ 'timeZone' => $this->getTimeZone(),
+ 'label' => $this->getLabel()->value,
+ 'stack.type' => $this->getStackType(),
+ 'stack.name' => $this->getStackName(),
+ 'stack.version' => $this->getStackVersion(),
+ ];
if ($this->getVisitorId() !== null) {
$customVariable["visitor.visitorId"] = $this->getVisitorId();
}
@@ -1374,8 +1370,7 @@ public function toApiKeys(): array
}
if ($this->getSdkConfigTrackingManagerConfigStrategy() !== null) {
- $customVariable["sdk.config.trackingManager.strategy"] =
- $this->getSdkConfigTrackingManagerConfigStrategy()->name;
+ $customVariable["sdk.config.trackingManager.strategy"] = $this->getSdkConfigTrackingManagerConfigStrategy()->name;
}
if ($this->getSdkConfigBucketingUrl() !== null) {
@@ -1387,8 +1382,7 @@ public function toApiKeys(): array
}
if ($this->isSdkConfigUsingOnVisitorExposed() !== null) {
- $customVariable["sdk.config.usingOnVisitorExposed"] =
- json_encode($this->isSdkConfigUsingOnVisitorExposed());
+ $customVariable["sdk.config.usingOnVisitorExposed"] = json_encode($this->isSdkConfigUsingOnVisitorExposed());
}
if ($this->isSdkConfigUsingCustomHitCache() !== null) {
@@ -1396,8 +1390,7 @@ public function toApiKeys(): array
}
if ($this->isSdkConfigUsingCustomVisitorCache() !== null) {
- $customVariable["sdk.config.usingCustomVisitorCache"] =
- json_encode($this->isSdkConfigUsingCustomVisitorCache());
+ $customVariable["sdk.config.usingCustomVisitorCache"] = json_encode($this->isSdkConfigUsingCustomVisitorCache());
}
if ($this->getHttpRequestUrl() !== null) {
@@ -1443,7 +1436,7 @@ public function toApiKeys(): array
if (is_array($this->getVisitorContext())) {
$context = $this->getVisitorContext();
foreach ($context as $index => $item) {
- $customVariable["visitor.context.[$index]"] = is_string($item) ? $item : json_encode($item);
+ $customVariable["visitor.context.[$index]"] = is_string($item) ? $item : json_encode($item);
}
}
@@ -1464,14 +1457,11 @@ public function toApiKeys(): array
$customVariableKey = "visitor.flags.[$key]";
$customVariableKeyMetadata = "visitor.flags.[$key].metadata";
$customVariable["$customVariableKey.key"] = $visitorFlag->getKey();
- $customVariable["$customVariableKey.value"] = is_string($visitorFlag->getValue()) ?
- $visitorFlag->getValue() :
- json_encode($visitorFlag->getValue());
+ $customVariable["$customVariableKey.value"] = is_string($visitorFlag->getValue()) ? $visitorFlag->getValue() : json_encode($visitorFlag->getValue());
$customVariable["$customVariableKeyMetadata.variationId"] = $visitorFlag->getVariationId();
$customVariable["$customVariableKeyMetadata.variationName"] = $visitorFlag->getVariationName();
$customVariable["$customVariableKeyMetadata.variationGroupId"] = $visitorFlag->getVariationGroupId();
- $customVariable["$customVariableKeyMetadata.variationGroupName"] =
- $visitorFlag->getVariationGroupName();
+ $customVariable["$customVariableKeyMetadata.variationGroupName"] = $visitorFlag->getVariationGroupName();
$customVariable["$customVariableKeyMetadata.campaignId"] = $visitorFlag->getCampaignId();
$customVariable["$customVariableKeyMetadata.campaignName"] = $visitorFlag->getCampaignName();
$customVariable["$customVariableKeyMetadata.campaignType"] = $visitorFlag->getCampaignType();
@@ -1490,12 +1480,10 @@ public function toApiKeys(): array
$customVariable["flag.key"] = $this->getFlagKey();
}
if ($this->getFlagValue() !== null) {
- $customVariable["flag.value"] = is_string($this->getFlagValue()) ? $this->getFlagValue() :
- json_encode($this->getFlagValue());
+ $customVariable["flag.value"] = is_string($this->getFlagValue()) ? $this->getFlagValue() : json_encode($this->getFlagValue());
}
if ($this->getFlagDefault() !== null) {
- $customVariable["flag.default"] = is_string($this->getFlagDefault()) ? $this->getFlagDefault() :
- json_encode($this->getFlagDefault());
+ $customVariable["flag.default"] = is_string($this->getFlagDefault()) ? $this->getFlagDefault() : json_encode($this->getFlagDefault());
}
if ($this->isVisitorExposed() !== null) {
$customVariable["flag.visitorExposed"] = json_encode($this->isVisitorExposed());
@@ -1529,17 +1517,17 @@ public function toApiKeys(): array
}
if ($this->getHitContent() !== null) {
foreach ($this->getHitContent() as $key => $item) {
- $customVariable["hit." . $key] = is_string($item) ? $item : json_encode($item);
+ $customVariable["hit." . $key] = is_string($item) ? $item : json_encode($item);
}
}
return [
- FlagshipConstant::VISITOR_ID_API_ITEM => $this->visitorId,
- FlagshipConstant::DS_API_ITEM => $this->getDs(),
- FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $this->getConfig()->getEnvId(),
- FlagshipConstant::T_API_ITEM => $this->getType()->value,
- 'cv' => $customVariable
- ];
+ FlagshipConstant::VISITOR_ID_API_ITEM => $this->visitorId,
+ FlagshipConstant::DS_API_ITEM => $this->getDs(),
+ FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $this->getConfig()->getEnvId(),
+ FlagshipConstant::T_API_ITEM => $this->getType()->value,
+ 'cv' => $customVariable,
+ ];
}
/**
diff --git a/src/Hit/Event.php b/src/Hit/Event.php
index e1deed0a..55e0617d 100644
--- a/src/Hit/Event.php
+++ b/src/Hit/Event.php
@@ -14,8 +14,7 @@
class Event extends HitAbstract
{
public const ERROR_MESSAGE = 'event category and event action are required';
- public const CATEGORY_ERROR =
- "The category value must be either EventCategory::ACTION_TRACKING or EventCategory::ACTION_TRACKING";
+ public const CATEGORY_ERROR = "The category value must be either EventCategory::ACTION_TRACKING or EventCategory::ACTION_TRACKING";
public const VALUE_FIELD_ERROR = 'value must be an integer and be >= 0';
public static function getClassName(): string
@@ -147,9 +146,7 @@ public function setValue(?float $value): static
$this->logError(
$this->config,
self::VALUE_FIELD_ERROR,
- [
- FlagshipConstant::TAG => __FUNCTION__
- ]
+ [FlagshipConstant::TAG => __FUNCTION__]
);
return $this;
}
diff --git a/src/Hit/HitAbstract.php b/src/Hit/HitAbstract.php
index ad8d5c7e..f1766a39 100644
--- a/src/Hit/HitAbstract.php
+++ b/src/Hit/HitAbstract.php
@@ -94,7 +94,7 @@ public function __construct(HitType $type)
{
$this->setType($type);
$this->ds = FlagshipConstant::SDK_APP;
- $this->createdAt = $this->getNow();
+ $this->createdAt = $this->getNow();
$this->anonymousId = null;
$this->isFromCache = false;
$this->userIP = null;
@@ -335,13 +335,13 @@ protected function setIsFromCache(bool $isFromCache): static
public function toApiKeys(): array
{
$data = [
- FlagshipConstant::VISITOR_ID_API_ITEM => $this->visitorId ?: $this->anonymousId,
- FlagshipConstant::DS_API_ITEM => $this->getDs(),
- FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $this->getConfig()->getEnvId(),
- FlagshipConstant::T_API_ITEM => $this->getType()->value,
- FlagshipConstant::CUSTOMER_UID => null,
- FlagshipConstant::QT_API_ITEM => $this->getNow() - $this->createdAt,
- ];
+ FlagshipConstant::VISITOR_ID_API_ITEM => $this->visitorId ?: $this->anonymousId,
+ FlagshipConstant::DS_API_ITEM => $this->getDs(),
+ FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $this->getConfig()->getEnvId(),
+ FlagshipConstant::T_API_ITEM => $this->getType()->value,
+ FlagshipConstant::CUSTOMER_UID => null,
+ FlagshipConstant::QT_API_ITEM => $this->getNow() - $this->createdAt,
+ ];
if ($this->getUserIP() !== null) {
$data[FlagshipConstant::USER_IP_API_ITEM] = $this->getUserIP();
diff --git a/src/Hit/HitBatch.php b/src/Hit/HitBatch.php
index bc61894a..7bfac945 100644
--- a/src/Hit/HitBatch.php
+++ b/src/Hit/HitBatch.php
@@ -37,12 +37,12 @@ public function __construct(FlagshipConfig $config, array $hits)
public function toApiKeys(): array
{
$data = [
- FlagshipConstant::DS_API_ITEM => $this->getDs(),
- FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $this->getConfig()->getEnvId(),
- FlagshipConstant::T_API_ITEM => $this->getType()->value,
- FlagshipConstant::QT_API_ITEM => $this->getNow() - $this->createdAt,
- FlagshipConstant::H_API_ITEM => []
- ];
+ FlagshipConstant::DS_API_ITEM => $this->getDs(),
+ FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $this->getConfig()->getEnvId(),
+ FlagshipConstant::T_API_ITEM => $this->getType()->value,
+ FlagshipConstant::QT_API_ITEM => $this->getNow() - $this->createdAt,
+ FlagshipConstant::H_API_ITEM => [],
+ ];
foreach ($this->getHits() as $hit) {
$hitApiKey = $hit->toApiKeys();
diff --git a/src/Model/FlagDTO.php b/src/Model/FlagDTO.php
index 34300620..6b833d4d 100644
--- a/src/Model/FlagDTO.php
+++ b/src/Model/FlagDTO.php
@@ -264,16 +264,16 @@ public function setVariationName(string $variationName): static
public function jsonSerialize(): mixed
{
return [
- FlagshipField::FIELD_KEY => $this->getKey(),
- FlagshipField::FIELD_CAMPAIGN_ID => $this->getCampaignId(),
- FlagshipField::FIELD_CAMPAIGN_NAME => $this->getCampaignName(),
- FlagshipField::FIELD_VARIATION_GROUP_ID => $this->getVariationGroupId(),
- FlagshipField::FIELD_VARIATION_GROUP_NAME => $this->getVariationGroupName(),
- FlagshipField::FIELD_VARIATION_ID => $this->getVariationId(),
- FlagshipField::FIELD_VARIATION_NAME => $this->getVariationName(),
- FlagshipField::FIELD_IS_REFERENCE => $this->getIsReference(),
- FlagshipField::FIELD_VALUE => $this->getValue(),
- FlagshipField::FIELD_SLUG => $this->getSlug()
- ];
+ FlagshipField::FIELD_KEY => $this->getKey(),
+ FlagshipField::FIELD_CAMPAIGN_ID => $this->getCampaignId(),
+ FlagshipField::FIELD_CAMPAIGN_NAME => $this->getCampaignName(),
+ FlagshipField::FIELD_VARIATION_GROUP_ID => $this->getVariationGroupId(),
+ FlagshipField::FIELD_VARIATION_GROUP_NAME => $this->getVariationGroupName(),
+ FlagshipField::FIELD_VARIATION_ID => $this->getVariationId(),
+ FlagshipField::FIELD_VARIATION_NAME => $this->getVariationName(),
+ FlagshipField::FIELD_IS_REFERENCE => $this->getIsReference(),
+ FlagshipField::FIELD_VALUE => $this->getValue(),
+ FlagshipField::FIELD_SLUG => $this->getSlug(),
+ ];
}
}
diff --git a/src/Traits/BuildApiTrait.php b/src/Traits/BuildApiTrait.php
index 75c9e997..7b64c679 100644
--- a/src/Traits/BuildApiTrait.php
+++ b/src/Traits/BuildApiTrait.php
@@ -15,11 +15,11 @@ trait BuildApiTrait
protected function buildHeader(string $apiKey): array
{
return [
- FlagshipConstant::HEADER_X_API_KEY => $apiKey,
- FlagshipConstant::HEADER_X_SDK_VERSION => FlagshipConstant::SDK_VERSION,
- FlagshipConstant::HEADER_CONTENT_TYPE => FlagshipConstant::HEADER_APPLICATION_JSON,
- FlagshipConstant::HEADER_X_SDK_CLIENT => FlagshipConstant::SDK_LANGUAGE,
- ];
+ FlagshipConstant::HEADER_X_API_KEY => $apiKey,
+ FlagshipConstant::HEADER_X_SDK_VERSION => FlagshipConstant::SDK_VERSION,
+ FlagshipConstant::HEADER_CONTENT_TYPE => FlagshipConstant::HEADER_APPLICATION_JSON,
+ FlagshipConstant::HEADER_X_SDK_CLIENT => FlagshipConstant::SDK_LANGUAGE,
+ ];
}
/**
diff --git a/src/Traits/Helper.php b/src/Traits/Helper.php
index aefb2d74..7ccbe3c0 100644
--- a/src/Traits/Helper.php
+++ b/src/Traits/Helper.php
@@ -33,4 +33,29 @@ public function valueToHex(mixed $value): string
}
return $hex;
}
+
+ function arraysAreEqual(array $array1, array $array2): bool
+ {
+ if (count($array1) !== count($array2)) {
+ return false;
+ }
+
+ foreach ($array1 as $key => $value) {
+ if (!array_key_exists($key, $array2)) {
+ return false;
+ }
+
+ if (is_array($value)) {
+ if (!is_array($array2[$key]) || !$this->arraysAreEqual($value, $array2[$key])) {
+ return false;
+ }
+ } else {
+ if ($value !== $array2[$key]) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
}
diff --git a/src/Traits/LogTrait.php b/src/Traits/LogTrait.php
index 287a4b09..92080430 100644
--- a/src/Traits/LogTrait.php
+++ b/src/Traits/LogTrait.php
@@ -148,9 +148,9 @@ protected function logWarning(FlagshipConfig $config, string $message, array $co
* @param array $requestBody
* @param array $headers
* @param string $duration
- * @param null $responseHeader
- * @param null $responseBody
- * @param null $responseStatus
+ * @param mixed $responseHeader
+ * @param mixed $responseBody
+ * @param mixed $responseStatus
* @return array
*/
protected function getLogFormat(
@@ -180,13 +180,13 @@ protected function getLogFormat(
$format[FlagshipConstant::LOG_FORMAT_DURATION] = $duration;
}
if ($responseHeader !== null) {
- $format[FlagshipConstant::LOG_FORMAT_REQUEST_HEADERS] = $responseHeader;
+ $format[FlagshipConstant::LOG_FORMAT_REQUEST_HEADERS] = $responseHeader;
}
if ($responseBody !== null) {
- $format[FlagshipConstant::LOG_FORMAT_RESPONSE_BODY] = $responseBody;
+ $format[FlagshipConstant::LOG_FORMAT_RESPONSE_BODY] = $responseBody;
}
if ($responseStatus !== null) {
- $format[FlagshipConstant::LOG_FORMAT_RESPONSE_STATUS] = $responseStatus;
+ $format[FlagshipConstant::LOG_FORMAT_RESPONSE_STATUS] = $responseStatus;
}
return $format;
}
diff --git a/src/Utils/HttpClient.php b/src/Utils/HttpClient.php
index eb0f2b46..1154dce7 100644
--- a/src/Utils/HttpClient.php
+++ b/src/Utils/HttpClient.php
@@ -150,11 +150,11 @@ private function exec(): HttpResponse
if ($httpError || $curlErrorCode) {
$message = [
- 'curlCode' => $curlErrorCode,
- 'curlMessage' => $curlErrorMessage,
- 'httpCode' => $httpStatusCode,
- 'httpMessage' => $rawResponse
- ];
+ 'curlCode' => $curlErrorCode,
+ 'curlMessage' => $curlErrorMessage,
+ 'httpCode' => $httpStatusCode,
+ 'httpMessage' => $rawResponse,
+ ];
throw new Exception(json_encode($message), $curlErrorCode);
}
$response = $rawResponse;
diff --git a/src/Utils/MurmurHash.php b/src/Utils/MurmurHash.php
index 00d62d65..13bcccbc 100644
--- a/src/Utils/MurmurHash.php
+++ b/src/Utils/MurmurHash.php
@@ -11,9 +11,7 @@ class MurmurHash
*/
private function multiply(mixed $k1, mixed $constant): int
{
- return ((($k1 & 0xffff) * $constant) +
- ((($k1 >= 0 ? $k1 >> 16 :
- (($k1 & 0x7fffffff) >> 16) | 0x8000) * $constant & 0xffff) << 16)) & 0xffffffff;
+ return ((($k1 & 0xffff) * $constant) + ((($k1 >= 0 ? $k1 >> 16 : (($k1 & 0x7fffffff) >> 16) | 0x8000) * $constant & 0xffff) << 16)) & 0xffffffff;
}
/**
@@ -47,21 +45,15 @@ public function murmurHash3Int32(string $source): int
$h1 = $seed < 0 ? -$seed : $seed;
$i = 0;
for ($bytes = $keyLength - ($remainder = $keyLength & 3); $i < $bytes;) {
- $k1 = $source[$i]
- | ($source[++$i] << 8)
- | ($source[++$i] << 16)
- | ($source[++$i] << 24);
+ $k1 = $source[$i] | ($source[++$i] << 8) | ($source[++$i] << 16) | ($source[++$i] << 24);
++$i;
$k1 = $this->multiply($k1, 0xcc9e2d51);
$k1 = $this->rotateLeft($k1);
$k1 = $this->multiply($k1, 0x1b873593);
$h1 ^= $k1;
$h1 = $h1 << 13 | ($h1 >= 0 ? $h1 >> 19 : (($h1 & 0x7fffffff) >> 19) | 0x1000);
- $h1b = ((($h1 & 0xffff) * 5) +
- (((($h1 >= 0 ? $h1 >> 16 :
- (($h1 & 0x7fffffff) >> 16) | 0x8000) * 5) & 0xffff) << 16)) & 0xffffffff;
- $h1 = ((($h1b & 0xffff) + 0x6b64) +
- (((($h1b >= 0 ? $h1b >> 16 : (($h1b & 0x7fffffff) >> 16) | 0x8000) + 0xe654) & 0xffff) << 16));
+ $h1b = ((($h1 & 0xffff) * 5) + (((($h1 >= 0 ? $h1 >> 16 : (($h1 & 0x7fffffff) >> 16) | 0x8000) * 5) & 0xffff) << 16)) & 0xffffffff;
+ $h1 = ((($h1b & 0xffff) + 0x6b64) + (((($h1b >= 0 ? $h1b >> 16 : (($h1b & 0x7fffffff) >> 16) | 0x8000) + 0xe654) & 0xffff) << 16));
}
$k1 = 0;
switch ($remainder) {
diff --git a/src/Visitor/DefaultStrategy.php b/src/Visitor/DefaultStrategy.php
index 5f7fdfae..04c5b3f9 100644
--- a/src/Visitor/DefaultStrategy.php
+++ b/src/Visitor/DefaultStrategy.php
@@ -37,9 +37,7 @@ public function setConsent(bool $hasConsented): void
$consentHit = new Event(EventCategory::USER_ENGAGEMENT, FlagshipConstant::FS_CONSENT);
$consentHit->setLabel(
FlagshipConstant::SDK_LANGUAGE . ':' . ($hasConsented ? 'true' : 'false')
- )->setConfig($this->getConfig())
- ->setVisitorId($this->getVisitor()->getVisitorId())
- ->setAnonymousId($this->getVisitor()->getAnonymousId());
+ )->setConfig($this->getConfig())->setVisitorId($this->getVisitor()->getVisitorId())->setAnonymousId($this->getVisitor()->getAnonymousId());
$trackingManager = $this->getTrackingManager();
@@ -48,15 +46,7 @@ public function setConsent(bool $hasConsented): void
$visitor = $this->getVisitor();
$troubleshooting = new Troubleshooting();
- $troubleshooting->setLabel(TroubleshootingLabel::VISITOR_SEND_HIT)
- ->setLogLevel(LogLevel::INFO)
- ->setTraffic($visitor->getTraffic())
- ->setFlagshipInstanceId($visitor->getFlagshipInstanceId())
- ->setVisitorSessionId($visitor->getInstanceId())
- ->setHitContent($consentHit->toApiKeys())
- ->setVisitorId($visitor->getVisitorId())
- ->setConfig($this->getConfig())
- ->setAnonymousId($visitor->getAnonymousId());
+ $troubleshooting->setLabel(TroubleshootingLabel::VISITOR_SEND_HIT)->setLogLevel(LogLevel::INFO)->setTraffic($visitor->getTraffic())->setFlagshipInstanceId($visitor->getFlagshipInstanceId())->setVisitorSessionId($visitor->getInstanceId())->setHitContent($consentHit->toApiKeys())->setVisitorId($visitor->getVisitorId())->setConfig($this->getConfig())->setAnonymousId($visitor->getAnonymousId());
if ($this->getDecisionManager() && $this->getDecisionManager()->getTroubleshootingData()) {
$this->sendTroubleshootingHit($troubleshooting);
@@ -117,7 +107,18 @@ protected function setFetchStatus(FSFetchStatus $status, FSFetchReason $reason):
*/
public function updateContext(string $key, float|bool|int|string|null $value): void
{
+ $oldContext = $this->getVisitor()->getContext();
+
$this->updateContextKeyValue($key, $value);
+
+ $newContext = $this->getVisitor()->getContext();
+
+ if ($this->arraysAreEqual($oldContext, $newContext)) {
+ return;
+ }
+
+ $this->getVisitor()->setHasContextBeenUpdated(true);
+
$this->fetchStatusUpdateContext();
}
@@ -127,7 +128,18 @@ public function updateContext(string $key, float|bool|int|string|null $value): v
*/
public function updateContextCollection(array $context): void
{
+ $oldContext = $this->getVisitor()->getContext();
+
$this->initialContext($context);
+
+ $newContext = $this->getVisitor()->getContext();
+
+ if ($this->arraysAreEqual($oldContext, $newContext)) {
+ return;
+ }
+
+ $this->getVisitor()->setHasContextBeenUpdated(true);
+
$this->fetchStatusUpdateContext();
}
@@ -137,7 +149,17 @@ public function updateContextCollection(array $context): void
*/
public function clearContext(): void
{
+ $oldContext = $this->getVisitor()->getContext();
+
$this->getVisitor()->context = [];
+
+ $newContext = $this->getVisitor()->getContext();
+
+ if ($this->arraysAreEqual($oldContext, $newContext)) {
+ return;
+ }
+
+ $this->getVisitor()->setHasContextBeenUpdated(true);
$this->fetchStatusUpdateContext();
}
@@ -146,14 +168,11 @@ public function clearContext(): void
* @param string $functionName
* @return void
*/
- private function logDeactivate(string $functionName): void
+ private function logXpcWarning(string $functionName): void
{
- $this->logError(
+ $this->logWarning(
$this->getVisitor()->getConfig(),
- sprintf(
- FlagshipConstant::METHOD_DEACTIVATED_BUCKETING_ERROR,
- $functionName
- ),
+ FlagshipConstant::XPC_BUCKETING_WARNING,
[FlagshipConstant::TAG => $functionName]
);
}
@@ -164,8 +183,10 @@ private function logDeactivate(string $functionName): void
*/
public function authenticate(string $visitorId): void
{
- if ($this->getVisitor()->getConfig()->getDecisionMode() == DecisionMode::BUCKETING) {
- $this->logDeactivate(__FUNCTION__);
+ $visitorCacheInstance = $this->getConfig()->getVisitorCacheImplementation();
+ $decisionMode = $this->getConfig()->getDecisionMode();
+ if ($decisionMode == DecisionMode::BUCKETING && $visitorCacheInstance === null) {
+ $this->logXpcWarning(__FUNCTION__);
return;
}
@@ -193,15 +214,7 @@ public function authenticate(string $visitorId): void
$this->setFetchStatus(FSFetchStatus::FETCH_REQUIRED, FSFetchReason::AUTHENTICATE);
$troubleshooting = new Troubleshooting();
- $troubleshooting->setLabel(TroubleshootingLabel::VISITOR_AUTHENTICATE)
- ->setLogLevel(LogLevel::INFO)
- ->setVisitorSessionId($this->getVisitor()->getInstanceId())
- ->setVisitorContext($this->getVisitor()->getContext())
- ->setTraffic($this->getVisitor()->getTraffic())
- ->setFlagshipInstanceId($this->getFlagshipInstanceId())
- ->setConfig($this->getConfig())
- ->setVisitorId($this->getVisitor()->getVisitorId())
- ->setAnonymousId($this->getVisitor()->getAnonymousId());
+ $troubleshooting->setLabel(TroubleshootingLabel::VISITOR_AUTHENTICATE)->setLogLevel(LogLevel::INFO)->setVisitorSessionId($this->getVisitor()->getInstanceId())->setVisitorContext($this->getVisitor()->getContext())->setTraffic($this->getVisitor()->getTraffic())->setFlagshipInstanceId($this->getFlagshipInstanceId())->setConfig($this->getConfig())->setVisitorId($this->getVisitor()->getVisitorId())->setAnonymousId($this->getVisitor()->getAnonymousId());
$this->sendTroubleshootingHit($troubleshooting);
}
@@ -211,8 +224,10 @@ public function authenticate(string $visitorId): void
*/
public function unauthenticate(): void
{
- if ($this->getVisitor()->getConfig()->getDecisionMode() == DecisionMode::BUCKETING) {
- $this->logDeactivate(__FUNCTION__);
+ $visitorCacheInstance = $this->getConfig()->getVisitorCacheImplementation();
+ $decisionMode = $this->getConfig()->getDecisionMode();
+ if ($decisionMode == DecisionMode::BUCKETING && $visitorCacheInstance === null) {
+ $this->logXpcWarning(__FUNCTION__);
return;
}
@@ -231,15 +246,7 @@ public function unauthenticate(): void
$this->setFetchStatus(FSFetchStatus::FETCH_REQUIRED, FSFetchReason::UNAUTHENTICATE);
$troubleshooting = new Troubleshooting();
- $troubleshooting->setLabel(TroubleshootingLabel::VISITOR_UNAUTHENTICATE)
- ->setLogLevel(LogLevel::INFO)
- ->setVisitorContext($this->getVisitor()->getContext())
- ->setVisitorSessionId($this->getVisitor()->getInstanceId())
- ->setFlagshipInstanceId($this->getFlagshipInstanceId())
- ->setTraffic($this->getVisitor()->getTraffic())
- ->setConfig($this->getConfig())
- ->setVisitorId($this->getVisitor()->getVisitorId())
- ->setAnonymousId($this->getVisitor()->getAnonymousId());
+ $troubleshooting->setLabel(TroubleshootingLabel::VISITOR_UNAUTHENTICATE)->setLogLevel(LogLevel::INFO)->setVisitorContext($this->getVisitor()->getContext())->setVisitorSessionId($this->getVisitor()->getInstanceId())->setFlagshipInstanceId($this->getFlagshipInstanceId())->setTraffic($this->getVisitor()->getTraffic())->setConfig($this->getConfig())->setVisitorId($this->getVisitor()->getVisitorId())->setAnonymousId($this->getVisitor()->getAnonymousId());
$this->sendTroubleshootingHit($troubleshooting);
}
@@ -268,14 +275,14 @@ protected function fetchVisitorCampaigns(VisitorAbstract $visitor): array
$campaigns = [];
foreach ($data[self::CAMPAIGNS] as $item) {
$campaigns[] = [
- FlagshipField::FIELD_ID => $item[FlagshipField::FIELD_CAMPAIGN_ID],
+ FlagshipField::FIELD_ID => $item[FlagshipField::FIELD_CAMPAIGN_ID],
FlagshipField::FIELD_VARIATION_GROUP_ID => $item[FlagshipField::FIELD_VARIATION_GROUP_ID],
- FlagshipField::FIELD_VARIATION => [
- FlagshipField::FIELD_ID => $item[self::CAMPAIGN_ID],
- FlagshipField::FIELD_REFERENCE => $item[FlagshipField::FIELD_IS_REFERENCE],
+ FlagshipField::FIELD_VARIATION => [
+ FlagshipField::FIELD_ID => $item[self::CAMPAIGN_ID],
+ FlagshipField::FIELD_REFERENCE => $item[FlagshipField::FIELD_IS_REFERENCE],
FlagshipField::FIELD_MODIFICATIONS => [
FlagshipField::FIELD_CAMPAIGN_TYPE => $item[FlagshipField::FIELD_CAMPAIGN_TYPE],
- FlagshipField::FIELD_VALUE => $item[self::FLAGS],
+ FlagshipField::FIELD_VALUE => $item[self::FLAGS],
],
],
];
@@ -413,10 +420,7 @@ public function sendHit(HitAbstract $hit): void
$trackingManager = $this->getTrackingManager();
$visitor = $this->getVisitor();
- $hit->setConfig($visitor->getConfig())
- ->setVisitorId($visitor->getVisitorId())
- ->setAnonymousId($visitor->getAnonymousId())
- ->setDs(FlagshipConstant::SDK_APP);
+ $hit->setConfig($visitor->getConfig())->setVisitorId($visitor->getVisitorId())->setAnonymousId($visitor->getAnonymousId())->setDs(FlagshipConstant::SDK_APP);
if ($hit->isReady() === false) {
$this->logError(
@@ -430,15 +434,7 @@ public function sendHit(HitAbstract $hit): void
$trackingManager->addHit($hit);
$troubleshooting = new Troubleshooting();
- $troubleshooting->setLabel(TroubleshootingLabel::VISITOR_SEND_HIT)
- ->setLogLevel(LogLevel::INFO)
- ->setFlagshipInstanceId($visitor->getFlagshipInstanceId())
- ->setVisitorSessionId($visitor->getInstanceId())
- ->setHitContent($hit->toApiKeys())
- ->setTraffic($visitor->getTraffic())
- ->setVisitorId($visitor->getVisitorId())
- ->setConfig($this->getConfig())
- ->setAnonymousId($visitor->getAnonymousId());
+ $troubleshooting->setLabel(TroubleshootingLabel::VISITOR_SEND_HIT)->setLogLevel(LogLevel::INFO)->setFlagshipInstanceId($visitor->getFlagshipInstanceId())->setVisitorSessionId($visitor->getInstanceId())->setHitContent($hit->toApiKeys())->setTraffic($visitor->getTraffic())->setVisitorId($visitor->getVisitorId())->setConfig($this->getConfig())->setAnonymousId($visitor->getAnonymousId());
$this->sendTroubleshootingHit($troubleshooting);
}
@@ -464,28 +460,12 @@ protected function activateFlag(FlagDTO $flag, mixed $defaultValue = null): void
$visitor = $this->getVisitor();
$activateHit = new Activate($flag->getVariationGroupId(), $flag->getVariationId());
- $activateHit
- ->setFlagKey($flag->getKey())
- ->setFlagValue($flag->getValue())
- ->setFlagDefaultValue($defaultValue)
- ->setVisitorContext($visitor->getContext())
- ->setFlagMetadata($flagMetadata)
- ->setVisitorId($visitor->getVisitorId())
- ->setAnonymousId($visitor->getAnonymousId())
- ->setConfig($this->getConfig());
+ $activateHit->setFlagKey($flag->getKey())->setFlagValue($flag->getValue())->setFlagDefaultValue($defaultValue)->setVisitorContext($visitor->getContext())->setFlagMetadata($flagMetadata)->setVisitorId($visitor->getVisitorId())->setAnonymousId($visitor->getAnonymousId())->setConfig($this->getConfig());
$this->getTrackingManager()->activateFlag($activateHit);
$troubleshooting = new Troubleshooting();
- $troubleshooting->setLabel(TroubleshootingLabel::VISITOR_SEND_ACTIVATE)
- ->setLogLevel(LogLevel::INFO)
- ->setFlagshipInstanceId($this->getFlagshipInstanceId())
- ->setVisitorSessionId($visitor->getInstanceId())
- ->setHitContent($activateHit->toApiKeys())
- ->setTraffic($this->getVisitor()->getTraffic())
- ->setVisitorId($visitor->getVisitorId())
- ->setAnonymousId($visitor->getAnonymousId())
- ->setConfig($this->getConfig());
+ $troubleshooting->setLabel(TroubleshootingLabel::VISITOR_SEND_ACTIVATE)->setLogLevel(LogLevel::INFO)->setFlagshipInstanceId($this->getFlagshipInstanceId())->setVisitorSessionId($visitor->getInstanceId())->setHitContent($activateHit->toApiKeys())->setTraffic($this->getVisitor()->getTraffic())->setVisitorId($visitor->getVisitorId())->setAnonymousId($visitor->getAnonymousId())->setConfig($this->getConfig());
$this->sendTroubleshootingHit($troubleshooting);
}
@@ -493,18 +473,7 @@ private function sendFlagTroubleshooting($label, $key, $defaultValue, $visitorEx
{
$visitor = $this->getVisitor();
$troubleshooting = new Troubleshooting();
- $troubleshooting->setLabel($label)
- ->setLogLevel(LogLevel::WARNING)
- ->setVisitorSessionId($visitor->getInstanceId())
- ->setFlagshipInstanceId($this->getFlagshipInstanceId())
- ->setTraffic($visitor->getTraffic())
- ->setVisitorContext($visitor->getContext())
- ->setFlagKey($key)
- ->setFlagDefault($defaultValue)
- ->setVisitorExposed($visitorExposed)
- ->setVisitorId($visitor->getVisitorId())
- ->setAnonymousId($visitor->getAnonymousId())
- ->setConfig($this->getConfig());
+ $troubleshooting->setLabel($label)->setLogLevel(LogLevel::WARNING)->setVisitorSessionId($visitor->getInstanceId())->setFlagshipInstanceId($this->getFlagshipInstanceId())->setTraffic($visitor->getTraffic())->setVisitorContext($visitor->getContext())->setFlagKey($key)->setFlagDefault($defaultValue)->setVisitorExposed($visitorExposed)->setVisitorId($visitor->getVisitorId())->setAnonymousId($visitor->getAnonymousId())->setConfig($this->getConfig());
$this->sendTroubleshootingHit($troubleshooting);
}
@@ -559,6 +528,7 @@ public function visitorExposed(
$defaultValue,
true
);
+ return;
}
if (
@@ -581,6 +551,7 @@ public function visitorExposed(
$defaultValue,
true
);
+ return;
}
$this->activateFlag($flag, $defaultValue);
diff --git a/src/Visitor/PanicStrategy.php b/src/Visitor/PanicStrategy.php
index 3c7eda85..e31e820f 100644
--- a/src/Visitor/PanicStrategy.php
+++ b/src/Visitor/PanicStrategy.php
@@ -70,7 +70,7 @@ public function sendHit(HitAbstract $hit): void
public function getFlagValue(
string $key,
float|array|bool|int|string|null $defaultValue,
- FlagDTO $flag = null,
+ FlagDTO|null $flag = null,
bool $userExposed = true
): float|int|bool|array|string|null {
$this->log(__FUNCTION__);
@@ -83,7 +83,7 @@ public function getFlagValue(
public function visitorExposed(
$key,
float|array|bool|int|string|null $defaultValue,
- FlagDTO $flag = null,
+ FlagDTO|null $flag = null,
bool $hasGetValueBeenCalled = false
): void {
$this->log(__FUNCTION__);
diff --git a/src/Visitor/StrategyAbstract.php b/src/Visitor/StrategyAbstract.php
index d7ebc0ee..e70c1fca 100644
--- a/src/Visitor/StrategyAbstract.php
+++ b/src/Visitor/StrategyAbstract.php
@@ -4,23 +4,24 @@
use DateTime;
use Exception;
-use Flagship\Api\TrackingManagerAbstract;
-use Flagship\Config\BucketingConfig;
-use Flagship\Config\FlagshipConfig;
-use Flagship\Decision\DecisionManagerAbstract;
-use Flagship\Enum\FlagshipConstant;
-use Flagship\Enum\FlagshipField;
-use Flagship\Enum\LogLevel;
-use Flagship\Enum\TroubleshootingLabel;
use Flagship\Hit\UsageHit;
-use Flagship\Hit\Troubleshooting;
+use Flagship\Enum\LogLevel;
use Flagship\Model\FlagDTO;
-use Flagship\Model\TroubleshootingData;
-use Flagship\Traits\HasSameTypeTrait;
use Flagship\Traits\Helper;
-use Flagship\Traits\ValidatorTrait;
-use Flagship\Utils\ConfigManager;
use Flagship\Utils\MurmurHash;
+use Flagship\Enum\FlagshipField;
+use Flagship\Hit\Troubleshooting;
+use Flagship\Utils\ConfigManager;
+use Flagship\Config\FlagshipConfig;
+use Flagship\Enum\FlagshipConstant;
+use Flagship\Traits\ValidatorTrait;
+use Flagship\Config\BucketingConfig;
+use Flagship\Enum\VisitorCacheStatus;
+use Flagship\Traits\HasSameTypeTrait;
+use Flagship\Enum\TroubleshootingLabel;
+use Flagship\Model\TroubleshootingData;
+use Flagship\Api\TrackingManagerAbstract;
+use Flagship\Decision\DecisionManagerAbstract;
/**
*
@@ -146,6 +147,8 @@ protected function getDecisionManager(): DecisionManagerAbstract
return $this->getConfigManager()->getDecisionManager();
}
+ abstract protected function updateContextKeyValue(string $key, mixed $value): void;
+
/**
* @throws Exception
@@ -159,7 +162,7 @@ private function checkLookupVisitorDataV1(array $item): bool
$data = $item[self::DATA];
$visitorId = $data[self::VISITOR_ID];
- if ($visitorId !== $this->getVisitor()->getVisitorId()) {
+ if ($visitorId !== $this->getVisitor()->getVisitorId() && $visitorId !== $this->getVisitor()->getAnonymousId()) {
throw new Exception(sprintf(
self::VISITOR_ID_MISMATCH_ERROR,
$visitorId,
@@ -168,12 +171,12 @@ private function checkLookupVisitorDataV1(array $item): bool
}
if (!isset($data[self::CAMPAIGNS])) {
- return true;
+ return false;
}
$campaigns = $data[self::CAMPAIGNS];
if (!is_array($campaigns)) {
- return false;
+ return false;
}
foreach ($campaigns as $item) {
@@ -219,13 +222,42 @@ public function lookupVisitor(): void
return;
}
+ $visitor = $this->getVisitor();
+
+ $visitor->setVisitorCacheStatus(VisitorCacheStatus::NONE);
+
$visitorCache = $visitorCacheInstance->lookupVisitor($this->visitor->getVisitorId());
+ $hasVisitorCache = is_array($visitorCache) && count($visitorCache) > 0;
+
+ if ($hasVisitorCache) {
+ $visitor->setVisitorCacheStatus(VisitorCacheStatus::VISITOR_ID_CACHE);
+ }
+
+ if (!$hasVisitorCache && $visitor->getAnonymousId()) {
+ $visitorCache = $visitorCacheInstance->lookupVisitor($this->visitor->getAnonymousId());
+ if ($visitorCache) {
+ $visitor->setVisitorCacheStatus(VisitorCacheStatus::ANONYMOUS_ID_CACHE);
+ }
+ }
+
+ if ($visitor->getVisitorCacheStatus() === VisitorCacheStatus::NONE) {
+ $visitor->visitorCache = [];
+ return;
+ }
if (!$this->checkLookupVisitorData($visitorCache)) {
throw new Exception(self::LOOKUP_VISITOR_JSON_OBJECT_ERROR);
}
- $this->getVisitor()->visitorCache = $visitorCache;
+ $visitor->visitorCache = $visitorCache;
+
+
+ if ($visitor->getVisitorCacheStatus() === VisitorCacheStatus::VISITOR_ID_CACHE && $visitor->getAnonymousId()) {
+ $visitorCache = $visitorCacheInstance->lookupVisitor($this->visitor->getAnonymousId());
+ if (is_array($visitorCache) && count($visitorCache) > 0) {
+ $visitor->setVisitorCacheStatus(VisitorCacheStatus::VISITOR_ID_CACHE_WITH_ANONYMOUS_ID_CACHE);
+ }
+ }
} catch (Exception $exception) {
$this->logError($this->getConfig(), $exception->getMessage(), [FlagshipConstant::TAG => __FUNCTION__]);
}
@@ -250,19 +282,18 @@ public function cacheVisitor(): void
foreach ($visitor->campaigns as $campaign) {
$variation = $campaign[FlagshipField::FIELD_VARIATION];
$modifications = $variation[FlagshipField::FIELD_MODIFICATIONS];
- $assignmentsHistory[$campaign[FlagshipField::FIELD_VARIATION_GROUP_ID]] =
- $variation[FlagshipField::FIELD_ID];
+ $assignmentsHistory[$campaign[FlagshipField::FIELD_VARIATION_GROUP_ID]] = $variation[FlagshipField::FIELD_ID];
$campaigns[] = [
- FlagshipField::FIELD_CAMPAIGN_ID => $campaign[FlagshipField::FIELD_ID],
- FlagshipField::FIELD_SLUG => $campaign[FlagshipField::FIELD_SLUG] ?? null,
- FlagshipField::FIELD_VARIATION_GROUP_ID => $campaign[FlagshipField::FIELD_VARIATION_GROUP_ID],
- FlagshipField::FIELD_VARIATION_ID => $variation[FlagshipField::FIELD_ID],
- FlagshipField::FIELD_IS_REFERENCE => $variation[FlagshipField::FIELD_REFERENCE],
- FlagshipField::FIELD_CAMPAIGN_TYPE => $modifications[FlagshipField::FIELD_CAMPAIGN_TYPE],
- self::ACTIVATED => false,
- self::FLAGS => $modifications[FlagshipField::FIELD_VALUE],
- ];
+ FlagshipField::FIELD_CAMPAIGN_ID => $campaign[FlagshipField::FIELD_ID],
+ FlagshipField::FIELD_SLUG => $campaign[FlagshipField::FIELD_SLUG] ?? null,
+ FlagshipField::FIELD_VARIATION_GROUP_ID => $campaign[FlagshipField::FIELD_VARIATION_GROUP_ID],
+ FlagshipField::FIELD_VARIATION_ID => $variation[FlagshipField::FIELD_ID],
+ FlagshipField::FIELD_IS_REFERENCE => $variation[FlagshipField::FIELD_REFERENCE],
+ FlagshipField::FIELD_CAMPAIGN_TYPE => $modifications[FlagshipField::FIELD_CAMPAIGN_TYPE],
+ self::ACTIVATED => false,
+ self::FLAGS => $modifications[FlagshipField::FIELD_VALUE],
+ ];
}
if (
@@ -279,23 +310,39 @@ public function cacheVisitor(): void
}
$data = [
- self::VERSION => self::CURRENT_VERSION,
- self::DATA => [
- self::VISITOR_ID => $visitor->getVisitorId(),
- self::ANONYMOUS_ID => $visitor->getAnonymousId(),
- self::CONSENT => $visitor->hasConsented(),
- self::CONTEXT => $visitor->getContext(),
- self::CAMPAIGNS => $campaigns,
- self::ASSIGNMENTS_HISTORY => $assignmentsHistory,
- ],
- ];
+ self::VERSION => self::CURRENT_VERSION,
+ self::DATA => [
+ self::VISITOR_ID => $visitor->getVisitorId(),
+ self::ANONYMOUS_ID => $visitor->getAnonymousId(),
+ self::CONSENT => $visitor->hasConsented(),
+ self::CONTEXT => $visitor->getContext(),
+ self::CAMPAIGNS => $campaigns,
+ self::ASSIGNMENTS_HISTORY => $assignmentsHistory,
+ ],
+ ];
$visitorCacheInstance->cacheVisitor($visitor->getVisitorId(), $data);
+ if ($visitor->getAnonymousId() && ($visitor->getVisitorCacheStatus() === VisitorCacheStatus::NONE ||
+ $visitor->getVisitorCacheStatus() === VisitorCacheStatus::VISITOR_ID_CACHE)) {
+ $anonymousData = [
+ self::VERSION => self::CURRENT_VERSION,
+ self::DATA => [
+ self::VISITOR_ID => $visitor->getAnonymousId(),
+ self::ANONYMOUS_ID => null,
+ self::CONSENT => $visitor->hasConsented(),
+ self::CONTEXT => $visitor->getContext(),
+ self::CAMPAIGNS => $campaigns,
+ self::ASSIGNMENTS_HISTORY => $assignmentsHistory,
+ ],
+ ];
+ $visitorCacheInstance->cacheVisitor($visitor->getAnonymousId(), $anonymousData);
+ }
+
$visitor->visitorCache = $data;
} catch (Exception $exception) {
$this->logError($this->getConfig(), $exception->getMessage(), [FlagshipConstant::TAG => __FUNCTION__]);
- }//end try
+ } //end try
}
@@ -351,21 +398,7 @@ public function sendSdkConfigAnalyticHit(): void
$fetchThirdPartyData = $config->getFetchThirdPartyData();
}
$analytic = new UsageHit();
- $analytic->setLabel(TroubleshootingLabel::SDK_CONFIG)
- ->setLogLevel(LogLevel::INFO)
- ->setSdkConfigMode($config->getDecisionMode())
- ->setSdkConfigLogLevel($config->getLogLevel())
- ->setSdkConfigTimeout($config->getTimeout())
- ->setSdkConfigTrackingManagerConfigStrategy($config->getCacheStrategy())
- ->setSdkConfigBucketingUrl($bucketingUrl)
- ->setSdkConfigFetchThirdPartyData($fetchThirdPartyData)
- ->setSdkConfigUsingOnVisitorExposed(!!$config->getOnVisitorExposed())
- ->setSdkConfigUsingCustomHitCache(!!$config->getHitCacheImplementation())
- ->setSdkConfigUsingCustomVisitorCache(!!$config->getVisitorCacheImplementation())
- ->setSdkStatus($visitor->getSdkStatus())
- ->setFlagshipInstanceId($this->getFlagshipInstanceId())
- ->setVisitorId($this->getFlagshipInstanceId())
- ->setConfig($config);
+ $analytic->setLabel(TroubleshootingLabel::SDK_CONFIG)->setLogLevel(LogLevel::INFO)->setSdkConfigMode($config->getDecisionMode())->setSdkConfigLogLevel($config->getLogLevel())->setSdkConfigTimeout($config->getTimeout())->setSdkConfigTrackingManagerConfigStrategy($config->getCacheStrategy())->setSdkConfigBucketingUrl($bucketingUrl)->setSdkConfigFetchThirdPartyData($fetchThirdPartyData)->setSdkConfigUsingOnVisitorExposed(!!$config->getOnVisitorExposed())->setSdkConfigUsingCustomHitCache(!!$config->getHitCacheImplementation())->setSdkConfigUsingCustomVisitorCache(!!$config->getVisitorCacheImplementation())->setSdkStatus($visitor->getSdkStatus())->setFlagshipInstanceId($this->getFlagshipInstanceId())->setVisitorId($this->getFlagshipInstanceId())->setConfig($config);
$this->getTrackingManager()->addUsageHit($analytic);
}
@@ -404,32 +437,7 @@ public function sendFetchFlagsTroubleshooting(
$visitor->setTraffic($traffic);
$troubleshootingHit = new Troubleshooting();
- $troubleshootingHit->setLabel(TroubleshootingLabel::VISITOR_FETCH_CAMPAIGNS)
- ->setLogLevel(LogLevel::INFO)
- ->setVisitorSessionId($visitor->getInstanceId())
- ->setFlagshipInstanceId($visitor->getFlagshipInstanceId())
- ->setTraffic($traffic)
- ->setVisitorAssignmentHistory($assignmentHistory)
- ->setVisitorContext($visitor->getContext())
- ->setSdkStatus($visitor->getSdkStatus())
- ->setVisitorCampaigns($campaigns)
- ->setFlagshipInstanceId($this->getFlagshipInstanceId())
- ->setVisitorFlags($flagsDTO)
- ->setVisitorConsent($visitor->hasConsented())
- ->setVisitorIsAuthenticated(!!$visitor->getAnonymousId())
- ->setHttpResponseTime(($this->getNow() - $now))
- ->setSdkConfigMode($config->getDecisionMode())
- ->setSdkConfigLogLevel($config->getLogLevel())
- ->setSdkConfigTimeout($config->getTimeout())
- ->setSdkConfigBucketingUrl($bucketingUrl)
- ->setSdkConfigFetchThirdPartyData($fetchThirdPartyData)
- ->setSdkConfigUsingOnVisitorExposed(!!$config->getOnVisitorExposed())
- ->setSdkConfigUsingCustomHitCache(!!$config->getHitCacheImplementation())
- ->setSdkConfigUsingCustomVisitorCache(!!$config->getVisitorCacheImplementation())
- ->setSdkConfigTrackingManagerConfigStrategy($config->getCacheStrategy())
- ->setVisitorId($visitor->getVisitorId())
- ->setAnonymousId($visitor->getAnonymousId())
- ->setConfig($config);
+ $troubleshootingHit->setLabel(TroubleshootingLabel::VISITOR_FETCH_CAMPAIGNS)->setLogLevel(LogLevel::INFO)->setVisitorSessionId($visitor->getInstanceId())->setFlagshipInstanceId($visitor->getFlagshipInstanceId())->setTraffic($traffic)->setVisitorAssignmentHistory($assignmentHistory)->setVisitorContext($visitor->getContext())->setSdkStatus($visitor->getSdkStatus())->setVisitorCampaigns($campaigns)->setFlagshipInstanceId($this->getFlagshipInstanceId())->setVisitorFlags($flagsDTO)->setVisitorConsent($visitor->hasConsented())->setVisitorIsAuthenticated(!!$visitor->getAnonymousId())->setHttpResponseTime(($this->getNow() - $now))->setSdkConfigMode($config->getDecisionMode())->setSdkConfigLogLevel($config->getLogLevel())->setSdkConfigTimeout($config->getTimeout())->setSdkConfigBucketingUrl($bucketingUrl)->setSdkConfigFetchThirdPartyData($fetchThirdPartyData)->setSdkConfigUsingOnVisitorExposed(!!$config->getOnVisitorExposed())->setSdkConfigUsingCustomHitCache(!!$config->getHitCacheImplementation())->setSdkConfigUsingCustomVisitorCache(!!$config->getVisitorCacheImplementation())->setSdkConfigTrackingManagerConfigStrategy($config->getCacheStrategy())->setVisitorId($visitor->getVisitorId())->setAnonymousId($visitor->getAnonymousId())->setConfig($config);
$this->sendTroubleshootingHit($troubleshootingHit);
}
@@ -454,4 +462,5 @@ public function initialContext(array $context): void
$this->updateContextKeyValue($itemKey, $item);
}
}
+
}
diff --git a/src/Visitor/VisitorAbstract.php b/src/Visitor/VisitorAbstract.php
index b24a963e..c7b3a9ef 100644
--- a/src/Visitor/VisitorAbstract.php
+++ b/src/Visitor/VisitorAbstract.php
@@ -15,6 +15,7 @@
use Flagship\Traits\ValidatorTrait;
use Flagship\Utils\ContainerInterface;
use Flagship\Model\FetchFlagsStatusInterface;
+use Flagship\Enum\visitorCacheStatus;
abstract class VisitorAbstract implements VisitorInterface, JsonSerializable, VisitorFlagInterface
{
@@ -107,6 +108,33 @@ abstract class VisitorAbstract implements VisitorInterface, JsonSerializable, Vi
*/
protected FetchFlagsStatusInterface $fetchStatus;
+ protected bool $hasContextBeenUpdated = true;
+
+ public function setHasContextBeenUpdated(bool $hasContextBeenUpdated): static
+ {
+ $this->hasContextBeenUpdated = $hasContextBeenUpdated;
+ return $this;
+ }
+
+ public function getHasContextBeenUpdated(): bool
+ {
+ return $this->hasContextBeenUpdated;
+ }
+
+ protected visitorCacheStatus $visitorCacheStatus;
+
+ public function getVisitorCacheStatus(): visitorCacheStatus
+ {
+ return $this->visitorCacheStatus;
+ }
+
+ public function setVisitorCacheStatus(visitorCacheStatus $visitorCacheStatus): static
+ {
+ $this->visitorCacheStatus = $visitorCacheStatus;
+ return $this;
+ }
+ protected array $deDuplicationCache = [];
+
/**
* @return callable
*/
@@ -432,9 +460,9 @@ public function sendTroubleshootingHit(Troubleshooting $hit): void
public function jsonSerialize(): mixed
{
return [
- 'visitorId' => $this->getVisitorId(),
- 'context' => $this->getContext(),
- 'hasConsent' => $this->hasConsented(),
- ];
+ 'visitorId' => $this->getVisitorId(),
+ 'context' => $this->getContext(),
+ 'hasConsent' => $this->hasConsented(),
+ ];
}
}
diff --git a/src/Visitor/VisitorBuilder.php b/src/Visitor/VisitorBuilder.php
index ac436f53..d3468b8e 100644
--- a/src/Visitor/VisitorBuilder.php
+++ b/src/Visitor/VisitorBuilder.php
@@ -136,15 +136,15 @@ public function setOnFetchFlagsStatusChanged(callable $onFetchFlagsStatusChanged
public function build(): VisitorInterface
{
$visitorDelegate = $this->dependencyIContainer->get(VisitorDelegate::class, [
- $this->dependencyIContainer,
- $this->configManager,
- $this->visitorId,
- $this->isAuthenticated,
- $this->context,
- $this->hasConsented,
- $this->flagshipInstance,
- $this->onFetchFlagsStatusChanged
- ], true);
+ $this->dependencyIContainer,
+ $this->configManager,
+ $this->visitorId,
+ $this->isAuthenticated,
+ $this->context,
+ $this->hasConsented,
+ $this->flagshipInstance,
+ $this->onFetchFlagsStatusChanged,
+ ], true);
$visitorDelegate->setFlagshipInstanceId($this->flagshipInstance);
diff --git a/src/Visitor/VisitorDelegate.php b/src/Visitor/VisitorDelegate.php
index 6c7563e8..ad90e545 100644
--- a/src/Visitor/VisitorDelegate.php
+++ b/src/Visitor/VisitorDelegate.php
@@ -61,7 +61,6 @@ public function __construct(
}
$this->setConsent($hasConsented);
- $this->getStrategy()->lookupVisitor();
$this->setFetchStatus(new FetchFlagsStatus(FSFetchStatus::FETCH_REQUIRED, FSFetchReason::VISITOR_CREATED));
}
@@ -128,6 +127,7 @@ public function sendHit(HitAbstract $hit): void
public function fetchFlags(): void
{
+ $this->getStrategy()->lookupVisitor();
$this->getStrategy()->fetchFlags();
$this->getStrategy()->cacheVisitor();
}
@@ -181,7 +181,10 @@ public function getFlag(string $key): FSFlagInterface
$this->getConfig(),
FlagshipConstant::GET_FLAG,
$this->flagSyncStatusMessage($fetchFlagsStatus->getReason()),
- [$this->getVisitorId(), $key]
+ [
+ $this->getVisitorId(),
+ $key,
+ ]
);
}
return new FSFlag($key, $this);
diff --git a/tests/Api/BatchingOnFailedCachingStrategyTest.php b/tests/Api/BatchingOnFailedCachingStrategyTest.php
index 0b5ff150..f0a1eedc 100644
--- a/tests/Api/BatchingOnFailedCachingStrategyTest.php
+++ b/tests/Api/BatchingOnFailedCachingStrategyTest.php
@@ -8,28 +8,29 @@
use DateTime;
use Exception;
-use Flagship\Config\DecisionApiConfig;
-use Flagship\Enum\EventCategory;
-use Flagship\Enum\FlagshipConstant;
-use Flagship\Enum\HitCacheFields;
-use Flagship\Enum\LogLevel;
-use Flagship\Enum\TroubleshootingLabel;
-use Flagship\Flag\FSFlagMetadata;
+use Flagship\Hit\Page;
+use Flagship\Hit\Event;
+use Flagship\Hit\Screen;
use Flagship\Hit\Activate;
-use Flagship\Hit\ActivateBatch;
+use Flagship\Hit\HitBatch;
use Flagship\Hit\UsageHit;
-use Flagship\Hit\Event;
+use Flagship\Enum\LogLevel;
use Flagship\Hit\HitAbstract;
-use Flagship\Hit\HitBatch;
-use Flagship\Hit\Page;
-use Flagship\Hit\Screen;
-use Flagship\Hit\Troubleshooting;
+use Flagship\Traits\LogTrait;
+use Flagship\Hit\ActivateBatch;
use Flagship\Model\ExposedFlag;
+use PHPUnit\Framework\TestCase;
+use Flagship\Enum\EventCategory;
+use Flagship\Enum\HitCacheFields;
+use Flagship\Flag\FSFlagMetadata;
+use Flagship\Hit\Troubleshooting;
use Flagship\Model\ExposedVisitor;
+use Flagship\Enum\FlagshipConstant;
+use Flagship\Config\DecisionApiConfig;
+use Flagship\Enum\TroubleshootingLabel;
use Flagship\Model\TroubleshootingData;
-use Flagship\Traits\LogTrait;
use Flagship\Utils\HttpClientInterface;
-use PHPUnit\Framework\TestCase;
+use PHPUnit\Framework\MockObject\MockObject;
class BatchingOnFailedCachingStrategyTest extends TestCase
{
@@ -56,10 +57,10 @@ public function testGeneralMethods()
//Test getActivateHeaders
$activateHeaders = [
- FlagshipConstant::HEADER_X_API_KEY => $config->getApiKey(),
+ FlagshipConstant::HEADER_X_API_KEY => $config->getApiKey(),
FlagshipConstant::HEADER_X_SDK_VERSION => FlagshipConstant::SDK_VERSION,
- FlagshipConstant::HEADER_CONTENT_TYPE => FlagshipConstant::HEADER_APPLICATION_JSON,
- FlagshipConstant::HEADER_X_SDK_CLIENT => FlagshipConstant::SDK_LANGUAGE,
+ FlagshipConstant::HEADER_CONTENT_TYPE => FlagshipConstant::HEADER_APPLICATION_JSON,
+ FlagshipConstant::HEADER_X_SDK_CLIENT => FlagshipConstant::SDK_LANGUAGE,
];
$this->assertSame($activateHeaders, $strategy->getActivateHeaders());
@@ -81,21 +82,26 @@ public function testAddHit()
$strategy = $this->getMockForAbstractClass(
BatchingOnFailedCachingStrategy::class,
- [$config, $httpClientMock],
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
true,
true,
- ["cacheHit","flushHits","flushAllHits"]
+ [
+ "cacheHit",
+ "flushHits",
+ "flushAllHits",
+ ]
);
$strategy->expects($this->never())->method("cacheHit");
- $strategy->expects($this->never())
- ->method("flushAllHits");
+ $strategy->expects($this->never())->method("flushAllHits");
- $strategy->expects($this->once())
- ->method("flushHits")->with([$page3Key, $activate3Key]);
+ $strategy->expects($this->once())->method("flushHits")->with([$page3Key, $activate3Key]);
$page = new Page("http://localhost");
@@ -109,17 +115,17 @@ public function testAddHit()
$strategy->addHit($page2);
$contentPage3 = [
- 'pageUrl' => 'page1',
- 'visitorId' => $visitorId,
- 'ds' => 'APP',
- 'type' => "PAGEVIEW",
- 'anonymousId' => null,
- 'userIP' => null,
+ 'pageUrl' => 'page1',
+ 'visitorId' => $visitorId,
+ 'ds' => 'APP',
+ 'type' => "PAGEVIEW",
+ 'anonymousId' => null,
+ 'userIP' => null,
'pageResolution' => null,
- 'locale' => null,
- 'sessionNumber' => null,
- 'key' => $page3Key,
- 'createdAt' => 1676542078047,
+ 'locale' => null,
+ 'sessionNumber' => null,
+ 'key' => $page3Key,
+ 'createdAt' => 1676542078047,
];
$page3 = HitAbstract::hydrate(Page::getClassName(), $contentPage3);
@@ -139,17 +145,17 @@ public function testAddHit()
$contentActivate = [
'variationGroupId' => 'cagt08da51hg0787cns0',
- 'variationId' => 'cagt08da51hg0787cnt0',
- 'visitorId' => $visitorId,
- 'ds' => 'APP',
- 'type' => 'ACTIVATE',
- 'anonymousId' => null,
- 'userIP' => null,
- 'pageResolution' => null,
- 'locale' => null,
- 'sessionNumber' => null,
- 'key' => $activate3Key,
- 'createdAt' => 1676542078044,
+ 'variationId' => 'cagt08da51hg0787cnt0',
+ 'visitorId' => $visitorId,
+ 'ds' => 'APP',
+ 'type' => 'ACTIVATE',
+ 'anonymousId' => null,
+ 'userIP' => null,
+ 'pageResolution' => null,
+ 'locale' => null,
+ 'sessionNumber' => null,
+ 'key' => $activate3Key,
+ 'createdAt' => 1676542078044,
];
$activate3 = HitAbstract::hydrate(Activate::getClassName(), $contentActivate);
@@ -198,7 +204,7 @@ public function testAddHit()
$this->assertContains($activate2, $strategy->getActivatePoolQueue());
$this->assertCount(1, $strategy->getActivatePoolQueue());
-// //Test consent hit false when no hits for visitorId exist HitsPoolQueue
+ // //Test consent hit false when no hits for visitorId exist HitsPoolQueue
$strategy->addHit($consentHit);
$this->assertCount(4, $strategy->getHitsPoolQueue());
@@ -223,14 +229,25 @@ public function testSendActivateHit()
$activate2 = new Activate("varGrId", "VarId");
$activate2->setConfig($config)->setVisitorId($visitorId);
+ /**
+ * @var BatchingOnFailedCachingStrategy|MockObject $strategy
+ */
$strategy = $this->getMockForAbstractClass(
- "Flagship\Api\BatchingOnFailedCachingStrategy",
- [$config, $httpClientMock],
+ BatchingOnFailedCachingStrategy::class,
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
true,
true,
- ["flushHits","logDebugSprintf","cacheHit", "getNow"]
+ [
+ "flushHits",
+ "logDebugSprintf",
+ "cacheHit",
+ "getNow",
+ ]
);
$strategy->activateFlag($activate);
@@ -240,17 +257,17 @@ public function testSendActivateHit()
$contentActivate = [
'variationGroupId' => 'cagt08da51hg0787cns0',
- 'variationId' => 'cagt08da51hg0787cnt0',
- 'visitorId' => $visitorId,
- 'ds' => 'APP',
- 'type' => 'ACTIVATE',
- 'anonymousId' => null,
- 'userIP' => null,
- 'pageResolution' => null,
- 'locale' => null,
- 'sessionNumber' => null,
- 'key' => $activate3Key,
- 'createdAt' => 1676542078044,
+ 'variationId' => 'cagt08da51hg0787cnt0',
+ 'visitorId' => $visitorId,
+ 'ds' => 'APP',
+ 'type' => 'ACTIVATE',
+ 'anonymousId' => null,
+ 'userIP' => null,
+ 'pageResolution' => null,
+ 'locale' => null,
+ 'sessionNumber' => null,
+ 'key' => $activate3Key,
+ 'createdAt' => 1676542078044,
];
$activate3 = HitAbstract::hydrate(Activate::getClassName(), $contentActivate);
@@ -262,15 +279,11 @@ public function testSendActivateHit()
$requestBody = $activateBatch->toApiKeys();
- $httpClientMock->expects($this->once())->method("post")
- ->with($url, [], $requestBody);
+ $httpClientMock->expects($this->once())->method("post")->with($url, [], $requestBody);
$headers = $strategy->getActivateHeaders();
- $strategy
- ->expects($this->exactly(1))
- ->method("flushHits")
- ->with([$activate3Key]);
+ $strategy->expects($this->exactly(1))->method("flushHits")->with([$activate3Key]);
$logMessage = $this->getLogFormat(
null,
@@ -280,13 +293,15 @@ public function testSendActivateHit()
0
);
- $strategy->expects($this->once())->method("logDebugSprintf")
- ->with(
- $config,
- FlagshipConstant::TRACKING_MANAGER,
- FlagshipConstant::HIT_SENT_SUCCESS,
- [FlagshipConstant::SEND_ACTIVATE, $logMessage ]
- );
+ $strategy->expects($this->once())->method("logDebugSprintf")->with(
+ $config,
+ FlagshipConstant::TRACKING_MANAGER,
+ FlagshipConstant::HIT_SENT_SUCCESS,
+ [
+ FlagshipConstant::SEND_ACTIVATE,
+ $logMessage,
+ ]
+ );
$this->assertCount(3, $strategy->getActivatePoolQueue());
@@ -295,6 +310,61 @@ public function testSendActivateHit()
$this->assertCount(0, $strategy->getActivatePoolQueue());
}
+ public function testSendActivateBatch()
+ {
+ $config = new DecisionApiConfig();
+ $visitorId = "visitorId";
+
+ $httpClientMock = $this->getMockForAbstractClass(HttpClientInterface::class);
+
+ $url = FlagshipConstant::BASE_API_URL . '/' . FlagshipConstant::URL_ACTIVATE_MODIFICATION;
+
+ /**
+ * @var BatchingOnFailedCachingStrategy|MockObject $strategy
+ */
+ $strategy = $this->getMockForAbstractClass(
+ BatchingOnFailedCachingStrategy::class,
+ [
+ $config,
+ $httpClientMock,
+ ],
+ "",
+ true,
+ true,
+ true,
+ [
+ "flushHits",
+ "logDebugSprintf",
+ "cacheHit",
+ "getNow",
+ ]
+ );
+
+ $activates = [];
+
+ for ($i = 0; $i < 300; $i++) {
+ $activate = new Activate("varGrId", "VarId");
+ $activate->setConfig($config)->setVisitorId($visitorId);
+ $strategy->activateFlag($activate);
+ $activates[] = $activate;
+ }
+
+ $chunkedActivates = array_chunk($activates, FlagshipConstant::MAX_ACTIVATE_HIT_PER_BATCH);
+ $baches = [];
+
+ foreach ($chunkedActivates as $chunk) {
+ $baches[] = (new ActivateBatch($config, $chunk))->toApiKeys();
+ }
+
+ $httpClientMock->expects($this->exactly(3))->method("post")->with($url, [], $this->logicalOr(
+ $baches[0],
+ $baches[1],
+ $baches[2]
+ ));
+
+ $strategy->sendBatch();
+ }
+
public function testOnUserExposed()
{
$config = new DecisionApiConfig();
@@ -330,13 +400,7 @@ public function testOnUserExposed()
$variationName1
);
- $activate->setConfig($config)
- ->setVisitorId($visitorId)
- ->setVisitorContext($context)
- ->setFlagKey($flagKey1)
- ->setFlagValue($flagValue1)
- ->setFlagDefaultValue($flagDefaultValue1)
- ->setFlagMetadata($flagMetadata1);
+ $activate->setConfig($config)->setVisitorId($visitorId)->setVisitorContext($context)->setFlagKey($flagKey1)->setFlagValue($flagValue1)->setFlagDefaultValue($flagDefaultValue1)->setFlagMetadata($flagMetadata1);
$variationGroupId2 = "variationGroupId2";
$variationGroupName2 = "variationGroupName2";
@@ -361,22 +425,24 @@ public function testOnUserExposed()
);
$activate2 = new Activate($variationGroupId2, $variationId2);
- $activate2->setConfig($config)
- ->setVisitorId($visitorId)
- ->setVisitorContext($context)
- ->setFlagKey($flagKey2)
- ->setFlagValue($flagValue2)
- ->setFlagDefaultValue($flagDefaultValue2)
- ->setFlagMetadata($flagMetadata2);
+ $activate2->setConfig($config)->setVisitorId($visitorId)->setVisitorContext($context)->setFlagKey($flagKey2)->setFlagValue($flagValue2)->setFlagDefaultValue($flagDefaultValue2)->setFlagMetadata($flagMetadata2);
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\BatchingOnFailedCachingStrategy",
- [$config, $httpClientMock],
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
true,
true,
- ["flushHits","logDebugSprintf","cacheHit", "logErrorSprintf"]
+ [
+ "flushHits",
+ "logDebugSprintf",
+ "cacheHit",
+ "logErrorSprintf",
+ ]
);
$strategy->activateFlag($activate);
@@ -386,8 +452,7 @@ public function testOnUserExposed()
$requestBody = $activateBatch->toApiKeys();
- $httpClientMock->expects($this->once())->method("post")
- ->with($url, [], $requestBody);
+ $httpClientMock->expects($this->once())->method("post")->with($url, [], $requestBody);
$check1 = false;
$check2 = false;
@@ -416,10 +481,10 @@ public function testOnUserExposed()
$check1 = $exposedUser->getId() === $visitorId &&
$exposedUser->getAnonymousId() === null &&
$exposedUser->getContext() === $context &&
- $exposedFlag->getValue() === $flagValue1 &&
- $exposedFlag->getKey() === $flagKey1 &&
- $exposedFlag->getMetadata() === $flagMetadata1 &&
- $exposedFlag->getDefaultValue() === $flagDefaultValue1;
+ $exposedFlag->getValue() === $flagValue1 &&
+ $exposedFlag->getKey() === $flagKey1 &&
+ $exposedFlag->getMetadata() === $flagMetadata1 &&
+ $exposedFlag->getDefaultValue() === $flagDefaultValue1;
} else {
$check2 = $exposedUser->getId() === $visitorId &&
$exposedUser->getAnonymousId() === null &&
@@ -427,7 +492,7 @@ public function testOnUserExposed()
$exposedFlag->getValue() === $flagValue2 &&
$exposedFlag->getKey() === $flagKey2 &&
$exposedFlag->getMetadata() === $flagMetadata2 &&
- $exposedFlag->getDefaultValue() === $flagDefaultValue2;
+ $exposedFlag->getDefaultValue() === $flagDefaultValue2;
}
});
@@ -476,12 +541,7 @@ public function testOnUserExposedError()
$variationName1
);
- $activate->setConfig($config)
- ->setVisitorId($visitorId)
- ->setVisitorContext($context)
- ->setFlagKey($flagKey1)
- ->setFlagValue($flagValue1)
- ->setFlagMetadata($flagMetadata1);
+ $activate->setConfig($config)->setVisitorId($visitorId)->setVisitorContext($context)->setFlagKey($flagKey1)->setFlagValue($flagValue1)->setFlagMetadata($flagMetadata1);
$variationGroupId2 = "variationGroupId2";
$variationId2 = "variationId2";
@@ -505,21 +565,24 @@ public function testOnUserExposedError()
);
$activate2 = new Activate($variationGroupId2, $variationId2);
- $activate2->setConfig($config)
- ->setVisitorId($visitorId)
- ->setVisitorContext($context)
- ->setFlagKey($flagKey2)
- ->setFlagValue($flagValue2)
- ->setFlagMetadata($flagMetadata2);
+ $activate2->setConfig($config)->setVisitorId($visitorId)->setVisitorContext($context)->setFlagKey($flagKey2)->setFlagValue($flagValue2)->setFlagMetadata($flagMetadata2);
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\BatchingOnFailedCachingStrategy",
- [$config, $httpClientMock],
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
true,
true,
- ["flushHits","logDebugSprintf","cacheHit", "logErrorSprintf"]
+ [
+ "flushHits",
+ "logDebugSprintf",
+ "cacheHit",
+ "logErrorSprintf",
+ ]
);
$strategy->activateFlag($activate);
@@ -529,20 +592,18 @@ public function testOnUserExposedError()
$requestBody = $activateBatch->toApiKeys();
- $httpClientMock->expects($this->once())->method("post")
- ->with($url, [], $requestBody);
+ $httpClientMock->expects($this->once())->method("post")->with($url, [], $requestBody);
$count = 0;
$config->setOnVisitorExposed(function ()
- use (&$count) {
+ use (&$count) {
$exceptionMessage = "Message error";
$count++;
throw new Exception($exceptionMessage);
});
- $strategy->expects($this->exactly(2))
- ->method("logErrorSprintf");
+ $strategy->expects($this->exactly(2))->method("logErrorSprintf");
$this->assertCount(2, $strategy->getActivatePoolQueue());
@@ -571,12 +632,21 @@ public function testSendActivateHitFailed()
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\BatchingOnFailedCachingStrategy",
- [$config, $httpClientMock, "instanceId"],
+ [
+ $config,
+ $httpClientMock,
+ "instanceId",
+ ],
"",
true,
true,
true,
- ["flushHits","logErrorSprintf","cacheHit", "getNow"]
+ [
+ "flushHits",
+ "logErrorSprintf",
+ "cacheHit",
+ "getNow",
+ ]
);
$strategy->activateFlag($activate);
@@ -587,17 +657,11 @@ public function testSendActivateHitFailed()
$requestBody = $activateBatch->toApiKeys();
$exception = new Exception("activate error");
- $httpClientMock->expects($this->once())->method("post")
- ->with($url, [], $requestBody)->willThrowException($exception);
+ $httpClientMock->expects($this->once())->method("post")->with($url, [], $requestBody)->willThrowException($exception);
- $strategy
- ->expects($this->never())
- ->method("flushHits");
+ $strategy->expects($this->never())->method("flushHits");
- $strategy
- ->expects($this->once())
- ->method("cacheHit")
- ->with($this->countOf(2));
+ $strategy->expects($this->once())->method("cacheHit")->with($this->countOf(2));
$logMessage = $this->getLogFormat(
$exception->getMessage(),
@@ -607,13 +671,15 @@ public function testSendActivateHitFailed()
0
);
- $strategy->expects($this->once())->method("logErrorSprintf")
- ->with(
- $config,
- FlagshipConstant::TRACKING_MANAGER,
- FlagshipConstant::UNEXPECTED_ERROR_OCCURRED,
- [FlagshipConstant::SEND_ACTIVATE, $logMessage ]
- );
+ $strategy->expects($this->once())->method("logErrorSprintf")->with(
+ $config,
+ FlagshipConstant::TRACKING_MANAGER,
+ FlagshipConstant::UNEXPECTED_ERROR_OCCURRED,
+ [
+ FlagshipConstant::SEND_ACTIVATE,
+ $logMessage,
+ ]
+ );
$this->assertCount(2, $strategy->getActivatePoolQueue());
@@ -640,12 +706,22 @@ public function testSendBatch()
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\BatchingOnFailedCachingStrategy",
- [$config, $httpClientMock, "instanceId"],
+ [
+ $config,
+ $httpClientMock,
+ "instanceId",
+ ],
"",
true,
true,
true,
- ["flushHits","logDebugSprintf","cacheHit","flushAllHits", "getNow"]
+ [
+ "flushHits",
+ "logDebugSprintf",
+ "cacheHit",
+ "flushAllHits",
+ "getNow",
+ ]
);
$strategy->addHit($page);
@@ -653,17 +729,17 @@ public function testSendBatch()
$page3Key = "$visitorId:b1b48180-0d72-410d-8e9b-44ee90dfafc6";
$contentPage3 = [
- 'pageUrl' => 'page1',
- 'visitorId' => $visitorId,
- 'ds' => 'APP',
- 'type' => "PAGEVIEW",
- 'anonymousId' => null,
- 'userIP' => null,
+ 'pageUrl' => 'page1',
+ 'visitorId' => $visitorId,
+ 'ds' => 'APP',
+ 'type' => "PAGEVIEW",
+ 'anonymousId' => null,
+ 'userIP' => null,
'pageResolution' => null,
- 'locale' => null,
- 'sessionNumber' => null,
- 'key' => $page3Key,
- 'createdAt' => 1676542078047,
+ 'locale' => null,
+ 'sessionNumber' => null,
+ 'key' => $page3Key,
+ 'createdAt' => 1676542078047,
];
$page3 = HitAbstract::hydrate(Page::getClassName(), $contentPage3);
@@ -677,26 +753,18 @@ public function testSendBatch()
$requestBody = $batchHit->toApiKeys();
- $httpClientMock->expects($this->once())->method("post")
- ->with($url, [], $requestBody);
+ $httpClientMock->expects($this->once())->method("post")->with($url, [], $requestBody);
$headers = [FlagshipConstant::HEADER_CONTENT_TYPE => FlagshipConstant::HEADER_APPLICATION_JSON];
$httpClientMock->expects($this->once())->method('setHeaders')->with($headers);
$httpClientMock->expects($this->once())->method("setTimeout")->with($config->getTimeout());
- $strategy
- ->expects($this->exactly(1))
- ->method("flushHits")->with([$page3Key]);
+ $strategy->expects($this->exactly(1))->method("flushHits")->with([$page3Key]);
- $strategy
- ->expects($this->never())
- ->method("flushAllHits");
+ $strategy->expects($this->never())->method("flushAllHits");
- $strategy
- ->expects($this->never())
- ->method("cacheHit")
- ->with([]);
+ $strategy->expects($this->never())->method("cacheHit")->with([]);
$logMessage = $this->getLogFormat(
null,
@@ -706,13 +774,15 @@ public function testSendBatch()
0
);
- $strategy->expects($this->once())->method("logDebugSprintf")
- ->with(
- $config,
- FlagshipConstant::TRACKING_MANAGER,
- FlagshipConstant::HIT_SENT_SUCCESS,
- [FlagshipConstant::SEND_BATCH, $logMessage ]
- );
+ $strategy->expects($this->once())->method("logDebugSprintf")->with(
+ $config,
+ FlagshipConstant::TRACKING_MANAGER,
+ FlagshipConstant::HIT_SENT_SUCCESS,
+ [
+ FlagshipConstant::SEND_BATCH,
+ $logMessage,
+ ]
+ );
$this->assertCount(3, $strategy->getHitsPoolQueue());
$strategy->sendBatch();
@@ -736,12 +806,22 @@ public function testSendBatchFailed()
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\BatchingOnFailedCachingStrategy",
- [$config, $httpClientMock, "instanceId"],
+ [
+ $config,
+ $httpClientMock,
+ "instanceId",
+ ],
"",
true,
true,
true,
- ["flushHits","logErrorSprintf","cacheHit","flushAllHits", "getNow"]
+ [
+ "flushHits",
+ "logErrorSprintf",
+ "cacheHit",
+ "flushAllHits",
+ "getNow",
+ ]
);
$strategy->addHit($page);
@@ -753,22 +833,15 @@ public function testSendBatchFailed()
$requestBody = $batchHit->toApiKeys();
$exception = new Exception("batch error");
- $httpClientMock->expects($this->once())->method("post")
- ->with($url, [], $requestBody)->willThrowException($exception);
+ $httpClientMock->expects($this->once())->method("post")->with($url, [], $requestBody)->willThrowException($exception);
$headers = [FlagshipConstant::HEADER_CONTENT_TYPE => FlagshipConstant::HEADER_APPLICATION_JSON];
- $strategy
- ->expects($this->never())
- ->method("flushHits");
+ $strategy->expects($this->never())->method("flushHits");
- $strategy
- ->expects($this->once())
- ->method("cacheHit")->with($this->countOf(2));
+ $strategy->expects($this->once())->method("cacheHit")->with($this->countOf(2));
- $strategy
- ->expects($this->never())
- ->method("flushAllHits");
+ $strategy->expects($this->never())->method("flushAllHits");
$logMessage = $this->getLogFormat(
$exception->getMessage(),
@@ -778,13 +851,15 @@ public function testSendBatchFailed()
0
);
- $strategy->expects($this->once())->method("logErrorSprintf")
- ->with(
- $config,
- FlagshipConstant::TRACKING_MANAGER,
- FlagshipConstant::UNEXPECTED_ERROR_OCCURRED,
- [FlagshipConstant::SEND_BATCH, $logMessage ]
- );
+ $strategy->expects($this->once())->method("logErrorSprintf")->with(
+ $config,
+ FlagshipConstant::TRACKING_MANAGER,
+ FlagshipConstant::UNEXPECTED_ERROR_OCCURRED,
+ [
+ FlagshipConstant::SEND_BATCH,
+ $logMessage,
+ ]
+ );
$this->assertCount(2, $strategy->getHitsPoolQueue());
$strategy->sendBatch();
@@ -800,7 +875,7 @@ public function testSendBatchWithExpiredHit()
$url = FlagshipConstant::HIT_EVENT_URL;
- \Flagship\Traits\Round::$returnValue = FlagshipConstant::DEFAULT_HIT_CACHE_TIME_MS ;
+ \Flagship\Traits\Round::$returnValue = FlagshipConstant::DEFAULT_HIT_CACHE_TIME_MS;
$page = new Page("https://myurl.com");
$page->setConfig($config)->setVisitorId($visitorId);
@@ -813,15 +888,23 @@ public function testSendBatchWithExpiredHit()
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\BatchingOnFailedCachingStrategy",
- [$config, $httpClientMock],
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
true,
true,
- ["flushHits","logErrorSprintf","cacheHit", "flushAllHits"]
+ [
+ "flushHits",
+ "logErrorSprintf",
+ "cacheHit",
+ "flushAllHits",
+ ]
);
- \Flagship\Traits\Round::$returnValue = FlagshipConstant::DEFAULT_HIT_CACHE_TIME_MS ;
+ \Flagship\Traits\Round::$returnValue = FlagshipConstant::DEFAULT_HIT_CACHE_TIME_MS;
$strategy->addHit($page);
$strategy->addHit($screen);
@@ -838,20 +921,13 @@ public function testSendBatchWithExpiredHit()
$requestBody = $batchHit->toApiKeys();
- $httpClientMock->expects($this->once())->method("post")
- ->with($url, [], $requestBody);
+ $httpClientMock->expects($this->once())->method("post")->with($url, [], $requestBody);
- $strategy
- ->expects($this->exactly(0))
- ->method("flushHits");
+ $strategy->expects($this->exactly(0))->method("flushHits");
- $strategy
- ->expects($this->never())
- ->method("cacheHit");
+ $strategy->expects($this->never())->method("cacheHit");
- $strategy
- ->expects($this->never())
- ->method("flushAllHits");
+ $strategy->expects($this->never())->method("flushAllHits");
$this->assertCount(2, $strategy->getHitsPoolQueue());
@@ -871,26 +947,34 @@ public function testFlushHits()
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\BatchingOnFailedCachingStrategy",
- [$config, $httpClientMock],
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
true,
true,
- ["logDebugSprintf","cacheHit"]
+ [
+ "logDebugSprintf",
+ "cacheHit",
+ ]
);
- $keyToRemove = ["key1","key2","key3"];
+ $keyToRemove = [
+ "key1",
+ "key2",
+ "key3",
+ ];
- $strategy->expects($this->once())->method("logDebugSprintf")
- ->with(
- $config,
- FlagshipConstant::PROCESS_CACHE,
- FlagshipConstant::HIT_DATA_FLUSHED,
- [$keyToRemove]
- );
+ $strategy->expects($this->once())->method("logDebugSprintf")->with(
+ $config,
+ FlagshipConstant::PROCESS_CACHE,
+ FlagshipConstant::HIT_DATA_FLUSHED,
+ [$keyToRemove]
+ );
- $hitCacheImplementationMock->expects($this->exactly(1))
- ->method("flushHits")->with($keyToRemove);
+ $hitCacheImplementationMock->expects($this->exactly(1))->method("flushHits")->with($keyToRemove);
$strategy->flushHits($keyToRemove);
@@ -920,7 +1004,10 @@ public function testFlushHitsFailed()
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\BatchingOnFailedCachingStrategy",
- [$config, $httpClientMock],
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
true,
@@ -928,21 +1015,25 @@ public function testFlushHitsFailed()
["logErrorSprintf"]
);
- $keyToRemove = ["key1","key2","key3"];
+ $keyToRemove = [
+ "key1",
+ "key2",
+ "key3",
+ ];
$exception = new Exception("flushHits error");
- $strategy->expects($this->once())->method("logErrorSprintf")
- ->with(
- $config,
- FlagshipConstant::PROCESS_CACHE,
- FlagshipConstant::HIT_CACHE_ERROR,
- ["flushHits", $exception->getMessage()]
- );
+ $strategy->expects($this->once())->method("logErrorSprintf")->with(
+ $config,
+ FlagshipConstant::PROCESS_CACHE,
+ FlagshipConstant::HIT_CACHE_ERROR,
+ [
+ "flushHits",
+ $exception->getMessage(),
+ ]
+ );
- $hitCacheImplementationMock->expects($this->exactly(1))
- ->method("flushHits")->with($keyToRemove)
- ->willThrowException($exception);
+ $hitCacheImplementationMock->expects($this->exactly(1))->method("flushHits")->with($keyToRemove)->willThrowException($exception);
$strategy->flushHits($keyToRemove);
}
@@ -960,7 +1051,10 @@ public function testFlushAllHits()
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\BatchingOnFailedCachingStrategy",
- [$config, $httpClientMock],
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
true,
@@ -968,15 +1062,13 @@ public function testFlushAllHits()
["logDebugSprintf"]
);
- $strategy->expects($this->once())->method("logDebugSprintf")
- ->with(
- $config,
- FlagshipConstant::PROCESS_CACHE,
- FlagshipConstant::ALL_HITS_FLUSHED
- );
+ $strategy->expects($this->once())->method("logDebugSprintf")->with(
+ $config,
+ FlagshipConstant::PROCESS_CACHE,
+ FlagshipConstant::ALL_HITS_FLUSHED
+ );
- $hitCacheImplementationMock->expects($this->exactly(1))
- ->method("flushAllHits");
+ $hitCacheImplementationMock->expects($this->exactly(1))->method("flushAllHits");
$strategy->flushAllHits();
@@ -996,7 +1088,10 @@ public function testFlushAllHitsFailed()
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\BatchingOnFailedCachingStrategy",
- [$config, $httpClientMock],
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
true,
@@ -1006,16 +1101,17 @@ public function testFlushAllHitsFailed()
$exception = new Exception("flushHits error");
- $strategy->expects($this->exactly(1))->method('logErrorSprintf')
- ->with(
- $config,
- FlagshipConstant::PROCESS_CACHE,
- FlagshipConstant::HIT_CACHE_ERROR,
- ["flushAllHits", $exception->getMessage()]
- );
+ $strategy->expects($this->exactly(1))->method('logErrorSprintf')->with(
+ $config,
+ FlagshipConstant::PROCESS_CACHE,
+ FlagshipConstant::HIT_CACHE_ERROR,
+ [
+ "flushAllHits",
+ $exception->getMessage(),
+ ]
+ );
- $hitCacheImplementationMock->expects($this->exactly(1))
- ->method("flushAllHits")->willThrowException($exception);
+ $hitCacheImplementationMock->expects($this->exactly(1))->method("flushAllHits")->willThrowException($exception);
$strategy->flushAllHits();
}
@@ -1032,12 +1128,18 @@ public function testCacheHit()
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\BatchingOnFailedCachingStrategy",
- [$config, $httpClientMock],
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
true,
true,
- ["logDebugSprintf", "getNow"]
+ [
+ "logDebugSprintf",
+ "getNow",
+ ]
);
$visitorId = "visitorId";
@@ -1050,28 +1152,26 @@ public function testCacheHit()
$hitData = [
HitCacheFields::VERSION => 1,
- HitCacheFields::DATA => [
- HitCacheFields::VISITOR_ID => $activate->getVisitorId(),
+ HitCacheFields::DATA => [
+ HitCacheFields::VISITOR_ID => $activate->getVisitorId(),
HitCacheFields::ANONYMOUS_ID => $activate->getAnonymousId(),
- HitCacheFields::TYPE => $activate->getType(),
- HitCacheFields::CONTENT => $activate->toArray(),
- HitCacheFields::TIME => 0
- ]
+ HitCacheFields::TYPE => $activate->getType(),
+ HitCacheFields::CONTENT => $activate->toArray(),
+ HitCacheFields::TIME => 0,
+ ],
];
$data = [];
$data[$key] = $hitData;
- $strategy->expects($this->once())->method("logDebugSprintf")
- ->with(
- $config,
- FlagshipConstant::PROCESS_CACHE,
- FlagshipConstant::HIT_CACHE_SAVED,
- [$data]
- );
+ $strategy->expects($this->once())->method("logDebugSprintf")->with(
+ $config,
+ FlagshipConstant::PROCESS_CACHE,
+ FlagshipConstant::HIT_CACHE_SAVED,
+ [$data]
+ );
- $hitCacheImplementationMock->expects($this->exactly(1))
- ->method("cacheHit")->with($data);
+ $hitCacheImplementationMock->expects($this->exactly(1))->method("cacheHit")->with($data);
$strategy->cacheHit([$activate]);
@@ -1091,7 +1191,10 @@ public function testCacheHitFailed()
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\BatchingOnFailedCachingStrategy",
- [$config, $httpClientMock],
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
true,
@@ -1107,13 +1210,13 @@ public function testCacheHitFailed()
$hitData = [
HitCacheFields::VERSION => 1,
- HitCacheFields::DATA => [
- HitCacheFields::VISITOR_ID => $activate->getVisitorId(),
+ HitCacheFields::DATA => [
+ HitCacheFields::VISITOR_ID => $activate->getVisitorId(),
HitCacheFields::ANONYMOUS_ID => $activate->getAnonymousId(),
- HitCacheFields::TYPE => $activate->getType(),
- HitCacheFields::CONTENT => $activate->toArray(),
- HitCacheFields::TIME => 0
- ]
+ HitCacheFields::TYPE => $activate->getType(),
+ HitCacheFields::CONTENT => $activate->toArray(),
+ HitCacheFields::TIME => 0,
+ ],
];
$data = [];
@@ -1121,16 +1224,17 @@ public function testCacheHitFailed()
$exception = new Exception("Cache error");
- $strategy->expects($this->once())->method("logErrorSprintf")
- ->with(
- $config,
- FlagshipConstant::PROCESS_CACHE,
- FlagshipConstant::HIT_CACHE_ERROR,
- ["cacheHit", $exception->getMessage()]
- );
+ $strategy->expects($this->once())->method("logErrorSprintf")->with(
+ $config,
+ FlagshipConstant::PROCESS_CACHE,
+ FlagshipConstant::HIT_CACHE_ERROR,
+ [
+ "cacheHit",
+ $exception->getMessage(),
+ ]
+ );
- $hitCacheImplementationMock->expects($this->exactly(1))
- ->method("cacheHit")->with($data)->willThrowException($exception);
+ $hitCacheImplementationMock->expects($this->exactly(1))->method("cacheHit")->with($data)->willThrowException($exception);
$strategy->cacheHit([$activate]);
}
@@ -1144,7 +1248,10 @@ public function testAddTroubleshootingHit()
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\BatchingOnFailedCachingStrategy",
- [$config, $httpClientMock],
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
true,
@@ -1152,27 +1259,17 @@ public function testAddTroubleshootingHit()
["isTroubleshootingActivated"]
);
- $strategy->expects($this->exactly(4))
- ->method("isTroubleshootingActivated")
- ->willReturnOnConsecutiveCalls(true, true, true, false);
+ $strategy->expects($this->exactly(4))->method("isTroubleshootingActivated")->willReturnOnConsecutiveCalls(true, true, true, false);
$startDatetime = new DateTime("2023-04-13T09:33:38.049Z");
$endDatetime = new DateTime("2023-04-13T10:03:38.049Z");
$troubleshootingData = new TroubleshootingData();
- $troubleshootingData->setStartDate($startDatetime)
- ->setEndDate($endDatetime)
- ->setTraffic(100);
+ $troubleshootingData->setStartDate($startDatetime)->setEndDate($endDatetime)->setTraffic(100);
$strategy->setTroubleshootingData($troubleshootingData);
$troubleshooting = new Troubleshooting();
- $troubleshooting->setConfig($config)
- ->setVisitorId($visitorId)
- ->setLogLevel(LogLevel::ALL)
- ->setLabel(TroubleshootingLabel::VISITOR_SEND_HIT)
- ->setVisitorSessionId("visitorSessionId")
- ->setFlagshipInstanceId("flagshipInstanceId")
- ->setTraffic(100);
+ $troubleshooting->setConfig($config)->setVisitorId($visitorId)->setLogLevel(LogLevel::ALL)->setLabel(TroubleshootingLabel::VISITOR_SEND_HIT)->setVisitorSessionId("visitorSessionId")->setFlagshipInstanceId("flagshipInstanceId")->setTraffic(100);
$strategy->addTroubleshootingHit($troubleshooting);
@@ -1180,13 +1277,7 @@ public function testAddTroubleshootingHit()
$this->assertCount(1, $troubleshootingQueue);
$troubleshooting2 = new Troubleshooting();
- $troubleshooting2->setConfig($config)
- ->setVisitorId($visitorId)
- ->setLogLevel(LogLevel::ALL)
- ->setLabel(TroubleshootingLabel::VISITOR_SEND_HIT)
- ->setVisitorSessionId("visitorSessionId")
- ->setFlagshipInstanceId("flagshipInstanceId")
- ->setTraffic(50);
+ $troubleshooting2->setConfig($config)->setVisitorId($visitorId)->setLogLevel(LogLevel::ALL)->setLabel(TroubleshootingLabel::VISITOR_SEND_HIT)->setVisitorSessionId("visitorSessionId")->setFlagshipInstanceId("flagshipInstanceId")->setTraffic(50);
$strategy->addTroubleshootingHit($troubleshooting2);
@@ -1196,9 +1287,7 @@ public function testAddTroubleshootingHit()
$troubleshootingData->setTraffic(49);
$troubleshooting3 = new Troubleshooting();
- $troubleshooting3->setConfig($config)
- ->setVisitorId($visitorId)
- ->setTraffic(50);
+ $troubleshooting3->setConfig($config)->setVisitorId($visitorId)->setTraffic(50);
$strategy->addTroubleshootingHit($troubleshooting3);
@@ -1206,13 +1295,7 @@ public function testAddTroubleshootingHit()
$this->assertCount(2, $troubleshootingQueue);
$troubleshooting4 = new Troubleshooting();
- $troubleshooting4->setConfig($config)
- ->setVisitorId($visitorId)
- ->setLogLevel(LogLevel::ALL)
- ->setLabel(TroubleshootingLabel::VISITOR_SEND_HIT)
- ->setVisitorSessionId("visitorSessionId")
- ->setFlagshipInstanceId("flagshipInstanceId")
- ->setTraffic(50);
+ $troubleshooting4->setConfig($config)->setVisitorId($visitorId)->setLogLevel(LogLevel::ALL)->setLabel(TroubleshootingLabel::VISITOR_SEND_HIT)->setVisitorSessionId("visitorSessionId")->setFlagshipInstanceId("flagshipInstanceId")->setTraffic(50);
$strategy->addTroubleshootingHit($troubleshooting4);
@@ -1237,7 +1320,10 @@ public function testSendTroubleshootingQueue()
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\BatchingOnFailedCachingStrategy",
- [$config, $httpClientMock],
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
true,
@@ -1247,42 +1333,27 @@ public function testSendTroubleshootingQueue()
- $strategy->expects($this->exactly(4))
- ->method("isTroubleshootingActivated")
- ->willReturn(true, true, true, false);
+ $strategy->expects($this->exactly(4))->method("isTroubleshootingActivated")->willReturn(true, true, true, false);
$match = $this->exactly(2);
- $httpClientMock->expects($match)
- ->method('post')
- ->with($this->callback(function ($url) use ($match) {
- $troubleshootingUrl = FlagshipConstant::TROUBLESHOOTING_HIT_URL;
- return $url === $troubleshootingUrl;
- }));
+ $httpClientMock->expects($match)->method('post')->with($this->callback(function ($url) use ($match) {
+ $troubleshootingUrl = FlagshipConstant::TROUBLESHOOTING_HIT_URL;
+ return $url === $troubleshootingUrl;
+ }));
$startDatetime = new DateTime("2023-04-13T09:33:38.049Z");
$endDatetime = new DateTime("2023-04-13T10:03:38.049Z");
$troubleshootingData = new TroubleshootingData();
- $troubleshootingData->setStartDate($startDatetime)
- ->setEndDate($endDatetime)->setTraffic(100);
+ $troubleshootingData->setStartDate($startDatetime)->setEndDate($endDatetime)->setTraffic(100);
$strategy->setTroubleshootingData($troubleshootingData);
$troubleshooting = new Troubleshooting();
- $troubleshooting->setConfig($config)
- ->setLogLevel(LogLevel::ALL)
- ->setLabel(TroubleshootingLabel::VISITOR_SEND_HIT)
- ->setVisitorSessionId("visitorSessionId")
- ->setFlagshipInstanceId("flagshipInstanceId")
- ->setVisitorId($visitorId)->setTraffic(100);
+ $troubleshooting->setConfig($config)->setLogLevel(LogLevel::ALL)->setLabel(TroubleshootingLabel::VISITOR_SEND_HIT)->setVisitorSessionId("visitorSessionId")->setFlagshipInstanceId("flagshipInstanceId")->setVisitorId($visitorId)->setTraffic(100);
$troubleshooting2 = new Troubleshooting();
- $troubleshooting2->setConfig($config)
- ->setLogLevel(LogLevel::ALL)
- ->setLabel(TroubleshootingLabel::VISITOR_SEND_HIT)
- ->setVisitorSessionId("visitorSessionId")
- ->setFlagshipInstanceId("flagshipInstanceId")
- ->setVisitorId($visitorId)->setTraffic(100);
+ $troubleshooting2->setConfig($config)->setLogLevel(LogLevel::ALL)->setLabel(TroubleshootingLabel::VISITOR_SEND_HIT)->setVisitorSessionId("visitorSessionId")->setFlagshipInstanceId("flagshipInstanceId")->setVisitorId($visitorId)->setTraffic(100);
$strategy->addTroubleshootingHit($troubleshooting);
$strategy->addTroubleshootingHit($troubleshooting2);
@@ -1310,42 +1381,37 @@ public function testSendTroubleshootingQueueFailed()
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\BatchingOnFailedCachingStrategy",
- [$config, $httpClientMock],
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
true,
true,
- ["isTroubleshootingActivated", "logErrorSprintf"]
+ [
+ "isTroubleshootingActivated",
+ "logErrorSprintf",
+ ]
);
- $strategy->expects($this->exactly(2))
- ->method("isTroubleshootingActivated")
- ->willReturn(true);
+ $strategy->expects($this->exactly(2))->method("isTroubleshootingActivated")->willReturn(true);
- $strategy->expects($this->exactly(1))
- ->method("logErrorSprintf");
+ $strategy->expects($this->exactly(1))->method("logErrorSprintf");
$exception = new Exception("Error");
- $httpClientMock->expects($this->exactly(1))
- ->method('post')->willThrowException($exception);
+ $httpClientMock->expects($this->exactly(1))->method('post')->willThrowException($exception);
$startDatetime = new DateTime("2023-04-13T09:33:38.049Z");
$endDatetime = new DateTime("2023-04-13T10:03:38.049Z");
$troubleshootingData = new TroubleshootingData();
- $troubleshootingData->setStartDate($startDatetime)
- ->setEndDate($endDatetime)->setTraffic(100);
+ $troubleshootingData->setStartDate($startDatetime)->setEndDate($endDatetime)->setTraffic(100);
$strategy->setTroubleshootingData($troubleshootingData);
$troubleshooting = new Troubleshooting();
- $troubleshooting->setConfig($config)
- ->setLogLevel(LogLevel::ALL)
- ->setLabel(TroubleshootingLabel::VISITOR_SEND_HIT)
- ->setVisitorSessionId("visitorSessionId")
- ->setFlagshipInstanceId("flagshipInstanceId")
- ->setVisitorId($visitorId)
- ->setTraffic(100);
+ $troubleshooting->setConfig($config)->setLogLevel(LogLevel::ALL)->setLabel(TroubleshootingLabel::VISITOR_SEND_HIT)->setVisitorSessionId("visitorSessionId")->setFlagshipInstanceId("flagshipInstanceId")->setVisitorId($visitorId)->setTraffic(100);
$strategy->addTroubleshootingHit($troubleshooting);
@@ -1368,27 +1434,32 @@ public function testIsTroubleshootingActivated()
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\BatchingOnFailedCachingStrategy",
- [$config, $httpClientMock],
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
true,
true,
- ["logErrorSprintf", "getNow"]
+ [
+ "logErrorSprintf",
+ "getNow",
+ ]
);
//No troubleshooting data is given
$check = $strategy->isTroubleshootingActivated();
$this->assertFalse($check);
-// //Test troubleshooting data
+ // //Test troubleshooting data
- $strategy->expects($this->exactly(3))->method("getNow")
- ->willReturnOnConsecutiveCalls(
- (new DateTime("2023-04-13T09:32:38.049Z"))->getTimestamp() * 1000,
- (new DateTime("2023-04-13T10:03:39.049Z"))->getTimestamp() * 1000,
- (new DateTime("2023-04-13T09:40:38.049Z"))->getTimestamp() * 1000
- );
-//
+ $strategy->expects($this->exactly(3))->method("getNow")->willReturnOnConsecutiveCalls(
+ (new DateTime("2023-04-13T09:32:38.049Z"))->getTimestamp() * 1000,
+ (new DateTime("2023-04-13T10:03:39.049Z"))->getTimestamp() * 1000,
+ (new DateTime("2023-04-13T09:40:38.049Z"))->getTimestamp() * 1000
+ );
+ //
//Test troubleshooting not start
$startDatetime = new DateTime("2023-04-13T09:33:38.049Z");
$troubleshootingData = new TroubleshootingData();
@@ -1401,8 +1472,7 @@ public function testIsTroubleshootingActivated()
//Test troubleshooting is finished
$endDatetime = new DateTime("2023-04-13T10:03:38.049Z");
$troubleshootingData = new TroubleshootingData();
- $troubleshootingData->setStartDate($startDatetime)
- ->setEndDate($endDatetime);
+ $troubleshootingData->setStartDate($startDatetime)->setEndDate($endDatetime);
$strategy->setTroubleshootingData($troubleshootingData);
$check = $strategy->isTroubleshootingActivated();
@@ -1412,8 +1482,7 @@ public function testIsTroubleshootingActivated()
$startDatetime = new DateTime("2023-04-13T09:33:38.049Z");
$endDatetime = new DateTime("2023-04-13T10:03:38.049Z");
$troubleshootingData = new TroubleshootingData();
- $troubleshootingData->setStartDate($startDatetime)
- ->setEndDate($endDatetime);
+ $troubleshootingData->setStartDate($startDatetime)->setEndDate($endDatetime);
$strategy->setTroubleshootingData($troubleshootingData);
@@ -1426,6 +1495,9 @@ public function testAddUsageHit()
$config = new DecisionApiConfig();
$visitorId = "visitorId";
+ /**
+ * @var HttpClientInterface|MockObject $httpClientMock
+ */
$httpClientMock = $this->getMockForAbstractClass('Flagship\Utils\HttpClientInterface');
$strategy = new BatchingOnFailedCachingStrategy($config, $httpClientMock);
@@ -1467,9 +1539,15 @@ public function testSendUsageHitQueue()
$httpClientMock = $this->getMockForAbstractClass('Flagship\Utils\HttpClientInterface');
+ /**
+ * @var BatchingOnFailedCachingStrategy|MockObject $strategy
+ */
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\BatchingOnFailedCachingStrategy",
- [$config, $httpClientMock],
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
true,
@@ -1503,14 +1581,13 @@ public function testSendUsageHitQueue()
$strategy->addUsageHit($usageHit2);
$matcher = $this->exactly(2);
- $strategy->expects($matcher)->method('sendUsageHit')
- ->with($this->callback(function ($hit) use ($matcher, $usageHit, $usageHit2) {
- return match ($matcher->getInvocationCount()) {
- 1 => $hit === $usageHit,
- 2 => $hit === $usageHit2,
- default => false,
- };
- }));
+ $strategy->expects($matcher)->method('sendUsageHit')->with($this->callback(function ($hit) use ($matcher, $usageHit, $usageHit2) {
+ return match ($matcher->getInvocationCount()) {
+ 1 => $hit === $usageHit,
+ 2 => $hit === $usageHit2,
+ default => false,
+ };
+ }));
$strategy->sendUsageHitQueue();
$usageHitQueue = $strategy->getUsageHitQueue();
@@ -1535,9 +1612,15 @@ public function testSendUsageHit()
["post"]
);
+ /**
+ * @var BatchingOnFailedCachingStrategy|MockObject $strategy
+ */
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\BatchingOnFailedCachingStrategy",
- [$config, $httpClientMock],
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
true,
@@ -1548,18 +1631,15 @@ public function testSendUsageHit()
$match = $this->exactly(1);
- $httpClientMock->expects($match)
- ->method('post')
- ->with($this->callback(function ($url) use ($match) {
- $troubleshootingUrl = FlagshipConstant::ANALYTICS_HIT_URL;
- return $url === $troubleshootingUrl;
- }), $this->callback(function () use ($match) {
- return true;
- }));
+ $httpClientMock->expects($match)->method('post')->with($this->callback(function ($url) use ($match) {
+ $troubleshootingUrl = FlagshipConstant::ANALYTICS_HIT_URL;
+ return $url === $troubleshootingUrl;
+ }), $this->callback(function () use ($match) {
+ return true;
+ }));
$analytic = new UsageHit();
- $analytic
- ->setLogLevel(LogLevel::ALL)
+ $analytic->setLogLevel(LogLevel::ALL)
->setLabel(TroubleshootingLabel::VISITOR_SEND_HIT)
->setVisitorSessionId("visitorSessionId")
->setFlagshipInstanceId("flagshipInstanceId")
@@ -1586,7 +1666,10 @@ public function testSendUsageHitFailed()
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\BatchingOnFailedCachingStrategy",
- [$config, $httpClientMock],
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
true,
@@ -1598,18 +1681,10 @@ public function testSendUsageHitFailed()
$match = $this->exactly(1);
$exception = new Exception("Error");
- $httpClientMock->expects($match)
- ->method('post')
- ->willThrowException($exception);
+ $httpClientMock->expects($match)->method('post')->willThrowException($exception);
$analytic = new UsageHit();
- $analytic
- ->setLogLevel(LogLevel::ALL)
- ->setLabel(TroubleshootingLabel::VISITOR_SEND_HIT)
- ->setVisitorSessionId("visitorSessionId")
- ->setFlagshipInstanceId("flagshipInstanceId")
- ->setVisitorId($visitorId)
- ->setConfig($config);
+ $analytic->setLogLevel(LogLevel::ALL)->setLabel(TroubleshootingLabel::VISITOR_SEND_HIT)->setVisitorSessionId("visitorSessionId")->setFlagshipInstanceId("flagshipInstanceId")->setVisitorId($visitorId)->setConfig($config);
$strategy->sendUsageHit($analytic);
}
diff --git a/tests/Api/NoBatchingContinuousCachingStrategyTest.php b/tests/Api/NoBatchingContinuousCachingStrategyTest.php
index ecd22bf5..17f1d350 100644
--- a/tests/Api/NoBatchingContinuousCachingStrategyTest.php
+++ b/tests/Api/NoBatchingContinuousCachingStrategyTest.php
@@ -29,12 +29,19 @@ public function testAddHit()
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\NoBatchingContinuousCachingStrategy",
- [$config, $httpClientMock],
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
true,
true,
- ["cacheHit","flushHits","logDebugSprintf"]
+ [
+ "cacheHit",
+ "flushHits",
+ "logDebugSprintf",
+ ]
);
$strategy->expects($this->never())->method("cacheHit");
@@ -58,24 +65,23 @@ public function testAddHit()
$url = FlagshipConstant::HIT_EVENT_URL;
- $httpClientMock->expects($this->exactly(3))->method("post")
- ->with(
- $this->logicalOr(
- $url,
- $url,
- $url
- ),
- $this->logicalOr(
- [],
- [],
- []
- ),
- $this->logicalOr(
- $requestBody,
- $requestBody2,
- $requestBody3
- )
- );
+ $httpClientMock->expects($this->exactly(3))->method("post")->with(
+ $this->logicalOr(
+ $url,
+ $url,
+ $url
+ ),
+ $this->logicalOr(
+ [],
+ [],
+ []
+ ),
+ $this->logicalOr(
+ $requestBody,
+ $requestBody2,
+ $requestBody3
+ )
+ );
$headers = [FlagshipConstant::HEADER_CONTENT_TYPE => FlagshipConstant::HEADER_APPLICATION_JSON];
@@ -105,29 +111,37 @@ public function testAddHit()
0
);
- $strategy->expects($this->exactly(3))->method("logDebugSprintf")
- ->with(
- $this->logicalOr(
- $config,
- $config,
- $config
- ),
- $this->logicalOr(
- FlagshipConstant::TRACKING_MANAGER,
- FlagshipConstant::TRACKING_MANAGER,
- FlagshipConstant::TRACKING_MANAGER
- ),
- $this->logicalOr(
- FlagshipConstant::HIT_SENT_SUCCESS,
- FlagshipConstant::HIT_SENT_SUCCESS,
- FlagshipConstant::HIT_SENT_SUCCESS
- ),
- $this->logicalOr(
- [FlagshipConstant::SEND_HIT, $logMessage ],
- [FlagshipConstant::SEND_HIT, $logMessage1 ],
- [FlagshipConstant::SEND_HIT, $logMessage2 ]
- )
- );
+ $strategy->expects($this->exactly(3))->method("logDebugSprintf")->with(
+ $this->logicalOr(
+ $config,
+ $config,
+ $config
+ ),
+ $this->logicalOr(
+ FlagshipConstant::TRACKING_MANAGER,
+ FlagshipConstant::TRACKING_MANAGER,
+ FlagshipConstant::TRACKING_MANAGER
+ ),
+ $this->logicalOr(
+ FlagshipConstant::HIT_SENT_SUCCESS,
+ FlagshipConstant::HIT_SENT_SUCCESS,
+ FlagshipConstant::HIT_SENT_SUCCESS
+ ),
+ $this->logicalOr(
+ [
+ FlagshipConstant::SEND_HIT,
+ $logMessage,
+ ],
+ [
+ FlagshipConstant::SEND_HIT,
+ $logMessage1,
+ ],
+ [
+ FlagshipConstant::SEND_HIT,
+ $logMessage2,
+ ]
+ )
+ );
$this->assertCount(0, $strategy->getHitsPoolQueue());
$this->assertCount(0, $strategy->getActivatePoolQueue());
@@ -151,12 +165,22 @@ public function testAddHitFailed()
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\NoBatchingContinuousCachingStrategy",
- [$config, $httpClientMock, "instanceId"],
+ [
+ $config,
+ $httpClientMock,
+ "instanceId",
+ ],
"",
true,
true,
true,
- ["cacheHit","flushHits","logErrorSprintf", "addTroubleshootingHit", "sendTroubleshootingQueue"]
+ [
+ "cacheHit",
+ "flushHits",
+ "logErrorSprintf",
+ "addTroubleshootingHit",
+ "sendTroubleshootingQueue",
+ ]
);
$strategy->expects($this->never())->method("flushHits");
@@ -172,12 +196,11 @@ public function testAddHitFailed()
$exception = new Exception("error");
- $httpClientMock->expects($this->exactly(1))->method("post")
- ->with(
- $url,
- [],
- $requestBody
- )->willThrowException($exception);
+ $httpClientMock->expects($this->exactly(1))->method("post")->with(
+ $url,
+ [],
+ $requestBody
+ )->willThrowException($exception);
$headers = [FlagshipConstant::HEADER_CONTENT_TYPE => FlagshipConstant::HEADER_APPLICATION_JSON];
@@ -192,13 +215,15 @@ public function testAddHitFailed()
0
);
- $strategy->expects($this->once())->method("logErrorSprintf")
- ->with(
- $config,
- FlagshipConstant::TRACKING_MANAGER,
- FlagshipConstant::UNEXPECTED_ERROR_OCCURRED,
- [FlagshipConstant::SEND_HIT, $logMessage ]
- );
+ $strategy->expects($this->once())->method("logErrorSprintf")->with(
+ $config,
+ FlagshipConstant::TRACKING_MANAGER,
+ FlagshipConstant::UNEXPECTED_ERROR_OCCURRED,
+ [
+ FlagshipConstant::SEND_HIT,
+ $logMessage,
+ ]
+ );
$strategy->expects($this->once())->method("addTroubleshootingHit");
$strategy->expects($this->once())->method("sendTroubleshootingQueue");
@@ -222,12 +247,18 @@ public function testAddHitConsent()
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\NoBatchingContinuousCachingStrategy",
- [$config, $httpClientMock],
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
true,
true,
- ["cacheHit","flushHits"]
+ [
+ "cacheHit",
+ "flushHits",
+ ]
);
$strategy->expects($this->never())->method("cacheHit");
@@ -235,8 +266,7 @@ public function testAddHitConsent()
$key1 = "$visitorId:key1";
$key2 = "$visitorId:key2";
- $strategy->expects($this->once())
- ->method("flushHits")->with([$page3Key]);
+ $strategy->expects($this->once())->method("flushHits")->with([$page3Key]);
$page = new Page("http://localhost");
$page->setConfig($config)->setVisitorId($visitorId)->setKey($key1);
@@ -248,18 +278,18 @@ public function testAddHitConsent()
$strategy->hydrateHitsPoolQueue($key2, $page2);
$contentPage3 = [
- 'pageUrl' => 'page1',
- 'visitorId' => $visitorId,
- 'ds' => 'APP',
- 'type' => 'PAGEVIEW',
- 'anonymousId' => null,
- 'userIP' => null,
- 'pageResolution' => null,
- 'locale' => null,
- 'sessionNumber' => null,
- 'key' => $page3Key,
- 'createdAt' => 1676542078047,
- ];
+ 'pageUrl' => 'page1',
+ 'visitorId' => $visitorId,
+ 'ds' => 'APP',
+ 'type' => 'PAGEVIEW',
+ 'anonymousId' => null,
+ 'userIP' => null,
+ 'pageResolution' => null,
+ 'locale' => null,
+ 'sessionNumber' => null,
+ 'key' => $page3Key,
+ 'createdAt' => 1676542078047,
+ ];
$page3 = HitAbstract::hydrate(Page::getClassName(), $contentPage3);
@@ -276,12 +306,11 @@ public function testAddHitConsent()
$url = FlagshipConstant::HIT_EVENT_URL;
- $httpClientMock->expects($this->exactly(2))->method("post")
- ->with(
- $url,
- [],
- $requestBody3
- );
+ $httpClientMock->expects($this->exactly(2))->method("post")->with(
+ $url,
+ [],
+ $requestBody3
+ );
$headers = [FlagshipConstant::HEADER_CONTENT_TYPE => FlagshipConstant::HEADER_APPLICATION_JSON];
@@ -307,12 +336,19 @@ public function testActivateFlag()
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\NoBatchingContinuousCachingStrategy",
- [$config, $httpClientMock],
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
true,
true,
- ["cacheHit","flushHits","logDebugSprintf"]
+ [
+ "cacheHit",
+ "flushHits",
+ "logDebugSprintf",
+ ]
);
$strategy->expects($this->never())->method("cacheHit");
@@ -333,21 +369,20 @@ public function testActivateFlag()
$url = FlagshipConstant::BASE_API_URL . '/' . FlagshipConstant::URL_ACTIVATE_MODIFICATION;
- $httpClientMock->expects($this->exactly(2))->method("post")
- ->with(
- $this->logicalOr(
- $url,
- $url
- ),
- $this->logicalOr(
- [],
- []
- ),
- $this->logicalOr(
- $requestBody,
- $requestBody2
- )
- );
+ $httpClientMock->expects($this->exactly(2))->method("post")->with(
+ $this->logicalOr(
+ $url,
+ $url
+ ),
+ $this->logicalOr(
+ [],
+ []
+ ),
+ $this->logicalOr(
+ $requestBody,
+ $requestBody2
+ )
+ );
$headers = $strategy->getActivateHeaders();
@@ -369,25 +404,30 @@ public function testActivateFlag()
0
);
- $strategy->expects($this->exactly(2))->method("logDebugSprintf")
- ->with(
- $this->logicalOr(
- $config,
- $config
- ),
- $this->logicalOr(
- FlagshipConstant::TRACKING_MANAGER,
- FlagshipConstant::TRACKING_MANAGER
- ),
- $this->logicalOr(
- FlagshipConstant::HIT_SENT_SUCCESS,
- FlagshipConstant::HIT_SENT_SUCCESS
- ),
- $this->logicalOr(
- [FlagshipConstant::SEND_ACTIVATE, $logMessage ],
- [FlagshipConstant::SEND_ACTIVATE, $logMessage1 ]
- )
- );
+ $strategy->expects($this->exactly(2))->method("logDebugSprintf")->with(
+ $this->logicalOr(
+ $config,
+ $config
+ ),
+ $this->logicalOr(
+ FlagshipConstant::TRACKING_MANAGER,
+ FlagshipConstant::TRACKING_MANAGER
+ ),
+ $this->logicalOr(
+ FlagshipConstant::HIT_SENT_SUCCESS,
+ FlagshipConstant::HIT_SENT_SUCCESS
+ ),
+ $this->logicalOr(
+ [
+ FlagshipConstant::SEND_ACTIVATE,
+ $logMessage,
+ ],
+ [
+ FlagshipConstant::SEND_ACTIVATE,
+ $logMessage1,
+ ]
+ )
+ );
$this->assertCount(0, $strategy->getHitsPoolQueue());
$this->assertCount(0, $strategy->getActivatePoolQueue());
@@ -408,12 +448,22 @@ public function testActivateFlagFailed()
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\NoBatchingContinuousCachingStrategy",
- [$config, $httpClientMock, "instanceId"],
+ [
+ $config,
+ $httpClientMock,
+ "instanceId",
+ ],
"",
true,
true,
true,
- ["cacheHit","flushHits","logErrorSprintf", "addTroubleshootingHit", "sendTroubleshootingQueue"]
+ [
+ "cacheHit",
+ "flushHits",
+ "logErrorSprintf",
+ "addTroubleshootingHit",
+ "sendTroubleshootingQueue",
+ ]
);
$strategy->expects($this->never())->method("flushHits");
@@ -430,12 +480,11 @@ public function testActivateFlagFailed()
$exception = new Exception("error");
- $httpClientMock->expects($this->exactly(1))->method("post")
- ->with(
- $url,
- [],
- $requestBody
- )->willThrowException($exception);
+ $httpClientMock->expects($this->exactly(1))->method("post")->with(
+ $url,
+ [],
+ $requestBody
+ )->willThrowException($exception);
$headers = $strategy->getActivateHeaders();
@@ -450,13 +499,15 @@ public function testActivateFlagFailed()
0
);
- $strategy->expects($this->exactly(1))->method("logErrorSprintf")
- ->with(
- $config,
- FlagshipConstant::TRACKING_MANAGER,
- FlagshipConstant::UNEXPECTED_ERROR_OCCURRED,
- [FlagshipConstant::SEND_ACTIVATE, $logMessage ]
- );
+ $strategy->expects($this->exactly(1))->method("logErrorSprintf")->with(
+ $config,
+ FlagshipConstant::TRACKING_MANAGER,
+ FlagshipConstant::UNEXPECTED_ERROR_OCCURRED,
+ [
+ FlagshipConstant::SEND_ACTIVATE,
+ $logMessage,
+ ]
+ );
$strategy->expects($this->once())->method("addTroubleshootingHit");
$strategy->expects($this->once())->method("sendTroubleshootingQueue");
@@ -478,7 +529,10 @@ public function testAddTroubleshootingHit()
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\NoBatchingContinuousCachingStrategy",
- [$config, $httpClientMock],
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
false,
@@ -503,7 +557,10 @@ public function testAddUsageHit()
$strategy = $this->getMockForAbstractClass(
"Flagship\Api\NoBatchingContinuousCachingStrategy",
- [$config, $httpClientMock],
+ [
+ $config,
+ $httpClientMock,
+ ],
"",
true,
false,
diff --git a/tests/Api/TrackingManagerTest.php b/tests/Api/TrackingManagerTest.php
index 3173f547..b544cad1 100644
--- a/tests/Api/TrackingManagerTest.php
+++ b/tests/Api/TrackingManagerTest.php
@@ -65,60 +65,59 @@ public function testCommonMethod()
$BatchingCachingStrategyMock = $this->getMockForAbstractClass(
"Flagship\Api\BatchingCachingStrategyAbstract",
- [$config, $httpClient],
+ [
+ $config,
+ $httpClient,
+ ],
"",
true,
true,
true,
[
- "addHit",
- "activateFlag",
- "sendBatch",
- "sendTroubleshootingQueue",
- "addTroubleshootingHit",
- "setTroubleshootingData",
- "getTroubleshootingData",
- "addUsageHit"
+ "addHit",
+ "activateFlag",
+ "sendBatch",
+ "sendTroubleshootingQueue",
+ "addTroubleshootingHit",
+ "setTroubleshootingData",
+ "getTroubleshootingData",
+ "addUsageHit",
]
);
$trackingManager = $this->getMockForAbstractClass(
"Flagship\Api\TrackingManager",
- [$config, $httpClient],
+ [
+ $config,
+ $httpClient,
+ ],
"",
true,
true,
true,
- ["getStrategy", "lookupHits"]
+ [
+ "getStrategy",
+ "lookupHits",
+ ]
);
- $trackingManager->expects($this->exactly(7))
- ->method("getStrategy")
- ->willReturn($BatchingCachingStrategyMock);
+ $trackingManager->expects($this->exactly(7))->method("getStrategy")->willReturn($BatchingCachingStrategyMock);
- $BatchingCachingStrategyMock->expects($this->once())
- ->method("addHit");
+ $BatchingCachingStrategyMock->expects($this->once())->method("addHit");
- $BatchingCachingStrategyMock->expects($this->once())
- ->method("setTroubleshootingData");
+ $BatchingCachingStrategyMock->expects($this->once())->method("setTroubleshootingData");
- $BatchingCachingStrategyMock->expects($this->once())
- ->method("getTroubleshootingData");
+ $BatchingCachingStrategyMock->expects($this->once())->method("getTroubleshootingData");
- $BatchingCachingStrategyMock->expects($this->once())
- ->method("activateFlag");
+ $BatchingCachingStrategyMock->expects($this->once())->method("activateFlag");
- $BatchingCachingStrategyMock->expects($this->once())
- ->method("addTroubleshootingHit");
+ $BatchingCachingStrategyMock->expects($this->once())->method("addTroubleshootingHit");
- $BatchingCachingStrategyMock->expects($this->once())
- ->method("sendBatch");
+ $BatchingCachingStrategyMock->expects($this->once())->method("sendBatch");
- $BatchingCachingStrategyMock->expects($this->once())
- ->method("sendTroubleshootingQueue");
+ $BatchingCachingStrategyMock->expects($this->once())->method("sendTroubleshootingQueue");
- $BatchingCachingStrategyMock->expects($this->once())
- ->method("addUsageHit");
+ $BatchingCachingStrategyMock->expects($this->once())->method("addUsageHit");
$page = new Page("http://localhost");
$page->setConfig($config);
@@ -151,12 +150,18 @@ public function testLookupHits()
$trackingManager = $this->getMockForAbstractClass(
"Flagship\Api\TrackingManager",
- [$config, $httpClient],
+ [
+ $config,
+ $httpClient,
+ ],
"",
true,
true,
true,
- ["logDebugSprintf","logErrorSprintf"]
+ [
+ "logDebugSprintf",
+ "logErrorSprintf",
+ ]
);
$config->setHitCacheImplementation($hitCacheImplementationMock);
@@ -187,59 +192,65 @@ public function testLookupHits()
/**
* @var $hits HitAbstract[]
*/
- $hits = [$event, $item, $page, $screen, $segment, $activate, $transaction];
+ $hits = [
+ $event,
+ $item,
+ $page,
+ $screen,
+ $segment,
+ $activate,
+ $transaction,
+ ];
$data = [];
foreach ($hits as $hit) {
$hitData = [
- HitCacheFields::VERSION => 1,
- HitCacheFields::DATA => [
- HitCacheFields::VISITOR_ID => $hit->getVisitorId(),
- HitCacheFields::ANONYMOUS_ID => $hit->getAnonymousId(),
- HitCacheFields::TYPE => $hit->getType()->value,
- HitCacheFields::CONTENT => $hit->toArray(),
- HitCacheFields::TIME => \round(microtime(true) * 1000)
- ]
- ];
+ HitCacheFields::VERSION => 1,
+ HitCacheFields::DATA => [
+ HitCacheFields::VISITOR_ID => $hit->getVisitorId(),
+ HitCacheFields::ANONYMOUS_ID => $hit->getAnonymousId(),
+ HitCacheFields::TYPE => $hit->getType()->value,
+ HitCacheFields::CONTENT => $hit->toArray(),
+ HitCacheFields::TIME => \round(microtime(true) * 1000),
+ ],
+ ];
$data[$hit->getKey()] = $hitData;
}
$data["$visitorId:key8"] = [
- HitCacheFields::VERSION => 1,
- HitCacheFields::DATA => [
- HitCacheFields::VISITOR_ID => $page->getVisitorId(),
- HitCacheFields::ANONYMOUS_ID => $page->getAnonymousId(),
- HitCacheFields::TYPE => $page->getType()->value,
- HitCacheFields::CONTENT => $page->toArray(),
- HitCacheFields::TIME => (new DateTime("2020/01/01"))->format("Uv")
- ]
- ];
+ HitCacheFields::VERSION => 1,
+ HitCacheFields::DATA => [
+ HitCacheFields::VISITOR_ID => $page->getVisitorId(),
+ HitCacheFields::ANONYMOUS_ID => $page->getAnonymousId(),
+ HitCacheFields::TYPE => $page->getType()->value,
+ HitCacheFields::CONTENT => $page->toArray(),
+ HitCacheFields::TIME => (new DateTime("2020/01/01"))->format("Uv"),
+ ],
+ ];
$data["$visitorId:key9"] = [
- HitCacheFields::VERSION => 1,
- HitCacheFields::DATA => [
- HitCacheFields::VISITOR_ID => $page->getVisitorId(),
- HitCacheFields::ANONYMOUS_ID => $page->getAnonymousId(),
- HitCacheFields::TYPE => "unknown",
- HitCacheFields::CONTENT => $page->toArray(),
- HitCacheFields::TIME => \round(microtime(true) * 1000)
- ]
- ];
+ HitCacheFields::VERSION => 1,
+ HitCacheFields::DATA => [
+ HitCacheFields::VISITOR_ID => $page->getVisitorId(),
+ HitCacheFields::ANONYMOUS_ID => $page->getAnonymousId(),
+ HitCacheFields::TYPE => "unknown",
+ HitCacheFields::CONTENT => $page->toArray(),
+ HitCacheFields::TIME => \round(microtime(true) * 1000),
+ ],
+ ];
$key10 = "$visitorId:key10";
$data[$key10] = [
- HitCacheFields::DATA => [
- HitCacheFields::VISITOR_ID => $page->getVisitorId(),
- HitCacheFields::ANONYMOUS_ID => $page->getAnonymousId(),
- HitCacheFields::TYPE => "unknown",
- HitCacheFields::CONTENT => $page->toArray(),
- HitCacheFields::TIME => \round(microtime(true) * 1000)
- ]
- ];
+ HitCacheFields::DATA => [
+ HitCacheFields::VISITOR_ID => $page->getVisitorId(),
+ HitCacheFields::ANONYMOUS_ID => $page->getAnonymousId(),
+ HitCacheFields::TYPE => "unknown",
+ HitCacheFields::CONTENT => $page->toArray(),
+ HitCacheFields::TIME => \round(microtime(true) * 1000),
+ ],
+ ];
- $hitCacheImplementationMock->expects($this->exactly(2))
- ->method("lookupHits")
- ->willReturnOnConsecutiveCalls($data, []);
+ $hitCacheImplementationMock->expects($this->exactly(2))->method("lookupHits")->willReturnOnConsecutiveCalls($data, []);
Round::$returnValue = \round(microtime(true) * 1000);
@@ -262,7 +273,10 @@ public function testLookupHitsFailed()
$trackingManager = $this->getMockForAbstractClass(
"Flagship\Api\TrackingManager",
- [$config, $httpClient],
+ [
+ $config,
+ $httpClient,
+ ],
"",
true,
true,
@@ -274,18 +288,17 @@ public function testLookupHitsFailed()
$exception = new Exception("error");
- $hitCacheImplementationMock->expects($this->exactly(1))
- ->method("lookupHits")
- ->willThrowException($exception);
-
- $trackingManager->expects($this->once())
- ->method("logErrorSprintf")
- ->with(
- $config,
- FlagshipConstant::PROCESS_CACHE,
- FlagshipConstant::HIT_CACHE_ERROR,
- ["lookupHits", $exception->getMessage()]
- );
+ $hitCacheImplementationMock->expects($this->exactly(1))->method("lookupHits")->willThrowException($exception);
+
+ $trackingManager->expects($this->once())->method("logErrorSprintf")->with(
+ $config,
+ FlagshipConstant::PROCESS_CACHE,
+ FlagshipConstant::HIT_CACHE_ERROR,
+ [
+ "lookupHits",
+ $exception->getMessage(),
+ ]
+ );
$trackingManager->lookupHits();
}
diff --git a/tests/Assets/File.php b/tests/Assets/File.php
index 0cf8e3e6..0d123d8e 100644
--- a/tests/Assets/File.php
+++ b/tests/Assets/File.php
@@ -40,7 +40,7 @@ function file_put_contents($filename, $data)
function fwrite($stream, $data)
{
- File::$fwriteData = $data;
+ File::$fwriteData = $data;
}
function mkdir($directory, $permissions = 0777, $recursive = false)
diff --git a/tests/Config/BucketingConfigTest.php b/tests/Config/BucketingConfigTest.php
index 40e8c018..a44f8d47 100644
--- a/tests/Config/BucketingConfigTest.php
+++ b/tests/Config/BucketingConfigTest.php
@@ -29,7 +29,7 @@ public function testJson()
FlagshipField::FIELD_ENVIRONMENT_ID => null,
FlagshipField::FIELD_API_KEY => null,
FlagshipField::FIELD_TIMEOUT => 2000,
- FlagshipField::FIELD_LOG_LEVEL => LogLevel::ALL,
+ FlagshipField::FIELD_LOG_LEVEL => LogLevel::INFO,
FlagshipField::FIELD_BUCKETING_URL => $bucketingUrl
];
diff --git a/tests/Config/FlagshipConfigTest.php b/tests/Config/FlagshipConfigTest.php
index 372f34ac..acef1825 100644
--- a/tests/Config/FlagshipConfigTest.php
+++ b/tests/Config/FlagshipConfigTest.php
@@ -2,20 +2,24 @@
namespace Flagship\Config;
-use Flagship\Enum\CacheStrategy;
-use Flagship\Enum\DecisionMode;
-use Flagship\Enum\FlagshipConstant;
-use Flagship\Enum\FlagshipField;
-use Flagship\Enum\LogLevel;
+use ReflectionException;
use Flagship\Utils\Utils;
+use Flagship\Enum\LogLevel;
+use Psr\Log\LoggerInterface;
+use Flagship\Enum\DecisionMode;
use PHPUnit\Framework\TestCase;
-use ReflectionException;
+use Flagship\Enum\CacheStrategy;
+use Flagship\Enum\FlagshipField;
+use Flagship\Enum\FlagshipConstant;
+use Flagship\Cache\IHitCacheImplementation;
+use PHPUnit\Framework\MockObject\MockObject;
+use Flagship\Cache\IVisitorCacheImplementation;
class FlagshipConfigTest extends TestCase
{
public function configData(): array
{
- return ['envId' => 'env_value','apiKey' => 'key_value'];
+ return ['envId' => 'env_value', 'apiKey' => 'key_value'];
}
@@ -40,7 +44,7 @@ public function testSetLogLevel()
$apiKey = "apiKey";
$config = new DecisionApiConfig($envId, $apiKey);
- $this->assertSame(LogLevel::ALL, $config->getLogLevel());
+ $this->assertSame(LogLevel::INFO, $config->getLogLevel());
$config->setLogLevel(LogLevel::ERROR);
$this->assertSame(LogLevel::ERROR, $config->getLogLevel());
@@ -76,6 +80,17 @@ public function testDecisionMode()
}
+ public function testSetDisableDeveloperUsageTracking()
+ {
+ $configData = $this->configData();
+ $config = new DecisionApiConfig($configData['envId'], $configData['apiKey']);
+ $this->assertFalse($config->disableDeveloperUsageTracking());
+
+ $config->setDisableDeveloperUsageTracking(true);
+ $this->assertTrue($config->disableDeveloperUsageTracking());
+ }
+
+
public function testConstruct()
{
$configData = $this->configData();
@@ -89,11 +104,17 @@ public function testConstruct()
$config->setCacheStrategy(CacheStrategy::NO_BATCHING_AND_CACHING_ON_FAILURE);
$this->assertSame(CacheStrategy::NO_BATCHING_AND_CACHING_ON_FAILURE, $config->getCacheStrategy());
+ /**
+ * @var IVisitorCacheImplementation|MockObject $visitorCacheImplementation
+ */
$visitorCacheImplementation = $this->getMockForAbstractClass("Flagship\Cache\IVisitorCacheImplementation");
$config->setVisitorCacheImplementation($visitorCacheImplementation);
$this->assertSame($visitorCacheImplementation, $config->getVisitorCacheImplementation());
+ /**
+ * @var IHitCacheImplementation|MockObject $hitCacheImplementation
+ */
$hitCacheImplementation = $this->getMockForAbstractClass("Flagship\Cache\IHitCacheImplementation");
$config->setHitCacheImplementation($hitCacheImplementation);
@@ -117,6 +138,9 @@ public function testSetDecisionMode()
public function testSetStatusChangedCallback()
{
+ /**
+ * @var LoggerInterface|MockObject $logManagerMock
+ */
$logManagerMock = $this->getMockForAbstractClass('Psr\Log\LoggerInterface');
$config = new DecisionApiConfig();
@@ -125,8 +149,7 @@ public function testSetStatusChangedCallback()
$this->assertNull($config->getOnSdkStatusChanged());
- $callable = function () {
- };
+ $callable = function () {};
$config->setOnSdkStatusChanged($callable);
$this->assertSame($callable, $config->getOnSdkStatusChanged());
@@ -134,6 +157,9 @@ public function testSetStatusChangedCallback()
public function testSetOnVisitorExposure()
{
+ /**
+ * @var LoggerInterface|MockObject $logManagerMock
+ */
$logManagerMock = $this->getMockForAbstractClass('Psr\Log\LoggerInterface');
$config = new DecisionApiConfig();
@@ -142,8 +168,7 @@ public function testSetOnVisitorExposure()
$this->assertNull($config->getOnVisitorExposed());
- $callable = function () {
- };
+ $callable = function () {};
$config->setOnVisitorExposed($callable);
$this->assertSame($callable, $config->getOnVisitorExposed());
@@ -155,7 +180,7 @@ public function testJson()
FlagshipField::FIELD_ENVIRONMENT_ID => 'envId',
FlagshipField::FIELD_API_KEY => "apiKey",
FlagshipField::FIELD_TIMEOUT => 2000,
- FlagshipField::FIELD_LOG_LEVEL => LogLevel::ALL,
+ FlagshipField::FIELD_LOG_LEVEL => LogLevel::INFO,
];
$config = new DecisionApiConfig($data['environmentId'], $data['apiKey']);
@@ -165,8 +190,14 @@ public function testJson()
json_encode($data),
json_encode($config)
);
+
+ /**
+ * @var LoggerInterface|MockObject $logManager
+ */
$logManager = $this->getMockForAbstractClass("Psr\Log\LoggerInterface");
+
$config->setLogManager($logManager);
+
$this->assertSame($logManager, $config->getLogManager());
}
diff --git a/tests/Decision/ApiManagerTest.php b/tests/Decision/ApiManagerTest.php
index 62fa6a11..622c2eba 100644
--- a/tests/Decision/ApiManagerTest.php
+++ b/tests/Decision/ApiManagerTest.php
@@ -57,73 +57,72 @@ public function testGetCampaignModifications()
);
$modificationValue1 = [
- "background" => "bleu ciel",
- "btnColor" => "#EE3300",
- "borderColor" => null, //test modification null
- 'isVip' => false, //test modification false
- 'firstConnect' => true
- ];
+ "background" => "bleu ciel",
+ "btnColor" => "#EE3300",
+ "borderColor" => null, //test modification null
+ 'isVip' => false, //test modification false
+ 'firstConnect' => true,
+ ];
$modificationValue2 = [
- "key" => "variation 2",
- "key2" => 1,
- "key3" => 3,
- "key4" => 4,
- "key5" => '' //test modification empty
- ];
+ "key" => "variation 2",
+ "key2" => 1,
+ "key3" => 3,
+ "key4" => 4,
+ "key5" => '',//test modification empty
+ ];
$modificationValue3 = [
- 'key' => 'variation 3',
- 'key2' => 3
- ];
+ 'key' => 'variation 3',
+ 'key2' => 3,
+ ];
$mergeModification = array_merge($modificationValue1, $modificationValue2);
$campaigns = [
- [
- "id" => "c1e3t1nvfu1ncqfcdco0",
- "variationGroupId" => "c1e3t1nvfu1ncqfcdcp0",
- "variation" => [
- "id" => "c1e3t1nvfu1ncqfcdcq0",
- "modifications" => [
- "type" => "FLAG",
- "value" => $modificationValue1
- ],
- "reference" => false]
- ],
- [
- "id" => "c20j8bk3fk9hdphqtd1g",
- "variationGroupId" => "c20j8bk3fk9hdphqtd2g",
- "variation" => [
- "id" => "c20j9lgbcahhf2mvhbf0",
- "modifications" => [
- "type" => "JSON",
- "value" => $modificationValue2
- ],
- "reference" => true
- ]
- ],
- [
- "id" => "c20j8bksdfk9hdphqtd1g",
- "variationGroupId" => "c2sf8bk3fk9hdphqtd2g",
- "variation" => [
- "id" => "c20j9lrfcahhf2mvhbf0",
- "modifications" => [
- "type" => "JSON",
- "value" => $modificationValue3
- ],
- "reference" => true
- ]
- ]
- ];
+ [
+ "id" => "c1e3t1nvfu1ncqfcdco0",
+ "variationGroupId" => "c1e3t1nvfu1ncqfcdcp0",
+ "variation" => [
+ "id" => "c1e3t1nvfu1ncqfcdcq0",
+ "modifications" => [
+ "type" => "FLAG",
+ "value" => $modificationValue1,
+ ],
+ "reference" => false,
+ ],
+ ],
+ [
+ "id" => "c20j8bk3fk9hdphqtd1g",
+ "variationGroupId" => "c20j8bk3fk9hdphqtd2g",
+ "variation" => [
+ "id" => "c20j9lgbcahhf2mvhbf0",
+ "modifications" => [
+ "type" => "JSON",
+ "value" => $modificationValue2,
+ ],
+ "reference" => true,
+ ],
+ ],
+ [
+ "id" => "c20j8bksdfk9hdphqtd1g",
+ "variationGroupId" => "c2sf8bk3fk9hdphqtd2g",
+ "variation" => [
+ "id" => "c20j9lrfcahhf2mvhbf0",
+ "modifications" => [
+ "type" => "JSON",
+ "value" => $modificationValue3,
+ ],
+ "reference" => true,
+ ],
+ ],
+ ];
$visitorId = "visitorId";
$body = [
- "visitorId" => $visitorId,
- "campaigns" => $campaigns
- ];
+ "visitorId" => $visitorId,
+ "campaigns" => $campaigns,
+ ];
- $httpPost = $httpClientMock->expects($this->exactly(2))
- ->method('post')
- ->willReturn(new HttpResponse(204, $body));
+ $httpPost = $httpClientMock->expects($this->exactly(2))->method('post')->willReturn(new HttpResponse(204, $body));
$config = new DecisionApiConfig("env_id", "apiKey");
$manager = new ApiManager($httpClientMock, $config);
@@ -139,38 +138,37 @@ public function testGetCampaignModifications()
$visitor = new VisitorDelegate(new Container(), $configManager, $visitorId, false, [], true);
$postData = [
- "visitorId" => $visitor->getVisitorId(),
- "anonymousId" => $visitor->getAnonymousId(),
- "trigger_hit" => false,
- "context" => count($visitor->getContext()) > 0 ? $visitor->getContext() : null,
- "visitor_consent" => $visitor->hasConsented()
- ];
+ "visitorId" => $visitor->getVisitorId(),
+ "anonymousId" => $visitor->getAnonymousId(),
+ "trigger_hit" => false,
+ "context" => count($visitor->getContext()) > 0 ? $visitor->getContext() : null,
+ "visitor_consent" => $visitor->hasConsented(),
+ ];
$url = FlagshipConstant::BASE_API_URL . '/' . $config->getEnvId() . '/' .
FlagshipConstant::URL_CAMPAIGNS . '?' .
FlagshipConstant::EXPOSE_ALL_KEYS . '=true&extras[]=accountSettings';
- $httpPost
- ->with(
- $this->logicalOr(
- $this->equalTo($url),
- $this->equalTo($url)
- ),
- $this->logicalOr(
- $this->equalTo([]),
- $this->equalTo([])
- ),
- $this->logicalOr(
- $this->equalTo($postData),
- $this->equalTo([
- "visitorId" => $visitor->getVisitorId(),
- "anonymousId" => $visitor->getAnonymousId(),
- "trigger_hit" => false,
- "context" => count($visitor->getContext()) > 0 ? $visitor->getContext() : null,
- "visitor_consent" => false
- ])
- )
- );
+ $httpPost->with(
+ $this->logicalOr(
+ $this->equalTo($url),
+ $this->equalTo($url)
+ ),
+ $this->logicalOr(
+ $this->equalTo([]),
+ $this->equalTo([])
+ ),
+ $this->logicalOr(
+ $this->equalTo($postData),
+ $this->equalTo([
+ "visitorId" => $visitor->getVisitorId(),
+ "anonymousId" => $visitor->getAnonymousId(),
+ "trigger_hit" => false,
+ "context" => count($visitor->getContext()) > 0 ? $visitor->getContext() : null,
+ "visitor_consent" => false,
+ ])
+ )
+ );
$modifications = $manager->getCampaignFlags($visitor);
@@ -204,10 +202,10 @@ public function testGetCampaignModificationsWithPanicMode()
$visitorId = "visitorId";
$body = [
- "visitorId" => $visitorId,
- "campaigns" => [],
- "panic" => true
- ];
+ "visitorId" => $visitorId,
+ "campaigns" => [],
+ "panic" => true,
+ ];
$httpClientMock->method('post')->willReturn(new HttpResponse(204, $body));
@@ -252,57 +250,58 @@ public function testGetCampaignModificationsWithSomeFailed()
$httpClientMock = $this->getMockForAbstractClass('Flagship\Utils\HttpClientInterface', ['post'], "", false);
$modificationValue = [
- "background" => "bleu ciel",
- "btnColor" => "#EE3300",
- "borderColor" => null,
- 'isVip' => false,
- 'firstConnect' => true,
- '' => 'hello world' //Test with invalid key
- ];
+ "background" => "bleu ciel",
+ "btnColor" => "#EE3300",
+ "borderColor" => null,
+ 'isVip' => false,
+ 'firstConnect' => true,
+ '' => 'hello world',//Test with invalid key
+ ];
$campaigns = [
- [
- "id" => "c1e3t1nvfu1ncqfcdco0",
- "variationGroupId" => "c1e3t1nvfu1ncqfcdcp0",
- "variation" => [
- "id" => "c1e3t1nvfu1ncqfcdcq0",
- "modifications" => [ //Test modification without Value
+ [
+ "id" => "c1e3t1nvfu1ncqfcdco0",
+ "variationGroupId" => "c1e3t1nvfu1ncqfcdcp0",
+ "variation" => [
+ "id" => "c1e3t1nvfu1ncqfcdcq0",
+ "modifications" => [ //Test modification without Value
"type" => "FLAG",
- ],
- "reference" => false]
- ],
- [
- "id" => "c20j8bk3fk9hdphqtd1g",
- "variationGroupId" => "c20j8bk3fk9hdphqtd2g",
- "variation" => [ //Test Variation without modification
- "id" => "c20j9lgbcahhf2mvhbf0",
- "reference" => true
- ]
- ],
- [ // Test Campaign without variation
- "id" => "c20j8bksdfk9hdphqtd1g",
- "variationGroupId" => "c2sf8bk3fk9hdphqtd2g",
-
- ],
- [
- "id" => "c20j8bksdfk9hdphqtd1g",
- "variationGroupId" => "c2sf8bk3fk9hdphqtd2g",
- "variation" => [
- "id" => "c20j9lrfcahhf2mvhbf0",
- "modifications" => [
- "type" => "JSON",
- "value" => $modificationValue
- ],
- "reference" => true
- ]
- ]
- ];
+ ],
+ "reference" => false,
+ ],
+ ],
+ [
+ "id" => "c20j8bk3fk9hdphqtd1g",
+ "variationGroupId" => "c20j8bk3fk9hdphqtd2g",
+ "variation" => [ //Test Variation without modification
+ "id" => "c20j9lgbcahhf2mvhbf0",
+ "reference" => true,
+ ],
+ ],
+ [ // Test Campaign without variation
+ "id" => "c20j8bksdfk9hdphqtd1g",
+ "variationGroupId" => "c2sf8bk3fk9hdphqtd2g",
+
+ ],
+ [
+ "id" => "c20j8bksdfk9hdphqtd1g",
+ "variationGroupId" => "c2sf8bk3fk9hdphqtd2g",
+ "variation" => [
+ "id" => "c20j9lrfcahhf2mvhbf0",
+ "modifications" => [
+ "type" => "JSON",
+ "value" => $modificationValue,
+ ],
+ "reference" => true,
+ ],
+ ],
+ ];
$visitorId = "visitorId";
$body = [
- "visitorId" => $visitorId,
- "campaigns" => $campaigns
- ];
+ "visitorId" => $visitorId,
+ "campaigns" => $campaigns,
+ ];
$httpClientMock->method('post')->willReturn(new HttpResponse(204, $body));
@@ -349,8 +348,7 @@ public function testGetCampaignThrowException()
//Mock method curl->post to throw Exception
$errorMessage = "{'message': 'Forbidden'}";
- $httpClientMock->method('post')
- ->willThrowException(new Exception($errorMessage, 403));
+ $httpClientMock->method('post')->willThrowException(new Exception($errorMessage, 403));
$config = new DecisionApiConfig("env_id", "api_key");
@@ -373,10 +371,9 @@ public function testGetCampaignThrowException()
$visitor = new VisitorDelegate(new Container(), $configManager, 'visitor_id', false, ['age' => 15], true);
- $logManagerStub->expects($this->once())->method('error')
- ->with(
- $errorMessage
- );
+ $logManagerStub->expects($this->once())->method('error')->with(
+ $errorMessage
+ );
$value = $apiManager->getCampaigns($visitor);
diff --git a/tests/Decision/BucketingManagerTest.php b/tests/Decision/BucketingManagerTest.php
index f50a4eef..3b83f12c 100644
--- a/tests/Decision/BucketingManagerTest.php
+++ b/tests/Decision/BucketingManagerTest.php
@@ -4,21 +4,23 @@
use DateTime;
use Exception;
-use Flagship\Config\BucketingConfig;
-use Flagship\Enum\FlagshipConstant;
-use Flagship\Enum\FlagshipField;
-use Flagship\Enum\TroubleshootingLabel;
-use Flagship\Model\HttpResponse;
-use Flagship\Utils\ConfigManager;
+use ReflectionException;
+use Flagship\Utils\Utils;
+use Psr\Log\LoggerInterface;
use Flagship\Utils\Container;
use Flagship\Utils\HttpClient;
use Flagship\Utils\MurmurHash;
-use Flagship\Utils\Utils;
+use PHPUnit\Framework\TestCase;
+use Flagship\Enum\FlagshipField;
+use Flagship\Model\HttpResponse;
+use Flagship\Utils\ConfigManager;
+use Flagship\Enum\FlagshipConstant;
+use Flagship\Config\BucketingConfig;
use Flagship\Visitor\DefaultStrategy;
use Flagship\Visitor\VisitorDelegate;
use Flagship\Visitor\StrategyAbstract;
-use PHPUnit\Framework\TestCase;
-use ReflectionException;
+use Flagship\Enum\TroubleshootingLabel;
+use PHPUnit\Framework\MockObject\MockObject;
class BucketingManagerTest extends TestCase
{
@@ -35,32 +37,22 @@ public function testGetCampaignModification()
$bucketingManager->setFlagshipInstanceId("flagship_instance_id");
$bucketingManager->setTrackingManager($trackingManagerMock);
$visitorId = "visitor_1";
- $visitorContext = [
- "age" => 20
- ];
+ $visitorContext = ["age" => 20];
$container = new Container();
- $configManager = $this->getMockBuilder(ConfigManager::class)
- ->disableOriginalConstructor()
- ->getMock();
+ $configManager = $this->getMockBuilder(ConfigManager::class)->disableOriginalConstructor()->getMock();
$configManager->setConfig($config);
- $visitor = $this->getMockBuilder(VisitorDelegate::class)
- ->setConstructorArgs([$container, $configManager, $visitorId, false, $visitorContext, true])
- ->onlyMethods(["sendHit"])
- ->getMock();
+ $visitor = $this->getMockBuilder(VisitorDelegate::class)->setConstructorArgs([$container, $configManager, $visitorId, false, $visitorContext, true])->onlyMethods(["sendHit"])->getMock();
$bucketingFile = \file_get_contents(__DIR__ . '/bucketing.json');
- $httpClientMock->expects($this->exactly(6))
- ->method('get')
- ->with($bucketingUrl)
- ->willReturnOnConsecutiveCalls(
- new HttpResponse(204, null),
- new HttpResponse(204, json_decode('{"panic": true}', true)),
- new HttpResponse(204, json_decode('{}', true)),
- new HttpResponse(204, json_decode('{"campaigns":[{}]}', true)),
- new HttpResponse(204, json_decode('{"notExistKey": false}', true)),
- new HttpResponse(204, json_decode($bucketingFile, true))
- );
+ $httpClientMock->expects($this->exactly(6))->method('get')->with($bucketingUrl)->willReturnOnConsecutiveCalls(
+ new HttpResponse(204, null),
+ new HttpResponse(204, json_decode('{"panic": true}', true)),
+ new HttpResponse(204, json_decode('{}', true)),
+ new HttpResponse(204, json_decode('{"campaigns":[{}]}', true)),
+ new HttpResponse(204, json_decode('{"notExistKey": false}', true)),
+ new HttpResponse(204, json_decode($bucketingFile, true))
+ );
//Test File not exist
$campaigns = $bucketingManager->getCampaignFlags($visitor);
@@ -79,27 +71,27 @@ public function testGetCampaignModification()
//Test campaign[FIELD_VARIATION_GROUPS]
- $campaigns = $bucketingManager->getCampaignFlags($visitor);
+ $campaigns = $bucketingManager->getCampaignFlags($visitor);
- $this->assertCount(0, $campaigns);
+ $this->assertCount(0, $campaigns);
- //
+ //
- $campaigns = $bucketingManager->getCampaignFlags($visitor);
+ $campaigns = $bucketingManager->getCampaignFlags($visitor);
- $this->assertCount(0, $campaigns);
+ $this->assertCount(0, $campaigns);
- //
- $campaigns = $bucketingManager->getCampaignFlags($visitor);
+ //
+ $campaigns = $bucketingManager->getCampaignFlags($visitor);
- $this->assertCount(6, $campaigns);
+ $this->assertCount(6, $campaigns);
- //test invalid bucketing file url
+ //test invalid bucketing file url
- $config->setSyncAgentUrl("");
- $campaigns = $bucketingManager->getCampaignFlags($visitor);
+ $config->setSyncAgentUrl("");
+ $campaigns = $bucketingManager->getCampaignFlags($visitor);
- $this->assertCount(0, $campaigns);
+ $this->assertCount(0, $campaigns);
}
/**
@@ -118,44 +110,30 @@ public function testGetTroubleshootingData()
$bucketingManager->setFlagshipInstanceId("flagship_instance_id");
$bucketingManager->setTrackingManager($trackingManagerMock);
$visitorId = "visitor_1";
- $visitorContext = [
- "age" => 20
- ];
+ $visitorContext = ["age" => 20];
$container = new Container();
- $configManager = $this->getMockBuilder(ConfigManager::class)
- ->disableOriginalConstructor()
- ->getMock();
+ $configManager = $this->getMockBuilder(ConfigManager::class)->disableOriginalConstructor()->getMock();
- $visitor = $this->getMockBuilder(VisitorDelegate::class)
- ->setConstructorArgs([$container, $configManager, $visitorId, false, $visitorContext, true])
- ->onlyMethods(["sendHit"])
- ->getMock();
+ $visitor = $this->getMockBuilder(VisitorDelegate::class)->setConstructorArgs([$container, $configManager, $visitorId, false, $visitorContext, true])->onlyMethods(["sendHit"])->getMock();
$bucketingFile = \file_get_contents(__DIR__ . '/bucketing.json');
$bucketingContent = json_decode($bucketingFile, true);
$troubleshooting = [
- "startDate" => "2023-04-13T09:33:38.049Z",
- "endDate" => "2023-04-13T10:03:38.049Z",
- "timezone" => "Europe/Paris",
- "traffic" => 40
- ];
- $bucketingContent["accountSettings"] = [
- "troubleshooting" => $troubleshooting
- ];
+ "startDate" => "2023-04-13T09:33:38.049Z",
+ "endDate" => "2023-04-13T10:03:38.049Z",
+ "timezone" => "Europe/Paris",
+ "traffic" => 40,
+ ];
+ $bucketingContent["accountSettings"] = ["troubleshooting" => $troubleshooting];
$matcher = $this->exactly(1);
- $trackingManagerMock->expects($matcher)
- ->method('addTroubleshootingHit')
- ->with($this->callback(function ($param) use ($matcher) {
+ $trackingManagerMock->expects($matcher)->method('addTroubleshootingHit')->with($this->callback(function ($param) use ($matcher) {
return $param->getLabel() === TroubleshootingLabel::SDK_BUCKETING_FILE;
- }));
+ }));
- $httpClientMock->expects($this->exactly(1))
- ->method('get')
- ->with($bucketingUrl)
- ->willReturnOnConsecutiveCalls(
- new HttpResponse(204, $bucketingContent)
- );
+ $httpClientMock->expects($this->exactly(1))->method('get')->with($bucketingUrl)->willReturnOnConsecutiveCalls(
+ new HttpResponse(204, $bucketingContent)
+ );
$bucketingManager->getCampaignFlags($visitor);
@@ -171,7 +149,7 @@ public function testGetTroubleshootingData()
public function testSendContext()
{
$logManagerStub = $this->getMockForAbstractClass(
- 'Psr\Log\LoggerInterface',
+ LoggerInterface::class,
['error'],
'',
false
@@ -179,7 +157,10 @@ public function testSendContext()
$httpClientMock = $this->getMockForAbstractClass(
'Flagship\Utils\HttpClientInterface',
- ['post', 'get'],
+ [
+ 'post',
+ 'get',
+ ],
"",
false
);
@@ -199,7 +180,7 @@ public function testSendContext()
$containerGetMethod = function ($arg1, $arg2) {
- return new DefaultStrategy($arg2[0]);
+ return new DefaultStrategy($arg2[0]);
};
$containerMock->method('get')->will($this->returnCallback($containerGetMethod));
@@ -208,13 +189,13 @@ public function testSendContext()
$visitorId = "visitor_1";
$visitorContext = [
- "age" => 20,
- "sdk_osName" => PHP_OS,
- "sdk_deviceType" => "server",
- FlagshipConstant::FS_CLIENT => FlagshipConstant::SDK_LANGUAGE,
- FlagshipConstant::FS_VERSION => FlagshipConstant::SDK_VERSION,
- FlagshipConstant::FS_USERS => $visitorId,
- ];
+ "age" => 20,
+ "sdk_osName" => PHP_OS,
+ "sdk_deviceType" => "server",
+ FlagshipConstant::FS_CLIENT => FlagshipConstant::SDK_LANGUAGE,
+ FlagshipConstant::FS_VERSION => FlagshipConstant::SDK_VERSION,
+ FlagshipConstant::FS_USERS => $visitorId,
+ ];
$bucketingUrl = "http:127.0.0.1:3000";
@@ -227,22 +208,38 @@ public function testSendContext()
$bucketingManager->setTrackingManager($trackingManagerMock);
+ /**
+ * @var MockObject|ConfigManager $configManager
+ */
$configManager = $this->getMockBuilder(ConfigManager::class)
->disableOriginalConstructor()
->getMock();
+
$configManager->setConfig($config)->setTrackingManager($trackerManager);
+
+
+ /**
+ * @var MockObject|VisitorDelegate $visitor
+ */
$visitor = $this->getMockBuilder(VisitorDelegate::class)
->setConstructorArgs([$containerMock, $configManager, $visitorId, false, $visitorContext, true])
->onlyMethods(["sendHit"])
->getMock();
- $httpClientMock->expects($this->exactly(2))
+ $httpClientMock->expects($this->exactly(4))
->method('get')
->willReturn(
new HttpResponse(204, json_decode('{"campaigns":[{}]}', true))
);
- $visitor->expects($this->exactly(1))->method("sendHit");
+ $visitor->expects($this->exactly(2))->method("sendHit");
+
+ $bucketingManager->getCampaignFlags($visitor);
+
+ $bucketingManager->getCampaignFlags($visitor);
+
+ $visitor->updateContext("new_context", "new_value");
+
$bucketingManager->getCampaignFlags($visitor);
@@ -264,9 +261,7 @@ public function testGetVariation()
$visitorId = "123456";
$container = new Container();
- $configManager = $this->getMockBuilder(ConfigManager::class)
- ->disableOriginalConstructor()
- ->getMock();
+ $configManager = $this->getMockBuilder(ConfigManager::class)->disableOriginalConstructor()->getMock();
$configManager->setConfig($config);
$visitor = new VisitorDelegate($container, $configManager, $visitorId, false, [], true);
@@ -279,59 +274,137 @@ public function testGetVariation()
//Test key id in variationGroup
$variations = [
- [
- "id" => "c20j8bk3fk9hdphqtd30",
- "name" => "variation1",
- "modifications" => [
- "type" => "HTML",
- "value" => [
- "my_html" => "
"
- ]
- ],
- "allocation" => 34,
- "reference" => true
- ],
- [
- "id" => "c20j8bk3fk9hdphqtd3g",
- "name" => "variation2",
- "modifications" => [
- "type" => "HTML",
- "value" => [
- "my_html" => ""
- ]
- ],
- "allocation" => 33
- ],
- [
- "id" => "c20j9lgbcahhf2mvhbf0",
- "name" => "variation3",
- "modifications" => [
- "type" => "HTML",
- "value" => [
- "my_html" => ""
- ]
- ],
- "allocation" => 33
- ]
- ];
+ [
+ "id" => "c20j8bk3fk9hdphqtd30",
+ "name" => "variation1",
+ "modifications" => [
+ "type" => "HTML",
+ "value" => ["my_html" => ""],
+ ],
+ "allocation" => 34,
+ "reference" => true,
+ ],
+ [
+ "id" => "c20j8bk3fk9hdphqtd3g",
+ "name" => "variation2",
+ "modifications" => [
+ "type" => "HTML",
+ "value" => ["my_html" => ""],
+ ],
+ "allocation" => 33,
+ ],
+ [
+ "id" => "c20j9lgbcahhf2mvhbf0",
+ "name" => "variation3",
+ "modifications" => [
+ "type" => "HTML",
+ "value" => ["my_html" => ""],
+ ],
+ "allocation" => 33,
+ ],
+ ];
$variationGroups = [
- FlagshipField::FIELD_ID => "9273BKSDJtoto",
- FlagshipField::FIELD_VARIATIONS => $variations,
- FlagshipField::FIELD_NANE => "varGroupName"
- ];
+ FlagshipField::FIELD_ID => "9273BKSDJtoto",
+ FlagshipField::FIELD_VARIATIONS => $variations,
+ FlagshipField::FIELD_NANE => "varGroupName",
+ ];
$variation = $getVariationMethod->invoke($bucketingManager, $variationGroups, $visitor);
$this->assertSame($variations[0]['id'], $variation['id']);
$variationGroups = [
- FlagshipField::FIELD_ID => "vgidéééà ",
- FlagshipField::FIELD_VARIATIONS => $variations
- ];
+ FlagshipField::FIELD_ID => "vgidéééà ",
+ FlagshipField::FIELD_VARIATIONS => $variations,
+ ];
$visitorId = 'ëééééé';
$visitor->setVisitorId($visitorId);
$variation = $getVariationMethod->invoke($bucketingManager, $variationGroups, $visitor);
$this->assertSame($variations[2]['id'], $variation['id']);
//Test realloc
+ $realloCvariations = [
+ [
+ "id" => "c20j8bk3fk9hdphqtd30",
+ "name" => "variation1",
+ "modifications" => [
+ "type" => "HTML",
+ "value" => ["my_html" => ""],
+ ],
+ "allocation" => 100,
+ "reference" => true,
+ ],
+ [
+ "id" => "c20j8bk3fk9hdphqtd3g",
+ "name" => "variation2",
+ "modifications" => [
+ "type" => "HTML",
+ "value" => ["my_html" => ""],
+ ],
+ "allocation" => 0,
+ ],
+ [
+ "id" => "c20j9lgbcahhf2mvhbf0",
+ "name" => "variation2",
+ "modifications" => [
+ "type" => "HTML",
+ "value" => ["my_html" => ""],
+ ],
+ "allocation" => 0,
+ ],
+ ];
+
+
+ $variationGroups = [
+ FlagshipField::FIELD_ID => "9273BKSDJtoto",
+ FlagshipField::FIELD_VARIATIONS => $realloCvariations,
+ ];
+ $assignmentsHistory = ["9273BKSDJtoto" => "c20j9lgbcahhf2mvhbf0"];
+ $visitorCache = [
+ StrategyAbstract::VERSION => 1,
+ StrategyAbstract::DATA => [StrategyAbstract::ASSIGNMENTS_HISTORY => $assignmentsHistory],
+ ];
+
+ $visitor->visitorCache = $visitorCache;
+
+ $variation = $getVariationMethod->invoke($bucketingManager, $variationGroups, $visitor);
+
+ $this->assertSame($realloCvariations[2]['id'], $variation['id']);
+
+ //Test deleted variation
+
+ $reallovariations = [
+ [
+ "id" => "c20j8bk3fk9hdphqtd30",
+ "modifications" => [
+ "type" => "HTML",
+ "value" => ["my_html" => ""],
+ ],
+ "allocation" => 50,
+ "reference" => true,
+ ],
+ [
+ "id" => "c20j8bk3fk9hdphqtd3g",
+ "modifications" => [
+ "type" => "HTML",
+ "value" => ["my_html" => ""],
+ ],
+ "allocation" => 50,
+ ],
+ ];
+
+
+ $variationGroups = [
+ FlagshipField::FIELD_ID => "9273BKSDJtoto",
+ FlagshipField::FIELD_VARIATIONS => $reallovariations,
+ ];
+
+
+ $visitor->visitorCache = $visitorCache;
+
+ $variation = $getVariationMethod->invoke($bucketingManager, $variationGroups, $visitor);
+
+ $this->assertCount(0, $variation);
+
+ //
$realloCvariations = [
[
"id" => "c20j8bk3fk9hdphqtd30",
@@ -342,7 +415,7 @@ public function testGetVariation()
"my_html" => ""
]
],
- "allocation" => 100,
+ "allocation" => 0,
"reference" => true
],
[
@@ -365,7 +438,7 @@ public function testGetVariation()
"my_html" => ""
]
],
- "allocation" => 0
+ "allocation" => 100
]
];
@@ -374,7 +447,7 @@ public function testGetVariation()
FlagshipField::FIELD_ID => "9273BKSDJtoto",
FlagshipField::FIELD_VARIATIONS => $realloCvariations
];
- $assignmentsHistory = ["9273BKSDJtoto" => "c20j9lgbcahhf2mvhbf0"];
+ $assignmentsHistory = [];
$visitorCache = [
StrategyAbstract::VERSION => 1,
StrategyAbstract::DATA => [
@@ -386,46 +459,9 @@ public function testGetVariation()
$variation = $getVariationMethod->invoke($bucketingManager, $variationGroups, $visitor);
+ $this->assertNotSame($realloCvariations[0]['id'], $variation['id']);
+ $this->assertNotSame($realloCvariations[1]['id'], $variation['id']);
$this->assertSame($realloCvariations[2]['id'], $variation['id']);
-
- //Test deleted variation
-
- $reallovariations = [
- [
- "id" => "c20j8bk3fk9hdphqtd30",
- "modifications" => [
- "type" => "HTML",
- "value" => [
- "my_html" => ""
- ]
- ],
- "allocation" => 50,
- "reference" => true
- ],
- [
- "id" => "c20j8bk3fk9hdphqtd3g",
- "modifications" => [
- "type" => "HTML",
- "value" => [
- "my_html" => ""
- ]
- ],
- "allocation" => 50
- ]
- ];
-
-
- $variationGroups = [
- FlagshipField::FIELD_ID => "9273BKSDJtoto",
- FlagshipField::FIELD_VARIATIONS => $reallovariations
- ];
-
-
- $visitor->visitorCache = $visitorCache;
-
- $variation = $getVariationMethod->invoke($bucketingManager, $variationGroups, $visitor);
-
- $this->assertCount(0, $variation);
}
/**
@@ -438,13 +474,9 @@ public function testIsMatchTargeting()
$config = new BucketingConfig($bucketingUrl);
$bucketingManager = new BucketingManager(new HttpClient(), $config, $murmurhash);
$visitorId = "visitor_3";
- $visitorContext = [
- "age" => 20
- ];
+ $visitorContext = ["age" => 20];
$container = new Container();
- $configManager = $this->getMockBuilder(ConfigManager::class)
- ->disableOriginalConstructor()
- ->getMock();
+ $configManager = $this->getMockBuilder(ConfigManager::class)->disableOriginalConstructor()->getMock();
$configManager->setConfig($config);
$visitor = new VisitorDelegate($container, $configManager, $visitorId, false, $visitorContext, true);
@@ -458,42 +490,38 @@ public function testIsMatchTargeting()
//Test key targetingGroups in targeting
$variationGroup = [
- FlagshipField::FIELD_TARGETING => [
-
- ]
+ FlagshipField::FIELD_TARGETING => []
];
$output = $isMatchTargetingMethod->invoke($bucketingManager, $variationGroup, $visitor);
$this->assertFalse($output);
//Test key targetings in targetingGroups
$variationGroup = [
- FlagshipField::FIELD_TARGETING => [
- FlagshipField::FIELD_TARGETING_GROUPS => [
- []
- ]
- ]
- ];
+ FlagshipField::FIELD_TARGETING => [
+ FlagshipField::FIELD_TARGETING_GROUPS => [
+ [],
+ ],
+ ],
+ ];
$output = $isMatchTargetingMethod->invoke($bucketingManager, $variationGroup, $visitor);
$this->assertFalse($output);
//Test not matching targetings
$targetings = [
- "key" => "age",
- "operator" => "EQUALS",
- 'value' => 21
- ];
+ "key" => "age",
+ "operator" => "EQUALS",
+ 'value' => 21,
+ ];
$variationGroup = [
- FlagshipField::FIELD_TARGETING => [
- FlagshipField::FIELD_TARGETING_GROUPS => [
- [
- FlagshipField::FIELD_TARGETINGS => [
- $targetings
- ]
- ]
- ]
- ]
- ];
+ FlagshipField::FIELD_TARGETING => [
+ FlagshipField::FIELD_TARGETING_GROUPS => [
+ [
+ FlagshipField::FIELD_TARGETINGS => [$targetings],
+ ],
+ ],
+ ],
+ ];
$output = $isMatchTargetingMethod->invoke($bucketingManager, $variationGroup, $visitor);
$this->assertFalse($output);
@@ -501,22 +529,20 @@ public function testIsMatchTargeting()
//Test matching targetings
$targetings2 = [
- "key" => "age",
- "operator" => "EQUALS",
- 'value' => 20
- ];
+ "key" => "age",
+ "operator" => "EQUALS",
+ 'value' => 20,
+ ];
$variationGroup = [
- FlagshipField::FIELD_TARGETING => [
- FlagshipField::FIELD_TARGETING_GROUPS => [
- [
- FlagshipField::FIELD_TARGETINGS => [
- $targetings2
- ]
- ]
- ]
- ]
- ];
+ FlagshipField::FIELD_TARGETING => [
+ FlagshipField::FIELD_TARGETING_GROUPS => [
+ [
+ FlagshipField::FIELD_TARGETINGS => [$targetings2],
+ ],
+ ],
+ ],
+ ];
$output = $isMatchTargetingMethod->invoke($bucketingManager, $variationGroup, $visitor);
$this->assertTrue($output);
@@ -525,38 +551,32 @@ public function testIsMatchTargeting()
//Test Many targetingGroups with one match
$targetings2 = [
- "key" => "age",
- "operator" => "EQUALS",
- 'value' => 22
- ];
+ "key" => "age",
+ "operator" => "EQUALS",
+ 'value' => 22,
+ ];
$targetingAllUsers = [
- "key" => "fs_all_users",
- "operator" => "EQUALS",
- 'value' => ''
- ];
+ "key" => "fs_all_users",
+ "operator" => "EQUALS",
+ 'value' => '',
+ ];
$variationGroup = [
- FlagshipField::FIELD_TARGETING => [
- FlagshipField::FIELD_TARGETING_GROUPS => [
- [
- FlagshipField::FIELD_TARGETINGS => [
- $targetings
- ]
- ],
- [
- FlagshipField::FIELD_TARGETINGS => [
- $targetings2
- ]
- ],
- [
- FlagshipField::FIELD_TARGETINGS => [
- $targetingAllUsers
- ]
- ]
- ]
- ]
- ];
+ FlagshipField::FIELD_TARGETING => [
+ FlagshipField::FIELD_TARGETING_GROUPS => [
+ [
+ FlagshipField::FIELD_TARGETINGS => [$targetings],
+ ],
+ [
+ FlagshipField::FIELD_TARGETINGS => [$targetings2],
+ ],
+ [
+ FlagshipField::FIELD_TARGETINGS => [$targetingAllUsers],
+ ],
+ ],
+ ],
+ ];
$output = $isMatchTargetingMethod->invoke($bucketingManager, $variationGroup, $visitor);
$this->assertTrue($output);
@@ -564,26 +584,20 @@ public function testIsMatchTargeting()
//Test Many targetingGroups with all false
$variationGroup = [
- FlagshipField::FIELD_TARGETING => [
- FlagshipField::FIELD_TARGETING_GROUPS => [
- [
- FlagshipField::FIELD_TARGETINGS => [
- $targetings
- ]
- ],
- [
- FlagshipField::FIELD_TARGETINGS => [
- $targetings2
- ]
- ],
- [
- FlagshipField::FIELD_TARGETINGS => [
- $targetings2
- ]
- ]
- ]
- ]
- ];
+ FlagshipField::FIELD_TARGETING => [
+ FlagshipField::FIELD_TARGETING_GROUPS => [
+ [
+ FlagshipField::FIELD_TARGETINGS => [$targetings],
+ ],
+ [
+ FlagshipField::FIELD_TARGETINGS => [$targetings2],
+ ],
+ [
+ FlagshipField::FIELD_TARGETINGS => [$targetings2],
+ ],
+ ],
+ ],
+ ];
$output = $isMatchTargetingMethod->invoke($bucketingManager, $variationGroup, $visitor);
$this->assertFalse($output);
@@ -599,13 +613,9 @@ public function testCheckAndTargeting()
$config = new BucketingConfig($bucketingUrl);
$bucketingManager = new BucketingManager(new HttpClient(), $config, $murmurhash);
$visitorId = "visitor_3";
- $visitorContext = [
- "age" => 20
- ];
+ $visitorContext = ["age" => 20];
$container = new Container();
- $configManager = $this->getMockBuilder(ConfigManager::class)
- ->disableOriginalConstructor()
- ->getMock();
+ $configManager = $this->getMockBuilder(ConfigManager::class)->disableOriginalConstructor()->getMock();
$configManager->setConfig($config);
$visitor = new VisitorDelegate($container, $configManager, $visitorId, false, $visitorContext, true);
@@ -613,17 +623,17 @@ public function testCheckAndTargeting()
//test key = fs_all_users
$targetingAllUsers = [
- "key" => "fs_all_users",
- "operator" => "EQUALS",
- 'value' => ''
- ];
+ "key" => "fs_all_users",
+ "operator" => "EQUALS",
+ 'value' => '',
+ ];
$innerTargetings = [$targetingAllUsers];
$output = $checkAndTargetingMethod->invoke($bucketingManager, $innerTargetings, $visitor);
$this->assertTrue($output);
//test key = fs_all_users and not match key
- $innerTargetings = [$targetingAllUsers,[
+ $innerTargetings = [$targetingAllUsers, [
"key" => "anyValue",
"operator" => "EQUALS",
'value' => ''
@@ -633,7 +643,7 @@ public function testCheckAndTargeting()
//Test operator EXISTS when context doesn't exist
- $innerTargetingsExists = [$targetingAllUsers,[
+ $innerTargetingsExists = [$targetingAllUsers, [
"operator" => "EXISTS",
"key" => "mixpanel::city",
"value" => true,
@@ -650,7 +660,7 @@ public function testCheckAndTargeting()
//Test operator NOT_EXISTS when context exists
- $innerTargetingsExists = [$targetingAllUsers,[
+ $innerTargetingsExists = [$targetingAllUsers, [
"operator" => "NOT_EXISTS",
"key" => "mixpanel::city",
"value" => true,
@@ -662,7 +672,7 @@ public function testCheckAndTargeting()
//Test operator NOT_EXISTS when context doesn't exist
- $innerTargetingsExists = [$targetingAllUsers,[
+ $innerTargetingsExists = [$targetingAllUsers, [
"operator" => "NOT_EXISTS",
"key" => "mixpanel::genre",
"value" => true,
@@ -673,10 +683,10 @@ public function testCheckAndTargeting()
//test key = fs_users
$targetingFsUsers = [
- "key" => "fs_users",
- "operator" => "EQUALS",
- 'value' => $visitorId
- ];
+ "key" => "fs_users",
+ "operator" => "EQUALS",
+ 'value' => $visitorId,
+ ];
$innerTargetings = [$targetingFsUsers];
$output = $checkAndTargetingMethod->invoke($bucketingManager, $innerTargetings, $visitor);
@@ -684,10 +694,10 @@ public function testCheckAndTargeting()
//test key not match context
$targetingKeyContext = [
- "key" => "anyKey",
- "operator" => "EQUALS",
- 'value' => "anyValue"
- ];
+ "key" => "anyKey",
+ "operator" => "EQUALS",
+ 'value' => "anyValue",
+ ];
$innerTargetings = [$targetingKeyContext];
$output = $checkAndTargetingMethod->invoke($bucketingManager, $innerTargetings, $visitor);
@@ -695,10 +705,10 @@ public function testCheckAndTargeting()
//test key match context
$targetingKeyContext = [
- "key" => "age",
- "operator" => "EQUALS",
- 'value' => 20
- ];
+ "key" => "age",
+ "operator" => "EQUALS",
+ 'value' => 20,
+ ];
$innerTargetings = [$targetingKeyContext];
$output = $checkAndTargetingMethod->invoke($bucketingManager, $innerTargetings, $visitor);
@@ -706,10 +716,10 @@ public function testCheckAndTargeting()
//test key match context with different value
$targetingKeyContext2 = [
- "key" => "age",
- "operator" => "EQUALS",
- 'value' => 21
- ];
+ "key" => "age",
+ "operator" => "EQUALS",
+ 'value' => 21,
+ ];
$innerTargetings = [$targetingKeyContext2];
$output = $checkAndTargetingMethod->invoke($bucketingManager, $innerTargetings, $visitor);
@@ -717,12 +727,20 @@ public function testCheckAndTargeting()
//And logic
//All true
- $innerTargetings = [$targetingAllUsers, $targetingFsUsers, $targetingKeyContext];
+ $innerTargetings = [
+ $targetingAllUsers,
+ $targetingFsUsers,
+ $targetingKeyContext,
+ ];
$output = $checkAndTargetingMethod->invoke($bucketingManager, $innerTargetings, $visitor);
$this->assertTrue($output);
//Test one false
- $innerTargetings = [$targetingAllUsers, $targetingFsUsers, $targetingKeyContext2];
+ $innerTargetings = [
+ $targetingAllUsers,
+ $targetingFsUsers,
+ $targetingKeyContext2,
+ ];
$output = $checkAndTargetingMethod->invoke($bucketingManager, $innerTargetings, $visitor);
$this->assertFalse($output);
}
@@ -737,9 +755,7 @@ public function testOperator()
$config = new BucketingConfig($bucketingUrl);
$bucketingManager = new BucketingManager(new HttpClient(), $config, $murmurhash);
- $configManager = $this->getMockBuilder(ConfigManager::class)
- ->disableOriginalConstructor()
- ->getMock();
+ $configManager = $this->getMockBuilder(ConfigManager::class)->disableOriginalConstructor()->getMock();
$configManager->setConfig($config);
$testOperatorMethod = Utils::getMethod(BucketingManager::class, "testOperator");
@@ -765,7 +781,7 @@ public function testOperator()
$this->assertTrue($output);
- $targetingValue = [5,1,2,3];
+ $targetingValue = [5, 1, 2, 3];
$output = $testOperatorMethod->invoke($bucketingManager, 'EQUALS', $contextValue, $targetingValue);
$this->assertTrue($output);
@@ -778,7 +794,7 @@ public function testOperator()
$this->assertTrue($output);
- $targetingValue = [6,1,2,3];
+ $targetingValue = [6, 1, 2, 3];
$output = $testOperatorMethod->invoke($bucketingManager, 'NOT_EQUALS', $contextValue, $targetingValue);
$this->assertTrue($output);
@@ -794,7 +810,7 @@ public function testOperator()
$output = $testOperatorMethod->invoke($bucketingManager, 'NOT_EQUALS', $contextValue, $targetingValue);
$this->assertFalse($output);
- $targetingValue = [1,2,3,5,6];
+ $targetingValue = [1, 2, 3, 5, 6];
$output = $testOperatorMethod->invoke($bucketingManager, 'NOT_EQUALS', $contextValue, $targetingValue);
$this->assertFalse($output);
@@ -802,19 +818,34 @@ public function testOperator()
//Test contextValue not contains targetingValue
- $targetingValue = [8, 7, 4, 1];
+ $targetingValue = [
+ 8,
+ 7,
+ 4,
+ 1,
+ ];
$output = $testOperatorMethod->invoke($bucketingManager, 'CONTAINS', $contextValue, $targetingValue);
$this->assertFalse($output);
//Test contextValue contains targetingValue
- $targetingValue = [8, 7, 5, 1];
+ $targetingValue = [
+ 8,
+ 7,
+ 5,
+ 1,
+ ];
$output = $testOperatorMethod->invoke($bucketingManager, 'CONTAINS', $contextValue, $targetingValue);
$this->assertTrue($output);
//Test contextValue contains targetingValue
$contextValue = "nopq_hij";
- $targetingValue = ["abc", "dfg", "hij", "klm"];
+ $targetingValue = [
+ "abc",
+ "dfg",
+ "hij",
+ "klm",
+ ];
$output = $testOperatorMethod->invoke($bucketingManager, 'CONTAINS', $contextValue, $targetingValue);
$this->assertTrue($output);
@@ -834,19 +865,34 @@ public function testOperator()
//Test contextValue not contains targetingValue
$contextValue = 5;
- $targetingValue = [8, 7, 4, 1];
+ $targetingValue = [
+ 8,
+ 7,
+ 4,
+ 1,
+ ];
$output = $testOperatorMethod->invoke($bucketingManager, 'NOT_CONTAINS', $contextValue, $targetingValue);
$this->assertTrue($output);
//Test contextValue contains targetingValue
- $targetingValue = [8, 7, 5, 1];
+ $targetingValue = [
+ 8,
+ 7,
+ 5,
+ 1,
+ ];
$output = $testOperatorMethod->invoke($bucketingManager, 'NOT_CONTAINS', $contextValue, $targetingValue);
$this->assertFalse($output);
//Test contextValue contains targetingValue
$contextValue = "nopq_hij";
- $targetingValue = ["abc", "dfg", "hij", "klm"];
+ $targetingValue = [
+ "abc",
+ "dfg",
+ "hij",
+ "klm",
+ ];
$output = $testOperatorMethod->invoke($bucketingManager, 'NOT_CONTAINS', $contextValue, $targetingValue);
$this->assertFalse($output);
@@ -1059,7 +1105,10 @@ public function testGetThirdPartySegment()
false,
false,
true,
- ['post', 'get']
+ [
+ 'post',
+ 'get',
+ ]
);
$logManagerStub = $this->getMockForAbstractClass(
@@ -1077,89 +1126,77 @@ public function testGetThirdPartySegment()
$bucketingUrl = "127.0.0.1:3000";
$murmurhash = new MurmurHash();
$config = new BucketingConfig($bucketingUrl);
- $config->setEnvId("env_id")
- ->setFetchThirdPartyData(true)
- ->setLogManager($logManagerStub);
+ $config->setEnvId("env_id")->setFetchThirdPartyData(true)->setLogManager($logManagerStub);
$bucketingManager = new BucketingManager($httpClientMock, $config, $murmurhash);
$bucketingManager->setFlagshipInstanceId("instance_id");
$bucketingManager->setTrackingManager($trackingManagerMock);
$visitorId = "visitor_1";
- $visitorContext = [
- "age" => 20
- ];
+ $visitorContext = ["age" => 20];
$container = new Container();
- $configManager = $this->getMockBuilder(ConfigManager::class)
- ->disableOriginalConstructor()
- ->getMock();
+ $configManager = $this->getMockBuilder(ConfigManager::class)->disableOriginalConstructor()->getMock();
$configManager->setConfig($config);
- $visitor = $this->getMockBuilder(VisitorDelegate::class)
- ->setConstructorArgs([$container, $configManager, $visitorId, false, $visitorContext, true])
- ->onlyMethods(["sendHit"])
- ->getMock();
+ $visitor = $this->getMockBuilder(VisitorDelegate::class)->setConstructorArgs([$container, $configManager, $visitorId, false, $visitorContext, true])->onlyMethods(["sendHit"])->getMock();
$segments = [
- [
- 'visitor_id' => 'wonderful_visitor_1',
- 'segment' => 'gender',
- 'value' => '',
- 'expiration' => 1689771307,
- 'partner' => 'facebook',
- ],
- [
- 'visitor_id' => 'wonderful_visitor_1',
- 'segment' => 'generation',
- 'value' => '',
- 'expiration' => 1689771307,
- 'partner' => 'facebook',
- ],
- [
- 'visitor_id' => 'wonderful_visitor_1',
- 'segment' => 'city',
- 'value' => 'london',
- 'expiration' => 1689771117,
- 'partner' => 'mixpanel',
- ],
- [
- 'visitor_id' => 'wonderful_visitor_1',
- 'segment' => 'device',
- 'value' => 'firefox',
- 'expiration' => 1689771117,
- 'partner' => 'mixpanel',
- ],
- [
- 'visitor_id' => 'wonderful_visitor_1',
- 'segment' => 'gender',
- 'value' => 'female',
- 'expiration' => 1689771007,
- 'partner' => 'segmentio',
- ],
- [
- 'visitor_id' => 'wonderful_visitor_1',
- 'segment' => 'generation',
- 'value' => 'gen-z',
- 'expiration' => 1689771007,
- 'partner' => 'segmentio',
- ],
- ];
+ [
+ 'visitor_id' => 'wonderful_visitor_1',
+ 'segment' => 'gender',
+ 'value' => '',
+ 'expiration' => 1689771307,
+ 'partner' => 'facebook',
+ ],
+ [
+ 'visitor_id' => 'wonderful_visitor_1',
+ 'segment' => 'generation',
+ 'value' => '',
+ 'expiration' => 1689771307,
+ 'partner' => 'facebook',
+ ],
+ [
+ 'visitor_id' => 'wonderful_visitor_1',
+ 'segment' => 'city',
+ 'value' => 'london',
+ 'expiration' => 1689771117,
+ 'partner' => 'mixpanel',
+ ],
+ [
+ 'visitor_id' => 'wonderful_visitor_1',
+ 'segment' => 'device',
+ 'value' => 'firefox',
+ 'expiration' => 1689771117,
+ 'partner' => 'mixpanel',
+ ],
+ [
+ 'visitor_id' => 'wonderful_visitor_1',
+ 'segment' => 'gender',
+ 'value' => 'female',
+ 'expiration' => 1689771007,
+ 'partner' => 'segmentio',
+ ],
+ [
+ 'visitor_id' => 'wonderful_visitor_1',
+ 'segment' => 'generation',
+ 'value' => 'gen-z',
+ 'expiration' => 1689771007,
+ 'partner' => 'segmentio',
+ ],
+ ];
$segmentUrl = sprintf(FlagshipConstant::THIRD_PARTY_SEGMENT_URL, $config->getEnvId(), $visitorId);
$campaigns = ["campaigns" => []];
$matcher = $this->exactly(2);
- $httpClientMock->expects($matcher)
- ->method("get")
- ->with(
- $this->logicalOr(
- $this->equalTo($bucketingUrl),
- $this->equalTo($segmentUrl)
- ),
- $this->equalTo([])
- )
- ->willReturnOnConsecutiveCalls(new HttpResponse(200, $campaigns, []), new HttpResponse(200, $segments, []));
+ $httpClientMock->expects($matcher)->method("get")->with(
+ $this->logicalOr(
+ $this->equalTo($bucketingUrl),
+ $this->equalTo($segmentUrl)
+ ),
+ $this->equalTo([])
+ )->willReturnOnConsecutiveCalls(new HttpResponse(200, $campaigns, []), new HttpResponse(200, $segments, []));
$bucketingManager->getCampaigns($visitor);
$context = $visitor->getContext();
@@ -1180,7 +1217,10 @@ public function testGetThirdPartySegmentException()
false,
false,
true,
- ['post', 'get']
+ [
+ 'post',
+ 'get',
+ ]
);
$logManagerStub = $this->getMockForAbstractClass(
@@ -1198,47 +1238,36 @@ public function testGetThirdPartySegmentException()
$bucketingUrl = "127.0.0.1:3000";
$murmurhash = new MurmurHash();
$config = new BucketingConfig($bucketingUrl);
- $config->setEnvId("env_id")
- ->setFetchThirdPartyData(true);
+ $config->setEnvId("env_id")->setFetchThirdPartyData(true);
$bucketingManager = new BucketingManager($httpClientMock, $config, $murmurhash);
$bucketingManager->setTrackingManager($trackingManagerMock);
$bucketingManager->setFlagshipInstanceId("instance_id");
$visitorId = "visitor_1";
- $visitorContext = [
- "age" => 20
- ];
+ $visitorContext = ["age" => 20];
$container = new Container();
- $configManager = $this->getMockBuilder(ConfigManager::class)
- ->disableOriginalConstructor()
- ->getMock();
+ $configManager = $this->getMockBuilder(ConfigManager::class)->disableOriginalConstructor()->getMock();
$configManager->setConfig($config);
- $visitor = $this->getMockBuilder(VisitorDelegate::class)
- ->setConstructorArgs([$container, $configManager, $visitorId, false, $visitorContext, true])
- ->onlyMethods(["sendHit"])
- ->getMock();
+ $visitor = $this->getMockBuilder(VisitorDelegate::class)->setConstructorArgs([$container, $configManager, $visitorId, false, $visitorContext, true])->onlyMethods(["sendHit"])->getMock();
$segmentUrl = sprintf(FlagshipConstant::THIRD_PARTY_SEGMENT_URL, $config->getEnvId(), $visitorId);
$campaigns = ["campaigns" => []];
$matcher = $this->exactly(2);
- $httpClientMock->expects($matcher)
- ->method("get")
- ->with(
- $this->logicalOr(
- $this->equalTo($bucketingUrl),
- $this->equalTo($segmentUrl)
- ),
- $this->equalTo([])
- )
- ->willReturnOnConsecutiveCalls(
- new HttpResponse(200, $campaigns, []),
- $this->throwException(new Exception("error"))
- );
+ $httpClientMock->expects($matcher)->method("get")->with(
+ $this->logicalOr(
+ $this->equalTo($bucketingUrl),
+ $this->equalTo($segmentUrl)
+ ),
+ $this->equalTo([])
+ )->willReturnOnConsecutiveCalls(
+ new HttpResponse(200, $campaigns, []),
+ $this->throwException(new Exception("error"))
+ );
$config->setLogManager($logManagerStub);
diff --git a/tests/Flag/FSFlagCollectionTest.php b/tests/Flag/FSFlagCollectionTest.php
index bfcae826..ef08ac23 100644
--- a/tests/Flag/FSFlagCollectionTest.php
+++ b/tests/Flag/FSFlagCollectionTest.php
@@ -10,9 +10,7 @@ class FSFlagCollectionTest extends TestCase
{
public function testFlagCollection()
{
- $visitor = $this->getMockBuilder('Flagship\Visitor\VisitorAbstract')
- ->disableOriginalConstructor()
- ->getMock();
+ $visitor = $this->getMockBuilder('Flagship\Visitor\VisitorAbstract')->disableOriginalConstructor()->getMock();
$visitor->method("getConfig")->willReturn(new DecisionApiConfig());
@@ -23,16 +21,7 @@ public function testFlagCollection()
$key1 = "key1";
$key2 = "key2";
$flagDTO = new FlagDTO();
- $flagDTO->setIsReference(true)
- ->setVariationId("variationId")
- ->setVariationName("variationName")
- ->setVariationGroupId('varGroupId')
- ->setVariationGroupName("variationGroupName")
- ->setCampaignId("campaignId")
- ->setCampaignName("campaignName")
- ->setKey($key1)->setValue($value1)
- ->setSlug("slug")
- ->setCampaignType("ab");
+ $flagDTO->setIsReference(true)->setVariationId("variationId")->setVariationName("variationName")->setVariationGroupId('varGroupId')->setVariationGroupName("variationGroupName")->setCampaignId("campaignId")->setCampaignName("campaignName")->setKey($key1)->setValue($value1)->setSlug("slug")->setCampaignType("ab");
$flagMetadata1 = new FSFlagMetadata(
$flagDTO->getCampaignId(),
@@ -47,16 +36,7 @@ public function testFlagCollection()
);
$flagDTO2 = new FlagDTO();
- $flagDTO2->setIsReference(true)
- ->setVariationId("variationId")
- ->setVariationName("variationName")
- ->setVariationGroupId('varGroupId')
- ->setVariationGroupName("variationGroupName")
- ->setCampaignId("campaignId")
- ->setCampaignName("campaignName")
- ->setKey($key2)->setValue($value2)
- ->setSlug("slug")
- ->setCampaignType("ab");
+ $flagDTO2->setIsReference(true)->setVariationId("variationId")->setVariationName("variationName")->setVariationGroupId('varGroupId')->setVariationGroupName("variationGroupName")->setCampaignId("campaignId")->setCampaignName("campaignName")->setKey($key2)->setValue($value2)->setSlug("slug")->setCampaignType("ab");
$flagMetadata2 = new FSFlagMetadata(
$flagDTO2->getCampaignId(),
diff --git a/tests/Flag/FlagMetadataTest.php b/tests/Flag/FlagMetadataTest.php
index b24e8b84..184e10b4 100644
--- a/tests/Flag/FlagMetadataTest.php
+++ b/tests/Flag/FlagMetadataTest.php
@@ -40,29 +40,29 @@ public function testConstruct()
$this->assertSame($metadata->getVariationName(), $variationName);
$metadataJson = json_encode([
- "campaignId" => $campaignId,
- "campaignName" => $campaignName,
- "variationGroupId" => $variationGroupId,
- "variationGroupName" => $variationGroupName,
- "variationId" => $variationId,
- "variationName" => $variationName,
- "isReference" => $isReferenceId,
- "campaignType" => $campaignType,
- "slug" => $slug
- ]);
+ "campaignId" => $campaignId,
+ "campaignName" => $campaignName,
+ "variationGroupId" => $variationGroupId,
+ "variationGroupName" => $variationGroupName,
+ "variationId" => $variationId,
+ "variationName" => $variationName,
+ "isReference" => $isReferenceId,
+ "campaignType" => $campaignType,
+ "slug" => $slug,
+ ]);
$this->assertJsonStringEqualsJsonString(json_encode($metadata), $metadataJson);
$metadataJson = json_encode([
- "campaignId" => "",
- "campaignName" => "",
- "variationGroupId" => "",
- "variationGroupName" => '',
- "variationId" => "",
- "variationName" => "",
- "isReference" => false,
- "campaignType" => "",
- "slug" => ""
- ]);
+ "campaignId" => "",
+ "campaignName" => "",
+ "variationGroupId" => "",
+ "variationGroupName" => '',
+ "variationId" => "",
+ "variationName" => "",
+ "isReference" => false,
+ "campaignType" => "",
+ "slug" => "",
+ ]);
$this->assertJsonStringEqualsJsonString(json_encode(FSFlagMetadata::getEmpty()), $metadataJson);
}
diff --git a/tests/Flag/FlagTest.php b/tests/Flag/FlagTest.php
index b5714db9..98edce26 100644
--- a/tests/Flag/FlagTest.php
+++ b/tests/Flag/FlagTest.php
@@ -16,16 +16,7 @@ public function testFlag()
$key = "key";
$defaultValue = "DefaultValue";
$flagDTO = new FlagDTO();
- $flagDTO->setIsReference(true)
- ->setVariationId("variationId")
- ->setVariationName("variationName")
- ->setVariationGroupId('varGroupId')
- ->setVariationGroupName("variationGroupName")
- ->setCampaignId("campaignId")
- ->setCampaignName("campaignName")
- ->setKey($key)->setValue("value")
- ->setSlug("slug")
- ->setCampaignType("ab");
+ $flagDTO->setIsReference(true)->setVariationId("variationId")->setVariationName("variationName")->setVariationGroupId('varGroupId')->setVariationGroupName("variationGroupName")->setCampaignId("campaignId")->setCampaignName("campaignName")->setKey($key)->setValue("value")->setSlug("slug")->setCampaignType("ab");
$metadata = new FSFlagMetadata(
$flagDTO->getCampaignId(),
@@ -45,25 +36,29 @@ public function testFlag()
false,
false,
true,
- ['getFlagValue', 'userExposed', 'getFlagMetadata', 'getFlagsDTO'],
+ [
+ 'getFlagValue',
+ 'userExposed',
+ 'getFlagMetadata',
+ 'getFlagsDTO',
+ ],
'',
);
$visitorDelegateMock->method("getFlagsDTO")->willReturn([$flagDTO]);
- $visitorDelegateMock->expects($this->exactly(2))->method('getFlagValue')
- ->with(
- $this->logicalOr(
- $key,
- $key
- ),
- $defaultValue,
- $flagDTO,
- $this->logicalOr(
- true,
- false
- )
- )->willReturn($flagDTO->getValue());
+ $visitorDelegateMock->expects($this->exactly(2))->method('getFlagValue')->with(
+ $this->logicalOr(
+ $key,
+ $key
+ ),
+ $defaultValue,
+ $flagDTO,
+ $this->logicalOr(
+ true,
+ false
+ )
+ )->willReturn($flagDTO->getValue());
$flag = new FSFlag($key, $visitorDelegateMock);
@@ -117,7 +112,11 @@ public function testFlagNull()
$visitorDelegateMock = $this->getMockForAbstractClass(
'Flagship\Visitor\VisitorAbstract',
- ['getFlagValue', 'userExposed', 'getFlagMetadata'],
+ [
+ 'getFlagValue',
+ 'userExposed',
+ 'getFlagMetadata',
+ ],
'',
false
);
diff --git a/tests/FlagshipTest.php b/tests/FlagshipTest.php
index 69fa7b64..80e72c2e 100644
--- a/tests/FlagshipTest.php
+++ b/tests/FlagshipTest.php
@@ -40,7 +40,10 @@ public function __construct($name = null, array $data = array(), $dataName = '')
false,
true,
true,
- ['error', 'info']
+ [
+ 'error',
+ 'info',
+ ]
);
}
@@ -182,12 +185,11 @@ public function testStartWithLog()
$flagshipMock->method('getContainer')->willReturn($this->containerInitialization());
- $flagshipMock->expects($this->once())->method('logInfo')
- ->with(
- $config,
- sprintf(FlagshipConstant::SDK_STARTED_INFO, FlagshipConstant::SDK_VERSION),
- [FlagshipConstant::TAG => FlagshipConstant::TAG_INITIALIZATION]
- );
+ $flagshipMock->expects($this->once())->method('logInfo')->with(
+ $config,
+ sprintf(FlagshipConstant::SDK_STARTED_INFO, FlagshipConstant::SDK_VERSION),
+ [FlagshipConstant::TAG => FlagshipConstant::TAG_INITIALIZATION]
+ );
$flagshipMock->expects($this->never())->method('logError');
@@ -248,9 +250,7 @@ public function testStartFailedWithLog()
$config->setLogManager($logManager);
- $flagshipMock = $this->getMockBuilder('Flagship\Flagship')
- ->onlyMethods(['logInfo', 'logError', 'getContainer'])
- ->disableOriginalConstructor()->getMock();
+ $flagshipMock = $this->getMockBuilder('Flagship\Flagship')->onlyMethods(['logInfo', 'logError', 'getContainer'])->disableOriginalConstructor()->getMock();
$instanceMethod = Utils::getMethod("Flagship\Flagship", 'getInstance');
$instance = $instanceMethod->invoke(null);
@@ -259,12 +259,11 @@ public function testStartFailedWithLog()
$flagshipMock->method('getContainer')->willReturn($this->containerInitialization());
- $flagshipMock->expects($this->once())->method('logError')
- ->with(
- $config,
- FlagshipConstant::INITIALIZATION_PARAM_ERROR,
- [FlagshipConstant::TAG => FlagshipConstant::TAG_INITIALIZATION]
- );
+ $flagshipMock->expects($this->once())->method('logError')->with(
+ $config,
+ FlagshipConstant::INITIALIZATION_PARAM_ERROR,
+ [FlagshipConstant::TAG => FlagshipConstant::TAG_INITIALIZATION]
+ );
$flagshipMock->expects($this->never())->method('logInfo');
Flagship::start($envId, $apiKey, $config);
@@ -288,9 +287,7 @@ public function testStartFailedThrowException()
$config->setLogManager($logManager);
- $flagshipMock = $this->getMockBuilder('Flagship\Flagship')
- ->onlyMethods(['logInfo', 'logError', 'getContainer','setConfigManager'])
- ->disableOriginalConstructor()->getMock();
+ $flagshipMock = $this->getMockBuilder('Flagship\Flagship')->onlyMethods(['logInfo', 'logError', 'getContainer', 'setConfigManager'])->disableOriginalConstructor()->getMock();
$instanceMethod = Utils::getMethod("Flagship\Flagship", 'getInstance');
$instance = $instanceMethod->invoke(null);
@@ -302,12 +299,11 @@ public function testStartFailedThrowException()
$flagshipMock->method('getContainer')->willReturn($this->containerInitialization());
$flagshipMock->method('setConfigManager')->willThrowException($exception);
- $flagshipMock->expects($this->once())->method('logError')
- ->with(
- $config,
- $exception->getMessage(),
- [FlagshipConstant::TAG => FlagshipConstant::TAG_INITIALIZATION]
- );
+ $flagshipMock->expects($this->once())->method('logError')->with(
+ $config,
+ $exception->getMessage(),
+ [FlagshipConstant::TAG => FlagshipConstant::TAG_INITIALIZATION]
+ );
$flagshipMock->expects($this->never())->method('logInfo');
Flagship::start($envId, $apiKey, $config);
@@ -363,9 +359,7 @@ public function testStatusCallback()
};
$config->setLogLevel(LogLevel::ALL);
- $config->expects($this->exactly(1))
- ->method("getOnSdkStatusChanged")
- ->willReturn($callable);
+ $config->expects($this->exactly(1))->method("getOnSdkStatusChanged")->willReturn($callable);
Flagship::start('envId', 'apiKey', $config);
}
@@ -382,19 +376,18 @@ public function testGetPanicModeStatus()
$visitorId = "visitorId";
$body = [
- "visitorId" => $visitorId,
- "campaigns" => [],
- "panic" => true
- ];
-
- $httpClientMock->expects($this->exactly(2))->method('post')
- ->willReturnOnConsecutiveCalls(
- new HttpResponse(204, $body),
- new HttpResponse(204, [
- "visitorId" => $visitorId,
- "campaigns" => [],
- ])
- );
+ "visitorId" => $visitorId,
+ "campaigns" => [],
+ "panic" => true,
+ ];
+
+ $httpClientMock->expects($this->exactly(2))->method('post')->willReturnOnConsecutiveCalls(
+ new HttpResponse(204, $body),
+ new HttpResponse(204, [
+ "visitorId" => $visitorId,
+ "campaigns" => [],
+ ])
+ );
$apiManager = new ApiManager($httpClientMock, $config);
@@ -423,8 +416,7 @@ public function testGetPanicModeStatus()
'Flagship\Utils\Container'
)->onlyMethods(['get'])->disableOriginalConstructor()->getMock();
- $containerMock->method('get')
- ->will($this->returnCallback($containerGetMethod));
+ $containerMock->method('get')->will($this->returnCallback($containerGetMethod));
$instanceMethod = Utils::getMethod("Flagship\Flagship", 'getInstance');
$instance = $instanceMethod->invoke(null);
@@ -464,8 +456,7 @@ public function testClose()
$flagshipMock = $this->getMockBuilder(
'Flagship\Flagship'
- )->onlyMethods(['logInfo', 'logError', 'getContainer', "getConfigManager"])
- ->disableOriginalConstructor()->getMock();
+ )->onlyMethods(['logInfo', 'logError', 'getContainer', "getConfigManager"])->disableOriginalConstructor()->getMock();
$trackingManagerMock = $this->getMockForAbstractClass(
@@ -495,8 +486,7 @@ public function testClose()
$trackingManagerMock->expects($this->once())->method("sendBatch");
- $flagshipMock->expects($this->exactly(1))->method("getConfigManager")
- ->willReturn($configManagerMock);
+ $flagshipMock->expects($this->exactly(1))->method("getConfigManager")->willReturn($configManagerMock);
Flagship::Close();
}
@@ -516,16 +506,14 @@ public function testCloseNull()
$flagshipMock = $this->getMockBuilder(
'Flagship\Flagship'
- )->onlyMethods(['logInfo', 'logError', 'getContainer', "getConfigManager"])
- ->disableOriginalConstructor()->getMock();
+ )->onlyMethods(['logInfo', 'logError', 'getContainer', "getConfigManager"])->disableOriginalConstructor()->getMock();
$instanceMethod = Utils::getMethod("Flagship\Flagship", 'getInstance');
$instance = $instanceMethod->invoke(null);
Utils::setPrivateProperty($instance, 'instance', $flagshipMock);
- $flagshipMock->expects($this->once())->method("getConfigManager")
- ->willReturn(null);
+ $flagshipMock->expects($this->once())->method("getConfigManager")->willReturn(null);
Flagship::Close();
}
diff --git a/tests/Hit/ActivateBatchTest.php b/tests/Hit/ActivateBatchTest.php
index 790bbd20..c7865df3 100644
--- a/tests/Hit/ActivateBatchTest.php
+++ b/tests/Hit/ActivateBatchTest.php
@@ -27,8 +27,8 @@ public function testToApiKeys()
unset($apiKeys[FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM]);
$this->assertSame([
- FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $config->getEnvId(),
- FlagshipConstant::BATCH => [$apiKeys]
- ], $activateBatch->toApiKeys());
+ FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $config->getEnvId(),
+ FlagshipConstant::BATCH => [$apiKeys],
+ ], $activateBatch->toApiKeys());
}
}
diff --git a/tests/Hit/ActivateTest.php b/tests/Hit/ActivateTest.php
index 18c56c4a..a07a9ade 100644
--- a/tests/Hit/ActivateTest.php
+++ b/tests/Hit/ActivateTest.php
@@ -50,13 +50,13 @@ public function testTestConstruct()
$this->assertSame($variationGroupId, $activate->getVariationGroupId());
$apiKeys = [
- FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId,
- FlagshipConstant::VARIATION_ID_API_ITEM => $variationId,
- FlagshipConstant::VARIATION_GROUP_ID_API_ITEM => $variationGroupId,
- FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $envId,
- FlagshipConstant::ANONYMOUS_ID => null,
- FlagshipConstant::QT_API_ITEM => 0,
- ];
+ FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId,
+ FlagshipConstant::VARIATION_ID_API_ITEM => $variationId,
+ FlagshipConstant::VARIATION_GROUP_ID_API_ITEM => $variationGroupId,
+ FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $envId,
+ FlagshipConstant::ANONYMOUS_ID => null,
+ FlagshipConstant::QT_API_ITEM => 0,
+ ];
$this->assertSame($apiKeys, $activate->toApiKeys());
@@ -64,13 +64,13 @@ public function testTestConstruct()
$activate->setAnonymousId($anonymousId);
$apiKeys = [
- FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId,
- FlagshipConstant::VARIATION_ID_API_ITEM => $variationId,
- FlagshipConstant::VARIATION_GROUP_ID_API_ITEM => $variationGroupId,
- FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $envId,
- FlagshipConstant::ANONYMOUS_ID => $anonymousId,
- FlagshipConstant::QT_API_ITEM => 0,
- ];
+ FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId,
+ FlagshipConstant::VARIATION_ID_API_ITEM => $variationId,
+ FlagshipConstant::VARIATION_GROUP_ID_API_ITEM => $variationGroupId,
+ FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $envId,
+ FlagshipConstant::ANONYMOUS_ID => $anonymousId,
+ FlagshipConstant::QT_API_ITEM => 0,
+ ];
$this->assertSame($apiKeys, $activate->toApiKeys());
@@ -78,10 +78,7 @@ public function testTestConstruct()
$this->assertSame(Activate::ERROR_MESSAGE, $activate->getErrorMessage());
- $activate->setFlagKey($flagKey)
- ->setFlagValue($flagValue)
- ->setFlagMetadata($flagMetadata)
- ->setVisitorContext($visitorContext);
+ $activate->setFlagKey($flagKey)->setFlagValue($flagValue)->setFlagMetadata($flagMetadata)->setVisitorContext($visitorContext);
$this->assertSame($flagKey, $activate->getFlagKey());
$this->assertSame($flagValue, $activate->getFlagValue());
diff --git a/tests/Hit/EventTest.php b/tests/Hit/EventTest.php
index ca3ae812..202021a3 100644
--- a/tests/Hit/EventTest.php
+++ b/tests/Hit/EventTest.php
@@ -28,30 +28,24 @@ public function testConstruct()
$sessionNumber = 1;
$eventArray = [
- FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId,
- FlagshipConstant::DS_API_ITEM => FlagshipConstant::SDK_APP,
- FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $envId,
- FlagshipConstant::T_API_ITEM => HitType::EVENT->value,
- FlagshipConstant::CUSTOMER_UID => null,
- FlagshipConstant::QT_API_ITEM => 0.0,
- FlagshipConstant::USER_IP_API_ITEM => $userIp,
- FlagshipConstant::SCREEN_RESOLUTION_API_ITEM => $screenResolution,
- FlagshipConstant::USER_LANGUAGE => $userLanguage,
- FlagshipConstant::SESSION_NUMBER => $sessionNumber,
- FlagshipConstant::EVENT_CATEGORY_API_ITEM => $eventCategory,
- FlagshipConstant::EVENT_ACTION_API_ITEM => $eventAction,
- ];
+ FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId,
+ FlagshipConstant::DS_API_ITEM => FlagshipConstant::SDK_APP,
+ FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $envId,
+ FlagshipConstant::T_API_ITEM => HitType::EVENT->value,
+ FlagshipConstant::CUSTOMER_UID => null,
+ FlagshipConstant::QT_API_ITEM => 0.0,
+ FlagshipConstant::USER_IP_API_ITEM => $userIp,
+ FlagshipConstant::SCREEN_RESOLUTION_API_ITEM => $screenResolution,
+ FlagshipConstant::USER_LANGUAGE => $userLanguage,
+ FlagshipConstant::SESSION_NUMBER => $sessionNumber,
+ FlagshipConstant::EVENT_CATEGORY_API_ITEM => $eventCategory,
+ FlagshipConstant::EVENT_ACTION_API_ITEM => $eventAction,
+ ];
$event = new Event($eventCategory, $eventAction);
$config = new DecisionApiConfig();
$config->setEnvId($envId);
- $event->setConfig($config)
- ->setVisitorId($visitorId)
- ->setDs(FlagshipConstant::SDK_APP)
- ->setLocale($userLanguage)
- ->setUserIP($userIp)
- ->setScreenResolution($screenResolution)
- ->setSessionNumber($sessionNumber);
+ $event->setConfig($config)->setVisitorId($visitorId)->setDs(FlagshipConstant::SDK_APP)->setLocale($userLanguage)->setUserIP($userIp)->setScreenResolution($screenResolution)->setSessionNumber($sessionNumber);
$this->assertSame($eventArray, $event->toApiKeys());
@@ -109,9 +103,7 @@ public function testIsReady()
$eventCategory = EventCategory::ACTION_TRACKING;
$event = new Event($eventCategory, $eventAction);
- $event->setConfig($config)
- ->setVisitorId('visitorId')
- ->setDs(FlagshipConstant::SDK_APP);
+ $event->setConfig($config)->setVisitorId('visitorId')->setDs(FlagshipConstant::SDK_APP);
$this->assertFalse($event->isReady());
@@ -120,9 +112,7 @@ public function testIsReady()
//Test with require HitAbstract fields and require Transaction fields
$eventAction = "ItemName";
$event = new Event($eventCategory, $eventAction);
- $event->setConfig($config)
- ->setVisitorId('visitorId')
- ->setDs(FlagshipConstant::SDK_APP);
+ $event->setConfig($config)->setVisitorId('visitorId')->setDs(FlagshipConstant::SDK_APP);
$this->assertTrue($event->isReady());
}
diff --git a/tests/Hit/HitBatchTest.php b/tests/Hit/HitBatchTest.php
index e058a149..007e8b9a 100644
--- a/tests/Hit/HitBatchTest.php
+++ b/tests/Hit/HitBatchTest.php
@@ -19,17 +19,20 @@ public function testToApiKeys()
$screen = new Screen("home");
$screen->setConfig($config)->setVisitorId($visitorId);
- $hits = [$page, $screen];
+ $hits = [
+ $page,
+ $screen,
+ ];
$batch = new HitBatch($config, [$page, $screen]);
$data = [
- FlagshipConstant::DS_API_ITEM => FlagshipConstant::SDK_APP,
- FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $config->getEnvId(),
- FlagshipConstant::T_API_ITEM => "BATCH",
- FlagshipConstant::QT_API_ITEM => 0.0,
- FlagshipConstant::H_API_ITEM => []
- ];
+ FlagshipConstant::DS_API_ITEM => FlagshipConstant::SDK_APP,
+ FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $config->getEnvId(),
+ FlagshipConstant::T_API_ITEM => "BATCH",
+ FlagshipConstant::QT_API_ITEM => 0.0,
+ FlagshipConstant::H_API_ITEM => [],
+ ];
foreach ($hits as $hit) {
$hitApiKey = $hit->toApiKeys();
diff --git a/tests/Hit/ItemTest.php b/tests/Hit/ItemTest.php
index f34e219e..f4e65ff1 100644
--- a/tests/Hit/ItemTest.php
+++ b/tests/Hit/ItemTest.php
@@ -23,23 +23,21 @@ public function testConstruct()
$itemCategory = "category 1";
$itemArray = [
- FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId,
- FlagshipConstant::DS_API_ITEM => FlagshipConstant::SDK_APP,
- FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $envId,
- FlagshipConstant::T_API_ITEM => HitType::ITEM->value,
- FlagshipConstant::CUSTOMER_UID => null,
- FlagshipConstant::QT_API_ITEM => 0.0,
- FlagshipConstant::TID_API_ITEM => $transactionId,
- FlagshipConstant::IN_API_ITEM => $itemName,
- FlagshipConstant::IC_API_ITEM => $itemCode
- ];
+ FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId,
+ FlagshipConstant::DS_API_ITEM => FlagshipConstant::SDK_APP,
+ FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $envId,
+ FlagshipConstant::T_API_ITEM => HitType::ITEM->value,
+ FlagshipConstant::CUSTOMER_UID => null,
+ FlagshipConstant::QT_API_ITEM => 0.0,
+ FlagshipConstant::TID_API_ITEM => $transactionId,
+ FlagshipConstant::IN_API_ITEM => $itemName,
+ FlagshipConstant::IC_API_ITEM => $itemCode,
+ ];
$item = new Item($transactionId, $itemName, $itemCode);
$config = new DecisionApiConfig($envId);
- $item->setVisitorId($visitorId)
- ->setConfig($config)
- ->setDs(FlagshipConstant::SDK_APP);
+ $item->setVisitorId($visitorId)->setConfig($config)->setDs(FlagshipConstant::SDK_APP);
$this->assertSame($itemArray, $item->toApiKeys());
@@ -95,9 +93,7 @@ public function testIsReady()
$itemName = "";
$item = new Item($transactionId, $itemName, $itemCode);
- $item->setConfig($config)
- ->setVisitorId('visitorId')
- ->setDs(FlagshipConstant::SDK_APP);
+ $item->setConfig($config)->setVisitorId('visitorId')->setDs(FlagshipConstant::SDK_APP);
$this->assertFalse($item->isReady());
$this->assertSame(Item::ERROR_MESSAGE, $item->getErrorMessage());
@@ -105,9 +101,7 @@ public function testIsReady()
//Test with require HitAbstract fields and require Item fields
$itemName = "ItemName";
$item = new Item($transactionId, $itemName, $itemCode);
- $item->setConfig($config)
- ->setVisitorId('visitorId')
- ->setDs(FlagshipConstant::SDK_APP);
+ $item->setConfig($config)->setVisitorId('visitorId')->setDs(FlagshipConstant::SDK_APP);
$this->assertTrue($item->isReady());
}
diff --git a/tests/Hit/PageTest.php b/tests/Hit/PageTest.php
index 18c7c43d..8b485512 100644
--- a/tests/Hit/PageTest.php
+++ b/tests/Hit/PageTest.php
@@ -20,19 +20,17 @@ public function testConstruct()
$page = new Page($pageUrl);
$config = new DecisionApiConfig($envId);
- $page->setConfig($config)
- ->setDs(FlagshipConstant::SDK_APP)
- ->setVisitorId($visitorId);
+ $page->setConfig($config)->setDs(FlagshipConstant::SDK_APP)->setVisitorId($visitorId);
$screenArray = [
- FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId,
- FlagshipConstant::DS_API_ITEM => FlagshipConstant::SDK_APP,
- FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $envId,
- FlagshipConstant::T_API_ITEM => HitType::PAGE_VIEW->value,
- FlagshipConstant::CUSTOMER_UID => null,
- FlagshipConstant::QT_API_ITEM => 0.0,
- FlagshipConstant::DL_API_ITEM => $pageUrl
- ];
+ FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId,
+ FlagshipConstant::DS_API_ITEM => FlagshipConstant::SDK_APP,
+ FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $envId,
+ FlagshipConstant::T_API_ITEM => HitType::PAGE_VIEW->value,
+ FlagshipConstant::CUSTOMER_UID => null,
+ FlagshipConstant::QT_API_ITEM => 0.0,
+ FlagshipConstant::DL_API_ITEM => $pageUrl,
+ ];
$this->assertSame($screenArray, $page->toApiKeys());
}
@@ -49,17 +47,13 @@ public function testIsReady()
$config = new DecisionApiConfig('envId');
- $page->setConfig($config)
- ->setVisitorId('visitorId')
- ->setDs(FlagshipConstant::SDK_APP);
+ $page->setConfig($config)->setVisitorId('visitorId')->setDs(FlagshipConstant::SDK_APP);
//Test isReady Test with require HitAbstract fields and with empty pageUrl
$pageUrl = "";
$page = new Page($pageUrl);
- $page->setConfig($config)
- ->setVisitorId('visitorId')
- ->setDs(FlagshipConstant::SDK_APP);
+ $page->setConfig($config)->setVisitorId('visitorId')->setDs(FlagshipConstant::SDK_APP);
$this->assertFalse($page->isReady());
@@ -68,9 +62,7 @@ public function testIsReady()
//Test with require HitAbstract fields and require Page fields
$pageUrl = "https://localhost";
$page = new Page($pageUrl);
- $page->setConfig($config)
- ->setVisitorId('visitorId')
- ->setDs(FlagshipConstant::SDK_APP);
+ $page->setConfig($config)->setVisitorId('visitorId')->setDs(FlagshipConstant::SDK_APP);
$this->assertTrue($page->isReady());
}
diff --git a/tests/Hit/ScreenTest.php b/tests/Hit/ScreenTest.php
index 9d21d6a0..0abdd790 100644
--- a/tests/Hit/ScreenTest.php
+++ b/tests/Hit/ScreenTest.php
@@ -19,19 +19,17 @@ public function testConstruct()
$config = new DecisionApiConfig($envId);
$screen = new Screen($screenName);
- $screen->setConfig($config)
- ->setDs(FlagshipConstant::SDK_APP)
- ->setVisitorId($visitorId);
+ $screen->setConfig($config)->setDs(FlagshipConstant::SDK_APP)->setVisitorId($visitorId);
$screenArray = [
- FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId,
- FlagshipConstant::DS_API_ITEM => FlagshipConstant::SDK_APP,
- FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $envId,
- FlagshipConstant::T_API_ITEM => HitType::SCREEN_VIEW->value,
- FlagshipConstant::CUSTOMER_UID => null,
- FlagshipConstant::QT_API_ITEM => 0.0,
- FlagshipConstant::DL_API_ITEM => $screenName
- ];
+ FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId,
+ FlagshipConstant::DS_API_ITEM => FlagshipConstant::SDK_APP,
+ FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $envId,
+ FlagshipConstant::T_API_ITEM => HitType::SCREEN_VIEW->value,
+ FlagshipConstant::CUSTOMER_UID => null,
+ FlagshipConstant::QT_API_ITEM => 0.0,
+ FlagshipConstant::DL_API_ITEM => $screenName,
+ ];
$this->assertSame($screenArray, $screen->toApiKeys());
}
@@ -49,9 +47,7 @@ public function testIsReady()
$screenName = "";
$screen = new Screen($screenName);
$config = new DecisionApiConfig('envId');
- $screen->setConfig($config)
- ->setVisitorId('visitorId')
- ->setDs(FlagshipConstant::SDK_APP);
+ $screen->setConfig($config)->setVisitorId('visitorId')->setDs(FlagshipConstant::SDK_APP);
$this->assertFalse($screen->isReady());
@@ -61,9 +57,7 @@ public function testIsReady()
$screenName = "screenName";
$screen = new Screen($screenName);
- $screen->setConfig($config)
- ->setVisitorId('visitorId')
- ->setDs(FlagshipConstant::SDK_APP);
+ $screen->setConfig($config)->setVisitorId('visitorId')->setDs(FlagshipConstant::SDK_APP);
$this->assertTrue($screen->isReady());
}
}
diff --git a/tests/Hit/SegmentTest.php b/tests/Hit/SegmentTest.php
index 96ac3ad5..517cc651 100644
--- a/tests/Hit/SegmentTest.php
+++ b/tests/Hit/SegmentTest.php
@@ -15,10 +15,10 @@ public function testConstructor()
$visitorId = "visitorId";
$context = [
- "key1" => "value1",
- "key2" => 1,
- "key3" => true
- ];
+ "key1" => "value1",
+ "key2" => 1,
+ "key3" => true,
+ ];
$config = new DecisionApiConfig($envId);
@@ -30,14 +30,14 @@ public function testConstructor()
$this->assertSame($context, $segment->getSl());
$segmentArray = [
- FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId,
- FlagshipConstant::DS_API_ITEM => FlagshipConstant::SDK_APP,
- FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $envId,
- FlagshipConstant::T_API_ITEM => HitType::SEGMENT->value,
- FlagshipConstant::CUSTOMER_UID => null,
- FlagshipConstant::QT_API_ITEM => 0.0,
- FlagshipConstant::SL_API_ITEM => $context
- ];
+ FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId,
+ FlagshipConstant::DS_API_ITEM => FlagshipConstant::SDK_APP,
+ FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $envId,
+ FlagshipConstant::T_API_ITEM => HitType::SEGMENT->value,
+ FlagshipConstant::CUSTOMER_UID => null,
+ FlagshipConstant::QT_API_ITEM => 0.0,
+ FlagshipConstant::SL_API_ITEM => $context,
+ ];
$this->assertSame($segmentArray, $segment->toApiKeys());
diff --git a/tests/Hit/TransactionTest.php b/tests/Hit/TransactionTest.php
index 14513828..1b035641 100644
--- a/tests/Hit/TransactionTest.php
+++ b/tests/Hit/TransactionTest.php
@@ -35,15 +35,15 @@ public function testConstruct()
$transaction->setVisitorId($visitorId)->setDs($ds)->setConfig($config);
$transactionArray = [
- FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId,
- FlagshipConstant::DS_API_ITEM => $ds,
- FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $envId,
- FlagshipConstant::T_API_ITEM => HitType::TRANSACTION->value,
- FlagshipConstant::CUSTOMER_UID => null,
- FlagshipConstant::QT_API_ITEM => 0.0,
- FlagshipConstant::TID_API_ITEM => $transactionId,
- FlagshipConstant::TA_API_ITEM => $transactionAffiliation
- ];
+ FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId,
+ FlagshipConstant::DS_API_ITEM => $ds,
+ FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $envId,
+ FlagshipConstant::T_API_ITEM => HitType::TRANSACTION->value,
+ FlagshipConstant::CUSTOMER_UID => null,
+ FlagshipConstant::QT_API_ITEM => 0.0,
+ FlagshipConstant::TID_API_ITEM => $transactionId,
+ FlagshipConstant::TA_API_ITEM => $transactionAffiliation,
+ ];
$taxesAmount = 76.0;
$transaction->setTaxes($taxesAmount);
@@ -110,18 +110,14 @@ public function testIsReady()
//Test with require HitAbstract fields and with null transactionId
$config = new DecisionApiConfig('envId');
- $transaction->setConfig($config)
- ->setVisitorId('visitorId')
- ->setDs(FlagshipConstant::SDK_APP);
+ $transaction->setConfig($config)->setVisitorId('visitorId')->setDs(FlagshipConstant::SDK_APP);
//Test isReady with require HitAbstract fields and with empty transactionAffiliation
$transactionAffiliation = "";
$transaction = new Transaction($transactionId, $transactionAffiliation);
- $transaction->setConfig($config)
- ->setVisitorId('visitorId')
- ->setDs(FlagshipConstant::SDK_APP);
+ $transaction->setConfig($config)->setVisitorId('visitorId')->setDs(FlagshipConstant::SDK_APP);
$this->assertFalse($transaction->isReady());
@@ -131,9 +127,7 @@ public function testIsReady()
$transactionAffiliation = "ItemName";
$transaction = new Transaction($transactionId, $transactionAffiliation);
- $transaction->setConfig($config)
- ->setVisitorId('visitorId')
- ->setDs(FlagshipConstant::SDK_APP);
+ $transaction->setConfig($config)->setVisitorId('visitorId')->setDs(FlagshipConstant::SDK_APP);
$this->assertTrue($transaction->isReady());
}
diff --git a/tests/Hit/TroubleshootingTest.php b/tests/Hit/TroubleshootingTest.php
index 9b5168dd..265ad61b 100644
--- a/tests/Hit/TroubleshootingTest.php
+++ b/tests/Hit/TroubleshootingTest.php
@@ -34,212 +34,132 @@ public function testConstruct()
$cacheStrategy = CacheStrategy::BATCHING_AND_CACHING_ON_FAILURE;
$httpRequestUrl = "https://localhost";
$httpRequestMethod = "GET";
- $httpRequestHeaders = [
- "key" => "value"
- ];
- $httpRequestBody = [
- "key" => "value"
- ];
+ $httpRequestHeaders = ["key" => "value"];
+ $httpRequestBody = ["key" => "value"];
$httpResponseUrl = "https://localhost";
$httpResponseMethod = "GET";
- $httpResponseHeaders = [
- "key" => "value"
- ];
+ $httpResponseHeaders = ["key" => "value"];
$httpResponseTime = 1;
$httpResponseCode = 200;
- $httpResponseBody = [
- 'key' => "value"
- ];
+ $httpResponseBody = ['key' => "value"];
$visitorContext = [
- "key1" => "value1",
- "key2" => "value2"
- ];
+ "key1" => "value1",
+ "key2" => "value2",
+ ];
$visitorAssignmentHistory = [
- "key1" => "value1",
- "key2" => "value2"
- ];
+ "key1" => "value1",
+ "key2" => "value2",
+ ];
$flagDto = new FlagDTO();
- $flagDto->setKey("key")
- ->setValue("value")
- ->setCampaignId("campaignId")
- ->setCampaignType("ab")
- ->setCampaignName("campaignName")
- ->setVariationId("varId")
- ->setVariationName("variationName")
- ->setVariationGroupId("varGroupId")
- ->setIsReference(false)
- ->setSlug("slug")
- ->setVariationGroupName("varGroupName");
+ $flagDto->setKey("key")->setValue("value")->setCampaignId("campaignId")->setCampaignType("ab")->setCampaignName("campaignName")->setVariationId("varId")->setVariationName("variationName")->setVariationGroupId("varGroupId")->setIsReference(false)->setSlug("slug")->setVariationGroupName("varGroupName");
$flagDto2 = new FlagDTO();
- $flagDto2->setKey("key2")
- ->setValue([])
- ->setCampaignId("campaignId")
- ->setCampaignType("ab")
- ->setCampaignName("campaignName")
- ->setVariationId("varId")
- ->setVariationName("variationName")
- ->setVariationGroupId("varGroupId")
- ->setIsReference(false)
- ->setVariationGroupName("varGroupName");
+ $flagDto2->setKey("key2")->setValue([])->setCampaignId("campaignId")->setCampaignType("ab")->setCampaignName("campaignName")->setVariationId("varId")->setVariationName("variationName")->setVariationGroupId("varGroupId")->setIsReference(false)->setVariationGroupName("varGroupName");
$visitorFlag = [
- $flagDto,
- $flagDto2
- ];
+ $flagDto,
+ $flagDto2,
+ ];
$activateHit = new Activate("varGroupId", "varId");
- $activateHit->setConfig($config)
- ->setVisitorId($visitorId);
+ $activateHit->setConfig($config)->setVisitorId($visitorId);
$sdkConfigBucketingUrl = 'http://localhost';
- $troubleshooting->setVisitorId($visitorId)
- ->setAnonymousId($anonymousId)
- ->setConfig($config)
- ->setLogLevel(LogLevel::INFO)
- ->setLabel(TroubleshootingLabel::VISITOR_FETCH_CAMPAIGNS)
- ->setFlagshipInstanceId($flagshipInstanceId)
- ->setVisitorSessionId($visitorInstanceId)
- ->setStackOriginName($stackOriginName)
- ->setStackOriginVersion($stackOriginVersion)
- ->setSdkStatus($sdkStatus)
- ->setSdkConfigMode($sdkConfigMode)
- ->setSdkConfigLogLevel($config->getLogLevel())
- ->setSdkConfigCustomLogManager(true)
- ->setSdkConfigCustomCacheManager(true)
- ->setSdkConfigStatusListener(false)
- ->setSdkConfigBucketingUrl($sdkConfigBucketingUrl)
- ->setSdkConfigUsingCustomHitCache(true)
- ->setSdkConfigUsingOnVisitorExposed(true)
- ->setSdkConfigUsingCustomVisitorCache(true)
- ->setSdkConfigFetchThirdPartyData(true)
- ->setSdkConfigTimeout($config->getTimeout())
- ->setSdkConfigTrackingManagerConfigStrategy($cacheStrategy)
- ->setHttpRequestUrl($httpRequestUrl)
- ->setHttpRequestMethod($httpRequestMethod)
- ->setHttpRequestHeaders($httpRequestHeaders)
- ->setHttpRequestBody($httpRequestBody)
- ->setHttpResponseUrl($httpResponseUrl)
- ->setHttpResponseMethod($httpResponseMethod)
- ->setHttpResponseHeaders($httpResponseHeaders)
- ->setHttpResponseTime($httpResponseTime)
- ->setHttpResponseCode($httpResponseCode)
- ->setHttpResponseBody($httpResponseBody)
- ->setVisitorConsent(true)
- ->setVisitorContext($visitorContext)
- ->setVisitorAssignmentHistory($visitorAssignmentHistory)
- ->setVisitorFlags($visitorFlag)
- ->setVisitorIsAuthenticated(true)
- ->setVisitorCampaigns([])
- ->setFlagKey($flagDto->getKey())
- ->setFlagValue($flagDto->getValue())
- ->setFlagMetadataCampaignIsReference($flagDto->getIsReference())
- ->setFlagMetadataVariationId($flagDto->getVariationId())
- ->setFlagMetadataVariationName($flagDto->getVariationName())
- ->setFlagMetadataVariationGroupId($flagDto->getVariationGroupId())
- ->setFlagMetadataVariationGroupName($flagDto->getVariationGroupName())
- ->setFlagMetadataCampaignId($flagDto->getCampaignId())
- ->setFlagMetadataCampaignName($flagDto->getCampaignName())
- ->setFlagMetadataCampaignType($flagDto->getCampaignType())
- ->setFlagDefault("default")
- ->setFlagMetadataCampaignSlug($flagDto->getSlug())
- ->setVisitorExposed(true)
- ->setHitContent($activateHit->toApiKeys())
- ;
+ $troubleshooting->setVisitorId($visitorId)->setAnonymousId($anonymousId)->setConfig($config)->setLogLevel(LogLevel::INFO)->setLabel(TroubleshootingLabel::VISITOR_FETCH_CAMPAIGNS)->setFlagshipInstanceId($flagshipInstanceId)->setVisitorSessionId($visitorInstanceId)->setStackOriginName($stackOriginName)->setStackOriginVersion($stackOriginVersion)->setSdkStatus($sdkStatus)->setSdkConfigMode($sdkConfigMode)->setSdkConfigLogLevel($config->getLogLevel())->setSdkConfigCustomLogManager(true)->setSdkConfigCustomCacheManager(true)->setSdkConfigStatusListener(false)->setSdkConfigBucketingUrl($sdkConfigBucketingUrl)->setSdkConfigUsingCustomHitCache(true)->setSdkConfigUsingOnVisitorExposed(true)->setSdkConfigUsingCustomVisitorCache(true)->setSdkConfigFetchThirdPartyData(true)->setSdkConfigTimeout($config->getTimeout())->setSdkConfigTrackingManagerConfigStrategy($cacheStrategy)->setHttpRequestUrl($httpRequestUrl)->setHttpRequestMethod($httpRequestMethod)->setHttpRequestHeaders($httpRequestHeaders)->setHttpRequestBody($httpRequestBody)->setHttpResponseUrl($httpResponseUrl)->setHttpResponseMethod($httpResponseMethod)->setHttpResponseHeaders($httpResponseHeaders)->setHttpResponseTime($httpResponseTime)->setHttpResponseCode($httpResponseCode)->setHttpResponseBody($httpResponseBody)->setVisitorConsent(true)->setVisitorContext($visitorContext)->setVisitorAssignmentHistory($visitorAssignmentHistory)->setVisitorFlags($visitorFlag)->setVisitorIsAuthenticated(true)->setVisitorCampaigns([])->setFlagKey($flagDto->getKey())->setFlagValue($flagDto->getValue())->setFlagMetadataCampaignIsReference($flagDto->getIsReference())->setFlagMetadataVariationId($flagDto->getVariationId())->setFlagMetadataVariationName($flagDto->getVariationName())->setFlagMetadataVariationGroupId($flagDto->getVariationGroupId())->setFlagMetadataVariationGroupName($flagDto->getVariationGroupName())->setFlagMetadataCampaignId($flagDto->getCampaignId())->setFlagMetadataCampaignName($flagDto->getCampaignName())->setFlagMetadataCampaignType($flagDto->getCampaignType())->setFlagDefault("default")->setFlagMetadataCampaignSlug($flagDto->getSlug())->setVisitorExposed(true)->setHitContent($activateHit->toApiKeys());
$customVariable = [
- 'version' => FlagshipConstant::TROUBLESHOOTING_VERSION,
- 'logLevel' => LogLevel::INFO->name,
- 'envId' => $config->getEnvId(),
- 'timeZone' => (new DateTime())->getTimezone()->getName(),
- 'label' => TroubleshootingLabel::VISITOR_FETCH_CAMPAIGNS->value,
- 'stack.type' => FlagshipConstant::SDK,
- 'stack.name' => FlagshipConstant::SDK_LANGUAGE,
- 'stack.version' => FlagshipConstant::SDK_VERSION,
- 'visitor.visitorId' => $visitorId,
- 'visitor.anonymousId' => $anonymousId,
- 'visitor.sessionId' => $visitorInstanceId,
- 'flagshipInstanceId' => $flagshipInstanceId,
- 'stack.origin.name' => $stackOriginName,
- 'stack.origin.version' => $stackOriginVersion,
- 'sdk.status' => $sdkStatus->name,
- 'sdk.config.logLevel' => $config->getLogLevel()->name,
- 'sdk.config.mode' => $sdkConfigMode->name,
- 'sdk.config.customLogManager' => 'true',
- 'sdk.config.customCacheManager' => 'true',
- 'sdk.config.custom.StatusListener' => 'false',
- 'sdk.config.timeout' => (string) $config->getTimeout(),
- 'sdk.config.trackingManager.strategy' => $cacheStrategy->name,
- 'sdk.config.bucketingUrl' => $sdkConfigBucketingUrl,
- 'sdk.config.fetchThirdPartyData' => 'true',
- 'sdk.config.usingOnVisitorExposed' => 'true',
- 'sdk.config.usingCustomHitCache' => 'true',
- 'sdk.config.usingCustomVisitorCache' => 'true',
- 'http.request.url' => $httpRequestUrl,
- 'http.request.method' => $httpRequestMethod,
- 'http.request.headers' => json_encode($httpRequestHeaders),
- 'http.request.body' => json_encode($httpRequestBody),
- 'http.response.url' => $httpResponseUrl,
- 'http.response.method' => $httpResponseMethod,
- 'http.response.headers' => json_encode($httpResponseHeaders),
- 'http.response.code' => (string)$httpResponseCode,
- "http.response.body" => json_encode($httpResponseBody),
- 'http.response.time' => (string)$httpResponseTime,
- 'visitor.context.[key1]' => 'value1',
- 'visitor.context.[key2]' => 'value2',
- 'visitor.consent' => 'true',
- 'visitor.assignments.key1' => 'value1',
- 'visitor.assignments.key2' => 'value2',
- 'visitor.flags.[key].key' => $flagDto->getKey(),
- 'visitor.flags.[key].value' => $flagDto->getValue(),
- 'visitor.flags.[key].metadata.variationId' => $flagDto->getVariationId(),
- 'visitor.flags.[key].metadata.variationName' => $flagDto->getVariationName(),
- 'visitor.flags.[key].metadata.variationGroupId' => $flagDto->getVariationGroupId(),
- 'visitor.flags.[key].metadata.variationGroupName' => $flagDto->getVariationGroupName(),
- 'visitor.flags.[key].metadata.campaignId' => $flagDto->getCampaignId(),
- 'visitor.flags.[key].metadata.campaignName' => $flagDto->getCampaignName(),
- 'visitor.flags.[key].metadata.campaignType' => $flagDto->getCampaignType(),
- 'visitor.flags.[key].metadata.slug' => $flagDto->getSlug(),
- 'visitor.flags.[key].metadata.isReference' => json_encode($flagDto->getIsReference()),
- 'visitor.flags.[key2].key' => $flagDto2->getKey(),
- 'visitor.flags.[key2].value' => json_encode($flagDto2->getValue()),
- 'visitor.flags.[key2].metadata.variationId' => $flagDto2->getVariationId(),
- 'visitor.flags.[key2].metadata.variationName' => $flagDto2->getVariationName(),
- 'visitor.flags.[key2].metadata.variationGroupId' => $flagDto2->getVariationGroupId(),
- 'visitor.flags.[key2].metadata.variationGroupName' => $flagDto2->getVariationGroupName(),
- 'visitor.flags.[key2].metadata.campaignId' => $flagDto2->getCampaignId(),
- 'visitor.flags.[key2].metadata.campaignName' => $flagDto2->getCampaignName(),
- 'visitor.flags.[key2].metadata.campaignType' => $flagDto2->getCampaignType(),
- 'visitor.flags.[key2].metadata.slug' => '',
- 'visitor.flags.[key2].metadata.isReference' => json_encode($flagDto2->getIsReference()),
- 'visitor.isAuthenticated' => 'true',
- 'visitor.campaigns' => '[]',
- 'flag.key' => $flagDto->getKey(),
- 'flag.value' => $flagDto->getValue(),
- 'flag.default' => "default",
- 'flag.visitorExposed' => "true",
- 'flag.metadata.campaignId' => $flagDto->getCampaignId(),
- 'flag.metadata.campaignName' => $flagDto->getCampaignName(),
- 'flag.metadata.variationGroupId' => $flagDto->getVariationGroupId(),
- 'flag.metadata.variationGroupName' => $flagDto->getVariationGroupName(),
- 'flag.metadata.variationId' => $flagDto->getVariationId(),
- 'flag.metadata.variationName' => $flagDto->getVariationName(),
- 'flag.metadata.campaignSlug' => $flagDto->getSlug(),
- 'flag.metadata.campaignType' => $flagDto->getCampaignType(),
- 'flag.metadata.isReference' => json_encode($flagDto->getIsReference()),
- ];
+ 'version' => FlagshipConstant::TROUBLESHOOTING_VERSION,
+ 'logLevel' => LogLevel::INFO->name,
+ 'envId' => $config->getEnvId(),
+ 'timeZone' => (new DateTime())->getTimezone()->getName(),
+ 'label' => TroubleshootingLabel::VISITOR_FETCH_CAMPAIGNS->value,
+ 'stack.type' => FlagshipConstant::SDK,
+ 'stack.name' => FlagshipConstant::SDK_LANGUAGE,
+ 'stack.version' => FlagshipConstant::SDK_VERSION,
+ 'visitor.visitorId' => $visitorId,
+ 'visitor.anonymousId' => $anonymousId,
+ 'visitor.sessionId' => $visitorInstanceId,
+ 'flagshipInstanceId' => $flagshipInstanceId,
+ 'stack.origin.name' => $stackOriginName,
+ 'stack.origin.version' => $stackOriginVersion,
+ 'sdk.status' => $sdkStatus->name,
+ 'sdk.config.logLevel' => $config->getLogLevel()->name,
+ 'sdk.config.mode' => $sdkConfigMode->name,
+ 'sdk.config.customLogManager' => 'true',
+ 'sdk.config.customCacheManager' => 'true',
+ 'sdk.config.custom.StatusListener' => 'false',
+ 'sdk.config.timeout' => (string) $config->getTimeout(),
+ 'sdk.config.trackingManager.strategy' => $cacheStrategy->name,
+ 'sdk.config.bucketingUrl' => $sdkConfigBucketingUrl,
+ 'sdk.config.fetchThirdPartyData' => 'true',
+ 'sdk.config.usingOnVisitorExposed' => 'true',
+ 'sdk.config.usingCustomHitCache' => 'true',
+ 'sdk.config.usingCustomVisitorCache' => 'true',
+ 'http.request.url' => $httpRequestUrl,
+ 'http.request.method' => $httpRequestMethod,
+ 'http.request.headers' => json_encode($httpRequestHeaders),
+ 'http.request.body' => json_encode($httpRequestBody),
+ 'http.response.url' => $httpResponseUrl,
+ 'http.response.method' => $httpResponseMethod,
+ 'http.response.headers' => json_encode($httpResponseHeaders),
+ 'http.response.code' => (string)$httpResponseCode,
+ "http.response.body" => json_encode($httpResponseBody),
+ 'http.response.time' => (string)$httpResponseTime,
+ 'visitor.context.[key1]' => 'value1',
+ 'visitor.context.[key2]' => 'value2',
+ 'visitor.consent' => 'true',
+ 'visitor.assignments.key1' => 'value1',
+ 'visitor.assignments.key2' => 'value2',
+ 'visitor.flags.[key].key' => $flagDto->getKey(),
+ 'visitor.flags.[key].value' => $flagDto->getValue(),
+ 'visitor.flags.[key].metadata.variationId' => $flagDto->getVariationId(),
+ 'visitor.flags.[key].metadata.variationName' => $flagDto->getVariationName(),
+ 'visitor.flags.[key].metadata.variationGroupId' => $flagDto->getVariationGroupId(),
+ 'visitor.flags.[key].metadata.variationGroupName' => $flagDto->getVariationGroupName(),
+ 'visitor.flags.[key].metadata.campaignId' => $flagDto->getCampaignId(),
+ 'visitor.flags.[key].metadata.campaignName' => $flagDto->getCampaignName(),
+ 'visitor.flags.[key].metadata.campaignType' => $flagDto->getCampaignType(),
+ 'visitor.flags.[key].metadata.slug' => $flagDto->getSlug(),
+ 'visitor.flags.[key].metadata.isReference' => json_encode($flagDto->getIsReference()),
+ 'visitor.flags.[key2].key' => $flagDto2->getKey(),
+ 'visitor.flags.[key2].value' => json_encode($flagDto2->getValue()),
+ 'visitor.flags.[key2].metadata.variationId' => $flagDto2->getVariationId(),
+ 'visitor.flags.[key2].metadata.variationName' => $flagDto2->getVariationName(),
+ 'visitor.flags.[key2].metadata.variationGroupId' => $flagDto2->getVariationGroupId(),
+ 'visitor.flags.[key2].metadata.variationGroupName' => $flagDto2->getVariationGroupName(),
+ 'visitor.flags.[key2].metadata.campaignId' => $flagDto2->getCampaignId(),
+ 'visitor.flags.[key2].metadata.campaignName' => $flagDto2->getCampaignName(),
+ 'visitor.flags.[key2].metadata.campaignType' => $flagDto2->getCampaignType(),
+ 'visitor.flags.[key2].metadata.slug' => '',
+ 'visitor.flags.[key2].metadata.isReference' => json_encode($flagDto2->getIsReference()),
+ 'visitor.isAuthenticated' => 'true',
+ 'visitor.campaigns' => '[]',
+ 'flag.key' => $flagDto->getKey(),
+ 'flag.value' => $flagDto->getValue(),
+ 'flag.default' => "default",
+ 'flag.visitorExposed' => "true",
+ 'flag.metadata.campaignId' => $flagDto->getCampaignId(),
+ 'flag.metadata.campaignName' => $flagDto->getCampaignName(),
+ 'flag.metadata.variationGroupId' => $flagDto->getVariationGroupId(),
+ 'flag.metadata.variationGroupName' => $flagDto->getVariationGroupName(),
+ 'flag.metadata.variationId' => $flagDto->getVariationId(),
+ 'flag.metadata.variationName' => $flagDto->getVariationName(),
+ 'flag.metadata.campaignSlug' => $flagDto->getSlug(),
+ 'flag.metadata.campaignType' => $flagDto->getCampaignType(),
+ 'flag.metadata.isReference' => json_encode($flagDto->getIsReference()),
+ ];
foreach ($activateHit->toApiKeys() as $key => $item) {
- $customVariable["hit." . $key] = is_string($item) ? $item : json_encode($item);
+ $customVariable["hit." . $key] = is_string($item) ? $item : json_encode($item);
}
$expectedApiKey = [
- FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId,
- FlagshipConstant::DS_API_ITEM => FlagshipConstant::SDK_APP,
- FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $config->getEnvId(),
- FlagshipConstant::T_API_ITEM => HitType::TROUBLESHOOTING->value,
- 'cv' => $customVariable
- ];
+ FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId,
+ FlagshipConstant::DS_API_ITEM => FlagshipConstant::SDK_APP,
+ FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $config->getEnvId(),
+ FlagshipConstant::T_API_ITEM => HitType::TROUBLESHOOTING->value,
+ 'cv' => $customVariable,
+ ];
$apiKey = $troubleshooting->toApiKeys();
unset($apiKey['cv']['timestamp']);
@@ -247,71 +167,44 @@ public function testConstruct()
$flagDto = new FlagDTO();
- $flagDto->setKey("key")
- ->setValue([])
- ->setCampaignId("campaignId")
- ->setCampaignType("ab")
- ->setCampaignName("campaignName")
- ->setVariationId("varId")
- ->setVariationName("variationName")
- ->setVariationGroupId("varGroupId")
- ->setIsReference(false)
- ->setSlug("slug")
- ->setVariationGroupName("varGroupName");
+ $flagDto->setKey("key")->setValue([])->setCampaignId("campaignId")->setCampaignType("ab")->setCampaignName("campaignName")->setVariationId("varId")->setVariationName("variationName")->setVariationGroupId("varGroupId")->setIsReference(false)->setSlug("slug")->setVariationGroupName("varGroupName");
$troubleshooting = new Troubleshooting();
- $troubleshooting->setVisitorId($visitorId)
- ->setAnonymousId($anonymousId)
- ->setConfig($config)
- ->setLogLevel(LogLevel::INFO)
- ->setLabel(TroubleshootingLabel::VISITOR_FETCH_CAMPAIGNS)
- ->setFlagshipInstanceId($flagshipInstanceId)
- ->setVisitorSessionId($visitorInstanceId)
- ->setFlagKey($flagDto->getKey())
- ->setFlagValue($flagDto->getValue())
- ->setFlagMetadataCampaignIsReference($flagDto->getIsReference())
- ->setFlagMetadataVariationId($flagDto->getVariationId())
- ->setFlagMetadataVariationGroupId($flagDto->getVariationGroupId())
- ->setFlagMetadataCampaignId($flagDto->getCampaignId())
- ->setFlagMetadataCampaignType($flagDto->getCampaignType())
- ->setFlagDefault([])
- ->setFlagMetadataCampaignSlug($flagDto->getSlug())
- ->setVisitorExposed(true)
- ;
+ $troubleshooting->setVisitorId($visitorId)->setAnonymousId($anonymousId)->setConfig($config)->setLogLevel(LogLevel::INFO)->setLabel(TroubleshootingLabel::VISITOR_FETCH_CAMPAIGNS)->setFlagshipInstanceId($flagshipInstanceId)->setVisitorSessionId($visitorInstanceId)->setFlagKey($flagDto->getKey())->setFlagValue($flagDto->getValue())->setFlagMetadataCampaignIsReference($flagDto->getIsReference())->setFlagMetadataVariationId($flagDto->getVariationId())->setFlagMetadataVariationGroupId($flagDto->getVariationGroupId())->setFlagMetadataCampaignId($flagDto->getCampaignId())->setFlagMetadataCampaignType($flagDto->getCampaignType())->setFlagDefault([])->setFlagMetadataCampaignSlug($flagDto->getSlug())->setVisitorExposed(true);
$customVariable = [
- 'version' => FlagshipConstant::TROUBLESHOOTING_VERSION,
- 'logLevel' => LogLevel::INFO->name,
- 'envId' => $config->getEnvId(),
- 'timeZone' => (new DateTime())->getTimezone()->getName(),
- 'label' => TroubleshootingLabel::VISITOR_FETCH_CAMPAIGNS->value,
- 'stack.type' => FlagshipConstant::SDK,
- 'stack.name' => FlagshipConstant::SDK_LANGUAGE,
- 'stack.version' => FlagshipConstant::SDK_VERSION,
- 'visitor.visitorId' => $visitorId,
- 'visitor.anonymousId' => $anonymousId,
- 'visitor.sessionId' => $visitorInstanceId,
- 'flagshipInstanceId' => $flagshipInstanceId,
- 'flag.key' => $flagDto->getKey(),
- 'flag.value' => json_encode($flagDto->getValue()),
- 'flag.default' => json_encode([]),
- 'flag.visitorExposed' => "true",
- 'flag.metadata.campaignId' => $flagDto->getCampaignId(),
- 'flag.metadata.variationGroupId' => $flagDto->getVariationGroupId(),
- 'flag.metadata.variationId' => $flagDto->getVariationId(),
- 'flag.metadata.campaignSlug' => $flagDto->getSlug(),
- 'flag.metadata.campaignType' => $flagDto->getCampaignType(),
- 'flag.metadata.isReference' => json_encode($flagDto->getIsReference())
- ];
+ 'version' => FlagshipConstant::TROUBLESHOOTING_VERSION,
+ 'logLevel' => LogLevel::INFO->name,
+ 'envId' => $config->getEnvId(),
+ 'timeZone' => (new DateTime())->getTimezone()->getName(),
+ 'label' => TroubleshootingLabel::VISITOR_FETCH_CAMPAIGNS->value,
+ 'stack.type' => FlagshipConstant::SDK,
+ 'stack.name' => FlagshipConstant::SDK_LANGUAGE,
+ 'stack.version' => FlagshipConstant::SDK_VERSION,
+ 'visitor.visitorId' => $visitorId,
+ 'visitor.anonymousId' => $anonymousId,
+ 'visitor.sessionId' => $visitorInstanceId,
+ 'flagshipInstanceId' => $flagshipInstanceId,
+ 'flag.key' => $flagDto->getKey(),
+ 'flag.value' => json_encode($flagDto->getValue()),
+ 'flag.default' => json_encode([]),
+ 'flag.visitorExposed' => "true",
+ 'flag.metadata.campaignId' => $flagDto->getCampaignId(),
+ 'flag.metadata.variationGroupId' => $flagDto->getVariationGroupId(),
+ 'flag.metadata.variationId' => $flagDto->getVariationId(),
+ 'flag.metadata.campaignSlug' => $flagDto->getSlug(),
+ 'flag.metadata.campaignType' => $flagDto->getCampaignType(),
+ 'flag.metadata.isReference' => json_encode($flagDto->getIsReference()),
+ ];
$expectedApiKey = [
- FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId,
- FlagshipConstant::DS_API_ITEM => FlagshipConstant::SDK_APP,
- FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $config->getEnvId(),
- FlagshipConstant::T_API_ITEM => HitType::TROUBLESHOOTING->value,
- 'cv' => $customVariable
- ];
+ FlagshipConstant::VISITOR_ID_API_ITEM => $visitorId,
+ FlagshipConstant::DS_API_ITEM => FlagshipConstant::SDK_APP,
+ FlagshipConstant::CUSTOMER_ENV_ID_API_ITEM => $config->getEnvId(),
+ FlagshipConstant::T_API_ITEM => HitType::TROUBLESHOOTING->value,
+ 'cv' => $customVariable,
+ ];
$apiKey = $troubleshooting->toApiKeys();
diff --git a/tests/Hit/UsageHitTest.php b/tests/Hit/UsageHitTest.php
index 732de212..60275917 100644
--- a/tests/Hit/UsageHitTest.php
+++ b/tests/Hit/UsageHitTest.php
@@ -14,10 +14,7 @@ public function testToApiKeys()
{
$config = new DecisionApiConfig();
$analyticHit = new UsageHit();
- $analyticHit->setVisitorId("visitor")
- ->setLogLevel(LogLevel::INFO)
- ->setLabel(TroubleshootingLabel::FLAG_VALUE_NOT_CALLED)
- ->setConfig($config);
+ $analyticHit->setVisitorId("visitor")->setLogLevel(LogLevel::INFO)->setLabel(TroubleshootingLabel::FLAG_VALUE_NOT_CALLED)->setConfig($config);
$this->assertSame('USAGE', $analyticHit->toApiKeys()['t']);
}
diff --git a/tests/Model/FlagDTOTest.php b/tests/Model/FlagDTOTest.php
index dc5a7499..b8753407 100644
--- a/tests/Model/FlagDTOTest.php
+++ b/tests/Model/FlagDTOTest.php
@@ -42,18 +42,18 @@ public function testModificationInstance()
$this->assertSame($variationId, $flagDTO->getVariationId());
- $arrayToJson = [
- FlagshipField::FIELD_KEY => $flagDTO->getKey(),
- FlagshipField::FIELD_CAMPAIGN_ID => $flagDTO->getCampaignId(),
- FlagshipField::FIELD_CAMPAIGN_NAME => $flagDTO->getCampaignName(),
- FlagshipField::FIELD_VARIATION_GROUP_ID => $flagDTO->getVariationGroupId(),
- FlagshipField::FIELD_VARIATION_GROUP_NAME => $flagDTO->getVariationGroupName(),
- FlagshipField::FIELD_VARIATION_ID => $flagDTO->getVariationId(),
- FlagshipField::FIELD_VARIATION_NAME => $flagDTO->getVariationName(),
- FlagshipField::FIELD_IS_REFERENCE => $flagDTO->getIsReference(),
- FlagshipField::FIELD_VALUE => $flagDTO->getValue(),
- FlagshipField::FIELD_SLUG => $flagDTO->getSlug()
- ];
+ $arrayToJson = [
+ FlagshipField::FIELD_KEY => $flagDTO->getKey(),
+ FlagshipField::FIELD_CAMPAIGN_ID => $flagDTO->getCampaignId(),
+ FlagshipField::FIELD_CAMPAIGN_NAME => $flagDTO->getCampaignName(),
+ FlagshipField::FIELD_VARIATION_GROUP_ID => $flagDTO->getVariationGroupId(),
+ FlagshipField::FIELD_VARIATION_GROUP_NAME => $flagDTO->getVariationGroupName(),
+ FlagshipField::FIELD_VARIATION_ID => $flagDTO->getVariationId(),
+ FlagshipField::FIELD_VARIATION_NAME => $flagDTO->getVariationName(),
+ FlagshipField::FIELD_IS_REFERENCE => $flagDTO->getIsReference(),
+ FlagshipField::FIELD_VALUE => $flagDTO->getValue(),
+ FlagshipField::FIELD_SLUG => $flagDTO->getSlug(),
+ ];
$this->assertJsonStringEqualsJsonString(json_encode($arrayToJson), json_encode($flagDTO));
}
diff --git a/tests/Model/HttpResponseTest.php b/tests/Model/HttpResponseTest.php
index ed878925..966c0899 100644
--- a/tests/Model/HttpResponseTest.php
+++ b/tests/Model/HttpResponseTest.php
@@ -12,9 +12,7 @@ public function testConstruct()
{
$statusCode = 200;
$body = 'Body';
- $headers = [
- "accept" => "application/json"
- ];
+ $headers = ["accept" => "application/json"];
$httpResponse = new HttpResponse($statusCode, $body, $headers);
$this->assertSame($statusCode, $httpResponse->getStatusCode());
diff --git a/tests/TestFunctional.php b/tests/TestFunctional.php
index 5404535e..97adb333 100644
--- a/tests/TestFunctional.php
+++ b/tests/TestFunctional.php
@@ -12,26 +12,21 @@
$envId = getenv('FS_ENV_ID');
$apiKey = getenv('FS_API_KEY');
-Flagship::start($envId, $apiKey, DecisionApiConfig::decisionApi()
- ->setCacheStrategy(CacheStrategy::BATCHING_AND_CACHING_ON_FAILURE));
+Flagship::start($envId, $apiKey, DecisionApiConfig::decisionApi()->setCacheStrategy(CacheStrategy::BATCHING_AND_CACHING_ON_FAILURE));
-$visitor = Flagship::newVisitor("visitor-1", true)
- ->setContext(['ci-test' => true, 'test-ab' => true])
- ->build();
+$visitor = Flagship::newVisitor("visitor-1", true)->setContext(['ci-test' => true, 'test-ab' => true])->build();
$visitor->fetchFlags();
$defaultValue = 'default-value';
-$flag = $visitor->getFlag('ci_flag_1', );
+$flag = $visitor->getFlag('ci_flag_1',);
$flagValue = $flag->getValue($defaultValue);
TestCase::assertSame($defaultValue, $flagValue);
TestCase::assertSame('Test-campaign ab', $flag->getMetadata()->getCampaignName());
//Test 2
-$visitor = Flagship::newVisitor("visitor-2", true)
- ->setContext(['ci-test' => true, 'test-ab' => true])
- ->build();
+$visitor = Flagship::newVisitor("visitor-2", true)->setContext(['ci-test' => true, 'test-ab' => true])->build();
$visitor->fetchFlags();
@@ -42,9 +37,7 @@
TestCase::assertSame('Test-campaign ab', $flag->getMetadata()->getCampaignName());
//Test 3
-$visitor = Flagship::newVisitor("visitor-6", true)
- ->setContext(['ci-test' => false, 'test-ab' => true])
- ->build();
+$visitor = Flagship::newVisitor("visitor-6", true)->setContext(['ci-test' => false, 'test-ab' => true])->build();
$visitor->fetchFlags();
diff --git a/tests/Traits/BuildApiTraitTest.php b/tests/Traits/BuildApiTraitTest.php
index a7e6c107..7751492d 100644
--- a/tests/Traits/BuildApiTraitTest.php
+++ b/tests/Traits/BuildApiTraitTest.php
@@ -30,11 +30,11 @@ public function testBuildHeader()
$headers = $buildHeader->invokeArgs($buildApiTraitMock, [$apiKey]);
$headerArray = [
- FlagshipConstant::HEADER_X_API_KEY => $apiKey,
- FlagshipConstant::HEADER_X_SDK_VERSION => FlagshipConstant::SDK_VERSION,
- FlagshipConstant::HEADER_CONTENT_TYPE => FlagshipConstant::HEADER_APPLICATION_JSON,
- FlagshipConstant::HEADER_X_SDK_CLIENT => FlagshipConstant::SDK_LANGUAGE,
- ];
+ FlagshipConstant::HEADER_X_API_KEY => $apiKey,
+ FlagshipConstant::HEADER_X_SDK_VERSION => FlagshipConstant::SDK_VERSION,
+ FlagshipConstant::HEADER_CONTENT_TYPE => FlagshipConstant::HEADER_APPLICATION_JSON,
+ FlagshipConstant::HEADER_X_SDK_CLIENT => FlagshipConstant::SDK_LANGUAGE,
+ ];
$this->assertSame($headerArray, $headers);
diff --git a/tests/Traits/CommonLogManagerTraitTest.php b/tests/Traits/CommonLogManagerTraitTest.php
index 7db6c666..2113a236 100644
--- a/tests/Traits/CommonLogManagerTraitTest.php
+++ b/tests/Traits/CommonLogManagerTraitTest.php
@@ -9,7 +9,7 @@ class CommonLogManagerTraitTest extends TestCase
public function testGetDateTime()
{
$logManagerTraitMock = $this->getMockForTrait("Flagship\Traits\CommonLogManagerTrait");
- $value = $logManagerTraitMock->getDateTime();
+ $value = $logManagerTraitMock->getDateTime();
$this->assertMatchesRegularExpression("/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+/", $value);
}
}
diff --git a/tests/Traits/HelperTest.php b/tests/Traits/HelperTest.php
new file mode 100644
index 00000000..71d8039d
--- /dev/null
+++ b/tests/Traits/HelperTest.php
@@ -0,0 +1,58 @@
+getNow();
+ $this->assertIsFloat($now);
+ }
+
+ public function testGetCurrentDateTime()
+ {
+ $dateTime = $this->getCurrentDateTime();
+ $this->assertInstanceOf(DateTime::class, $dateTime);
+ }
+
+ public function testValueToHex()
+ {
+ $value = ["v" => "value2"];
+ $expectedHex = "7b2276223a2276616c756532227d";
+ $this->assertSame($expectedHex, $this->valueToHex($value));
+ }
+
+ public function testArraysAreEqual()
+ {
+ $array1 = ["key1" => "value1", "key2" => "value2"];
+ $array2 = ["key1" => "value1", "key2" => "value2"];
+ $this->assertTrue($this->arraysAreEqual($array1, $array2));
+
+ $array1 = ["key1" => "value1", "key2" => "value2"];
+ $array2 = ["key1" => "value1", "key2" => "differentValue"];
+ $this->assertFalse($this->arraysAreEqual($array1, $array2));
+
+ $array1 = ["key1" => "value1", "key2" => ["subKey" => "subValue"]];
+ $array2 = ["key1" => "value1", "key2" => ["subKey" => "subValue"]];
+ $this->assertTrue($this->arraysAreEqual($array1, $array2));
+
+ $array1 = ["key1" => "value1", "key2" => ["subKey" => "subValue"]];
+ $array2 = ["key1" => "value1", "key2" => ["subKey" => "differentSubValue"]];
+ $this->assertFalse($this->arraysAreEqual($array1, $array2));
+
+ $array1 = ["key1" => "value1", "key2" => ["subKey" => "subValue"]];
+ $array2 = ["key1" => "value1", "key2" => ["subKey" => "subValue", "extraKey" => "extraValue"]];
+ $this->assertFalse($this->arraysAreEqual($array1, $array2));
+
+ $array1 = ["key1" => "value1", "key2" => ["subKey2" => "subValue"]];
+ $array2 = ["key1" => "value1", "key2" => ["subKey" => "subValue"]];
+ $this->assertFalse($this->arraysAreEqual($array1, $array2));
+ }
+}
\ No newline at end of file
diff --git a/tests/Traits/LogTraitTest.php b/tests/Traits/LogTraitTest.php
index 9ffe60fd..977dbdc6 100644
--- a/tests/Traits/LogTraitTest.php
+++ b/tests/Traits/LogTraitTest.php
@@ -21,11 +21,10 @@ public function testLoginError()
$message = "hello";
$context = ['exception' => 'hello Exception'];
- $logManagerMock->expects($this->exactly(3))->method('error')
- ->with(
- $message,
- $context
- );
+ $logManagerMock->expects($this->exactly(3))->method('error')->with(
+ $message,
+ $context
+ );
$config = new DecisionApiConfig();
$config->setLogManager($logManagerMock);
@@ -60,11 +59,10 @@ public function testLogErrorSprintf()
$tag = __FUNCTION__;
$context = [FlagshipConstant::TAG => $tag];
- $logManagerMock->expects($this->exactly(2))->method('error')
- ->with(
- $message,
- $context
- );
+ $logManagerMock->expects($this->exactly(2))->method('error')->with(
+ $message,
+ $context
+ );
$config = new DecisionApiConfig();
$config->setLogManager($logManagerMock);
@@ -92,11 +90,10 @@ public function testLoginInfo()
$message = "hello";
$context = ['exception' => 'hello Exception'];
- $logManagerMock->expects($this->exactly(3))->method('info')
- ->with(
- $message,
- $context
- );
+ $logManagerMock->expects($this->exactly(3))->method('info')->with(
+ $message,
+ $context
+ );
$config = new DecisionApiConfig();
$config->setLogManager($logManagerMock);
@@ -130,11 +127,10 @@ public function testLogInfoSprintf()
$tag = __FUNCTION__;
$context = [FlagshipConstant::TAG => $tag];
- $logManagerMock->expects($this->exactly(2))->method('info')
- ->with(
- $message,
- $context
- );
+ $logManagerMock->expects($this->exactly(2))->method('info')->with(
+ $message,
+ $context
+ );
$config = new DecisionApiConfig();
$config->setLogManager($logManagerMock);
@@ -161,11 +157,10 @@ public function testWarning()
$message = "hello";
$context = ['exception' => 'hello Exception'];
- $logManagerMock->expects($this->exactly(3))->method('warning')
- ->with(
- $message,
- $context
- );
+ $logManagerMock->expects($this->exactly(3))->method('warning')->with(
+ $message,
+ $context
+ );
$config = new DecisionApiConfig();
$config->setLogManager($logManagerMock);
@@ -199,11 +194,10 @@ public function testWarningSprintf()
$tag = __FUNCTION__;
$context = [FlagshipConstant::TAG => $tag];
- $logManagerMock->expects($this->exactly(2))->method('warning')
- ->with(
- $message,
- $context
- );
+ $logManagerMock->expects($this->exactly(2))->method('warning')->with(
+ $message,
+ $context
+ );
$config = new DecisionApiConfig();
$config->setLogManager($logManagerMock);
@@ -230,13 +224,13 @@ public function testLogDebug()
$message = "hello";
$context = ['exception' => 'hello Exception'];
- $logManagerMock->expects($this->exactly(2))->method('debug')
- ->with(
- $message,
- $context
- );
+ $logManagerMock->expects($this->exactly(2))->method('debug')->with(
+ $message,
+ $context
+ );
$config = new DecisionApiConfig();
+ $config->setLogLevel(LogLevel::DEBUG);
$config->setLogManager($logManagerMock);
$logDebug = Utils::getMethod($logTraitMock, "logDebug");
@@ -259,18 +253,24 @@ public function testLogDebugSprintf()
$message = "hello %s %s";
$tag = __FUNCTION__;
- $args = ["there", ["key" => "value"]];
+ $args = [
+ "there",
+ ["key" => "value"],
+ ];
$context = [FlagshipConstant::TAG => $tag];
- $logArgs = [$args[0], json_encode($args[1])];
+ $logArgs = [
+ $args[0],
+ json_encode($args[1]),
+ ];
- $logManagerMock->expects($this->exactly(2))->method('debug')
- ->with(
- vsprintf($message, $logArgs),
- $context
- );
+ $logManagerMock->expects($this->exactly(2))->method('debug')->with(
+ vsprintf($message, $logArgs),
+ $context
+ );
$config = new DecisionApiConfig();
+ $config->setLogLevel(LogLevel::DEBUG);
$config->setLogManager($logManagerMock);
$logError = Utils::getMethod($logTraitMock, "logDebugSprintf");
@@ -295,19 +295,17 @@ public function testGetLogFormat()
$message = "message";
$url = "http://localhost";
- $requestBody = [
- "key" => "value"
- ];
+ $requestBody = ["key" => "value"];
$headers = ["key" => "value"];
$duration = 300;
$value = $getLogFormat->invokeArgs($logTraitMock, [$message, $url, $requestBody, $headers, $duration]);
$expectedValue = [
- FlagshipConstant::LOG_FORMAT_MESSAGE => $message,
- FlagshipConstant::LOG_FORMAT_URL => $url,
- FlagshipConstant::LOG_FORMAT_REQUEST_BODY => $requestBody,
- FlagshipConstant::LOG_FORMAT_REQUEST_HEADERS => $headers,
- FlagshipConstant::LOG_FORMAT_DURATION => $duration
- ];
+ FlagshipConstant::LOG_FORMAT_MESSAGE => $message,
+ FlagshipConstant::LOG_FORMAT_URL => $url,
+ FlagshipConstant::LOG_FORMAT_REQUEST_BODY => $requestBody,
+ FlagshipConstant::LOG_FORMAT_REQUEST_HEADERS => $headers,
+ FlagshipConstant::LOG_FORMAT_DURATION => $duration,
+ ];
$this->assertSame($expectedValue, $value);
}
diff --git a/tests/Traits/Round.php b/tests/Traits/Round.php
index 2aa90a5f..0f945a7c 100644
--- a/tests/Traits/Round.php
+++ b/tests/Traits/Round.php
@@ -1,6 +1,5 @@
setLogManager($logManagerStub);
$value = "linux";
- $check = $checkFlagshipContext->invokeArgs($validatorTraitMock, ['item',$value, $config]);
+ $check = $checkFlagshipContext->invokeArgs($validatorTraitMock, ['item', $value, $config]);
$this->assertNull($check);
$sdk = FlagshipConstant::FLAGSHIP_SDK;
- $logManagerStub->expects($this->once())->method('error')
- ->with(
- sprintf(
- FlagshipConstant::FLAGSHIP_PREDEFINED_CONTEXT_ERROR,
- "sdk_osName",
- "string"
- )
- );
+ $logManagerStub->expects($this->once())->method('error')->with(
+ sprintf(
+ FlagshipConstant::FLAGSHIP_PREDEFINED_CONTEXT_ERROR,
+ "sdk_osName",
+ "string"
+ )
+ );
$value = 1;
$check = $checkFlagshipContext->invokeArgs(
$validatorTraitMock,
- [FlagshipContext::OS_NAME,$value, $config]
+ [
+ FlagshipContext::OS_NAME,
+ $value,
+ $config,
+ ]
);
$this->assertFalse($check);
$value = "mac";
$check = $checkFlagshipContext->invokeArgs(
$validatorTraitMock,
- [FlagshipContext::OS_NAME,$value, $config]
+ [
+ FlagshipContext::OS_NAME,
+ $value,
+ $config,
+ ]
);
$this->assertTrue($check);
}
@@ -216,10 +223,9 @@ public function testIsNumeric()
$this->assertTrue($isNumeric->invokeArgs($validatorTraitMock, [1, $itemName, $config]));
$sdk = FlagshipConstant::FLAGSHIP_SDK;
- $logManagerStub->expects($this->once())->method('error')
- ->with(
- sprintf(FlagshipConstant::TYPE_ERROR, $itemName, 'numeric')
- );
+ $logManagerStub->expects($this->once())->method('error')->with(
+ sprintf(FlagshipConstant::TYPE_ERROR, $itemName, 'numeric')
+ );
$this->assertFalse($isNumeric->invokeArgs($validatorTraitMock, ["abc", $itemName, $config]));
}
diff --git a/tests/Utils/ConfigManagerTest.php b/tests/Utils/ConfigManagerTest.php
index 8fa532f3..d74874c3 100644
--- a/tests/Utils/ConfigManagerTest.php
+++ b/tests/Utils/ConfigManagerTest.php
@@ -11,8 +11,8 @@ class ConfigManagerTest extends TestCase
{
public function testInstance()
{
- $config = new DecisionApiConfig();
- $decisionManager = new ApiManager(new HttpClient(), $config);
+ $config = new DecisionApiConfig();
+ $decisionManager = new ApiManager(new HttpClient(), $config);
$trackingManager = new TrackingManager($config, new HttpClient());
$configManager = new ConfigManager($config, $decisionManager, $trackingManager);
diff --git a/tests/Utils/FlagshipLogManagerTest.php b/tests/Utils/FlagshipLogManagerTest.php
index a07ed9f6..82c685b3 100644
--- a/tests/Utils/FlagshipLogManagerTest.php
+++ b/tests/Utils/FlagshipLogManagerTest.php
@@ -15,9 +15,13 @@ public function contextDataProvider(): array
{
return
[
- 'flagshipSdk' => FlagshipConstant::FLAGSHIP_SDK,
- 'context' => ['process' => 'testError', 'context2' => 'value 2'],
- 'contextString' => '[process => testError, context2 => value 2]' ];
+ 'flagshipSdk' => FlagshipConstant::FLAGSHIP_SDK,
+ 'context' => [
+ 'process' => 'testError',
+ 'context2' => 'value 2',
+ ],
+ 'contextString' => '[process => testError, context2 => value 2]',
+ ];
}
public function getMessageError($formatDate, $level, $message, $tag): string
@@ -30,13 +34,9 @@ public function testError()
{
$data = $this->contextDataProvider();
$message = 'Test Error';
- $logManager = $this->getMockBuilder(FlagshipLogManager8::class)
- ->onlyMethods(["getDateTime"])
- ->getMock();
+ $logManager = $this->getMockBuilder(FlagshipLogManager8::class)->onlyMethods(["getDateTime"])->getMock();
$formatDate = "2023-02-15 11:08:10.455";
- $logManager->expects($this->once())
- ->method("getDateTime")
- ->willReturn($formatDate);
+ $logManager->expects($this->once())->method("getDateTime")->willReturn($formatDate);
$logManager->error($message, $data['context']);
$level = LogLevel::ERROR;
@@ -49,13 +49,9 @@ public function testInfo()
{
$data = $this->contextDataProvider();
$message = 'Test info';
- $logManager = $this->getMockBuilder(FlagshipLogManager8::class)
- ->onlyMethods(["getDateTime"])
- ->getMock();
+ $logManager = $this->getMockBuilder(FlagshipLogManager8::class)->onlyMethods(["getDateTime"])->getMock();
$formatDate = "2023-02-15 11:08:10.455";
- $logManager->expects($this->once())
- ->method("getDateTime")
- ->willReturn($formatDate);
+ $logManager->expects($this->once())->method("getDateTime")->willReturn($formatDate);
$logManager->info($message, $data['context']);
$level = LogLevel::INFO;
$messageError = $this->getMessageError($formatDate, $level, $message, $data['contextString']);
@@ -66,13 +62,9 @@ public function testAlert()
{
$data = $this->contextDataProvider();
$message = 'Test Error';
- $logManager = $this->getMockBuilder(FlagshipLogManager8::class)
- ->onlyMethods(["getDateTime"])
- ->getMock();
+ $logManager = $this->getMockBuilder(FlagshipLogManager8::class)->onlyMethods(["getDateTime"])->getMock();
$formatDate = "2023-02-15 11:08:10.455";
- $logManager->expects($this->once())
- ->method("getDateTime")
- ->willReturn($formatDate);
+ $logManager->expects($this->once())->method("getDateTime")->willReturn($formatDate);
$logManager->alert($message, $data['context']);
$level = LogLevel::ALERT;
$messageError = $this->getMessageError($formatDate, $level, $message, $data['contextString']);
@@ -83,13 +75,9 @@ public function testEmergency()
{
$data = $this->contextDataProvider();
$message = 'Test Error';
- $logManager = $this->getMockBuilder(FlagshipLogManager8::class)
- ->onlyMethods(["getDateTime"])
- ->getMock();
+ $logManager = $this->getMockBuilder(FlagshipLogManager8::class)->onlyMethods(["getDateTime"])->getMock();
$formatDate = "2023-02-15 11:08:10.455";
- $logManager->expects($this->once())
- ->method("getDateTime")
- ->willReturn($formatDate);
+ $logManager->expects($this->once())->method("getDateTime")->willReturn($formatDate);
$logManager->emergency($message, $data['context']);
$level = LogLevel::EMERGENCY;
$messageError = $this->getMessageError($formatDate, $level, $message, $data['contextString']);
@@ -101,13 +89,9 @@ public function testLog()
{
$data = $this->contextDataProvider();
$message = 'Test Error';
- $logManager = $this->getMockBuilder(FlagshipLogManager8::class)
- ->onlyMethods(["getDateTime"])
- ->getMock();
+ $logManager = $this->getMockBuilder(FlagshipLogManager8::class)->onlyMethods(["getDateTime"])->getMock();
$formatDate = "2023-02-15 11:08:10.455";
- $logManager->expects($this->once())
- ->method("getDateTime")
- ->willReturn($formatDate);
+ $logManager->expects($this->once())->method("getDateTime")->willReturn($formatDate);
$level = LogLevel::EMERGENCY;
$logManager->log($level, $message, $data['context']);
$messageError = $this->getMessageError($formatDate, $level, $message, $data['contextString']);
@@ -119,13 +103,9 @@ public function testWarning()
{
$data = $this->contextDataProvider();
$message = 'Test Error';
- $logManager = $this->getMockBuilder(FlagshipLogManager8::class)
- ->onlyMethods(["getDateTime"])
- ->getMock();
+ $logManager = $this->getMockBuilder(FlagshipLogManager8::class)->onlyMethods(["getDateTime"])->getMock();
$formatDate = "2023-02-15 11:08:10.455";
- $logManager->expects($this->once())
- ->method("getDateTime")
- ->willReturn($formatDate);
+ $logManager->expects($this->once())->method("getDateTime")->willReturn($formatDate);
$logManager->warning($message, $data['context']);
$level = LogLevel::WARNING;
$messageError = $this->getMessageError($formatDate, $level, $message, $data['contextString']);
@@ -136,13 +116,9 @@ public function testCritical()
{
$data = $this->contextDataProvider();
$message = 'Test Error';
- $logManager = $this->getMockBuilder(FlagshipLogManager8::class)
- ->onlyMethods(["getDateTime"])
- ->getMock();
+ $logManager = $this->getMockBuilder(FlagshipLogManager8::class)->onlyMethods(["getDateTime"])->getMock();
$formatDate = "2023-02-15 11:08:10.455";
- $logManager->expects($this->once())
- ->method("getDateTime")
- ->willReturn($formatDate);
+ $logManager->expects($this->once())->method("getDateTime")->willReturn($formatDate);
$logManager->critical($message, $data['context']);
$level = LogLevel::CRITICAL;
$messageError = $this->getMessageError($formatDate, $level, $message, $data['contextString']);
@@ -153,13 +129,9 @@ public function testNotice()
{
$data = $this->contextDataProvider();
$message = 'Test Notice';
- $logManager = $this->getMockBuilder(FlagshipLogManager8::class)
- ->onlyMethods(["getDateTime"])
- ->getMock();
+ $logManager = $this->getMockBuilder(FlagshipLogManager8::class)->onlyMethods(["getDateTime"])->getMock();
$formatDate = "2023-02-15 11:08:10.455";
- $logManager->expects($this->once())
- ->method("getDateTime")
- ->willReturn($formatDate);
+ $logManager->expects($this->once())->method("getDateTime")->willReturn($formatDate);
$logManager->notice($message, $data['context']);
$level = LogLevel::NOTICE;
$messageError = $this->getMessageError($formatDate, $level, $message, $data['contextString']);
@@ -171,13 +143,9 @@ public function testDebug()
{
$data = $this->contextDataProvider();
$message = 'Test Debug';
- $logManager = $this->getMockBuilder(FlagshipLogManager8::class)
- ->onlyMethods(["getDateTime"])
- ->getMock();
+ $logManager = $this->getMockBuilder(FlagshipLogManager8::class)->onlyMethods(["getDateTime"])->getMock();
$formatDate = "2023-02-15 11:08:10.455";
- $logManager->expects($this->once())
- ->method("getDateTime")
- ->willReturn($formatDate);
+ $logManager->expects($this->once())->method("getDateTime")->willReturn($formatDate);
$logManager->debug($message, $data['context']);
$level = LogLevel::DEBUG;
$messageError = $this->getMessageError($formatDate, $level, $message, $data['contextString']);
diff --git a/tests/Utils/HttpClientTest.php b/tests/Utils/HttpClientTest.php
index 00d4290b..98e51805 100644
--- a/tests/Utils/HttpClientTest.php
+++ b/tests/Utils/HttpClientTest.php
@@ -49,11 +49,12 @@ public function testBuildUrl()
$versionSDkKey . '=' . $versionSDkValue;
$urlBuild = $buildMethod->invokeArgs(
$client,
- [$urlOriginal,
- [
- $visitoKey => $visitorid,
- $versionSDkKey => $versionSDkValue
- ]
+ [
+ $urlOriginal,
+ [
+ $visitoKey => $visitorid,
+ $versionSDkKey => $versionSDkValue,
+ ],
]
);
$this->assertEquals($urlExpected, $urlBuild);
diff --git a/tests/Visitor/CampaignsData.php b/tests/Visitor/CampaignsData.php
index bad1176c..58740c99 100644
--- a/tests/Visitor/CampaignsData.php
+++ b/tests/Visitor/CampaignsData.php
@@ -9,140 +9,80 @@ trait CampaignsData
public function campaignsModifications()
{
return [
- (new FlagDTO())
- ->setKey('Number')
- ->setValue(5)
- ->setIsReference(false)
- ->setVariationGroupId('c8pimlr7n0ig3a0pt2jg')
- ->setCampaignId('c8pimlr7n0ig3a0pt2ig')
- ->setVariationId('c8pimlr7n0ig3a0pt2kg')
- ->setSlug("campaign_1")
- ->setCampaignType("ab"),
- (new FlagDTO())
- ->setKey('isBool')
- ->setValue(false)
- ->setIsReference(false)
- ->setVariationGroupId('c8pimlr7n0ig3a0pt2jg')
- ->setCampaignId('c8pimlr7n0ig3a0pt2ig')
- ->setVariationId('c8pimlr7n0ig3a0pt2kg')
- ->setSlug("campaign_1")
- ->setCampaignType("ab"),
- (new FlagDTO())
- ->setKey('background')
- ->setValue('EE3300')
- ->setIsReference(false)
- ->setVariationGroupId('c8pimlr7n0ig3a0pt2jg')
- ->setCampaignId('c8pimlr7n0ig3a0pt2ig')
- ->setVariationId('c8pimlr7n0ig3a0pt2kg')
- ->setSlug("campaign_1")
- ->setCampaignType("ab"),
- (new FlagDTO())
- ->setKey('borderColor')
- ->setValue('blue')
- ->setIsReference(false)
- ->setVariationGroupId('c8pimlr7n0ig3a0pt2jg')
- ->setCampaignId('c8pimlr7n0ig3a0pt2ig')
- ->setVariationId('c8pimlr7n0ig3a0pt2kg')
- ->setSlug("campaign_1")
- ->setCampaignType("ab"),
- (new FlagDTO())
- ->setKey('Null')
- ->setValue(null)
- ->setIsReference(false)
- ->setVariationGroupId('c8pimlr7n0ig3a0pt2jg')
- ->setCampaignId('c8pimlr7n0ig3a0pt2ig')
- ->setVariationId('c8pimlr7n0ig3a0pt2kg')
- ->setSlug("campaign_1")
- ->setCampaignType("ab"),
- (new FlagDTO())
- ->setKey('Empty')
- ->setValue("")
- ->setIsReference(false)
- ->setVariationGroupId('c8pimlr7n0ig3a0pt2jg')
- ->setCampaignId('c8pimlr7n0ig3a0pt2ig')
- ->setVariationId('c8pimlr7n0ig3a0pt2kg')
- ->setSlug("campaign_1")
- ->setCampaignType("ab"),
- (new FlagDTO())
- ->setKey('php')
- ->setValue("value2")
- ->setIsReference(false)
- ->setVariationGroupId('c7q1lmuru9u05agq3apg')
- ->setCampaignId('c7q1lmuru9u05agq3aog')
- ->setVariationId('c7q1m8p172r04gs741og')
- ->setSlug("campaign_2")
- ->setCampaignType("ab"),
- ];
+ (new FlagDTO())->setKey('Number')->setValue(5)->setIsReference(false)->setVariationGroupId('c8pimlr7n0ig3a0pt2jg')->setCampaignId('c8pimlr7n0ig3a0pt2ig')->setVariationId('c8pimlr7n0ig3a0pt2kg')->setSlug("campaign_1")->setCampaignType("ab"),
+ (new FlagDTO())->setKey('isBool')->setValue(false)->setIsReference(false)->setVariationGroupId('c8pimlr7n0ig3a0pt2jg')->setCampaignId('c8pimlr7n0ig3a0pt2ig')->setVariationId('c8pimlr7n0ig3a0pt2kg')->setSlug("campaign_1")->setCampaignType("ab"),
+ (new FlagDTO())->setKey('background')->setValue('EE3300')->setIsReference(false)->setVariationGroupId('c8pimlr7n0ig3a0pt2jg')->setCampaignId('c8pimlr7n0ig3a0pt2ig')->setVariationId('c8pimlr7n0ig3a0pt2kg')->setSlug("campaign_1")->setCampaignType("ab"),
+ (new FlagDTO())->setKey('borderColor')->setValue('blue')->setIsReference(false)->setVariationGroupId('c8pimlr7n0ig3a0pt2jg')->setCampaignId('c8pimlr7n0ig3a0pt2ig')->setVariationId('c8pimlr7n0ig3a0pt2kg')->setSlug("campaign_1")->setCampaignType("ab"),
+ (new FlagDTO())->setKey('Null')->setValue(null)->setIsReference(false)->setVariationGroupId('c8pimlr7n0ig3a0pt2jg')->setCampaignId('c8pimlr7n0ig3a0pt2ig')->setVariationId('c8pimlr7n0ig3a0pt2kg')->setSlug("campaign_1")->setCampaignType("ab"),
+ (new FlagDTO())->setKey('Empty')->setValue("")->setIsReference(false)->setVariationGroupId('c8pimlr7n0ig3a0pt2jg')->setCampaignId('c8pimlr7n0ig3a0pt2ig')->setVariationId('c8pimlr7n0ig3a0pt2kg')->setSlug("campaign_1")->setCampaignType("ab"),
+ (new FlagDTO())->setKey('php')->setValue("value2")->setIsReference(false)->setVariationGroupId('c7q1lmuru9u05agq3apg')->setCampaignId('c7q1lmuru9u05agq3aog')->setVariationId('c7q1m8p172r04gs741og')->setSlug("campaign_2")->setCampaignType("ab"),
+ ];
}
public function campaigns()
{
return [
- "visitorId" => "",
- "campaigns" => [
- [
- "id" => "c8pimlr7n0ig3a0pt2ig",
- "slug" => "campaign_1",
- "type" => "ab",
- "variationGroupId" => "c8pimlr7n0ig3a0pt2jg",
- "variation" => [
- "id" => "c8pimlr7n0ig3a0pt2kg",
- "modifications" => [
- "type" => "FLAG",
- "value" => [
- "Number" => 5,
- "isBool" => false,
- "background" => "EE3300",
- "borderColor" => "blue",
- "Null" => null,
- "Empty" => ""
- ]
- ],
- "reference" => false
- ]
- ],
- [
- "id" => "c7q1lmuru9u05agq3aog",
- "slug" => "campaign_2",
- "type" => "ab",
- "variationGroupId" => "c7q1lmuru9u05agq3apg",
- "variation" => [
- "id" => "c7q1m8p172r04gs741og",
- "modifications" => [
- "type" => "FLAG",
- "value" => [
- "php" => "value2"
- ]
- ],
- "reference" => false
- ]
- ]
- ]
- ];
+ "visitorId" => "",
+ "campaigns" => [
+ [
+ "id" => "c8pimlr7n0ig3a0pt2ig",
+ "slug" => "campaign_1",
+ "type" => "ab",
+ "variationGroupId" => "c8pimlr7n0ig3a0pt2jg",
+ "variation" => [
+ "id" => "c8pimlr7n0ig3a0pt2kg",
+ "modifications" => [
+ "type" => "FLAG",
+ "value" => [
+ "Number" => 5,
+ "isBool" => false,
+ "background" => "EE3300",
+ "borderColor" => "blue",
+ "Null" => null,
+ "Empty" => "",
+ ],
+ ],
+ "reference" => false,
+ ],
+ ],
+ [
+ "id" => "c7q1lmuru9u05agq3aog",
+ "slug" => "campaign_2",
+ "type" => "ab",
+ "variationGroupId" => "c7q1lmuru9u05agq3apg",
+ "variation" => [
+ "id" => "c7q1m8p172r04gs741og",
+ "modifications" => [
+ "type" => "FLAG",
+ "value" => ["php" => "value2"],
+ ],
+ "reference" => false,
+ ],
+ ],
+ ],
+ ];
}
public function campaigns2()
{
return [
- "visitorId" => "",
- "campaigns" => [
- [
- "id" => "c69sir3q6mc0ggqin8ag",
- "slug" => "campaign_3",
- "type" => "toggle",
- "variationGroupId" => "c69sir3q6mc0ggqin8bg",
- "variation" => [
- "id" => "c69sir3q6mc0ggqin8c0",
- "modifications" => [
- "type" => "FLAG",
- "value" => [
- "myAwesomeFeature" => 10
- ]
- ],
- "reference" => false
- ]
- ]
- ]
- ];
+ "visitorId" => "",
+ "campaigns" => [
+ [
+ "id" => "c69sir3q6mc0ggqin8ag",
+ "slug" => "campaign_3",
+ "type" => "toggle",
+ "variationGroupId" => "c69sir3q6mc0ggqin8bg",
+ "variation" => [
+ "id" => "c69sir3q6mc0ggqin8c0",
+ "modifications" => [
+ "type" => "FLAG",
+ "value" => ["myAwesomeFeature" => 10],
+ ],
+ "reference" => false,
+ ],
+ ],
+ ],
+ ];
}
}
diff --git a/tests/Visitor/DefaultStrategyTest.php b/tests/Visitor/DefaultStrategyTest.php
index adeb65b6..5af535e7 100644
--- a/tests/Visitor/DefaultStrategyTest.php
+++ b/tests/Visitor/DefaultStrategyTest.php
@@ -8,34 +8,40 @@
use DateTime;
use Exception;
-use Flagship\Config\BucketingConfig;
-use Flagship\Config\DecisionApiConfig;
-use Flagship\Decision\ApiManager;
-use Flagship\Enum\EventCategory;
-use Flagship\Enum\FlagshipConstant;
-use Flagship\Enum\FlagshipContext;
-use Flagship\Enum\FlagshipField;
-use Flagship\Enum\FSFetchReason;
-use Flagship\Enum\FSFetchStatus;
-use Flagship\Enum\HitType;
-use Flagship\Enum\LogLevel;
-use Flagship\Enum\TroubleshootingLabel;
-use Flagship\Flag\FSFlagMetadata;
-use Flagship\Hit\Activate;
-use Flagship\Hit\UsageHit;
-use Flagship\Hit\Event;
use Flagship\Hit\Item;
use Flagship\Hit\Page;
+use Flagship\Hit\Event;
use Flagship\Hit\Screen;
-use Flagship\Hit\Transaction;
+use Flagship\Enum\HitType;
+use Flagship\Hit\Activate;
+use Flagship\Hit\UsageHit;
+use Flagship\Enum\LogLevel;
use Flagship\Model\FlagDTO;
-use Flagship\Model\HttpResponse;
-use Flagship\Utils\ConfigManager;
+use Psr\Log\LoggerInterface;
+use Flagship\Hit\Transaction;
use Flagship\Utils\Container;
use Flagship\Utils\HttpClient;
use Flagship\Utils\MurmurHash;
use PHPUnit\Framework\TestCase;
-use Psr\Log\LoggerInterface;
+use Flagship\Enum\EventCategory;
+use Flagship\Enum\FlagshipField;
+use Flagship\Enum\FSFetchReason;
+use Flagship\Enum\FSFetchStatus;
+use Flagship\Model\HttpResponse;
+use Flagship\Decision\ApiManager;
+use Flagship\Flag\FSFlagMetadata;
+use Flagship\Utils\ConfigManager;
+use Flagship\Enum\FlagshipContext;
+use Flagship\Enum\FlagshipConstant;
+use Flagship\Config\BucketingConfig;
+use Flagship\Enum\VisitorCacheStatus;
+use Flagship\Config\DecisionApiConfig;
+use Flagship\Utils\ContainerInterface;
+use Flagship\Enum\TroubleshootingLabel;
+use Flagship\Utils\HttpClientInterface;
+use Flagship\Api\TrackingManagerAbstract;
+use PHPUnit\Framework\MockObject\MockObject;
+use Flagship\Cache\IVisitorCacheImplementation;
class DefaultStrategyTest extends TestCase
@@ -48,55 +54,21 @@ class DefaultStrategyTest extends TestCase
public function modifications(): array
{
return [
- (new FlagDTO())
- ->setKey('background')
- ->setValue('EE3300')
- ->setIsReference(false)
- ->setVariationGroupId('c1e3t1nvfu1ncqfcdcp0')
- ->setCampaignId('c1e3t1nvfu1ncqfcdco0')
- ->setVariationId('c1e3t1nvfu1ncqfcdcq0'),
- (new FlagDTO())
- ->setKey('borderColor')
- ->setValue('blue')
- ->setIsReference(false)
- ->setVariationGroupId('c1e3t1sddfu1ncqfcdcp0')
- ->setCampaignId('c1slf3t1nvfu1ncqfcdcfd')
- ->setVariationId('cleo3t1nvfu1ncqfcdcsdf'),
- (new FlagDTO())
- ->setKey('Null')
- ->setValue(null)
- ->setIsReference(false)
- ->setVariationGroupId('c1e3t1sddfu1ncqfcdcp0')
- ->setCampaignId('c1slf3t1nvfu1ncqfcdcfd')
- ->setVariationId('cleo3t1nvfu1ncqfcdcsdf'),
- (new FlagDTO())
- ->setKey('Empty')
- ->setValue("")
- ->setIsReference(false)
- ->setVariationGroupId('c1e3t1sddfu1ncqfcdcp0')
- ->setCampaignId('c1slf3t1nvfu1ncqfcdcfd')
- ->setVariationId('cleo3t1nvfu1ncqfcdcsdf'),
- (new FlagDTO())
- ->setKey('isBool')
- ->setValue(false)
- ->setIsReference(false)
- ->setVariationGroupId('c1e3t1sddfu1ncqfcdcp0')
- ->setCampaignId('c1slf3t1nvfu1ncqfcdcfd')
- ->setVariationId('cleo3t1nvfu1ncqfcdcsdf'),
- (new FlagDTO())
- ->setKey('Number')
- ->setValue(5)
- ->setIsReference(false)
- ->setVariationGroupId('c1e3t1sddfu1ncqfcdcp0')
- ->setCampaignId('c1slf3t1nvfu1ncqfcdcfd')
- ->setVariationId('cleo3t1nvfu1ncqfcdcsdf'),
- ];
+ (new FlagDTO())->setKey('background')->setValue('EE3300')->setIsReference(false)->setVariationGroupId('c1e3t1nvfu1ncqfcdcp0')->setCampaignId('c1e3t1nvfu1ncqfcdco0')->setVariationId('c1e3t1nvfu1ncqfcdcq0'),
+ (new FlagDTO())->setKey('borderColor')->setValue('blue')->setIsReference(false)->setVariationGroupId('c1e3t1sddfu1ncqfcdcp0')->setCampaignId('c1slf3t1nvfu1ncqfcdcfd')->setVariationId('cleo3t1nvfu1ncqfcdcsdf'),
+ (new FlagDTO())->setKey('Null')->setValue(null)->setIsReference(false)->setVariationGroupId('c1e3t1sddfu1ncqfcdcp0')->setCampaignId('c1slf3t1nvfu1ncqfcdcfd')->setVariationId('cleo3t1nvfu1ncqfcdcsdf'),
+ (new FlagDTO())->setKey('Empty')->setValue("")->setIsReference(false)->setVariationGroupId('c1e3t1sddfu1ncqfcdcp0')->setCampaignId('c1slf3t1nvfu1ncqfcdcfd')->setVariationId('cleo3t1nvfu1ncqfcdcsdf'),
+ (new FlagDTO())->setKey('isBool')->setValue(false)->setIsReference(false)->setVariationGroupId('c1e3t1sddfu1ncqfcdcp0')->setCampaignId('c1slf3t1nvfu1ncqfcdcfd')->setVariationId('cleo3t1nvfu1ncqfcdcsdf'),
+ (new FlagDTO())->setKey('Number')->setValue(5)->setIsReference(false)->setVariationGroupId('c1e3t1sddfu1ncqfcdcp0')->setCampaignId('c1slf3t1nvfu1ncqfcdcfd')->setVariationId('cleo3t1nvfu1ncqfcdcsdf'),
+ ];
}
public function testUpdateContext()
{
- //Mock logManger
+ /**
+ * @var LoggerInterface|MockObject $logManagerStub
+ */
$logManagerStub = $this->getMockForAbstractClass(
'Psr\Log\LoggerInterface',
[],
@@ -112,13 +84,20 @@ public function testUpdateContext()
$visitorId = "visitor_id";
$visitorContext = [
- 'name' => 'visitor_name',
- 'age' => 25
- ];
+ 'name' => 'visitor_name',
+ 'age' => 25,
+ ];
+ /**
+ * @var ApiManager|MockObject $decisionManager
+ */
$decisionManager = $this->getMockBuilder(ApiManager::class)
->disableOriginalConstructor()
->getMock();
+
+ /**
+ * @var TrackingManagerAbstract|MockObject $trackingManager
+ */
$trackingManager = $this->getMockForAbstractClass(
'Flagship\Api\TrackingManagerAbstract',
['sendHit'],
@@ -204,16 +183,25 @@ public function testUpdateContext()
public function testUpdateContextCollection()
{
- $configData = ['envId' => 'env_value', 'apiKey' => 'key_value'];
+ $configData = [
+ 'envId' => 'env_value',
+ 'apiKey' => 'key_value',
+ ];
$config = new DecisionApiConfig($configData['envId'], $configData['apiKey']);
$visitorId = "visitor_id";
$visitorContext = [
'name' => 'visitor_name',
'age' => 25
];
+ /**
+ * @var ApiManager|MockObject $decisionManager
+ */
$decisionManager = $this->getMockBuilder(ApiManager::class)
->disableOriginalConstructor()
->getMock();
+ /**
+ * @var TrackingManagerAbstract|MockObject $trackingManager
+ */
$trackingManager = $this->getMockForAbstractClass(
'Flagship\Api\TrackingManagerAbstract',
['sendHit'],
@@ -227,17 +215,15 @@ public function testUpdateContextCollection()
$defaultStrategy = new DefaultStrategy($visitor);
$newVisitorContext = [
- 'vip' => true,
- 'gender' => 'F'
- ];
+ 'vip' => true,
+ 'gender' => 'F',
+ ];
$defaultStrategy->updateContextCollection($newVisitorContext);
$this->assertCount(8, $visitor->getContext());
//Test without Key
- $newVisitorContext = [
- 'vip'
- ];
+ $newVisitorContext = ['vip'];
$defaultStrategy->updateContextCollection($newVisitorContext);
$this->assertCount(8, $visitor->getContext());
@@ -247,13 +233,19 @@ public function testClearContext()
{
$visitorId = "visitor_id";
$visitorContext = [
- 'name' => 'visitor_name',
- 'age' => 25
- ];
+ 'name' => 'visitor_name',
+ 'age' => 25,
+ ];
$config = new DecisionApiConfig('envId', 'apiKey');
+ /**
+ * @var ApiManager|MockObject $decisionManager
+ */
$decisionManager = $this->getMockBuilder(ApiManager::class)
->disableOriginalConstructor()
->getMock();
+ /**
+ * @var TrackingManagerAbstract|MockObject $trackingManager
+ */
$trackingManager = $this->getMockForAbstractClass(
'Flagship\Api\TrackingManagerAbstract',
['sendHit'],
@@ -271,11 +263,22 @@ public function testClearContext()
$defaultStrategy->clearContext();
$this->assertCount(0, $visitor->getContext());
+ $this->assertSame(FSFetchReason::UPDATE_CONTEXT, $visitor->getFetchStatus()->getReason());
+ $this->assertSame(FSFetchStatus::FETCH_REQUIRED, $visitor->getFetchStatus()->getStatus());
+ $this->assertTrue($visitor->getHasContextBeenUpdated());
+
+ //Test clearContext with empty context
+ $visitor->setHasContextBeenUpdated(false);
+ $defaultStrategy->clearContext();
+ $this->assertCount(0, $visitor->getContext());
+ $this->assertFalse($visitor->getHasContextBeenUpdated());
}
public function testAuthenticate()
{
- //Mock logManger
+ /**
+ * @var LoggerInterface|MockObject $logManagerStub
+ */
$logManagerStub = $this->getMockForAbstractClass(
LoggerInterface::class,
[],
@@ -283,9 +286,95 @@ public function testAuthenticate()
true,
true,
true,
- ['error']
+ ['error', 'warning']
+ );
+
+ /**
+ * @var TrackingManagerAbstract|MockObject $trackerManager
+ */
+ $trackerManager = $this->getMockForAbstractClass(
+ 'Flagship\Api\TrackingManagerAbstract',
+ ['sendConsentHit'],
+ '',
+ false
);
+ $visitorId = "visitor_id";
+ $visitorContext = [
+ 'name' => 'visitor_name',
+ 'age' => 25,
+ ];
+
+ $config = new DecisionApiConfig('envId', 'apiKey');
+ $config->setLogManager($logManagerStub);
+
+ /**
+ * @var ApiManager|MockObject $decisionManager
+ */
+ $decisionManager = $this->getMockBuilder(ApiManager::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $configManager = new ConfigManager($config, $decisionManager, $trackerManager);
+
+ $visitor = new VisitorDelegate(new Container(), $configManager, $visitorId, false, $visitorContext, true);
+
+ $authenticateName = "authenticate";
+ $logManagerStub->expects($this->exactly(2))->method('error')->with(
+ $this->logicalOr(
+ sprintf(
+ FlagshipConstant::VISITOR_ID_ERROR,
+ $authenticateName
+ ),
+ sprintf(
+ FlagshipConstant::FLAGSHIP_VISITOR_ALREADY_AUTHENTICATE,
+ $authenticateName
+ )
+ ),
+ [FlagshipConstant::TAG => $authenticateName]
+ );
+
+ //Test authenticate with null visitorId
+
+ $defaultStrategy = new DefaultStrategy($visitor);
+
+ //Test authenticate with "" visitorId
+ $defaultStrategy->authenticate("");
+ $this->assertNull($visitor->getAnonymousId());
+ $this->assertSame($visitorId, $visitor->getVisitorId());
+
+ $newVisitorId = "new_visitor_id";
+ $defaultStrategy->authenticate($newVisitorId);
+ $this->assertSame($visitorId, $visitor->getAnonymousId());
+ $this->assertSame($newVisitorId, $visitor->getVisitorId());
+ $this->assertSame(FSFetchReason::AUTHENTICATE, $visitor->getFetchStatus()->getReason());
+ $this->assertSame(FSFetchStatus::FETCH_REQUIRED, $visitor->getFetchStatus()->getStatus());
+
+ //
+ $newVisitorId2 = "new_visitor_id_2";
+ $defaultStrategy->authenticate($newVisitorId2);
+ $this->assertSame($visitorId, $visitor->getAnonymousId());
+ $this->assertSame($newVisitorId, $visitor->getVisitorId());
+ }
+
+ public function testAuthenticateBucketingMode()
+ {
+ /**
+ * @var LoggerInterface|MockObject $logManagerStub
+ */
+ $logManagerStub = $this->getMockForAbstractClass(
+ LoggerInterface::class,
+ [],
+ "",
+ true,
+ true,
+ true,
+ ['error', 'warning']
+ );
+
+ /**
+ * @var TrackingManagerAbstract|MockObject $trackerManager
+ */
$trackerManager = $this->getMockForAbstractClass(
'Flagship\Api\TrackingManagerAbstract',
['sendConsentHit'],
@@ -299,9 +388,22 @@ public function testAuthenticate()
'age' => 25
];
- $config = new DecisionApiConfig('envId', 'apiKey');
+ /**
+ * @var IVisitorCacheImplementation|MockObject $visitorCache
+ */
+ $visitorCache = $this->getMockForAbstractClass(
+ IVisitorCacheImplementation::class,
+ [],
+ '',
+ false
+ );
+
+ $config = new BucketingConfig('http:127.0.0.1:3000', 'envId', 'apiKey');
$config->setLogManager($logManagerStub);
+ /**
+ * @var ApiManager|MockObject $decisionManager
+ */
$decisionManager = $this->getMockBuilder(ApiManager::class)
->disableOriginalConstructor()
->getMock();
@@ -311,22 +413,15 @@ public function testAuthenticate()
$visitor = new VisitorDelegate(new Container(), $configManager, $visitorId, false, $visitorContext, true);
$authenticateName = "authenticate";
- $logManagerStub->expects($this->exactly(3))
- ->method('error')
+
+ $logManagerStub->expects($this->exactly(1))
+ ->method('warning')
->with(
$this->logicalOr(
sprintf(
- FlagshipConstant::VISITOR_ID_ERROR,
+ FlagshipConstant::XPC_BUCKETING_WARNING,
$authenticateName
),
- sprintf(
- FlagshipConstant::FLAGSHIP_VISITOR_ALREADY_AUTHENTICATE,
- $authenticateName
- ),
- sprintf(
- FlagshipConstant::METHOD_DEACTIVATED_BUCKETING_ERROR,
- $authenticateName
- )
),
[FlagshipConstant::TAG => $authenticateName]
);
@@ -335,10 +430,9 @@ public function testAuthenticate()
$defaultStrategy = new DefaultStrategy($visitor);
- //Test authenticate with "" visitorId
- $defaultStrategy->authenticate("");
- $this->assertNull($visitor->getAnonymousId());
- $this->assertSame($visitorId, $visitor->getVisitorId());
+ $defaultStrategy->authenticate("new_visitor_id_xpc");
+
+ $config->setVisitorCacheImplementation($visitorCache);
$newVisitorId = "new_visitor_id";
$defaultStrategy->authenticate($newVisitorId);
@@ -352,18 +446,13 @@ public function testAuthenticate()
$defaultStrategy->authenticate($newVisitorId2);
$this->assertSame($visitorId, $visitor->getAnonymousId());
$this->assertSame($newVisitorId, $visitor->getVisitorId());
-
- //Test with bucketing mode
- $newVisitorId2 = "new_visitor_id";
- $visitor->setConfig((new BucketingConfig("http:127.0.0.1:3000"))->setLogManager($logManagerStub));
- $defaultStrategy->authenticate($newVisitorId2);
- $this->assertSame($visitorId, $visitor->getAnonymousId());
- $this->assertSame($newVisitorId, $visitor->getVisitorId());
}
public function testUnauthenticate()
{
- //Mock logManger
+ /**
+ * @var LoggerInterface|MockObject $logManagerStub
+ */
$logManagerStub = $this->getMockForAbstractClass(
'Psr\Log\LoggerInterface',
[],
@@ -374,6 +463,9 @@ public function testUnauthenticate()
['error']
);
+ /**
+ * @var TrackingManagerAbstract|MockObject $trackerManager
+ */
$trackerManager = $this->getMockForAbstractClass(
'Flagship\Api\TrackingManagerAbstract',
['sendConsentHit'],
@@ -388,6 +480,9 @@ public function testUnauthenticate()
$config = new DecisionApiConfig('envId', 'apiKey');
$config->setLogManager($logManagerStub);
+ /**
+ * @var ApiManager|MockObject $decisionManager
+ */
$decisionManager = $this->getMockBuilder(ApiManager::class)
->disableOriginalConstructor()
->getMock();
@@ -396,30 +491,107 @@ public function testUnauthenticate()
$visitor = new VisitorDelegate(new Container(), $configManager, $visitorId, false, [], true);
- $visitor->setConfig((new BucketingConfig("http://127.0.0.1:3000"))->setLogManager($logManagerStub));
+ $config->setLogManager($logManagerStub);
+ $visitor->setConfig($config);
+ // $visitor->setConfig((new BucketingConfig("http://127.0.0.1:3000"))->setLogManager($logManagerStub));
$unauthenticateName = "unauthenticate";
- $logManagerStub->expects($this->exactly(2))
+ $logManagerStub->expects($this->exactly(1))
->method('error')
->with(
$this->logicalOr(
- sprintf(
- FlagshipConstant::METHOD_DEACTIVATED_BUCKETING_ERROR,
- $unauthenticateName
- ),
FlagshipConstant::FLAGSHIP_VISITOR_NOT_AUTHENTIFICATE
),
- [FlagshipConstant::TAG => $unauthenticateName]
- );
+ [FlagshipConstant::TAG => $unauthenticateName]
+ );
$defaultStrategy = new DefaultStrategy($visitor);
$defaultStrategy->unauthenticate();
- //Test Visitor not authenticate yet
+ //Test valid data
+ $newVisitorId = "newVisitorId";
+ $defaultStrategy->authenticate($newVisitorId);
+
+ $anonymous = $visitor->getAnonymousId();
+ $defaultStrategy->unauthenticate();
+ $this->assertNull($visitor->getAnonymousId());
+ $this->assertSame($anonymous, $visitor->getVisitorId());
+ $this->assertSame(FSFetchReason::UNAUTHENTICATE, $visitor->getFetchStatus()->getReason());
+ $this->assertSame(FSFetchStatus::FETCH_REQUIRED, $visitor->getFetchStatus()->getStatus());
+ }
+
+ public function testUnauthenticateBucketingMode()
+ {
+ /**
+ * @var LoggerInterface|MockObject $logManagerStub
+ */
+ $logManagerStub = $this->getMockForAbstractClass(
+ 'Psr\Log\LoggerInterface',
+ [],
+ "",
+ true,
+ true,
+ true,
+ ['error', 'warning']
+ );
+
+ /**
+ * @var TrackingManagerAbstract|MockObject $trackerManager
+ */
+ $trackerManager = $this->getMockForAbstractClass(
+ 'Flagship\Api\TrackingManagerAbstract',
+ ['sendConsentHit'],
+ '',
+ false
+ );
+
+ /**
+ * @var IVisitorCacheImplementation|MockObject $visitorCache
+ */
+ $visitorCache = $this->getMockForAbstractClass(
+ IVisitorCacheImplementation::class,
+ [],
+ '',
+ false
+ );
+
+
+ $visitorId = "visitor_id";
+
+ $config = new BucketingConfig("http://127.0.0.1:3000", 'envId', 'apiKey');
+ $config->setLogManager($logManagerStub);
+
+ /**
+ * @var ApiManager|MockObject $decisionManager
+ */
+ $decisionManager = $this->getMockBuilder(ApiManager::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $configManager = new ConfigManager($config, $decisionManager, $trackerManager);
+
+ $visitor = new VisitorDelegate(new Container(), $configManager, $visitorId, false, [], true);
+
$config->setLogManager($logManagerStub);
$visitor->setConfig($config);
+
+ $unauthenticateName = "unauthenticate";
+
+ $logManagerStub->expects($this->exactly(1))
+ ->method('warning')
+ ->with(
+ $this->logicalOr(
+ FlagshipConstant::XPC_BUCKETING_WARNING
+ ),
+ [FlagshipConstant::TAG => $unauthenticateName]
+ );
+
+
+ $defaultStrategy = new DefaultStrategy($visitor);
$defaultStrategy->unauthenticate();
+ $config->setVisitorCacheImplementation($visitorCache);
+
//Test valid data
$newVisitorId = "newVisitorId";
$defaultStrategy->authenticate($newVisitorId);
@@ -467,8 +639,7 @@ public function testFetchFlags()
$configManager = new ConfigManager($config, $decisionManager, $trackerManager);
- $configManager->setDecisionManager($decisionManager)
- ->setTrackingManager($trackingManagerMock);
+ $configManager->setDecisionManager($decisionManager)->setTrackingManager($trackingManagerMock);
$visitor = new VisitorDelegate(new Container(), $configManager, "visitorId", false, [], true);
@@ -500,52 +671,51 @@ public function testFetchFlagsTroubleshootingData()
false,
false,
true,
- ["setTroubleshootingData", "addTroubleshootingHit"]
+ [
+ "setTroubleshootingData",
+ "addTroubleshootingHit",
+ ]
);
$decisionManager = new ApiManager($httpClientMock, $config);
$httpResponseBody = $this->campaigns();
$troubleshootingData = [
- "startDate" => "2023-04-13T09:33:38.049Z",
- "endDate" => "2023-04-13T10:03:38.049Z",
- "timezone" => "Europe/Paris",
- "traffic" => 40
- ];
+ "startDate" => "2023-04-13T09:33:38.049Z",
+ "endDate" => "2023-04-13T10:03:38.049Z",
+ "timezone" => "Europe/Paris",
+ "traffic" => 40,
+ ];
$httpResponseBody["extras"] = [
- "accountSettings" => [
- "@type" => "type.googleapis.com/flagship.protobuf.AccountSettings",
- "enabledXPC" => false,
- "enabled1V1T" => false,
- "troubleshooting" => $troubleshootingData
- ]
- ];
+ "accountSettings" => [
+ "@type" => "type.googleapis.com/flagship.protobuf.AccountSettings",
+ "enabledXPC" => false,
+ "enabled1V1T" => false,
+ "troubleshooting" => $troubleshootingData,
+ ],
+ ];
- $httpClientMock->expects($this->exactly(3))->method("post")
- ->willReturn(new HttpResponse(200, $httpResponseBody));
+ $httpClientMock->expects($this->exactly(3))->method("post")->willReturn(new HttpResponse(200, $httpResponseBody));
- $trackingManagerMock->expects($this->exactly(3))->method("setTroubleshootingData")
- ->with($this->callback(function ($param) use ($troubleshootingData) {
+ $trackingManagerMock->expects($this->exactly(3))->method("setTroubleshootingData")->with($this->callback(function ($param) use ($troubleshootingData) {
$startDate = new DateTime($troubleshootingData['startDate']);
$endDate = new DateTime($troubleshootingData['endDate']);
return $param->getTraffic() === $troubleshootingData['traffic'] &&
$param->getTimezone() === $troubleshootingData['timezone'] &&
$param->getStartDate()->getTimestamp() === $startDate->getTimestamp() &&
$param->getEndDate()->getTimestamp() === $endDate->getTimestamp();
- }));
+ }));
$matcher = $this->exactly(6);
- $trackingManagerMock->expects($matcher)
- ->method("addTroubleshootingHit")
- ->with(
- $this->logicalOr(
- $this->callback(function ($param) {
+ $trackingManagerMock->expects($matcher)->method("addTroubleshootingHit")->with(
+ $this->logicalOr(
+ $this->callback(function ($param) {
return $param->getLabel() === TroubleshootingLabel::VISITOR_FETCH_CAMPAIGNS ||
$param->getLabel() === TroubleshootingLabel::VISITOR_SEND_HIT;
- })
- )
- );
+ })
+ )
+ );
$configManager = new ConfigManager($config, $decisionManager, $trackingManagerMock);
@@ -598,9 +768,15 @@ public function testFetchFlagsTroubleshootingData()
public function testSendHit()
{
$config = new DecisionApiConfig();
+ /**
+ * @var MockObject|TrackingManagerAbstract $trackerManagerMock
+ */
$trackerManagerMock = $this->getMockForAbstractClass(
'Flagship\Api\TrackingManagerAbstract',
- [$config, new HttpClient()],
+ [
+ $config,
+ new HttpClient(),
+ ],
'',
true,
true,
@@ -640,11 +816,9 @@ public function testSendHit()
$item = new Item($transitionId, $itemName, $itemCode);
- $trackerManagerMock->expects($this->exactly(5))
- ->method('addHit')
- ->with(
- $this->logicalOr($page, $screen, $transition, $event, $item)
- );
+ $trackerManagerMock->expects($this->exactly(5))->method('addHit')->with(
+ $this->logicalOr($page, $screen, $transition, $event, $item)
+ );
//Test type page
$defaultStrategy->sendHit($page);
@@ -693,7 +867,10 @@ public function testSendHitWithLog()
$config = new DecisionApiConfig();
$trackerManagerMock = $this->getMockForAbstractClass(
'Flagship\Api\TrackingManagerAbstract',
- [$config, new HttpClient()],
+ [
+ $config,
+ new HttpClient(),
+ ],
'',
true,
true,
@@ -728,21 +905,21 @@ public function testSendHitWithLog()
$page = new Page("");
- $logManagerMock->expects($this->exactly(1))
- ->method('error')
- ->with(
- $page->getErrorMessage(),
- [FlagshipConstant::TAG => FlagshipConstant::TAG_SEND_HIT]
- );
+ $logManagerMock->expects($this->exactly(1))->method('error')->with(
+ $page->getErrorMessage(),
+ [FlagshipConstant::TAG => FlagshipConstant::TAG_SEND_HIT]
+ );
- $trackerManagerMock->expects($this->never())
- ->method('sendHit');
+ $trackerManagerMock->expects($this->never())->method('sendHit');
$defaultStrategy->sendHit($page);
}
public function testUserExposed()
{
+ /**
+ * @var LoggerInterface|MockObject $logManagerStub
+ */
$logManagerStub = $this->getMockForAbstractClass(
'Psr\Log\LoggerInterface',
[],
@@ -750,16 +927,24 @@ public function testUserExposed()
true,
true,
true,
- ['error', 'info']
+ [
+ 'error',
+ 'info',
+ ]
);
$config = new DecisionApiConfig('envId', 'apiKey');
$config->setLogManager($logManagerStub);
-
+ /**
+ * @var MockObject|TrackingManagerAbstract $trackerManagerStub
+ */
$trackerManagerStub = $this->getMockForAbstractClass(
'Flagship\Api\TrackingManagerAbstract',
- [$config, new HttpClient()],
+ [
+ $config,
+ new HttpClient(),
+ ],
'',
true,
true,
@@ -777,17 +962,7 @@ public function testUserExposed()
$key = "key";
$flagDTO = new FlagDTO();
- $flagDTO->setKey($key)
- ->setCampaignId("campaignId")
- ->setVariationGroupId("variationGroupId")
- ->setVariationId("variationId")
- ->setIsReference(false)
- ->setCampaignType("campaignType")
- ->setSlug("slug")
- ->setCampaignName("campaignName")
- ->setVariationGroupName("variationGroupName")
- ->setVariationName("variationName")
- ->setValue("value");
+ $flagDTO->setKey($key)->setCampaignId("campaignId")->setVariationGroupId("variationGroupId")->setVariationId("variationId")->setIsReference(false)->setCampaignType("campaignType")->setSlug("slug")->setCampaignName("campaignName")->setVariationGroupName("variationGroupName")->setVariationName("variationName")->setValue("value");
$defaultValue = "default";
$flagMetadata = new FSFlagMetadata(
@@ -803,16 +978,9 @@ public function testUserExposed()
);
$activate = new Activate($flagDTO->getVariationGroupId(), $flagDTO->getVariationId());
- $activate
- ->setFlagKey($flagDTO->getKey())
- ->setFlagValue($flagDTO->getValue())
- ->setFlagDefaultValue($defaultValue)
- ->setFlagMetadata($flagMetadata)
- ->setVisitorContext($visitor->getContext())
- ->setVisitorId($visitor->getVisitorId())
- ->setConfig($config);
-
- $trackerManagerStub->expects($this->exactly(4))
+ $activate->setFlagKey($flagDTO->getKey())->setFlagValue($flagDTO->getValue())->setFlagDefaultValue($defaultValue)->setFlagMetadata($flagMetadata)->setVisitorContext($visitor->getContext())->setVisitorId($visitor->getVisitorId())->setConfig($config);
+
+ $trackerManagerStub->expects($this->exactly(2))
->method('activateFlag')
->with($activate);
@@ -825,31 +993,32 @@ public function testUserExposed()
$functionName = FlagshipConstant::FLAG_USER_EXPOSED;
- $logManagerStub->expects($this->exactly(3))->method('info')
- ->with(
- $this->logicalOr(
- sprintf(
- FlagshipConstant::USER_EXPOSED_NO_FLAG_ERROR,
- $visitor->getVisitorId(),
- $key
- ),
- sprintf(
- FlagshipConstant::USER_EXPOSED_CAST_ERROR,
- $visitor->getVisitorId(),
- $key
- ),
- sprintf(
- FlagshipConstant::VISITOR_EXPOSED_VALUE_NOT_CALLED,
- $visitor->getVisitorId(),
- $key
- )
+ $logManagerStub->expects($this->exactly(3))->method('info')->with(
+ $this->logicalOr(
+ sprintf(
+ FlagshipConstant::USER_EXPOSED_NO_FLAG_ERROR,
+ $visitor->getVisitorId(),
+ $key
),
- [FlagshipConstant::TAG => $functionName]
- );
+ sprintf(
+ FlagshipConstant::USER_EXPOSED_CAST_ERROR,
+ $visitor->getVisitorId(),
+ $key
+ ),
+ sprintf(
+ FlagshipConstant::VISITOR_EXPOSED_VALUE_NOT_CALLED,
+ $visitor->getVisitorId(),
+ $key
+ )
+ ),
+ [FlagshipConstant::TAG => $functionName]
+ );
+ //Test flag null
$activate->setFlagDefaultValue($defaultValue);
$defaultStrategy->visitorExposed($key, $defaultValue, null, true);
+ //Test flag with different type
$activate->setFlagDefaultValue(false);
$defaultStrategy->visitorExposed($key, false, $flagDTO, true);
@@ -867,7 +1036,10 @@ public function testGetFlagValue()
true,
true,
true,
- ['error', 'info']
+ [
+ 'error',
+ 'info',
+ ]
);
$config = new DecisionApiConfig('envId', 'apiKey');
@@ -876,7 +1048,10 @@ public function testGetFlagValue()
$trackerManagerStub = $this->getMockForAbstractClass(
'Flagship\Api\TrackingManagerAbstract',
- [$config, new HttpClient()],
+ [
+ $config,
+ new HttpClient(),
+ ],
'',
true,
true,
@@ -895,17 +1070,7 @@ public function testGetFlagValue()
$key = "key";
$defaultValue = "defaultValue";
$flagDTO = new FlagDTO();
- $flagDTO->setKey($key)
- ->setCampaignId("campaignId")
- ->setVariationGroupId("variationGroupId")
- ->setVariationId("variationId")
- ->setIsReference(false)
- ->setCampaignType("campaignType")
- ->setSlug("slug")
- ->setCampaignName("campaignName")
- ->setVariationGroupName("variationGroupName")
- ->setVariationName("variationName")
- ->setValue("value");
+ $flagDTO->setKey($key)->setCampaignId("campaignId")->setVariationGroupId("variationGroupId")->setVariationId("variationId")->setIsReference(false)->setCampaignType("campaignType")->setSlug("slug")->setCampaignName("campaignName")->setVariationGroupName("variationGroupName")->setVariationName("variationName")->setValue("value");
$flagMetadata = new FSFlagMetadata(
$flagDTO->getCampaignId(),
@@ -920,18 +1085,9 @@ public function testGetFlagValue()
);
$activate = new Activate($flagDTO->getVariationGroupId(), $flagDTO->getVariationId());
- $activate
- ->setFlagKey($flagDTO->getKey())
- ->setFlagValue($flagDTO->getValue())
- ->setFlagDefaultValue($defaultValue)
- ->setFlagMetadata($flagMetadata)
- ->setVisitorContext($visitor->getContext())
- ->setVisitorId($visitor->getVisitorId())
- ->setConfig($config);
-
- $trackerManagerStub->expects($this->exactly(4))
- ->method('activateFlag')
- ->with($activate);
+ $activate->setFlagKey($flagDTO->getKey())->setFlagValue($flagDTO->getValue())->setFlagDefaultValue($defaultValue)->setFlagMetadata($flagMetadata)->setVisitorContext($visitor->getContext())->setVisitorId($visitor->getVisitorId())->setConfig($config);
+
+ $trackerManagerStub->expects($this->exactly(4))->method('activateFlag')->with($activate);
$value = $defaultStrategy->getFlagValue($key, $defaultValue, $flagDTO);
$this->assertEquals($value, $flagDTO->getValue());
@@ -980,7 +1136,10 @@ public function testGetFlagMetadata()
true,
true,
true,
- ['error', 'info']
+ [
+ 'error',
+ 'info',
+ ]
);
$trackingManagerMock = $this->getMockForAbstractClass(
@@ -990,7 +1149,10 @@ public function testGetFlagMetadata()
false,
false,
true,
- ["setTroubleshootingData", "addTroubleshootingHit"]
+ [
+ "setTroubleshootingData",
+ "addTroubleshootingHit",
+ ]
);
$config = new DecisionApiConfig('envId', 'apiKey');
@@ -1027,17 +1189,7 @@ public function testGetFlagMetadata()
);
$flagDTO = new FlagDTO();
- $flagDTO->setKey($key)
- ->setValue("value")
- ->setCampaignId($campaignId)
- ->setVariationGroupId($varGroupId)
- ->setVariationId($varId)
- ->setIsReference($isReference)
- ->setCampaignType($campaignType)
- ->setSlug($slug)
- ->setCampaignName($campaignName)
- ->setVariationGroupName($varGrpName)
- ->setVariationName($varName);
+ $flagDTO->setKey($key)->setValue("value")->setCampaignId($campaignId)->setVariationGroupId($varGroupId)->setVariationId($varId)->setIsReference($isReference)->setCampaignType($campaignType)->setSlug($slug)->setCampaignName($campaignName)->setVariationGroupName($varGrpName)->setVariationName($varName);
$metadataValue = $defaultStrategy->getFlagMetadata($key, $flagDTO);
$this->assertEquals($metadata, $metadataValue);
@@ -1053,18 +1205,24 @@ public function testLookupVisitor()
$visitorId = "visitor_id";
$visitorContext = [
- 'name' => 'visitor_name',
- 'age' => 25
- ];
+ 'name' => 'visitor_name',
+ 'age' => 25,
+ ];
+ /**
+ * @var LoggerInterface|MockObject $logManagerStub
+ */
$logManagerStub = $this->getMockForAbstractClass(
- 'Psr\Log\LoggerInterface',
+ LoggerInterface::class,
[],
"",
true,
true,
true,
- ['error', 'info']
+ [
+ 'error',
+ 'info',
+ ]
);
$config->setLogManager($logManagerStub);
@@ -1079,10 +1237,16 @@ public function testLookupVisitor()
['lookupVisitor']
);
+ /**
+ * @var ApiManager|MockObject $apiManager
+ */
$apiManager = $this->getMockBuilder(ApiManager::class)
->disableOriginalConstructor()
->getMock();
+ /**
+ * @var TrackingManagerAbstract|MockObject $trackingManagerMock
+ */
$trackingManagerMock = $this->getMockForAbstractClass(
'Flagship\Api\TrackingManagerAbstract',
['sendHit'],
@@ -1098,68 +1262,73 @@ public function testLookupVisitor()
$defaultStrategy = new DefaultStrategy($visitor);
- $visitorCache1 = [
- StrategyAbstract::VERSION => 1
- ];
+ $visitorCache1 = [StrategyAbstract::VERSION => 1];
$differentVisitorId = "different visitorID";
$visitorCache2 = [
- StrategyAbstract::VERSION => 1,
- StrategyAbstract::DATA => [
- StrategyAbstract::VISITOR_ID => $differentVisitorId
- ]
- ];
+ StrategyAbstract::VERSION => 1,
+ StrategyAbstract::DATA => [StrategyAbstract::VISITOR_ID => $differentVisitorId],
+ ];
$visitorCache3 = [
- StrategyAbstract::VERSION => 1,
- StrategyAbstract::DATA => [
- StrategyAbstract::VISITOR_ID => $visitorId
- ]
- ];
+ StrategyAbstract::VERSION => 1,
+ StrategyAbstract::DATA => [StrategyAbstract::VISITOR_ID => $visitorId],
+ ];
$visitorCache4 = [
- StrategyAbstract::VERSION => 1,
- StrategyAbstract::DATA => [
- StrategyAbstract::VISITOR_ID => $visitorId,
- StrategyAbstract::CAMPAIGNS => "not an array"
- ]
- ];
+ StrategyAbstract::VERSION => 1,
+ StrategyAbstract::DATA => [
+ StrategyAbstract::VISITOR_ID => $visitorId,
+ StrategyAbstract::CAMPAIGNS => "not an array",
+ ],
+ ];
$visitorCache5 = [
- StrategyAbstract::VERSION => 1,
- StrategyAbstract::DATA => [
- StrategyAbstract::VISITOR_ID => $visitorId,
- StrategyAbstract::CAMPAIGNS => [
- "anythings"
- ]
- ]
- ];
+ StrategyAbstract::VERSION => 1,
+ StrategyAbstract::DATA => [
+ StrategyAbstract::VISITOR_ID => $visitorId,
+ StrategyAbstract::CAMPAIGNS => ["anythings"],
+ ],
+ ];
$visitorCache6 = [
- StrategyAbstract::VERSION => 1,
+ StrategyAbstract::VERSION => 1,
+ StrategyAbstract::DATA => [
+ StrategyAbstract::VISITOR_ID => $visitorId,
+ StrategyAbstract::CAMPAIGNS => [
+ [
+ FlagshipField::FIELD_CAMPAIGN_ID => "c8pimlr7n0ig3a0pt2ig",
+ FlagshipField::FIELD_VARIATION_GROUP_ID => "c8pimlr7n0ig3a0pt2jg",
+ FlagshipField::FIELD_VARIATION_ID => "c8pimlr7n0ig3a0pt2kg",
+ FlagshipField::FIELD_IS_REFERENCE => false,
+ FlagshipField::FIELD_CAMPAIGN_TYPE => "ab",
+ StrategyAbstract::ACTIVATED => false,
+ StrategyAbstract::FLAGS => [
+ "Number" => 5,
+ "isBool" => false,
+ "background" => "EE3300",
+ "borderColor" => "blue",
+ "Null" => null,
+ "Empty" => "",
+ ],
+ ],
+ ],
+ ],
+ ];
+
+ $visitorCache7 = [
+ StrategyAbstract::VERSION => 2,
StrategyAbstract::DATA => [
StrategyAbstract::VISITOR_ID => $visitorId,
StrategyAbstract::CAMPAIGNS => [
- [
- FlagshipField::FIELD_CAMPAIGN_ID => "c8pimlr7n0ig3a0pt2ig",
- FlagshipField::FIELD_VARIATION_GROUP_ID => "c8pimlr7n0ig3a0pt2jg",
- FlagshipField::FIELD_VARIATION_ID => "c8pimlr7n0ig3a0pt2kg",
- FlagshipField::FIELD_IS_REFERENCE => false,
- FlagshipField::FIELD_CAMPAIGN_TYPE => "ab",
- StrategyAbstract::ACTIVATED => false,
- StrategyAbstract::FLAGS => [
- "Number" => 5,
- "isBool" => false,
- "background" => "EE3300",
- "borderColor" => "blue",
- "Null" => null,
- "Empty" => ""
- ]
- ]
+ "anythings"
]
]
];
- $VisitorCacheImplementationMock->expects($this->exactly(7))
+ /**
+ * @var IVisitorCacheImplementation|MockObject $VisitorCacheImplementationMock
+ */
+ $VisitorCacheImplementationMock->expects($this->exactly(8))
->method("lookupVisitor")
->with($visitorId)
->willReturnOnConsecutiveCalls(
@@ -1169,13 +1338,14 @@ public function testLookupVisitor()
$visitorCache3,
$visitorCache4,
$visitorCache5,
- $visitorCache6
+ $visitorCache6,
+ $visitorCache7
);
$config->setVisitorCacheImplementation($VisitorCacheImplementationMock);
$functionName = "lookupVisitor";
- $logManagerStub->expects($this->exactly(5))->method('error')
+ $logManagerStub->expects($this->exactly(6))->method('error')
->with(
$this->logicalOr(
StrategyAbstract::LOOKUP_VISITOR_JSON_OBJECT_ERROR,
@@ -1189,46 +1359,69 @@ public function testLookupVisitor()
// test return empty array
$defaultStrategy->lookupVisitor();
+ $this->assertEquals($visitor->getVisitorCacheStatus(), VisitorCacheStatus::NONE);
+
$this->assertCount(0, $visitor->visitorCache);
// test return array["version"=>1] only
$defaultStrategy->lookupVisitor();
+ $this->assertEquals($visitor->getVisitorCacheStatus(), VisitorCacheStatus::VISITOR_ID_CACHE);
+
$this->assertCount(0, $visitor->visitorCache);
// test return cache with different visitor id
$defaultStrategy->lookupVisitor();
+ $this->assertEquals($visitor->getVisitorCacheStatus(), VisitorCacheStatus::VISITOR_ID_CACHE);
+
$this->assertCount(0, $visitor->visitorCache);
+
// test return cache without campaings
$defaultStrategy->lookupVisitor();
- $this->assertSame($visitorCache3, $visitor->visitorCache);
+ $this->assertEquals($visitor->getVisitorCacheStatus(), VisitorCacheStatus::VISITOR_ID_CACHE);
+
+ $this->assertCount(0, $visitor->visitorCache);
// test return cache with is_array(campaings) === false
$defaultStrategy->lookupVisitor();
- $this->assertSame($visitorCache3, $visitor->visitorCache);
+ $this->assertEquals($visitor->getVisitorCacheStatus(), VisitorCacheStatus::VISITOR_ID_CACHE);
+
+ $this->assertCount(0, $visitor->visitorCache);
// test return cache with invalid campaigns
$defaultStrategy->lookupVisitor();
- $this->assertSame($visitorCache3, $visitor->visitorCache);
+ $this->assertEquals($visitor->getVisitorCacheStatus(), VisitorCacheStatus::VISITOR_ID_CACHE);
+
+ $this->assertCount(0, $visitor->visitorCache);
// test return cache with valid cache
$defaultStrategy->lookupVisitor();
+ $this->assertEquals($visitor->getVisitorCacheStatus(), VisitorCacheStatus::VISITOR_ID_CACHE);
+
+ $this->assertSame($visitorCache6, $visitor->visitorCache);
+
+ //
+ $defaultStrategy->lookupVisitor();
+
+ $this->assertEquals(VisitorCacheStatus::VISITOR_ID_CACHE, $visitor->getVisitorCacheStatus(), );
+
$this->assertSame($visitorCache6, $visitor->visitorCache);
}
- public function testCacheVisitor()
+ public function testLookupVisitorXpc()
{
+ $config = new DecisionApiConfig('envId', 'apiKey');
$visitorId = "visitor_id";
$visitorContext = [
@@ -1236,7 +1429,170 @@ public function testCacheVisitor()
'age' => 25
];
+ /**
+ * @var LoggerInterface|MockObject $logManagerStub
+ */
+ $logManagerStub = $this->getMockForAbstractClass(
+ LoggerInterface::class,
+ [],
+ "",
+ true,
+ true,
+ true,
+ ['error', 'info']
+ );
+
+ $config->setLogManager($logManagerStub);
+
+ $VisitorCacheImplementationMock = $this->getMockForAbstractClass(
+ "Flagship\Cache\IVisitorCacheImplementation",
+ [],
+ "",
+ true,
+ true,
+ true,
+ ['lookupVisitor']
+ );
+
+ /**
+ * @var ApiManager|MockObject $apiManager
+ */
+ $apiManager = $this->getMockBuilder(ApiManager::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ /**
+ * @var TrackingManagerAbstract|MockObject $trackingManagerMock
+ */
+ $trackingManagerMock = $this->getMockForAbstractClass(
+ 'Flagship\Api\TrackingManagerAbstract',
+ ['sendHit'],
+ '',
+ false
+ );
+
+ $configManager = new ConfigManager($config, $apiManager, $trackingManagerMock);
+
+ $container = new Container();
+
+ $visitor = new VisitorDelegate($container, $configManager, $visitorId, false, $visitorContext, true);
+
+ $defaultStrategy = new DefaultStrategy($visitor);
+
+ $differentVisitorId = "different visitorID";
+
+ $anonymousId = "anonymousId";
+
+ $visitorCache = [
+ StrategyAbstract::VERSION => 1,
+ StrategyAbstract::DATA => [
+ StrategyAbstract::VISITOR_ID => $visitorId,
+ StrategyAbstract::CAMPAIGNS => [
+ [
+ FlagshipField::FIELD_CAMPAIGN_ID => "c8pimlr7n0ig3a0pt2ig",
+ FlagshipField::FIELD_VARIATION_GROUP_ID => "c8pimlr7n0ig3a0pt2jg",
+ FlagshipField::FIELD_VARIATION_ID => "c8pimlr7n0ig3a0pt2kg",
+ FlagshipField::FIELD_IS_REFERENCE => false,
+ FlagshipField::FIELD_CAMPAIGN_TYPE => "ab",
+ StrategyAbstract::ACTIVATED => false,
+ StrategyAbstract::FLAGS => [
+ "Number" => 5,
+ "isBool" => false,
+ "background" => "EE3300",
+ "borderColor" => "blue",
+ "Null" => null,
+ "Empty" => ""
+ ]
+ ]
+ ]
+ ]
+ ];
+ $visitorCacheAnonymous = [
+ StrategyAbstract::VERSION => 1,
+ StrategyAbstract::DATA => [
+ StrategyAbstract::VISITOR_ID => $anonymousId,
+ StrategyAbstract::CAMPAIGNS => [
+ [
+ FlagshipField::FIELD_CAMPAIGN_ID => $anonymousId . "c8pimlr7n0ig3a0pt2ig",
+ FlagshipField::FIELD_VARIATION_GROUP_ID => $anonymousId . "c8pimlr7n0ig3a0pt2jg",
+ FlagshipField::FIELD_VARIATION_ID => $anonymousId . "c8pimlr7n0ig3a0pt2kg",
+ FlagshipField::FIELD_IS_REFERENCE => false,
+ FlagshipField::FIELD_CAMPAIGN_TYPE => "ab",
+ StrategyAbstract::ACTIVATED => false,
+ StrategyAbstract::FLAGS => [
+ "Number" => 5,
+ "isBool" => false,
+ "background" => "EE3300",
+ "borderColor" => "blue",
+ "Null" => null,
+ "Empty" => ""
+ ]
+ ]
+ ]
+ ]
+ ];
+
+ /**
+ * @var IVisitorCacheImplementation|MockObject $VisitorCacheImplementationMock
+ */
+ $VisitorCacheImplementationMock->expects($this->exactly(7))
+ ->method("lookupVisitor")->willReturnCallback(function ($id) use ($visitorCache, $visitorId, $anonymousId, $visitorCacheAnonymous) {
+ if ($id === $visitorId) {
+ return $visitorCache;
+ }
+ if ($id === $anonymousId) {
+ return $visitorCacheAnonymous;
+ }
+
+ return [];
+ });
+
+ $config->setVisitorCacheImplementation($VisitorCacheImplementationMock);
+
+
+ $this->assertCount(0, $visitor->visitorCache);
+
+
+ $defaultStrategy->lookupVisitor();
+
+ $this->assertSame($visitorCache, $visitor->visitorCache);
+ $this->assertSame(VisitorCacheStatus::VISITOR_ID_CACHE, $visitor->getVisitorCacheStatus());
+
+ $visitor->setAnonymousId($anonymousId);
+
+ $defaultStrategy->lookupVisitor();
+
+ $this->assertSame($visitorCache, $visitor->visitorCache);
+ $this->assertEquals(VisitorCacheStatus::VISITOR_ID_CACHE_WITH_ANONYMOUS_ID_CACHE, $visitor->getVisitorCacheStatus());
+
+ $visitor->setVisitorId("new_visitor_id");
+
+ $defaultStrategy->lookupVisitor();
+ $this->assertEquals(VisitorCacheStatus::ANONYMOUS_ID_CACHE, $visitor->getVisitorCacheStatus());
+ $this->assertSame($visitorCacheAnonymous, $visitor->visitorCache);
+
+ $visitor->setAnonymousId("another_anonymous_id");
+ $visitor->setVisitorId("another_visitor_id");
+ $defaultStrategy->lookupVisitor();
+
+ $this->assertEquals(VisitorCacheStatus::NONE, $visitor->getVisitorCacheStatus());
+ $this->assertCount(0, $visitor->visitorCache);
+ }
+
+ public function testCacheVisitor()
+ {
+
+ $visitorId = "visitor_id";
+ $visitorContext = [
+ 'name' => 'visitor_name',
+ 'age' => 25,
+ ];
+
$config = new DecisionApiConfig('envId', 'apiKey');
+
+ /**
+ * @var HttpClientInterface|MockObject $httpClientMock
+ */
$httpClientMock = $this->getMockForAbstractClass(
'Flagship\Utils\HttpClientInterface',
['post'],
@@ -1247,51 +1603,71 @@ public function testCacheVisitor()
$campaignsData = $this->campaigns();
$campaignsData2 = $this->campaigns2();
- $httpClientMock->expects($this->exactly(3))->method("post")
- ->willReturnOnConsecutiveCalls(
- new HttpResponse(200, $campaignsData),
- new HttpResponse(200, $campaignsData2),
- new HttpResponse(200, $campaignsData2)
- );
+ $httpClientMock->expects($this->exactly(3))->method("post")->willReturnOnConsecutiveCalls(
+ new HttpResponse(200, $campaignsData),
+ new HttpResponse(200, $campaignsData2),
+ new HttpResponse(200, $campaignsData2)
+ );
$decisionManager = new ApiManager($httpClientMock, $config);
+ /**
+ * @var LoggerInterface|MockObject $logManagerStub
+ */
$logManagerStub = $this->getMockForAbstractClass(
- 'Psr\Log\LoggerInterface',
+ LoggerInterface::class,
[],
"",
true,
true,
true,
- ['error', 'info']
+ [
+ 'error',
+ 'info',
+ ]
);
+ /**
+ * @var TrackingManagerAbstract|MockObject $trackingManagerMock
+ */
$trackingManagerMock = $this->getMockForAbstractClass(
- "Flagship\Api\TrackingManagerAbstract",
+ TrackingManagerAbstract::class,
[],
"",
false,
false,
true,
- ["setTroubleshootingData", "addTroubleshootingHit"]
+ [
+ "setTroubleshootingData",
+ "addTroubleshootingHit",
+ ]
);
$config->setLogManager($logManagerStub);
+ /**
+ * @var IVisitorCacheImplementation|MockObject $VisitorCacheImplementationMock
+ */
$VisitorCacheImplementationMock = $this->getMockForAbstractClass(
- "Flagship\Cache\IVisitorCacheImplementation",
+ IVisitorCacheImplementation::class,
[],
"",
true,
true,
true,
- ['lookupVisitor', 'cacheVisitor']
+ [
+ 'lookupVisitor',
+ 'cacheVisitor',
+ ]
);
$configManager = new ConfigManager($config, $decisionManager, $trackingManagerMock);
+ /**
+ * @var ContainerInterface|MockObject $containerMock
+ */
$containerMock = $this->getMockForAbstractClass(
- 'Flagship\Utils\ContainerInterface',
+ ContainerInterface::class,
['get'],
'',
false
@@ -1318,104 +1694,282 @@ public function testCacheVisitor()
foreach ($campaignsData[FlagshipField::FIELD_CAMPAIGNS] as $campaign) {
$variation = $campaign[FlagshipField::FIELD_VARIATION];
$modifications = $variation[FlagshipField::FIELD_MODIFICATIONS];
- $assignmentsHistory[$campaign[FlagshipField::FIELD_VARIATION_GROUP_ID]] =
- $variation[FlagshipField::FIELD_ID];
+ $assignmentsHistory[$campaign[FlagshipField::FIELD_VARIATION_GROUP_ID]] = $variation[FlagshipField::FIELD_ID];
$campaigns[] = [
- FlagshipField::FIELD_CAMPAIGN_ID => $campaign[FlagshipField::FIELD_ID],
- FlagshipField::FIELD_SLUG => $campaign[FlagshipField::FIELD_SLUG] ?? null,
- FlagshipField::FIELD_VARIATION_GROUP_ID => $campaign[FlagshipField::FIELD_VARIATION_GROUP_ID],
- FlagshipField::FIELD_VARIATION_ID => $variation[FlagshipField::FIELD_ID],
- FlagshipField::FIELD_IS_REFERENCE => $variation[FlagshipField::FIELD_REFERENCE],
- FlagshipField::FIELD_CAMPAIGN_TYPE => $modifications[FlagshipField::FIELD_CAMPAIGN_TYPE],
- StrategyAbstract::ACTIVATED => false,
- StrategyAbstract::FLAGS => $modifications[FlagshipField::FIELD_VALUE]
- ];
+ FlagshipField::FIELD_CAMPAIGN_ID => $campaign[FlagshipField::FIELD_ID],
+ FlagshipField::FIELD_SLUG => $campaign[FlagshipField::FIELD_SLUG] ?? null,
+ FlagshipField::FIELD_VARIATION_GROUP_ID => $campaign[FlagshipField::FIELD_VARIATION_GROUP_ID],
+ FlagshipField::FIELD_VARIATION_ID => $variation[FlagshipField::FIELD_ID],
+ FlagshipField::FIELD_IS_REFERENCE => $variation[FlagshipField::FIELD_REFERENCE],
+ FlagshipField::FIELD_CAMPAIGN_TYPE => $modifications[FlagshipField::FIELD_CAMPAIGN_TYPE],
+ StrategyAbstract::ACTIVATED => false,
+ StrategyAbstract::FLAGS => $modifications[FlagshipField::FIELD_VALUE],
+ ];
}
$visitorCache = [
- StrategyAbstract::VERSION => 1,
- StrategyAbstract::DATA => [
- StrategyAbstract::VISITOR_ID => $visitorId,
- StrategyAbstract::ANONYMOUS_ID => $visitor->getAnonymousId(),
- StrategyAbstract::CONSENT => $visitor->hasConsented(),
- StrategyAbstract::CONTEXT => $visitor->getContext(),
- StrategyAbstract::CAMPAIGNS => $campaigns,
- StrategyAbstract::ASSIGNMENTS_HISTORY => $assignmentsHistory
- ]
- ];
+ StrategyAbstract::VERSION => 1,
+ StrategyAbstract::DATA => [
+ StrategyAbstract::VISITOR_ID => $visitorId,
+ StrategyAbstract::ANONYMOUS_ID => $visitor->getAnonymousId(),
+ StrategyAbstract::CONSENT => $visitor->hasConsented(),
+ StrategyAbstract::CONTEXT => $visitor->getContext(),
+ StrategyAbstract::CAMPAIGNS => $campaigns,
+ StrategyAbstract::ASSIGNMENTS_HISTORY => $assignmentsHistory,
+ ],
+ ];
$assignmentsHistory2 = [];
$campaigns2 = [];
foreach ($campaignsData2[FlagshipField::FIELD_CAMPAIGNS] as $campaign) {
$variation = $campaign[FlagshipField::FIELD_VARIATION];
$modifications = $variation[FlagshipField::FIELD_MODIFICATIONS];
- $assignmentsHistory2[$campaign[FlagshipField::FIELD_VARIATION_GROUP_ID]] =
- $variation[FlagshipField::FIELD_ID];
+ $assignmentsHistory2[$campaign[FlagshipField::FIELD_VARIATION_GROUP_ID]] = $variation[FlagshipField::FIELD_ID];
$campaigns2[] = [
- FlagshipField::FIELD_CAMPAIGN_ID => $campaign[FlagshipField::FIELD_ID],
- FlagshipField::FIELD_SLUG => $campaign[FlagshipField::FIELD_SLUG] ?? null,
- FlagshipField::FIELD_VARIATION_GROUP_ID => $campaign[FlagshipField::FIELD_VARIATION_GROUP_ID],
- FlagshipField::FIELD_VARIATION_ID => $variation[FlagshipField::FIELD_ID],
- FlagshipField::FIELD_IS_REFERENCE => $variation[FlagshipField::FIELD_REFERENCE],
- FlagshipField::FIELD_CAMPAIGN_TYPE => $modifications[FlagshipField::FIELD_CAMPAIGN_TYPE],
- StrategyAbstract::ACTIVATED => false,
- StrategyAbstract::FLAGS => $modifications[FlagshipField::FIELD_VALUE]
- ];
+ FlagshipField::FIELD_CAMPAIGN_ID => $campaign[FlagshipField::FIELD_ID],
+ FlagshipField::FIELD_SLUG => $campaign[FlagshipField::FIELD_SLUG] ?? null,
+ FlagshipField::FIELD_VARIATION_GROUP_ID => $campaign[FlagshipField::FIELD_VARIATION_GROUP_ID],
+ FlagshipField::FIELD_VARIATION_ID => $variation[FlagshipField::FIELD_ID],
+ FlagshipField::FIELD_IS_REFERENCE => $variation[FlagshipField::FIELD_REFERENCE],
+ FlagshipField::FIELD_CAMPAIGN_TYPE => $modifications[FlagshipField::FIELD_CAMPAIGN_TYPE],
+ StrategyAbstract::ACTIVATED => false,
+ StrategyAbstract::FLAGS => $modifications[FlagshipField::FIELD_VALUE],
+ ];
}
+ $visitorCache2 = [
+ StrategyAbstract::VERSION => 1,
+ StrategyAbstract::DATA => [
+ StrategyAbstract::VISITOR_ID => $visitorId,
+ StrategyAbstract::ANONYMOUS_ID => $visitor->getAnonymousId(),
+ StrategyAbstract::CONSENT => $visitor->hasConsented(),
+ StrategyAbstract::CONTEXT => $visitor->getContext(),
+ StrategyAbstract::CAMPAIGNS => $campaigns2,
+ StrategyAbstract::ASSIGNMENTS_HISTORY => array_merge($assignmentsHistory, $assignmentsHistory2),
+ ],
+ ];
+
+ $exception = new Exception("Message error");
+
+ $VisitorCacheImplementationMock->expects($this->exactly(3))->method("cacheVisitor")->with(
+ $this->logicalOr(
+ $visitorId
+ ),
+ $this->logicalOr(
+ $visitorCache,
+ $visitorCache2
+ )
+ )->willReturnOnConsecutiveCalls(null, null, $this->throwException($exception));
+
+ $config->setVisitorCacheImplementation($VisitorCacheImplementationMock);
+
+
+ $functionName = "cacheVisitor";
+
+ $visitor->fetchFlags();
+
+ $VisitorCacheImplementationMock->expects($this->exactly(2))
+ ->method("lookupVisitor")
+ ->with(
+ $visitorId
+ )->willReturn(
+ $visitorCache
+ );
+
+ $visitor->fetchFlags();
+
+ $logManagerStub->expects($this->exactly(1))->method('error')->with(
+ $exception->getMessage(),
+ [FlagshipConstant::TAG => $functionName]
+ );
+
+ $visitor->fetchFlags();
+ }
+
+ public function testCacheVisitorXpc()
+ {
+
+ $visitorId = "visitor_id";
+ $visitorContext = [
+ 'name' => 'visitor_name',
+ 'age' => 25
+ ];
+
+ $config = new DecisionApiConfig('envId', 'apiKey');
+
+ /**
+ * @var HttpClientInterface|MockObject $httpClientMock
+ */
+ $httpClientMock = $this->getMockForAbstractClass(
+ 'Flagship\Utils\HttpClientInterface',
+ ['post'],
+ '',
+ false
+ );
+
+
+ $decisionManager = new ApiManager($httpClientMock, $config);
+
+ /**
+ * @var LoggerInterface|MockObject $logManagerStub
+ */
+ $logManagerStub = $this->getMockForAbstractClass(
+ 'Psr\Log\LoggerInterface',
+ [],
+ "",
+ true,
+ true,
+ true,
+ ['error', 'info']
+ );
+
+ /**
+ * @var TrackingManagerAbstract|MockObject $trackingManagerMock
+ */
+ $trackingManagerMock = $this->getMockForAbstractClass(
+ "Flagship\Api\TrackingManagerAbstract",
+ [],
+ "",
+ false,
+ false,
+ true,
+ ["setTroubleshootingData", "addTroubleshootingHit"]
+ );
+
+ $config->setLogManager($logManagerStub);
+
+ /**
+ * @var IVisitorCacheImplementation|MockObject $VisitorCacheImplementationMock
+ */
+ $VisitorCacheImplementationMock = $this->getMockForAbstractClass(
+ "Flagship\Cache\IVisitorCacheImplementation",
+ [],
+ "",
+ true,
+ true,
+ true,
+ ['lookupVisitor', 'cacheVisitor']
+ );
+
+ $configManager = new ConfigManager($config, $decisionManager, $trackingManagerMock);
+
+ /**
+ * @var ContainerInterface|MockObject $containerMock
+ */
+ $containerMock = $this->getMockForAbstractClass(
+ 'Flagship\Utils\ContainerInterface',
+ ['get'],
+ '',
+ false
+ );
+
+ $containerGetMethod = function () {
+ $args = func_get_args();
+ $params = $args[1];
+ return new DefaultStrategy($params[0]);
+ };
+
+ $containerMock->method('get')->willReturnCallback($containerGetMethod);
+ $visitor = new VisitorDelegate(
+ $containerMock,
+ $configManager,
+ $visitorId,
+ false,
+ $visitorContext,
+ true
+ );
+
+ $defaultStrategy = new DefaultStrategy($visitor);
+
+ $anonymousId = "anonymousId";
+
+ $visitorCache = [
+ StrategyAbstract::VERSION => 1,
+ StrategyAbstract::DATA => [
+ StrategyAbstract::VISITOR_ID => $visitorId,
+ StrategyAbstract::ANONYMOUS_ID => null,
+ StrategyAbstract::CONSENT => $visitor->hasConsented(),
+ StrategyAbstract::CONTEXT => $visitor->getContext(),
+ StrategyAbstract::CAMPAIGNS => [],
+ StrategyAbstract::ASSIGNMENTS_HISTORY => []
+ ]
+ ];
+
$visitorCache2 = [
StrategyAbstract::VERSION => 1,
StrategyAbstract::DATA => [
StrategyAbstract::VISITOR_ID => $visitorId,
- StrategyAbstract::ANONYMOUS_ID => $visitor->getAnonymousId(),
+ StrategyAbstract::ANONYMOUS_ID => $anonymousId,
+ StrategyAbstract::CONSENT => $visitor->hasConsented(),
+ StrategyAbstract::CONTEXT => $visitor->getContext(),
+ StrategyAbstract::CAMPAIGNS => [],
+ StrategyAbstract::ASSIGNMENTS_HISTORY => []
+ ]
+ ];
+
+ $visitorCacheAnonymous = [
+ StrategyAbstract::VERSION => 1,
+ StrategyAbstract::DATA => [
+ StrategyAbstract::VISITOR_ID => $anonymousId,
+ StrategyAbstract::ANONYMOUS_ID => null,
StrategyAbstract::CONSENT => $visitor->hasConsented(),
StrategyAbstract::CONTEXT => $visitor->getContext(),
- StrategyAbstract::CAMPAIGNS => $campaigns2,
- StrategyAbstract::ASSIGNMENTS_HISTORY => array_merge($assignmentsHistory, $assignmentsHistory2)
+ StrategyAbstract::CAMPAIGNS => [],
+ StrategyAbstract::ASSIGNMENTS_HISTORY => []
]
];
$exception = new Exception("Message error");
- $VisitorCacheImplementationMock->expects($this->exactly(3))
+ $VisitorCacheImplementationMock->expects($this->exactly(7))
->method("cacheVisitor")
->with(
$this->logicalOr(
- $visitorId
+ $visitorId,
+ $anonymousId
),
$this->logicalOr(
$visitorCache,
- $visitorCache2
+ $visitorCache2,
+ $visitorCacheAnonymous
)
- )
- ->willReturnOnConsecutiveCalls(null, null, $this->throwException($exception));
+ );
$config->setVisitorCacheImplementation($VisitorCacheImplementationMock);
+ $defaultStrategy->cacheVisitor();
- $functionName = "cacheVisitor";
+ $this->assertSame($visitorCache, $visitor->visitorCache);
- $visitor->fetchFlags();
+ $visitor->setAnonymousId($anonymousId);
- $visitor->fetchFlags();
+ $visitor->setVisitorCacheStatus(VisitorCacheStatus::ANONYMOUS_ID_CACHE);
- $logManagerStub->expects($this->exactly(1))->method('error')
- ->with(
- $exception->getMessage(),
- [FlagshipConstant::TAG => $functionName]
- );
+ $defaultStrategy->cacheVisitor();
- $visitor->fetchFlags();
+ $this->assertSame($visitorCache2, $visitor->visitorCache);
+
+ $visitor->setVisitorCacheStatus(VisitorCacheStatus::NONE);
+
+ $defaultStrategy->cacheVisitor();
+
+ $visitor->setVisitorCacheStatus(VisitorCacheStatus::VISITOR_ID_CACHE);
+
+ $defaultStrategy->cacheVisitor();
+
+ $visitor->setVisitorCacheStatus(VisitorCacheStatus::VISITOR_ID_CACHE_WITH_ANONYMOUS_ID_CACHE);
+
+ $defaultStrategy->cacheVisitor();
}
public function testFlushVisitor()
{
$visitorId = "visitor_id";
$visitorContext = [
- 'name' => 'visitor_name',
- 'age' => 25
- ];
+ 'name' => 'visitor_name',
+ 'age' => 25,
+ ];
$config = new DecisionApiConfig('envId', 'apiKey');
$httpClientMock = $this->getMockForAbstractClass(
@@ -1437,7 +1991,10 @@ public function testFlushVisitor()
true,
true,
true,
- ['error', 'info']
+ [
+ 'error',
+ 'info',
+ ]
);
$config->setLogManager($logManagerStub);
@@ -1469,10 +2026,7 @@ public function testFlushVisitor()
$exception = new Exception("Message error");
- $VisitorCacheImplementationMock->expects($this->exactly(2))
- ->method("flushVisitor")
- ->with($visitorId)
- ->willReturnOnConsecutiveCalls(null, $this->throwException($exception));
+ $VisitorCacheImplementationMock->expects($this->exactly(2))->method("flushVisitor")->with($visitorId)->willReturnOnConsecutiveCalls(null, $this->throwException($exception));
$config->setVisitorCacheImplementation($VisitorCacheImplementationMock);
@@ -1483,11 +2037,10 @@ public function testFlushVisitor()
$functionName = "flushVisitor";
- $logManagerStub->expects($this->exactly(1))->method('error')
- ->with(
- $exception->getMessage(),
- [FlagshipConstant::TAG => $functionName]
- );
+ $logManagerStub->expects($this->exactly(1))->method('error')->with(
+ $exception->getMessage(),
+ [FlagshipConstant::TAG => $functionName]
+ );
$defaultStrategy->setConsent(false);
}
@@ -1498,9 +2051,9 @@ public function testFetchVisitorCampaigns()
$visitorId = "visitor_id";
$visitorContext = [
- 'name' => 'visitor_name',
- 'age' => 25
- ];
+ 'name' => 'visitor_name',
+ 'age' => 25,
+ ];
$config = new DecisionApiConfig('envId', 'apiKey');
$httpClientMock = $this->getMockForAbstractClass(
@@ -1512,9 +2065,7 @@ public function testFetchVisitorCampaigns()
$campaignsData = $this->campaigns();
- $httpClientMock->expects($this->exactly(2))
- ->method("post")
- ->willThrowException(new Exception());
+ $httpClientMock->expects($this->exactly(2))->method("post")->willThrowException(new Exception());
$decisionManager = new ApiManager($httpClientMock, $config);
@@ -1525,7 +2076,10 @@ public function testFetchVisitorCampaigns()
true,
true,
true,
- ['error', 'info']
+ [
+ 'error',
+ 'info',
+ ]
);
$trackingManagerMock = $this->getMockForAbstractClass(
@@ -1535,7 +2089,10 @@ public function testFetchVisitorCampaigns()
false,
false,
true,
- ["setTroubleshootingData", "addTroubleshootingHit"]
+ [
+ "setTroubleshootingData",
+ "addTroubleshootingHit",
+ ]
);
$config->setLogManager($logManagerStub);
@@ -1575,27 +2132,27 @@ public function testFetchVisitorCampaigns()
$assignmentsHistory[$campaign[FlagshipField::FIELD_ID]] = $variation[FlagshipField::FIELD_ID];
$campaigns[] = [
- FlagshipField::FIELD_CAMPAIGN_ID => $campaign[FlagshipField::FIELD_ID],
- FlagshipField::FIELD_VARIATION_GROUP_ID => $campaign[FlagshipField::FIELD_VARIATION_GROUP_ID],
- FlagshipField::FIELD_VARIATION_ID => $variation[FlagshipField::FIELD_ID],
- FlagshipField::FIELD_IS_REFERENCE => $variation[FlagshipField::FIELD_REFERENCE],
- FlagshipField::FIELD_CAMPAIGN_TYPE => $modifications[FlagshipField::FIELD_CAMPAIGN_TYPE],
- StrategyAbstract::ACTIVATED => false,
- StrategyAbstract::FLAGS => $modifications[FlagshipField::FIELD_VALUE]
- ];
+ FlagshipField::FIELD_CAMPAIGN_ID => $campaign[FlagshipField::FIELD_ID],
+ FlagshipField::FIELD_VARIATION_GROUP_ID => $campaign[FlagshipField::FIELD_VARIATION_GROUP_ID],
+ FlagshipField::FIELD_VARIATION_ID => $variation[FlagshipField::FIELD_ID],
+ FlagshipField::FIELD_IS_REFERENCE => $variation[FlagshipField::FIELD_REFERENCE],
+ FlagshipField::FIELD_CAMPAIGN_TYPE => $modifications[FlagshipField::FIELD_CAMPAIGN_TYPE],
+ StrategyAbstract::ACTIVATED => false,
+ StrategyAbstract::FLAGS => $modifications[FlagshipField::FIELD_VALUE],
+ ];
}
$visitorCache = [
- StrategyAbstract::VERSION => 1,
- StrategyAbstract::DATA => [
- StrategyAbstract::VISITOR_ID => $visitorId,
- StrategyAbstract::ANONYMOUS_ID => $visitor->getAnonymousId(),
- StrategyAbstract::CONSENT => $visitor->hasConsented(),
- StrategyAbstract::CONTEXT => $visitor->getContext(),
- StrategyAbstract::CAMPAIGNS => $campaigns,
- StrategyAbstract::ASSIGNMENTS_HISTORY => $assignmentsHistory
- ]
- ];
+ StrategyAbstract::VERSION => 1,
+ StrategyAbstract::DATA => [
+ StrategyAbstract::VISITOR_ID => $visitorId,
+ StrategyAbstract::ANONYMOUS_ID => $visitor->getAnonymousId(),
+ StrategyAbstract::CONSENT => $visitor->hasConsented(),
+ StrategyAbstract::CONTEXT => $visitor->getContext(),
+ StrategyAbstract::CAMPAIGNS => $campaigns,
+ StrategyAbstract::ASSIGNMENTS_HISTORY => $assignmentsHistory,
+ ],
+ ];
$visitor->visitorCache = $visitorCache;
@@ -1646,8 +2203,7 @@ public function testSendAnalyticsHit()
$flagshipInstanceId = "flagshipInstanceId";
$decisionManager = new ApiManager($httpClientMock, $config);
$configManager = new ConfigManager($config, $decisionManager, $trackingManagerMock);
- $configManager->setDecisionManager($decisionManager)
- ->setTrackingManager($trackingManagerMock);
+ $configManager->setDecisionManager($decisionManager)->setTrackingManager($trackingManagerMock);
$visitor = new VisitorDelegate(
new Container(),
@@ -1659,27 +2215,11 @@ public function testSendAnalyticsHit()
);
$analytic = new UsageHit();
- $analytic->setLabel(TroubleshootingLabel::SDK_CONFIG)
- ->setLogLevel(LogLevel::INFO)
-
- ->setSdkConfigLogLevel($config->getLogLevel())
- ->setSdkConfigMode($config->getDecisionMode())
- ->setSdkConfigTimeout($config->getTimeout())
- ->setSdkConfigTrackingManagerConfigStrategy($config->getCacheStrategy())
- ->setSdkConfigUsingOnVisitorExposed(!!$config->getOnVisitorExposed())
- ->setSdkConfigUsingCustomHitCache(!!$config->getHitCacheImplementation())
- ->setSdkConfigUsingCustomVisitorCache(!!$config->getVisitorCacheImplementation())
- ->setSdkConfigBucketingUrl($bucketingUrl)
- ->setSdkStatus($visitor->getSdkStatus())
- ->setFlagshipInstanceId($flagshipInstanceId)
- ->setConfig($config)
- ->setVisitorId($flagshipInstanceId);
+ $analytic->setLabel(TroubleshootingLabel::SDK_CONFIG)->setLogLevel(LogLevel::INFO)->setSdkConfigLogLevel($config->getLogLevel())->setSdkConfigMode($config->getDecisionMode())->setSdkConfigTimeout($config->getTimeout())->setSdkConfigTrackingManagerConfigStrategy($config->getCacheStrategy())->setSdkConfigUsingOnVisitorExposed(!!$config->getOnVisitorExposed())->setSdkConfigUsingCustomHitCache(!!$config->getHitCacheImplementation())->setSdkConfigUsingCustomVisitorCache(!!$config->getVisitorCacheImplementation())->setSdkConfigBucketingUrl($bucketingUrl)->setSdkStatus($visitor->getSdkStatus())->setFlagshipInstanceId($flagshipInstanceId)->setConfig($config)->setVisitorId($flagshipInstanceId);
$trackingManagerMock->expects($this->once())->method("addUsageHit")->with($analytic);
- $murmurHashMock->expects($this->exactly(2))
- ->method('murmurHash3Int32')
- ->willReturnOnConsecutiveCalls(10, 0);
+ $murmurHashMock->expects($this->exactly(2))->method('murmurHash3Int32')->willReturnOnConsecutiveCalls(10, 0);
$defaultStrategy = new DefaultStrategy($visitor);
$defaultStrategy->setFlagshipInstanceId($flagshipInstanceId);
diff --git a/tests/Visitor/NoConsentStrategyTest.php b/tests/Visitor/NoConsentStrategyTest.php
index 65f12c8c..ae237ace 100644
--- a/tests/Visitor/NoConsentStrategyTest.php
+++ b/tests/Visitor/NoConsentStrategyTest.php
@@ -45,7 +45,10 @@ public function testMethods()
false,
false,
true,
- ["setTroubleshootingData", 'activateFlag']
+ [
+ "setTroubleshootingData",
+ 'activateFlag',
+ ]
);
$config = new DecisionApiConfig('envId', 'apiKey');
@@ -54,12 +57,11 @@ public function testMethods()
$visitorId = "visitorId";
- $httpClientMock->expects($this->exactly(2))->method("post")
- ->willReturnOnConsecutiveCalls(
- new HttpResponse(200, $this->campaigns()),
- new HttpResponse(500, null)
- );
-
+ $httpClientMock->expects($this->exactly(2))->method("post")->willReturnOnConsecutiveCalls(
+ new HttpResponse(200, $this->campaigns()),
+ new HttpResponse(500, null)
+ );
+
$trackerManager->expects($this->exactly(0))->method("activateFlag");
$decisionManager = new ApiManager($httpClientMock, $config);
@@ -67,25 +69,24 @@ public function testMethods()
$visitor = new VisitorDelegate(new Container(), $configManager, $visitorId, false, [], true);
- $logManagerStub->expects($this->exactly(2))->method('info')
- ->with(
- $this->logicalOr(
- sprintf(
- FlagshipConstant::METHOD_DEACTIVATED_CONSENT_ERROR,
- "sendHit",
- $visitorId
- ),
- sprintf(
- FlagshipConstant::METHOD_DEACTIVATED_CONSENT_ERROR,
- "visitorExposed",
- $visitorId
- )
+ $logManagerStub->expects($this->exactly(2))->method('info')->with(
+ $this->logicalOr(
+ sprintf(
+ FlagshipConstant::METHOD_DEACTIVATED_CONSENT_ERROR,
+ "sendHit",
+ $visitorId
),
- $this->logicalOr(
- [FlagshipConstant::TAG => "sendHit"],
- [FlagshipConstant::TAG => "visitorExposed"]
+ sprintf(
+ FlagshipConstant::METHOD_DEACTIVATED_CONSENT_ERROR,
+ "visitorExposed",
+ $visitorId
)
- );
+ ),
+ $this->logicalOr(
+ [FlagshipConstant::TAG => "sendHit"],
+ [FlagshipConstant::TAG => "visitorExposed"]
+ )
+ );
$noConsentStrategy = new NoConsentStrategy($visitor);
@@ -95,22 +96,24 @@ public function testMethods()
$noConsentStrategy->updateContext($key, $value);
$this->assertSame([
- "sdk_osName" => PHP_OS,
- FlagshipConstant::FS_CLIENT => FlagshipConstant::SDK_LANGUAGE,
- FlagshipConstant::FS_VERSION => FlagshipConstant::SDK_VERSION,
- FlagshipConstant::FS_USERS => $visitorId,
- $key => $value,
- ], $visitor->getContext());
+ "sdk_osName" => PHP_OS,
+ FlagshipConstant::FS_CLIENT => FlagshipConstant::SDK_LANGUAGE,
+ FlagshipConstant::FS_VERSION => FlagshipConstant::SDK_VERSION,
+ FlagshipConstant::FS_USERS => $visitorId,
+ $key => $value,
+ ], $visitor->getContext());
//Test updateContextCollection
$noConsentStrategy->updateContextCollection(['age' => 20]);
$this->assertSame([
- "sdk_osName" => PHP_OS,
- FlagshipConstant::FS_CLIENT => FlagshipConstant::SDK_LANGUAGE,
- FlagshipConstant::FS_VERSION => FlagshipConstant::SDK_VERSION,
- FlagshipConstant::FS_USERS => $visitorId,
- $key => $value, 'age' => 20], $visitor->getContext());
+ "sdk_osName" => PHP_OS,
+ FlagshipConstant::FS_CLIENT => FlagshipConstant::SDK_LANGUAGE,
+ FlagshipConstant::FS_VERSION => FlagshipConstant::SDK_VERSION,
+ FlagshipConstant::FS_USERS => $visitorId,
+ $key => $value,
+ 'age' => 20,
+ ], $visitor->getContext());
//Test clearContext
$noConsentStrategy->clearContext();
@@ -141,27 +144,27 @@ public function testMethods()
$assignmentsHistory[$campaign[FlagshipField::FIELD_ID]] = $variation[FlagshipField::FIELD_ID];
$campaigns[] = [
- FlagshipField::FIELD_CAMPAIGN_ID => $campaign[FlagshipField::FIELD_ID],
- FlagshipField::FIELD_VARIATION_GROUP_ID => $campaign[FlagshipField::FIELD_VARIATION_GROUP_ID],
- FlagshipField::FIELD_VARIATION_ID => $variation[FlagshipField::FIELD_ID],
- FlagshipField::FIELD_IS_REFERENCE => $variation[FlagshipField::FIELD_REFERENCE],
- FlagshipField::FIELD_CAMPAIGN_TYPE => $modifications[FlagshipField::FIELD_CAMPAIGN_TYPE],
- StrategyAbstract::ACTIVATED => false,
- StrategyAbstract::FLAGS => $modifications[FlagshipField::FIELD_VALUE]
- ];
+ FlagshipField::FIELD_CAMPAIGN_ID => $campaign[FlagshipField::FIELD_ID],
+ FlagshipField::FIELD_VARIATION_GROUP_ID => $campaign[FlagshipField::FIELD_VARIATION_GROUP_ID],
+ FlagshipField::FIELD_VARIATION_ID => $variation[FlagshipField::FIELD_ID],
+ FlagshipField::FIELD_IS_REFERENCE => $variation[FlagshipField::FIELD_REFERENCE],
+ FlagshipField::FIELD_CAMPAIGN_TYPE => $modifications[FlagshipField::FIELD_CAMPAIGN_TYPE],
+ StrategyAbstract::ACTIVATED => false,
+ StrategyAbstract::FLAGS => $modifications[FlagshipField::FIELD_VALUE],
+ ];
}
$visitorCache = [
- StrategyAbstract::VERSION => 1,
- StrategyAbstract::DATA => [
- StrategyAbstract::VISITOR_ID => $visitorId,
- StrategyAbstract::ANONYMOUS_ID => $visitor->getAnonymousId(),
- StrategyAbstract::CONSENT => $visitor->hasConsented(),
- StrategyAbstract::CONTEXT => $visitor->getContext(),
- StrategyAbstract::CAMPAIGNS => $campaigns,
- StrategyAbstract::ASSIGNMENTS_HISTORY => $assignmentsHistory
- ]
- ];
+ StrategyAbstract::VERSION => 1,
+ StrategyAbstract::DATA => [
+ StrategyAbstract::VISITOR_ID => $visitorId,
+ StrategyAbstract::ANONYMOUS_ID => $visitor->getAnonymousId(),
+ StrategyAbstract::CONSENT => $visitor->hasConsented(),
+ StrategyAbstract::CONTEXT => $visitor->getContext(),
+ StrategyAbstract::CAMPAIGNS => $campaigns,
+ StrategyAbstract::ASSIGNMENTS_HISTORY => $assignmentsHistory,
+ ],
+ ];
//Test fetchVisitorCampaigns
$visitor->visitorCache = $visitorCache;
@@ -176,14 +179,15 @@ public function testMethods()
true,
true,
true,
- ['lookupVisitor', 'cacheVisitor']
+ [
+ 'lookupVisitor',
+ 'cacheVisitor',
+ ]
);
- $VisitorCacheImplementationMock->expects($this->never())
- ->method("cacheVisitor");
+ $VisitorCacheImplementationMock->expects($this->never())->method("cacheVisitor");
- $VisitorCacheImplementationMock->expects($this->never())
- ->method("lookupVisitor");
+ $VisitorCacheImplementationMock->expects($this->never())->method("lookupVisitor");
$config->setVisitorCacheImplementation($VisitorCacheImplementationMock);
diff --git a/tests/Visitor/NotReadyStrategyTest.php b/tests/Visitor/NotReadyStrategyTest.php
index 26a7183b..adcb4c7f 100644
--- a/tests/Visitor/NotReadyStrategyTest.php
+++ b/tests/Visitor/NotReadyStrategyTest.php
@@ -44,32 +44,29 @@ public function testMethods()
};
- $decisionManager = $this->getMockBuilder(ApiManager::class)
- ->disableOriginalConstructor()
- ->getMock();
+ $decisionManager = $this->getMockBuilder(ApiManager::class)->disableOriginalConstructor()->getMock();
$configManager = new ConfigManager($config, $decisionManager, $trackerManager);
$visitorId = "visitorId";
$visitor = new VisitorDelegate(new Container(), $configManager, $visitorId, false, [], true);
- $logManagerStub->expects($this->exactly(5))->method('error')
- ->with(
- $this->logicalOr(
- $logMessageBuild('sendHit'),
- $logMessageBuild('fetchFlags'),
- $logMessageBuild('getFlagValue'),
- $logMessageBuild('visitorExposed'),
- $logMessageBuild('getFlagMetadata')
- ),
- $this->logicalOr(
- [FlagshipConstant::TAG => 'sendHit'],
- [FlagshipConstant::TAG => 'fetchFlags'],
- [FlagshipConstant::TAG => 'getFlagValue'],
- [FlagshipConstant::TAG => 'visitorExposed'],
- [FlagshipConstant::TAG => 'getFlagMetadata']
- )
- );
+ $logManagerStub->expects($this->exactly(5))->method('error')->with(
+ $this->logicalOr(
+ $logMessageBuild('sendHit'),
+ $logMessageBuild('fetchFlags'),
+ $logMessageBuild('getFlagValue'),
+ $logMessageBuild('visitorExposed'),
+ $logMessageBuild('getFlagMetadata')
+ ),
+ $this->logicalOr(
+ [FlagshipConstant::TAG => 'sendHit'],
+ [FlagshipConstant::TAG => 'fetchFlags'],
+ [FlagshipConstant::TAG => 'getFlagValue'],
+ [FlagshipConstant::TAG => 'visitorExposed'],
+ [FlagshipConstant::TAG => 'getFlagMetadata']
+ )
+ );
$notReadyStrategy = new NotReadyStrategy($visitor);
@@ -81,24 +78,24 @@ public function testMethods()
$this->assertSame([
- "sdk_osName" => PHP_OS,
- FlagshipConstant::FS_CLIENT => FlagshipConstant::SDK_LANGUAGE,
- FlagshipConstant::FS_VERSION => FlagshipConstant::SDK_VERSION,
- FlagshipConstant::FS_USERS => $visitorId,
- $key => $value,
- ], $visitor->getContext());
+ "sdk_osName" => PHP_OS,
+ FlagshipConstant::FS_CLIENT => FlagshipConstant::SDK_LANGUAGE,
+ FlagshipConstant::FS_VERSION => FlagshipConstant::SDK_VERSION,
+ FlagshipConstant::FS_USERS => $visitorId,
+ $key => $value,
+ ], $visitor->getContext());
//Test updateContextCollection
$notReadyStrategy->updateContextCollection(['age' => 20]);
$this->assertSame([
- "sdk_osName" => PHP_OS,
- FlagshipConstant::FS_CLIENT => FlagshipConstant::SDK_LANGUAGE,
- FlagshipConstant::FS_VERSION => FlagshipConstant::SDK_VERSION,
- FlagshipConstant::FS_USERS => $visitorId,
- $key => $value,
- 'age' => 20
- ], $visitor->getContext());
+ "sdk_osName" => PHP_OS,
+ FlagshipConstant::FS_CLIENT => FlagshipConstant::SDK_LANGUAGE,
+ FlagshipConstant::FS_VERSION => FlagshipConstant::SDK_VERSION,
+ FlagshipConstant::FS_USERS => $visitorId,
+ $key => $value,
+ 'age' => 20,
+ ], $visitor->getContext());
//Test clearContext
$notReadyStrategy->clearContext();
@@ -129,14 +126,15 @@ public function testMethods()
true,
true,
true,
- ['lookupVisitor', 'cacheVisitor']
+ [
+ 'lookupVisitor',
+ 'cacheVisitor',
+ ]
);
- $VisitorCacheImplementationMock->expects($this->never())
- ->method("cacheVisitor");
+ $VisitorCacheImplementationMock->expects($this->never())->method("cacheVisitor");
- $VisitorCacheImplementationMock->expects($this->never())
- ->method("lookupVisitor");
+ $VisitorCacheImplementationMock->expects($this->never())->method("lookupVisitor");
$config->setVisitorCacheImplementation($VisitorCacheImplementationMock);
diff --git a/tests/Visitor/PanicStrategyTest.php b/tests/Visitor/PanicStrategyTest.php
index 04bd6112..ee249633 100644
--- a/tests/Visitor/PanicStrategyTest.php
+++ b/tests/Visitor/PanicStrategyTest.php
@@ -70,10 +70,9 @@ public function testMethods()
- $httpClientMock->expects($this->exactly(1))->method("post")
- ->willReturnOnConsecutiveCalls(
- new HttpResponse(500, [])
- );
+ $httpClientMock->expects($this->exactly(1))->method("post")->willReturnOnConsecutiveCalls(
+ new HttpResponse(500, [])
+ );
$decisionManager = new ApiManager($httpClientMock, $config);
@@ -81,29 +80,28 @@ public function testMethods()
$visitor = new VisitorDelegate(new Container(), $configManager, "visitorId", false, [], true);
- $logManagerStub->expects($this->exactly(8))->method('info')
- ->with(
- $this->logicalOr(
- $logMessageBuild('updateContext'),
- $logMessageBuild('updateContextCollection'),
- $logMessageBuild('clearContext'),
- $logMessageBuild('sendHit'),
- $logMessageBuildConsent(),
- $logMessageBuild('getFlagValue'),
- $logMessageBuild('visitorExposed'),
- $logMessageBuild('getFlagMetadata')
- ),
- $this->logicalOr(
- [FlagshipConstant::TAG => 'updateContext'],
- [FlagshipConstant::TAG => 'updateContextCollection'],
- [FlagshipConstant::TAG => 'clearContext'],
- [FlagshipConstant::TAG => 'sendHit'],
- [FlagshipConstant::TAG => 'setConsent'],
- [FlagshipConstant::TAG => 'getFlagValue'],
- [FlagshipConstant::TAG => 'visitorExposed'],
- [FlagshipConstant::TAG => 'getFlagMetadata']
- )
- );
+ $logManagerStub->expects($this->exactly(8))->method('info')->with(
+ $this->logicalOr(
+ $logMessageBuild('updateContext'),
+ $logMessageBuild('updateContextCollection'),
+ $logMessageBuild('clearContext'),
+ $logMessageBuild('sendHit'),
+ $logMessageBuildConsent(),
+ $logMessageBuild('getFlagValue'),
+ $logMessageBuild('visitorExposed'),
+ $logMessageBuild('getFlagMetadata')
+ ),
+ $this->logicalOr(
+ [FlagshipConstant::TAG => 'updateContext'],
+ [FlagshipConstant::TAG => 'updateContextCollection'],
+ [FlagshipConstant::TAG => 'clearContext'],
+ [FlagshipConstant::TAG => 'sendHit'],
+ [FlagshipConstant::TAG => 'setConsent'],
+ [FlagshipConstant::TAG => 'getFlagValue'],
+ [FlagshipConstant::TAG => 'visitorExposed'],
+ [FlagshipConstant::TAG => 'getFlagMetadata']
+ )
+ );
$panicStrategy = new PanicStrategy($visitor);
@@ -144,27 +142,27 @@ public function testMethods()
$assignmentsHistory[$campaign[FlagshipField::FIELD_ID]] = $variation[FlagshipField::FIELD_ID];
$campaigns[] = [
- FlagshipField::FIELD_CAMPAIGN_ID => $campaign[FlagshipField::FIELD_ID],
- FlagshipField::FIELD_VARIATION_GROUP_ID => $campaign[FlagshipField::FIELD_VARIATION_GROUP_ID],
- FlagshipField::FIELD_VARIATION_ID => $variation[FlagshipField::FIELD_ID],
- FlagshipField::FIELD_IS_REFERENCE => $variation[FlagshipField::FIELD_REFERENCE],
- FlagshipField::FIELD_CAMPAIGN_TYPE => $modifications[FlagshipField::FIELD_CAMPAIGN_TYPE],
- StrategyAbstract::ACTIVATED => false,
- StrategyAbstract::FLAGS => $modifications[FlagshipField::FIELD_VALUE]
- ];
+ FlagshipField::FIELD_CAMPAIGN_ID => $campaign[FlagshipField::FIELD_ID],
+ FlagshipField::FIELD_VARIATION_GROUP_ID => $campaign[FlagshipField::FIELD_VARIATION_GROUP_ID],
+ FlagshipField::FIELD_VARIATION_ID => $variation[FlagshipField::FIELD_ID],
+ FlagshipField::FIELD_IS_REFERENCE => $variation[FlagshipField::FIELD_REFERENCE],
+ FlagshipField::FIELD_CAMPAIGN_TYPE => $modifications[FlagshipField::FIELD_CAMPAIGN_TYPE],
+ StrategyAbstract::ACTIVATED => false,
+ StrategyAbstract::FLAGS => $modifications[FlagshipField::FIELD_VALUE],
+ ];
}
$visitorCache = [
- StrategyAbstract::VERSION => 1,
- StrategyAbstract::DATA => [
- StrategyAbstract::VISITOR_ID => $visitor->getVisitorId(),
- StrategyAbstract::ANONYMOUS_ID => $visitor->getAnonymousId(),
- StrategyAbstract::CONSENT => $visitor->hasConsented(),
- StrategyAbstract::CONTEXT => $visitor->getContext(),
- StrategyAbstract::CAMPAIGNS => $campaigns,
- StrategyAbstract::ASSIGNMENTS_HISTORY => $assignmentsHistory
- ]
- ];
+ StrategyAbstract::VERSION => 1,
+ StrategyAbstract::DATA => [
+ StrategyAbstract::VISITOR_ID => $visitor->getVisitorId(),
+ StrategyAbstract::ANONYMOUS_ID => $visitor->getAnonymousId(),
+ StrategyAbstract::CONSENT => $visitor->hasConsented(),
+ StrategyAbstract::CONTEXT => $visitor->getContext(),
+ StrategyAbstract::CAMPAIGNS => $campaigns,
+ StrategyAbstract::ASSIGNMENTS_HISTORY => $assignmentsHistory,
+ ],
+ ];
//Test fetchVisitorCampaigns
$visitor->visitorCache = $visitorCache;
@@ -179,14 +177,15 @@ public function testMethods()
true,
true,
true,
- ['lookupVisitor', 'cacheVisitor']
+ [
+ 'lookupVisitor',
+ 'cacheVisitor',
+ ]
);
- $VisitorCacheImplementationMock->expects($this->never())
- ->method("cacheVisitor");
+ $VisitorCacheImplementationMock->expects($this->never())->method("cacheVisitor");
- $VisitorCacheImplementationMock->expects($this->never())
- ->method("lookupVisitor");
+ $VisitorCacheImplementationMock->expects($this->never())->method("lookupVisitor");
$config->setVisitorCacheImplementation($VisitorCacheImplementationMock);
diff --git a/tests/Visitor/VisitorBuilderTest.php b/tests/Visitor/VisitorBuilderTest.php
index 40d6ce54..b18d5a48 100644
--- a/tests/Visitor/VisitorBuilderTest.php
+++ b/tests/Visitor/VisitorBuilderTest.php
@@ -18,9 +18,7 @@ class VisitorBuilderTest extends TestCase
public function testBuilder()
{
- $trackerManager = $this->getMockBuilder('Flagship\Api\TrackingManager')
- ->onlyMethods(['addHit'])
- ->disableOriginalConstructor()->getMock();
+ $trackerManager = $this->getMockBuilder('Flagship\Api\TrackingManager')->onlyMethods(['addHit'])->disableOriginalConstructor()->getMock();
$container = new Container();
@@ -28,8 +26,7 @@ public function testBuilder()
$hasConsented = true;
$config = new DecisionApiConfig();
- $decisionManager = $this->getMockBuilder('Flagship\Decision\ApiManager')
- ->disableOriginalConstructor()->getMock();
+ $decisionManager = $this->getMockBuilder('Flagship\Decision\ApiManager')->disableOriginalConstructor()->getMock();
$configManager = new ConfigManager($config, $decisionManager, $trackerManager);
$visitor = VisitorBuilder::builder(
@@ -45,23 +42,20 @@ public function testBuilder()
$this->assertNull($visitor->getAnonymousId());
$context = [
- 'age' => 20,
- "sdk_osName" => PHP_OS,
- "sdk_deviceType" => "server",
- FlagshipConstant::FS_CLIENT => FlagshipConstant::SDK_LANGUAGE,
- FlagshipConstant::FS_VERSION => FlagshipConstant::SDK_VERSION,
- FlagshipConstant::FS_USERS => $visitorId,
- ];
+ 'age' => 20,
+ "sdk_osName" => PHP_OS,
+ "sdk_deviceType" => "server",
+ FlagshipConstant::FS_CLIENT => FlagshipConstant::SDK_LANGUAGE,
+ FlagshipConstant::FS_VERSION => FlagshipConstant::SDK_VERSION,
+ FlagshipConstant::FS_USERS => $visitorId,
+ ];
$onFetchFlagsStatusChanged = function (FetchFlagsStatusInterface $fetchFlagsStatus) {
$this->assertSame($fetchFlagsStatus->getStatus(), FSFetchStatus::FETCH_REQUIRED);
$this->assertSame($fetchFlagsStatus->getReason(), FSFetchReason::VISITOR_CREATED);
};
- $visitor = VisitorBuilder::builder($visitorId, $hasConsented, $configManager, $container, "instanceId")
- ->setIsAuthenticated(true)
- ->setOnFetchFlagsStatusChanged($onFetchFlagsStatusChanged)
- ->setContext($context)->build();
+ $visitor = VisitorBuilder::builder($visitorId, $hasConsented, $configManager, $container, "instanceId")->setIsAuthenticated(true)->setOnFetchFlagsStatusChanged($onFetchFlagsStatusChanged)->setContext($context)->build();
$this->assertSame($context, $visitor->getContext());
$this->assertTrue($visitor->hasConsented());
diff --git a/tests/Visitor/VisitorDelegateTest.php b/tests/Visitor/VisitorDelegateTest.php
index 924953a9..16df8216 100644
--- a/tests/Visitor/VisitorDelegateTest.php
+++ b/tests/Visitor/VisitorDelegateTest.php
@@ -28,20 +28,23 @@ class VisitorDelegateTest extends TestCase
{
public function testVisitorDelegateConstruct()
{
- $configData = ['envId' => 'env_value', 'apiKey' => 'key_value'];
+ $configData = [
+ 'envId' => 'env_value',
+ 'apiKey' => 'key_value',
+ ];
$config = new DecisionApiConfig($configData['envId'], $configData['apiKey']);
$visitorId = "visitor_id";
$newVisitorId = 'new_visitor_id';
$ageKey = 'age';
$visitorContext = [
- 'name' => 'visitor_name',
- 'age' => 25,
- "sdk_osName" => PHP_OS,
- "sdk_deviceType" => "server",
- FlagshipConstant::FS_CLIENT => FlagshipConstant::SDK_LANGUAGE,
- FlagshipConstant::FS_VERSION => FlagshipConstant::SDK_VERSION,
- FlagshipConstant::FS_USERS => $visitorId,
- ];
+ 'name' => 'visitor_name',
+ 'age' => 25,
+ "sdk_osName" => PHP_OS,
+ "sdk_deviceType" => "server",
+ FlagshipConstant::FS_CLIENT => FlagshipConstant::SDK_LANGUAGE,
+ FlagshipConstant::FS_VERSION => FlagshipConstant::SDK_VERSION,
+ FlagshipConstant::FS_USERS => $visitorId,
+ ];
$trackerManager = $this->getMockForAbstractClass(
TrackingManagerAbstract::class,
@@ -50,8 +53,7 @@ public function testVisitorDelegateConstruct()
false
);
- $decisionManager = $this->getMockBuilder(ApiManager::class)
- ->disableOriginalConstructor()->getMock();
+ $decisionManager = $this->getMockBuilder(ApiManager::class)->disableOriginalConstructor()->getMock();
$configManager = new ConfigManager($config, $decisionManager, $trackerManager);
@@ -72,23 +74,17 @@ public function testVisitorDelegateConstruct()
$containerMock->method('get')->will($this->returnCallback($containerGetMethod));
$consentHit = new Event(EventCategory::USER_ENGAGEMENT, FlagshipConstant::FS_CONSENT);
- $consentHit->setLabel(FlagshipConstant::SDK_LANGUAGE . ":" . "false")
- ->setConfig($config)
- ->setVisitorId($visitorId);
+ $consentHit->setLabel(FlagshipConstant::SDK_LANGUAGE . ":" . "false")->setConfig($config)->setVisitorId($visitorId);
$consentHit2 = new Event(EventCategory::USER_ENGAGEMENT, FlagshipConstant::FS_CONSENT);
- $consentHit2->setLabel(FlagshipConstant::SDK_LANGUAGE . ":" . "true")
- ->setConfig($config)
- ->setVisitorId($newVisitorId);
-
- $trackerManager->expects($this->exactly(2))
- ->method('addHit')
- ->with(
- $this->logicalOr(
- $this->equalTo($consentHit),
- $this->equalTo($consentHit2)
- )
- );
+ $consentHit2->setLabel(FlagshipConstant::SDK_LANGUAGE . ":" . "true")->setConfig($config)->setVisitorId($newVisitorId);
+
+ $trackerManager->expects($this->exactly(2))->method('addHit')->with(
+ $this->logicalOr(
+ $this->equalTo($consentHit),
+ $this->equalTo($consentHit2)
+ )
+ );
$visitorDelegate = new VisitorDelegate($containerMock, $configManager, $visitorId, false, $visitorContext);
@@ -133,7 +129,10 @@ public function testVisitorDelegateConstruct()
public function testSetAnonymous()
{
- $configData = ['envId' => 'env_value', 'apiKey' => 'key_value'];
+ $configData = [
+ 'envId' => 'env_value',
+ 'apiKey' => 'key_value',
+ ];
$config = new DecisionApiConfig($configData['envId'], $configData['apiKey']);
$visitorId = "visitor_id";
@@ -144,8 +143,7 @@ public function testSetAnonymous()
false
);
- $decisionManager = $this->getMockBuilder(ApiManager::class)
- ->disableOriginalConstructor()->getMock();
+ $decisionManager = $this->getMockBuilder(ApiManager::class)->disableOriginalConstructor()->getMock();
$configManager = new ConfigManager($config, $decisionManager, $trackerManager);
@@ -176,16 +174,19 @@ public function testSetVisitorLog()
['error']
);
- $configData = ['envId' => 'env_value', 'apiKey' => 'key_value'];
+ $configData = [
+ 'envId' => 'env_value',
+ 'apiKey' => 'key_value',
+ ];
$config = new DecisionApiConfig($configData['envId'], $configData['apiKey']);
$config->setLogManager($logManagerStub);
$visitorId = "visitor_id";
$visitorContext = [
- 'name' => 'visitor_name',
- 'age' => 25
- ];
+ 'name' => 'visitor_name',
+ 'age' => 25,
+ ];
$trackerManager = $this->getMockForAbstractClass(
TrackingManagerAbstract::class,
@@ -194,8 +195,7 @@ public function testSetVisitorLog()
false
);
- $decisionManager = $this->getMockBuilder(ApiManager::class)
- ->disableOriginalConstructor()->getMock();
+ $decisionManager = $this->getMockBuilder(ApiManager::class)->disableOriginalConstructor()->getMock();
$configManager = new ConfigManager($config, $decisionManager, $trackerManager);
@@ -209,11 +209,10 @@ public function testSetVisitorLog()
);
$flagshipSdk = FlagshipConstant::FLAGSHIP_SDK;
- $logManagerStub->expects($this->once())
- ->method('error')->with(
- FlagshipConstant::VISITOR_ID_ERROR,
- [FlagshipConstant::TAG => "setVisitorId"]
- );
+ $logManagerStub->expects($this->once())->method('error')->with(
+ FlagshipConstant::VISITOR_ID_ERROR,
+ [FlagshipConstant::TAG => "setVisitorId"]
+ );
$visitorDelegate->setVisitorId('');
}
public function testMethods()
@@ -227,14 +226,17 @@ public function testMethods()
true,
['error']
);
- $configData = ['envId' => 'env_value', 'apiKey' => 'key_value'];
+ $configData = [
+ 'envId' => 'env_value',
+ 'apiKey' => 'key_value',
+ ];
$config = new DecisionApiConfig($configData['envId'], $configData['apiKey']);
$visitorId = "visitor_id";
$visitorContext = [
- 'name' => 'visitor_name',
- 'age' => 25
- ];
+ 'name' => 'visitor_name',
+ 'age' => 25,
+ ];
$trackerManager = $this->getMockForAbstractClass(
TrackingManagerAbstract::class,
@@ -243,35 +245,30 @@ public function testMethods()
false
);
- $decisionManager = $this->getMockBuilder(ApiManager::class)
- ->disableOriginalConstructor()->getMock();
+ $decisionManager = $this->getMockBuilder(ApiManager::class)->disableOriginalConstructor()->getMock();
$configManager = new ConfigManager($config, $decisionManager, $trackerManager);
$containerMock = $this->getMockBuilder(
'Flagship\Utils\Container'
- )->onlyMethods(['get'])
- ->disableOriginalConstructor()
- ->getMock();
-
- $defaultStrategy = $this->getMockBuilder('Flagship\Visitor\DefaultStrategy')
- ->onlyMethods([
- 'initialContext',
- 'updateContext',
- 'updateContextCollection',
- "cacheVisitor",
- 'clearContext',
- 'authenticate',
- 'unauthenticate',
- 'setConsent',
- 'sendHit',
- 'fetchFlags',
- 'visitorExposed',
- 'getFlagValue',
- 'getFlagMetadata',
- 'lookupVisitor'
- ])->disableOriginalConstructor()
- ->getMock();
+ )->onlyMethods(['get'])->disableOriginalConstructor()->getMock();
+
+ $defaultStrategy = $this->getMockBuilder('Flagship\Visitor\DefaultStrategy')->onlyMethods([
+ 'initialContext',
+ 'updateContext',
+ 'updateContextCollection',
+ "cacheVisitor",
+ 'clearContext',
+ 'authenticate',
+ 'unauthenticate',
+ 'setConsent',
+ 'sendHit',
+ 'fetchFlags',
+ 'visitorExposed',
+ 'getFlagValue',
+ 'getFlagMetadata',
+ 'lookupVisitor',
+ ])->disableOriginalConstructor()->getMock();
$containerMock->method('get')->willReturn($defaultStrategy);
@@ -279,28 +276,22 @@ public function testMethods()
$visitor = new VisitorDelegate($containerMock, $configManager, $visitorId, false, $visitorContext, true);
- $defaultContext = [
- FlagshipContext::OS_NAME => PHP_OS,
- ];
+ $defaultContext = [FlagshipContext::OS_NAME => PHP_OS];
//test SetContext
- $defaultStrategy->expects($this->exactly(2))
- ->method('updateContextCollection')
- ->with(
- $this->logicalOr(
- $visitorContext,
- $defaultContext
- )
- );
+ $defaultStrategy->expects($this->exactly(2))->method('updateContextCollection')->with(
+ $this->logicalOr(
+ $visitorContext,
+ $defaultContext
+ )
+ );
$visitor->setContext($visitorContext);
//test updateContext
$key = "age";
$value = 20;
- $defaultStrategy->expects($this->once())
- ->method('updateContext')
- ->with($key, $value);
+ $defaultStrategy->expects($this->once())->method('updateContext')->with($key, $value);
$visitor->updateContext($key, $value);
@@ -314,8 +305,7 @@ public function testMethods()
//Test authenticate
$newVisitorId = "newVisitorId";
- $defaultStrategy->expects($this->once())->method('authenticate')
- ->with($newVisitorId);
+ $defaultStrategy->expects($this->once())->method('authenticate')->with($newVisitorId);
$visitor->authenticate($newVisitorId);
//Test unauthenticate
@@ -325,8 +315,7 @@ public function testMethods()
//Test sendHit
$hit = new Page("http://localhost");
- $defaultStrategy->expects($this->once())
- ->method('sendHit')->with($hit);
+ $defaultStrategy->expects($this->once())->method('sendHit')->with($hit);
$visitor->sendHit($hit);
@@ -337,39 +326,27 @@ public function testMethods()
//Test userExposed
$key = 'key';
$flagDTO = new FlagDTO();
- $defaultStrategy->expects($this->once())->method('visitorExposed')
- ->with($key, true, $flagDTO);
+ $defaultStrategy->expects($this->once())->method('visitorExposed')->with($key, true, $flagDTO);
$visitor->visitorExposed($key, true, $flagDTO);
//Test getFlagValue
$flagDTO = new FlagDTO();
$defaultValue = "defaultValue";
- $defaultStrategy->expects($this->once())
- ->method('getFlagValue')
- ->with($key, $defaultValue, $flagDTO, true);
+ $defaultStrategy->expects($this->once())->method('getFlagValue')->with($key, $defaultValue, $flagDTO, true);
$visitor->getFlagValue($key, $defaultValue, $flagDTO);
//Test getFlagMetadata
$flagDTO = new FlagDTO();
- $defaultStrategy->expects($this->exactly(1))
- ->method('getFlagMetadata')
- ->with($key, $flagDTO);
+ $defaultStrategy->expects($this->exactly(1))->method('getFlagMetadata')->with($key, $flagDTO);
$visitor->getFlagMetadata($key, $flagDTO);
//Test getFlag
$flagDTO = new FlagDTO();
- $flagDTO->setKey("key1")
- ->setCampaignId('campaignID')
- ->setVariationGroupId("varGroupID")
- ->setVariationId('varID')
- ->setIsReference(true)->setValue("value")
- ->setCampaignType("ab");
-
- $flagsDTO = [
- $flagDTO
- ];
+ $flagDTO->setKey("key1")->setCampaignId('campaignID')->setVariationGroupId("varGroupID")->setVariationId('varID')->setIsReference(true)->setValue("value")->setCampaignType("ab");
+
+ $flagsDTO = [$flagDTO];
$visitor->setFlagsDTO($flagsDTO);
$flag = $visitor->getFlag('key1');
@@ -405,13 +382,13 @@ public function testJson()
$config = new DecisionApiConfig();
$visitorId = "visitor_id";
$context = [
- "age" => 20,
- "sdk_osName" => PHP_OS,
- "sdk_deviceType" => "server",
- FlagshipConstant::FS_CLIENT => FlagshipConstant::SDK_LANGUAGE,
- FlagshipConstant::FS_VERSION => FlagshipConstant::SDK_VERSION,
- FlagshipConstant::FS_USERS => $visitorId,
- ];
+ "age" => 20,
+ "sdk_osName" => PHP_OS,
+ "sdk_deviceType" => "server",
+ FlagshipConstant::FS_CLIENT => FlagshipConstant::SDK_LANGUAGE,
+ FlagshipConstant::FS_VERSION => FlagshipConstant::SDK_VERSION,
+ FlagshipConstant::FS_USERS => $visitorId,
+ ];
$trackerManager = $this->getMockForAbstractClass(
TrackingManagerAbstract::class,
[],
@@ -419,18 +396,17 @@ public function testJson()
false
);
- $decisionManager = $this->getMockBuilder(ApiManager::class)
- ->disableOriginalConstructor()->getMock();
+ $decisionManager = $this->getMockBuilder(ApiManager::class)->disableOriginalConstructor()->getMock();
$configManager = new ConfigManager($config, $decisionManager, $trackerManager);
$visitorDelegate = new VisitorDelegate(new Container(), $configManager, $visitorId, false, $context, true);
$this->assertJsonStringEqualsJsonString(
json_encode([
- 'visitorId' => $visitorId,
- 'context' => $context,
- 'hasConsent' => true
- ]),
+ 'visitorId' => $visitorId,
+ 'context' => $context,
+ 'hasConsent' => true,
+ ]),
json_encode($visitorDelegate)
);
}
@@ -449,16 +425,13 @@ public function testGetStrategy()
$setStatusMethod = Utils::getMethod($instance, 'setStatus');
$setStatusMethod->invoke($instance, FSSdkStatus::SDK_NOT_INITIALIZED);
- $trackerManager = $this->getMockBuilder('Flagship\Api\TrackingManager')
- ->onlyMethods(['addHit'])
- ->disableOriginalConstructor()->getMock();
+ $trackerManager = $this->getMockBuilder('Flagship\Api\TrackingManager')->onlyMethods(['addHit'])->disableOriginalConstructor()->getMock();
$config = new DecisionApiConfig();
$visitorId = "visitor_id";
$context = ["age" => 20];
- $decisionManager = $this->getMockBuilder(ApiManager::class)
- ->disableOriginalConstructor()->getMock();
+ $decisionManager = $this->getMockBuilder(ApiManager::class)->disableOriginalConstructor()->getMock();
$configManager = new ConfigManager($config, $decisionManager, $trackerManager);
$visitorDelegate = new VisitorDelegate(new Container(), $configManager, $visitorId, false, $context);
diff --git a/tests/Visitor/VisitorTest.php b/tests/Visitor/VisitorTest.php
index e3b77033..c82f2d6d 100644
--- a/tests/Visitor/VisitorTest.php
+++ b/tests/Visitor/VisitorTest.php
@@ -26,13 +26,16 @@ class VisitorTest extends TestCase
*/
public function testConstruct()
{
- $configData = ['envId' => 'env_value', 'apiKey' => 'key_value'];
+ $configData = [
+ 'envId' => 'env_value',
+ 'apiKey' => 'key_value',
+ ];
$config = new DecisionApiConfig($configData['envId'], $configData['apiKey']);
$visitorId = "visitor_id";
$visitorContext = [
- 'name' => 'visitor_name',
- 'age' => 25
- ];
+ 'name' => 'visitor_name',
+ 'age' => 25,
+ ];
$trackerManager = new TrackingManager($config, new HttpClient());
@@ -64,43 +67,47 @@ public function testConstruct()
public function testMethods()
{
- $configData = ['envId' => 'env_value', 'apiKey' => 'key_value'];
+ $configData = [
+ 'envId' => 'env_value',
+ 'apiKey' => 'key_value',
+ ];
$config = new DecisionApiConfig($configData['envId'], $configData['apiKey']);
$visitorId = "visitor_id";
$visitorContext = [
- 'name' => 'visitor_name',
- 'age' => 25
- ];
+ 'name' => 'visitor_name',
+ 'age' => 25,
+ ];
- $trackerManager = $this->getMockBuilder(TrackingManager::class)
- ->onlyMethods(['addHit'])
- ->disableOriginalConstructor()->getMock();
+ $trackerManager = $this->getMockBuilder(TrackingManager::class)->onlyMethods(['addHit'])->disableOriginalConstructor()->getMock();
- $decisionManagerMock = $this->getMockBuilder(ApiManager::class)
- ->disableOriginalConstructor()->getMock();
+ $decisionManagerMock = $this->getMockBuilder(ApiManager::class)->disableOriginalConstructor()->getMock();
$configManager = new ConfigManager($config, $decisionManagerMock, $trackerManager);
- $visitorDelegateMock = $this->getMockBuilder('Flagship\Visitor\VisitorDelegate')
- ->onlyMethods([
- 'getContext',
- 'setContext',
- 'updateContext',
- 'updateContextCollection',
- 'clearContext',
- 'authenticate',
- 'unauthenticate',
- 'getAnonymousId',
- 'sendHit',
- 'fetchFlags',
- 'getFlag',
- 'getFlags',
- 'getFlagsDTO',
- "getFetchStatus",
- "setOnFetchFlagsStatusChanged"
- ])
- ->setConstructorArgs([new Container(), $configManager,
- $visitorId, false, $visitorContext, true])->getMock();
+ $visitorDelegateMock = $this->getMockBuilder('Flagship\Visitor\VisitorDelegate')->onlyMethods([
+ 'getContext',
+ 'setContext',
+ 'updateContext',
+ 'updateContextCollection',
+ 'clearContext',
+ 'authenticate',
+ 'unauthenticate',
+ 'getAnonymousId',
+ 'sendHit',
+ 'fetchFlags',
+ 'getFlag',
+ 'getFlags',
+ 'getFlagsDTO',
+ "getFetchStatus",
+ "setOnFetchFlagsStatusChanged",
+ ])->setConstructorArgs([
+ new Container(),
+ $configManager,
+ $visitorId,
+ false,
+ $visitorContext,
+ true,
+ ])->getMock();
$visitor = new Visitor($visitorDelegateMock);
@@ -109,25 +116,19 @@ public function testMethods()
$visitor->getContext();
//test SetContext
- $visitorDelegateMock->expects($this->once())
- ->method('setContext')
- ->with($visitorContext);
+ $visitorDelegateMock->expects($this->once())->method('setContext')->with($visitorContext);
$visitor->setContext($visitorContext);
//test updateContext
$key = "age";
$value = 20;
- $visitorDelegateMock->expects($this->once())
- ->method('updateContext')
- ->with($key, $value);
+ $visitorDelegateMock->expects($this->once())->method('updateContext')->with($key, $value);
$visitor->updateContext($key, $value);
//test updateContextCollection
- $visitorDelegateMock->expects($this->once())
- ->method('updateContextCollection')
- ->with($visitorContext);
+ $visitorDelegateMock->expects($this->once())->method('updateContextCollection')->with($visitorContext);
$visitor->updateContextCollection($visitorContext);
@@ -141,8 +142,7 @@ public function testMethods()
//Test authenticate
$newVisitorId = "newVisitorId";
- $visitorDelegateMock->expects($this->once())->method('authenticate')
- ->with($newVisitorId);
+ $visitorDelegateMock->expects($this->once())->method('authenticate')->with($newVisitorId);
$visitor->authenticate($newVisitorId);
//Test unauthenticate
@@ -151,36 +151,28 @@ public function testMethods()
//Test sendHit
$hit = new Page("http://localhost");
- $visitorDelegateMock->expects($this->once())
- ->method('sendHit')->with($hit);
+ $visitorDelegateMock->expects($this->once())->method('sendHit')->with($hit);
$visitor->sendHit($hit);
//Test fetchFlags
- $visitorDelegateMock->expects($this->once())
- ->method('fetchFlags');
+ $visitorDelegateMock->expects($this->once())->method('fetchFlags');
$visitor->fetchFlags();
//Test getFlag
$key = 'key';
- $visitorDelegateMock->expects($this->once())
- ->method('getFlag')
- ->with($key)->willReturn(new FSFlag($key, null));
+ $visitorDelegateMock->expects($this->once())->method('getFlag')->with($key)->willReturn(new FSFlag($key, null));
$visitor->getFlag($key);
//Test getFlags
- $visitorDelegateMock->expects($this->once())
- ->method('getFlags')
- ->willReturn(new FSFlagCollection(null));
+ $visitorDelegateMock->expects($this->once())->method('getFlags')->willReturn(new FSFlagCollection(null));
$visitor->getFlags();
//Test getFetchStatus
- $visitorDelegateMock->expects($this->once())
- ->method('getFetchStatus')
- ->willReturn(new FetchFlagsStatus(FSFetchStatus::FETCHED, FSFetchReason::NONE));
+ $visitorDelegateMock->expects($this->once())->method('getFetchStatus')->willReturn(new FetchFlagsStatus(FSFetchStatus::FETCHED, FSFetchReason::NONE));
$fetchStatus = $visitor->getFetchStatus();
$this->assertInstanceOf(FetchFlagsStatus::class, $fetchStatus);
}
@@ -190,19 +182,16 @@ public function testJson()
$config = new DecisionApiConfig();
$visitorId = "visitor_id";
$context = [
- "age" => 20,
- "sdk_osName" => PHP_OS,
- "sdk_deviceType" => "server",
- FlagshipConstant::FS_CLIENT => FlagshipConstant::SDK_LANGUAGE,
- FlagshipConstant::FS_VERSION => FlagshipConstant::SDK_VERSION,
- FlagshipConstant::FS_USERS => $visitorId,
- ];
- $trackerManager = $this->getMockBuilder(TrackingManager::class)
- ->onlyMethods(['addHit'])
- ->disableOriginalConstructor()->getMock();
-
- $decisionManagerMock = $this->getMockBuilder(ApiManager::class)
- ->disableOriginalConstructor()->getMock();
+ "age" => 20,
+ "sdk_osName" => PHP_OS,
+ "sdk_deviceType" => "server",
+ FlagshipConstant::FS_CLIENT => FlagshipConstant::SDK_LANGUAGE,
+ FlagshipConstant::FS_VERSION => FlagshipConstant::SDK_VERSION,
+ FlagshipConstant::FS_USERS => $visitorId,
+ ];
+ $trackerManager = $this->getMockBuilder(TrackingManager::class)->onlyMethods(['addHit'])->disableOriginalConstructor()->getMock();
+
+ $decisionManagerMock = $this->getMockBuilder(ApiManager::class)->disableOriginalConstructor()->getMock();
$configManager = new ConfigManager($config, $decisionManagerMock, $trackerManager);
$visitorDelegate = new VisitorDelegate(new Container(), $configManager, $visitorId, false, $context, true);
@@ -211,10 +200,10 @@ public function testJson()
$this->assertJsonStringEqualsJsonString(
json_encode([
- 'visitorId' => $visitorId,
- 'context' => $context,
- 'hasConsent' => true
- ]),
+ 'visitorId' => $visitorId,
+ 'context' => $context,
+ 'hasConsent' => true,
+ ]),
json_encode($visitor)
);
}