132 lines
3.1 KiB
JavaScript
132 lines
3.1 KiB
JavaScript
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");
|
|
});
|