@ -36,11 +36,6 @@ class TestAdminAPI(TestCase):
|
|||||||
body = loads(response.content)
|
body = loads(response.content)
|
||||||
self.assertEqual(len(body), 0)
|
self.assertEqual(len(body), 0)
|
||||||
|
|
||||||
def test_metrics(self):
|
|
||||||
"""Test metrics API"""
|
|
||||||
response = self.client.get(reverse("authentik_api:admin_metrics"))
|
|
||||||
self.assertEqual(response.status_code, 200)
|
|
||||||
|
|
||||||
def test_apps(self):
|
def test_apps(self):
|
||||||
"""Test apps API"""
|
"""Test apps API"""
|
||||||
response = self.client.get(reverse("authentik_api:apps-list"))
|
response = self.client.get(reverse("authentik_api:apps-list"))
|
||||||
|
|||||||
@ -81,22 +81,6 @@ class TestUsersAPI(APITestCase):
|
|||||||
response = self.client.get(reverse("authentik_api:user-list"), {"include_groups": "true"})
|
response = self.client.get(reverse("authentik_api:user-list"), {"include_groups": "true"})
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
def test_metrics(self):
|
|
||||||
"""Test user's metrics"""
|
|
||||||
self.client.force_login(self.admin)
|
|
||||||
response = self.client.get(
|
|
||||||
reverse("authentik_api:user-metrics", kwargs={"pk": self.user.pk})
|
|
||||||
)
|
|
||||||
self.assertEqual(response.status_code, 200)
|
|
||||||
|
|
||||||
def test_metrics_denied(self):
|
|
||||||
"""Test user's metrics (non-superuser)"""
|
|
||||||
self.client.force_login(self.user)
|
|
||||||
response = self.client.get(
|
|
||||||
reverse("authentik_api:user-metrics", kwargs={"pk": self.user.pk})
|
|
||||||
)
|
|
||||||
self.assertEqual(response.status_code, 403)
|
|
||||||
|
|
||||||
def test_recovery_no_flow(self):
|
def test_recovery_no_flow(self):
|
||||||
"""Test user recovery link (no recovery flow set)"""
|
"""Test user recovery link (no recovery flow set)"""
|
||||||
self.client.force_login(self.admin)
|
self.client.force_login(self.admin)
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import django_filters
|
|||||||
from django.db.models import Count, ExpressionWrapper, F, QuerySet
|
from django.db.models import Count, ExpressionWrapper, F, QuerySet
|
||||||
from django.db.models import DateTimeField as DjangoDateTimeField
|
from django.db.models import DateTimeField as DjangoDateTimeField
|
||||||
from django.db.models.fields.json import KeyTextTransform, KeyTransform
|
from django.db.models.fields.json import KeyTextTransform, KeyTransform
|
||||||
from django.db.models.functions import Cast, TruncHour
|
from django.db.models.functions import TruncHour
|
||||||
from django.db.models.query_utils import Q
|
from django.db.models.query_utils import Q
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from drf_spectacular.types import OpenApiTypes
|
from drf_spectacular.types import OpenApiTypes
|
||||||
|
|||||||
@ -15,6 +15,7 @@ export class EventVolumeChart extends AKChart<EventVolume[]> {
|
|||||||
|
|
||||||
@property({ attribute: false })
|
@property({ attribute: false })
|
||||||
set query(value: EventsEventsListRequest | undefined) {
|
set query(value: EventsEventsListRequest | undefined) {
|
||||||
|
if (JSON.stringify(this._query) === JSON.stringify(value)) return;
|
||||||
this._query = value;
|
this._query = value;
|
||||||
this.refreshHandler();
|
this.refreshHandler();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,7 +23,7 @@ import {
|
|||||||
import { Legend, Tooltip } from "chart.js";
|
import { Legend, Tooltip } from "chart.js";
|
||||||
import { BarController, DoughnutController, LineController } from "chart.js";
|
import { BarController, DoughnutController, LineController } from "chart.js";
|
||||||
import { ArcElement, BarElement } from "chart.js";
|
import { ArcElement, BarElement } from "chart.js";
|
||||||
import { LinearScale, TimeScale } from "chart.js";
|
import { LinearScale, TimeScale, TimeSeriesScale } from "chart.js";
|
||||||
import "chartjs-adapter-date-fns";
|
import "chartjs-adapter-date-fns";
|
||||||
|
|
||||||
import { msg } from "@lit/localize";
|
import { msg } from "@lit/localize";
|
||||||
@ -35,7 +35,7 @@ import { EventActions, EventVolume, UiThemeEnum } from "@goauthentik/api";
|
|||||||
Chart.register(Legend, Tooltip);
|
Chart.register(Legend, Tooltip);
|
||||||
Chart.register(LineController, BarController, DoughnutController);
|
Chart.register(LineController, BarController, DoughnutController);
|
||||||
Chart.register(ArcElement, BarElement, PointElement, LineElement);
|
Chart.register(ArcElement, BarElement, PointElement, LineElement);
|
||||||
Chart.register(TimeScale, LinearScale, Filler);
|
Chart.register(TimeScale, TimeSeriesScale, LinearScale, Filler);
|
||||||
|
|
||||||
export const FONT_COLOUR_DARK_MODE = "#fafafa";
|
export const FONT_COLOUR_DARK_MODE = "#fafafa";
|
||||||
export const FONT_COLOUR_LIGHT_MODE = "#151515";
|
export const FONT_COLOUR_LIGHT_MODE = "#151515";
|
||||||
@ -186,7 +186,7 @@ export abstract class AKChart<T> extends AKElement {
|
|||||||
responsive: true,
|
responsive: true,
|
||||||
scales: {
|
scales: {
|
||||||
x: {
|
x: {
|
||||||
type: "time",
|
type: "timeseries",
|
||||||
display: true,
|
display: true,
|
||||||
ticks: {
|
ticks: {
|
||||||
callback: (tickValue: string | number, index: number, ticks: Tick[]) => {
|
callback: (tickValue: string | number, index: number, ticks: Tick[]) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user