fix: status tiles show device name instead of blank — use deviceName not name

buildStatusTileHTML received session.name (undefined for status entries)
instead of session.deviceName. Offline/unreachable tiles showed blank.
Fixed all 4 call sites in renderGrid to pass session.deviceName.

Updated two existing tests to use deviceName (not name) in status entry
objects — reflecting the real federation data shape.
This commit is contained in:
Brian Krabach
2026-04-13 13:20:29 -07:00
parent 2c65e5b4c2
commit 26a4d30d6f
2 changed files with 34 additions and 6 deletions
+4 -4
View File
@@ -760,8 +760,8 @@ function renderGrid(sessions) {
// Build status tiles for auth_failed/unreachable sessions even when no regular sessions exist // Build status tiles for auth_failed/unreachable sessions even when no regular sessions exist
var statusTilesHtml = ''; var statusTilesHtml = '';
(sessions || []).forEach(function(session) { (sessions || []).forEach(function(session) {
if (session.status === 'auth_failed') statusTilesHtml += buildStatusTileHTML(session.name, 'Auth required', 'auth'); if (session.status === 'auth_failed') statusTilesHtml += buildStatusTileHTML(session.deviceName, 'Auth required', 'auth');
else if (session.status === 'unreachable') statusTilesHtml += buildStatusTileHTML(session.name, 'Offline', 'offline'); else if (session.status === 'unreachable') statusTilesHtml += buildStatusTileHTML(session.deviceName, 'Offline', 'offline');
}); });
if (grid) grid.innerHTML = statusTilesHtml; if (grid) grid.innerHTML = statusTilesHtml;
// Only show empty-state when there are truly no tiles at all // Only show empty-state when there are truly no tiles at all
@@ -803,8 +803,8 @@ function renderGrid(sessions) {
// Append status tiles for auth_failed and unreachable sessions // Append status tiles for auth_failed and unreachable sessions
var statusTilesHtml = ''; var statusTilesHtml = '';
(sessions || []).forEach(function(session) { (sessions || []).forEach(function(session) {
if (session.status === 'auth_failed') statusTilesHtml += buildStatusTileHTML(session.name, 'Auth required', 'auth'); if (session.status === 'auth_failed') statusTilesHtml += buildStatusTileHTML(session.deviceName, 'Auth required', 'auth');
else if (session.status === 'unreachable') statusTilesHtml += buildStatusTileHTML(session.name, 'Offline', 'offline'); else if (session.status === 'unreachable') statusTilesHtml += buildStatusTileHTML(session.deviceName, 'Offline', 'offline');
}); });
if (grid) grid.innerHTML = html + statusTilesHtml; if (grid) grid.innerHTML = html + statusTilesHtml;
+30 -2
View File
@@ -626,7 +626,7 @@ test('renderGrid includes auth tile HTML when a session has auth_failed status',
const sessions = [ const sessions = [
{ name: 'my-session', snapshot: 'hello' }, { name: 'my-session', snapshot: 'hello' },
{ name: 'Workstation', status: 'auth_failed' }, { deviceName: 'Workstation', status: 'auth_failed' },
]; ];
app.renderGrid(sessions); app.renderGrid(sessions);
@@ -651,7 +651,7 @@ test('renderGrid includes offline tile HTML when a session has unreachable statu
const sessions = [ const sessions = [
{ name: 'my-session', snapshot: 'hello' }, { name: 'my-session', snapshot: 'hello' },
{ name: 'Dev Server', status: 'unreachable' }, { deviceName: 'Dev Server', status: 'unreachable' },
]; ];
app.renderGrid(sessions); app.renderGrid(sessions);
@@ -4730,3 +4730,31 @@ test('updateFaviconBadge does not show activity for only-hidden sessions with be
app._setServerSettings(null); app._setServerSettings(null);
app._setCurrentSessions([]); app._setCurrentSessions([]);
}); });
// --- renderGrid: status tiles use deviceName not name ---
test('renderGrid status tiles use session.deviceName not session.name for offline devices', () => {
// Status entries (unreachable/auth_failed) have deviceName but no name.
// buildStatusTileHTML must receive session.deviceName so the tile shows the device label.
const grid = { innerHTML: '' };
const emptyState = { style: {}, classList: { add() {}, remove() {} } };
const origGetById = globalThis.document.getElementById;
globalThis.document.getElementById = (id) => {
if (id === 'session-grid') return grid;
if (id === 'empty-state') return emptyState;
return null;
};
// An unreachable device: has deviceName but no name (as federation returns it)
app.renderGrid([{ status: 'unreachable', deviceName: 'my-server', remoteId: 1 }]);
assert.ok(grid.innerHTML.includes('my-server'),
'offline status tile HTML must include the deviceName "my-server"');
// Also verify an auth_failed device shows its deviceName
app.renderGrid([{ status: 'auth_failed', deviceName: 'auth-box', remoteId: 2 }]);
assert.ok(grid.innerHTML.includes('auth-box'),
'auth_failed status tile HTML must include the deviceName "auth-box"');
globalThis.document.getElementById = origGetById;
});