Skip to content

Commit

Permalink
Merge pull request #3 from mascam97/feature/add-should-track-events-p…
Browse files Browse the repository at this point in the history
…roperty

feat: add shouldTrackEvents property
  • Loading branch information
mascam97 authored Aug 1, 2024
2 parents b20f3ab + 09dd3b2 commit d354d83
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 1 deletion.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added

- Add `shouldTrackEvents` property

## [1.0.1] - 2024-04-26

### Changed
Expand Down
19 changes: 18 additions & 1 deletion src/Trackers/MixpanelTracker.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@

namespace Placetopay\AnalyticsTracker\Trackers;

use Closure;
use Mixpanel;
use Placetopay\AnalyticsTracker\Contracts\AnalyticsTracker;

class MixpanelTracker implements AnalyticsTracker
{
private ?Mixpanel $mixpanel = null;
private array $defaultPayload = [];
private ?Closure $shouldTrackEvents = null;

public function __construct()
{
Expand All @@ -26,7 +28,16 @@ public function __construct()

public function track(string $label, array $payload = []): void
{
$this->mixpanel?->track($label, array_merge($this->defaultPayload, $payload));
if ($this->shouldTrack($label, $payload)) {
$this->mixpanel?->track($label, array_merge($this->defaultPayload, $payload));
}
}

private function shouldTrack(string $label, array $payload = [])
{
return is_callable($this->shouldTrackEvents)
? ($this->shouldTrackEvents)($label, $payload)
: true;
}

public function setDefaultPayload(array $payload): self
Expand All @@ -35,6 +46,12 @@ public function setDefaultPayload(array $payload): self
return $this;
}

public function shouldTrackEvents(callable $shouldTrackEvents): self
{
$this->shouldTrackEvents = Closure::fromCallable($shouldTrackEvents);
return $this;
}

private function enabled(): bool
{
return config('analytics-tracker.mixpanel.enabled');
Expand Down
63 changes: 63 additions & 0 deletions tests/Unit/Trackers/MixpanelTrackerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,69 @@ public function it_does_not_track_when_disabled(): void
$mixpanelTracker->track($label);
}

/**
* @test
*/
public function it_decides_to_track_events_with_function(): void
{
$mixpanelMock = $this->createMock(Mixpanel::class);
$mixpanelMock->expects($this->once())
->method('track')
->with('EventTracked', ['prop1' => 'value1']);

$this->app->offsetSet(Mixpanel::class, $mixpanelMock);

$shouldTrackEvent = function (string $label, array $payload) {
$this->assertArrayHasKey('prop1', $payload);

return $label === 'EventTracked';
};

$mixpanelTracker = (new MixpanelTracker())->shouldTrackEvents($shouldTrackEvent);
$mixpanelTracker->track('EventDropped', ['prop1' => 'value1']);
$mixpanelTracker->track('EventTracked', ['prop1' => 'value1']);
}

/**
* @test
*/
public function it_decides_to_track_events_with_an_invokable(): void
{
$mixpanelMock = $this->createMock(Mixpanel::class);
$mixpanelMock->expects($this->once())
->method('track')
->with('EventTracked', ['prop1' => 'value1']);

$this->app->offsetSet(Mixpanel::class, $mixpanelMock);

$shouldTrackEvent = new class {
public function __invoke(string $label, array $payload)
{
return $label === 'EventTracked';
}
};

$mixpanelTracker = (new MixpanelTracker())->shouldTrackEvents($shouldTrackEvent);
$mixpanelTracker->track('EventDropped', ['prop1' => 'value1']);
$mixpanelTracker->track('EventTracked', ['prop1' => 'value1']);
}

/**
* @test
*/
public function it_does_not_track_when_should_not_track_events(): void
{
$mixpanelMock = $this->createMock(Mixpanel::class);
$mixpanelMock->expects($this->never())
->method('track')
->with('EventDropped', ['prop1' => 'value1']);

$this->app->offsetSet(Mixpanel::class, $mixpanelMock);

$mixpanelTracker = (new MixpanelTracker())->shouldTrackEvents(fn () => false);
$mixpanelTracker->track('EventDropped', ['prop1' => 'value1']);
}

/**
* @test
*/
Expand Down

0 comments on commit d354d83

Please sign in to comment.