openvidu/openvidu-dashboard/openspec/specs/settings-about/spec.md

6.7 KiB

settings-about Specification

Purpose

The Settings page: viewer preferences that shape how every page renders, and an About tab that shows versions, schema compatibility, migration, retention and storage as reported by the server.

Requirements

Requirement: Settings tabs

Edition: CE. /settings SHALL show two tabs, Preferences and About, selected by the tab query parameter (preferences by default); switching tabs writes tab to the URL.

  • GIVEN /settings?tab=about
  • WHEN the page opens
  • THEN the About tab is active and focused

Requirement: Viewer preferences

Edition: CE. Preferences SHALL offer theme (system/light/dark), default time zone (browser zone shown by name, or any IANA zone), default range preset, rows per page (10/25/50/100) and one auto-refresh interval for live views (off/10 s/30 s/1 min/5 min), none for Analytics; other stored intervals are ignored. Changes save at once with a "Saved" toast; a new default zone also becomes the session zone. "Reset to defaults" restores system theme, browser zone, last 24 h, 25 rows and 10 s.

Scenario: Change rows per page

  • GIVEN rows per page set to 50
  • WHEN the user opens /egress without limit
  • THEN the list shows 50 rows

Scenario: Reset

  • GIVEN customised preferences
  • WHEN the user presses "Reset to defaults"
  • THEN every control shows its default and the stored preferences are cleared

Scenario: One auto-refresh setting

  • WHEN the Preferences tab renders
  • THEN it shows one auto-refresh control, "Auto-refresh of live views", and none for Analytics

Scenario: Stored interval of another kind

  • GIVEN stored preferences with a 50-row page size and refreshMs.history of 30 s
  • WHEN the dashboard loads them
  • THEN lists show 50 rows, the history interval is ignored and Analytics does not refresh by itself

Scenario: Any default zone

  • GIVEN the Preferences tab of a session in Europe/Madrid
  • WHEN the user picks America/New_York as the default zone
  • THEN "Saved" shows, the next timed page opens with tz=America/New_York, and a new browser session starts in America/New_York

Scenario: Stored lowercase utc

  • GIVEN stored preferences whose time zone reads utc
  • WHEN the dashboard loads them
  • THEN the default zone is UTC and the Preferences tab shows "Another zone" selected with UTC

Requirement: OpenVidu version

Edition: CE. About SHALL show one version line, the OpenVidu version (the dashboard version) with the edition badge, as reported by GET /api/v1/info; a schema incompatibility is reported by the shell's warning banner, not by About.

Scenario: Incompatible schema

  • GIVEN the writer reports schema 3
  • WHEN About renders
  • THEN About shows only the version and badge, and the shell banner names both schema versions

Scenario: Version and edition

  • GIVEN the info endpoint reports dashboard 3.10.0, edition CE and schema 1 for dashboard and writer
  • WHEN About renders
  • THEN it reads "OpenVidu 3.10.0" with the COMMUNITY badge and no schema line

Requirement: Migration status

Edition: CE. About SHALL show the legacy migration only while it runs (progress bar with processed/total records, following the server status poll every 10 s) and, when it ends while the page is open, its outcome (completed with its time, or failed with its message); once the page is reloaded after the migration ended, About shows nothing about it.

Scenario: Migration running

  • GIVEN the status reports 300000 of 1200000 records processed
  • WHEN About renders
  • THEN a progress bar at 25 % shows "300,000 / 1,200,000 records" and updates with the next status response

Scenario: Completed before the page opened

  • GIVEN the status reports a migration completed yesterday
  • WHEN About renders
  • THEN no migration section is shown

Scenario: Completed while watching

  • GIVEN About showing a running migration
  • WHEN the next status reports it completed
  • THEN the section reads "Migration completed at hh:mm:ss" until the page is left

Requirement: Retention and storage

Edition: CE. About SHALL show the retention per data class (events, stats, tracks and subscriptions, entities, 5-minute rollups, hourly rollups, daily rollups) as a table with one row per class in the shared retention length wording, and a storage table with collection, document count, size and oldest document as the info endpoint reports them, closed by a Total row; sizes use the shared byte formatter.

Scenario: Retention line

  • GIVEN the defaults
  • WHEN About renders
  • THEN the retention table has the rows Events 7 days, Stats 7 days, Tracks and subscriptions 7 days, Entities 90 days, 5-minute rollups 7 days, Hourly rollups 400 days and Daily rollups "Kept forever"

Scenario: Retention that is not a whole number of days

  • GIVEN retention.tracksMs of 36 hours and retention.rollupsDailyMs of 1 825 days
  • WHEN About renders
  • THEN the row Tracks and subscriptions reads "36 hours" and the row Daily rollups reads "1,825 days"

Scenario: Storage total

  • GIVEN storage entries for rooms (4 documents, 381 kB with indexes) and events (285 documents, 356 kB with indexes)
  • WHEN About renders
  • THEN the last row of the storage table reads "Total", "289", "737 kB" and an empty Oldest cell

Scenario: Collection without an oldest date

  • GIVEN the tracks entry without oldest
  • WHEN About renders
  • THEN its Oldest cell reads "—" with the tooltip "Not shown: no index starts with this collection's time field"

Requirement: Server info unavailable

Edition: CE. When the info endpoint fails, About SHALL show the error notice "Server info unavailable" with a Retry action and the Preferences tab stays usable.

Scenario: Backend down

  • GIVEN the info request fails
  • WHEN the user opens About
  • THEN the message and retry render, and switching to Preferences works

Requirement: About loading state

Edition: CE. While the info document has not arrived and its request has not failed, About SHALL render a loading skeleton; the version, migration, retention and storage replace it when the document arrives.

Scenario: Info in flight

  • GIVEN the info request has not answered yet
  • WHEN the user opens About
  • THEN the tab shows its loading state, with no version, retention or storage values and no "Server info unavailable" notice

Scenario: Info arrives

  • GIVEN About showing its loading state
  • WHEN the info document arrives
  • THEN the loading state gives way to the version with the edition badge, the retention table and the storage table