feat: add countries, devices, browsers, OS dashboard sections

Add 4 new dimension queries (concurrent with existing 4, total 8) to
the dashboard: countries, devices, browsers, and operating systems.
All reuse the existing DimensionSection component with proportional
progress bars.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ole-Morten Duesund 2026-03-18 16:57:38 +01:00
commit 54a5b38fc6
8 changed files with 184 additions and 2 deletions

View file

@ -102,6 +102,24 @@ class StatsRepositoryTest {
)
)
// Mock countries, devices, browsers, OS responses
coEvery { api.query(any(), any(), match { "visit:country_name" in it.dimensions }) } returns
QueryResponse(results = listOf(
QueryResult(dimensions = listOf(JsonPrimitive("Germany")), metrics = listOf(JsonPrimitive(50)))
))
coEvery { api.query(any(), any(), match { "visit:device" in it.dimensions }) } returns
QueryResponse(results = listOf(
QueryResult(dimensions = listOf(JsonPrimitive("Desktop")), metrics = listOf(JsonPrimitive(80)))
))
coEvery { api.query(any(), any(), match { "visit:browser" in it.dimensions }) } returns
QueryResponse(results = listOf(
QueryResult(dimensions = listOf(JsonPrimitive("Firefox")), metrics = listOf(JsonPrimitive(60)))
))
coEvery { api.query(any(), any(), match { "visit:os" in it.dimensions }) } returns
QueryResponse(results = listOf(
QueryResult(dimensions = listOf(JsonPrimitive("Linux")), metrics = listOf(JsonPrimitive(40)))
))
val result = repository.getDashboardData(
instance = testInstance,
apiKey = "test-key",
@ -118,6 +136,10 @@ class StatsRepositoryTest {
assertEquals("Google", result.topSources[0].name)
assertEquals(1, result.topPages.size)
assertEquals("/blog", result.topPages[0].name)
assertEquals("Germany", result.countries[0].name)
assertEquals("Desktop", result.devices[0].name)
assertEquals("Firefox", result.browsers[0].name)
assertEquals("Linux", result.operatingSystems[0].name)
}
@Test