aboutsummaryrefslogtreecommitdiff
path: root/tests/Jellyfin.Api.Tests/Controllers
AgeCommit message (Collapse)Author
5 daysFix concurrent ffmpeg segment racinggnattu
This is a nasty one. The failure mode is: 1. Request A started FFmpeg and waited for a segment. 2. Request B requested an earlier or far away segment. 3. Jellyfin thought FFmpeg should to restart at a different position. 4. Request B killed the existing transcoding job. 5. Killing that job cancelled the same token request A was using. 6. The cancellation produced http 500 to request A. To fix this: we lock transcoding job state changes and segment handling per playlist, and use a thread safe counter to track how many http responses are still using each job’s segments. A job is only stopped or replaced once that counter reaches zero.
2026-07-21Merge pull request #17370 from zerafachris/fix/item-update-null-optional-fieldsCody Robibero
fix: don't throw ArgumentNullException on partial UpdateItem payloads (#17366)
2026-07-21Merge pull request #17369 from Shadowghost/harden-startup-wizardCody Robibero
Prevent unauthenticated re-run of the startup wizard on misconfiguration
2026-07-21Make ItemUpdateController.UpdateItem internal instead of reflectionzerafachris
Addresses review feedback from @Bond-009 on PR #17370: the test helper InvokeUpdateItem was invoking the private UpdateItem(BaseItemDto, BaseItem) method via reflection. Jellyfin.Api.csproj already grants InternalsVisibleTo("Jellyfin.Api.Tests"), so the method is changed to internal and the test now calls it directly, removing the GetMethod/Invoke boilerplate. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-17fix: don't throw ArgumentNullException on partial UpdateItem payloads (#17366)zerafachris
BaseItemDto.Genres, .Tags, and .ProviderIds are plain auto-properties with no default initializer, so they deserialize to null when a client omits them from a partial POST /Items/{itemId} body. The OpenAPI spec documents every BaseItemDto field as optional, but ItemUpdateController.UpdateItem fed these three properties straight into Distinct()/Select()/ToList() without a null check, so a request that (for example) only sets Tags throws ArgumentNullException("source") once it reaches the unguarded Genres line, before Tags is even processed. Guard all three assignments with the same "if (request.X is not null)" pattern already used for the neighboring Studios/Taglines/ProductionLocations fields in this method, so omitted fields are left unchanged instead of crashing the request. Adds ItemUpdateControllerTests covering the reported repro (only Tags supplied) and a companion case asserting existing Genres/ProviderIds are preserved when omitted from the payload. Signed-off-by: zerafachris <christopher.zerafa@blocklabs.io>
2026-07-17Prevent unauthenticated re-run of the startup wizard on misconfigurationShadowghost
2026-06-28Add testsMarc Brooks
Also fixed a sibling directory that matches the prefix.
2026-04-19Upgrade to xunit v3Shadowghost
2025-05-18Add Full system backup feature (#13945)JPVenson
2025-03-31Use pattern matching for null checks (#13793)Bond-009
Fix the few that slipped through
2025-03-25Fixed namespacesJPVenson
2024-02-03Add unit test for log file not foundbeakerandjake
2023-12-18Fix testsBond_009
2023-11-14Fix warnings in test projectsBond_009
2023-11-10Validate AuthenticationProviderId and PasswordResetProviderId (#10553)Chris H
2023-04-06Remove unused using directivesStepan Goremykin
2023-02-16Verify ContentType of uploaded imagesBond_009
2021-10-03Fix warning: Using directive is not required by the code and can be safely ↵KonH
removed (#2149)
2021-09-11Use TheoryData instead of MemberData and ClassDataianjazz246
2021-09-06Remove all unused usingsFernando Fernández
2021-05-08Minor improvementsBond_009
* properly dispose CancellationTokenSource * rewrite DynamicHlsController.GetSegmentLengths * remove dead code
2021-03-09Split integration tests from unit testsBond_009
2021-02-22Address commentsBond_009
2021-02-22Fix testsBond_009
2021-02-22Add tests for DashboardControllerBond_009