Skip to content

feat: Notification emails #8377

feat: Notification emails

feat: Notification emails #8377

GitHub Actions / Test report for server-app:runWebsocketTests failed Feb 3, 2025 in 1s

185 passed, 36 failed and 0 skipped

Tests failed

Report Passed Failed Skipped Time
backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.batch.BatchJobsGeneralWithoutRedisTest.xml 11✅ 23s
backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.batch.BatchJobsGeneralWithRedisTest.xml 12✅ 31s
backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithoutRedisTest.xml 5✅ 18❌ 199s
backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithRedisTest.xml 5✅ 18❌ 199s
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.AdvancedPermissionControllerTest.xml 13✅ 11s
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.AiPromptCustomizationControllerTest.xml 5✅ 1s
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.ContentDeliveryConfigControllerEeTest.xml 17✅ 6s
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.ContentStorageControllerTest.xml 11✅ 4s
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.EeLicenseControllerTest.xml 6✅ 2s
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.slack.OrganizationSlackControllerTest.xml 4✅ 1s
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.slack.SlackLoginControllerTest.xml 4✅ 1s
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.SsoProviderControllerTest.xml 7✅ 2s
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.task.TaskControllerActivityTest.xml 5✅ 2s
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.task.TaskControllerAssigneesTest.xml 6✅ 2s
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.task.TaskControllerBlockedTest.xml 1✅ 278ms
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.task.TaskControllerPermissionsTest.xml 4✅ 2s
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.task.TaskControllerTest.xml 19✅ 7s
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.V2ProjectsInvitationControllerEeTest.xml 5✅ 1s
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.WebhookConfigControllerTest.xml 7✅ 2s
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.EeTolgeeTranslatorControllerTest.xml 1✅ 4s
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.service.EeSubscriptionProviderImplTest.xml 2✅ 2s
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.service.slack.SavedSlackMessageServiceTest.xml 2✅ 535ms
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.service.slack.SlackConfigServiceTest.xml 2✅ 522ms
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.slack.SlackIntegrationTest.xml 4✅ 3s
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.slack.SlackWithAutoTranslationTest.xml 2✅ 5s
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.SsoGlobalTest.xml 8✅ 6s
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.SsoOrganizationsTest.xml 10✅ 4s
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.unit.SelfHostedEePlanModelTest.xml 1✅ 36ms
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.UsageReportingTest.xml 1✅ 499ms
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.UserLimitTest.xml 3✅ 1s
ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.WebhookAutomationTest.xml 2✅ 2s

✅ backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.batch.BatchJobsGeneralWithoutRedisTest.xml

11 tests were completed in 23s with 11 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.batch.BatchJobsGeneralWithoutRedisTest 11✅ 23s

✅ io.tolgee.batch.BatchJobsGeneralWithoutRedisTest

✅ it locks the single job for project()
✅ debounces job()
✅ doesn't lock non-exclusive job()
✅ cancels the job()
✅ retries failed with generic exception()
✅ retries failed with RequeueWithTimeoutException()
✅ correctly reports failed test when FailedDontRequeueException thrown()
✅ executes operation()
✅ retries and fails on management exceptions issues()
✅ publishes progress of single chunk job()
✅ retrying works with error keys()

✅ backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.batch.BatchJobsGeneralWithRedisTest.xml

12 tests were completed in 31s with 12 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.batch.BatchJobsGeneralWithRedisTest 12✅ 31s

✅ io.tolgee.batch.BatchJobsGeneralWithRedisTest

✅ it locks the single job for project()
✅ debounces job()
✅ doesn't lock non-exclusive job()
✅ cancels the job()
✅ retries failed with generic exception()
✅ retries failed with RequeueWithTimeoutException()
✅ correctly reports failed test when FailedDontRequeueException thrown()
✅ executes operation()
✅ retries and fails on management exceptions issues()
✅ publishes progress of single chunk job()
✅ retrying works with error keys()
✅ removes from queue using event()

❌ backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithoutRedisTest.xml

23 tests were completed in 199s with 5 passed, 18 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.websocket.WebsocketWithoutRedisTest 5✅ 18❌ 199s

❌ io.tolgee.websocket.WebsocketWithoutRedisTest

❌ doesn't subscribe as another user()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
✅ notifies on key modification()
❌ notifies user on a new notification()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
✅ doesn't subscribe without permissions()
✅ notifies on key deletion()
❌ notifies user on notifications marked as seen()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
✅ notifies on key creation()
✅ notifies on translation modification()
❌ doesn't subscribe as another user()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ notifies user on a new notification()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ notifies user on notifications marked as seen()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ doesn't subscribe as another user()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ notifies user on a new notification()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ notifies user on notifications marked as seen()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ doesn't subscribe as another user()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ notifies user on a new notification()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ notifies user on notifications marked as seen()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ doesn't subscribe as another user()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ notifies user on a new notification()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ notifies user on notifications marked as seen()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ doesn't subscribe as another user()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ notifies user on a new notification()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ notifies user on notifications marked as seen()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.

❌ backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithRedisTest.xml

23 tests were completed in 199s with 5 passed, 18 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.websocket.WebsocketWithRedisTest 5✅ 18❌ 199s

❌ io.tolgee.websocket.WebsocketWithRedisTest

❌ doesn't subscribe as another user()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
✅ notifies on key modification()
❌ notifies user on a new notification()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
✅ doesn't subscribe without permissions()
✅ notifies on key deletion()
❌ notifies user on notifications marked as seen()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
✅ notifies on key creation()
✅ notifies on translation modification()
❌ doesn't subscribe as another user()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ notifies user on a new notification()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ notifies user on notifications marked as seen()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ doesn't subscribe as another user()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ notifies user on a new notification()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ notifies user on notifications marked as seen()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ doesn't subscribe as another user()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ notifies user on a new notification()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ notifies user on notifications marked as seen()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ doesn't subscribe as another user()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ notifies user on a new notification()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ notifies user on notifications marked as seen()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ doesn't subscribe as another user()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ notifies user on a new notification()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
❌ notifies user on notifications marked as seen()
	java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.AdvancedPermissionControllerTest.xml

13 tests were completed in 11s with 13 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.api.v2.controllers.AdvancedPermissionControllerTest 13✅ 11s

✅ io.tolgee.ee.api.v2.controllers.AdvancedPermissionControllerTest

✅ validates permissions (empty scopes)()
✅ view contains at least the scopes from translate and state change()
✅ sets user's permissions with translateLanguages and view ()
✅ validates permissions (admin and viewLanguages)()
✅ validates permissions (translate languages and scopes)()
✅ validates permissions (admin and stateChangeLanguages)()
✅ validates permissions (view languages and scopes)()
✅ cannot set organization base permission with scopes when disabled()
✅ validates permissions (state change languages and scopes)()
✅ goes from scopes to type and from type to scopes()
✅ fails to set user's permission when feature disabled()
✅ sets organization base permission with scopes()
✅ validates permissions (admin and translateLanguages)()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.AiPromptCustomizationControllerTest.xml

5 tests were completed in 1s with 5 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.api.v2.controllers.AiPromptCustomizationControllerTest 5✅ 1s

✅ io.tolgee.ee.api.v2.controllers.AiPromptCustomizationControllerTest

✅ get language prompt customizations()
✅ set project prompt customization fails when feature is not enabled()
✅ set language prompt customization()
✅ get project prompt customization()
✅ set project prompt customization()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.ContentDeliveryConfigControllerEeTest.xml

17 tests were completed in 6s with 17 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.api.v2.controllers.ContentDeliveryConfigControllerEeTest 17✅ 6s

✅ io.tolgee.ee.api.v2.controllers.ContentDeliveryConfigControllerEeTest

✅ creates content delivery config with auto publish()
✅ does not set custom slug on update without custom storage()
✅ throws when custom storage removed and generated slug is kept()
✅ creates content delivery config()
✅ does not regenerate slug when not using custom storage()
✅ adds custom slug on update()
✅ lists content delivery configs()
✅ creates content delivery config without pruning()
✅ updates content delivery config()
✅ publishes to s3()
✅ does not create with custom slug without custom storage()
✅ does not regenerate slug when custom storage not removed()
✅ get single()
✅ removes the automation on update()
✅ creates with custom slug()
✅ regenerates slug on update()
✅ doesnt create when feature not enabled()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.ContentStorageControllerTest.xml

11 tests were completed in 4s with 11 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.api.v2.controllers.ContentStorageControllerTest 11✅ 4s

✅ io.tolgee.ee.api.v2.controllers.ContentStorageControllerTest

✅ deletes an storage()
✅ tests azure storage()
✅ lists storages()
✅ validates Azure Config storage()
✅ deletes not delete when in use()
✅ creates Content Storage()
✅ updates Content Storage to the same type()
✅ updates Content Storage()
✅ tests s3 storage()
✅ tests new configuration for existing azure storage()
✅ returns single storage()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.EeLicenseControllerTest.xml

6 tests were completed in 2s with 6 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.api.v2.controllers.EeLicenseControllerTest 6✅ 2s

✅ io.tolgee.ee.api.v2.controllers.EeLicenseControllerTest

✅ prepare operation works fine()
✅ releases license key info()
✅ refreshes subscription()
✅ it set's license key()
✅ set license key operation is not sensitive for non-breaking API change()
✅ returns info()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.slack.OrganizationSlackControllerTest.xml

4 tests were completed in 1s with 4 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.api.v2.controllers.slack.OrganizationSlackControllerTest 4✅ 1s

✅ io.tolgee.ee.api.v2.controllers.slack.OrganizationSlackControllerTest

✅ get all works()
✅ delete one works()
✅ connection works()
✅ fail if connect and already have connection()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.slack.SlackLoginControllerTest.xml

4 tests were completed in 1s with 4 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.api.v2.controllers.slack.SlackLoginControllerTest 4✅ 1s

✅ io.tolgee.ee.api.v2.controllers.slack.SlackLoginControllerTest

✅ logs in for same Tolgee acc and different workspace()
✅ user logs in()
✅ should not allow duplicate SlackUserConnection for same Tolgee account and workspace()
✅ should not allow duplicate SlackUserConnection for same Tolgee account and workspace and different Slack acc()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.SsoProviderControllerTest.xml

7 tests were completed in 2s with 7 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.api.v2.controllers.SsoProviderControllerTest 7✅ 2s

✅ io.tolgee.ee.api.v2.controllers.SsoProviderControllerTest

✅ does not allow to save invalid sso provider #1()
✅ does not allow to save invalid sso provider #2()
✅ does not allow to save invalid sso provider #3()
✅ does not allow to save invalid sso provider #4()
✅ creates and returns sso provider()
✅ fails if user is not owner of organization()
✅ always creates sso provider when disabled()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.task.TaskControllerActivityTest.xml

5 tests were completed in 2s with 5 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.api.v2.controllers.task.TaskControllerActivityTest 5✅ 2s

✅ io.tolgee.ee.api.v2.controllers.task.TaskControllerActivityTest

✅ logs task update()
✅ large scope change is doesn't cause n+1 issue()
✅ logs task key done()
✅ logs assignees when creating task()
✅ scope change is logged()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.task.TaskControllerAssigneesTest.xml

6 tests were completed in 2s with 6 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.api.v2.controllers.task.TaskControllerAssigneesTest 6✅ 2s

✅ io.tolgee.ee.api.v2.controllers.task.TaskControllerAssigneesTest

✅ user tasks filter by type()
✅ properly excludes user with view rights()
✅ user tasks()
✅ properly excludes users without view rights for english()
✅ user tasks filter by assignee()
✅ properly includes user with view rights()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.task.TaskControllerBlockedTest.xml

1 tests were completed in 278ms with 1 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.api.v2.controllers.task.TaskControllerBlockedTest 1✅ 278ms

✅ io.tolgee.ee.api.v2.controllers.task.TaskControllerBlockedTest

✅ detects blocked task()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.task.TaskControllerPermissionsTest.xml

4 tests were completed in 2s with 4 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.api.v2.controllers.task.TaskControllerPermissionsTest 4✅ 2s

✅ io.tolgee.ee.api.v2.controllers.task.TaskControllerPermissionsTest

✅ can do assigned task's basic operations()
✅ sees only tasks assigned to him()
✅ can access assigned task()
✅ can't do advanced assigned task's operations()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.task.TaskControllerTest.xml

19 tests were completed in 7s with 19 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.api.v2.controllers.task.TaskControllerTest 19✅ 7s

✅ io.tolgee.ee.api.v2.controllers.task.TaskControllerTest

✅ project tasks filter by type()
✅ can add keys()
✅ fails to create task with language from different project()
✅ can remove keys()
✅ fails when updating assignees to non-members()
✅ returns list of tasks()
✅ closed tasks can be filtered out by timestamp()
✅ includes keys included in task of different type()
✅ updates existing task()
✅ creates new task which triggers notification()
✅ calculates stats()
✅ gets task detail()
✅ project tasks filter by assignee()
✅ calculates stats for task()
✅ doesn't include keys which are in different task of same type()
✅ creates multiple new tasks()
✅ close and reopen task()
✅ project tasks()
✅ fails to create task with assignee from different project()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.V2ProjectsInvitationControllerEeTest.xml

5 tests were completed in 1s with 5 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.api.v2.controllers.V2ProjectsInvitationControllerEeTest 5✅ 1s

✅ io.tolgee.ee.api.v2.controllers.V2ProjectsInvitationControllerEeTest

✅ fails when feature disabled()
✅ invites user to project with scopes()
✅ adds the languages to view()
✅ validates language permissions()
✅ validates permissions (type vs scopes)()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.api.v2.controllers.WebhookConfigControllerTest.xml

7 tests were completed in 2s with 7 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.api.v2.controllers.WebhookConfigControllerTest 7✅ 2s

✅ io.tolgee.ee.api.v2.controllers.WebhookConfigControllerTest

✅ doesnt create multiple webhooks without feature enabled()
✅ creates webhook config()
✅ get single webhook config()
✅ lists webhook configs()
✅ deletes webhook config()
✅ tests a config()
✅ updates webhook config()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.EeTolgeeTranslatorControllerTest.xml

1 tests were completed in 4s with 1 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.EeTolgeeTranslatorControllerTest 1✅ 4s

✅ io.tolgee.ee.EeTolgeeTranslatorControllerTest

✅ it translates()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.service.EeSubscriptionProviderImplTest.xml

2 tests were completed in 2s with 2 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.service.EeSubscriptionProviderImplTest 2✅ 2s

✅ io.tolgee.ee.service.EeSubscriptionProviderImplTest

✅ cancels subscription when other instance uses the key()
✅ it checks for subscription changes()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.service.slack.SavedSlackMessageServiceTest.xml

2 tests were completed in 535ms with 2 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.service.slack.SavedSlackMessageServiceTest 2✅ 535ms

✅ io.tolgee.ee.service.slack.SavedSlackMessageServiceTest

✅ deletes old messages()
✅ finds messages()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.service.slack.SlackConfigServiceTest.xml

2 tests were completed in 522ms with 2 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.service.slack.SlackConfigServiceTest 2✅ 522ms

✅ io.tolgee.ee.service.slack.SlackConfigServiceTest

✅ deletes configs()
✅ creates new config()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.slack.SlackIntegrationTest.xml

4 tests were completed in 3s with 4 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.slack.SlackIntegrationTest 4✅ 3s

✅ io.tolgee.ee.slack.SlackIntegrationTest

✅ sends message to correct channel after translation changed()
✅ Doesn't send a message if the subscription isn't global and modified language isn't in preferred languages()
✅ sends message to correct channel after key added()
✅ Doesn't send a message if the event isn't in subscribed by user()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.slack.SlackWithAutoTranslationTest.xml

2 tests were completed in 5s with 2 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.slack.SlackWithAutoTranslationTest 2✅ 5s

✅ io.tolgee.ee.slack.SlackWithAutoTranslationTest

✅ sends auto translated text on a new key added with base translation()
✅ sends auto translated text when base provided (non-existing)()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.SsoGlobalTest.xml

8 tests were completed in 6s with 8 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.SsoGlobalTest 8✅ 6s

✅ io.tolgee.ee.SsoGlobalTest

✅ sso auth saves refresh token()
✅ creates new user account and return access token on sso log in()
✅ does not return auth link when tenant is disabled()
✅ user account available validation works()
✅ doesn't authorize user when token exchange fails()
✅ does not auth user when tenant is disabled()
✅ sso auth works via global config()
✅ after timeout should call token endpoint ()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.SsoOrganizationsTest.xml

10 tests were completed in 4s with 10 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.SsoOrganizationsTest 10✅ 4s

✅ io.tolgee.ee.SsoOrganizationsTest

✅ sso auth saves refresh token()
✅ new user belongs to organization associated with the sso issuer()
✅ creates new user account and return access token on sso log in()
✅ does not return auth link when tenant is disabled()
✅ user account available validation works()
✅ sso user can't create organization()
✅ doesn't authorize user when token exchange fails()
✅ does not auth user when tenant is disabled()
✅ sso auth doesn't create demo project and user organization()
✅ after timeout should call token endpoint ()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.unit.SelfHostedEePlanModelTest.xml

1 tests were completed in 36ms with 1 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.unit.SelfHostedEePlanModelTest 1✅ 36ms

✅ io.tolgee.ee.unit.SelfHostedEePlanModelTest

✅ parses plan response with unknown features()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.UsageReportingTest.xml

1 tests were completed in 499ms with 1 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.UsageReportingTest 1✅ 499ms

✅ io.tolgee.ee.UsageReportingTest

✅ it checks for subscription changes()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.UserLimitTest.xml

3 tests were completed in 1s with 3 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.UserLimitTest 3✅ 1s

✅ io.tolgee.ee.UserLimitTest

✅ can delete users when over plan()
✅ cannot create 11th user()
✅ can disable users when over plan()

✅ ee/backend/tests/build/test-results/test/TEST-io.tolgee.ee.WebhookAutomationTest.xml

2 tests were completed in 2s with 2 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
io.tolgee.ee.WebhookAutomationTest 2✅ 2s

✅ io.tolgee.ee.WebhookAutomationTest

✅ it updates webhook config when failing()
✅ it executes webhook()

Annotations

Check failure on line 59 in backend/data/src/main/kotlin/io/tolgee/service/notification/EmailNotificationsService.kt

See this annotation in the file changed.

@github-actions github-actions / Test report for server-app:runWebsocketTests

io.tolgee.websocket.WebsocketWithoutRedisTest ► doesn't subscribe as another user()

Failed test found in:
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithoutRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithoutRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithoutRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithoutRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithoutRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithoutRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithRedisTest.xml
Error:
  java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
Raw output
java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
	at io.tolgee.service.notification.EmailNotificationsService.composeEmailText(EmailNotificationsService.kt:59)
	at io.tolgee.service.notification.EmailNotificationsService.sendEmailNotification(EmailNotificationsService.kt:22)
	at io.tolgee.service.notification.NotificationService.save(NotificationService.kt:38)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720)
	at io.tolgee.service.notification.NotificationService$$SpringCGLIB$$0.save(<generated>)
	at io.tolgee.websocket.AbstractWebsocketTest.saveNotificationForCurrentUser(AbstractWebsocketTest.kt:259)
	at io.tolgee.websocket.AbstractWebsocketTest.doesn't subscribe as another user(AbstractWebsocketTest.kt:247)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)
	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
	at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
	at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:119)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:94)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:89)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:62)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
	at jdk.proxy1/jdk.proxy1.$Proxy2.stop(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)

Check failure on line 59 in backend/data/src/main/kotlin/io/tolgee/service/notification/EmailNotificationsService.kt

See this annotation in the file changed.

@github-actions github-actions / Test report for server-app:runWebsocketTests

io.tolgee.websocket.WebsocketWithoutRedisTest ► notifies user on a new notification()

Failed test found in:
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithoutRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithoutRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithoutRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithoutRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithoutRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithoutRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithRedisTest.xml
Error:
  java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
Raw output
java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
	at io.tolgee.service.notification.EmailNotificationsService.composeEmailText(EmailNotificationsService.kt:59)
	at io.tolgee.service.notification.EmailNotificationsService.sendEmailNotification(EmailNotificationsService.kt:22)
	at io.tolgee.service.notification.NotificationService.save(NotificationService.kt:38)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720)
	at io.tolgee.service.notification.NotificationService$$SpringCGLIB$$0.save(<generated>)
	at io.tolgee.websocket.AbstractWebsocketTest.saveNotificationForCurrentUser(AbstractWebsocketTest.kt:259)
	at io.tolgee.websocket.AbstractWebsocketTest.notifies_user_on_a_new_notification$lambda$21(AbstractWebsocketTest.kt:175)
	at io.tolgee.websocket.WebsocketTestHelper.assertNotified(WebsocketTestHelper.kt:139)
	at io.tolgee.websocket.AbstractWebsocketTest.notifies user on a new notification(AbstractWebsocketTest.kt:173)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)
	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
	at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
	at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:119)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:94)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:89)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:62)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
	at jdk.proxy1/jdk.proxy1.$Proxy2.stop(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)

Check failure on line 59 in backend/data/src/main/kotlin/io/tolgee/service/notification/EmailNotificationsService.kt

See this annotation in the file changed.

@github-actions github-actions / Test report for server-app:runWebsocketTests

io.tolgee.websocket.WebsocketWithoutRedisTest ► notifies user on notifications marked as seen()

Failed test found in:
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithoutRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithoutRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithoutRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithoutRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithoutRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithoutRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithRedisTest.xml
  backend/app/build/test-results/runWebsocketTests/TEST-io.tolgee.websocket.WebsocketWithRedisTest.xml
Error:
  java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
Raw output
java.lang.IllegalStateException: Notification of type TASK_ASSIGNED must contain linkedTask.
	at io.tolgee.service.notification.EmailNotificationsService.composeEmailText(EmailNotificationsService.kt:59)
	at io.tolgee.service.notification.EmailNotificationsService.sendEmailNotification(EmailNotificationsService.kt:22)
	at io.tolgee.service.notification.NotificationService.save(NotificationService.kt:38)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720)
	at io.tolgee.service.notification.NotificationService$$SpringCGLIB$$0.save(<generated>)
	at io.tolgee.websocket.AbstractWebsocketTest.saveNotificationForCurrentUser(AbstractWebsocketTest.kt:259)
	at io.tolgee.websocket.AbstractWebsocketTest.notifies user on notifications marked as seen(AbstractWebsocketTest.kt:191)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:728)
	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
	at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)
	at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:218)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:214)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:139)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:69)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
	at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:119)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:94)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:89)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:62)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
	at jdk.proxy1/jdk.proxy1.$Proxy2.stop(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)