Phase 2: Docker and OIDC auth
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
import assert from "node:assert/strict";
|
||||
import test from "node:test";
|
||||
import {
|
||||
mergeUsersWithActivity,
|
||||
resolveUserSelection,
|
||||
} from "../src/userState.js";
|
||||
|
||||
test("mergeUsersWithActivity attaches session activity to user state", () => {
|
||||
const merged = mergeUsersWithActivity(
|
||||
[
|
||||
{
|
||||
jellyfin_id: "jf1",
|
||||
username: "alex",
|
||||
display_name: "alex",
|
||||
email: "alex@example.com",
|
||||
email_source: "jellyseerr:user",
|
||||
avatar: "",
|
||||
avatar_source: "",
|
||||
contactable: true,
|
||||
source: "jellyfin",
|
||||
source_summary: "name=jellyfin",
|
||||
name_source: "jellyfin",
|
||||
access_source: "",
|
||||
jellyseerr_user_id: 7,
|
||||
jellyseerr_username: "alex",
|
||||
user_type: 3,
|
||||
user_type_label: "jellyfin",
|
||||
role: "admin",
|
||||
permissions: 10,
|
||||
permissions_label: "admin, manage_users",
|
||||
request_count: 3,
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
user: "alex",
|
||||
title: "Test Movie",
|
||||
type: "Movie",
|
||||
state: "playing",
|
||||
transcoding: "yes",
|
||||
transcoding_type: "audio",
|
||||
device: "Chrome",
|
||||
session_id: "sess1",
|
||||
},
|
||||
],
|
||||
);
|
||||
|
||||
assert.equal(merged[0].activity_count, 1);
|
||||
assert.equal(merged[0].activity_active_count, 1);
|
||||
assert.equal(merged[0].activity_label, "Playing");
|
||||
assert.equal(merged[0].activity.summary, "1 session · 1 active");
|
||||
assert.equal(merged[0].activity.sessions[0].title, "Test Movie");
|
||||
});
|
||||
|
||||
test("mergeUsersWithActivity marks paused sessions as paused", () => {
|
||||
const merged = mergeUsersWithActivity(
|
||||
[
|
||||
{
|
||||
jellyfin_id: "jf2",
|
||||
username: "sam",
|
||||
display_name: "Sam",
|
||||
email: "sam@example.com",
|
||||
email_source: "jellyseerr:user",
|
||||
avatar: "",
|
||||
avatar_source: "",
|
||||
contactable: true,
|
||||
source: "jellyfin",
|
||||
source_summary: "name=jellyfin",
|
||||
name_source: "jellyfin",
|
||||
access_source: "",
|
||||
jellyseerr_user_id: 8,
|
||||
jellyseerr_username: "sam",
|
||||
user_type: 3,
|
||||
user_type_label: "jellyfin",
|
||||
role: "user",
|
||||
permissions: 0,
|
||||
permissions_label: "",
|
||||
request_count: 0,
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
user: "sam",
|
||||
title: "Paused Episode",
|
||||
type: "Episode",
|
||||
state: "paused",
|
||||
transcoding: "no",
|
||||
transcoding_type: "",
|
||||
device: "Firefox",
|
||||
session_id: "sess2",
|
||||
},
|
||||
],
|
||||
);
|
||||
|
||||
assert.equal(merged[0].activity_label, "Paused");
|
||||
assert.equal(merged[0].activity.summary, "1 session · 1 active");
|
||||
});
|
||||
|
||||
test("resolveUserSelection matches id username and display name", () => {
|
||||
const users = mergeUsersWithActivity(
|
||||
[
|
||||
{
|
||||
jellyfin_id: "jf1",
|
||||
username: "alex",
|
||||
display_name: "Alexander",
|
||||
email: "alex@example.com",
|
||||
email_source: "jellyseerr:user",
|
||||
avatar: "",
|
||||
avatar_source: "",
|
||||
contactable: true,
|
||||
source: "jellyfin",
|
||||
source_summary: "name=jellyfin",
|
||||
name_source: "jellyfin",
|
||||
access_source: "",
|
||||
jellyseerr_user_id: 7,
|
||||
jellyseerr_username: "alex",
|
||||
user_type: 3,
|
||||
user_type_label: "jellyfin",
|
||||
role: "admin",
|
||||
permissions: 10,
|
||||
permissions_label: "admin, manage_users",
|
||||
request_count: 3,
|
||||
},
|
||||
],
|
||||
[],
|
||||
);
|
||||
|
||||
assert.equal(resolveUserSelection(users, "jf1")?.username, "alex");
|
||||
assert.equal(resolveUserSelection(users, "alex")?.jellyfin_id, "jf1");
|
||||
assert.equal(resolveUserSelection(users, "Alexander")?.jellyfin_id, "jf1");
|
||||
});
|
||||
Reference in New Issue
Block a user