Files
git-contribution-graph/tests/Unit/Service/ContributionStoreTest.php

114 lines
3.0 KiB
PHP

<?php
declare(strict_types=1);
namespace GitContributionGraph\Tests\Unit\Service;
use GitContributionGraph\Service\ContributionStore;
use PHPUnit\Framework\Attributes\Test;
use PHPUnit\Framework\TestCase;
final class ContributionStoreTest extends TestCase
{
#[Test]
public function it_stores_and_retrieves_a_contribution(): void
{
$store = new ContributionStore(':memory:');
$store->add('github', 1_700_000_000, 4);
$all = $store->all('github');
$this->assertCount(1, $all);
$this->assertSame(4, iterator_to_array($all)[0]->count);
}
#[Test]
public function it_upserts_on_a_repeated_date(): void
{
$store = new ContributionStore(':memory:');
$store->add('github', 1_700_000_000, 4);
$store->add('github', 1_700_000_000, 9);
$all = $store->all('github');
$this->assertCount(1, $all);
$this->assertSame(9, iterator_to_array($all)[0]->count);
}
#[Test]
public function it_removes_a_contribution(): void
{
$store = new ContributionStore(':memory:');
$store->add('github', 1_700_000_000, 4);
$store->remove('github', 1_700_000_000);
$this->assertCount(0, $store->all('github'));
}
#[Test]
public function it_merges_a_batch_of_date_counts(): void
{
$store = new ContributionStore(':memory:');
$store->merge('github', [1_700_000_000 => 1, 1_700_086_400 => 2]);
$this->assertCount(2, $store->all('github'));
}
#[Test]
public function it_reports_the_latest_date_for_a_provider(): void
{
$store = new ContributionStore(':memory:');
$store->add('github', 1_700_000_000, 1);
$store->add('github', 1_700_086_400, 2);
$this->assertSame(1_700_086_400, $store->latestDate('github'));
}
#[Test]
public function it_returns_null_latest_date_when_provider_has_no_rows(): void
{
$store = new ContributionStore(':memory:');
$this->assertNull($store->latestDate('github'));
}
#[Test]
public function it_filters_all_by_since_days(): void
{
$store = new ContributionStore(':memory:');
$now = time();
$store->add('github', $now - 10 * 86400, 1);
$store->add('github', $now - 400 * 86400, 2);
$this->assertCount(1, $store->all('github', sinceDays: 30));
}
#[Test]
public function it_does_not_prune_when_retention_is_unset(): void
{
$store = new ContributionStore(':memory:', retentionDays: null);
$store->add('github', time() - 1_000 * 86400, 1);
$store->prune();
$this->assertCount(1, $store->all('github'));
}
#[Test]
public function it_prunes_rows_older_than_the_retention_window(): void
{
$store = new ContributionStore(':memory:', retentionDays: 30);
$now = time();
$store->add('github', $now - 10 * 86400, 1);
$store->add('github', $now - 40 * 86400, 2);
$store->prune();
$this->assertCount(1, $store->all('github'));
}
}