diff --git a/tests/javascripts/activityChart.test.js b/tests/javascripts/activityChart.test.js
index 3d0087ec1..89e924dc1 100644
--- a/tests/javascripts/activityChart.test.js
+++ b/tests/javascripts/activityChart.test.js
@@ -283,3 +283,58 @@ test('handleDropdownChange updates DOM for individual selection', () => {
window.fetchData.mockRestore();
});
+
+test('handleDropdownChange shows empty message when user has no jobs', () => {
+ document.body.innerHTML = `
+
+
+
+
+
+
+
+
+ | Other User |
+ | Another User |
+ | Different User |
+
+ | No batched job messages found (messages are kept for 7 days). |
+
+
+
+
+
+ `;
+
+ window.currentUserName = "Test User";
+
+ jest.spyOn(window, 'fetchData').mockImplementation(() => {});
+
+ const selectElement = document.getElementById('options');
+ selectElement.value = 'individual';
+ const event = { target: selectElement };
+
+ window.handleDropdownChange(event);
+
+ expect(document.getElementById('table-heading').textContent).toBe('My activity');
+ expect(document.getElementById('caption').textContent).toContain('Test User');
+
+ document.querySelectorAll('.sender-column').forEach(col => {
+ expect(col.style.display).toBe('none');
+ });
+
+ const emptyMessageRow = document.querySelector('.table-empty-message').closest('tr');
+ expect(emptyMessageRow.style.display).toBe('');
+
+ const allRows = Array.from(document.querySelectorAll('#activity-table tbody tr'));
+ const visibleRows = allRows.filter(row => row.style.display !== 'none');
+ expect(visibleRows.length).toBe(1);
+ expect(visibleRows[0].querySelector('.table-empty-message')).not.toBeNull();
+
+ window.fetchData.mockRestore();
+});