Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 5 additions & 14 deletions app/Metrics/App/WikiMetrics.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ public function saveMetrics(Wiki $wiki): void {
$this->wiki = $wiki;

$today = now()->format('Y-m-d');
$oldRecord = WikiDailyMetrics::where('wiki_id', $wiki->id)->latest('date')->first();
$tripleCount = $this->getNumOfTriples();
$todayPageCount = $wiki->wikiSiteStats()->first()->pages ?? 0;
$isDeleted = (bool) $wiki->deleted_at;
Expand Down Expand Up @@ -58,20 +57,12 @@ public function saveMetrics(Wiki $wiki): void {
'total_user_count' => $numberOfUsersPerWiki,
]);

// compare current record to old record and only save if there is a change
if ($oldRecord) {
if ($oldRecord->is_deleted) {
Log::info("Wiki is deleted, no new record for Wiki ID {$wiki->id}.");
// compare current record to previous record and only save if there is a change
$previousRecord = WikiDailyMetrics::where('wiki_id', $wiki->id)->latest('date')->first();
if ($previousRecord?->areMetricsEqual($dailyMetrics)) {
Log::info("Record unchanged for Wiki ID {$wiki->id}, no new record added.");

return;
}
if (!$isDeleted) {
if ($oldRecord->areMetricsEqual($dailyMetrics)) {
Log::info("Record unchanged for Wiki ID {$wiki->id}, no new record added.");

return;
}
}
return;
}

$dailyMetrics->save();
Expand Down
75 changes: 70 additions & 5 deletions tests/Metrics/WikiMetricsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public function testSuccessfullyAddRecords() {
]);
}

public function testDoesNotAddDuplicateRecordsWithOnlyDateChange() {
public function testNoDuplicateRecordsWithOnlyDateChange() {
$wiki = Wiki::factory()->create([
'domain' => 'thisfake.wikibase.cloud',
]);
Expand All @@ -57,45 +57,110 @@ public function testDoesNotAddDuplicateRecordsWithOnlyDateChange() {
'pages' => 0,
'is_deleted' => 0,
]);

// Run saveMetrics()
(new WikiMetrics)->saveMetrics($wiki);

// Assert No new record was created for today
// Assert no new record was created for today
$this->assertDatabaseMissing('wiki_daily_metrics', [
'wiki_id' => $wiki->id,
'date' => Carbon::today()->toDateString(),
]);
}

public function testAddRecordsWikiIsDeleted() {
public function testRecordCreatedWhenWikiFirstDeleted() {
$wiki = Wiki::factory()->create([
'domain' => 'thisfake.wikibase.cloud',
]);

$wikiDb = WikiDb::first();
$wikiDb->update(['wiki_id' => $wiki->id]);

$wikiSiteStats = $wiki->wikiSiteStats()->create();
$wikiSiteStats->update([
'pages' => 10,
'users' => 5,
]);

// Insert an old metric value for a wiki
WikiDailyMetrics::create([
'id' => $wiki->id . '_' . Carbon::yesterday()->toDateString(),
'wiki_id' => $wiki->id,
'date' => Carbon::yesterday()->toDateString(),
'pages' => 0,
'is_deleted' => 0,
'total_user_count' => null,
]);

// Delete the wiki
$wiki->delete();
$wiki->save();

// Run saveMetrics()
(new WikiMetrics)->saveMetrics($wiki);

// Assert new record was created for newly deleted wiki
$this->assertDatabaseHas('wiki_daily_metrics', [
'wiki_id' => $wiki->id,
'is_deleted' => 1,
'total_user_count' => 5,
'date' => now()->toDateString(),
]);
// delete the wiki
}

public function testNoDuplicateRecordsForDeletedWiki() {
$wiki = Wiki::factory()->create([
'domain' => 'thisfake.wikibase.cloud',
]);
$wikiDb = WikiDb::first();
$wikiDb->update(['wiki_id' => $wiki->id]);

// Delete the wiki
$wiki->delete();
$wiki->save();

// Create an old metric record for the wiki
WikiDailyMetrics::create([
'id' => $wiki->id . '_' . Carbon::yesterday()->toDateString(),
'wiki_id' => $wiki->id,
'date' => Carbon::yesterday()->toDateString(),
'pages' => 0,
'is_deleted' => 1,
]);

// Run saveMetrics()
(new WikiMetrics)->saveMetrics($wiki);

// Assert No new record was created for today
// Assert no new record was created for previously deleted wiki
$this->assertDatabaseMissing('wiki_daily_metrics', [
'wiki_id' => $wiki->id,
'is_deleted' => 1,
'date' => now()->toDateString(),
]);
}

public function testDailyMetricCreatedWhenNoRecordsInWikiSiteStats() {
$wiki = Wiki::factory()->create([
'domain' => 'test.wbaas.dev',
]);
$wikiDb = WikiDb::first();
$wikiDb->update(['wiki_id' => $wiki->id]);

// Ensure no wikiSiteStats record exists
$this->assertNull($wiki->wikiSiteStats()->first());

// Run saveMetrics()
(new WikiMetrics)->saveMetrics($wiki);

// Assert new record was created with default values
$this->assertDatabaseHas('wiki_daily_metrics', [
'wiki_id' => $wiki->id,
'pages' => 0,
'total_user_count' => 0,
'date' => now()->toDateString(),
]);
}

public function testItSaveTripleCountSuccessfully() {
$wiki = Wiki::factory()->create([
'domain' => 'somewikiforunittest.wikibase.cloud',
Expand Down
Loading