← ~/changelog / 2026-08-17
TranslationManager database-backed integration tests
- TranslationManager: added
Jumoo.TranslationManager.IntegrationTests— a SQLite-backed suite onUmbraco.Cms.Tests.Integrationthat boots a real Umbraco host, runs TM migrations and exercises services against persisted data; 78 tests across host/schema, sets, nodes, job lifecycle, connector pipeline, approval write-back, background processing and unlicensed limits - Harness gotchas for package authors: Umbraco's
GlobalSetupTeardownis a[SetUpFixture]inside the package assembly, which NUnit never discovers from a consuming project (so test config and DB teardown are done locally);TranslationComposerisn't picked up either since the test host builds its TypeLoader from the test assembly, soAddTranslations()is called explicitly; migrations only run withBoot = true - Test host presents as
localhost, so a missing licence is promoted toLicenceStatus.Local— that's what unblocks multi-set and multi-target-site tests. The resolved licence is a process-wide static, so it's cleared per test, which also made the unlicensed-limit tests possible IRecurringBackgroundJobTrigger<>andIClientMessageServiceare only registered by the web host — test doubles stand in for both- Two connector doubles:
FakeTranslationProvidershort-circuits the connector stack for workflow and failure-path tests,PassthroughTestConnectorextends the realMachineConnectorBaseso HTML splitting, batching and translation memory are covered - One
InternalsVisibleToadded to Core (following the existing pattern) so tests use the real table/action constants and can reset the cached licence; no production code changed - Follow-up noted:
TranslationJobService.CancelandMachineConnectorBase.SubmitInternalboth walkjob.Nodeswithout a null check — fine from the backoffice, which reloads viaGetAsyncfirst, but the instanceCreateJobAsyncreturns will crash them
Commit: ec6136f on v18/main