Skip to content

Commit 43c2563

Browse files
committed
WikiDailyMetrics: add comparison method (#923)
* add areMetricsEqual method * use areMetricsEqual method * add WikiDailyMetricsTest * fix
1 parent 545ee44 commit 43c2563

File tree

3 files changed

+83
-12
lines changed

3 files changed

+83
-12
lines changed

app/Metrics/App/WikiMetrics.php

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,34 +7,37 @@
77

88
class WikiMetrics
99
{
10-
1110
public function saveMetrics(Wiki $wiki): void
1211
{
1312
$today = now()->format('Y-m-d');
1413
$oldRecord = WikiDailyMetrics::where('wiki_id', $wiki->id)->latest('date')->first();
1514
$todayPageCount = $wiki->wikiSiteStats()->first()->pages ?? 0;
1615
$isDeleted = (bool)$wiki->deleted_at;
16+
17+
$dailyMetrics = new WikiDailyMetrics([
18+
'id' => $wiki->id . '_' . date('Y-m-d'),
19+
'pages' => $todayPageCount,
20+
'is_deleted' => $isDeleted,
21+
'date' => $today,
22+
'wiki_id' => $wiki->id
23+
]);
24+
1725
if ($oldRecord) {
1826
if ($oldRecord->is_deleted) {
1927
\Log::info("Wiki is deleted, no new record for WikiMetrics ID {$wiki->id}.");
2028
return;
2129
}
30+
2231
if (!$isDeleted) {
23-
if ($oldRecord->pages === $todayPageCount) {
24-
\Log::info("Page count unchanged for WikiMetrics ID {$wiki->id}, no new record added.");
32+
if ($oldRecord->areMetricsEqual($dailyMetrics)) {
33+
\Log::info("Record unchanged for WikiMetrics ID {$wiki->id}, no new record added.");
2534
return;
2635
}
2736
}
2837
}
29-
WikiDailyMetrics::create([
30-
'id' => $wiki->id . '_' . date('Y-m-d'),
31-
'pages' => $todayPageCount,
32-
'is_deleted' => $isDeleted,
33-
'date' => $today,
34-
'wiki_id' => $wiki->id,
35-
]);
38+
39+
$dailyMetrics->save();
40+
3641
\Log::info("New metric recorded for WikiMetrics ID {$wiki->id}");
3742
}
38-
3943
}
40-

app/WikiDailyMetrics.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,20 @@ class WikiDailyMetrics extends Model
2525
'is_deleted',
2626
];
2727

28+
// list of properties which are actual wiki metrics
29+
public static $metricNames = [
30+
'pages',
31+
'is_deleted',
32+
];
33+
34+
public function areMetricsEqual(WikiDailyMetrics $wikiDailyMetrics): bool
35+
{
36+
foreach(self::$metricNames as $field) {
37+
if ($this->$field != $wikiDailyMetrics->$field) {
38+
return false;
39+
}
40+
}
2841

42+
return true;
43+
}
2944
}

tests/WikiDailyMetricsTest.php

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
3+
namespace Tests;
4+
5+
use Tests\TestCase;
6+
use App\WikiDailyMetrics;
7+
use Illuminate\Foundation\Testing\RefreshDatabase;
8+
9+
class WikiDailyMetricsTest extends TestCase
10+
{
11+
use RefreshDatabase;
12+
13+
public static function areMetricsEqualProvider(){
14+
yield 'is the same' => [
15+
new WikiDailyMetrics(["pages" => 1, "is_deleted" => false ]),
16+
new WikiDailyMetrics(["pages" => 1, "is_deleted" => false ]),
17+
true
18+
];
19+
20+
yield 'more pages' => [
21+
new WikiDailyMetrics(["pages" => 1, "is_deleted" => false ]),
22+
new WikiDailyMetrics(["pages" => 20, "is_deleted" => false ]),
23+
false
24+
];
25+
26+
yield 'less pages' => [
27+
new WikiDailyMetrics(["pages" => 10, "is_deleted" => false ]),
28+
new WikiDailyMetrics(["pages" => 1, "is_deleted" => false ]),
29+
false
30+
];
31+
32+
yield 'is deleted' => [
33+
new WikiDailyMetrics(["pages" => 1, "is_deleted" => false ]),
34+
new WikiDailyMetrics(["pages" => 1, "is_deleted" => true ]),
35+
false
36+
];
37+
}
38+
39+
/**
40+
* @dataProvider areMetricsEqualProvider
41+
*/
42+
public function testAreMetricsEqual(
43+
WikiDailyMetrics $wikiDailyMetrics1,
44+
WikiDailyMetrics $wikiDailyMetrics2,
45+
$assertion
46+
): void
47+
{
48+
$this->assertEquals(
49+
$wikiDailyMetrics1->areMetricsEqual($wikiDailyMetrics2),
50+
$assertion
51+
);
52+
}
53+
}

0 commit comments

Comments
 (0)