Exporting environment variables Exporting CI Exporting CI_CACHE_SERVER_IP Exporting CI_CACHE_SERVER_PORT Exporting CI_CACHE_SSH_KEY_PATH Exporting CI_CACHE_USER Exporting DISPLAY Exporting PAGER Exporting SEMAPHORE Exporting SEMAPHORE_AGENT_MACHINE_ENVIRONMENT_TYPE Exporting SEMAPHORE_AGENT_MACHINE_OS_IMAGE Exporting SEMAPHORE_AGENT_MACHINE_TYPE Exporting SEMAPHORE_ARTIFACT_TOKEN Exporting SEMAPHORE_CACHE_ARCHIVE_METHOD Exporting SEMAPHORE_CACHE_BACKEND Exporting SEMAPHORE_CACHE_PRIVATE_KEY_PATH Exporting SEMAPHORE_CACHE_URL Exporting SEMAPHORE_CACHE_USERNAME Exporting SEMAPHORE_GIT_BRANCH Exporting SEMAPHORE_GIT_COMMITTER Exporting SEMAPHORE_GIT_COMMIT_AUTHOR Exporting SEMAPHORE_GIT_COMMIT_RANGE Exporting SEMAPHORE_GIT_DIR Exporting SEMAPHORE_GIT_PROVIDER Exporting SEMAPHORE_GIT_REF Exporting SEMAPHORE_GIT_REF_TYPE Exporting SEMAPHORE_GIT_REPO_NAME Exporting SEMAPHORE_GIT_REPO_SLUG Exporting SEMAPHORE_GIT_SHA Exporting SEMAPHORE_GIT_URL Exporting SEMAPHORE_GIT_WORKING_BRANCH Exporting SEMAPHORE_JOB_CREATION_TIME Exporting SEMAPHORE_JOB_ID Exporting SEMAPHORE_JOB_NAME Exporting SEMAPHORE_JOB_TYPE Exporting SEMAPHORE_ORGANIZATION_URL Exporting SEMAPHORE_PIPELINE_0_ARTEFACT_ID Exporting SEMAPHORE_PIPELINE_ARTEFACT_ID Exporting SEMAPHORE_PIPELINE_ID Exporting SEMAPHORE_PIPELINE_PROMOTED_BY Exporting SEMAPHORE_PIPELINE_PROMOTION Exporting SEMAPHORE_PIPELINE_RERUN Exporting SEMAPHORE_PROJECT_ID Exporting SEMAPHORE_PROJECT_NAME Exporting SEMAPHORE_TOOLBOX_METRICS_ENABLED Exporting SEMAPHORE_WORKFLOW_HOOK_SOURCE Exporting SEMAPHORE_WORKFLOW_ID Exporting SEMAPHORE_WORKFLOW_NUMBER Exporting SEMAPHORE_WORKFLOW_RERUN Exporting SEMAPHORE_WORKFLOW_TRIGGERED_BY Exporting SEMAPHORE_WORKFLOW_TRIGGERED_BY_API Exporting SEMAPHORE_WORKFLOW_TRIGGERED_BY_HOOK Exporting SEMAPHORE_WORKFLOW_TRIGGERED_BY_MANUAL_RUN Exporting SEMAPHORE_WORKFLOW_TRIGGERED_BY_SCHEDULE Exporting SSH_PRIVATE_KEY_PATH Exporting TERM Injecting Files Injecting /home/semaphore/.ssh/semaphore_cache_key with file mode 0600 Injecting /home/semaphore/.ssh/id_rsa with file mode 0600 Injecting /home/semaphore/.ssh/ci_cache_key with file mode 0644 Running the pre-job hook configured in the agent Running: source /opt/semaphoreci/prejob/pre_job.sh Warning: The agent is configured to fail the job if the pre-job hook fails. Installing toolbox in pre-job-hook Toolbox download URL: http://packages.semaphoreci.com/toolbox/releases/download/v1.23.1/linux.tar Tar file: linux.tar Attempt 5 toolbox/ toolbox/sem-dockerize toolbox/toolbox toolbox/retry toolbox/enetwork toolbox/artifact toolbox/install-toolbox toolbox/system-metrics-collector toolbox/libcheckout toolbox/cache toolbox/when_otp_24 toolbox/spc toolbox/libchecksum toolbox/when_otp_26 toolbox/when_otp_25 toolbox/install-package toolbox/README.md toolbox/sem-context toolbox/test-results toolbox/sem-version toolbox/ssh-session-cli toolbox/sem-service toolbox/sem-install toolbox/sem-service-check-params toolbox/Dockerfile.dev toolbox/sem-semantic-release retry installed ssh-session-cli installed cache installed sem-context installed sem-service installed sem-dockerize installed sem-service-check-params installed sem-semantic-release installed Installing the artifacts CLI artifacts installed Installing the test results CLI test-results installed Installing the install-package for linux install-package installed Installing the SPC CLI spc installed Installing the when CLI when installed Installing the enetwork CLI enetwork installed Starting to collect System Metrics in /tmp/system-metrics Starting virtual X frame buffer: Xvfb. Toolbox installed Starting ssh-agent Agent pid 2339 ssh-agent started Connecting to cache # 46.4.218.107:29920 SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.11 # 46.4.218.107:29920 SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.11 # 46.4.218.107:29920 SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.11 # 46.4.218.107:29920 SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.11 # 46.4.218.107:29920 SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.11 Identity added: /home/semaphore/.ssh/semaphore_cache_key (/home/semaphore/.ssh/semaphore_cache_key) checkout Performing shallow clone with depth: 50 Cloning into 'operately'... Warning: Permanently added 'github.com,140.82.121.4' (ECDSA) to the list of known hosts. remote: Enumerating objects: 3791, done. remote: Counting objects: 0% (1/3791) remote: Counting objects: 1% (38/3791) remote: Counting objects: 2% (76/3791) remote: Counting objects: 3% (114/3791) remote: Counting objects: 4% (152/3791) remote: Counting objects: 5% (190/3791) remote: Counting objects: 6% (228/3791) remote: Counting objects: 7% (266/3791) remote: Counting objects: 8% (304/3791) remote: Counting objects: 9% (342/3791) remote: Counting objects: 10% (380/3791) remote: Counting objects: 11% (418/3791) remote: Counting objects: 12% (455/3791) remote: Counting objects: 13% (493/3791) remote: Counting objects: 14% (531/3791) remote: Counting objects: 15% (569/3791) remote: Counting objects: 16% (607/3791) remote: Counting objects: 17% (645/3791) remote: Counting objects: 18% (683/3791) remote: Counting objects: 19% (721/3791) remote: Counting objects: 20% (759/3791) remote: Counting objects: 21% (797/3791) remote: Counting objects: 22% (835/3791) remote: Counting objects: 23% (872/3791) remote: Counting objects: 24% (910/3791) remote: Counting objects: 25% (948/3791) remote: Counting objects: 26% (986/3791) remote: Counting objects: 27% (1024/3791) remote: Counting objects: 28% (1062/3791) remote: Counting objects: 29% (1100/3791) remote: Counting objects: 30% (1138/3791) remote: Counting objects: 31% (1176/3791) remote: Counting objects: 32% (1214/3791) remote: Counting objects: 33% (1252/3791) remote: Counting objects: 34% (1289/3791) remote: Counting objects: 35% (1327/3791) remote: Counting objects: 36% (1365/3791) remote: Counting objects: 37% (1403/3791) remote: Counting objects: 38% (1441/3791) remote: Counting objects: 39% (1479/3791) remote: Counting objects: 40% (1517/3791) remote: Counting objects: 41% (1555/3791) remote: Counting objects: 42% (1593/3791) remote: Counting objects: 43% (1631/3791) remote: Counting objects: 44% (1669/3791) remote: Counting objects: 45% (1706/3791) remote: Counting objects: 46% (1744/3791) remote: Counting objects: 47% (1782/3791) remote: Counting objects: 48% (1820/3791) remote: Counting objects: 49% (1858/3791) remote: Counting objects: 50% (1896/3791) remote: Counting objects: 51% (1934/3791) remote: Counting objects: 52% (1972/3791) remote: Counting objects: 53% (2010/3791) remote: Counting objects: 54% (2048/3791) remote: Counting objects: 55% (2086/3791) remote: Counting objects: 56% (2123/3791) remote: Counting objects: 57% (2161/3791) remote: Counting objects: 58% (2199/3791) remote: Counting objects: 59% (2237/3791) remote: Counting objects: 60% (2275/3791) remote: Counting objects: 61% (2313/3791) remote: Counting objects: 62% (2351/3791) remote: Counting objects: 63% (2389/3791) remote: Counting objects: 64% (2427/3791) remote: Counting objects: 65% (2465/3791) remote: Counting objects: 66% (2503/3791) remote: Counting objects: 67% (2540/3791) remote: Counting objects: 68% (2578/3791) remote: Counting objects: 69% (2616/3791) remote: Counting objects: 70% (2654/3791) remote: Counting objects: 71% (2692/3791) remote: Counting objects: 72% (2730/3791) remote: Counting objects: 73% (2768/3791) remote: Counting objects: 74% (2806/3791) remote: Counting objects: 75% (2844/3791) remote: Counting objects: 76% (2882/3791) remote: Counting objects: 77% (2920/3791) remote: Counting objects: 78% (2957/3791) remote: Counting objects: 79% (2995/3791) remote: Counting objects: 80% (3033/3791) remote: Counting objects: 81% (3071/3791) remote: Counting objects: 82% (3109/3791) remote: Counting objects: 83% (3147/3791) remote: Counting objects: 84% (3185/3791) remote: Counting objects: 85% (3223/3791) remote: Counting objects: 86% (3261/3791) remote: Counting objects: 87% (3299/3791) remote: Counting objects: 88% (3337/3791) remote: Counting objects: 89% (3374/3791) remote: Counting objects: 90% (3412/3791) remote: Counting objects: 91% (3450/3791) remote: Counting objects: 92% (3488/3791) remote: Counting objects: 93% (3526/3791) remote: Counting objects: 94% (3564/3791) remote: Counting objects: 95% (3602/3791) remote: Counting objects: 96% (3640/3791) remote: Counting objects: 97% (3678/3791) remote: Counting objects: 98% (3716/3791) remote: Counting objects: 99% (3754/3791) remote: Counting objects: 100% (3791/3791) remote: Counting objects: 100% (3791/3791), done. remote: Compressing objects: 0% (1/2674) remote: Compressing objects: 1% (27/2674) remote: Compressing objects: 2% (54/2674) remote: Compressing objects: 3% (81/2674) remote: Compressing objects: 4% (107/2674) remote: Compressing objects: 5% (134/2674) remote: Compressing objects: 6% (161/2674) remote: Compressing objects: 7% (188/2674) remote: Compressing objects: 8% (214/2674) remote: Compressing objects: 9% (241/2674) remote: Compressing objects: 10% (268/2674) remote: Compressing objects: 11% (295/2674) remote: Compressing objects: 12% (321/2674) remote: Compressing objects: 13% (348/2674) remote: Compressing objects: 14% (375/2674) remote: Compressing objects: 15% (402/2674) remote: Compressing objects: 16% (428/2674) remote: Compressing objects: 17% (455/2674) remote: Compressing objects: 18% (482/2674) remote: Compressing objects: 19% (509/2674) remote: Compressing objects: 20% (535/2674) remote: Compressing objects: 21% (562/2674) remote: Compressing objects: 22% (589/2674) remote: Compressing objects: 23% (616/2674) remote: Compressing objects: 24% (642/2674) remote: Compressing objects: 25% (669/2674) remote: Compressing objects: 26% (696/2674) remote: Compressing objects: 27% (722/2674) remote: Compressing objects: 28% (749/2674) remote: Compressing objects: 29% (776/2674) remote: Compressing objects: 30% (803/2674) remote: Compressing objects: 31% (829/2674) remote: Compressing objects: 32% (856/2674) remote: Compressing objects: 33% (883/2674) remote: Compressing objects: 34% (910/2674) remote: Compressing objects: 35% (936/2674) remote: Compressing objects: 36% (963/2674) remote: Compressing objects: 37% (990/2674) remote: Compressing objects: 38% (1017/2674) remote: Compressing objects: 39% (1043/2674) remote: Compressing objects: 40% (1070/2674) remote: Compressing objects: 41% (1097/2674) remote: Compressing objects: 42% (1124/2674) remote: Compressing objects: 43% (1150/2674) remote: Compressing objects: 44% (1177/2674) remote: Compressing objects: 45% (1204/2674) remote: Compressing objects: 46% (1231/2674) remote: Compressing objects: 47% (1257/2674) remote: Compressing objects: 48% (1284/2674) remote: Compressing objects: 49% (1311/2674) remote: Compressing objects: 50% (1337/2674) remote: Compressing objects: 51% (1364/2674) remote: Compressing objects: 52% (1391/2674) remote: Compressing objects: 53% (1418/2674) remote: Compressing objects: 54% (1444/2674) remote: Compressing objects: 55% (1471/2674) remote: Compressing objects: 56% (1498/2674) remote: Compressing objects: 57% (1525/2674) remote: Compressing objects: 58% (1551/2674) remote: Compressing objects: 59% (1578/2674) remote: Compressing objects: 60% (1605/2674) remote: Compressing objects: 61% (1632/2674) remote: Compressing objects: 62% (1658/2674) remote: Compressing objects: 63% (1685/2674) remote: Compressing objects: 64% (1712/2674) remote: Compressing objects: 65% (1739/2674) remote: Compressing objects: 66% (1765/2674) remote: Compressing objects: 67% (1792/2674) remote: Compressing objects: 68% (1819/2674) remote: Compressing objects: 69% (1846/2674) remote: Compressing objects: 70% (1872/2674) remote: Compressing objects: 71% (1899/2674) remote: Compressing objects: 72% (1926/2674) remote: Compressing objects: 73% (1953/2674) remote: Compressing objects: 74% (1979/2674) remote: Compressing objects: 75% (2006/2674) remote: Compressing objects: 76% (2033/2674) remote: Compressing objects: 77% (2059/2674) remote: Compressing objects: 78% (2086/2674) remote: Compressing objects: 79% (2113/2674) remote: Compressing objects: 80% (2140/2674) remote: Compressing objects: 81% (2166/2674) remote: Compressing objects: 82% (2193/2674) remote: Compressing objects: 83% (2220/2674) remote: Compressing objects: 84% (2247/2674) remote: Compressing objects: 85% (2273/2674) remote: Compressing objects: 86% (2300/2674) remote: Compressing objects: 87% (2327/2674) remote: Compressing objects: 88% (2354/2674) remote: Compressing objects: 89% (2380/2674) remote: Compressing objects: 90% (2407/2674) remote: Compressing objects: 91% (2434/2674) remote: Compressing objects: 92% (2461/2674) remote: Compressing objects: 93% (2487/2674) remote: Compressing objects: 94% (2514/2674) remote: Compressing objects: 95% (2541/2674) remote: Compressing objects: 96% (2568/2674) remote: Compressing objects: 97% (2594/2674) remote: Compressing objects: 98% (2621/2674) remote: Compressing objects: 99% (2648/2674) remote: Compressing objects: 100% (2674/2674) remote: Compressing objects: 100% (2674/2674), done. Receiving objects: 0% (1/3791) Receiving objects: 1% (38/3791) Receiving objects: 2% (76/3791) Receiving objects: 3% (114/3791) Receiving objects: 4% (152/3791) Receiving objects: 5% (190/3791) Receiving objects: 6% (228/3791) Receiving objects: 7% (266/3791) Receiving objects: 8% (304/3791) Receiving objects: 9% (342/3791) Receiving objects: 10% (380/3791) Receiving objects: 11% (418/3791) Receiving objects: 12% (455/3791) Receiving objects: 13% (493/3791) Receiving objects: 14% (531/3791) Receiving objects: 15% (569/3791) Receiving objects: 16% (607/3791) Receiving objects: 17% (645/3791) Receiving objects: 18% (683/3791) Receiving objects: 19% (721/3791) Receiving objects: 20% (759/3791) Receiving objects: 21% (797/3791) Receiving objects: 22% (835/3791) Receiving objects: 23% (872/3791) Receiving objects: 24% (910/3791) Receiving objects: 25% (948/3791) Receiving objects: 26% (986/3791) Receiving objects: 27% (1024/3791) Receiving objects: 28% (1062/3791) Receiving objects: 29% (1100/3791) Receiving objects: 30% (1138/3791) Receiving objects: 31% (1176/3791) Receiving objects: 32% (1214/3791) Receiving objects: 33% (1252/3791) Receiving objects: 34% (1289/3791) Receiving objects: 35% (1327/3791) Receiving objects: 36% (1365/3791) Receiving objects: 37% (1403/3791) Receiving objects: 38% (1441/3791) Receiving objects: 39% (1479/3791) Receiving objects: 40% (1517/3791) Receiving objects: 41% (1555/3791) Receiving objects: 42% (1593/3791) Receiving objects: 43% (1631/3791) Receiving objects: 44% (1669/3791) Receiving objects: 45% (1706/3791) Receiving objects: 46% (1744/3791) Receiving objects: 47% (1782/3791) Receiving objects: 48% (1820/3791) Receiving objects: 49% (1858/3791) Receiving objects: 50% (1896/3791) Receiving objects: 51% (1934/3791) Receiving objects: 52% (1972/3791) Receiving objects: 53% (2010/3791) Receiving objects: 54% (2048/3791) Receiving objects: 55% (2086/3791) Receiving objects: 56% (2123/3791) Receiving objects: 57% (2161/3791) Receiving objects: 58% (2199/3791) Receiving objects: 59% (2237/3791) Receiving objects: 60% (2275/3791) Receiving objects: 61% (2313/3791) Receiving objects: 62% (2351/3791) Receiving objects: 63% (2389/3791) Receiving objects: 64% (2427/3791) Receiving objects: 65% (2465/3791) Receiving objects: 66% (2503/3791) Receiving objects: 67% (2540/3791) Receiving objects: 68% (2578/3791) Receiving objects: 69% (2616/3791) Receiving objects: 70% (2654/3791) Receiving objects: 71% (2692/3791) Receiving objects: 72% (2730/3791) Receiving objects: 73% (2768/3791) Receiving objects: 74% (2806/3791) Receiving objects: 75% (2844/3791) Receiving objects: 76% (2882/3791) Receiving objects: 77% (2920/3791) Receiving objects: 78% (2957/3791) Receiving objects: 79% (2995/3791) Receiving objects: 80% (3033/3791) Receiving objects: 81% (3071/3791) Receiving objects: 82% (3109/3791) Receiving objects: 83% (3147/3791) Receiving objects: 84% (3185/3791) Receiving objects: 85% (3223/3791) Receiving objects: 86% (3261/3791) Receiving objects: 87% (3299/3791) Receiving objects: 88% (3337/3791) Receiving objects: 89% (3374/3791) Receiving objects: 90% (3412/3791) Receiving objects: 91% (3450/3791) Receiving objects: 92% (3488/3791) remote: Total 3791 (delta 1270), reused 2235 (delta 894), pack-reused 0 (from 0) Receiving objects: 93% (3526/3791) Receiving objects: 94% (3564/3791) Receiving objects: 95% (3602/3791) Receiving objects: 96% (3640/3791) Receiving objects: 97% (3678/3791) Receiving objects: 98% (3716/3791) Receiving objects: 99% (3754/3791) Receiving objects: 100% (3791/3791) Receiving objects: 100% (3791/3791), 1.92 MiB | 4.51 MiB/s, done. Resolving deltas: 0% (0/1270) Resolving deltas: 1% (13/1270) Resolving deltas: 2% (26/1270) Resolving deltas: 3% (39/1270) Resolving deltas: 4% (51/1270) Resolving deltas: 5% (64/1270) Resolving deltas: 6% (77/1270) Resolving deltas: 7% (89/1270) Resolving deltas: 8% (102/1270) Resolving deltas: 9% (115/1270) Resolving deltas: 10% (127/1270) Resolving deltas: 11% (140/1270) Resolving deltas: 12% (153/1270) Resolving deltas: 13% (166/1270) Resolving deltas: 14% (178/1270) Resolving deltas: 15% (191/1270) Resolving deltas: 16% (205/1270) Resolving deltas: 17% (216/1270) Resolving deltas: 18% (229/1270) Resolving deltas: 19% (242/1270) Resolving deltas: 20% (254/1270) Resolving deltas: 21% (267/1270) Resolving deltas: 22% (280/1270) Resolving deltas: 23% (293/1270) Resolving deltas: 24% (305/1270) Resolving deltas: 25% (318/1270) Resolving deltas: 26% (331/1270) Resolving deltas: 27% (343/1270) Resolving deltas: 28% (356/1270) Resolving deltas: 29% (369/1270) Resolving deltas: 30% (381/1270) Resolving deltas: 31% (394/1270) Resolving deltas: 32% (407/1270) Resolving deltas: 33% (420/1270) Resolving deltas: 34% (432/1270) Resolving deltas: 35% (445/1270) Resolving deltas: 36% (458/1270) Resolving deltas: 37% (470/1270) Resolving deltas: 38% (483/1270) Resolving deltas: 39% (496/1270) Resolving deltas: 40% (508/1270) Resolving deltas: 41% (521/1270) Resolving deltas: 42% (534/1270) Resolving deltas: 43% (547/1270) Resolving deltas: 44% (559/1270) Resolving deltas: 45% (572/1270) Resolving deltas: 46% (585/1270) Resolving deltas: 47% (597/1270) Resolving deltas: 48% (610/1270) Resolving deltas: 49% (623/1270) Resolving deltas: 50% (635/1270) Resolving deltas: 51% (648/1270) Resolving deltas: 52% (661/1270) Resolving deltas: 53% (674/1270) Resolving deltas: 54% (686/1270) Resolving deltas: 55% (699/1270) Resolving deltas: 56% (712/1270) Resolving deltas: 57% (724/1270) Resolving deltas: 58% (737/1270) Resolving deltas: 59% (750/1270) Resolving deltas: 60% (762/1270) Resolving deltas: 61% (775/1270) Resolving deltas: 62% (788/1270) Resolving deltas: 63% (801/1270) Resolving deltas: 64% (813/1270) Resolving deltas: 65% (826/1270) Resolving deltas: 66% (839/1270) Resolving deltas: 67% (851/1270) Resolving deltas: 68% (864/1270) Resolving deltas: 69% (877/1270) Resolving deltas: 70% (889/1270) Resolving deltas: 71% (902/1270) Resolving deltas: 72% (915/1270) Resolving deltas: 73% (928/1270) Resolving deltas: 74% (940/1270) Resolving deltas: 75% (953/1270) Resolving deltas: 76% (966/1270) Resolving deltas: 77% (978/1270) Resolving deltas: 78% (991/1270) Resolving deltas: 79% (1004/1270) Resolving deltas: 80% (1016/1270) Resolving deltas: 81% (1029/1270) Resolving deltas: 82% (1042/1270) Resolving deltas: 83% (1056/1270) Resolving deltas: 84% (1067/1270) Resolving deltas: 85% (1080/1270) Resolving deltas: 86% (1093/1270) Resolving deltas: 87% (1105/1270) Resolving deltas: 88% (1118/1270) Resolving deltas: 89% (1131/1270) Resolving deltas: 90% (1143/1270) Resolving deltas: 91% (1156/1270) Resolving deltas: 92% (1169/1270) Resolving deltas: 93% (1182/1270) Resolving deltas: 94% (1194/1270) Resolving deltas: 95% (1207/1270) Resolving deltas: 96% (1220/1270) Resolving deltas: 97% (1232/1270) Resolving deltas: 98% (1245/1270) Resolving deltas: 99% (1258/1270) Resolving deltas: 100% (1270/1270) Resolving deltas: 100% (1270/1270), done. HEAD is now at 83ce85b chore: Move contributors to the bottom of the page (#2360) cache restore app-deps HIT: 'app-deps', using key 'app-deps'. Downloading key 'app-deps'... Download complete. Duration: 53.837597ms. Size: 4.1M bytes. Unpacking '/tmp/app-deps-2865359603'... Unpack complete. Duration: 83.544374ms. Restored: app/deps/. cache restore app-build HIT: 'app-build', using key 'app-build'. Downloading key 'app-build'... Download complete. Duration: 374.577457ms. Size: 34.7M bytes. Unpacking '/tmp/app-build-2022088949'... Unpack complete. Duration: 280.060682ms. Restored: app/_build/. cache restore app-node-modules HIT: 'app-node-modules', using key 'app-node-modules'. Downloading key 'app-node-modules'... Download complete. Duration: 492.947214ms. Size: 45.2M bytes. Unpacking '/tmp/app-node-modules-3239628320'... Unpack complete. Duration: 2.110155808s. Restored: app/node_modules/. cache restore turboui-node-modules HIT: 'turboui-node-modules', using key 'turboui-node-modules'. Downloading key 'turboui-node-modules'... Download complete. Duration: 473.978959ms. Size: 48.3M bytes. Unpacking '/tmp/turboui-node-modules-1866399944'... Unpack complete. Duration: 2.187402739s. Restored: turboui/node_modules/. cache restore turboui-dist HIT: 'turboui-dist', using key 'turboui-dist'. Downloading key 'turboui-dist'... Download complete. Duration: 5.886271ms. Size: 77.7K bytes. Unpacking '/tmp/turboui-dist-162178058'... Unpack complete. Duration: 20.304826ms. Restored: turboui/dist/. ./scripts/cache-fix-for-erlang make test.build [?25l[+] Running 0/3 ⠙ db Pulling 0.1s  ⠙ s3mock Pulling 0.1s  ⠙ app Pulling 0.1s  [?25h[?25l[+] Running 0/3 ⠹ db Pulling 0.2s  ⠹ s3mock Pulling 0.2s  ⠹ app Pulling 0.2s  [?25h[?25l[+] Running 0/3 ⠸ db Pulling 0.3s  ⠸ s3mock Pulling 0.3s  ⠸ app Pulling 0.3s  [?25h[?25l[+] Running 0/3 ⠼ db Pulling 0.4s  ⠼ s3mock Pulling 0.4s  ⠼ app Pulling 0.4s  [?25h[?25l[+] Running 0/3 ⠴ db Pulling 0.5s  ⠴ s3mock Pulling 0.5s  ⠴ app Pulling 0.5s  [?25h[?25l[+] Running 0/3 ⠦ db Pulling 0.6s  ⠦ s3mock Pulling 0.6s  ⠦ app Pulling 0.6s  [?25h[?25l[+] Running 0/3 ⠧ db Pulling 0.7s  ⠧ s3mock Pulling 0.7s  ⠧ app Pulling 0.7s  [?25h[?25l[+] Running 0/3 ⠇ db Pulling 0.8s  ⠇ s3mock Pulling 0.8s  ⠇ app Pulling 0.8s  [?25h[?25l[+] Running 0/3 ⠏ db Pulling 0.9s  ⠏ s3mock Pulling 0.9s  ⠏ app Pulling 0.9s  [?25h[?25l[+] Running 0/3 ⠋ db Pulling 1.0s  ⠋ s3mock Pulling 1.0s  ⠋ app Pulling 1.0s  [?25h[?25l[+] Running 0/3 ⠙ db Pulling 1.1s  ⠙ s3mock Pulling 1.1s  ⠙ app Pulling 1.1s  [?25h[?25l[+] Running 0/3 ⠹ db Pulling 1.2s  ⠹ s3mock Pulling 1.2s  ⠹ app Pulling 1.2s  [?25h[?25l[+] Running 0/3 ⠸ db Pulling 1.3s  ⠸ s3mock Pulling 1.3s  ⠸ app Pulling 1.3s  [?25h[?25l[+] Running 0/3 ⠼ db Pulling 1.4s  ⠼ s3mock Pulling 1.4s  ⠼ app Pulling 1.4s  [?25h[?25l[+] Running 0/3 ⠴ db Pulling 1.5s  ⠴ s3mock Pulling 1.5s  ⠴ app Pulling 1.5s  [?25h[?25l[+] Running 0/3 ⠦ db Pulling 1.6s  ⠦ s3mock Pulling 1.6s  ⠦ app Pulling 1.6s  [?25h[?25l[+] Running 0/3 ⠧ db Pulling 1.7s  ⠧ s3mock Pulling 1.7s  ⠧ app Pulling 1.7s  [?25h[?25l[+] Running 0/23 ⠇ db [⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 1.8s  ⠇ s3mock [⠀⠀⠀] Pulling 1.8s  ⠇ app [⠀⠀⠀⠀] Pulling 1.8s  [?25h[?25l[+] Running 0/23 ⠏ db [⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 1.9s  ⠏ s3mock [⠀⠀⠀] Pulling 1.9s  ⠏ app [⠀⠀⠀⠀] Pulling 1.9s  [?25h[?25l[+] Running 0/23 ⠋ db [⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.0s  ⠋ s3mock [⠀⠀⠀] Pulling 2.0s  ⠋ app [⠀⠀⠀⠀] Pulling 2.0s  [?25h[?25l[+] Running 0/23 ⠙ db [⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.1s  ⠙ s3mock [⠀⠀⠀] Pulling 2.1s  ⠙ app [⠀⠀⠀⠀] Pulling 2.1s  [?25h[?25l[+] Running 1/23 ⠹ db [⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.2s  ⠹ s3mock [⠀⠀⠀] Pulling 2.2s  ⠹ app [⠀⠀⠀⠀] Pulling 2.2s  [?25h[?25l[+] Running 1/23 ⠸ db [⠀⣷⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.3s  ⠸ s3mock [⠀⠀⠀] Pulling 2.3s  ⠸ app [⠀⠀⠀⠀] Pulling 2.3s  [?25h[?25l[+] Running 2/23 ⠼ db [⡀⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.4s  ⠼ s3mock [⠀⠀⠀] Pulling 2.4s  ⠼ app [⠀⠀⠀⠀] Pulling 2.4s  [?25h[?25l[+] Running 2/23 ⠴ db [⣄⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.5s  ⠴ s3mock [⠀⠀⠀] Pulling 2.5s  ⠴ app [⠀⠀⠀⠀] Pulling 2.5s  [?25h[?25l[+] Running 2/23 ⠦ db [⣦⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.6s  ⠦ s3mock [⠀⠀⠀] Pulling 2.6s  ⠦ app [⠀⠀⠀⠀] Pulling 2.6s  [?25h[?25l[+] Running 3/23 ⠧ db [⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.7s  ⠧ s3mock [⠀⠀⠀] Pulling 2.7s  ⠧ app [⠀⠀⠀⠀] Pulling 2.7s  [?25h[?25l[+] Running 4/23 ⠇ db [⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.8s  ⠇ s3mock [⠀⠀⠀] Pulling 2.8s  ⠇ app [⠀⠀⠀⠀] Pulling 2.8s  [?25h[?25l[+] Running 4/23 ⠏ db [⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.9s  ⠏ s3mock [⠀⠀⠀] Pulling 2.9s  ⠏ app [⠀⠀⠀⠀] Pulling 2.9s  [?25h[?25l[+] Running 4/23 ⠋ db [⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 3.0s  ⠋ s3mock [⠀⠀⠀] Pulling 3.0s  ⠋ app [⠀⠀⠀⠀] Pulling 3.0s  [?25h[?25l[+] Running 6/23 ⠙ db [⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀] Pulling 3.1s  ⠙ s3mock [⠀⠀⠀] Pulling 3.1s  ⠙ app [⠀⠀⠀⠀] Pulling 3.1s  [?25h[?25l[+] Running 7/23 ⠹ db [⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀] Pulling 3.2s  ⠹ s3mock [⠀⠀⠀] Pulling 3.2s  ⠹ app [⠀⠀⠀⠀] Pulling 3.2s  [?25h[?25l[+] Running 7/23 ⠸ db [⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀] Pulling 3.3s  ⠸ s3mock [⠀⠀⠀] Pulling 3.3s  ⠸ app [⠀⠀⠀⠀] Pulling 3.3s  [?25h[?25l[+] Running 7/23 ⠼ db [⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀] Pulling 3.4s  ⠼ s3mock [⠀⠀⠀] Pulling 3.4s  ⠼ app [⠀⠀⠀⠀] Pulling 3.4s  [?25h[?25l[+] Running 7/23 ⠴ db [⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀] Pulling 3.5s  ⠴ s3mock [⠀⠀⠀] Pulling 3.5s  ⠴ app [⠀⠀⠀⠀] Pulling 3.5s  [?25h[?25l[+] Running 7/23 ⠦ db [⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀] Pulling 3.6s  ⠦ s3mock [⠀⠀⠀] Pulling 3.6s  ⠦ app [⠀⠀⠀⠀] Pulling 3.6s  [?25h[?25l[+] Running 9/23 ⠧ db [⣿⣿⣿⣿⣿⣿⣿⣿⠀⣿⣿⠀⠀] Pulling 3.7s  ⠧ s3mock [⠀⠀⠀] Pulling 3.7s  ⠧ app [⠀⠀⠀⠀] Pulling 3.7s  [?25h[?25l[+] Running 10/23 ⠇ db [⣿⣿⣿⣿⣿⣿⣿⣿⡀⣿⣿⠀⠀] Pulling 3.8s  ⠇ s3mock [⠀⠀⠀] Pulling 3.8s  ⠇ app [⠀⠀⠀⠀] Pulling 3.8s  [?25h[?25l[+] Running 9/23 ⠏ db [⣿⣿⣿⣿⣿⣿⣿⣿⣀⣿⣿⠀⠀] Pulling 3.9s  ⠏ s3mock [⠀⠀⠀] Pulling 3.9s  ⠏ app [⠀⠀⠀⠀] Pulling 3.9s  [?25h[?25l[+] Running 9/23 ⠋ db [⣿⣿⣿⣿⣿⣿⣿⣿⣄⣿⣿⠀⠀] Pulling 4.0s  ⠋ s3mock [⠀⠀⠀] Pulling 4.0s  ⠋ app [⠀⠀⠀⠀] Pulling 4.0s  [?25h[?25l[+] Running 11/23 ⠙ db [⣿⣿⣿⣿⣿⣿⣿⣿⣤⣿⣿⣿⣿] 84.27MB / 137.9MB Pulling 4.1s  ⠙ s3mock [⠀⠀⠀] Pulling 4.1s  ⠙ app [⠀⠀⠀⠀] Pulling 4.1s  [?25h[?25l[+] Running 11/23 ⠹ db [⣿⣿⣿⣿⣿⣿⣿⣿⣦⣿⣿⣿⣿] 96.62MB / 137.9MB Pulling 4.2s  ⠹ s3mock [⠀⠀⠀] Pulling 4.2s  ⠹ app [⠀⠀⠀⠀] Pulling 4.2s  [?25h[?25l[+] Running 11/23 ⠸ db [⣿⣿⣿⣿⣿⣿⣿⣿⣦⣿⣿⣿⣿] 96.62MB / 137.9MB Pulling 4.3s  ⠸ s3mock [⠀⠀⠀] Pulling 4.3s  ⠸ app [⠀⠀⠀⠀] Pulling 4.3s  [?25h[?25l[+] Running 11/23 ⠼ db [⣿⣿⣿⣿⣿⣿⣿⣿⣦⣿⣿⣿⣿] 101.2MB / 137.9MB Pulling 4.4s  ⠼ s3mock [⠀⠀⠀] Pulling 4.4s  ⠼ app [⠀⠀⠀⠀] Pulling 4.4s  [?25h[?25l[+] Running 11/23 ⠴ db [⣿⣿⣿⣿⣿⣿⣿⣿⣶⣿⣿⣿⣿] 115MB / 137.9MB Pulling 4.5s  ⠴ s3mock [⠀⠀⠀] Pulling 4.5s  ⠴ app [⠀⠀⠀⠀] Pulling 4.5s  [?25h[?25l[+] Running 11/23 ⠦ db [⣿⣿⣿⣿⣿⣿⣿⣿⣶⣿⣿⣿⣿] 124MB / 137.9MB Pulling 4.6s  ⠦ s3mock [⠀⠀⠀] Pulling 4.6s  ⠦ app [⣿⠀⠀⠀] Pulling 4.6s  [?25h[?25l[+] Running 11/23 ⠧ db [⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⣿⣿⣿] 131.9MB / 137.9MB Pulling 4.7s  ⠧ s3mock [⠀⠀⠀] Pulling 4.7s  ⠧ app [⣿⠀⠀⠀] Pulling 4.7s  [?25h[?25l[+] Running 12/23 ⠇ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 132.3MB / 137.9MB Pulling 4.8s  ⠇ s3mock [⠀⠀⠀] Pulling 4.8s  ⠇ app [⣿⣀⠀⠀] Pulling 4.8s  [?25h[?25l[+] Running 13/23 ⠏ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.5MB / 137.9MB Pulling 4.9s  ⠏ s3mock [⠀⠀⠀] Pulling 4.9s  ⠏ app [⣿⣀⠀⠀] Pulling 4.9s  [?25h[?25l[+] Running 13/23 ⠋ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.5MB / 137.9MB Pulling 5.0s  ⠋ s3mock [⠀⠀⠀] Pulling 5.0s  ⠋ app [⣿⣀⠀⠀] Pulling 5.0s  [?25h[?25l[+] Running 13/23 ⠙ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.5MB / 137.9MB Pulling 5.1s  ⠙ s3mock [⠀⠀⠀] Pulling 5.1s  ⠙ app [⣿⣤⠀⠀] Pulling 5.1s  [?25h[?25l[+] Running 13/23 ⠹ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.5MB / 137.9MB Pulling 5.2s  ⠹ s3mock [⠀⠀⠀] Pulling 5.2s  ⠹ app [⣿⣦⠀⠀] Pulling 5.2s  [?25h[?25l[+] Running 14/23 ⠸ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.5MB / 137.9MB Pulling 5.3s  ⠸ s3mock [⠀⠀⠀] Pulling 5.3s  ⠸ app [⣿⣿⠀⠀] Pulling 5.3s  [?25h[?25l[+] Running 13/23 ⠼ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.5MB / 137.9MB Pulling 5.4s  ⠼ s3mock [⠀⠀⠀] Pulling 5.4s  ⠼ app [⣿⣿⠀⠀] Pulling 5.4s  [?25h[?25l[+] Running 13/23 ⠴ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.5MB / 137.9MB Pulling 5.5s  ⠴ s3mock [⠀⠀⠀] Pulling 5.5s  ⠴ app [⣿⣿⠀⠀] Pulling 5.5s  [?25h[?25l[+] Running 13/23 ⠦ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.5MB / 137.9MB Pulling 5.6s  ⠦ s3mock [⠀⠀⠀] Pulling 5.6s  ⠦ app [⣿⣿⠀⠀] Pulling 5.6s  [?25h[?25l[+] Running 13/23 ⠧ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.5MB / 137.9MB Pulling 5.7s  ⠧ s3mock [⠀⠀⠀] Pulling 5.7s  ⠧ app [⣿⣿⠀⠀] Pulling 5.7s  [?25h[?25l[+] Running 13/23 ⠇ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.5MB / 137.9MB Pulling 5.8s  ⠇ s3mock [⠀⠀⠀] Pulling 5.8s  ⠇ app [⣿⣿⠀⠀] Pulling 5.8s  [?25h[?25l[+] Running 13/23 ⠏ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.5MB / 137.9MB Pulling 5.9s  ⠏ s3mock [⠀⠀⠀] Pulling 5.9s  ⠏ app [⣿⣿⠀⠀] Pulling 5.9s  [?25h[?25l[+] Running 13/23 ⠋ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.5MB / 137.9MB Pulling 6.0s  ⠋ s3mock [⠀⠀⠀] Pulling 6.0s  ⠋ app [⣿⣿⠀⠀] Pulling 6.0s  [?25h[?25l[+] Running 13/23 ⠙ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.5MB / 137.9MB Pulling 6.1s  ⠙ s3mock [⠀⠀⠀] Pulling 6.1s  ⠙ app [⣿⣿⠀⠀] Pulling 6.1s  [?25h[?25l[+] Running 13/23 ⠹ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.5MB / 137.9MB Pulling 6.2s  ⠹ s3mock [⠀⠀⠀] Pulling 6.2s  ⠹ app [⣿⣿⠀⠀] Pulling 6.2s  [?25h[?25l[+] Running 13/23 ⠸ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.5MB / 137.9MB Pulling 6.3s  ⠸ s3mock [⠀⠀⠀] Pulling 6.3s  ⠸ app [⣿⣿⠀⠀] Pulling 6.3s  [?25h[?25l[+] Running 13/23 ⠼ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.5MB / 137.9MB Pulling 6.5s  ⠼ s3mock [⠀⠀⠀] Pulling 6.5s  ⠼ app [⣿⣿⠀⠀] Pulling 6.5s  [?25h[?25l[+] Running 13/23 ⠴ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.5MB / 137.9MB Pulling 6.5s  ⠴ s3mock [⠀⠀⠀] Pulling 6.5s  ⠴ app [⣿⣿⠀⠀] Pulling 6.5s  [?25h[?25l[+] Running 14/23 ⠦ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.5MB / 137.9MB Pulling 6.6s  ⠦ s3mock [⠀⠀⠀] Pulling 6.6s  ⠦ app [⣿⣿⠀⠀] Pulling 6.6s  [?25h[?25l[+] Running 14/23 ⠧ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.5MB / 137.9MB Pulling 6.7s  ⠧ s3mock [⠀⠀⠀] Pulling 6.7s  ⠧ app [⣿⣿⠀⠀] Pulling 6.7s  [?25h[?25l[+] Running 14/23 ⠇ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.5MB / 137.9MB Pulling 6.8s  ⠇ s3mock [⠀⠀⠀] Pulling 6.8s  ⠇ app [⣿⣿⠀⠀] Pulling 6.8s  [?25h[?25l[+] Running 14/23 ⠏ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.5MB / 137.9MB Pulling 6.9s  ⠏ s3mock [⠀⠀⠀] Pulling 6.9s  ⠏ app [⣿⣿⠀⠀] Pulling 6.9s  [?25h[?25l[+] Running 14/23 ⠋ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.5MB / 137.9MB Pulling 7.0s  ⠋ s3mock [⠀⠀⠀] Pulling 7.0s  ⠋ app [⣿⣿⠀⠀] Pulling 7.0s  [?25h[?25l[+] Running 14/23 ⠙ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.7MB / 137.9MB Pulling 7.1s  ⠙ s3mock [⠀⠀⠀] Pulling 7.1s  ⠙ app [⣿⣿⠀⠀] Pulling 7.1s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠹ s3mock [⠀⠀⠀] Pulling 7.2s  ⠹ app [⣿⣿⠀⠀] Pulling 7.2s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠸ s3mock [⠀⠀⠀] Pulling 7.3s  ⠸ app [⣿⣿⠀⠀] Pulling 7.3s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠼ s3mock [⠀⠀⠀] Pulling 7.4s  ⠼ app [⣿⣿⠀⠀] Pulling 7.4s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠴ s3mock [⠀⠀⠀] Pulling 7.5s  ⠴ app [⣿⣿⠀⠀] Pulling 7.5s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠦ s3mock [⠀⠀⠀] Pulling 7.6s  ⠦ app [⣿⣿⠀⠀] Pulling 7.6s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠧ s3mock [⠀⠀⠀] Pulling 7.7s  ⠧ app [⣿⣿⠀⠀] Pulling 7.7s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠇ s3mock [⠀⠀⠀] Pulling 7.8s  ⠇ app [⣿⣿⠀⠀] Pulling 7.8s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠏ s3mock [⠀⠀⠀] Pulling 7.9s  ⠏ app [⣿⣿⠀⠀] Pulling 7.9s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠋ s3mock [⠀⠀⠀] Pulling 8.0s  ⠋ app [⣿⣿⠀⠀] Pulling 8.0s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠙ s3mock [⠀⠀⠀] Pulling 8.1s  ⠙ app [⣿⣿⠀⠀] Pulling 8.1s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠹ s3mock [⠀⠀⠀] Pulling 8.2s  ⠹ app [⣿⣿⠀⠀] Pulling 8.2s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠸ s3mock [⠀⠀⠀] Pulling 8.3s  ⠸ app [⣿⣿⠀⠀] Pulling 8.3s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠼ s3mock [⠀⠀⠀] Pulling 8.4s  ⠼ app [⣿⣿⠀⠀] Pulling 8.4s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠴ s3mock [⠀⠀⠀] Pulling 8.5s  ⠴ app [⣿⣿⠀⠀] Pulling 8.5s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠦ s3mock [⠀⠀⠀] Pulling 8.6s  ⠦ app [⣿⣿⠀⠀] Pulling 8.6s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠧ s3mock [⠀⠀⠀] Pulling 8.7s  ⠧ app [⣿⣿⠀⠀] Pulling 8.7s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠇ s3mock [⠀⠀⠀] Pulling 8.8s  ⠇ app [⣿⣿⠀⠀] Pulling 8.8s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠏ s3mock [⠀⠀⠀] Pulling 8.9s  ⠏ app [⣿⣿⠀⠀] Pulling 8.9s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠋ s3mock [⠀⠀⠀] Pulling 9.0s  ⠋ app [⣿⣿⠀⠀] Pulling 9.0s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠙ s3mock [⠀⠀⠀] Pulling 9.1s  ⠙ app [⣿⣿⠀⠀] Pulling 9.1s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠹ s3mock [⠀⠀⠀] Pulling 9.2s  ⠹ app [⣿⣿⠀⠀] Pulling 9.2s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠸ s3mock [⠀⠀⠀] Pulling 9.3s  ⠸ app [⣿⣿⠀⠀] Pulling 9.3s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠼ s3mock [⠀⠀⠀] Pulling 9.4s  ⠼ app [⣿⣿⠀⠀] Pulling 9.4s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠴ s3mock [⠀⠀⠀] Pulling 9.5s  ⠴ app [⣿⣿⠀⠀] Pulling 9.5s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠦ s3mock [⠀⠀⠀] Pulling 9.6s  ⠦ app [⣿⣿⠀⠀] Pulling 9.6s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠧ s3mock [⠀⠀⠀] Pulling 9.7s  ⠧ app [⣿⣿⠀⠀] Pulling 9.7s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠇ s3mock [⠀⠀⠀] Pulling 9.8s  ⠇ app [⣿⣿⠀⠀] Pulling 9.8s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠏ s3mock [⠀⠀⠀] Pulling 9.9s  ⠏ app [⣿⣿⠀⠀] Pulling 9.9s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠋ s3mock [⠀⠀⠀] Pulling 10.0s  ⠋ app [⣿⣿⠀⠀] 53.14MB / 419.9MB Pulling 10.0s  [?25h[?25l[+] Running 16/23 ✔ db Pulled 7.2s  ⠙ s3mock [⣿⠀⠀] Pulling 10.1s  ⠙ app [⣿⣿⣤⠀] 61.24MB / 419.9MB Pulling 10.1s  [?25h[?25l[+] Running 17/23 ✔ db Pulled 7.2s  ⠹ s3mock [⣿⠀⠀] Pulling 10.2s  ⠹ app [⣿⣿⣿⠀] 68.76MB / 419.9MB Pulling 10.2s  [?25h[?25l[+] Running 17/23 ✔ db Pulled 7.2s  ⠸ s3mock [⣿⠀⠀] Pulling 10.3s  ⠸ app [⣿⣿⣿⠀] 80.92MB / 419.9MB Pulling 10.3s  [?25h[?25l[+] Running 18/23 ✔ db Pulled 7.2s  ⠼ s3mock [⣿⠀⠀] Pulling 10.4s  ⠼ app [⣿⣿⣿⠀] 94.33MB / 419.9MB Pulling 10.4s  [?25h[?25l[+] Running 18/23 ✔ db Pulled 7.2s  ⠴ s3mock [⣿⠀⠀] Pulling 10.5s  ⠴ app [⣿⣿⣿⠀] 102.9MB / 419.9MB Pulling 10.5s  [?25h[?25l[+] Running 18/23 ✔ db Pulled 7.2s  ⠦ s3mock [⣿⠀⠀] Pulling 10.6s  ⠦ app [⣿⣿⣿⠀] 102.9MB / 419.9MB Pulling 10.6s  [?25h[?25l[+] Running 18/23 ✔ db Pulled 7.2s  ⠧ s3mock [⣿⠀⠀] 7.531MB / 77.95MB Pulling 10.7s  ⠧ app [⣿⣿⣿⡀] 109.4MB / 419.9MB Pulling 10.7s  [?25h[?25l[+] Running 18/23 ✔ db Pulled 7.2s  ⠇ s3mock [⣿⡀⠀] 12.18MB / 77.95MB Pulling 10.8s  ⠇ app [⣿⣿⣿⡀] 115.8MB / 419.9MB Pulling 10.8s  [?25h[?25l[+] Running 18/23 ✔ db Pulled 7.2s  ⠏ s3mock [⣿⣄⠀] 20.75MB / 77.95MB Pulling 10.9s  ⠏ app [⣿⣿⣿⡀] 122.8MB / 419.9MB Pulling 10.9s  [?25h[?25l[+] Running 18/23 ✔ db Pulled 7.2s  ⠋ s3mock [⣿⣤⠀] 26.99MB / 77.95MB Pulling 11.0s  ⠋ app [⣿⣿⣿⡀] 128.7MB / 419.9MB Pulling 11.0s  [?25h[?25l[+] Running 18/23 ✔ db Pulled 7.2s  ⠙ s3mock [⣿⣦⠀] 33.96MB / 77.95MB Pulling 11.1s  ⠙ app [⣿⣿⣿⡀] 134MB / 419.9MB Pulling 11.1s  [?25h[?25l[+] Running 19/23 ✔ db Pulled 7.2s  ⠹ s3mock [⣿⣿⠀] 40.98MB / 77.95MB Pulling 11.2s  ⠹ app [⣿⣿⣿⡀] 140.5MB / 419.9MB Pulling 11.2s  [?25h[?25l[+] Running 18/23 ✔ db Pulled 7.2s  ⠸ s3mock [⣿⣿⡀] 42.85MB / 77.95MB Pulling 11.3s  ⠸ app [⣿⣿⣿⡀] 146.4MB / 419.9MB Pulling 11.3s  [?25h[?25l[+] Running 18/23 ✔ db Pulled 7.2s  ⠼ s3mock [⣿⣿⣀] 48.11MB / 77.95MB Pulling 11.4s  ⠼ app [⣿⣿⣿⣀] 152.9MB / 419.9MB Pulling 11.4s  [?25h[?25l[+] Running 18/23 ✔ db Pulled 7.2s  ⠴ s3mock [⣿⣿⣄] 53.37MB / 77.95MB Pulling 11.5s  ⠴ app [⣿⣿⣿⣀] 158.8MB / 419.9MB Pulling 11.5s  [?25h[?25l[+] Running 18/23 ✔ db Pulled 7.2s  ⠦ s3mock [⣿⣿⣄] 53.37MB / 77.95MB Pulling 11.6s  ⠦ app [⣿⣿⣿⣀] 158.8MB / 419.9MB Pulling 11.6s  [?25h[?25l[+] Running 18/23 ✔ db Pulled 7.2s  ⠧ s3mock [⣿⣿⣄] 54.12MB / 77.95MB Pulling 11.7s  ⠧ app [⣿⣿⣿⣀] 161.5MB / 419.9MB Pulling 11.7s  [?25h[?25l[+] Running 18/23 ✔ db Pulled 7.2s  ⠇ s3mock [⣿⣿⣤] 60.11MB / 77.95MB Pulling 11.8s  ⠇ app [⣿⣿⣿⣀] 168.4MB / 419.9MB Pulling 11.8s  [?25h[?25l[+] Running 18/23 ✔ db Pulled 7.2s  ⠏ s3mock [⣿⣿⣦] 64.6MB / 77.95MB Pulling 11.9s  ⠏ app [⣿⣿⣿⣀] 175.4MB / 419.9MB Pulling 11.9s  [?25h[?25l[+] Running 18/23 ✔ db Pulled 7.2s  ⠋ s3mock [⣿⣿⣷] 70.82MB / 77.95MB Pulling 12.0s  ⠋ app [⣿⣿⣿⣀] 184MB / 419.9MB Pulling 12.0s  [?25h[?25l[+] Running 19/23 ✔ db Pulled 7.2s  ⠙ s3mock [⣿⣿⣿] 73.87MB / 77.95MB Pulling 12.1s  ⠙ app [⣿⣿⣿⣀] 190.9MB / 419.9MB Pulling 12.1s  [?25h[?25l[+] Running 19/23 ✔ db Pulled 7.2s  ⠹ s3mock [⣿⣿⣿] 73.87MB / 77.95MB Pulling 12.2s  ⠹ app [⣿⣿⣿⣄] 202.8MB / 419.9MB Pulling 12.2s  [?25h[?25l[+] Running 19/23 ✔ db Pulled 7.2s  ⠸ s3mock [⣿⣿⣿] 73.87MB / 77.95MB Pulling 12.3s  ⠸ app [⣿⣿⣿⣄] 213.5MB / 419.9MB Pulling 12.3s  [?25h[?25l[+] Running 19/23 ✔ db Pulled 7.2s  ⠼ s3mock [⣿⣿⣿] 73.87MB / 77.95MB Pulling 12.4s  ⠼ app [⣿⣿⣿⣄] 220.5MB / 419.9MB Pulling 12.4s  [?25h[?25l[+] Running 19/23 ✔ db Pulled 7.2s  ⠴ s3mock [⣿⣿⣿] 73.87MB / 77.95MB Pulling 12.5s  ⠴ app [⣿⣿⣿⣄] 227.5MB / 419.9MB Pulling 12.5s  [?25h[?25l[+] Running 19/23 ✔ db Pulled 7.2s  ⠦ s3mock [⣿⣿⣿] 77.05MB / 77.95MB Pulling 12.7s  ⠦ app [⣿⣿⣿⣄] 227.5MB / 419.9MB Pulling 12.7s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠧ app [⣿⣿⣿⣄] 237.1MB / 419.9MB Pulling 12.7s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠇ app [⣿⣿⣿⣤] 251.6MB / 419.9MB Pulling 12.8s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠏ app [⣿⣿⣿⣤] 262.3MB / 419.9MB Pulling 12.9s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠋ app [⣿⣿⣿⣤] 274.1MB / 419.9MB Pulling 13.0s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠙ app [⣿⣿⣿⣤] 285.9MB / 419.9MB Pulling 13.1s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠹ app [⣿⣿⣿⣦] 297.2MB / 419.9MB Pulling 13.2s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠸ app [⣿⣿⣿⣦] 309.6MB / 419.9MB Pulling 13.3s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠼ app [⣿⣿⣿⣦] 309.6MB / 419.9MB Pulling 13.5s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠴ app [⣿⣿⣿⣦] 318.1MB / 419.9MB Pulling 13.5s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠦ app [⣿⣿⣿⣶] 333.7MB / 419.9MB Pulling 13.6s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠧ app [⣿⣿⣿⣶] 345MB / 419.9MB Pulling 13.7s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠇ app [⣿⣿⣿⣶] 356.8MB / 419.9MB Pulling 13.8s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠏ app [⣿⣿⣿⣶] 356.8MB / 419.9MB Pulling 13.9s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠋ app [⣿⣿⣿⣶] 364.3MB / 419.9MB Pulling 14.0s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠙ app [⣿⣿⣿⣷] 379.8MB / 419.9MB Pulling 14.1s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠹ app [⣿⣿⣿⣷] 391.1MB / 419.9MB Pulling 14.2s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠸ app [⣿⣿⣿⣷] 402.4MB / 419.9MB Pulling 14.4s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠼ app [⣿⣿⣿⣷] 408.3MB / 419.9MB Pulling 14.4s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠴ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 14.5s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠦ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 14.6s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠧ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 14.8s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠇ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 14.8s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠏ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 14.9s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠋ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 15.0s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠙ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 15.1s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠹ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 15.2s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠸ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 15.3s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠼ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 15.4s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠴ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 15.5s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠦ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 15.6s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠧ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 15.7s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠇ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 15.8s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠏ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 15.9s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠋ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 16.0s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠙ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 16.1s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠹ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 16.2s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠸ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 16.3s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠼ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 16.4s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠴ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 16.5s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠦ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 16.6s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠧ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 16.7s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠇ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 16.8s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠏ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 16.9s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠋ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 17.0s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠙ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 17.1s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠹ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 17.2s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠸ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 17.3s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠼ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 17.4s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠴ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 17.5s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠦ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 17.6s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠧ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 17.7s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠇ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 17.8s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠏ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 17.9s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠋ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 18.0s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠙ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 18.1s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠹ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 18.3s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠸ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 18.3s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠼ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 18.4s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠴ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 18.5s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠦ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 18.6s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠧ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 18.7s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠇ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 18.8s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠏ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 18.9s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠋ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 19.0s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠙ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 19.1s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠹ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 19.2s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠸ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 19.3s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠼ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 19.4s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠴ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 19.5s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠦ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 19.6s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠧ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 19.7s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠇ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 19.8s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠏ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 19.9s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠋ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 20.0s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠙ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 20.1s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠹ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 20.2s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠸ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 20.3s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠼ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 20.4s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠴ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 20.5s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠦ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 20.6s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠧ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 20.7s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠇ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 20.8s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠏ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 20.9s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠋ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 21.0s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠙ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 21.1s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠹ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 21.2s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠸ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 21.3s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠼ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 21.4s  [?25h[?25l[+] Running 21/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ⠴ app [⣿⣿⣿⣿] 419MB / 419.9MB Pulling 21.5s  [?25h[?25l[+] Running 23/23 ✔ db Pulled 7.2s  ✔ s3mock Pulled 12.7s  ✔ app Pulled 21.5s  [?25h[?25l[+] Running 2/4 ✔ Network operately_default Created0.0s  ✔ Volume "operately_postgres-data" Created0.0s  ⠋ Container operately-db-1 Creating0.0s  ⠋ Container operately-s3mock-1 Creating0.0s  [?25h[?25l[+] Running 2/4 ✔ Network operately_default Created0.0s  ✔ Volume "operately_postgres-data" Created0.0s  ⠙ Container operately-db-1 Creating0.1s  ⠙ Container operately-s3mock-1 Creating0.1s  [?25h[?25l[+] Running 2/4 ✔ Network operately_default Created0.0s  ✔ Volume "operately_postgres-data" Created0.0s  ⠹ Container operately-db-1 Creating0.2s  ⠹ Container operately-s3mock-1 Creating0.2s  [?25h[?25l[+] Running 2/4 ✔ Network operately_default Created0.0s  ✔ Volume "operately_postgres-data" Created0.0s  ⠸ Container operately-db-1 Creating0.3s  ⠸ Container operately-s3mock-1 Creating0.3s  [?25h[?25l[+] Running 3/5 ✔ Network operately_default Created0.0s  ✔ Volume "operately_postgres-data" Created0.0s  ⠼ Container operately-db-1 Starting0.4s  ⠼ Container operately-s3mock-1 Starting0.4s  ✔ Container operately-app-1 Created0.0s  [?25h[?25l[+] Running 3/5 ✔ Network operately_default Created0.0s  ✔ Volume "operately_postgres-data" Created0.0s  ⠴ Container operately-db-1 Starting0.5s  ⠴ Container operately-s3mock-1 Starting0.5s  ✔ Container operately-app-1 Created0.0s  [?25h[?25l[+] Running 4/5 ✔ Network operately_default Created0.0s  ✔ Volume "operately_postgres-data" Created0.0s  ✔ Container operately-db-1 Started0.6s  ✔ Container operately-s3mock-1 Started0.6s  ⠙ Container operately-app-1 Starting0.2s  [?25h[?25l[+] Running 5/5 ✔ Network operately_default Created0.0s  ✔ Volume "operately_postgres-data" Created0.0s  ✔ Container operately-db-1 Started0.6s  ✔ Container operately-s3mock-1 Started0.6s  ✔ Container operately-app-1 Started0.3s  [?25hexport export [?25l(#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠇ idealTree: timing idealTree Completed in 197ms (#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠏ idealTree: timing idealTree Completed in 197ms (#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠏ idealTree: timing idealTree Completed in 197ms (#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠏ idealTree: timing idealTree Completed in 197ms (#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠸ idealTree: timing idealTree Completed in 197ms (##################) ⠹ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠸ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠸ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠸ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠧ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠋ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠇ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠋ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠸ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠇ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ [?25h up to date, audited 491 packages in 2s 115 packages are looking for funding run `npm fund` for details 1 moderate severity vulnerability To address all issues, run: npm audit fix Run `npm audit` for details. > build > tsc * creating /home/dev/.mix/archives/hex-2.1.1 Resolving Hex dependencies... Resolution completed in 0.221s Unchanged: bamboo 2.3.0 bcrypt_elixir 3.1.0 castore 1.0.8 certifi 2.12.0 comeonin 5.4.0 cowboy 2.12.0 cowboy_telemetry 0.4.0 cowlib 2.13.0 custom_base 0.2.1 db_connection 2.7.0 decimal 2.1.1 ecto 3.12.3 ecto_sql 3.12.0 elixir_make 0.8.4 ex_aws 2.5.4 file_system 1.0.1 finch 0.19.0 floki 0.36.2 hackney 1.20.1 hpax 1.0.0 httpoison 2.2.1 idna 6.1.1 inflex 2.0.0 jason 1.4.4 jose 1.11.10 junit_formatter 3.3.1 meck 0.9.2 metrics 1.0.1 mime 2.0.6 mimerl 1.3.0 mint 1.6.2 mock 0.3.8 nimble_options 1.1.1 nimble_pool 1.1.0 oauth2 2.1.0 oban 2.15.2 parent 0.12.1 parse_trans 3.4.1 phoenix 1.7.14 phoenix_ecto 4.6.2 phoenix_html 4.1.1 phoenix_live_reload 1.5.3 phoenix_live_view 0.20.17 phoenix_pubsub 2.1.3 phoenix_template 1.0.4 phoenix_view 2.0.4 plug 1.16.1 plug_cowboy 2.7.1 plug_crypto 2.1.0 postgrex 0.19.1 ranch 1.8.0 req 0.5.8 site_encrypt 0.6.0 ssl_verify_fun 1.1.7 sweet_xml 0.7.4 swoosh 1.17.0 tailwind 0.2.3 telemetry 1.3.0 telemetry_metrics 1.0.0 telemetry_metrics_statsd 0.7.1 telemetry_poller 1.1.0 tesla 1.12.1 ueberauth 0.10.8 ueberauth_google 0.12.1 unicode_util_compat 0.7.0 wallaby 0.30.9 web_driver_client 0.2.0 websock 0.5.3 websock_adapter 0.5.7 x509 0.8.8 * creating /home/dev/.mix/elixir/1-17/rebar3 All dependencies are up to date Generated operately app [?25l(⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠙ idealTree: sill logfile done cleaning log files (#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠏ idealTree: timing idealTree Completed in 258ms (#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠏ idealTree: timing idealTree Completed in 258ms (#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠏ idealTree: timing idealTree Completed in 258ms (#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠏ idealTree: timing idealTree Completed in 258ms (#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠏ idealTree: timing idealTree Completed in 258ms (#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠏ idealTree: timing idealTree Completed in 258ms (##################) ⠧ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠼ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠴ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠴ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠴ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠴ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠴ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠇ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠇ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠇ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠴ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠴ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠇ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠇ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠸ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠦ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠇ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠦ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠦ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠏ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠴ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠙ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ (##################) ⠼ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ [?25h up to date, audited 715 packages in 2s 87 packages are looking for funding run `npm fund` for details 7 vulnerabilities (5 moderate, 2 high) To address all issues, run: npm audit fix Run `npm audit` for details. > build > NODE_ENV=test vite build vite v6.2.5 building for production... ✓ 15429 modules transformed. priv/static/.vite/manifest.json  0.29 kB │ gzip: 0.16 kB priv/static/assets/app-DMf9gdmz.js 2,556.46 kB │ gzip: 328.43 kB │ map: 3,451.93 kB priv/static/assets/vendor-nWW4m-mw.js 4,398.04 kB │ gzip: 900.48 kB │ map: 8,892.61 kB ✓ built in 19.36s Rebuilding... Done in 1819ms. Check your digested files at "priv/static" The database for Operately.Repo has been created  10:30:00.908 [info] == Running 20230306115717 Operately.Repo.Migrations.CreateGroups.change/0 forward  10:30:00.909 [info] create table groups  10:30:00.911 [info] == Migrated 20230306115717 in 0.0s  10:30:00.929 [info] == Running 20230307123238 Operately.Repo.Migrations.CreateObjectives.change/0 forward  10:30:00.929 [info] create table objectives  10:30:00.931 [info] == Migrated 20230307123238 in 0.0s  10:30:00.932 [info] == Running 20230307135121 Operately.Repo.Migrations.CreateKeyResults.change/0 forward  10:30:00.932 [info] create table key_results  10:30:00.933 [info] create index key_results_objective_id_index  10:30:00.934 [info] == Migrated 20230307135121 in 0.0s  10:30:00.934 [info] == Running 20230307154049 Operately.Repo.Migrations.AddDirectionToKeyResultsTable.change/0 forward  10:30:00.934 [info] alter table key_results  10:30:00.935 [info] == Migrated 20230307154049 in 0.0s  10:30:00.935 [info] == Running 20230308141139 Operately.Repo.Migrations.CreateTenets.change/0 forward  10:30:00.936 [info] create table tenets  10:30:00.936 [info] == Migrated 20230308141139 in 0.0s  10:30:00.937 [info] == Running 20230309131630 Operately.Repo.Migrations.CreateKpis.change/0 forward  10:30:00.937 [info] create table kpis  10:30:00.938 [info] == Migrated 20230309131630 in 0.0s  10:30:00.939 [info] == Running 20230309160755 Operately.Repo.Migrations.CreateProjects.change/0 forward  10:30:00.939 [info] create table projects  10:30:00.940 [info] == Migrated 20230309160755 in 0.0s  10:30:00.941 [info] == Running 20230314122433 Operately.Repo.Migrations.CreatePeople.change/0 forward  10:30:00.941 [info] create table people  10:30:00.942 [info] create index people_handle_index  10:30:00.942 [info] == Migrated 20230314122433 in 0.0s  10:30:00.943 [info] == Running 20230314123005 Operately.Repo.Migrations.CreateAccountsAuthTables.change/0 forward  10:30:00.944 [info] execute "CREATE EXTENSION IF NOT EXISTS citext"  10:30:00.949 [info] create table accounts  10:30:00.950 [info] create index accounts_email_index  10:30:00.951 [info] create table accounts_tokens  10:30:00.952 [info] create index accounts_tokens_account_id_index  10:30:00.952 [info] create index accounts_tokens_context_token_index  10:30:00.953 [info] == Migrated 20230314123005 in 0.0s  10:30:00.954 [info] == Running 20230317152250 Operately.Repo.Migrations.CreateAlignments.change/0 forward  10:30:00.954 [info] create table alignments  10:30:00.955 [info] == Migrated 20230317152250 in 0.0s  10:30:00.956 [info] == Running 20230319194352 Operately.Repo.Migrations.CreateOwnerships.change/0 forward  10:30:00.956 [info] create table ownerships  10:30:00.957 [info] == Migrated 20230319194352 in 0.0s  10:30:00.958 [info] == Running 20230323173550 Operately.Repo.Migrations.CreateMembers.change/0 forward  10:30:00.959 [info] create table members  10:30:00.960 [info] create index members_group_id_index  10:30:00.960 [info] create index members_person_id_index  10:30:00.961 [info] == Migrated 20230323173550 in 0.0s  10:30:00.962 [info] == Running 20230413142030 Operately.Repo.Migrations.AddStatusFieldToKeyResults.change/0 forward  10:30:00.962 [info] alter table key_results  10:30:00.962 [info] == Migrated 20230413142030 in 0.0s  10:30:00.963 [info] == Running 20230416071114 Operately.Repo.Migrations.CreateUpdates.change/0 forward  10:30:00.963 [info] create table updates  10:30:00.965 [info] create index updates_author_id_index  10:30:00.965 [info] == Migrated 20230416071114 in 0.0s  10:30:00.966 [info] == Running 20230417173349 Operately.Repo.Migrations.CreateComments.change/0 forward  10:30:00.966 [info] create table comments  10:30:00.968 [info] create index comments_update_id_index  10:30:00.968 [info] create index comments_author_id_index  10:30:00.969 [info] == Migrated 20230417173349 in 0.0s  10:30:00.969 [info] == Running 20230420073647 Operately.Repo.Migrations.ConnectPeopleWithAccounts.change/0 forward  10:30:00.969 [info] alter table people  10:30:00.970 [info] == Migrated 20230420073647 in 0.0s  10:30:00.971 [info] == Running 20230424111700 Operately.Repo.Migrations.AddMissionToGroups.change/0 forward  10:30:00.971 [info] alter table groups  10:30:00.971 [info] == Migrated 20230424111700 in 0.0s  10:30:00.972 [info] == Running 20230424144020 Operately.Repo.Migrations.AddGroupContactsTable.change/0 forward  10:30:00.972 [info] create table contacts  10:30:00.973 [info] create index contacts_group_id_index  10:30:00.974 [info] == Migrated 20230424144020 in 0.0s  10:30:00.974 [info] == Running 20230425114123 Operately.Repo.Migrations.AddGroupIdToProjects.change/0 forward  10:30:00.975 [info] alter table projects  10:30:00.975 [info] create index projects_group_id_index  10:30:00.976 [info] == Migrated 20230425114123 in 0.0s  10:30:00.976 [info] == Running 20230425161330 Operately.Repo.Migrations.AddGroupIdToObjectives.change/0 forward  10:30:00.977 [info] alter table objectives  10:30:00.977 [info] create index objectives_group_id_index  10:30:00.977 [info] == Migrated 20230425161330 in 0.0s  10:30:00.978 [info] == Running 20230426065811 :"Elixir.Operately.Repo.Migrations.Add-steps-to-key-results".change/0 forward  10:30:00.978 [info] alter table key_results  10:30:00.979 [info] == Migrated 20230426065811 in 0.0s  10:30:00.979 [info] == Running 20230427073231 Operately.Repo.Migrations.AddOwnerToObjectives.change/0 forward  10:30:00.980 [info] alter table objectives  10:30:00.980 [info] create index objectives_owner_id_index  10:30:00.981 [info] == Migrated 20230427073231 in 0.0s  10:30:00.981 [info] == Running 20230501204731 Operately.Repo.Migrations.AddOwnerIdToKeyResults.change/0 forward  10:30:00.981 [info] alter table key_results  10:30:00.982 [info] create index key_results_owner_id_index  10:30:00.983 [info] == Migrated 20230501204731 in 0.0s  10:30:00.983 [info] == Running 20230503165843 Operately.Repo.Migrations.AddGroupIdToKeyResults.change/0 forward  10:30:00.983 [info] alter table key_results  10:30:00.984 [info] create index key_results_group_id_index  10:30:00.984 [info] == Migrated 20230503165843 in 0.0s  10:30:00.985 [info] == Running 20230505081629 Operately.Repo.Migrations.CreateCompanies.change/0 forward  10:30:00.985 [info] create table companies  10:30:00.986 [info] == Migrated 20230505081629 in 0.0s  10:30:00.987 [info] == Running 20230505084350 Operately.Repo.Migrations.ConnectTenetsWithCompany.change/0 forward  10:30:00.987 [info] alter table tenets  10:30:00.987 [info] create index tenets_company_id_index  10:30:00.988 [info] == Migrated 20230505084350 in 0.0s  10:30:00.989 [info] == Running 20230505091631 Operately.Repo.Migrations.ConnectKpisWithTenets.change/0 forward  10:30:00.989 [info] alter table kpis  10:30:00.989 [info] create index kpis_tenet_id_index  10:30:00.990 [info] == Migrated 20230505091631 in 0.0s  10:30:00.990 [info] == Running 20230505101413 Operately.Repo.Migrations.CreateKpiMetrics.change/0 forward  10:30:00.991 [info] create table kpi_metrics  10:30:00.991 [info] create index kpi_metrics_kpi_id_index  10:30:00.992 [info] == Migrated 20230505101413 in 0.0s  10:30:00.992 [info] == Running 20230505144357 Operately.Repo.Migrations.ConnectTenetsWithObjectives.change/0 forward  10:30:00.993 [info] alter table objectives  10:30:00.993 [info] create index objectives_tenet_id_index  10:30:00.994 [info] == Migrated 20230505144357 in 0.0s  10:30:00.994 [info] == Running 20230508072606 Operately.Repo.Migrations.AddStartedAtAndDeadlineToProjects.change/0 forward  10:30:00.994 [info] alter table projects  10:30:00.995 [info] == Migrated 20230508072606 in 0.0s  10:30:00.995 [info] == Running 20230509105957 Operately.Repo.Migrations.ConvertProjectDescriptionToLongString.change/0 forward  10:30:00.996 [info] alter table projects  10:30:00.996 [info] == Migrated 20230509105957 in 0.0s  10:30:00.996 [info] == Running 20230509112631 Operately.Repo.Migrations.AddOwnerIdToProjects.change/0 forward  10:30:00.997 [info] alter table projects  10:30:00.997 [info] create index projects_owner_id_index  10:30:00.998 [info] == Migrated 20230509112631 in 0.0s  10:30:00.998 [info] == Running 20230511081625 Operately.Repo.Migrations.CreateProjectMilestones.change/0 forward  10:30:00.998 [info] create table project_milestones  10:30:00.999 [info] create index project_milestones_project_id_index  10:30:01.000 [info] == Migrated 20230511081625 in 0.0s  10:30:01.000 [info] == Running 20230511123715 Operately.Repo.Migrations.AddStatusToProjectMilestones.change/0 forward  10:30:01.000 [info] alter table project_milestones  10:30:01.001 [info] == Migrated 20230511123715 in 0.0s  10:30:01.002 [info] == Running 20230511130648 Operately.Repo.Migrations.ConnectProjectsWithObjectives.change/0 forward  10:30:01.002 [info] alter table projects  10:30:01.002 [info] create index projects_objective_id_index  10:30:01.003 [info] == Migrated 20230511130648 in 0.0s  10:30:01.003 [info] == Running 20230511143354 Operately.Repo.Migrations.CreateProjectContributors.change/0 forward  10:30:01.004 [info] create table project_contributors  10:30:01.004 [info] create index project_contributors_project_id_index  10:30:01.005 [info] create index project_contributors_person_id_index  10:30:01.005 [info] == Migrated 20230511143354 in 0.0s  10:30:01.006 [info] == Running 20230514143822 Operately.Repo.Migrations.AddNextUpdateScheduledAtToProjects.change/0 forward  10:30:01.006 [info] alter table projects  10:30:01.006 [info] == Migrated 20230514143822 in 0.0s  10:30:01.007 [info] == Running 20230514150838 Operately.Repo.Migrations.AddPhasesToProjects.change/0 forward  10:30:01.007 [info] alter table projects  10:30:01.008 [info] == Migrated 20230514150838 in 0.0s  10:30:01.008 [info] == Running 20230516165829 Operately.Repo.Migrations.AddTypeToUpdates.change/0 forward  10:30:01.008 [info] alter table updates  10:30:01.009 [info] == Migrated 20230516165829 in 0.0s  10:30:01.009 [info] == Running 20230516165859 Operately.Repo.Migrations.ChangeContentToJsonbInUpdates.change/0 forward  10:30:01.009 [info] alter table updates  10:30:01.010 [info] == Migrated 20230516165859 in 0.0s  10:30:01.010 [info] == Running 20230518085735 :"Elixir.Operately.Repo.Migrations.Connect-people-with-the-company".change/0 forward  10:30:01.010 [info] alter table people  10:30:01.011 [info] create index people_company_id_index  10:30:01.012 [info] == Migrated 20230518085735 in 0.0s  10:30:01.012 [info] == Running 20230522145215 Operately.Repo.Migrations.ConvertProjectDescriptionToRichText.change/0 forward  10:30:01.012 [info] alter table projects  10:30:01.013 [info] == Migrated 20230522145215 in 0.0s  10:30:01.013 [info] == Running 20230524112942 Operately.Repo.Migrations.ChangeCommentContentTypeToJsonb.change/0 forward  10:30:01.013 [info] alter table comments  10:30:01.014 [info] == Migrated 20230524112942 in 0.0s  10:30:01.014 [info] == Running 20230525072607 Operately.Repo.Migrations.AddAcknowledgementsToUpdates.change/0 forward  10:30:01.014 [info] alter table updates  10:30:01.015 [info] create index updates_acknowledging_person_id_index  10:30:01.016 [info] == Migrated 20230525072607 in 0.0s  10:30:01.016 [info] == Running 20230525094352 Operately.Repo.Migrations.CreateReactions.change/0 forward  10:30:01.016 [info] create table reactions  10:30:01.018 [info] create index reactions_person_id_index  10:30:01.018 [info] == Migrated 20230525094352 in 0.0s  10:30:01.019 [info] == Running 20230531125654 Operately.Repo.Migrations.ChangeObjectiveDescriptionToRichText.change/0 forward  10:30:01.019 [info] alter table objectives  10:30:01.019 [info] == Migrated 20230531125654 in 0.0s  10:30:01.020 [info] == Running 20230613093854 Operately.Repo.Migrations.AddReviwerToProjects.change/0 forward  10:30:01.020 [info] alter table projects  10:30:01.020 [info] create index projects_reviewer_id_index  10:30:01.021 [info] == Migrated 20230613093854 in 0.0s  10:30:01.021 [info] == Running 20230616104714 Operately.Repo.Migrations.RemoveOwnerAndReviewerFromProjects.change/0 forward  10:30:01.022 [info] alter table projects  10:30:01.022 [info] == Migrated 20230616104714 in 0.0s  10:30:01.023 [info] == Running 20230616104947 Operately.Repo.Migrations.AddContributorRole.change/0 forward  10:30:01.023 [info] alter table project_contributors  10:30:01.024 [info] == Migrated 20230616104947 in 0.0s  10:30:01.024 [info] == Running 20230619081500 Operately.Repo.Migrations.CascadeDeletionFromUpdatesToComments.change/0 forward  10:30:01.024 [info] drop constraint comments_update_id_fkey from table comments  10:30:01.025 [info] alter table comments  10:30:01.025 [info] == Migrated 20230619081500 in 0.0s  10:30:01.026 [info] == Running 20230622091228 Operately.Repo.Migrations.CreateProjectDocuments.change/0 forward  10:30:01.026 [info] create table project_documents  10:30:01.027 [info] == Migrated 20230622091228 in 0.0s  10:30:01.028 [info] == Running 20230622091416 Operately.Repo.Migrations.AddDocumentLinksToProjects.change/0 forward  10:30:01.028 [info] alter table projects  10:30:01.029 [info] create index projects_pitch_document_id_index  10:30:01.030 [info] create index projects_plan_document_id_index  10:30:01.030 [info] create index projects_execution_review_document_id_index  10:30:01.031 [info] create index projects_control_review_document_id_index  10:30:01.032 [info] create index projects_retrospective_document_id_index  10:30:01.032 [info] == Migrated 20230622091416 in 0.0s  10:30:01.033 [info] == Running 20230622123346 Operately.Repo.Migrations.ChangeFkContraintOnProjectDocuments.change/0 forward  10:30:01.033 [info] drop constraint projects_pitch_document_id_fkey from table projects  10:30:01.034 [info] drop constraint projects_plan_document_id_fkey from table projects  10:30:01.034 [info] drop constraint projects_execution_review_document_id_fkey from table projects  10:30:01.034 [info] drop constraint projects_control_review_document_id_fkey from table projects  10:30:01.035 [info] drop constraint projects_retrospective_document_id_fkey from table projects  10:30:01.035 [info] alter table projects  10:30:01.037 [info] == Migrated 20230622123346 in 0.0s  10:30:01.038 [info] == Running 20230622124736 Operately.Repo.Migrations.AddAuthorIdToProjectDocuments.change/0 forward  10:30:01.038 [info] alter table project_documents  10:30:01.038 [info] == Migrated 20230622124736 in 0.0s  10:30:01.039 [info] == Running 20230627111445 Operately.Repo.Migrations.AddCompanyAndCreatorIdToProjects.change/0 forward  10:30:01.039 [info] alter table projects  10:30:01.040 [info] create index projects_company_id_index  10:30:01.040 [info] == Migrated 20230627111445 in 0.0s  10:30:01.042 [info] == Running 20230628075117 Operately.Repo.Migrations.CreateActivities.change/0 forward  10:30:01.042 [info] create table activities  10:30:01.046 [info] == Migrated 20230628075117 in 0.0s  10:30:01.050 [info] == Running 20230628083813 Operately.Repo.Migrations.AddPersonIdToActivities.change/0 forward  10:30:01.050 [info] alter table activities  10:30:01.051 [info] create index activities_person_id_index  10:30:01.051 [info] == Migrated 20230628083813 in 0.0s  10:30:01.052 [info] == Running 20230628091302 Operately.Repo.Migrations.AddScopeTypeAndScopeIdToActivities.change/0 forward  10:30:01.052 [info] alter table activities  10:30:01.053 [info] == Migrated 20230628091302 in 0.0s  10:30:01.054 [info] == Running 20230628111810 Operately.Repo.Migrations.AddEventDataToActivities.change/0 forward  10:30:01.054 [info] alter table activities  10:30:01.054 [info] == Migrated 20230628111810 in 0.0s  10:30:01.055 [info] == Running 20230703132310 Operately.Repo.Migrations.AddPhaseToProjectMilestones.change/0 forward  10:30:01.055 [info] alter table project_milestones  10:30:01.055 [info] == Migrated 20230703132310 in 0.0s  10:30:01.056 [info] == Running 20230704093525 Operately.Repo.Migrations.CascadeDeletionFromProjectToMilestones.change/0 forward  10:30:01.056 [info] drop constraint project_milestones_project_id_fkey from table project_milestones  10:30:01.056 [info] alter table project_milestones  10:30:01.057 [info] == Migrated 20230704093525 in 0.0s  10:30:01.058 [info] == Running 20230706114152 Operately.Repo.Migrations.CascadeDeleteFromProjectToContributors.change/0 forward  10:30:01.058 [info] drop constraint project_contributors_project_id_fkey from table project_contributors  10:30:01.058 [info] alter table project_contributors  10:30:01.059 [info] == Migrated 20230706114152 in 0.0s  10:30:01.060 [info] == Running 20230707132916 Operately.Repo.Migrations.CreatePeoplePins.change/0 forward  10:30:01.060 [info] create table people_pins  10:30:01.061 [info] create index people_pins_person_id_index  10:30:01.061 [info] == Migrated 20230707132916 in 0.0s  10:30:01.062 [info] == Running 20230707134247 Operately.Repo.Migrations.ChangePinedToPinnedInPeoplePins.change/0 forward  10:30:01.062 [info] rename column pined_id to pinned_id on table people_pins  10:30:01.062 [info] rename column pened_type to pinned_type on table people_pins  10:30:01.063 [info] == Migrated 20230707134247 in 0.0s  10:30:01.063 [info] == Running 20230707134647 Operately.Repo.Migrations.ChangeTypeOfPinnedTypeFromUuidToString.change/0 forward  10:30:01.064 [info] alter table people_pins  10:30:01.064 [info] == Migrated 20230707134647 in 0.0s  10:30:01.065 [info] == Running 20230711113953 Operately.Repo.Migrations.CreateDashboards.change/0 forward  10:30:01.065 [info] create table dashboards  10:30:01.066 [info] create index dashboards_company_id_index  10:30:01.066 [info] == Migrated 20230711113953 in 0.0s  10:30:01.067 [info] == Running 20230711114252 Operately.Repo.Migrations.CreateDashboardPanels.change/0 forward  10:30:01.067 [info] create table dashboard_panels  10:30:01.068 [info] create index dashboard_panels_dashboard_id_index  10:30:01.069 [info] == Migrated 20230711114252 in 0.0s  10:30:01.069 [info] == Running 20230711115223 Operately.Repo.Migrations.LinkHomeDashboardToPerson.change/0 forward  10:30:01.069 [info] alter table people  10:30:01.070 [info] == Migrated 20230711115223 in 0.0s  10:30:01.071 [info] == Running 20230711115703 Operately.Repo.Migrations.RemovePinsTable.change/0 forward  10:30:01.071 [info] drop table people_pins  10:30:01.071 [info] == Migrated 20230711115703 in 0.0s  10:30:01.072 [info] == Running 20230711122712 Operately.Repo.Migrations.AddTypeToPanels.change/0 forward  10:30:01.072 [info] alter table dashboard_panels  10:30:01.072 [info] == Migrated 20230711122712 in 0.0s  10:30:01.073 [info] == Running 20230712120056 Operately.Repo.Migrations.AddNotificationFieldsToPeople.change/0 forward  10:30:01.073 [info] alter table people  10:30:01.074 [info] == Migrated 20230712120056 in 0.0s  10:30:01.074 [info] == Running 20230713075537 Operately.Repo.Migrations.AddObanJobsTable.up/0 forward  10:30:01.083 [info] execute "DO $$\nBEGIN\nIF NOT EXISTS (SELECT 1 FROM pg_type\n WHERE typname = 'oban_job_state'\n AND typnamespace = 'public'::regnamespace::oid) THEN\n CREATE TYPE \"public\".oban_job_state AS ENUM (\n 'available',\n 'scheduled',\n 'executing',\n 'retryable',\n 'completed',\n 'discarded'\n );\n END IF;\nEND$$;\n"  10:30:01.084 [info] create table if not exists public.oban_jobs  10:30:01.086 [info] create index if not exists public.oban_jobs_queue_index  10:30:01.087 [info] create index if not exists public.oban_jobs_state_index  10:30:01.087 [info] create index if not exists public.oban_jobs_scheduled_at_index  10:30:01.088 [info] execute "CREATE OR REPLACE FUNCTION \"public\".oban_jobs_notify() RETURNS trigger AS $$\nDECLARE\n channel text;\n notice json;\nBEGIN\n IF (TG_OP = 'INSERT') THEN\n channel = 'public.oban_insert';\n notice = json_build_object('queue', NEW.queue, 'state', NEW.state);\n\n -- No point triggering for a job that isn't scheduled to run now\n IF NEW.scheduled_at IS NOT NULL AND NEW.scheduled_at > now() AT TIME ZONE 'utc' THEN\n RETURN null;\n END IF;\n ELSE\n channel = 'public.oban_update';\n notice = json_build_object('queue', NEW.queue, 'new_state', NEW.state, 'old_state', OLD.state);\n END IF;\n\n PERFORM pg_notify(channel, notice::text);\n\n RETURN NULL;\nEND;\n$$ LANGUAGE plpgsql;\n"  10:30:01.088 [info] execute "DROP TRIGGER IF EXISTS oban_notify ON \"public\".oban_jobs"  10:30:01.088 [info] trigger "oban_notify" for relation "public.oban_jobs" does not exist, skipping  10:30:01.088 [info] execute "CREATE TRIGGER oban_notify\nAFTER INSERT OR UPDATE OF state ON \"public\".oban_jobs\nFOR EACH ROW EXECUTE PROCEDURE \"public\".oban_jobs_notify();\n"  10:30:01.089 [info] drop index if exists public.oban_jobs_scheduled_at_index  10:30:01.089 [info] create index public.oban_jobs_scheduled_at_index  10:30:01.089 [info] create check constraint worker_length on table public.oban_jobs  10:30:01.090 [info] create check constraint queue_length on table public.oban_jobs  10:30:01.090 [info] execute "CREATE OR REPLACE FUNCTION \"public\".oban_wrap_id(value bigint) RETURNS int AS $$\nBEGIN\n RETURN (CASE WHEN value > 2147483647 THEN mod(value, 2147483647) ELSE value END)::int;\nEND;\n$$ LANGUAGE plpgsql IMMUTABLE;\n"  10:30:01.090 [info] alter table public.oban_jobs  10:30:01.090 [info] execute "DROP FUNCTION IF EXISTS \"public\".oban_wrap_id(value bigint)"  10:30:01.091 [info] drop index if exists public.oban_jobs_scheduled_at_index  10:30:01.091 [info] drop index if exists public.oban_jobs_queue_index  10:30:01.091 [info] drop index if exists public.oban_jobs_state_index  10:30:01.091 [info] create index if not exists public.oban_jobs_queue_state_scheduled_at_id_index  10:30:01.092 [info] create index if not exists public.oban_jobs_attempted_at_id_index  10:30:01.092 [info] alter table public.oban_jobs  10:30:01.092 [info] alter table public.oban_jobs  10:30:01.093 [info] drop index if exists public.oban_jobs_queue_state_scheduled_at_id_index  10:30:01.093 [info] create index if not exists public.oban_jobs_state_queue_priority_scheduled_at_id_index  10:30:01.093 [info] execute "CREATE OR REPLACE FUNCTION \"public\".oban_jobs_notify() RETURNS trigger AS $$\nDECLARE\n channel text;\n notice json;\nBEGIN\n IF NEW.state = 'available' THEN\n channel = 'public.oban_insert';\n notice = json_build_object('queue', NEW.queue);\n\n PERFORM pg_notify(channel, notice::text);\n END IF;\n\n RETURN NULL;\nEND;\n$$ LANGUAGE plpgsql;\n"  10:30:01.094 [info] execute "DROP TRIGGER IF EXISTS oban_notify ON \"public\".oban_jobs"  10:30:01.094 [info] execute "CREATE TRIGGER oban_notify\nAFTER INSERT ON \"public\".oban_jobs\nFOR EACH ROW EXECUTE PROCEDURE \"public\".oban_jobs_notify();\n"  10:30:01.094 [info] alter table public.oban_jobs  10:30:01.098 [info] execute "DO $$\nDECLARE\n version int;\n already bool;\nBEGIN\n SELECT current_setting('server_version_num')::int INTO version;\n SELECT '{cancelled}' <@ enum_range(NULL::\"public\".oban_job_state)::text[] INTO already;\n\n IF already THEN\n RETURN;\n ELSIF version >= 120000 THEN\n ALTER TYPE \"public\".oban_job_state ADD VALUE IF NOT EXISTS 'cancelled';\n ELSE\n ALTER TYPE \"public\".oban_job_state RENAME TO old_oban_job_state;\n\n CREATE TYPE \"public\".oban_job_state AS ENUM (\n 'available',\n 'scheduled',\n 'executing',\n 'retryable',\n 'completed',\n 'discarded',\n 'cancelled'\n );\n\n ALTER TABLE \"public\".oban_jobs RENAME column state TO _state;\n ALTER TABLE \"public\".oban_jobs ADD state \"public\".oban_job_state NOT NULL default 'available';\n\n UPDATE \"public\".oban_jobs SET state = _state::text::\"public\".oban_job_state;\n\n ALTER TABLE \"public\".oban_jobs DROP column _state;\n DROP TYPE \"public\".old_oban_job_state;\n END IF;\nEND$$;\n"  10:30:01.098 [info] create index if not exists public.oban_jobs_state_queue_priority_scheduled_at_id_index  10:30:01.098 [info] relation "oban_jobs_state_queue_priority_scheduled_at_id_index" already exists, skipping  10:30:01.098 [info] alter table public.oban_jobs  10:30:01.099 [info] create check constraint priority_range on table public.oban_jobs  10:30:01.100 [info] create check constraint positive_max_attempts on table public.oban_jobs  10:30:01.100 [info] create check constraint attempt_range on table public.oban_jobs  10:30:01.100 [info] drop index if exists public.oban_jobs_args_vector  10:30:01.100 [info] index "oban_jobs_args_vector" does not exist, skipping  10:30:01.100 [info] drop index if exists public.oban_jobs_worker_gist  10:30:01.100 [info] index "oban_jobs_worker_gist" does not exist, skipping  10:30:01.100 [info] drop index if exists public.oban_jobs_attempted_at_id_index  10:30:01.101 [info] create index if not exists public.oban_jobs_args_index  10:30:01.101 [info] create index if not exists public.oban_jobs_meta_index  10:30:01.101 [info] create table if not exists public.oban_peers  10:30:01.102 [info] execute "ALTER TABLE \"public\".oban_peers SET UNLOGGED"  10:30:01.103 [info] execute "COMMENT ON TABLE \"public\".oban_jobs IS '11'"  10:30:01.104 [info] == Migrated 20230713075537 in 0.0s  10:30:01.105 [info] == Running 20230727123601 :"Elixir.Operately.Repo.Migrations.Add-health-to-projects".change/0 forward  10:30:01.105 [info] alter table projects  10:30:01.105 [info] == Migrated 20230727123601 in 0.0s  10:30:01.106 [info] == Running 20230727150528 Operately.Repo.Migrations.AddPreviousAndNewPhases.change/0 forward  10:30:01.106 [info] alter table updates  10:30:01.106 [info] == Migrated 20230727150528 in 0.0s  10:30:01.107 [info] == Running 20230727152311 Operately.Repo.Migrations.AddPreviousAndNewHealthToUpdates.change/0 forward  10:30:01.107 [info] alter table updates  10:30:01.107 [info] == Migrated 20230727152311 in 0.0s  10:30:01.108 [info] == Running 20230728094435 :"Elixir.Operately.Repo.Migrations.Add-title-to-updates".change/0 forward  10:30:01.108 [info] alter table updates  10:30:01.109 [info] == Migrated 20230728094435 in 0.0s  10:30:01.109 [info] == Running 20230814102152 Operately.Repo.Migrations.CreateProjectKeyResources.change/0 forward  10:30:01.109 [info] create table project_key_resources  10:30:01.111 [info] create index project_key_resources_project_id_index  10:30:01.111 [info] == Migrated 20230814102152 in 0.0s  10:30:01.112 [info] == Running 20230815092629 Operately.Repo.Migrations.RemoveProjectKeyResourceTypeColumn.change/0 forward  10:30:01.112 [info] alter table project_key_resources  10:30:01.112 [info] == Migrated 20230815092629 in 0.0s  10:30:01.113 [info] == Running 20230825093602 Operately.Repo.Migrations.CreateProjectPhaseHistory.change/0 forward  10:30:01.113 [info] create table project_phase_history  10:30:01.114 [info] create index project_phase_history_project_id_index  10:30:01.114 [info] == Migrated 20230825093602 in 0.0s  10:30:01.115 [info] == Running 20230825131508 Operately.Repo.Migrations.CascadeDeleteFromProjectsToPhaseHistory.change/0 forward  10:30:01.115 [info] drop constraint project_phase_history_project_id_fkey from table project_phase_history  10:30:01.116 [info] alter table project_phase_history  10:30:01.116 [info] == Migrated 20230825131508 in 0.0s  10:30:01.117 [info] == Running 20230829111211 Operately.Repo.Migrations.AddCompletedAtToMilestones.change/0 forward  10:30:01.117 [info] alter table project_milestones  10:30:01.117 [info] == Migrated 20230829111211 in 0.0s  10:30:01.118 [info] == Running 20230830144428 Operately.Repo.Migrations.AddPrivateFieldToProjects.change/0 forward  10:30:01.118 [info] alter table projects  10:30:01.118 [info] == Migrated 20230830144428 in 0.0s  10:30:01.119 [info] == Running 20230902090224 Operately.Repo.Migrations.AllowSoftDeletionOfMilestones.change/0 forward  10:30:01.119 [info] alter table project_milestones  10:30:01.119 [info] == Migrated 20230902090224 in 0.0s  10:30:01.120 [info] == Running 20230906134049 Operately.Repo.Migrations.AddDueDateToPhaseHistory.change/0 forward  10:30:01.120 [info] alter table project_phase_history  10:30:01.120 [info] == Migrated 20230906134049 in 0.0s  10:30:01.121 [info] == Running 20230906144914 Operately.Repo.Migrations.RenameDueDateToDueTime.change/0 forward  10:30:01.121 [info] rename column due_date to due_time on table project_phase_history  10:30:01.121 [info] == Migrated 20230906144914 in 0.0s  10:30:01.122 [info] == Running 20230912141827 Operately.Repo.Migrations.AllowSoftDeletionOfProjects.change/0 forward  10:30:01.122 [info] alter table projects  10:30:01.122 [info] == Migrated 20230912141827 in 0.0s  10:30:01.123 [info] == Running 20230918105247 Operately.Repo.Migrations.CreateBlobs.change/0 forward  10:30:01.123 [info] create table blobs  10:30:01.124 [info] create index blobs_author_id_index  10:30:01.125 [info] == Migrated 20230918105247 in 0.0s  10:30:01.125 [info] == Running 20230918112716 Operately.Repo.Migrations.AddCompanyIdToBlobs.change/0 forward  10:30:01.125 [info] alter table blobs  10:30:01.126 [info] == Migrated 20230918112716 in 0.0s  10:30:01.127 [info] == Running 20230921124542 Operately.Repo.Migrations.AddMilestoneDescription.change/0 forward  10:30:01.127 [info] alter table project_milestones  10:30:01.127 [info] == Migrated 20230921124542 in 0.0s  10:30:01.128 [info] == Running 20230922120254 Operately.Repo.Migrations.CreateMilestoneComments.change/0 forward  10:30:01.128 [info] create table milestone_comments  10:30:01.129 [info] create index milestone_comments_comment_id_index  10:30:01.129 [info] create index milestone_comments_milestone_id_index  10:30:01.130 [info] == Migrated 20230922120254 in 0.0s  10:30:01.130 [info] == Running 20231002141938 Operately.Repo.Migrations.CreateProjectReviewRequests.change/0 forward  10:30:01.130 [info] create table project_review_requests  10:30:01.132 [info] create index project_review_requests_project_id_index  10:30:01.132 [info] create index project_review_requests_author_id_index  10:30:01.132 [info] == Migrated 20231002141938 in 0.0s  10:30:01.133 [info] == Running 20231006094542 Operately.Repo.Migrations.AddStatusToReviewRequests.change/0 forward  10:30:01.133 [info] alter table project_review_requests  10:30:01.134 [info] == Migrated 20231006094542 in 0.0s  10:30:01.135 [info] == Running 20231018133434 Operately.Repo.Migrations.CreateNotifications.change/0 forward  10:30:01.135 [info] create table notifications  10:30:01.136 [info] create index notifications_activity_id_index  10:30:01.137 [info] create index notifications_person_id_index  10:30:01.137 [info] == Migrated 20231018133434 in 0.0s  10:30:01.138 [info] == Running 20231020102017 Operately.Repo.Migrations.AddAuthorIdToActivities.change/0 forward  10:30:01.138 [info] alter table activities  10:30:01.138 [info] == Migrated 20231020102017 in 0.0s  10:30:01.139 [info] == Running 20231020110351 Operately.Repo.Migrations.AddActionToActivity.change/0 forward  10:30:01.139 [info] alter table activities  10:30:01.139 [info] == Migrated 20231020110351 in 0.0s  10:30:01.140 [info] == Running 20231020110437 Operately.Repo.Migrations.AddContentToActivity.change/0 forward  10:30:01.140 [info] alter table activities  10:30:01.140 [info] == Migrated 20231020110437 in 0.0s  10:30:01.141 [info] == Running 20231030105143 Operately.Repo.Migrations.RemovePersonHandle.change/0 forward  10:30:01.141 [info] alter table people  10:30:01.141 [info] == Migrated 20231030105143 in 0.0s  10:30:01.142 [info] == Running 20231108141211 Operately.Repo.Migrations.AddThemeToPeople.change/0 forward  10:30:01.142 [info] alter table people  10:30:01.143 [info] == Migrated 20231108141211 in 0.0s  10:30:01.143 [info] == Running 20231112102057 Operately.Repo.Migrations.AddIconAndColorToGroups.change/0 forward  10:30:01.143 [info] alter table groups  10:30:01.144 [info] == Migrated 20231112102057 in 0.0s  10:30:01.144 [info] == Running 20231121141905 Operately.Repo.Migrations.AddResourceTypeToProjectKeyResources.change/0 forward  10:30:01.144 [info] alter table project_key_resources  10:30:01.145 [info] == Migrated 20231121141905 in 0.0s  10:30:01.145 [info] == Running 20231124145333 Operately.Repo.Migrations.AddStatusToProjects.change/0 forward  10:30:01.145 [info] alter table projects  10:30:01.146 [info] == Migrated 20231124145333 in 0.0s  10:30:01.146 [info] == Running 20231126103410 Operately.Repo.Migrations.AddCompanyRoleToPeople.change/0 forward  10:30:01.146 [info] alter table people  10:30:01.147 [info] == Migrated 20231126103410 in 0.0s  10:30:01.148 [info] == Running 20231129135524 Operately.Repo.Migrations.AddTrustedEmailDomainsToCompany.change/0 forward  10:30:01.148 [info] alter table companies  10:30:01.148 [info] == Migrated 20231129135524 in 0.0s  10:30:01.149 [info] == Running 20231204133503 Operately.Repo.Migrations.AddEnabledExperimentalFeaturesToCompanies.change/0 forward  10:30:01.149 [info] alter table companies  10:30:01.149 [info] == Migrated 20231204133503 in 0.0s  10:30:01.150 [info] == Running 20231205124721 Operately.Repo.Migrations.CreateGoals.change/0 forward  10:30:01.150 [info] create table goals  10:30:01.151 [info] create index goals_group_id_index  10:30:01.151 [info] == Migrated 20231205124721 in 0.0s  10:30:01.152 [info] == Running 20231205173143 Operately.Repo.Migrations.AddPeopleToGoals.change/0 forward  10:30:01.152 [info] alter table goals  10:30:01.153 [info] == Migrated 20231205173143 in 0.0s  10:30:01.154 [info] == Running 20231205174631 Operately.Repo.Migrations.AddCompanyIdToGroups.change/0 forward  10:30:01.154 [info] alter table groups  10:30:01.154 [info] == Migrated 20231205174631 in 0.0s  10:30:01.155 [info] == Running 20231205175319 Operately.Repo.Migrations.AddTimeframeToGoals.change/0 forward  10:30:01.155 [info] alter table goals  10:30:01.156 [info] == Migrated 20231205175319 in 0.0s  10:30:01.156 [info] == Running 20231213151653 Operately.Repo.Migrations.CreateTargets.change/0 forward  10:30:01.156 [info] create table targets  10:30:01.158 [info] create index targets_goal_id_index  10:30:01.158 [info] == Migrated 20231213151653 in 0.0s  10:30:01.159 [info] == Running 20231213205153 Operately.Repo.Migrations.AddIndexToGoals.change/0 forward  10:30:01.159 [info] alter table targets  10:30:01.159 [info] == Migrated 20231213205153 in 0.0s  10:30:01.160 [info] == Running 20231221132148 Operately.Repo.Migrations.AddGoalIdToProjects.change/0 forward  10:30:01.160 [info] alter table projects  10:30:01.161 [info] == Migrated 20231221132148 in 0.0s  10:30:01.161 [info] == Running 20231221192557 Operately.Repo.Migrations.AddNextUpdateScheduledAtToGoals.change/0 forward  10:30:01.162 [info] alter table goals  10:30:01.162 [info] == Migrated 20231221192557 in 0.0s  10:30:01.163 [info] == Running 20231221192826 Operately.Repo.Migrations.AddValueToTargets.change/0 forward  10:30:01.163 [info] alter table targets  10:30:01.164 [info] == Migrated 20231221192826 in 0.0s  10:30:01.165 [info] == Running 20240110150435 Operately.Repo.Migrations.AddManagerIdToPeople.change/0 forward  10:30:01.165 [info] alter table people  10:30:01.166 [info] == Migrated 20240110150435 in 0.0s  10:30:01.166 [info] == Running 20240115155515 Operately.Repo.Migrations.AddCompanySpaceIdToCompanies.change/0 forward  10:30:01.167 [info] alter table companies  10:30:01.167 [info] == Migrated 20240115155515 in 0.0s  10:30:01.168 [info] == Running 20240124110949 Operately.Repo.Migrations.AddDeletedAtToGroups.change/0 forward  10:30:01.168 [info] alter table groups  10:30:01.168 [info] == Migrated 20240124110949 in 0.0s  10:30:01.169 [info] == Running 20240207091524 Operately.Repo.Migrations.AddDescriptionToGoals.change/0 forward  10:30:01.169 [info] alter table goals  10:30:01.169 [info] == Migrated 20240207091524 in 0.0s  10:30:01.170 [info] == Running 20240212132752 Operately.Repo.Migrations.CreateTasks.change/0 forward  10:30:01.170 [info] create table tasks  10:30:01.171 [info] create index tasks_assignee_id_index  10:30:01.172 [info] create index tasks_space_id_index  10:30:01.172 [info] == Migrated 20240212132752 in 0.0s  10:30:01.173 [info] == Running 20240212133903 Operately.Repo.Migrations.AddCreatorIdToTasks.change/0 forward  10:30:01.173 [info] alter table tasks  10:30:01.173 [info] == Migrated 20240212133903 in 0.0s  10:30:01.174 [info] == Running 20240213125012 Operately.Repo.Migrations.AddStatusToTasks.change/0 forward  10:30:01.174 [info] alter table tasks  10:30:01.174 [info] == Migrated 20240213125012 in 0.0s  10:30:01.175 [info] == Running 20240213132735 Operately.Repo.Migrations.AddClosedAtToTasks.change/0 forward  10:30:01.175 [info] alter table tasks  10:30:01.176 [info] == Migrated 20240213132735 in 0.0s  10:30:01.176 [info] == Running 20240213134551 Operately.Repo.Migrations.AddReopenedAtToTasks.change/0 forward  10:30:01.176 [info] alter table tasks  10:30:01.176 [info] == Migrated 20240213134551 in 0.0s  10:30:01.177 [info] == Running 20240213163203 Operately.Repo.Migrations.CreateTaskAssignees.change/0 forward  10:30:01.177 [info] create table task_assignees  10:30:01.178 [info] create index task_assignees_task_id_index  10:30:01.179 [info] create index task_assignees_person_id_index  10:30:01.179 [info] == Migrated 20240213163203 in 0.0s  10:30:01.180 [info] == Running 20240215132532 Operately.Repo.Migrations.AddMilestoneIdToTasks.change/0 forward  10:30:01.180 [info] alter table tasks  10:30:01.181 [info] == Migrated 20240215132532 in 0.0s  10:30:01.182 [info] == Running 20240219162003 Operately.Repo.Migrations.AddIndexToTasks.change/0 forward  10:30:01.182 [info] alter table tasks  10:30:01.182 [info] == Migrated 20240219162003 in 0.0s  10:30:01.183 [info] == Running 20240220083809 Operately.Repo.Migrations.DropIndexFromTasks.change/0 forward  10:30:01.183 [info] alter table tasks  10:30:01.183 [info] == Migrated 20240220083809 in 0.0s  10:30:01.185 [info] == Running 20240220084034 Operately.Repo.Migrations.AddTasksKanbanStateToMilestones.change/0 forward  10:30:01.185 [info] alter table project_milestones  10:30:01.185 [info] == Migrated 20240220084034 in 0.0s  10:30:01.187 [info] == Running 20240222124908 Operately.Repo.Migrations.IntroduceProjectCheckInsTable.change/0 forward  10:30:01.187 [info] create table project_check_ins  10:30:01.188 [info] == Migrated 20240222124908 in 0.0s  10:30:01.189 [info] == Running 20240222142200 Operately.Repo.Migrations.AddLastCheckInIdToProjects.change/0 forward  10:30:01.189 [info] alter table projects  10:30:01.190 [info] == Migrated 20240222142200 in 0.0s  10:30:01.191 [info] == Running 20240222142828 Operately.Repo.Migrations.AddLastCheckInStatusToProjects.change/0 forward  10:30:01.191 [info] alter table projects  10:30:01.192 [info] == Migrated 20240222142828 in 0.0s  10:30:01.193 [info] == Running 20240222143005 Operately.Repo.Migrations.AddNextCheckInScheduledAtToProjects.change/0 forward  10:30:01.193 [info] alter table projects  10:30:01.193 [info] == Migrated 20240222143005 in 0.0s  10:30:01.194 [info] == Running 20240222152957 Operately.Repo.Migrations.AddAuthorIdToProjectCheckIns.change/0 forward  10:30:01.194 [info] alter table project_check_ins  10:30:01.195 [info] == Migrated 20240222152957 in 0.0s  10:30:01.196 [info] == Running 20240222160352 Operately.Repo.Migrations.AddAcknowledgedByAndAcknowledgedAtToProjectCheckIns.change/0 forward  10:30:01.196 [info] alter table project_check_ins  10:30:01.197 [info] == Migrated 20240222160352 in 0.0s  10:30:01.198 [info] == Running 20240223094246 Operately.Repo.Migrations.AddEmojiToReactions.change/0 forward  10:30:01.198 [info] alter table reactions  10:30:01.198 [info] == Migrated 20240223094246 in 0.0s  10:30:01.199 [info] == Running 20240223102632 Operately.Repo.Migrations.AddEntityIdAndEntityTypeToComments.change/0 forward  10:30:01.199 [info] alter table comments  10:30:01.199 [info] == Migrated 20240223102632 in 0.0s  10:30:01.200 [info] == Running 20240308145459 Operately.Repo.Migrations.AddParentGoalIdToGoals.change/0 forward  10:30:01.200 [info] alter table goals  10:30:01.201 [info] == Migrated 20240308145459 in 0.0s  10:30:01.202 [info] == Running 20240312101625 Operately.Repo.Migrations.AddClosedByToProjects.change/0 forward  10:30:01.202 [info] alter table projects  10:30:01.202 [info] == Migrated 20240312101625 in 0.0s  10:30:01.203 [info] == Running 20240329083952 Operately.Repo.Migrations.AddClosedAtAndClosedByIdToGoals.change/0 forward  10:30:01.203 [info] alter table goals  10:30:01.204 [info] == Migrated 20240329083952 in 0.0s  10:30:01.205 [info] == Running 20240429090347 Operately.Repo.Migrations.RenameGoalTimeframeToDeprecatedTimeframe.change/0 forward  10:30:01.205 [info] rename column timeframe to deprecated_timeframe on table goals  10:30:01.205 [info] == Migrated 20240429090347 in 0.0s  10:30:01.206 [info] == Running 20240429090939 Operately.Repo.Migrations.AddTimeframeJsonbToGoals.change/0 forward  10:30:01.206 [info] alter table goals  10:30:01.207 [info] == Migrated 20240429090939 in 0.0s  10:30:01.208 [info] == Running 20240430151122 Operately.Repo.Migrations.AddSuspendedFieldToPeople.change/0 forward  10:30:01.208 [info] alter table people  10:30:01.208 [info] == Migrated 20240430151122 in 0.0s  10:30:01.209 [info] == Running 20240430151356 Operately.Repo.Migrations.AddSuspendedAtToPeople.change/0 forward  10:30:01.209 [info] alter table people  10:30:01.210 [info] == Migrated 20240430151356 in 0.0s  10:30:01.211 [info] == Running 20240502134600 Operately.Repo.Migrations.AddCommentThreadsTable.change/0 forward  10:30:01.211 [info] create table comment_threads  10:30:01.212 [info] == Migrated 20240502134600 in 0.0s  10:30:01.213 [info] == Running 20240502140047 Operately.Repo.Migrations.AddCommentThreadIdToActivities.change/0 forward  10:30:01.213 [info] alter table activities  10:30:01.213 [info] == Migrated 20240502140047 in 0.0s  10:30:01.214 [info] == Running 20240503140142 Operately.Repo.Migrations.AddParentToThreads.change/0 forward  10:30:01.215 [info] alter table comment_threads  10:30:01.215 [info] == Migrated 20240503140142 in 0.0s  10:30:01.216 [info] == Running 20240509115125 Operately.Repo.Migrations.AddSuccessToGoals.change/0 forward  10:30:01.216 [info] alter table goals  10:30:01.216 [info] == Migrated 20240509115125 in 0.0s  10:30:01.217 [info] == Running 20240516142551 Operately.Repo.Migrations.AddTitlesToCommentThreads.change/0 forward  10:30:01.217 [info] alter table comment_threads  10:30:01.218 [info] == Migrated 20240516142551 in 0.0s  10:30:01.219 [info] == Running 20240522152329 Operately.Repo.Migrations.AddTimezoneToPeople.change/0 forward  10:30:01.219 [info] alter table people  10:30:01.219 [info] == Migrated 20240522152329 in 0.0s  10:30:01.220 [info] == Running 20240529105412 Operately.Repo.Migrations.CreateInvitations.change/0 forward  10:30:01.220 [info] create table invitations  10:30:01.221 [info] create index invitations_admin_id_index  10:30:01.222 [info] create index invitations_member_id_index  10:30:01.222 [info] == Migrated 20240529105412 in 0.0s  10:30:01.223 [info] == Running 20240529124732 Operately.Repo.Migrations.CreateInvitationTokens.change/0 forward  10:30:01.223 [info] create table invitation_tokens  10:30:01.224 [info] create index invitation_tokens_invitation_id_index  10:30:01.225 [info] == Migrated 20240529124732 in 0.0s  10:30:01.226 [info] == Running 20240531140759 Operately.Repo.Migrations.RemoveAdminNameFromInvitation.change/0 forward  10:30:01.226 [info] alter table invitations  10:30:01.226 [info] == Migrated 20240531140759 in 0.0s  10:30:01.227 [info] == Running 20240606221834 Operately.Repo.Migrations.CreateAccessContexts.change/0 forward  10:30:01.227 [info] create table access_contexts  10:30:01.228 [info] == Migrated 20240606221834 in 0.0s  10:30:01.228 [info] == Running 20240606222242 Operately.Repo.Migrations.CreateAccessGroups.change/0 forward  10:30:01.228 [info] create table access_groups  10:30:01.229 [info] == Migrated 20240606222242 in 0.0s  10:30:01.230 [info] == Running 20240606222753 Operately.Repo.Migrations.CreateAccessBindings.change/0 forward  10:30:01.230 [info] create table access_bindings  10:30:01.231 [info] create index access_bindings_group_id_index  10:30:01.231 [info] create index access_bindings_context_id_index  10:30:01.232 [info] == Migrated 20240606222753 in 0.0s  10:30:01.233 [info] == Running 20240606224931 Operately.Repo.Migrations.CreateAccessGroupMemberships.change/0 forward  10:30:01.233 [info] create table access_group_memberships  10:30:01.234 [info] create index access_group_memberships_person_id_index  10:30:01.234 [info] create index access_group_memberships_group_id_index  10:30:01.235 [info] == Migrated 20240606224931 in 0.0s  10:30:01.236 [info] == Running 20240609153530 Operately.Repo.Migrations.AddStorageType.change/0 forward  10:30:01.236 [info] alter table blobs  10:30:01.236 [info] == Migrated 20240609153530 in 0.0s  10:30:01.237 [info] == Running 20240610091322 Operately.Repo.Migrations.AddProjectAccessContext.change/0 forward  10:30:01.237 [info] alter table access_contexts  10:30:01.238 [info] create index access_contexts_project_id_index  10:30:01.238 [info] == Migrated 20240610091322 in 0.0s  10:30:01.239 [info] == Running 20240610184000 Operately.Repo.Migrations.AddGroupAccessContext.change/0 forward  10:30:01.239 [info] alter table access_contexts  10:30:01.240 [info] create index access_contexts_group_id_index  10:30:01.240 [info] == Migrated 20240610184000 in 0.0s  10:30:01.241 [info] == Running 20240610194000 Operately.Repo.Migrations.AddActivityAccessContext.change/0 forward  10:30:01.241 [info] alter table activities  10:30:01.242 [info] create index activities_context_id_index  10:30:01.243 [info] == Migrated 20240610194000 in 0.0s  10:30:01.243 [info] == Running 20240610204000 Operately.Repo.Migrations.AddCompanyAccessContext.change/0 forward  10:30:01.244 [info] alter table access_contexts  10:30:01.244 [info] create index access_contexts_company_id_index  10:30:01.245 [info] == Migrated 20240610204000 in 0.0s  10:30:01.246 [info] == Running 20240612151600 Operately.Repo.Migrations.AddGoalAccessContext.change/0 forward  10:30:01.246 [info] alter table access_contexts  10:30:01.246 [info] create index access_contexts_goal_id_index  10:30:01.247 [info] == Migrated 20240612151600 in 0.0s  10:30:01.248 [info] == Running 20240613093658 Operately.Repo.Migrations.AddBlobIdToPeopleTable.change/0 forward  10:30:01.248 [info] alter table people  10:30:01.248 [info] == Migrated 20240613093658 in 0.0s  10:30:01.249 [info] == Running 20240625115345 Operately.Repo.Migrations.AddGroupIdFieldToAccessGroupsTable.change/0 forward  10:30:01.249 [info] alter table access_groups  10:30:01.250 [info] create index access_groups_group_id_index  10:30:01.251 [info] == Migrated 20240625115345 in 0.0s  10:30:01.251 [info] == Running 20240627084024 Operately.Repo.Migrations.AddPersonIdFieldToAccessGroupsSchema.change/0 forward  10:30:01.251 [info] alter table access_groups  10:30:01.252 [info] create index access_groups_person_id_index  10:30:01.253 [info] == Migrated 20240627084024 in 0.0s  10:30:01.253 [info] == Running 20240627143843 Operately.Repo.Migrations.AddSizeToBlobs.change/0 forward  10:30:01.253 [info] alter table blobs  10:30:01.254 [info] == Migrated 20240627143843 in 0.0s  10:30:01.255 [info] == Running 20240627144248 Operately.Repo.Migrations.AddContentTypeToBlobs.change/0 forward  10:30:01.255 [info] alter table blobs  10:30:01.255 [info] == Migrated 20240627144248 in 0.0s  10:30:01.256 [info] == Running 20240628081627 Operately.Repo.Migrations.AddCompanyIdFieldToAccessGroupsSchema.change/0 forward  10:30:01.256 [info] alter table access_groups  10:30:01.257 [info] create index access_groups_company_id_index  10:30:01.257 [info] == Migrated 20240628081627 in 0.0s  10:30:01.258 [info] == Running 20240628084820 Operately.Repo.Migrations.AddTagFieldToAccessGroupSchema.change/0 forward  10:30:01.258 [info] alter table access_groups  10:30:01.258 [info] == Migrated 20240628084820 in 0.0s  10:30:01.259 [info] == Running 20240701134437 Operately.Repo.Migrations.AddShortIdToCompanies.change/0 forward  10:30:01.259 [info] alter table companies  10:30:01.260 [info] == Migrated 20240701134437 in 0.0s  10:30:01.260 [info] == Running 20240701150412 Operately.Repo.Migrations.AddUniqueConstraintToCompanyShortId.change/0 forward  10:30:01.261 [info] create index companies_short_id_index  10:30:01.261 [info] == Migrated 20240701150412 in 0.0s  10:30:01.262 [info] == Running 20240712101332 Operately.Repo.Migrations.AddTagPropertyToBindingsTable.change/0 forward  10:30:01.262 [info] alter table access_bindings  10:30:01.262 [info] == Migrated 20240712101332 in 0.0s  10:30:01.263 [info] == Running 20240725091444 Operately.Repo.Migrations.AddHasOpenInvitationFieldToPeople.change/0 forward  10:30:01.263 [info] alter table people  10:30:01.264 [info] == Migrated 20240725091444 in 0.0s  10:30:01.264 [info] == Running 20240730162256 Operately.Repo.Migrations.RenameActivityContextIdToActivityAccessContextId.change/0 forward  10:30:01.264 [info] rename column context_id to access_context_id on table activities  10:30:01.265 [info] == Migrated 20240730162256 in 0.0s  10:30:01.265 [info] == Running 20240801153306 Operately.Repo.Migrations.AddFullNameToAccounts.change/0 forward  10:30:01.265 [info] alter table accounts  10:30:01.265 [info] == Migrated 20240801153306 in 0.0s  10:30:01.267 [info] == Running 20240827092026 Operately.Repo.Migrations.CreateSubscriptionLists.change/0 forward  10:30:01.267 [info] create table subscription_lists  10:30:01.268 [info] == Migrated 20240827092026 in 0.0s  10:30:01.268 [info] == Running 20240827092208 Operately.Repo.Migrations.CreateSubscriptions.change/0 forward  10:30:01.269 [info] create table subscriptions  10:30:01.270 [info] create index subscriptions_subscription_list_id_index  10:30:01.270 [info] create index subscriptions_person_id_index  10:30:01.271 [info] == Migrated 20240827092208 in 0.0s  10:30:01.272 [info] == Running 20240828132022 Operately.Repo.Migrations.AddSubscriptionListRelationshipWithProjectCheckInTable.change/0 forward  10:30:01.272 [info] alter table project_check_ins  10:30:01.273 [info] create index project_check_ins_subscription_list_id_index  10:30:01.279 [info] == Migrated 20240828132022 in 0.0s  10:30:01.279 [info] == Running 20240909112047 Operately.Repo.Migrations.AddCanceledFieldToSubscriptionsSchema.change/0 forward  10:30:01.279 [info] alter table subscriptions  10:30:01.280 [info] == Migrated 20240909112047 in 0.0s  10:30:01.281 [info] == Running 20240911170712 Operately.Repo.Migrations.CopyGoalCheckInsFromUpdatesToNewTable.up/0 forward  10:30:01.281 [info] execute "CREATE TABLE goal_updates AS SELECT * FROM updates WHERE updates.type = 'goal_check_in';"  10:30:01.282 [info] execute "ALTER TABLE goal_updates ADD CONSTRAINT goal_updates_pkey PRIMARY KEY (id);"  10:30:01.282 [info] alter table goal_updates  10:30:01.283 [info] create index goal_updates_goal_id_index  10:30:01.287 [debug] QUERY OK source="goal_updates" db=0.1ms SELECT g0."id", g0."updatable_id", g0."content" FROM "goal_updates" AS g0 [] ↳ Operately.Repo.Migrations.CopyGoalCheckInsFromUpdatesToNewTable.update_fields/0, at: priv/repo/migrations/20240911170712_copy_goal_check_ins_from_updates_to_new_table.exs:47  10:30:01.288 [info] alter table goal_updates  10:30:01.289 [info] rename column acknowledging_person_id to acknowledged_by_id on table goal_updates  10:30:01.289 [info] == Migrated 20240911170712 in 0.0s  10:30:01.291 [info] == Running 20240912132541 Operately.Repo.Migrations.UpdateCommentsEntityTypeValueToGoalCheckIn.up/0 forward  10:30:01.297 [debug] QUERY OK source="comments" db=0.2ms UPDATE "comments" AS c0 SET "entity_type" = $1 WHERE (c0."entity_id" IN (SELECT sg0."id" FROM "goal_updates" AS sg0)) [:goal_update] ↳ Ecto.Migration.Runner.perform_operation/3, at: lib/ecto/migration/runner.ex:310  10:30:01.297 [info] == Migrated 20240912132541 in 0.0s  10:30:01.299 [info] == Running 20240912145520 Operately.Repo.Migrations.UpdateReactionsEntityTypeToGoalUpdate.up/0 forward  10:30:01.307 [debug] QUERY OK source="reactions" db=0.2ms UPDATE "reactions" AS r0 SET "entity_type" = $1 WHERE (r0."entity_id" IN (SELECT sg0."id" FROM "goal_updates" AS sg0)) [:goal_update] ↳ Ecto.Migration.Runner.perform_operation/3, at: lib/ecto/migration/runner.ex:310  10:30:01.307 [info] == Migrated 20240912145520 in 0.0s  10:30:01.309 [info] == Running 20240914202720 Operately.Repo.Migrations.AddSubscriptionListRelationshipWithGoalUpdateTable.change/0 forward  10:30:01.309 [info] alter table goal_updates  10:30:01.310 [info] create index goal_updates_subscription_list_id_index  10:30:01.310 [info] == Migrated 20240914202720 in 0.0s  10:30:01.311 [info] == Running 20240916140730 Operately.Repo.Migrations.CreateSubscriptionsListForExistingGoalUpdates.up/0 forward  10:30:01.313 [debug] QUERY OK source="goal_updates" db=0.1ms SELECT g0."id", g0."subscription_list_id" FROM "goal_updates" AS g0 [] ↳ anonymous fn/0 in Operately.Data.Change028CreateSubscriptionsListForGoalUpdates.run/0, at: lib/operately/data/change_028_create_subscriptions_list_for_goal_updates.ex:10  10:30:01.313 [info] == Migrated 20240916140730 in 0.0s  10:30:01.314 [info] == Running 20240916184443 Operately.Repo.Migrations.CreateSubcriptionsListForExistingProjectCheckIns.up/0 forward  10:30:01.318 [debug] QUERY OK source="project_check_ins" db=0.1ms SELECT p0."id", p0."author_id", p0."project_id", p0."subscription_list_id", p0."status", p0."description", p0."acknowledged_by_id", p0."acknowledged_at", p0."inserted_at", p0."updated_at" FROM "project_check_ins" AS p0 [] ↳ anonymous fn/0 in Operately.Data.Chenge027CreateSubscriptionsListForCheckIns.run/0, at: lib/operately/data/change_027_create_subscriptions_list_for_check_ins.ex:11  10:30:01.319 [info] == Migrated 20240916184443 in 0.0s  10:30:01.320 [info] == Running 20240917173757 Operately.Repo.Migrations.CopyDiscussionsFromUpdatesToMessagesTable.up/0 forward  10:30:01.320 [info] execute "CREATE TABLE messages AS SELECT * FROM updates WHERE updates.type = 'project_discussion';"  10:30:01.321 [info] execute "ALTER TABLE messages ADD CONSTRAINT messages_pkey PRIMARY KEY (id);"  10:30:01.322 [info] alter table messages  10:30:01.323 [info] create index messages_space_id_index  10:30:01.323 [info] create index messages_author_id_index  10:30:01.324 [debug] QUERY OK source="messages" db=0.0ms SELECT m0."id", m0."updatable_id", m0."content" FROM "messages" AS m0 [] ↳ Operately.Repo.Migrations.CopyDiscussionsFromUpdatesToMessagesTable.update_fields/0, at: priv/repo/migrations/20240917173757_copy_discussions_from_updates_to_messages_table.exs:48  10:30:01.324 [info] alter table messages  10:30:01.324 [info] == Migrated 20240917173757 in 0.0s  10:30:01.325 [info] == Running 20240918101843 Operately.Repo.Migrations.UpdateCommentEntityTypeValueToMessage.up/0 forward  10:30:01.327 [debug] QUERY OK source="comments" db=0.1ms UPDATE "comments" AS c0 SET "entity_type" = $1 WHERE (c0."entity_id" IN (SELECT sm0."id" FROM "messages" AS sm0)) [:message] ↳ Ecto.Migration.Runner.perform_operation/3, at: lib/ecto/migration/runner.ex:310  10:30:01.328 [info] == Migrated 20240918101843 in 0.0s  10:30:01.329 [info] == Running 20240918102916 Operately.Repo.Migrations.UpdateReactionEntityTypeValueToMessage.up/0 forward  10:30:01.329 [debug] QUERY OK source="reactions" db=0.1ms UPDATE "reactions" AS r0 SET "entity_type" = $1 WHERE (r0."entity_id" IN (SELECT sm0."id" FROM "messages" AS sm0)) [:message] ↳ Ecto.Migration.Runner.perform_operation/3, at: lib/ecto/migration/runner.ex:310  10:30:01.329 [info] == Migrated 20240918102916 in 0.0s  10:30:01.330 [info] == Running 20240918182641 Operately.Repo.Migrations.AddSubscriptionListRelationshipWithMessagesTable.change/0 forward  10:30:01.330 [info] alter table messages  10:30:01.331 [info] create index messages_subscription_list_id_index  10:30:01.331 [info] == Migrated 20240918182641 in 0.0s  10:30:01.332 [info] == Running 20240919103804 Operately.Repo.Migrations.CreateSubscriptionsListForExistingMessages.up/0 forward  10:30:01.334 [debug] QUERY OK source="messages" db=0.1ms SELECT m0."id", m0."subscription_list_id" FROM "messages" AS m0 [] ↳ anonymous fn/0 in Operately.Data.Change029CreateSubscriptionsListForMessages.run/0, at: lib/operately/data/change_029_create_subscriptions_list_for_messages.ex:10  10:30:01.334 [info] == Migrated 20240919103804 in 0.0s  10:30:01.335 [info] == Running 20240923095718 Operately.Repo.Migrations.CreateTableForProjectRetrospective.up/0 forward  10:30:01.335 [info] create table project_retrospectives  10:30:01.337 [info] create index project_retrospectives_subscription_list_id_index  10:30:01.337 [info] create index project_retrospectives_author_id_index  10:30:01.338 [info] create index project_retrospectives_project_id_index  10:30:01.339 [debug] QUERY OK source="projects" db=0.1ms SELECT p0."id", p0."closed_by_id", p0."closed_at", p0."retrospective" FROM "projects" AS p0 WHERE (NOT (p0."retrospective" IS NULL)) [] ↳ Operately.Repo.Migrations.CreateTableForProjectRetrospective.up/0, at: priv/repo/migrations/20240923095718_create_table_for_project_retrospective.exs:30  10:30:01.339 [info] == Migrated 20240923095718 in 0.0s  10:30:01.340 [info] == Running 20241002151620 Operately.Repo.Migrations.CreateSubscriptionsListForExistingProjectRetrospective.up/0 forward  10:30:01.351 [debug] QUERY OK source="project_retrospectives" db=0.1ms SELECT p0."id", p0."author_id", p0."project_id", p0."subscription_list_id", p0."content", p0."inserted_at", p0."updated_at" FROM "project_retrospectives" AS p0 [] ↳ anonymous fn/0 in Operately.Data.Change030CreateSubscriptionsListForProjectRetrospectives.run/0, at: lib/operately/data/change_030_create_subscriptions_list_for_project_retrospectives.ex:10  10:30:01.351 [info] == Migrated 20241002151620 in 0.0s  10:30:01.353 [info] == Running 20241003135919 Operately.Repo.Migrations.AddRetrospectiveToProjectClosedActivity.up/0 forward  10:30:01.357 [debug] QUERY OK source="activities" db=0.1ms SELECT a0."id", a0."author_id", a0."comment_thread_id", a0."access_context_id", a0."action", a0."content", a0."resource_id", a0."resource_type", a0."inserted_at", a0."updated_at" FROM "activities" AS a0 WHERE (a0."action" = 'project_closed') [] ↳ anonymous fn/0 in Operately.Data.Change031AddRetrospectiveToProjectClosedActivity.run/0, at: lib/operately/data/change_031_add_retrospective_to_project_closed_activity.ex:13  10:30:01.357 [info] == Migrated 20241003135919 in 0.0s  10:30:01.359 [info] == Running 20241010142306 Operately.Repo.Migrations.AddSpaceFieldToProjectCreatedActivity.up/0 forward  10:30:01.361 [debug] QUERY OK source="activities" db=0.0ms SELECT a0."id", a0."author_id", a0."comment_thread_id", a0."access_context_id", a0."action", a0."content", a0."resource_id", a0."resource_type", a0."inserted_at", a0."updated_at" FROM "activities" AS a0 WHERE (a0."action" = 'project_created') [] ↳ anonymous fn/0 in Operately.Data.Change032AddSpaceToProjectCreatedActivity.run/0, at: lib/operately/data/change_032_add_space_to_project_created_activity.ex:13  10:30:01.361 [info] == Migrated 20241010142306 in 0.0s  10:30:01.363 [info] == Running 20241010162832 Operately.Repo.Migrations.AddSpaceFieldToProjectResumingActivity.up/0 forward  10:30:01.365 [debug] QUERY OK source="activities" db=0.0ms SELECT a0."id", a0."author_id", a0."comment_thread_id", a0."access_context_id", a0."action", a0."content", a0."resource_id", a0."resource_type", a0."inserted_at", a0."updated_at" FROM "activities" AS a0 WHERE (a0."action" = 'project_resuming') [] ↳ anonymous fn/0 in Operately.Data.Change033AddSpaceToProjectResumingActivity.run/0, at: lib/operately/data/change_033_add_space_to_project_resuming_activity.ex:13  10:30:01.365 [info] == Migrated 20241010162832 in 0.0s  10:30:01.367 [info] == Running 20241010172454 Operately.Repo.Migrations.AddSpaceKeyToProjectPausingActivity.up/0 forward  10:30:01.369 [debug] QUERY OK source="activities" db=0.0ms SELECT a0."id", a0."author_id", a0."comment_thread_id", a0."access_context_id", a0."action", a0."content", a0."resource_id", a0."resource_type", a0."inserted_at", a0."updated_at" FROM "activities" AS a0 WHERE (a0."action" IN ('project_pausing','project_renamed','project_milestone_commented')) [] ↳ anonymous fn/0 in Operately.Data.Change034AddSpaceProjectPausingToActivity.run/0, at: lib/operately/data/change_034_add_space_project_pausing_to_activity.ex:17  10:30:01.369 [info] == Migrated 20241010172454 in 0.0s  10:30:01.371 [info] == Running 20241010185006 Operately.Repo.Migrations.AddSpaceToProjectCheckInActivities.up/0 forward  10:30:01.373 [debug] QUERY OK source="activities" db=0.0ms SELECT a0."id", a0."author_id", a0."comment_thread_id", a0."access_context_id", a0."action", a0."content", a0."resource_id", a0."resource_type", a0."inserted_at", a0."updated_at" FROM "activities" AS a0 WHERE (a0."action" IN ('project_check_in_commented','project_check_in_submitted','project_check_in_acknowledged')) [] ↳ anonymous fn/0 in Operately.Data.Change035AddSpaceToProjectActivities.run/0, at: lib/operately/data/change_035_add_space_to_project_activities.ex:17  10:30:01.373 [info] == Migrated 20241010185006 in 0.0s  10:30:01.375 [info] == Running 20241011101759 Operately.Repo.Migrations.AddSpaceKeyToProjectActivities.up/0 forward  10:30:01.376 [debug] QUERY OK source="activities" db=0.0ms SELECT a0."id", a0."author_id", a0."comment_thread_id", a0."access_context_id", a0."action", a0."content", a0."resource_id", a0."resource_type", a0."inserted_at", a0."updated_at" FROM "activities" AS a0 WHERE (a0."action" IN ('project_archived','project_goal_connection','project_goal_disconnection')) [] ↳ anonymous fn/0 in Operately.Data.Change036AddSpaceToProjectActivities.run/0, at: lib/operately/data/change_036_add_space_to_project_activities.ex:17  10:30:01.376 [info] == Migrated 20241011101759 in 0.0s  10:30:01.377 [info] == Running 20241011111805 Operately.Repo.Migrations.AddSpaceKeyToGoalUpdateActivities.up/0 forward  10:30:01.378 [debug] QUERY OK source="activities" db=0.0ms SELECT a0."id", a0."author_id", a0."comment_thread_id", a0."access_context_id", a0."action", a0."content", a0."resource_id", a0."resource_type", a0."inserted_at", a0."updated_at" FROM "activities" AS a0 WHERE (a0."action" IN ('goal_check_in','goal_check_in_acknowledgement','goal_check_in_commented')) [] ↳ anonymous fn/0 in Operately.Data.Change037AddSpaceToGoalUpdateActivities.run/0, at: lib/operately/data/change_037_add_space_to_goal_update_activities.ex:17  10:30:01.379 [info] == Migrated 20241011111805 in 0.0s  10:30:01.379 [info] == Running 20241011142317 Operately.Repo.Migrations.AddSpaceToGoalEditingActivity.up/0 forward  10:30:01.381 [debug] QUERY OK source="activities" db=0.0ms SELECT a0."id", a0."author_id", a0."comment_thread_id", a0."access_context_id", a0."action", a0."content", a0."resource_id", a0."resource_type", a0."inserted_at", a0."updated_at" FROM "activities" AS a0 WHERE (a0."action" = 'goal_editing') [] ↳ anonymous fn/0 in Operately.Data.Change038AddSpaceToGoalEditingActivity.run/0, at: lib/operately/data/change_038_add_space_to_goal_editing_activity.ex:11  10:30:01.381 [info] == Migrated 20241011142317 in 0.0s  10:30:01.383 [info] == Running 20241014102321 Operately.Repo.Migrations.AddSpaceToProjectTimelineEditedActivity.up/0 forward  10:30:01.385 [debug] QUERY OK source="activities" db=0.0ms SELECT a0."id", a0."author_id", a0."comment_thread_id", a0."access_context_id", a0."action", a0."content", a0."resource_id", a0."resource_type", a0."inserted_at", a0."updated_at" FROM "activities" AS a0 WHERE (a0."action" = 'project_timeline_edited') [] ↳ anonymous fn/0 in Operately.Data.Change039AddSpaceToProjectTimelineEditedActivity.run/0, at: lib/operately/data/change_039_add_space_to_project_timeline_edited_activity.ex:11  10:30:01.385 [info] == Migrated 20241014102321 in 0.0s  10:30:01.387 [info] == Running 20241024114823 Operately.Repo.Migrations.AddClosedAtToExistingClosedProjects.up/0 forward  10:30:01.387 [debug] QUERY OK source="project_retrospectives" db=0.0ms SELECT p0."id", p0."project_id", p0."closed_at" FROM "project_retrospectives" AS p0 [] ↳ Operately.Repo.Migrations.AddClosedAtToExistingClosedProjects.up/0, at: priv/repo/migrations/20241024114823_add_closed_at_to_existing_closed_projects.exs:11  10:30:01.388 [info] == Migrated 20241024114823 in 0.0s  10:30:01.389 [info] == Running 20241029095032 Operately.Repo.Migrations.AddStatusFieldToGoalUpdates.change/0 forward  10:30:01.390 [info] alter table goal_updates  10:30:01.390 [info] == Migrated 20241029095032 in 0.0s  10:30:01.391 [info] == Running 20241030164401 Operately.Repo.Migrations.PupulateGoalUpdatesStatusFieldWithDefaultValue.up/0 forward  10:30:01.392 [debug] QUERY OK source="goal_updates" db=0.0ms UPDATE "goal_updates" AS g0 SET "status" = $1 WHERE (g0."status" IS NULL) ["on_track"] ↳ anonymous fn/0 in Operately.Data.Change040AddStatusValueForExistingGoalUpdates.run/0, at: lib/operately/data/change_040_add_status_value_for_existing_goal_updates.ex:9  10:30:01.392 [info] == Migrated 20241030164401 in 0.0s  10:30:01.393 [info] == Running 20241107124746 Operately.Repo.Migrations.DropSupportForIconsInSpaces.change/0 forward  10:30:01.393 [info] alter table groups  10:30:01.393 [info] == Migrated 20241107124746 in 0.0s  10:30:01.394 [info] == Running 20241107152926 Operately.Repo.Migrations.AddResourceHubResourceNodeAndFolder.change/0 forward  10:30:01.395 [info] create table resource_hubs  10:30:01.396 [info] create index resource_hubs_space_id_index  10:30:01.396 [info] alter table access_contexts  10:30:01.397 [info] create index access_contexts_resource_hub_id_index  10:30:01.397 [info] create table resource_nodes  10:30:01.398 [info] create index resource_nodes_resource_hub_id_index  10:30:01.399 [info] create table resource_folders  10:30:01.400 [info] create index resource_folders_node_id_index  10:30:01.400 [info] alter table resource_nodes  10:30:01.401 [info] create index resource_nodes_folder_id_index  10:30:01.401 [info] == Migrated 20241107152926 in 0.0s  10:30:01.402 [info] == Running 20241107172651 Operately.Repo.Migrations.CreateOneResourceHubForEveryExistingSpace.up/0 forward  10:30:01.405 [debug] QUERY OK source="groups" db=0.0ms SELECT g0."id", g0."company_id", g0."name", g0."mission", g0."inserted_at", g0."updated_at", g0."deleted_at" FROM "groups" AS g0 WHERE (g0."deleted_at" IS NULL) [] ↳ anonymous fn/0 in Operately.Data.Change041CreateOneResourceHubForEachExistingSpace.run/0, at: lib/operately/data/change_041_create_one_resource_hub_for_each_existing_space.ex:10  10:30:01.405 [info] == Migrated 20241107172651 in 0.0s  10:30:01.406 [info] == Running 20241111124913 Operately.Repo.Migrations.AddTimestampsToResourceNodesAndFolders.change/0 forward  10:30:01.406 [info] alter table resource_nodes  10:30:01.406 [info] alter table resource_folders  10:30:01.407 [info] == Migrated 20241111124913 in 0.0s  10:30:01.407 [info] == Running 20241111151040 Operately.Repo.Migrations.AddStateToMessages.change/0 forward  10:30:01.407 [info] alter table messages  10:30:01.408 [info] == Migrated 20241111151040 in 0.0s  10:30:01.408 [info] == Running 20241112130317 Operately.Repo.Migrations.RenameNodeFolderFieldToParentField.change/0 forward  10:30:01.409 [info] rename column folder_id to parent_folder_id on table resource_nodes  10:30:01.409 [info] drop index resource_nodes_folder_id_index  10:30:01.409 [info] create index resource_nodes_parent_folder_id_index  10:30:01.409 [info] == Migrated 20241112130317 in 0.0s  10:30:01.410 [info] == Running 20241113112605 Operately.Repo.Migrations.CreateMessagesBoardsSchemaAndAddRelationshipToMessages.change/0 forward  10:30:01.411 [info] create table messages_boards  10:30:01.412 [info] alter table messages  10:30:01.412 [info] create index messages_boards_space_id_index  10:30:01.413 [info] create index messages_messages_board_id_index  10:30:01.413 [info] == Migrated 20241113112605 in 0.0s  10:30:01.414 [info] == Running 20241113125136 Operately.Repo.Migrations.PopulateMessagesBoardIdFieldInMessages.change/0 forward  10:30:01.415 [debug] QUERY OK source="groups" db=0.0ms SELECT g0."id" FROM "groups" AS g0 WHERE (g0."deleted_at" IS NULL) [] ↳ anonymous fn/0 in Operately.Data.Change042PopulateMessagesBoardIdFieldInMessages.run/0, at: lib/operately/data/change_042_populate_messages_board_id_field_in_messages.ex:9  10:30:01.415 [info] == Migrated 20241113125136 in 0.0s  10:30:01.416 [info] == Running 20241115093941 Operately.Repo.Migrations.CreateAccessBindingsBetweenResourceHubsAndCompanyMembers.up/0 forward  10:30:01.418 [debug] QUERY OK source="resource_hubs" db=0.0ms SELECT r0."id", r0."space_id", r0."name", r0."description", r0."inserted_at", r0."updated_at" FROM "resource_hubs" AS r0 [] ↳ anonymous fn/0 in Operately.Data.Change043CreateAccessBindingsBetweenResourceHubsAndPeople.run/0, at: lib/operately/data/change_043_create_access_bindings_between_resource_hubs_and_people.ex:11  10:30:01.418 [info] == Migrated 20241115093941 in 0.0s  10:30:01.419 [info] == Running 20241115105023 Operately.Repo.Migrations.AddPublishedAtDateForMessages.change/0 forward  10:30:01.419 [info] alter table messages  10:30:01.419 [info] == Migrated 20241115105023 in 0.0s  10:30:01.420 [info] == Running 20241115105054 Operately.Repo.Migrations.PopulatePublishedAtDateForMessages.up/0 forward  10:30:01.420 [info] execute "UPDATE messages SET published_at = inserted_at"  10:30:01.420 [info] == Migrated 20241115105054 in 0.0s  10:30:01.421 [info] == Running 20241117192821 Operately.Repo.Migrations.AddDeletedAtToMessages.change/0 forward  10:30:01.421 [info] alter table messages  10:30:01.421 [info] == Migrated 20241117192821 in 0.0s  10:30:01.422 [info] == Running 20241118100459 Operately.Repo.Migrations.AddResourceHubDocumentsSchema.change/0 forward  10:30:01.422 [info] create table resource_documents  10:30:01.423 [info] create index resource_documents_node_id_index  10:30:01.424 [info] create index resource_documents_subscription_list_id_index  10:30:01.424 [info] == Migrated 20241118100459 in 0.0s  10:30:01.425 [info] == Running 20241120145441 Operately.Repo.Migrations.AddSiteAdminFieldToAccounts.change/0 forward  10:30:01.425 [info] alter table accounts  10:30:01.425 [info] == Migrated 20241120145441 in 0.0s  10:30:01.426 [info] == Running 20241120165930 Operately.Repo.Migrations.AddAuthorFieldToResourceHubDocument.change/0 forward  10:30:01.426 [info] alter table resource_documents  10:30:01.427 [info] create index resource_documents_author_id_index  10:30:01.427 [info] == Migrated 20241120165930 in 0.0s  10:30:01.428 [info] == Running 20241121140809 Operately.Repo.Migrations.AddResourceHubFilesSchema.change/0 forward  10:30:01.428 [info] create table resource_files  10:30:01.430 [info] create index resource_files_node_id_index  10:30:01.430 [info] create index resource_files_author_id_index  10:30:01.431 [info] create index resource_files_blob_id_index  10:30:01.431 [info] == Migrated 20241121140809 in 0.0s  10:30:01.432 [info] == Running 20241126115317 Operately.Repo.Migrations.AddSoftDeletedToDocuments.change/0 forward  10:30:01.432 [info] alter table resource_nodes  10:30:01.432 [info] alter table resource_documents  10:30:01.433 [info] == Migrated 20241126115317 in 0.0s  10:30:01.433 [info] == Running 20241127142637 Operately.Repo.Migrations.RemoveDescriptionFieldFromFolder.change/0 forward  10:30:01.434 [info] alter table resource_folders  10:30:01.434 [info] == Migrated 20241127142637 in 0.0s  10:30:01.435 [info] == Running 20241201132900 Operately.Repo.Migrations.ConfirmAllPreviousAccounts.change/0 forward  10:30:01.446 [debug] QUERY OK source="accounts" db=0.1ms UPDATE "accounts" AS a0 SET "confirmed_at" = $1 [~N[2025-04-29 10:30:01]] ↳ Ecto.Migration.Runner.perform_operation/3, at: lib/ecto/migration/runner.ex:310  10:30:01.446 [info] == Migrated 20241201132900 in 0.0s  10:30:01.446 [info] == Running 20241201133659 Operately.Repo.Migrations.AddEmailActivationCodes.change/0 forward  10:30:01.447 [info] create table email_activation_codes  10:30:01.448 [info] create index email_activation_codes_code_index  10:30:01.448 [info] == Migrated 20241201133659 in 0.0s  10:30:01.449 [info] == Running 20241202194057 Operately.Repo.Migrations.AddSubscriptionsListFieldToResourceHubFile.change/0 forward  10:30:01.449 [info] alter table resource_files  10:30:01.450 [info] create index resource_files_subscription_list_id_index  10:30:01.450 [info] == Migrated 20241202194057 in 0.0s  10:30:01.451 [info] == Running 20241204102735 Operately.Repo.Migrations.AddSoftDeletedToResourceHubFile.change/0 forward  10:30:01.451 [info] alter table resource_files  10:30:01.451 [info] == Migrated 20241204102735 in 0.0s  10:30:01.452 [info] == Running 20241205122925 Operately.Repo.Migrations.AddHeightAndWidthFieldsToBlobsSchema.change/0 forward  10:30:01.452 [info] alter table blobs  10:30:01.452 [info] == Migrated 20241205122925 in 0.0s  10:30:01.453 [info] == Running 20241206102636 Operately.Repo.Migrations.AddSoftDeletedToFolders.change/0 forward  10:30:01.453 [info] alter table resource_folders  10:30:01.454 [info] == Migrated 20241206102636 in 0.0s  10:30:01.454 [info] == Running 20241209142058 Operately.Repo.Migrations.AddPreviewBlobRelationshipBetweenFilesAndBlobs.change/0 forward  10:30:01.454 [info] alter table resource_files  10:30:01.455 [info] create index resource_files_preview_blob_id_index  10:30:01.456 [info] == Migrated 20241209142058 in 0.0s  10:30:01.456 [info] == Running 20241219153512 Operately.Repo.Migrations.RenameExistingResourceHubsToDocumentsAndFiles.up/0 forward  10:30:01.458 [debug] QUERY OK source="resource_hubs" db=0.0ms UPDATE "resource_hubs" AS r0 SET "name" = $1 ["Documents & Files"] ↳ anonymous fn/0 in Operately.Data.Change044RenameResourceHubs.run/0, at: lib/operately/data/change_044_rename_resource_hubs.ex:7  10:30:01.458 [info] == Migrated 20241219153512 in 0.0s  10:30:01.458 [info] == Running 20241220130517 Operately.Repo.Migrations.AddResourceHubLinkSchema.change/0 forward  10:30:01.459 [info] create table resource_links  10:30:01.460 [info] create index resource_links_node_id_index  10:30:01.461 [info] create index resource_links_author_id_index  10:30:01.461 [info] create index resource_links_subscription_list_id_index  10:30:01.461 [info] == Migrated 20241220130517 in 0.0s  10:30:01.462 [info] == Running 20250103164752 Operately.Repo.Migrations.UpdateResourceHubActivitiesAccessContext.up/0 forward  10:30:01.464 [debug] QUERY OK source="activities" db=0.0ms SELECT a0."id", a0."author_id", a0."comment_thread_id", a0."access_context_id", a0."action", a0."content", a0."resource_id", a0."resource_type", a0."inserted_at", a0."updated_at" FROM "activities" AS a0 WHERE (NOT ((a0."content"#>'{"resource_hub_id"}') IS NULL)) [] ↳ anonymous fn/0 in Operately.Data.Change045UpdateResourceHubActivitiesAccessContext.run/0, at: lib/operately/data/change_045_update_resource_hub_activities_access_context.ex:9  10:30:01.464 [info] == Migrated 20250103164752 in 0.0s  10:30:01.465 [info] == Running 20250103173929 Operately.Repo.Migrations.UpdateBlobSizeFieldFromIntToBigint.change/0 forward  10:30:01.465 [info] alter table blobs  10:30:01.466 [info] == Migrated 20250103173929 in 0.0s  10:30:01.467 [info] == Running 20250108125221 Operately.Repo.Migrations.UpdateFileCreatedActivityFormat.up/0 forward  10:30:01.469 [debug] QUERY OK source="activities" db=0.0ms SELECT a0."id", a0."author_id", a0."comment_thread_id", a0."access_context_id", a0."action", a0."content", a0."resource_id", a0."resource_type", a0."inserted_at", a0."updated_at" FROM "activities" AS a0 WHERE (a0."action" = 'resource_hub_file_created') [] ↳ anonymous fn/0 in Operately.Data.Change046UpdateFileCreatedActivityFormat.run/0, at: lib/operately/data/change_046_update_file_created_activity_format.ex:9  10:30:01.469 [info] == Migrated 20250108125221 in 0.0s  10:30:01.469 [info] == Running 20250120100306 Operately.Repo.Migrations.AddStatusAndPublishedAtFieldsToDocumentSchema.change/0 forward  10:30:01.470 [info] alter table resource_documents  10:30:01.470 [info] == Migrated 20250120100306 in 0.0s  10:30:01.471 [info] == Running 20250121095446 Operately.Repo.Migrations.PopulatePublishedAtFieldInExistingPublishedDocuments.up/0 forward  10:30:01.473 [debug] QUERY OK source="resource_documents" db=0.1ms SELECT r0."id", r0."node_id", r0."author_id", r0."subscription_list_id", r0."content", r0."state", r0."published_at", r0."inserted_at", r0."updated_at", r0."deleted_at" FROM "resource_documents" AS r0 WHERE ((r0."state" = 'published') AND (r0."published_at" IS NULL)) AND (r0."deleted_at" IS NULL) [] ↳ anonymous fn/0 in Operately.Data.Change047PopulatePublishedAtFieldInExistingPublishedDocuments.run/0, at: lib/operately/data/change_047_populate_published_at_field_in_existing_published_documents.ex:9  10:30:01.473 [info] == Migrated 20250121095446 in 0.0s  10:30:01.474 [info] == Running 20250124144013 Operately.Repo.Migrations.DeleteGoalReparentActivitiesWithMissingData.up/0 forward  10:30:01.475 [debug] QUERY OK source="activities" db=0.0ms SELECT a0."id", a0."author_id", a0."comment_thread_id", a0."access_context_id", a0."action", a0."content", a0."resource_id", a0."resource_type", a0."inserted_at", a0."updated_at" FROM "activities" AS a0 WHERE (a0."action" = 'goal_reparent') [] ↳ anonymous fn/0 in Operately.Data.Change048DeleteGoalReparentActivitiesWithMissingData.run/0, at: lib/operately/data/change_048_delete_goal_reparent_activities_with_missing_data.ex:9  10:30:01.475 [debug] QUERY OK source="activities" db=0.0ms DELETE FROM "activities" AS a0 WHERE (a0."id" = ANY($1)) [[]] ↳ Operately.Data.Change048DeleteGoalReparentActivitiesWithMissingData.delete_activities/1, at: lib/operately/data/change_048_delete_goal_reparent_activities_with_missing_data.ex:24  10:30:01.475 [info] == Migrated 20250124144013 in 0.0s  10:30:01.476 [info] == Running 20250129180403 Operately.Repo.Migrations.PopulateCommentEntityIdWithMilestoneId.up/0 forward  10:30:01.478 [debug] QUERY OK source="comments" db=0.2ms UPDATE "comments" AS c0 SET "entity_id" = m1."milestone_id", "entity_type" = 'project_milestone' FROM "milestone_comments" AS m1 WHERE (m1."comment_id" = c0."id") AND ((c0."entity_id" IS NULL) OR (c0."entity_type" IS NULL)) [] ↳ anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4, at: lib/ecto/adapters/sql.ex:1382  10:30:01.478 [info] == Migrated 20250129180403 in 0.0s  10:30:01.479 [info] == Running 20250217140410 Operately.Repo.Migrations.CreateBindingsBetweenPeopleAndCompanySpace.up/0 forward  10:30:01.482 [debug] QUERY OK source="companies" db=0.1ms SELECT c0."id", c0."mission", c0."name", c0."trusted_email_domains", c0."enabled_experimental_features", c0."company_space_id", c0."short_id", c0."inserted_at", c0."updated_at" FROM "companies" AS c0 [] ↳ anonymous fn/0 in Operately.Data.Change050CreateBindingsBetweenPeopleAndCompanySpace.run/0, at: lib/operately/data/change_050_create_bindings_between_people_and_company_space.ex:10  10:30:01.482 [info] == Migrated 20250217140410 in 0.0s  10:30:01.483 [info] == Running 20250317102620 Operately.Repo.Migrations.AddCyclePreventionFunctionToGoals.up/0 forward  10:30:01.483 [info] execute "CREATE OR REPLACE FUNCTION check_goal_cycle()\nRETURNS TRIGGER AS $$\nBEGIN\n IF NEW.parent_goal_id IS NOT NULL THEN\n IF NEW.id = NEW.parent_goal_id OR EXISTS (\n WITH RECURSIVE ancestors AS (\n SELECT id, parent_goal_id FROM goals WHERE id = NEW.parent_goal_id\n UNION ALL\n SELECT g.id, g.parent_goal_id FROM goals g\n JOIN ancestors a ON g.id = a.parent_goal_id\n )\n SELECT 1 FROM ancestors WHERE id = NEW.id\n ) THEN\n RAISE EXCEPTION 'Cycle detected: setting this parent would create a circular reference';\n END IF;\n END IF;\n RETURN NEW;\nEND;\n$$ LANGUAGE plpgsql;\n"  10:30:01.483 [info] execute "CREATE TRIGGER prevent_goal_cycle\nBEFORE INSERT OR UPDATE ON goals\nFOR EACH ROW EXECUTE FUNCTION check_goal_cycle();\n"  10:30:01.484 [info] create index goals_parent_goal_id_index  10:30:01.484 [info] == Migrated 20250317102620 in 0.0s  10:30:01.485 [info] == Running 20250325115924 Operately.Repo.Migrations.AddLastCheckInIdToGoals.change/0 forward  10:30:01.485 [info] alter table goals  10:30:01.486 [info] == Migrated 20250325115924 in 0.0s  10:30:01.487 [info] == Running 20250325131944 Operately.Repo.Migrations.PopulateLastCheckInOnGoals.up/0 forward  10:30:01.488 [debug] QUERY OK db=0.1ms UPDATE goals SET last_check_in_id = latest_updates.update_id FROM ( SELECT DISTINCT ON (goal_updates.goal_id) goal_updates.goal_id, goal_updates.id AS update_id FROM goal_updates ORDER BY goal_updates.goal_id, goal_updates.inserted_at DESC ) AS latest_updates WHERE goals.id = latest_updates.goal_id []  10:30:01.489 [info] == Migrated 20250325131944 in 0.0s  10:30:01.490 [info] == Running 20250328094455 Operately.Repo.Migrations.AddGoalUpdatesTimeframe.change/0 forward  10:30:01.491 [info] alter table goal_updates  10:30:01.491 [info] == Migrated 20250328094455 in 0.0s  10:30:01.493 [info] == Running 20250328094716 Operately.Repo.Migrations.PopulateGoalUpdatesTimeframes.up/0 forward  10:30:01.495 [debug] QUERY OK db=0.1ms UPDATE goal_updates SET timeframe = goals.timeframe FROM goals WHERE goal_updates.goal_id = goals.id; []  10:30:01.495 [info] == Migrated 20250328094716 in 0.0s  10:30:01.496 [info] == Running 20250331193957 Operately.Repo.Migrations.AddCascadeDeleteToGoalTargets.up/0 forward  10:30:01.497 [info] drop constraint targets_goal_id_fkey from table targets  10:30:01.497 [info] alter table targets  10:30:01.498 [info] == Migrated 20250331193957 in 0.0s  10:30:01.500 [info] == Running 20250331194510 Operately.Repo.Migrations.AddCascadeDeleteToGoalAccessContexts.up/0 forward  10:30:01.500 [info] drop constraint access_contexts_goal_id_fkey from table access_contexts  10:30:01.501 [info] alter table access_contexts  10:30:01.501 [info] == Migrated 20250331194510 in 0.0s  10:30:01.503 [info] == Running 20250331194727 Operately.Repo.Migrations.AddCascadeDeleteToAccessBindings.up/0 forward  10:30:01.503 [info] drop constraint access_bindings_context_id_fkey from table access_bindings  10:30:01.503 [info] alter table access_bindings  10:30:01.504 [info] == Migrated 20250331194727 in 0.0s  10:30:01.505 [info] == Running 20250331195524 Operately.Repo.Migrations.AddCascadeDeleteToContextActivities.up/0 forward  10:30:01.505 [info] drop constraint activities_context_id_fkey from table activities  10:30:01.505 [info] alter table activities  10:30:01.506 [info] == Migrated 20250331195524 in 0.0s  10:30:01.506 [info] == Running 20250331200245 Operately.Repo.Migrations.AddCascadeDeleteToProjectAccessContexts.up/0 forward  10:30:01.507 [info] drop constraint access_contexts_project_id_fkey from table access_contexts  10:30:01.507 [info] alter table access_contexts  10:30:01.507 [info] == Migrated 20250331200245 in 0.0s  10:30:01.508 [info] == Running 20250331202813 Operately.Repo.Migrations.AddCascadeDeleteToGoalCheckIns.up/0 forward  10:30:01.508 [info] drop constraint goal_updates_goal_id_fkey from table goal_updates  10:30:01.509 [info] alter table goal_updates  10:30:01.509 [info] == Migrated 20250331202813 in 0.0s  10:30:01.510 [info] == Running 20250401104505 Operately.Repo.Migrations.AddCascadeDeleteToActivityNotifications.up/0 forward  10:30:01.510 [info] drop constraint notifications_activity_id_fkey from table notifications  10:30:01.511 [info] alter table notifications  10:30:01.511 [info] == Migrated 20250401104505 in 0.0s  10:30:01.512 [info] == Running 20250403112800 Operately.Repo.Migrations.AddUniqueAccountPlusCompanyConstraintToPeople.change/0 forward  10:30:01.513 [info] create index people_company_id_account_id_index  10:30:01.513 [info] == Migrated 20250403112800 in 0.0s make test.mix.unit OperatelyWeb.AccountSessionControllerTest Test: DELETE /accounts/log_out logs the account out (test/operately_web/controllers/account_session_controller_test.exs:20) PASSED Test: GET /accounts/log_in returns 200 if the account is already logged in (test/operately_web/controllers/account_session_controller_test.exs:13) PASSED Test: DELETE /accounts/log_out succeeds even if the account is not logged in (test/operately_web/controllers/account_session_controller_test.exs:26) PASSED Operately.TimeTest Test: calculate_next_montly_check_in had no previous due date -> schedule next check-in for next month (test/operately/time_test.exs:35) PASSED Test: calculate_next_weekly_check_in check in on time -> schedule next check-in for next Friday (test/operately/time_test.exs:13) PASSED Test: calculate_next_montly_check_in check in on time -> schedule first of next month (test/operately/time_test.exs:39) PASSED Test: calculate_next_montly_check_in check in on significantly before due date, more than a week -> don't change the next check-in (test/operately/time_test.exs:47) PASSED Test: calculate_next_weekly_check_in check in late -> schedule next check-in for next Friday (test/operately/time_test.exs:25) PASSED Test: calculate_next_weekly_check_in check in on significantly before due date, more than a week -> don't change the next check-in (test/operately/time_test.exs:21) PASSED Test: calculate_next_weekly_check_in check in significantly late -> schedule next check-in for next Friday (test/operately/time_test.exs:29) PASSED Test: calculate_next_weekly_check_in had no previous due date -> schedule next check-in for next Friday (test/operately/time_test.exs:9) PASSED Test: calculate_next_montly_check_in check in late -> schedule next check-in for first of next month (test/operately/time_test.exs:51) PASSED Test: calculate_next_montly_check_in check in significantly late -> schedule next check-in for first of next month (test/operately/time_test.exs:55) PASSED Test: calculate_next_weekly_check_in check in on before due date -> schedule next check-in for next Friday (test/operately/time_test.exs:17) PASSED Test: calculate_next_montly_check_in check in on before due date -> schedule next check-in for first of next month (test/operately/time_test.exs:43) PASSED OperatelyWeb.ErrorHTMLTest Test: renders 500.html (test/operately_web/controllers/error_html_test.exs:11) PASSED Test: renders 404.html (test/operately_web/controllers/error_html_test.exs:7) PASSED Operately.Tasks.KanbanStateTest Test: initialize (test/operately/tasks/kanban_state_test.exs:13) PASSED Test: remove (test/operately/tasks/kanban_state_test.exs:36) PASSED Test: add (test/operately/tasks/kanban_state_test.exs:23) PASSED Test: load (test/operately/tasks/kanban_state_test.exs:8) PASSED Test: add_todo (test/operately/tasks/kanban_state_test.exs:17) PASSED OperatelyWeb.ErrorJSONTest Test: renders 500 (test/operately_web/controllers/error_json_test.exs:8) PASSED Test: renders 404 (test/operately_web/controllers/error_json_test.exs:4) PASSED warning: redefining module Operately.Data.Change051PopulateGoalLastCheckInsTest (current version defined in memory) │ 1 │ defmodule Operately.Data.Change051PopulateGoalLastCheckInsTest do │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ │ └─ test/operately/data/change_052_populate_goal_update_timeframes_test.exs:1: Operately.Data.Change051PopulateGoalLastCheckInsTest (module) OperatelyWeb.AccountAuthTest Test: fetch_current_account/2 authenticates account from cookies (test/operately_web/account_auth_test.exs:75) PASSED Test: log_in_account/3 clears everything previously stored in the session (test/operately_web/account_auth_test.exs:27) PASSED Test: require_authenticated_account/2 does not redirect if account is authenticated (test/operately_web/account_auth_test.exs:150) PASSED Test: fetch_current_account/2 does not authenticate if data is missing (test/operately_web/account_auth_test.exs:94) PASSED Test: redirect_if_account_is_authenticated/2 does not redirect if account is not authenticated (test/operately_web/account_auth_test.exs:109) PASSED Test: logout_account/1 works even if account is already logged out (test/operately_web/account_auth_test.exs:60) PASSED Test: logout_account/1 erases session and cookies (test/operately_web/account_auth_test.exs:43) PASSED Test: fetch_current_account/2 authenticates account from session (test/operately_web/account_auth_test.exs:69) PASSED Test: log_in_account/3 stores the account token in the session (test/operately_web/account_auth_test.exs:20) PASSED Test: require_authenticated_account/2 redirects if account is not authenticated (test/operately_web/account_auth_test.exs:117) PASSED Test: require_authenticated_account/2 stores the path to redirect to on GET (test/operately_web/account_auth_test.exs:124) PASSED Test: log_in_account/3 writes a cookie if remember_me is configured (test/operately_web/account_auth_test.exs:32) PASSED Test: redirect_if_account_is_authenticated/2 redirects if account is authenticated (test/operately_web/account_auth_test.exs:103) PASSED OperatelyWeb.Api.Queries.ListResourceHubNodesTest Test: permissions Resource Hubs - if caller has levels company=view_access and space=no_access, then expect code=allowed (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:38) PASSED Test: permissions Resource Hubs - if caller has levels company=no_access and space=no_access, then expect code=forbidden (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:38) PASSED Test: list_resource_hub_nodes functionality include_comments_count (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:118) PASSED Test: permissions Resource Hubs - if caller has levels company=comment_access and space=no_access, then expect code=allowed (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:38) PASSED Test: permissions Resource Hubs - if caller has levels company=full_access and space=no_access, then expect code=allowed (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:38) PASSED Test: permissions Resource Hubs - if caller has levels company=no_access and space=edit_access, then expect code=allowed (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:38) PASSED Test: permissions Resource Hubs - if caller has levels company=no_access and space=comment_access, then expect code=allowed (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:38) PASSED Test: permissions Resource Hubs - if caller has levels company=no_access and space=full_access, then expect code=allowed (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:38) PASSED Test: security it requires authentication (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:10) PASSED Test: list_resource_hub_nodes functionality fetches all nodes (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:78) PASSED Test: list_resource_hub_nodes functionality list only nodes within folder (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:94) PASSED Test: permissions Resource Hubs - if caller has levels company=no_access and space=view_access, then expect code=allowed (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:38) PASSED Test: permissions Resource Hubs - if caller has levels company=edit_access and space=no_access, then expect code=allowed (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:38) PASSED Test: list_resource_hub_nodes functionality include_children_count (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:146) PASSED OperatelyWeb.Api.Mutations.CloseProjectTest Test: permissions space members without edit access can't close a project (test/operately_web/api/mutations/close_project_test.exs:81) PASSED Test: permissions company members without view access can't see a project (test/operately_web/api/mutations/close_project_test.exs:35) PASSED Test: subscriptions to notifications adds mentioned people to subscription list (test/operately_web/api/mutations/close_project_test.exs:220) PASSED Test: permissions reviewers can close a project (test/operately_web/api/mutations/close_project_test.exs:151) PASSED Test: subscriptions to notifications doesn't create repeated subscription (test/operately_web/api/mutations/close_project_test.exs:247) PASSED Test: permissions space members with edit access can close a project (test/operately_web/api/mutations/close_project_test.exs:90) PASSED Test: permissions contributors without edit access can't close a project (test/operately_web/api/mutations/close_project_test.exs:112) PASSED Test: permissions company owner can close a project (test/operately_web/api/mutations/close_project_test.exs:58) PASSED Test: permissions company members with edit access can close a project (test/operately_web/api/mutations/close_project_test.exs:51) PASSED Test: permissions space members without view access can't see a project (test/operately_web/api/mutations/close_project_test.exs:72) PASSED Test: security it requires authentication (test/operately_web/api/mutations/close_project_test.exs:21) PASSED Test: permissions contributors with edit access can close a project (test/operately_web/api/mutations/close_project_test.exs:124) PASSED Test: subscriptions to notifications creates subscription list for project retrospective (test/operately_web/api/mutations/close_project_test.exs:195) PASSED Test: permissions champions can close a project (test/operately_web/api/mutations/close_project_test.exs:135) PASSED Test: permissions company members without edit access can't close a project (test/operately_web/api/mutations/close_project_test.exs:43) PASSED Test: permissions space managers can close a project (test/operately_web/api/mutations/close_project_test.exs:98) PASSED Test: close_project functionality closes project (test/operately_web/api/mutations/close_project_test.exs:171) PASSED Operately.Operations.TaskDescriptionChangeTest Test: TaskDescriptionChange operation creates activity (test/operately/operations/task_description_change_test.exs:40) PASSED Test: TaskDescriptionChange operation updates task (test/operately/operations/task_description_change_test.exs:29) PASSED Operately.Operations.CommentAddingTest Test: Commenting on message Commenting on message notifies selected people (test/operately/operations/comment_adding_test.exs:281) PASSED Test: Commenting on check-in Mentioned person is notified (test/operately/operations/comment_adding_test.exs:82) PASSED Test: Commenting on resource hub file Commenting on file notifies selected people (test/operately/operations/comment_adding_test.exs:601) PASSED Test: Commenting on resource hub link Commenting on link notifies selected people (test/operately/operations/comment_adding_test.exs:686) PASSED Test: Commenting on resource hub link Commenting on link notifies everyone (test/operately/operations/comment_adding_test.exs:664) PASSED Test: Commenting on resource hub document Commenting on document notifies selected people (test/operately/operations/comment_adding_test.exs:498) PASSED Test: Commenting on resource hub file Mentioned person is notified (test/operately/operations/comment_adding_test.exs:620) PASSED Test: Commenting on message Mentioned person is notified (test/operately/operations/comment_adding_test.exs:310) PASSED Test: Commenting on project retrospective Commenting on retrospective notifies selected people (test/operately/operations/comment_adding_test.exs:392) PASSED Test: Commenting on goal update Mentioned person is notified (test/operately/operations/comment_adding_test.exs:205) PASSED Test: Commenting on goal update Commenting on update notifies selected people (test/operately/operations/comment_adding_test.exs:173) PASSED Test: Commenting on message Commenting on message notifies everyone (test/operately/operations/comment_adding_test.exs:255) PASSED Test: Commenting on check-in Commenting on check-in notifies everyone (test/operately/operations/comment_adding_test.exs:52) PASSED Test: Commenting on project retrospective Mentioned person is notified (test/operately/operations/comment_adding_test.exs:422) PASSED Test: Commenting on resource hub file Commenting on file notifies everyone (test/operately/operations/comment_adding_test.exs:579) PASSED Test: Commenting on resource hub document Commenting on document notifies everyone (test/operately/operations/comment_adding_test.exs:468) PASSED Test: Commenting on goal update Commenting on update notifies everyone (test/operately/operations/comment_adding_test.exs:140) PASSED Test: Commenting on project retrospective Commenting on retrospective notifies everyone (test/operately/operations/comment_adding_test.exs:361) PASSED Test: Commenting on resource hub document Mentioned person is notified (test/operately/operations/comment_adding_test.exs:525) PASSED Test: Commenting on resource hub link Mentioned person is notified (test/operately/operations/comment_adding_test.exs:705) PASSED OperatelyWeb.Api.Mutations.DeleteResourceHubFolderTest Test: permissions if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_folder_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/mutations/delete_resource_hub_folder_test.exs:40) PASSED Test: permissions if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_folder_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_folder_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_folder_test.exs:40) PASSED Test: permissions if caller has levels company=comment_access and space=no_access, then expect code=403 (test/operately_web/api/mutations/delete_resource_hub_folder_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/mutations/delete_resource_hub_folder_test.exs:15) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=403 (test/operately_web/api/mutations/delete_resource_hub_folder_test.exs:40) PASSED Test: functionality deletes folder (test/operately_web/api/mutations/delete_resource_hub_folder_test.exs:74) PASSED OperatelyWeb.Api.Mutations.PostMilestoneCommentTest Test: permissions if action=reopen and caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=none and caller has levels company=no_access, space=view_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=reopen and caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=none and caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=complete and caller has levels company=no_access, space=no_access, project=view_access on the project, then expect code=403 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=complete and caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=complete and caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=complete and caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=complete and caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=reopen and caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=complete and caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=none and caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=complete and caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=none and caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=reopen and caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=complete and caller has levels company=view_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=none and caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=reopen and caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=complete and caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: post_milestone_comment functionality post comment with action: none (test/operately_web/api/mutations/post_milestone_comment_test.exs:108) PASSED Test: permissions if action=none and caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=none and caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: post_milestone_comment functionality post comment with action: complete (test/operately_web/api/mutations/post_milestone_comment_test.exs:108) PASSED Test: permissions if action=reopen and caller has levels company=no_access, space=view_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=reopen and caller has levels company=view_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=none and caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: security it requires authentication (test/operately_web/api/mutations/post_milestone_comment_test.exs:13) PASSED Test: permissions if action=reopen and caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=none and caller has levels company=view_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=reopen and caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=reopen and caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=reopen and caller has levels company=no_access, space=no_access, project=view_access on the project, then expect code=403 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=complete and caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=none and caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: post_milestone_comment functionality post comment with action: reopen (test/operately_web/api/mutations/post_milestone_comment_test.exs:108) PASSED Test: permissions if action=reopen and caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=reopen and caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=none and caller has levels company=no_access, space=no_access, project=view_access on the project, then expect code=403 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=complete and caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=none and caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=complete and caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=none and caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=complete and caller has levels company=no_access, space=view_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED OperatelyWeb.Api.Queries.GetResourceHubFileTest Test: permissions if caller has levels company=view_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_file_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/queries/get_resource_hub_file_test.exs:40) PASSED Test: get_resource_hub_file functionality include_subscriptions_list (test/operately_web/api/queries/get_resource_hub_file_test.exs:91) PASSED Test: permissions if caller has levels company=comment_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_file_test.exs:40) PASSED Test: permissions if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_file_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_file_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_file_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_file_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_resource_hub_file_test.exs:11) PASSED Test: get_resource_hub_file functionality get file (test/operately_web/api/queries/get_resource_hub_file_test.exs:70) PASSED Test: get_resource_hub_file functionality include_author (test/operately_web/api/queries/get_resource_hub_file_test.exs:78) PASSED Test: permissions if caller has levels company=no_access and space=view_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_file_test.exs:40) PASSED Test: permissions if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_file_test.exs:40) PASSED Test: get_resource_hub_file functionality include_potential_subscribers (test/operately_web/api/queries/get_resource_hub_file_test.exs:106) PASSED Operately.Data.Change023AddTagToReviewersAndChampionsBindingsTest Test: creates tags for goals reviewers' and champions' bindings (test/operately/data/change_023_add_tag_to_reviewers_and_champions_bindings_test.exs:41) PASSED Test: creates tags for projects reviewers' and champions' bindings (test/operately/data/change_023_add_tag_to_reviewers_and_champions_bindings_test.exs:23) PASSED OperatelyWeb.Api.Mutations.EditProjectTimelineTest Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_timeline_test.exs:41) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/edit_project_timeline_test.exs:41) PASSED Test: edit_project_timeline functionality updates project milestones (test/operately_web/api/mutations/edit_project_timeline_test.exs:91) PASSED Test: permissions if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_timeline_test.exs:41) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_timeline_test.exs:41) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_timeline_test.exs:41) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_timeline_test.exs:41) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_project_timeline_test.exs:41) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_project_timeline_test.exs:13) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_timeline_test.exs:41) PASSED Test: edit_project_timeline functionality edits project start date and deadline (test/operately_web/api/mutations/edit_project_timeline_test.exs:72) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_project_timeline_test.exs:41) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_project_timeline_test.exs:41) PASSED Test: edit_project_timeline functionality adds project milestone (test/operately_web/api/mutations/edit_project_timeline_test.exs:115) PASSED Operately.Operations.TaskUpdateTest Test: TaskUpdate operation creates activity (test/operately/operations/task_update_test.exs:49) PASSED Test: TaskUpdate operation updates task (test/operately/operations/task_update_test.exs:31) PASSED OperatelyWeb.Api.Queries.GetTasksTest Test: permissions reviewers have access (test/operately_web/api/queries/get_tasks_test.exs:75) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_tasks_test.exs:29) PASSED Test: get_tasks functionality get tasks with nothing included (test/operately_web/api/queries/get_tasks_test.exs:101) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_tasks_test.exs:51) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_tasks_test.exs:43) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_tasks_test.exs:59) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_tasks_test.exs:15) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_tasks_test.exs:36) PASSED Test: get_tasks functionality include_assignees (test/operately_web/api/queries/get_tasks_test.exs:108) PASSED Operately.Operations.ResourceHubDocumentDeletingTest Test: Deleting document sends notifications to selected people (test/operately/operations/resource_hub_document_deleting_test.exs:42) PASSED Test: Deleting document sends notifications to everyone (test/operately/operations/resource_hub_document_deleting_test.exs:20) PASSED Test: Person without permissions is not notified (test/operately/operations/resource_hub_document_deleting_test.exs:64) PASSED OperatelyWeb.Api.Mutations.DeleteResourceHubFileTest Test: permissions if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_file_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/mutations/delete_resource_hub_file_test.exs:40) PASSED Test: permissions if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_file_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_file_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_file_test.exs:40) PASSED Test: permissions if caller has levels company=comment_access and space=no_access, then expect code=403 (test/operately_web/api/mutations/delete_resource_hub_file_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/mutations/delete_resource_hub_file_test.exs:15) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=403 (test/operately_web/api/mutations/delete_resource_hub_file_test.exs:40) PASSED Test: functionality removes file (test/operately_web/api/mutations/delete_resource_hub_file_test.exs:73) PASSED OperatelyWeb.Api.Mutations.EditSpacePermissionsTest Test: permissions space managers can edit space permissions (test/operately_web/api/mutations/edit_space_permissions_test.exs:66) PASSED Test: permissions company members without view access can't see space permissions (test/operately_web/api/mutations/edit_space_permissions_test.exs:24) PASSED Test: edit_space_permissions functionality edits space permissions (test/operately_web/api/mutations/edit_space_permissions_test.exs:78) PASSED Test: permissions company owner can edit space permissions (test/operately_web/api/mutations/edit_space_permissions_test.exs:45) PASSED Test: permissions company members with full access can edit space permissions (test/operately_web/api/mutations/edit_space_permissions_test.exs:38) PASSED Test: permissions space members without full access can't edit space permissions (test/operately_web/api/mutations/edit_space_permissions_test.exs:58) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_space_permissions_test.exs:11) PASSED Test: permissions company members without full access can't edit space permissions (test/operately_web/api/mutations/edit_space_permissions_test.exs:31) PASSED OperatelyWeb.Api.Mutations.CreateResourceHubFolderTest Test: permissions if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_folder_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/mutations/create_resource_hub_folder_test.exs:40) PASSED Test: permissions if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_folder_test.exs:40) PASSED Test: functionality creates folder within folder (test/operately_web/api/mutations/create_resource_hub_folder_test.exs:88) PASSED Test: permissions if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_folder_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_folder_test.exs:40) PASSED Test: permissions if caller has levels company=comment_access and space=no_access, then expect code=403 (test/operately_web/api/mutations/create_resource_hub_folder_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/mutations/create_resource_hub_folder_test.exs:15) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=403 (test/operately_web/api/mutations/create_resource_hub_folder_test.exs:40) PASSED Test: functionality creates folder within hub (test/operately_web/api/mutations/create_resource_hub_folder_test.exs:74) PASSED OperatelyWeb.Api.Queries.GetPeopleTest Test: get_people functionality include_suspeded (test/operately_web/api/queries/get_people_test.exs:91) PASSED Test: security it doesn't return people from other companies (test/operately_web/api/queries/get_people_test.exs:14) PASSED Test: get_people functionality only_suspended (test/operately_web/api/queries/get_people_test.exs:100) PASSED Test: permissions suspended people don't have access (test/operately_web/api/queries/get_people_test.exs:64) PASSED Test: permissions company member can't query people from another company (test/operately_web/api/queries/get_people_test.exs:48) PASSED Test: get_people functionality returns all people from the company (test/operately_web/api/queries/get_people_test.exs:78) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_people_test.exs:10) PASSED Test: permissions company member can query people from the same company (test/operately_web/api/queries/get_people_test.exs:32) PASSED Test: get_people functionality include_manager (test/operately_web/api/queries/get_people_test.exs:109) PASSED Operately.UpdatesTest Test: updates change_update/1 returns a update changeset (test/operately/updates_test.exs:56) PASSED Test: updates get_update!/1 returns the update with given id (test/operately/updates_test.exs:31) PASSED Test: reactions list_reactions/2 returns all reactions (test/operately/updates_test.exs:124) PASSED Test: reactions create_reaction/1 with invalid data returns error changeset (test/operately/updates_test.exs:143) PASSED Test: reactions update_reaction/2 with invalid data returns error changeset (test/operately/updates_test.exs:161) PASSED Test: reactions change_reaction/1 returns a reaction changeset (test/operately/updates_test.exs:173) PASSED Test: reactions create_reaction/1 with valid data creates a reaction (test/operately/updates_test.exs:134) PASSED Test: comments update_comment/2 with invalid data returns error changeset (test/operately/updates_test.exs:102) PASSED Test: reactions get_reaction!/1 returns the reaction with given id (test/operately/updates_test.exs:129) PASSED Test: comments list_comments/0 returns all comments (test/operately/updates_test.exs:70) PASSED Test: comments create_comment/1 with valid data creates a comment (test/operately/updates_test.exs:78) PASSED Test: updates update_update/2 with invalid data returns error changeset (test/operately/updates_test.exs:47) PASSED Test: updates update_update/2 with valid data updates the update (test/operately/updates_test.exs:39) PASSED Test: updates delete_update/1 deletes the update (test/operately/updates_test.exs:51) PASSED Test: updates list_updates/0 returns all updates (test/operately/updates_test.exs:27) PASSED Test: comments create_comment/1 with invalid data returns error changeset (test/operately/updates_test.exs:89) PASSED Test: comments change_comment/1 returns a comment changeset (test/operately/updates_test.exs:112) PASSED Test: comments update_comment/2 with valid data updates the comment (test/operately/updates_test.exs:93) PASSED Test: updates create_update/1 with invalid data returns error changeset (test/operately/updates_test.exs:35) PASSED Test: reactions delete_reaction/1 deletes the reaction (test/operately/updates_test.exs:167) PASSED Test: comments get_comment!/1 returns the comment with given id (test/operately/updates_test.exs:74) PASSED Test: comments delete_comment/1 deletes the comment (test/operately/updates_test.exs:107) PASSED Test: reactions update_reaction/2 with valid data updates the reaction (test/operately/updates_test.exs:147) PASSED Operately.ProjectsTest Test: project_documents update_document/2 with valid data updates the document (test/operately/projects_test.exs:264) PASSED Test: projects change_project/1 returns a project changeset (test/operately/projects_test.exs:79) PASSED Test: project_key_resources update_key_resource/2 with valid data updates the key_resource (test/operately/projects_test.exs:322) PASSED Test: projects get_project!/1 returns the project with given id (test/operately/projects_test.exs:40) PASSED Test: project_milestones delete_milestone/1 deletes the milestone (test/operately/projects_test.exs:164) PASSED Test: project_contributors get_contributor!/1 returns the contributor with given id (test/operately/projects_test.exs:190) PASSED Test: project_documents create_document/1 with invalid data returns error changeset (test/operately/projects_test.exs:260) PASSED Test: project_contributors update_contributor/2 with valid data updates the contributor (test/operately/projects_test.exs:206) PASSED Test: project_contributors change_contributor/1 returns a contributor changeset (test/operately/projects_test.exs:218) PASSED Test: project_contributors list_project_contributors/0 returns all project_contributors (test/operately/projects_test.exs:186) PASSED Test: project_milestones create_milestone/1 with invalid data returns error changeset (test/operately/projects_test.exs:147) PASSED Test: project_milestones change_milestone/1 returns a milestone changeset (test/operately/projects_test.exs:169) PASSED Test: projects outdated?/1 returns true if the project is outdated (test/operately/projects_test.exs:83) PASSED Test: project_key_resources change_key_resource/1 returns a key_resource changeset (test/operately/projects_test.exs:341) PASSED Test: project_documents list_project_documents/0 returns all project_documents (test/operately/projects_test.exs:239) PASSED Test: project_milestones get_milestone!/1 returns the milestone with given id (test/operately/projects_test.exs:123) PASSED Test: project_documents delete_document/1 deletes the document (test/operately/projects_test.exs:277) PASSED Test: project_documents create_document/1 with valid data creates a document (test/operately/projects_test.exs:247) PASSED Test: projects update_project/2 with invalid data returns error changeset (test/operately/projects_test.exs:69) PASSED Test: projects update_project/2 with valid data updates the project (test/operately/projects_test.exs:62) PASSED Test: project_key_resources get_key_resource!/1 returns the key_resource with given id (test/operately/projects_test.exs:304) PASSED Test: project_key_resources update_key_resource/2 with invalid data returns error changeset (test/operately/projects_test.exs:331) PASSED Test: projects archive_project/1 archives the project (test/operately/projects_test.exs:74) PASSED Test: projects list_projects/0 returns all projects (test/operately/projects_test.exs:36) PASSED Test: project_key_resources delete_key_resource/1 deletes the key_resource (test/operately/projects_test.exs:336) PASSED Test: project_milestones get_next_milestone/1 returns the first upcoming milestone (test/operately/projects_test.exs:127) PASSED Test: project_documents change_document/1 returns a document changeset (test/operately/projects_test.exs:282) PASSED Test: project_key_resources create_key_resource/1 with invalid data returns error changeset (test/operately/projects_test.exs:318) PASSED Test: project_documents update_document/2 with invalid data returns error changeset (test/operately/projects_test.exs:272) PASSED Test: project_milestones update_milestone/2 with invalid data returns error changeset (test/operately/projects_test.exs:159) PASSED Test: project_milestones create_milestone/1 with valid data creates a milestone (test/operately/projects_test.exs:135) PASSED Test: project_key_resources list_key_resources/0 returns all project_key_resources (test/operately/projects_test.exs:300) PASSED Test: project_key_resources create_key_resource/1 with valid data creates a key_resource (test/operately/projects_test.exs:308) PASSED Test: projects create_project/2 with valid data creates a project (test/operately/projects_test.exs:44) PASSED Test: project_contributors delete_contributor/1 deletes the contributor (test/operately/projects_test.exs:213) PASSED Test: project_milestones list_project_milestones/1 returns all project_milestones (test/operately/projects_test.exs:119) PASSED Test: project_documents get_document!/1 returns the document with given id (test/operately/projects_test.exs:243) PASSED Test: project_milestones update_milestone/2 with valid data updates the milestone (test/operately/projects_test.exs:151) PASSED Test: project_contributors create_contributor/2 with valid data creates a contributor (test/operately/projects_test.exs:194) PASSED OperatelyWeb.Api.Mutations.DeleteResourceHubLinkTest Test: permissions if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_link_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/mutations/delete_resource_hub_link_test.exs:40) PASSED Test: permissions if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_link_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_link_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_link_test.exs:40) PASSED Test: permissions if caller has levels company=comment_access and space=no_access, then expect code=403 (test/operately_web/api/mutations/delete_resource_hub_link_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/mutations/delete_resource_hub_link_test.exs:15) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=403 (test/operately_web/api/mutations/delete_resource_hub_link_test.exs:40) PASSED Test: functionality deletes link (test/operately_web/api/mutations/delete_resource_hub_link_test.exs:73) PASSED Operately.Data.Change041CreateOneResourceHubForEachExistingSpaceTest Test: creates one resource hubs for every existing space (test/operately/data/change_041_create_one_resource_hub_for_each_existing_space_test.exs:14) PASSED OperatelyWeb.Api.Mutations.CreateBlobTest Test: create_blob functionality it creates a new blob record in the database (test/operately_web/api/mutations/create_blob_test.exs:13) PASSED Test: security it requires authentication (test/operately_web/api/mutations/create_blob_test.exs:5) PASSED Test: create_blob functionality it creates multiple blob records in the database (test/operately_web/api/mutations/create_blob_test.exs:31) PASSED TurboConnect.FieldsTest Test: defining fields (test/turbo_connect/fields_test.exs:17) PASSED Operately.Operations.ResourceHubFileDeletingTest Test: Deleting file sends notifications to selected people (test/operately/operations/resource_hub_file_deleting_test.exs:43) PASSED Test: Deleting file sends notifications to everyone (test/operately/operations/resource_hub_file_deleting_test.exs:21) PASSED Test: Person without permissions is not notified (test/operately/operations/resource_hub_file_deleting_test.exs:65) PASSED OperatelyWeb.Api.Mutations.UpdateMilestoneDescriptionTest Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_milestone_description_test.exs:41) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/update_milestone_description_test.exs:41) PASSED Test: permissions if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_milestone_description_test.exs:41) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_milestone_description_test.exs:41) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/update_milestone_description_test.exs:41) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/update_milestone_description_test.exs:41) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/update_milestone_description_test.exs:41) PASSED Test: security it requires authentication (test/operately_web/api/mutations/update_milestone_description_test.exs:13) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_milestone_description_test.exs:41) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/update_milestone_description_test.exs:41) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/update_milestone_description_test.exs:41) PASSED OperatelyWeb.Api.Mutations.ReopenGoalTest Test: permissions if caller has levels company=edit_access, space=no_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/reopen_goal_test.exs:37) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=full_access on the goal, then expect code=200 (test/operately_web/api/mutations/reopen_goal_test.exs:37) PASSED Test: permissions if caller has levels company=full_access, space=no_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/reopen_goal_test.exs:37) PASSED Test: permissions if caller has levels company=no_access, space=full_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/reopen_goal_test.exs:37) PASSED Test: permissions if caller has levels company=no_access, space=edit_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/reopen_goal_test.exs:37) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/reopen_goal_test.exs:37) PASSED Test: security it requires authentication (test/operately_web/api/mutations/reopen_goal_test.exs:12) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/reopen_goal_test.exs:37) PASSED OperatelyWeb.Api.Mutations.EditGoalTest Test: permissions space members without edit access can't edit a goal (test/operately_web/api/mutations/edit_goal_test.exs:69) PASSED Test: permissions company members without view access can't see a goal (test/operately_web/api/mutations/edit_goal_test.exs:27) PASSED Test: edit_goal functionality edits goal targets (test/operately_web/api/mutations/edit_goal_test.exs:179) PASSED Test: edit_goal functionality edits goal parent (test/operately_web/api/mutations/edit_goal_test.exs:227) PASSED Test: edit_goal functionality edits a goal description (test/operately_web/api/mutations/edit_goal_test.exs:144) PASSED Test: edit_goal functionality edits goal permissions (test/operately_web/api/mutations/edit_goal_test.exs:200) PASSED Test: permissions space members with edit access can edit a goal (test/operately_web/api/mutations/edit_goal_test.exs:77) PASSED Test: permissions champions can edit a goal (test/operately_web/api/mutations/edit_goal_test.exs:98) PASSED Test: permissions company owners can edit a goal (test/operately_web/api/mutations/edit_goal_test.exs:48) PASSED Test: permissions company members with edit access can edit a goal (test/operately_web/api/mutations/edit_goal_test.exs:41) PASSED Test: permissions space members without view access can't see a goal (test/operately_web/api/mutations/edit_goal_test.exs:61) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_goal_test.exs:13) PASSED Test: permissions reviewers can edit a goal (test/operately_web/api/mutations/edit_goal_test.exs:113) PASSED Test: edit_goal functionality edits a goal timeframe (test/operately_web/api/mutations/edit_goal_test.exs:163) PASSED Test: edit_goal functionality edits a goal name (test/operately_web/api/mutations/edit_goal_test.exs:132) PASSED Test: permissions company members without edit access can't edit a goal (test/operately_web/api/mutations/edit_goal_test.exs:34) PASSED Test: permissions space managers can edit a goal (test/operately_web/api/mutations/edit_goal_test.exs:85) PASSED Test: edit_goal functionality edits a goal champion and reviewer (test/operately_web/api/mutations/edit_goal_test.exs:154) PASSED OperatelyWeb.Api.Mutations.EditResourceHubLinkTest Test: permissions if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/edit_resource_hub_link_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/mutations/edit_resource_hub_link_test.exs:40) PASSED Test: permissions if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/edit_resource_hub_link_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/edit_resource_hub_link_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/mutations/edit_resource_hub_link_test.exs:40) PASSED Test: permissions if caller has levels company=comment_access and space=no_access, then expect code=403 (test/operately_web/api/mutations/edit_resource_hub_link_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_resource_hub_link_test.exs:15) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=403 (test/operately_web/api/mutations/edit_resource_hub_link_test.exs:40) PASSED Test: functionality edits link (test/operately_web/api/mutations/edit_resource_hub_link_test.exs:81) PASSED Operately.KpisTest Test: kpis delete_kpi/1 deletes the kpi (test/operately/kpis_test.exs:62) PASSED Test: kpis get_kpi!/1 returns the kpi with given id (test/operately/kpis_test.exs:18) PASSED Test: kpi_metrics change_metric/1 returns a metric changeset (test/operately/kpis_test.exs:124) PASSED Test: kpi_metrics update_metric/2 with valid data updates the metric (test/operately/kpis_test.exs:103) PASSED Test: kpis change_kpi/1 returns a kpi changeset (test/operately/kpis_test.exs:68) PASSED Test: kpi_metrics get_metric!/1 returns the metric with given id (test/operately/kpis_test.exs:86) PASSED Test: kpis update_kpi/2 with valid data updates the kpi (test/operately/kpis_test.exs:41) PASSED Test: kpis create_kpi/1 with invalid data returns error changeset (test/operately/kpis_test.exs:37) PASSED Test: kpis update_kpi/2 with invalid data returns error changeset (test/operately/kpis_test.exs:56) PASSED Test: kpis list_kpis/0 returns all kpis (test/operately/kpis_test.exs:13) PASSED Test: kpi_metrics create_metric/1 with valid data creates a metric (test/operately/kpis_test.exs:91) PASSED Test: kpi_metrics delete_metric/1 deletes the metric (test/operately/kpis_test.exs:118) PASSED Test: kpi_metrics create_metric/1 with invalid data returns error changeset (test/operately/kpis_test.exs:99) PASSED Test: kpis create_kpi/1 with valid data creates a kpi (test/operately/kpis_test.exs:23) PASSED Test: kpi_metrics list_kpi_metrics/0 returns all kpi_metrics (test/operately/kpis_test.exs:81) PASSED Test: kpi_metrics update_metric/2 with invalid data returns error changeset (test/operately/kpis_test.exs:112) PASSED OperatelyWeb.Api.Mutations.EditResourceHubDocumentTest Test: permissions if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/edit_resource_hub_document_test.exs:41) PASSED Test: permissions if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/mutations/edit_resource_hub_document_test.exs:41) PASSED Test: permissions if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/edit_resource_hub_document_test.exs:41) PASSED Test: permissions if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/edit_resource_hub_document_test.exs:41) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/mutations/edit_resource_hub_document_test.exs:41) PASSED Test: permissions if caller has levels company=comment_access and space=no_access, then expect code=403 (test/operately_web/api/mutations/edit_resource_hub_document_test.exs:41) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_resource_hub_document_test.exs:16) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=403 (test/operately_web/api/mutations/edit_resource_hub_document_test.exs:41) PASSED Test: functionality edits document (test/operately_web/api/mutations/edit_resource_hub_document_test.exs:80) PASSED Operately.Data.Change051PopulateGoalLastCheckInsTest Test: updates goals with their latest updates (test/operately/data/change_052_populate_goal_update_timeframes_test.exs:17) PASSED OperatelyWeb.Api.Mutations.RemoveProjectContributorTest Test: permissions if caller has levels company=no_access, space=view_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/remove_project_contributor_test.exs:44) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/remove_project_contributor_test.exs:44) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/remove_project_contributor_test.exs:44) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/remove_project_contributor_test.exs:44) PASSED Test: permissions if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/remove_project_contributor_test.exs:44) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=403 (test/operately_web/api/mutations/remove_project_contributor_test.exs:44) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/remove_project_contributor_test.exs:44) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/remove_project_contributor_test.exs:44) PASSED Test: security it requires authentication (test/operately_web/api/mutations/remove_project_contributor_test.exs:13) PASSED Test: permissions if caller has levels company=view_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/remove_project_contributor_test.exs:44) PASSED Test: remove_project_contributor functionality removes project contributor (test/operately_web/api/mutations/remove_project_contributor_test.exs:65) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/remove_project_contributor_test.exs:44) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=view_access on the project, then expect code=403 (test/operately_web/api/mutations/remove_project_contributor_test.exs:44) PASSED Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/remove_project_contributor_test.exs:44) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/remove_project_contributor_test.exs:44) PASSED Operately.Data.Change047PopulatePublishedAtFieldInExistingPublishedDocumentsTest Test: doesn't populate published_at field in existing draft documents (test/operately/data/change_047_populate_published_at_field_in_existing_published_documents_test.exs:33) PASSED Test: populates published_at field in existing published documents (test/operately/data/change_047_populate_published_at_field_in_existing_published_documents_test.exs:15) PASSED Operately.CommentsTest Test: milestone_comments get_milestone_comment!/1 returns the milestone_comment with given id (test/operately/comments_test.exs:43) PASSED Test: milestone_comments delete_milestone_comment/1 deletes the milestone_comment (test/operately/comments_test.exs:63) PASSED Test: milestone_comments update_milestone_comment/2 with invalid data returns error changeset (test/operately/comments_test.exs:54) PASSED Test: milestone_comments change_milestone_comment/1 returns a milestone_comment changeset (test/operately/comments_test.exs:68) PASSED Test: milestone_comments list_milestone_comments/0 returns all milestone_comments (test/operately/comments_test.exs:38) PASSED Test: milestone_comments update_milestone_comment/2 with valid data updates the milestone_comment (test/operately/comments_test.exs:48) PASSED Operately.AccessContextsTest Test: access_contexts relationships with projects, groups, activities and companies create access_context for a company (test/operately/access/contexts_test.exs:65) PASSED Test: access_contexts get_context!/1 returns the context with given id (test/operately/access/contexts_test.exs:26) PASSED Test: access_contexts relationships with projects, groups, activities and companies create access_context for a group (test/operately/access/contexts_test.exs:71) PASSED Test: access_contexts relationships with projects, groups, activities and companies create access_context for a project (test/operately/access/contexts_test.exs:83) PASSED Test: access_contexts delete_context/1 deletes the context (test/operately/access/contexts_test.exs:44) PASSED Test: access_contexts update_context/2 with valid data updates the context (test/operately/access/contexts_test.exs:37) PASSED Test: access_contexts change_context/1 returns a context changeset (test/operately/access/contexts_test.exs:49) PASSED Test: access_contexts list_contexts/0 returns all contexts (test/operately/access/contexts_test.exs:22) PASSED Test: access_contexts relationships with projects, groups, activities and companies access_context cannot be attached to more than one entity (test/operately/access/contexts_test.exs:89) PASSED Test: access_contexts create_context/1 with valid data creates a context (test/operately/access/contexts_test.exs:30) PASSED Test: access_contexts relationships with projects, groups, activities and companies create access_context for a goal (test/operately/access/contexts_test.exs:77) PASSED Operately.People.EmailActivationCodeTest Test: creation it creates a 6 digit code (test/operately/people/email_activation_code_test.exs:5) PASSED OperatelyWeb.Api.Queries.GetResourceHubDocumentTest Test: permissions if caller has levels company=view_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_document_test.exs:38) PASSED Test: permissions if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/queries/get_resource_hub_document_test.exs:38) PASSED Test: get_resource_hub_document functionality include_resource_hub (test/operately_web/api/queries/get_resource_hub_document_test.exs:87) PASSED Test: permissions if caller has levels company=comment_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_document_test.exs:38) PASSED Test: permissions if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_document_test.exs:38) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_document_test.exs:38) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_document_test.exs:38) PASSED Test: permissions if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_document_test.exs:38) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_resource_hub_document_test.exs:10) PASSED Test: get_resource_hub_document functionality get document (test/operately_web/api/queries/get_resource_hub_document_test.exs:68) PASSED Test: get_resource_hub_document functionality include_author (test/operately_web/api/queries/get_resource_hub_document_test.exs:74) PASSED Test: permissions if caller has levels company=no_access and space=view_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_document_test.exs:38) PASSED Test: permissions if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_document_test.exs:38) PASSED Test: get_resource_hub_document functionality include_parent_folder (test/operately_web/api/queries/get_resource_hub_document_test.exs:100) PASSED Operately.Operations.ResourceHubFileCreatingTest Test: functionality blobs are marked as uploaded (test/operately/operations/resource_hub_file_creating_test.exs:41) PASSED Test: notifications Person without permissions is not notified (test/operately/operations/resource_hub_file_creating_test.exs:100) PASSED Test: notifications Creating file sends notifications to selected people (test/operately/operations/resource_hub_file_creating_test.exs:80) PASSED Test: functionality creates subscriptions (test/operately/operations/resource_hub_file_creating_test.exs:24) PASSED Test: notifications Creating file sends notifications to everyone (test/operately/operations/resource_hub_file_creating_test.exs:60) PASSED Operately.Operations.GoalCheckInTest Test: notifications Creating goal update notifies everyone (test/operately/operations/goal_check_in_test.exs:37) PASSED Test: notifications person without permissions is not notified (test/operately/operations/goal_check_in_test.exs:96) PASSED Test: creating goal update sets last update on the goal (test/operately/operations/goal_check_in_test.exs:20) PASSED Test: notifications Creating goal update notifies selected people (test/operately/operations/goal_check_in_test.exs:68) PASSED OperatelyWeb.Api.Mutations.CreateSpaceTest Test: permissions company members can create spaces (test/operately_web/api/mutations/create_space_test.exs:16) PASSED Test: create_space functionality creates space (test/operately_web/api/mutations/create_space_test.exs:39) PASSED Test: permissions company owners can create space (test/operately_web/api/mutations/create_space_test.exs:28) PASSED Test: security it requires authentication (test/operately_web/api/mutations/create_space_test.exs:8) PASSED Test: permissions company members with full access can create space (test/operately_web/api/mutations/create_space_test.exs:21) PASSED Operately.Access.BindedPeopleLoaderTest Test: load/1 returns all people bound to the context (test/operately/access/binded_people_loader_test.exs:19) PASSED OperatelyWeb.Api.Queries.GetGoalProgressUpdateTest Test: permissions reviewers have access (test/operately_web/api/queries/get_goal_progress_update_test.exs:70) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_goal_progress_update_test.exs:30) PASSED Test: get_goal_progress_update functionality include_potential_subscribers (test/operately_web/api/queries/get_goal_progress_update_test.exs:98) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_goal_progress_update_test.exs:49) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_goal_progress_update_test.exs:42) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_goal_progress_update_test.exs:56) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_goal_progress_update_test.exs:15) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_goal_progress_update_test.exs:36) PASSED Test: get_goal_progress_update functionality include_unread_notifications (test/operately_web/api/queries/get_goal_progress_update_test.exs:132) PASSED OperatelyWeb.Api.Mutations.DeleteResourceHubDocumentTest Test: permissions if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_document_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/mutations/delete_resource_hub_document_test.exs:40) PASSED Test: permissions if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_document_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_document_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_document_test.exs:40) PASSED Test: permissions if caller has levels company=comment_access and space=no_access, then expect code=403 (test/operately_web/api/mutations/delete_resource_hub_document_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/mutations/delete_resource_hub_document_test.exs:15) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=403 (test/operately_web/api/mutations/delete_resource_hub_document_test.exs:40) PASSED Test: functionality removes document (test/operately_web/api/mutations/delete_resource_hub_document_test.exs:75) PASSED OperatelyWeb.Api.Mutations.RenameResourceHubFolderTest Test: permissions if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/rename_resource_hub_folder_test.exs:39) PASSED Test: permissions if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/mutations/rename_resource_hub_folder_test.exs:39) PASSED Test: permissions if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/rename_resource_hub_folder_test.exs:39) PASSED Test: permissions if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/rename_resource_hub_folder_test.exs:39) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/mutations/rename_resource_hub_folder_test.exs:39) PASSED Test: permissions if caller has levels company=comment_access and space=no_access, then expect code=403 (test/operately_web/api/mutations/rename_resource_hub_folder_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/mutations/rename_resource_hub_folder_test.exs:14) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=403 (test/operately_web/api/mutations/rename_resource_hub_folder_test.exs:39) PASSED Test: functionality renames folder (test/operately_web/api/mutations/rename_resource_hub_folder_test.exs:77) PASSED Operately.Data.Change034AddSpaceProjectPausingToActivityTest Test: project_milestone_commented migration doesn't delete existing data in activity content (test/operately/data/change_034_add_space_project_pausing_to_activity_test.exs:52) PASSED Test: project_pausing and project_renamed migration doesn't delete existing data in activity content (test/operately/data/change_034_add_space_project_pausing_to_activity_test.exs:17) PASSED Operately.Data.Change048DeleteGoalReparentActivitiesWithMissingDataTest Test: Adds space_id and goal_id to activity content (test/operately/data/change_048_delete_goal_reparent_activities_with_missing_data_test.exs:16) PASSED Operately.Blobs.UpdateSrcDataTest Test: update_discussion_content (test/operately/blobs/update_src_data_test.exs:67) PASSED Test: succesfully converts broken blob references (test/operately/blobs/update_src_data_test.exs:63) PASSED OperatelyWeb.Api.Mutations.AddSpaceMembersTest Test: permissions space managers can add members to space (test/operately_web/api/mutations/add_space_members_test.exs:94) PASSED Test: permissions company members without view access can't see space (test/operately_web/api/mutations/add_space_members_test.exs:25) PASSED Test: add_space_members functionality adds one member (test/operately_web/api/mutations/add_space_members_test.exs:124) PASSED Test: permissions company admins can add members to space (test/operately_web/api/mutations/add_space_members_test.exs:60) PASSED Test: permissions company members with full access can add members to space (test/operately_web/api/mutations/add_space_members_test.exs:49) PASSED Test: permissions space members without full access can't add members to space (test/operately_web/api/mutations/add_space_members_test.exs:82) PASSED Test: security it requires authentication (test/operately_web/api/mutations/add_space_members_test.exs:12) PASSED Test: permissions company members without full access can't add members to space (test/operately_web/api/mutations/add_space_members_test.exs:37) PASSED Test: add_space_members functionality adds multiple members (test/operately_web/api/mutations/add_space_members_test.exs:136) PASSED OperatelyWeb.Api.Mutations.ArchiveMessageTest Test: functionality it archives a message (test/operately_web/api/mutations/archive_message_test.exs:26) PASSED Test: security it requires authentication (test/operately_web/api/mutations/archive_message_test.exs:16) PASSED Test: functionality it archives a draft message (test/operately_web/api/mutations/archive_message_test.exs:31) PASSED OperatelyWeb.Api.Mutations.AcknowledgeGoalProgressUpdateTest Test: acknowledge_goal_progress_update functionality acknowledges goal update (test/operately_web/api/mutations/acknowledge_goal_progress_update_test.exs:73) PASSED Test: permissions company members without view access can't see an update (test/operately_web/api/mutations/acknowledge_goal_progress_update_test.exs:27) PASSED Test: permissions space members can't acknowledge an update (test/operately_web/api/mutations/acknowledge_goal_progress_update_test.exs:49) PASSED Test: permissions space members without view access can't see an update (test/operately_web/api/mutations/acknowledge_goal_progress_update_test.exs:41) PASSED Test: permissions reviewers can acknowledge an update (test/operately_web/api/mutations/acknowledge_goal_progress_update_test.exs:57) PASSED Test: security it requires authentication (test/operately_web/api/mutations/acknowledge_goal_progress_update_test.exs:13) PASSED Test: permissions company members can't acknowledge an update (test/operately_web/api/mutations/acknowledge_goal_progress_update_test.exs:34) PASSED Operately.Operations.ProjectSpaceMovingTest Test: ProjectSpaceMoving operation creates binding to new space and deletes old binding (test/operately/operations/project_space_moving_test.exs:42) PASSED Test: ProjectSpaceMoving operation creates activity and notification (test/operately/operations/project_space_moving_test.exs:90) PASSED Test: ProjectSpaceMoving operation deletes old binding when it's to the company's space (test/operately/operations/project_space_moving_test.exs:74) PASSED Test: ProjectSpaceMoving operation changes project's space (test/operately/operations/project_space_moving_test.exs:33) PASSED Test: ProjectSpaceMoving operation creates new binding when it's to the company's space (test/operately/operations/project_space_moving_test.exs:58) PASSED Operately.Data.Change011CreateCompaniesAccessContextTest Test: creates access_context successfully when a company already has access context (test/operately/data/change_011_create_companies_access_context_test.exs:27) PASSED Test: creates access_context for existing companies (test/operately/data/change_011_create_companies_access_context_test.exs:11) PASSED Operately.Data.Change037AddSpaceToGoalUpdateActivitiesTest Test: migration doesn't delete existing data in activity content goal_check_in_commented (test/operately/data/change_037_add_space_to_goal_update_activities_test.exs:60) PASSED Test: migration doesn't delete existing data in activity content goal_check_in and goal_check_in_acknowledgement (test/operately/data/change_037_add_space_to_goal_update_activities_test.exs:23) PASSED OperatelyWeb.Api.Queries.GetSpacesTest Test: security it returns only spaces from the user's company (test/operately_web/api/queries/get_spaces_test.exs:17) PASSED Test: permissions members have access to spaces they are NOT part of (test/operately_web/api/queries/get_spaces_test.exs:67) PASSED Test: permissions members have access to spaces they are part of (test/operately_web/api/queries/get_spaces_test.exs:53) PASSED Test: get_spaces functionality get_spaces (test/operately_web/api/queries/get_spaces_test.exs:87) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_spaces_test.exs:13) PASSED Test: permissions members have access to company space only (test/operately_web/api/queries/get_spaces_test.exs:40) PASSED Operately.WorkMaps.WorkMapTest Test: build_hierarchy/1 with multiple root items handles multiple root items (test/operately/work_maps/work_map_test.exs:178) PASSED Test: build_hierarchy/1 with single item returns single root item unchanged (test/operately/work_maps/work_map_test.exs:22) PASSED Test: build_hierarchy/1 with deep nesting handles deep nesting with multiple levels (test/operately/work_maps/work_map_test.exs:116) PASSED Test: build_hierarchy/1 with mixed goals and projects builds hierarchy with goals and projects (test/operately/work_maps/work_map_test.exs:72) PASSED Test: build_hierarchy/1 with orphaned items handles orphaned items (parent not in list) (test/operately/work_maps/work_map_test.exs:150) PASSED Test: build_hierarchy/1 with empty input returns empty list for empty input (test/operately/work_maps/work_map_test.exs:9) PASSED Test: build_hierarchy/1 with parent-child relationship builds simple parent-child hierarchy (test/operately/work_maps/work_map_test.exs:41) PASSED Operately.Operations.GroupMemberRemovingTest Test: GroupMemberRemoving operation deletes access memberships and bindings (test/operately/operations/group_member_removing_test.exs:36) PASSED Test: GroupMemberRemoving operation removes member from group (test/operately/operations/group_member_removing_test.exs:28) PASSED Test: GroupMemberRemoving operation creates activity (test/operately/operations/group_member_removing_test.exs:50) PASSED OperatelyWeb.Api.Mutations.EditSpaceTest Test: permissions space members with edit access can edit a space (test/operately_web/api/mutations/edit_space_test.exs:65) PASSED Test: permissions company members without view access can't see a space (test/operately_web/api/mutations/edit_space_test.exs:23) PASSED Test: edit_group functionality edits space name (test/operately_web/api/mutations/edit_space_test.exs:77) PASSED Test: permissions company owners can edit a space (test/operately_web/api/mutations/edit_space_test.exs:44) PASSED Test: permissions company members with edit access can edit a space (test/operately_web/api/mutations/edit_space_test.exs:37) PASSED Test: permissions space members without edit access can't edit a space (test/operately_web/api/mutations/edit_space_test.exs:57) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_space_test.exs:10) PASSED Test: permissions company members without edit access can't edit a space (test/operately_web/api/mutations/edit_space_test.exs:30) PASSED Test: edit_group functionality edits space mission (test/operately_web/api/mutations/edit_space_test.exs:88) PASSED OperatelyWeb.Api.Mutations.UpdateProfileTest Test: updating my own profile update the theme (test/operately_web/api/mutations/update_profile_test.exs:90) PASSED Test: security if extra fields are provided, it is an error and won't update the profile (test/operately_web/api/mutations/update_profile_test.exs:11) PASSED Test: updating my own profile inputs that are not provided are not updated (test/operately_web/api/mutations/update_profile_test.exs:100) PASSED Test: updating someone else's profile you can't update the theme of someone else (test/operately_web/api/mutations/update_profile_test.exs:63) PASSED Test: updating someone else's profile when I'm not an admin, it doesn't update the profile (test/operately_web/api/mutations/update_profile_test.exs:48) PASSED Test: updating my own profile it updates the profile (test/operately_web/api/mutations/update_profile_test.exs:75) PASSED Test: security it requires authentication (test/operately_web/api/mutations/update_profile_test.exs:7) PASSED Test: updating someone else's profile when I'm an admin, it updates the profile (test/operately_web/api/mutations/update_profile_test.exs:31) PASSED OperatelyWeb.Api.Queries.GetProjectsTest Test: permissions reviewers have access (test/operately_web/api/queries/get_projects_test.exs:96) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_projects_test.exs:29) PASSED Test: get_projects functionality if include_milestones is true, but there are no milestones it returns empty list and next_milestone = nil (test/operately_web/api/queries/get_projects_test.exs:168) PASSED Test: get_projects functionality calling with no input filters returns all projects from the company (test/operately_web/api/queries/get_projects_test.exs:116) PASSED Test: get_projects functionality include_reviewer (test/operately_web/api/queries/get_projects_test.exs:134) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_projects_test.exs:69) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_projects_test.exs:53) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_projects_test.exs:80) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_projects_test.exs:14) PASSED Test: get_projects functionality include_space (test/operately_web/api/queries/get_projects_test.exs:148) PASSED Test: get_projects functionality scope by space_id (test/operately_web/api/queries/get_projects_test.exs:183) PASSED Test: get_projects functionality include_goal (test/operately_web/api/queries/get_projects_test.exs:159) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_projects_test.exs:43) PASSED Test: get_projects functionality include_champion (test/operately_web/api/queries/get_projects_test.exs:125) PASSED Test: get_projects functionality if include_last_check_in is true, but there is no last check in, it returns nil (test/operately_web/api/queries/get_projects_test.exs:176) PASSED Operately.OwnershipsTest Test: ownerships get_ownership!/1 returns the ownership with given id (test/operately/ownerships_test.exs:14) PASSED Test: ownerships list_ownerships/0 returns all ownerships (test/operately/ownerships_test.exs:9) PASSED OperatelyWeb.Api.Queries.ListSpaceToolsTest Test: permissions Projects - if caller has levels company=no_access, space=edit_access, project=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:108) PASSED Test: permissions Resource Hubs - if caller has levels company=no_access and space=full_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:73) PASSED Test: list_space_tools functionality list resource hubs (test/operately_web/api/queries/list_space_tools_test.exs:200) PASSED Test: permissions Goals - if caller has levels company=no_access, space=comment_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:125) PASSED Test: invalid space it returns 422 invalid id (test/operately_web/api/queries/list_space_tools_test.exs:26) PASSED Test: permissions Messages Boards - if caller has levels company=no_access and space=full_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:90) PASSED Test: permissions Messages Boards - if caller has levels company=edit_access and space=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:90) PASSED Test: permissions Projects - if caller has levels company=no_access, space=comment_access, project=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:108) PASSED Test: permissions Projects - if caller has levels company=no_access, space=no_access, project=no_access, then expect code=forbidden (test/operately_web/api/queries/list_space_tools_test.exs:108) PASSED Test: permissions Projects - if caller has levels company=no_access, space=no_access, project=comment_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:108) PASSED Test: permissions Goals - if caller has levels company=comment_access, space=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:125) PASSED Test: permissions Messages Boards - if caller has levels company=comment_access and space=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:90) PASSED Test: permissions Messages Boards - if caller has levels company=no_access and space=view_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:90) PASSED Test: permissions Messages Boards - if caller has levels company=view_access and space=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:90) PASSED Test: list_space_tools functionality list goals (test/operately_web/api/queries/list_space_tools_test.exs:177) PASSED Test: permissions Resource Hubs - if caller has levels company=view_access and space=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:73) PASSED Test: permissions Goals - if caller has levels company=view_access, space=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:125) PASSED Test: permissions Projects - if caller has levels company=no_access, space=no_access, project=edit_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:108) PASSED Test: permissions Resource Hubs - if caller has levels company=edit_access and space=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:73) PASSED Test: permissions Projects - if caller has levels company=view_access, space=no_access, project=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:108) PASSED Test: permissions Projects - if caller has levels company=no_access, space=view_access, project=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:108) PASSED Test: list_space_tools functionality list messages boards (test/operately_web/api/queries/list_space_tools_test.exs:185) PASSED Test: list_space_tools functionality list projects (test/operately_web/api/queries/list_space_tools_test.exs:169) PASSED Test: permissions Resource Hubs - if caller has levels company=no_access and space=comment_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:73) PASSED Test: permissions Resource Hubs - if caller has levels company=no_access and space=view_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:73) PASSED Test: permissions Goals - if caller has levels company=edit_access, space=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:125) PASSED Test: permissions Projects - if caller has levels company=full_access, space=no_access, project=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:108) PASSED Test: permissions Goals - if caller has levels company=no_access, space=edit_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:125) PASSED Test: permissions Resource Hubs - if caller has levels company=no_access and space=edit_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:73) PASSED Test: security it requires authentication (test/operately_web/api/queries/list_space_tools_test.exs:13) PASSED Test: permissions Goals - if caller has levels company=no_access, space=full_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:125) PASSED Test: permissions Resource Hubs - if caller has levels company=full_access and space=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:73) PASSED Test: permissions Projects - if caller has levels company=comment_access, space=no_access, project=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:108) PASSED Test: permissions Goals - if caller has levels company=no_access, space=view_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:125) PASSED Test: permissions Projects - if caller has levels company=no_access, space=full_access, project=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:108) PASSED Test: permissions Messages Boards - if caller has levels company=no_access and space=edit_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:90) PASSED Test: permissions Messages Boards - if caller has levels company=no_access and space=no_access, then expect code=forbidden (test/operately_web/api/queries/list_space_tools_test.exs:90) PASSED Test: permissions Goals - if caller has levels company=full_access, space=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:125) PASSED Test: permissions Projects - if caller has levels company=edit_access, space=no_access, project=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:108) PASSED Test: permissions Goals - if caller has levels company=no_access, space=no_access, then expect code=forbidden (test/operately_web/api/queries/list_space_tools_test.exs:125) PASSED Test: permissions Resource Hubs - if caller has levels company=no_access and space=no_access, then expect code=forbidden (test/operately_web/api/queries/list_space_tools_test.exs:73) PASSED Test: permissions Projects - if caller has levels company=no_access, space=no_access, project=view_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:108) PASSED Test: permissions Resource Hubs - if caller has levels company=comment_access and space=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:73) PASSED Test: permissions Projects - if caller has levels company=no_access, space=no_access, project=full_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:108) PASSED Test: permissions Messages Boards - if caller has levels company=no_access and space=comment_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:90) PASSED Test: permissions Messages Boards - if caller has levels company=full_access and space=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:90) PASSED Operately.Data.Change017CreateAccessGroupForAnonymousUsersTest Test: creates access groups for anonymous users (test/operately/data/change_017_create_access_group_for_anonymous_users_test.exs:7) PASSED OperatelyWeb.Api.Queries.GetDiscussionTest Test: get_discussion functionality include_space (test/operately_web/api/queries/get_discussion_test.exs:80) PASSED Test: permissions (company space) - company members have access (test/operately_web/api/queries/get_discussion_test.exs:27) PASSED Test: get_discussion functionality include_author (test/operately_web/api/queries/get_discussion_test.exs:92) PASSED Test: get_discussion functionality include_potential_subscribers (test/operately_web/api/queries/get_discussion_test.exs:124) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_discussion_test.exs:50) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_discussion_test.exs:42) PASSED Test: get_discussion functionality include_unread_notifications (test/operately_web/api/queries/get_discussion_test.exs:63) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_discussion_test.exs:14) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_discussion_test.exs:34) PASSED Test: get_discussion functionality include_reactions (test/operately_web/api/queries/get_discussion_test.exs:102) PASSED OperatelyWeb.Api.Queries.GetMeTest Test: get_me functionality it returns the current account's information (test/operately_web/api/queries/get_me_test.exs:15) PASSED Test: get_me functionality when the account has no manager, it returns null even when requested (test/operately_web/api/queries/get_me_test.exs:64) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_me_test.exs:7) PASSED Test: get_me functionality includes manager information when requested (test/operately_web/api/queries/get_me_test.exs:35) PASSED OperatelyWeb.Api.Mutations.CreateResourceHubFileTest Test: permissions if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_file_test.exs:42) PASSED Test: permissions if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/mutations/create_resource_hub_file_test.exs:42) PASSED Test: permissions if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_file_test.exs:42) PASSED Test: functionality creates multiple files (test/operately_web/api/mutations/create_resource_hub_file_test.exs:111) PASSED Test: permissions if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_file_test.exs:42) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_file_test.exs:42) PASSED Test: permissions if caller has levels company=comment_access and space=no_access, then expect code=403 (test/operately_web/api/mutations/create_resource_hub_file_test.exs:42) PASSED Test: security it requires authentication (test/operately_web/api/mutations/create_resource_hub_file_test.exs:17) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=403 (test/operately_web/api/mutations/create_resource_hub_file_test.exs:42) PASSED Test: functionality creates a single file within hub (test/operately_web/api/mutations/create_resource_hub_file_test.exs:88) PASSED Operately.Data.Change020CreateProjectContributorsBindingsTest Test: creates access binding to existing contributors (test/operately/data/change_020_create_project_contributors_bindings_test.exs:39) PASSED Operately.PubSub.PostgresPubSubTest Test: operately endpoint is able to broadcast messages to the channel (test/operately/pub_sub/postgres_pub_sub_test.exs:42)  | FAILED  |   | ** (MatchError) no match of right hand side value: {:error, %DBConnection.OwnershipError{message: "cannot find ownership process for #PID<0.4719.0>.\n\nWhen using ownership, you must manage connections in one\nof the four ways:\n\n* By explicitly checking out a connection\n* By explicitly allowing a spawned process\n* By running the pool in shared mode\n* By using :caller option with allowed process\n\nThe first two options require every new process to explicitly\ncheck a connection out or be allowed by calling checkout or\nallow respectively.\n\nThe third option requires a {:shared, pid} mode to be set.\nIf using shared mode in tests, make sure your tests are not\nasync.\n\nThe fourth option requires [caller: pid] to be used when\nchecking out a connection from the pool. The caller process\nshould already be allowed on a connection.\n\nIf you are reading this error, it means you have not done one\nof the steps above or that the owner process has crashed.\n"}}  | code: OperatelyWeb.Endpoint.broadcast("some:example:channel", "new_message", %{hello: "world"})  | stacktrace:  | (operately 0.1.0) lib/operately/pub_sub/postgres_pub_sub.ex:39: Operately.PubSub.PostgresPubSub.publish/5  | (phoenix_pubsub 2.1.3) lib/phoenix/pubsub.ex:150: Phoenix.PubSub.broadcast/4  | test/operately/pub_sub/postgres_pub_sub_test.exs:44: (test)  |  Test: broadcast/4 sends a message to the Postgres channel (test/operately/pub_sub/postgres_pub_sub_test.exs:30)  | FAILED  |   | ** (MatchError) no match of right hand side value: {:error, %DBConnection.OwnershipError{message: "cannot find ownership process for #PID<0.4722.0>.\n\nWhen using ownership, you must manage connections in one\nof the four ways:\n\n* By explicitly checking out a connection\n* By explicitly allowing a spawned process\n* By running the pool in shared mode\n* By using :caller option with allowed process\n\nThe first two options require every new process to explicitly\ncheck a connection out or be allowed by calling checkout or\nallow respectively.\n\nThe third option requires a {:shared, pid} mode to be set.\nIf using shared mode in tests, make sure your tests are not\nasync.\n\nThe fourth option requires [caller: pid] to be used when\nchecking out a connection from the pool. The caller process\nshould already be allowed on a connection.\n\nIf you are reading this error, it means you have not done one\nof the steps above or that the owner process has crashed.\n"}}  | code: assert :ok = PostgresPubSub.broadcast(@adapter_name, topic, message, nil)  | stacktrace:  | (operately 0.1.0) lib/operately/pub_sub/postgres_pub_sub.ex:39: Operately.PubSub.PostgresPubSub.publish/5  | test/operately/pub_sub/postgres_pub_sub_test.exs:39: (test)  |  OperatelyWeb.Api.Mutations.AssCompanyTrustedEmailDomainTest Test: permissions if caller has levels company=comment_access, then expect code=403 (test/operately_web/api/mutations/add_company_trusted_email_domain_test.exs:23) PASSED Test: permissions if caller has levels company=full_access, then expect code=200 (test/operately_web/api/mutations/add_company_trusted_email_domain_test.exs:23) PASSED Test: security it requires authentication (test/operately_web/api/mutations/add_company_trusted_email_domain_test.exs:8) PASSED Test: permissions if caller has levels company=edit_access, then expect code=403 (test/operately_web/api/mutations/add_company_trusted_email_domain_test.exs:23) PASSED OperatelyWeb.Api.Mutations.RemoveCompanyTrustedEmailDomainTest Test: permissions if caller has levels company=comment_access, then expect code=403 (test/operately_web/api/mutations/remove_company_trusted_email_domain_test.exs:23) PASSED Test: permissions if caller has levels company=full_access, then expect code=200 (test/operately_web/api/mutations/remove_company_trusted_email_domain_test.exs:23) PASSED Test: security it requires authentication (test/operately_web/api/mutations/remove_company_trusted_email_domain_test.exs:8) PASSED Test: permissions if caller has levels company=edit_access, then expect code=403 (test/operately_web/api/mutations/remove_company_trusted_email_domain_test.exs:23) PASSED OperatelyWeb.Api.Mutations.CloseGoalTest Test: permissions space members without full access can't close a goal (test/operately_web/api/mutations/close_goal_test.exs:74) PASSED Test: permissions company members without view access can't see a goal (test/operately_web/api/mutations/close_goal_test.exs:28) PASSED Test: permissions space members with full access can close a goal (test/operately_web/api/mutations/close_goal_test.exs:83) PASSED Test: permissions champions can close a goal (test/operately_web/api/mutations/close_goal_test.exs:105) PASSED Test: permissions company owner can close a goal (test/operately_web/api/mutations/close_goal_test.exs:51) PASSED Test: permissions company members with full access can close a goal (test/operately_web/api/mutations/close_goal_test.exs:44) PASSED Test: permissions space members without view access can't see a goal (test/operately_web/api/mutations/close_goal_test.exs:65) PASSED Test: security it requires authentication (test/operately_web/api/mutations/close_goal_test.exs:14) PASSED Test: permissions reviewers can close a goal (test/operately_web/api/mutations/close_goal_test.exs:121) PASSED Test: close_goal functionality closes goal (test/operately_web/api/mutations/close_goal_test.exs:141) PASSED Test: permissions company members without full access can't close a goal (test/operately_web/api/mutations/close_goal_test.exs:36) PASSED Test: permissions space managers can close a goal (test/operately_web/api/mutations/close_goal_test.exs:91) PASSED Operately.Data.Change015CreateCompaniesAccessGroupTest Test: creates access groups, bindings and memberships (test/operately/data/change_015_create_companies_access_group_test.exs:9) PASSED OperatelyWeb.Api.Mutations.UpdateMilestoneTest Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_milestone_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/update_milestone_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_milestone_test.exs:39) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_milestone_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/update_milestone_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/update_milestone_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/update_milestone_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/mutations/update_milestone_test.exs:11) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_milestone_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/update_milestone_test.exs:39) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/update_milestone_test.exs:39) PASSED Operately.Data.Change051PopulateGoalLastCheckInsTest Test: updates goals with their latest updates (test/operately/data/change_052_populate_goal_update_timeframes_test.exs:17) PASSED Operately.Operations.GroupCreationTest Test: GroupCreation operation adds creator to managers group (test/operately/operations/group_creation_test.exs:108) PASSED Test: GroupCreation operation adds creator as member of group (test/operately/operations/group_creation_test.exs:33) PASSED Test: GroupCreation operation creates activity (test/operately/operations/group_creation_test.exs:116) PASSED Test: GroupCreation operation creates default resource hub (test/operately/operations/group_creation_test.exs:131) PASSED Test: GroupCreation operation can create no_access binding to company members (test/operately/operations/group_creation_test.exs:70) PASSED Test: GroupCreation operation creates full_access binding with creator (test/operately/operations/group_creation_test.exs:61) PASSED Test: GroupCreation operation creates only view_access for anonymours users (test/operately/operations/group_creation_test.exs:86) PASSED Test: GroupCreation operation creates group (test/operately/operations/group_creation_test.exs:27) PASSED Test: GroupCreation operation creates access context, groups and bindings (test/operately/operations/group_creation_test.exs:42) PASSED Test: GroupCreation operation creates default messages group (test/operately/operations/group_creation_test.exs:125) PASSED OperatelyWeb.Api.Mutations.AddProjectContributorTest Test: permissions space members without full access can't add contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:75) PASSED Test: permissions company members without view access can't see a project (test/operately_web/api/mutations/add_project_contributor_test.exs:27) PASSED Test: permissions reviewers can add contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:147) PASSED Test: permissions space members with full access can add contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:84) PASSED Test: permissions contributors without full access can't add contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:107) PASSED Test: permissions company admins can add contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:51) PASSED Test: permissions company members with full access can add contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:43) PASSED Test: permissions space members without view access can't see a project (test/operately_web/api/mutations/add_project_contributor_test.exs:66) PASSED Test: security it requires authentication (test/operately_web/api/mutations/add_project_contributor_test.exs:13) PASSED Test: permissions contributors with full access can add contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:119) PASSED Test: permissions champions can add contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:131) PASSED Test: permissions company members without full access can't add contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:35) PASSED Test: permissions space managers can add contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:93) PASSED Test: add_project_contributor functionality adds contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:167) PASSED OperatelyWeb.Api.Mutations.MoveProjectToSpaceTest Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/move_project_to_space_test.exs:52) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/move_project_to_space_test.exs:52) PASSED Test: permissions if caller has levels company=comment_access, space=no_access on the new space, then expect code=200 (test/operately_web/api/mutations/move_project_to_space_test.exs:72) PASSED Test: move_project_to_space functionality it moves a project to a space (test/operately_web/api/mutations/move_project_to_space_test.exs:102) PASSED Test: permissions if caller has levels company=full_access, space=no_access on the new space, then expect code=200 (test/operately_web/api/mutations/move_project_to_space_test.exs:72) PASSED Test: permissions if caller has levels company=no_access, space=comment_access on the new space, then expect code=200 (test/operately_web/api/mutations/move_project_to_space_test.exs:72) PASSED Test: permissions if caller has levels company=edit_access, space=no_access on the new space, then expect code=200 (test/operately_web/api/mutations/move_project_to_space_test.exs:72) PASSED Test: permissions if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/move_project_to_space_test.exs:52) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/move_project_to_space_test.exs:52) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/move_project_to_space_test.exs:52) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/move_project_to_space_test.exs:52) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/move_project_to_space_test.exs:52) PASSED Test: security it requires authentication (test/operately_web/api/mutations/move_project_to_space_test.exs:11) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/move_project_to_space_test.exs:52) PASSED Test: permissions if caller has levels company=no_access, space=full_access on the new space, then expect code=200 (test/operately_web/api/mutations/move_project_to_space_test.exs:72) PASSED Test: permissions if caller has levels company=no_access, space=no_access on the new space, then expect code=404 (test/operately_web/api/mutations/move_project_to_space_test.exs:72) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/move_project_to_space_test.exs:52) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/move_project_to_space_test.exs:52) PASSED Test: permissions if caller has levels company=no_access, space=edit_access on the new space, then expect code=200 (test/operately_web/api/mutations/move_project_to_space_test.exs:72) PASSED OperatelyWeb.Api.Queries.GetAssignmentsCountTest Test: get_assignments_count counts due goal updates (test/operately_web/api/queries/get_assignments_count_test.exs:106) PASSED Test: get_assignments_count counts due projects (test/operately_web/api/queries/get_assignments_count_test.exs:20) PASSED Test: get_assignments_count ignores closed goals (test/operately_web/api/queries/get_assignments_count_test.exs:69) PASSED Test: get_assignments_count counts due goals (test/operately_web/api/queries/get_assignments_count_test.exs:50) PASSED Test: get_assignments_count counts due project check-ins (test/operately_web/api/queries/get_assignments_count_test.exs:80) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_assignments_count_test.exs:12) PASSED Test: get_assignments_count ignores closed projects (test/operately_web/api/queries/get_assignments_count_test.exs:39) PASSED Operately.Operations.CompanyAddingTest Test: CompanyAdding operation creates company company space member (test/operately/operations/company_adding_test.exs:108) PASSED Test: CompanyAdding operation creates company with owner (test/operately/operations/company_adding_test.exs:39) PASSED Test: CompanyAdding operation creates access groups, bindings and group_memberships for admins and members (test/operately/operations/company_adding_test.exs:75) PASSED Test: CompanyAdding operation creates admin user's access group and membership (test/operately/operations/company_adding_test.exs:66) PASSED Test: CompanyAdding operation creates company and group access contexts (test/operately/operations/company_adding_test.exs:101) PASSED Test: CompanyAdding operation creates company for an existing account (test/operately/operations/company_adding_test.exs:23) PASSED Test: CompanyAdding operation creates company group (test/operately/operations/company_adding_test.exs:59) PASSED OperatelyWeb.Api.Mutations.CreateResourceHubTest Test: permissions if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/mutations/create_resource_hub_test.exs:40) PASSED Test: permissions if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_test.exs:40) PASSED Test: permissions if caller has levels company=comment_access and space=no_access, then expect code=403 (test/operately_web/api/mutations/create_resource_hub_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/mutations/create_resource_hub_test.exs:15) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=403 (test/operately_web/api/mutations/create_resource_hub_test.exs:40) PASSED Test: functionality creates resource hub (test/operately_web/api/mutations/create_resource_hub_test.exs:83) PASSED Operately.Operations.DiscussionPostingTest Test: Creating message sends notifications to selected people (test/operately/operations/discussion_posting_test.exs:48) PASSED Test: Creating message sends notifications to everyone (test/operately/operations/discussion_posting_test.exs:19) PASSED Test: Person without permissions is not notified (test/operately/operations/discussion_posting_test.exs:77) PASSED OperatelyWeb.Api.HelpersTest Test: id_with_comments/2 doesn't create multiple dashes (test/operately_web/api/helpers_test.exs:14) PASSED Test: id_with_comments/2 returns the id with comments (test/operately_web/api/helpers_test.exs:10) PASSED Test: id_with_comments/2 takes at most 25 characters (test/operately_web/api/helpers_test.exs:18) PASSED Operately.Goals.TargetTest Test: format_value/1 formats float values with two decimal places (test/operately/goals/target_test.exs:12) PASSED Test: format_value/1 handles negative values (test/operately/goals/target_test.exs:27) PASSED Test: format_value/1 handles zero values (test/operately/goals/target_test.exs:22) PASSED Test: format_value/1 formats float values without decimal places as integers (test/operately/goals/target_test.exs:32) PASSED Test: format_value/1 formats integer values with units (test/operately/goals/target_test.exs:7) PASSED Test: format_value/1 formats percentage values correctly (test/operately/goals/target_test.exs:17) PASSED Operately.Operations.PasswordFirstTimeChangingTest Test: PasswordFirstTimeChanging operation sets has_open_invitation to false (test/operately/operations/password_first_time_changing_test.exs:35) PASSED Test: PasswordFirstTimeChanging operation changes password (test/operately/operations/password_first_time_changing_test.exs:25) PASSED Test: PasswordFirstTimeChanging operation creates activity (test/operately/operations/password_first_time_changing_test.exs:44) PASSED OperatelyWeb.Api.Mutations.CreateGoalDiscussionTest Test: permissions space members without edit access can't create a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:69) PASSED Test: permissions company members without view access can't see a goal (test/operately_web/api/mutations/create_goal_discussion_test.exs:27) PASSED Test: create_goal_discussion functionality if goal does not exist, it returns an error (test/operately_web/api/mutations/create_goal_discussion_test.exs:140) PASSED Test: permissions space members with edit access can create a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:77) PASSED Test: permissions champions can create a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:98) PASSED Test: permissions company owners can create a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:48) PASSED Test: permissions company members with edit access can create a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:41) PASSED Test: permissions space members without view access can't see a goal (test/operately_web/api/mutations/create_goal_discussion_test.exs:61) PASSED Test: security it requires authentication (test/operately_web/api/mutations/create_goal_discussion_test.exs:13) PASSED Test: permissions reviewers can create a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:113) PASSED Test: create_goal_discussion functionality it creates a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:132) PASSED Test: permissions company members without edit access can't create a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:34) PASSED Test: permissions space managers can create a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:85) PASSED Operately.RichContentTest Test: .lookup_mentioned_people/1 returns mentioned people with valid IDs (test/operately/rich_content_test.exs:184) PASSED Test: .find_mentioned_ids/1 returns mentioned IDs (test/operately/rich_content_test.exs:176) PASSED OperatelyWeb.Api.Mutations.EditSpaceMembersPermissionsTest Test: permissions space members with full access can edit members permissions (test/operately_web/api/mutations/edit_space_members_permissions_test.exs:94) PASSED Test: permissions company members without view access can't see space (test/operately_web/api/mutations/edit_space_members_permissions_test.exs:24) PASSED Test: edit_group functionality edits members access level (test/operately_web/api/mutations/edit_space_members_permissions_test.exs:110) PASSED Test: permissions company owner can edit members permissions (test/operately_web/api/mutations/edit_space_members_permissions_test.exs:59) PASSED Test: permissions company members with full access can edit members permissions (test/operately_web/api/mutations/edit_space_members_permissions_test.exs:48) PASSED Test: permissions space members without full access can't edit members permissions (test/operately_web/api/mutations/edit_space_members_permissions_test.exs:81) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_space_members_permissions_test.exs:11) PASSED Test: permissions company members without full access can't edit members permissions (test/operately_web/api/mutations/edit_space_members_permissions_test.exs:36) PASSED OperatelyWeb.Api.Mutations.EditParentFolderInResourceHubTest Test: permissions if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/edit_parent_folder_in_resource_hub_test.exs:39) PASSED Test: permissions if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/mutations/edit_parent_folder_in_resource_hub_test.exs:39) PASSED Test: permissions if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/edit_parent_folder_in_resource_hub_test.exs:39) PASSED Test: functionality change file parent folder (test/operately_web/api/mutations/edit_parent_folder_in_resource_hub_test.exs:95) PASSED Test: permissions if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/edit_parent_folder_in_resource_hub_test.exs:39) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/mutations/edit_parent_folder_in_resource_hub_test.exs:39) PASSED Test: permissions if caller has levels company=comment_access and space=no_access, then expect code=403 (test/operately_web/api/mutations/edit_parent_folder_in_resource_hub_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_parent_folder_in_resource_hub_test.exs:14) PASSED Test: functionality change folder parent folder (test/operately_web/api/mutations/edit_parent_folder_in_resource_hub_test.exs:111) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=403 (test/operately_web/api/mutations/edit_parent_folder_in_resource_hub_test.exs:39) PASSED Test: functionality change document parent folder (test/operately_web/api/mutations/edit_parent_folder_in_resource_hub_test.exs:79) PASSED OperatelyWeb.Api.Queries.GetResourceHubLinkTest Test: permissions if caller has levels company=view_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_link_test.exs:39) PASSED Test: permissions if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/queries/get_resource_hub_link_test.exs:39) PASSED Test: get_resource_hub_link functionality include_permissions (test/operately_web/api/queries/get_resource_hub_link_test.exs:140) PASSED Test: get_resource_hub_link functionality include_potential_subscribers (test/operately_web/api/queries/get_resource_hub_link_test.exs:162) PASSED Test: get_resource_hub_link functionality include_resource_hub (test/operately_web/api/queries/get_resource_hub_link_test.exs:89) PASSED Test: get_resource_hub_link functionality include_subscriptions_list (test/operately_web/api/queries/get_resource_hub_link_test.exs:151) PASSED Test: permissions if caller has levels company=comment_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_link_test.exs:39) PASSED Test: permissions if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_link_test.exs:39) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_link_test.exs:39) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_link_test.exs:39) PASSED Test: permissions if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_link_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_resource_hub_link_test.exs:10) PASSED Test: get_resource_hub_link functionality get link (test/operately_web/api/queries/get_resource_hub_link_test.exs:70) PASSED Test: get_resource_hub_link functionality include_reactions (test/operately_web/api/queries/get_resource_hub_link_test.exs:115) PASSED Test: get_resource_hub_link functionality include_author (test/operately_web/api/queries/get_resource_hub_link_test.exs:76) PASSED Test: permissions if caller has levels company=no_access and space=view_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_link_test.exs:39) PASSED Test: permissions if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_link_test.exs:39) PASSED Test: get_resource_hub_link functionality include_parent_folder (test/operately_web/api/queries/get_resource_hub_link_test.exs:102) PASSED TurboConnect.TypesTest Test: definining objects and their fields (test/turbo_connect/types_test.exs:34) PASSED OperatelyWeb.Api.Queries.GetBindedPeopleTest Test: loading binded people for a project (test/operately_web/api/queries/get_binded_people_test.exs:24) PASSED Test: no access to not logged in users (test/operately_web/api/queries/get_binded_people_test.exs:17) PASSED Test: when user is not binded to the project it should return not found (test/operately_web/api/queries/get_binded_people_test.exs:40) PASSED OperatelyWeb.Api.Mutations.ArchiveGoalTest Test: permissions space members without full access can't archive a goal (test/operately_web/api/mutations/archive_goal_test.exs:74) PASSED Test: permissions company members without view access can't see a goal (test/operately_web/api/mutations/archive_goal_test.exs:27) PASSED Test: permissions space members with full access can archive a goal (test/operately_web/api/mutations/archive_goal_test.exs:83) PASSED Test: permissions champions can archive a goal (test/operately_web/api/mutations/archive_goal_test.exs:105) PASSED Test: permissions company admins can archive a goal (test/operately_web/api/mutations/archive_goal_test.exs:50) PASSED Test: permissions company members with full access can archive a goal (test/operately_web/api/mutations/archive_goal_test.exs:43) PASSED Test: permissions space members without view access can't see a goal (test/operately_web/api/mutations/archive_goal_test.exs:65) PASSED Test: security it requires authentication (test/operately_web/api/mutations/archive_goal_test.exs:13) PASSED Test: permissions reviewers can archive a goal (test/operately_web/api/mutations/archive_goal_test.exs:121) PASSED Test: archive_goal functionality archives goal (test/operately_web/api/mutations/archive_goal_test.exs:141) PASSED Test: permissions company members without full access can't archive a goal (test/operately_web/api/mutations/archive_goal_test.exs:35) PASSED Test: permissions space managers can archive a goal (test/operately_web/api/mutations/archive_goal_test.exs:91) PASSED Operately.Operations.ProjectContributorEditedTest Test: updating access level (test/operately/operations/project_contributor_edited_test.exs:31) PASSED Test: choosing a new champion that is not already a contributor (test/operately/operations/project_contributor_edited_test.exs:60) PASSED Test: converting a reviewer to a contributor (test/operately/operations/project_contributor_edited_test.exs:49) PASSED Test: choosing a new champion from the contributors (test/operately/operations/project_contributor_edited_test.exs:78) PASSED Test: updating responsibility (test/operately/operations/project_contributor_edited_test.exs:25) PASSED Test: converting a champion to a contributor (test/operately/operations/project_contributor_edited_test.exs:37) PASSED Operately.Data.Change040AddStatusValueForExistingGoalUpdatesTest Test: migration ignores updates with status (test/operately/data/change_040_add_status_value_for_existing_goal_updates_test.exs:32) PASSED Test: migration adds 'on_track' value to updates without status (test/operately/data/change_040_add_status_value_for_existing_goal_updates_test.exs:16) PASSED OperatelyWeb.Api.Mutations.RemoveKeyResourceTest Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/remove_key_resource_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/remove_key_resource_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/remove_key_resource_test.exs:39) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/remove_key_resource_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/remove_key_resource_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/remove_key_resource_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/remove_key_resource_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/mutations/remove_key_resource_test.exs:11) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/remove_key_resource_test.exs:39) PASSED Test: remove_key_resource functionality remove key resource (test/operately_web/api/mutations/remove_key_resource_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/remove_key_resource_test.exs:39) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/remove_key_resource_test.exs:39) PASSED OperatelyWeb.Api.Mutations.CreateCommentTest Test: permissions resource hub document - if caller has levels company=no_access, space=no_access, then expect code=404 (test/operately_web/api/mutations/create_comment_test.exs:124) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=view_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:80) PASSED Test: permissions resource hub link - if caller has levels company=no_access, space=no_access, then expect code=404 (test/operately_web/api/mutations/create_comment_test.exs:168) PASSED Test: permissions resource hub link - if caller has levels company=no_access, space=comment_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:168) PASSED Test: permissions if caller has levels company=view_access, space=no_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:212) PASSED Test: permissions resource hub document - if caller has levels company=full_access, space=no_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:124) PASSED Test: permissions if caller has levels company=view_access, space=no_access on the space, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:234) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:212) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/create_comment_test.exs:80) PASSED Test: permissions project retrospective - if caller has levels company=no_access, space=no_access, project=view_access on the project, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:102) PASSED Test: permissions resource hub link - if caller has levels company=full_access, space=no_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:168) PASSED Test: permissions project retrospective - if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:102) PASSED Test: permissions if caller has levels company=full_access, space=no_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:212) PASSED Test: permissions if caller has levels company=full_access, space=no_access, goal=no_access on the comment thread, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:190) PASSED Test: permissions project retrospective - if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:102) PASSED Test: permissions project retrospective - if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:102) PASSED Test: permissions project retrospective - if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:102) PASSED Test: permissions if caller has levels company=comment_access, space=no_access on the space, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:234) PASSED Test: permissions if caller has levels company=no_access, space=full_access, goal=no_access on the comment thread, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:190) PASSED Test: permissions resource hub file - if caller has levels company=no_access, space=edit_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:146) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=no_access on the goal, then expect code=404 (test/operately_web/api/mutations/create_comment_test.exs:212) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, goal=no_access on the comment thread, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:190) PASSED Test: permissions if caller has levels company=no_access, space=edit_access, goal=no_access on the comment thread, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:190) PASSED Test: permissions if caller has levels company=no_access, space=no_access on the space, then expect code=404 (test/operately_web/api/mutations/create_comment_test.exs:234) PASSED Test: permissions project retrospective - if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:102) PASSED Test: permissions project check-in - if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:80) PASSED Test: permissions if caller has levels company=no_access, space=full_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:212) PASSED Test: permissions if caller has levels company=view_access, space=no_access, goal=no_access on the comment thread, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:190) PASSED Test: create_comment functionality creates comment (test/operately_web/api/mutations/create_comment_test.exs:265) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=champion on the goal, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:212) PASSED Test: permissions project retrospective - if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:102) PASSED Test: permissions resource hub file - if caller has levels company=edit_access, space=no_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:146) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:80) PASSED Test: permissions resource hub link - if caller has levels company=comment_access, space=no_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:168) PASSED Test: permissions resource hub link - if caller has levels company=no_access, space=full_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:168) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, goal=no_access on the comment thread, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:190) PASSED Test: permissions resource hub file - if caller has levels company=no_access, space=comment_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:146) PASSED Test: permissions project retrospective - if caller has levels company=view_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:102) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:80) PASSED Test: permissions resource hub document - if caller has levels company=no_access, space=comment_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:124) PASSED Test: permissions project retrospective - if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:102) PASSED Test: permissions resource hub file - if caller has levels company=full_access, space=no_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:146) PASSED Test: permissions resource hub file - if caller has levels company=comment_access, space=no_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:146) PASSED Test: create_comment functionality doesn't create repeated subscriptions (test/operately_web/api/mutations/create_comment_test.exs:308) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, goal=no_access on the comment thread, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:190) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:80) PASSED Test: permissions if caller has levels company=no_access, space=view_access on the space, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:234) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:80) PASSED Test: permissions resource hub file - if caller has levels company=no_access, space=full_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:146) PASSED Test: permissions if caller has levels company=no_access, space=view_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:212) PASSED Test: permissions resource hub document - if caller has levels company=view_access, space=no_access, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:124) PASSED Test: permissions resource hub file - if caller has levels company=no_access, space=no_access, then expect code=404 (test/operately_web/api/mutations/create_comment_test.exs:146) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=reviewer on the comment thread, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:190) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:80) PASSED Test: security it requires authentication (test/operately_web/api/mutations/create_comment_test.exs:20) PASSED Test: permissions resource hub file - if caller has levels company=no_access, space=view_access, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:146) PASSED Test: permissions project check-in - if caller has levels company=view_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:80) PASSED Test: permissions if caller has levels company=no_access, space=comment_access on the space, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:234) PASSED Test: permissions resource hub link - if caller has levels company=no_access, space=edit_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:168) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=champion on the comment thread, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:190) PASSED Test: permissions resource hub document - if caller has levels company=no_access, space=edit_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:124) PASSED Test: permissions resource hub document - if caller has levels company=edit_access, space=no_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:124) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:212) PASSED Test: permissions resource hub document - if caller has levels company=no_access, space=view_access, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:124) PASSED Test: permissions project retrospective - if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/create_comment_test.exs:102) PASSED Test: create_comment functionality updates subscriptions list (test/operately_web/api/mutations/create_comment_test.exs:280) PASSED Test: permissions if caller has levels company=edit_access, space=no_access on the space, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:234) PASSED Test: permissions resource hub link - if caller has levels company=view_access, space=no_access, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:168) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=no_access on the comment thread, then expect code=404 (test/operately_web/api/mutations/create_comment_test.exs:190) PASSED Test: permissions resource hub link - if caller has levels company=edit_access, space=no_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:168) PASSED Test: permissions project check-in - if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:80) PASSED Test: permissions if caller has levels company=no_access, space=edit_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:212) PASSED Test: permissions resource hub link - if caller has levels company=no_access, space=view_access, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:168) PASSED Test: permissions resource hub file - if caller has levels company=view_access, space=no_access, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:146) PASSED Test: permissions if caller has levels company=no_access, space=full_access on the space, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:234) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=reviewer on the goal, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:212) PASSED Test: permissions resource hub document - if caller has levels company=no_access, space=full_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:124) PASSED Test: permissions resource hub document - if caller has levels company=comment_access, space=no_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:124) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=no_access, project=view_access on the project, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:80) PASSED Test: permissions if caller has levels company=no_access, space=edit_access on the space, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:234) PASSED Test: permissions if caller has levels company=full_access, space=no_access on the space, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:234) PASSED Test: permissions project retrospective - if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:102) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:80) PASSED Test: permissions project retrospective - if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:102) PASSED Test: permissions project check-in - if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:80) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:212) PASSED Test: permissions project retrospective - if caller has levels company=no_access, space=view_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:102) PASSED Test: permissions if caller has levels company=no_access, space=view_access, goal=no_access on the comment thread, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:190) PASSED Operately.AccessGroupMembershipsTest Test: access_group_memberships create_group_membership/1 with valid data creates a group_membership (test/operately/access/group_memberships_test.exs:31) PASSED Test: access_group_memberships delete_group_membership/1 deletes the group_membership (test/operately/access/group_memberships_test.exs:56) PASSED Test: access_group_memberships update_group_membership/2 with valid data updates the group_membership (test/operately/access/group_memberships_test.exs:44) PASSED Test: access_group_memberships change_group_membership/1 returns a group_membership changeset (test/operately/access/group_memberships_test.exs:66) PASSED Test: access_group_memberships get_group_membership!/1 returns the group_membership with given id (test/operately/access/group_memberships_test.exs:22) PASSED Test: access_group_memberships create_group_membership/1 with invalid data returns error changeset (test/operately/access/group_memberships_test.exs:40) PASSED Operately.Operations.ResourceHubCreatingTest Test: ResourceHubCreating operation creates context (test/operately/operations/resource_hub_creating_test.exs:34) PASSED Test: ResourceHubCreating operation creates activity (test/operately/operations/resource_hub_creating_test.exs:65) PASSED Test: ResourceHubCreating operation creates bindings to space (test/operately/operations/resource_hub_creating_test.exs:54) PASSED Test: ResourceHubCreating operation creates resource hub (test/operately/operations/resource_hub_creating_test.exs:23) PASSED Test: ResourceHubCreating operation creates bindings to company (test/operately/operations/resource_hub_creating_test.exs:40) PASSED OperatelyWeb.Api.Queries.GetAssignmentsTest Test: get_due_assignments get_due_goal_updates (test/operately_web/api/queries/get_assignments_test.exs:149) PASSED Test: get_due_assignments get_due_projects (test/operately_web/api/queries/get_assignments_test.exs:22) PASSED Test: get_due_assignments exclude soft-deleted goal updates (test/operately_web/api/queries/get_assignments_test.exs:286) PASSED Test: get_due_assignments returns project check-in creator, not current champion (test/operately_web/api/queries/get_assignments_test.exs:185) PASSED Test: get_due_assignments exclude soft-deleted projects (test/operately_web/api/queries/get_assignments_test.exs:238) PASSED Test: get_due_assignments get_due_goals ignores closed goals (test/operately_web/api/queries/get_assignments_test.exs:94) PASSED Test: get_due_assignments get_due_goals (test/operately_web/api/queries/get_assignments_test.exs:67) PASSED Test: get_due_assignments get_due_project_check_ins (test/operately_web/api/queries/get_assignments_test.exs:112) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_assignments_test.exs:14) PASSED Test: get_due_assignments exclude soft-deleted goals (test/operately_web/api/queries/get_assignments_test.exs:251) PASSED Test: get_due_assignments exclude soft-deleted project check-ins (test/operately_web/api/queries/get_assignments_test.exs:264) PASSED Test: get_due_assignments get_due_projects ignores closed projects (test/operately_web/api/queries/get_assignments_test.exs:49) PASSED Test: get_due_assignments returns goal update creator, not current champion (test/operately_web/api/queries/get_assignments_test.exs:210) PASSED Operately.AccessActivityContextAssignerTest Test: assigns access_context to goal activities goal_timeframe_editing action (test/operately/access/activity_context_assigner_test.exs:350) PASSED Test: assigns access_context to space activities discussion_posting action (test/operately/access/activity_context_assigner_test.exs:108)10:30:47.101 [error] ** (KeyError) key :space not found in: nil If you are using the dot syntax, such as map.field, make sure the left-hand side of the dot is a map (operately 0.1.0) lib/operately/messages/notifications.ex:20: Operately.Messages.Notifications.get_subscribers/2 (operately 0.1.0) lib/operately/activities/notifications/discussion_posting.ex:5: Operately.Activities.Notifications.DiscussionPosting.dispatch/1 (operately 0.1.0) lib/operately/activities/notification_dispatcher.ex:11: Operately.Activities.NotificationDispatcher.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:129: Oban.Queue.Executor.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:74: Oban.Queue.Executor.call/1 (oban 2.15.2) lib/oban/engines/inline.ex:97: Oban.Engines.Inline.execute_job/2 (oban 2.15.2) lib/oban/engines/inline.ex:37: Oban.Engines.Inline.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:181: anonymous fn/4 in Oban.Engine.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:314: anonymous fn/3 in Oban.Engine.with_span/4 (telemetry 1.3.0) /home/dev/app/app/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (ecto 3.12.3) lib/ecto/multi.ex:897: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1756: DBConnection.run_transaction/4 (ecto 3.12.3) lib/ecto/repo/transaction.ex:18: Ecto.Repo.Transaction.transaction/4 test/operately/access/activity_context_assigner_test.exs:689: Operately.AccessActivityContextAssignerTest.create_activity/1 test/operately/access/activity_context_assigner_test.exs:115: Operately.AccessActivityContextAssignerTest."test assigns access_context to space activities discussion_posting action"/1 (ex_unit 1.17.2) lib/ex_unit/runner.ex:485: ExUnit.Runner.exec_test/2 (stdlib 6.0.1) timer.erl:590: :timer.tc/2 PASSED Test: assigns access_context to task activities task_adding action (test/operately/access/activity_context_assigner_test.exs:578) PASSED Test: assigns access_context to task activities task_status_change action (test/operately/access/activity_context_assigner_test.exs:600) PASSED Test: assigns access_context to project activities project_contributor_addition action (test/operately/access/activity_context_assigner_test.exs:457) PASSED Test: assigns access_context to company activities password_first_time_changed action (test/operately/access/activity_context_assigner_test.exs:51) PASSED Test: assigns access_context to space activities group_edited action (test/operately/access/activity_context_assigner_test.exs:207) PASSED Test: assigns access_context to goal activities goal_check_in_acknowledgement action (test/operately/access/activity_context_assigner_test.exs:242) PASSED Test: assigns access_context to goal activities goal_reopening action (test/operately/access/activity_context_assigner_test.exs:335) PASSED Test: assigns access_context to goal activities goal_check_in_edit action (test/operately/access/activity_context_assigner_test.exs:264) PASSED Test: assigns access_context to goal activities goal_created action (test/operately/access/activity_context_assigner_test.exs:286) PASSED Test: assigns access_context to project activities project_milestone_commented action (test/operately/access/activity_context_assigner_test.exs:503) PASSED Test: assigns access_context to goal activities goal_check_in action (test/operately/access/activity_context_assigner_test.exs:231)10:30:47.340 [error] ** (KeyError) key :goal not found in: nil If you are using the dot syntax, such as map.field, make sure the left-hand side of the dot is a map (operately 0.1.0) lib/operately/goals/notifications.ex:21: Operately.Goals.Notifications.get_goal_update_subscribers/2 (operately 0.1.0) lib/operately/activities/notifications/goal_check_in.ex:7: Operately.Activities.Notifications.GoalCheckIn.dispatch/1 (operately 0.1.0) lib/operately/activities/notification_dispatcher.ex:11: Operately.Activities.NotificationDispatcher.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:129: Oban.Queue.Executor.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:74: Oban.Queue.Executor.call/1 (oban 2.15.2) lib/oban/engines/inline.ex:97: Oban.Engines.Inline.execute_job/2 (oban 2.15.2) lib/oban/engines/inline.ex:37: Oban.Engines.Inline.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:181: anonymous fn/4 in Oban.Engine.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:314: anonymous fn/3 in Oban.Engine.with_span/4 (telemetry 1.3.0) /home/dev/app/app/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (ecto 3.12.3) lib/ecto/multi.ex:897: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1756: DBConnection.run_transaction/4 (ecto 3.12.3) lib/ecto/repo/transaction.ex:18: Ecto.Repo.Transaction.transaction/4 test/operately/access/activity_context_assigner_test.exs:689: Operately.AccessActivityContextAssignerTest.create_activity/1 test/operately/access/activity_context_assigner_test.exs:238: Operately.AccessActivityContextAssignerTest."test assigns access_context to goal activities goal_check_in action"/1 (ex_unit 1.17.2) lib/ex_unit/runner.ex:485: ExUnit.Runner.exec_test/2 (stdlib 6.0.1) timer.erl:590: :timer.tc/2 PASSED Test: assigns access_context to space activities task_priority_change action (test/operately/access/activity_context_assigner_test.exs:174) PASSED Test: assigns access_context to goal activities goal_reparent action (test/operately/access/activity_context_assigner_test.exs:220) PASSED Test: assigns access_context to project activities project_resuming action (test/operately/access/activity_context_assigner_test.exs:547) PASSED Test: assigns access_context to space activities discussion_editing action (test/operately/access/activity_context_assigner_test.exs:119) PASSED Test: assigns access_context to comment_added activity entity_type is :comment_thread (test/operately/access/activity_context_assigner_test.exs:666) PASSED Test: assigns access_context to comment_added activity entity_type is :project_check_in (test/operately/access/activity_context_assigner_test.exs:640) PASSED Test: assigns access_context to project activities project_goal_disconnection action (test/operately/access/activity_context_assigner_test.exs:492) PASSED Test: assigns access_context to goal activities goal_discussion_creation action (test/operately/access/activity_context_assigner_test.exs:300) PASSED Test: assigns access_context to space activities task_assignee_assignment action (test/operately/access/activity_context_assigner_test.exs:141) PASSED Test: assigns access_context to project activities project_archived action (test/operately/access/activity_context_assigner_test.exs:385) PASSED Test: assigns access_context to goal activities goal_editing action (test/operately/access/activity_context_assigner_test.exs:324) PASSED Test: assigns access_context to project activities project_timeline_edited action (test/operately/access/activity_context_assigner_test.exs:558) PASSED Test: assigns access_context to project activities project_renamed action (test/operately/access/activity_context_assigner_test.exs:536) PASSED Test: assigns access_context to space activities space_joining action (test/operately/access/activity_context_assigner_test.exs:86) PASSED Test: assigns access_context to company activities company_member_added action (test/operately/access/activity_context_assigner_test.exs:73) PASSED Test: assigns access_context to project activities project_moved action (test/operately/access/activity_context_assigner_test.exs:514) PASSED Test: assigns access_context to project activities project_check_in_edit action (test/operately/access/activity_context_assigner_test.exs:418) PASSED Test: assigns access_context to project activities project_discussion_submitted action (test/operately/access/activity_context_assigner_test.exs:470) PASSED Test: assigns access_context to space activities goal_archived action (test/operately/access/activity_context_assigner_test.exs:97) PASSED Test: assigns access_context to company activities company_member_removed action (test/operately/access/activity_context_assigner_test.exs:40) PASSED Test: assigns access_context to project activities project_goal_connection action (test/operately/access/activity_context_assigner_test.exs:481) PASSED Test: assigns access_context to space activities task_description_change action (test/operately/access/activity_context_assigner_test.exs:152) PASSED Test: assigns access_context to task activities task_update action (test/operately/access/activity_context_assigner_test.exs:611) PASSED Test: assigns access_context to project activities project_check_in_acknowledged action (test/operately/access/activity_context_assigner_test.exs:396) PASSED Test: assigns access_context to project activities project_closed action (test/operately/access/activity_context_assigner_test.exs:440) PASSED Test: assigns access_context to project activities project_created action (test/operately/access/activity_context_assigner_test.exs:374) PASSED Test: assigns access_context to space activities task_size_change action (test/operately/access/activity_context_assigner_test.exs:196) PASSED Test: assigns access_context to comment_added activity entity_type is :update (test/operately/access/activity_context_assigner_test.exs:653) PASSED Test: assigns access_context to space activities task_name_editing action (test/operately/access/activity_context_assigner_test.exs:163) PASSED Test: assigns access_context to task activities task_closing action (test/operately/access/activity_context_assigner_test.exs:589) PASSED Test: assigns access_context to project activities project_pausing action (test/operately/access/activity_context_assigner_test.exs:525) PASSED Test: assigns access_context to project activities project_check_in_commented action (test/operately/access/activity_context_assigner_test.exs:407) PASSED Test: assigns access_context to project activities project_check_in_submitted action (test/operately/access/activity_context_assigner_test.exs:429) PASSED Test: assigns access_context to company activities company_invitation_token_created action (test/operately/access/activity_context_assigner_test.exs:62) PASSED Test: assigns access_context to goal activities goal_closing action (test/operately/access/activity_context_assigner_test.exs:275) PASSED Test: assigns access_context to space activities discussion_comment_submitted action (test/operately/access/activity_context_assigner_test.exs:130)10:30:48.158 [error] ** (KeyError) key :space not found in: nil If you are using the dot syntax, such as map.field, make sure the left-hand side of the dot is a map (operately 0.1.0) lib/operately/messages/notifications.ex:20: Operately.Messages.Notifications.get_subscribers/2 (operately 0.1.0) lib/operately/activities/notifications/discussion_comment_submitted.ex:5: Operately.Activities.Notifications.DiscussionCommentSubmitted.dispatch/1 (operately 0.1.0) lib/operately/activities/notification_dispatcher.ex:11: Operately.Activities.NotificationDispatcher.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:129: Oban.Queue.Executor.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:74: Oban.Queue.Executor.call/1 (oban 2.15.2) lib/oban/engines/inline.ex:97: Oban.Engines.Inline.execute_job/2 (oban 2.15.2) lib/oban/engines/inline.ex:37: Oban.Engines.Inline.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:181: anonymous fn/4 in Oban.Engine.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:314: anonymous fn/3 in Oban.Engine.with_span/4 (telemetry 1.3.0) /home/dev/app/app/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (ecto 3.12.3) lib/ecto/multi.ex:897: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1756: DBConnection.run_transaction/4 (ecto 3.12.3) lib/ecto/repo/transaction.ex:18: Ecto.Repo.Transaction.transaction/4 test/operately/access/activity_context_assigner_test.exs:689: Operately.AccessActivityContextAssignerTest.create_activity/1 test/operately/access/activity_context_assigner_test.exs:137: Operately.AccessActivityContextAssignerTest."test assigns access_context to space activities discussion_comment_submitted action"/1 (ex_unit 1.17.2) lib/ex_unit/runner.ex:485: ExUnit.Runner.exec_test/2 (stdlib 6.0.1) timer.erl:590: :timer.tc/2 PASSED Test: assigns access_context to goal activities goal_discussion_editing action (test/operately/access/activity_context_assigner_test.exs:313) PASSED Test: assigns access_context to space activities task_reopening action (test/operately/access/activity_context_assigner_test.exs:185) PASSED Test: assigns access_context to goal activities goal_check_in_commented action (test/operately/access/activity_context_assigner_test.exs:253)10:30:48.232 [error] ** (KeyError) key :goal not found in: nil If you are using the dot syntax, such as map.field, make sure the left-hand side of the dot is a map (operately 0.1.0) lib/operately/goals/notifications.ex:21: Operately.Goals.Notifications.get_goal_update_subscribers/2 (operately 0.1.0) lib/operately/activities/notifications/goal_check_in_commented.ex:5: Operately.Activities.Notifications.GoalCheckInCommented.dispatch/1 (operately 0.1.0) lib/operately/activities/notification_dispatcher.ex:11: Operately.Activities.NotificationDispatcher.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:129: Oban.Queue.Executor.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:74: Oban.Queue.Executor.call/1 (oban 2.15.2) lib/oban/engines/inline.ex:97: Oban.Engines.Inline.execute_job/2 (oban 2.15.2) lib/oban/engines/inline.ex:37: Oban.Engines.Inline.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:181: anonymous fn/4 in Oban.Engine.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:314: anonymous fn/3 in Oban.Engine.with_span/4 (telemetry 1.3.0) /home/dev/app/app/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (ecto 3.12.3) lib/ecto/multi.ex:897: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1756: DBConnection.run_transaction/4 (ecto 3.12.3) lib/ecto/repo/transaction.ex:18: Ecto.Repo.Transaction.transaction/4 test/operately/access/activity_context_assigner_test.exs:689: Operately.AccessActivityContextAssignerTest.create_activity/1 test/operately/access/activity_context_assigner_test.exs:260: Operately.AccessActivityContextAssignerTest."test assigns access_context to goal activities goal_check_in_commented action"/1 (ex_unit 1.17.2) lib/ex_unit/runner.ex:485: ExUnit.Runner.exec_test/2 (stdlib 6.0.1) timer.erl:590: :timer.tc/2 PASSED Operately.Operations.GoalDiscussionCreationTest Test: GoalDiscussionCreation operation creates activity, thread and notification (test/operately/operations/goal_discussion_creation_test.exs:25) PASSED OperatelyWeb.Api.Mutations.EditCommentTest Test: permissions if caller has levels company=no_access, space=no_access, goal=reviewer on the goal, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:129) PASSED Test: permissions if caller has levels company=no_access, space=view_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:79) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the milestone comment, then expect code=404 (test/operately_web/api/mutations/edit_comment_test.exs:179) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the milestone comment, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:179) PASSED Test: permissions if caller has levels company=full_access, space=no_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:129) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/edit_comment_test.exs:79) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=champion on the thread, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:104)10:30:48.447 [error] Failed to send email 10:30:48.448 [error] ** (RuntimeError) Unsupported action: goal_created (operately 0.1.0) lib/operately_email/emails/comment_added_email.ex:58: OperatelyEmail.Emails.CommentAddedEmail.get_action/1 (operately 0.1.0) lib/operately_email/emails/comment_added_email.ex:12: OperatelyEmail.Emails.CommentAddedEmail.send/2 (operately 0.1.0) lib/operately/notifications/email_worker.ex:13: Operately.Notifications.EmailWorker.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:129: Oban.Queue.Executor.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:74: Oban.Queue.Executor.call/1 (oban 2.15.2) lib/oban/engines/inline.ex:97: Oban.Engines.Inline.execute_job/2 (oban 2.15.2) lib/oban/engines/inline.ex:37: Oban.Engines.Inline.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:181: anonymous fn/4 in Oban.Engine.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:314: anonymous fn/3 in Oban.Engine.with_span/4 (telemetry 1.3.0) /home/dev/app/app/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (ecto 3.12.3) lib/ecto/multi.ex:897: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1049: DBConnection.transaction/3 (ecto 3.12.3) lib/ecto/multi.ex:876: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1049: DBConnection.transaction/3 PASSED Test: permissions if caller has levels company=no_access, space=full_access, project=no_access on the milestone comment, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:179) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, goal=no_access on the thread, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:104) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=champion on the goal, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:129) PASSED Test: permissions if caller has levels company=no_access, space=full_access, goal=no_access on the thread, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:104) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, goal=no_access on the thread, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:104) PASSED Test: Updates subscriptions project_retrospective (test/operately_web/api/mutations/edit_comment_test.exs:254) PASSED Test: permissions if caller has levels company=no_access, space=edit_access on the space, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:154) PASSED Test: edit_comment functionality edits comment (test/operately_web/api/mutations/edit_comment_test.exs:207) PASSED Test: Updates subscriptions project_check_in (test/operately_web/api/mutations/edit_comment_test.exs:254) PASSED Test: permissions if caller has levels company=no_access, space=view_access, goal=no_access on the thread, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:104) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:79) PASSED Test: Updates subscriptions goal_update (test/operately_web/api/mutations/edit_comment_test.exs:254) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=reviewer on the thread, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:104)10:30:48.823 [error] Failed to send email 10:30:48.825 [error] ** (RuntimeError) Unsupported action: goal_created (operately 0.1.0) lib/operately_email/emails/comment_added_email.ex:58: OperatelyEmail.Emails.CommentAddedEmail.get_action/1 (operately 0.1.0) lib/operately_email/emails/comment_added_email.ex:12: OperatelyEmail.Emails.CommentAddedEmail.send/2 (operately 0.1.0) lib/operately/notifications/email_worker.ex:13: Operately.Notifications.EmailWorker.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:129: Oban.Queue.Executor.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:74: Oban.Queue.Executor.call/1 (oban 2.15.2) lib/oban/engines/inline.ex:97: Oban.Engines.Inline.execute_job/2 (oban 2.15.2) lib/oban/engines/inline.ex:37: Oban.Engines.Inline.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:181: anonymous fn/4 in Oban.Engine.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:314: anonymous fn/3 in Oban.Engine.with_span/4 (telemetry 1.3.0) /home/dev/app/app/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (ecto 3.12.3) lib/ecto/multi.ex:897: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1049: DBConnection.transaction/3 (ecto 3.12.3) lib/ecto/multi.ex:876: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1049: DBConnection.transaction/3 PASSED Test: permissions if caller has levels company=edit_access, space=no_access on the space, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:154) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:79) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, project=no_access on the milestone comment, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:179) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the milestone comment, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:179) PASSED Test: permissions if caller has levels company=no_access, space=comment_access on the space, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:154) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, goal=no_access on the thread, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:104) PASSED Test: permissions if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:79) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:129) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=no_access on the goal, then expect code=404 (test/operately_web/api/mutations/edit_comment_test.exs:129) PASSED Test: permissions if caller has levels company=full_access, space=no_access on the space, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:154) PASSED Test: permissions if caller has levels company=comment_access, space=no_access on the space, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:154) PASSED Test: Updates subscriptions message (test/operately_web/api/mutations/edit_comment_test.exs:254) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:79) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:79) PASSED Test: permissions if caller has levels company=no_access, space=full_access on the space, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:154) PASSED Test: permissions if caller has levels company=view_access, space=no_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:129) PASSED Test: permissions if caller has levels company=no_access, space=no_access on the space, then expect code=404 (test/operately_web/api/mutations/edit_comment_test.exs:154) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, project=no_access on the milestone comment, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:179) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:79) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_comment_test.exs:19) PASSED Test: permissions if caller has levels company=no_access, space=view_access on the space, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:154) PASSED Test: permissions if caller has levels company=view_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:79) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the milestone comment, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:179) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, project=no_access on the milestone comment, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:179) PASSED Test: permissions if caller has levels company=no_access, space=edit_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:129) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:129) PASSED Test: permissions if caller has levels company=no_access, space=view_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:129) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=no_access on the thread, then expect code=404 (test/operately_web/api/mutations/edit_comment_test.exs:104) PASSED Test: permissions if caller has levels company=no_access, space=view_access, project=no_access on the milestone comment, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:179) PASSED Test: permissions if caller has levels company=view_access, space=no_access, project=no_access on the milestone comment, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:179) PASSED Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the milestone comment, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:179) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:79) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=view_access on the milestone comment, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:179) PASSED Test: permissions if caller has levels company=view_access, space=no_access on the space, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:154) PASSED Test: permissions if caller has levels company=no_access, space=full_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:129) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:129) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=view_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:79) PASSED Test: permissions if caller has levels company=view_access, space=no_access, goal=no_access on the thread, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:104) PASSED Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:79) PASSED Test: permissions if caller has levels company=full_access, space=no_access, goal=no_access on the thread, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:104) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:79) PASSED Test: permissions if caller has levels company=no_access, space=edit_access, goal=no_access on the thread, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:104) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the milestone comment, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:179) PASSED OperatelyWeb.Api.Queries.GetPersonTest Test: get_person functionality includes_reports (test/operately_web/api/queries/get_person_test.exs:68) PASSED Test: security it doesn't return people from other companies (test/operately_web/api/queries/get_person_test.exs:14) PASSED Test: get_person functionality includes_peers (test/operately_web/api/queries/get_person_test.exs:79) PASSED Test: get_person functionality returns the person (test/operately_web/api/queries/get_person_test.exs:50) PASSED Test: permissions suspended people don't have access (test/operately_web/api/queries/get_person_test.exs:39) PASSED Test: get_person functionality include_manager (test/operately_web/api/queries/get_person_test.exs:56) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_person_test.exs:10) PASSED Test: permissions company member can query people from the same company (test/operately_web/api/queries/get_person_test.exs:34) PASSED Operately.Operations.ProjectClosedTest Test: Closing project notifies contributors (test/operately/operations/project_closed_test.exs:52) PASSED Test: Closing project notifies mentioned person (test/operately/operations/project_closed_test.exs:125) PASSED Test: Closing project does not notify creator (test/operately/operations/project_closed_test.exs:108) PASSED Test: Doesn't notify person without view access (test/operately/operations/project_closed_test.exs:164) PASSED Test: Closing project notifies only reviewer (test/operately/operations/project_closed_test.exs:29) PASSED Test: Closing project notifies all contributors if send_to_everyone is true (test/operately/operations/project_closed_test.exs:81) PASSED OperatelyWeb.Api.Mutations.CreateGoalTest Test: space permissions space member without edit access can't create goal (test/operately_web/api/mutations/create_goal_test.exs:67) PASSED Test: company permissions company member can see only their company (test/operately_web/api/mutations/create_goal_test.exs:23) PASSED Test: goal's reviewer and chamption permissions Goal successfully created when reviewer has access to the space (test/operately_web/api/mutations/create_goal_test.exs:131) PASSED Test: space permissions space members with edit access can create goal (test/operately_web/api/mutations/create_goal_test.exs:74) PASSED Test: goal's reviewer and chamption permissions Goal isn't created when champion doesn't have access to the space (test/operately_web/api/mutations/create_goal_test.exs:104) PASSED Test: company permissions company owners can create goal (test/operately_web/api/mutations/create_goal_test.exs:42) PASSED Test: company permissions company members with edit access can create goal (test/operately_web/api/mutations/create_goal_test.exs:35) PASSED Test: space permissions company member without view access can't see space (test/operately_web/api/mutations/create_goal_test.exs:62) PASSED Test: security it requires authentication (test/operately_web/api/mutations/create_goal_test.exs:10) PASSED Test: goal's reviewer and chamption permissions Goal successfully created when champion has access to the space (test/operately_web/api/mutations/create_goal_test.exs:113) PASSED Test: create_goal functionality creates goal within company (test/operately_web/api/mutations/create_goal_test.exs:156) PASSED Test: goal's reviewer and chamption permissions Goal isn't created when reviewer doesn't have access to the space (test/operately_web/api/mutations/create_goal_test.exs:122) PASSED Test: company permissions company members without edit access can't create goal (test/operately_web/api/mutations/create_goal_test.exs:30) PASSED Test: space permissions company owners can create goal (test/operately_web/api/mutations/create_goal_test.exs:81) PASSED Test: create_goal functionality creates goal within space (test/operately_web/api/mutations/create_goal_test.exs:151) PASSED OperatelyWeb.Api.Mutations.ChangePasswordTest Test: security it requires authentication (test/operately_web/api/mutations/change_password_test.exs:23) PASSED Test: security it requires a valid password confirmation (test/operately_web/api/mutations/change_password_test.exs:42) PASSED Test: security it requires a valid current password (test/operately_web/api/mutations/change_password_test.exs:32) PASSED Test: if changes the password (test/operately_web/api/mutations/change_password_test.exs:9) PASSED Test: security it fails with empty params (test/operately_web/api/mutations/change_password_test.exs:27) PASSED Operately.Data.Change021CreateProjectBindingsToCompanyAndSpaceTest Test: creates access binding to spaces (test/operately/data/change_021_create_project_bindings_to_company_and_space_test.exs:72) PASSED Test: creates access binding to companies (test/operately/data/change_021_create_project_bindings_to_company_and_space_test.exs:38) PASSED Test: creates access binding to spaces when it's the company space (test/operately/data/change_021_create_project_bindings_to_company_and_space_test.exs:106) PASSED Operately.Data.Change013CreateActivitiesAccessContextTest Test: assigns access_context to goal activities goal_timeframe_editing action (test/operately/data/change_013_create_activities_access_context_test.exs:451) PASSED Test: assigns access_context to space activities discussion_posting action (test/operately/data/change_013_create_activities_access_context_test.exs:124) PASSED Test: assigns access_context to task activities task_adding action (test/operately/data/change_013_create_activities_access_context_test.exs:745) PASSED Test: assigns access_context to task activities task_status_change action (test/operately/data/change_013_create_activities_access_context_test.exs:775) PASSED Test: assigns access_context to project activities project_contributor_addition action (test/operately/data/change_013_create_activities_access_context_test.exs:581) PASSED Test: assigns access_context to company activities password_first_time_changed action (test/operately/data/change_013_create_activities_access_context_test.exs:40) PASSED Test: assigns access_context to space activities group_edited action (test/operately/data/change_013_create_activities_access_context_test.exs:259) PASSED Test: assigns access_context to goal activities goal_check_in_acknowledgement action (test/operately/data/change_013_create_activities_access_context_test.exs:316) PASSED Test: assigns access_context to goal activities goal_reopening action (test/operately/data/change_013_create_activities_access_context_test.exs:436) PASSED Test: assigns access_context to goal activities goal_check_in_edit action (test/operately/data/change_013_create_activities_access_context_test.exs:346) PASSED Test: assigns access_context to goal activities goal_created action (test/operately/data/change_013_create_activities_access_context_test.exs:376) PASSED Test: assigns access_context to project activities project_milestone_commented action (test/operately/data/change_013_create_activities_access_context_test.exs:641) PASSED Test: assigns access_context to goal activities goal_check_in action (test/operately/data/change_013_create_activities_access_context_test.exs:301) PASSED Test: assigns access_context to space activities task_priority_change action (test/operately/data/change_013_create_activities_access_context_test.exs:214) PASSED Test: assigns access_context to goal activities goal_reparent action (test/operately/data/change_013_create_activities_access_context_test.exs:285) PASSED Test: assigns access_context to project activities project_resuming action (test/operately/data/change_013_create_activities_access_context_test.exs:701) PASSED Test: assigns access_context to space activities discussion_editing action (test/operately/data/change_013_create_activities_access_context_test.exs:139) PASSED Test: assigns access_context to comment_added activity entity_type is :comment_thread (test/operately/data/change_013_create_activities_access_context_test.exs:853) PASSED Test: assigns access_context to comment_added activity entity_type is :project_check_in (test/operately/data/change_013_create_activities_access_context_test.exs:816) PASSED Test: assigns access_context to project activities project_goal_disconnection action (test/operately/data/change_013_create_activities_access_context_test.exs:626) PASSED Test: assigns access_context to goal activities goal_discussion_creation action (test/operately/data/change_013_create_activities_access_context_test.exs:391) PASSED Test: assigns access_context to space activities task_assignee_assignment action (test/operately/data/change_013_create_activities_access_context_test.exs:169) PASSED Test: assigns access_context to project activities project_archived action (test/operately/data/change_013_create_activities_access_context_test.exs:491) PASSED Test: assigns access_context to goal activities goal_editing action (test/operately/data/change_013_create_activities_access_context_test.exs:421) PASSED Test: assigns access_context to project activities project_timeline_edited action (test/operately/data/change_013_create_activities_access_context_test.exs:716) PASSED Test: assigns access_context to project activities project_renamed action (test/operately/data/change_013_create_activities_access_context_test.exs:686) PASSED Test: assigns access_context to space activities space_joining action (test/operately/data/change_013_create_activities_access_context_test.exs:94) PASSED Test: assigns access_context to company activities company_member_added action (test/operately/data/change_013_create_activities_access_context_test.exs:70) PASSED Test: assigns access_context to project activities project_moved action (test/operately/data/change_013_create_activities_access_context_test.exs:656) PASSED Test: assigns access_context to project activities project_check_in_edit action (test/operately/data/change_013_create_activities_access_context_test.exs:536) PASSED Test: assigns access_context to project activities project_discussion_submitted action (test/operately/data/change_013_create_activities_access_context_test.exs:596) PASSED Test: assigns access_context to space activities goal_archived action (test/operately/data/change_013_create_activities_access_context_test.exs:109) PASSED Test: assigns access_context to company activities company_member_removed action (test/operately/data/change_013_create_activities_access_context_test.exs:25) PASSED Test: assigns access_context to project activities project_goal_connection action (test/operately/data/change_013_create_activities_access_context_test.exs:611) PASSED Test: assigns access_context to space activities task_description_change action (test/operately/data/change_013_create_activities_access_context_test.exs:184) PASSED Test: assigns access_context to task activities task_update action (test/operately/data/change_013_create_activities_access_context_test.exs:790) PASSED Test: assigns access_context to project activities project_check_in_acknowledged action (test/operately/data/change_013_create_activities_access_context_test.exs:506) PASSED Test: assigns access_context to project activities project_closed action (test/operately/data/change_013_create_activities_access_context_test.exs:566) PASSED Test: assigns access_context to project activities project_created action (test/operately/data/change_013_create_activities_access_context_test.exs:476) PASSED Test: assigns access_context to space activities task_size_change action (test/operately/data/change_013_create_activities_access_context_test.exs:244) PASSED Test: assigns access_context to comment_added activity entity_type is :update (test/operately/data/change_013_create_activities_access_context_test.exs:833) PASSED Test: assigns access_context to comment_added activity entity_type is nil (test/operately/data/change_013_create_activities_access_context_test.exs:883)10:30:51.462 [error] Unhandled activity: %Operately.Activities.Activity{__meta__: #Ecto.Schema.Metadata<:loaded, "activities">, id: "baa4ae1c-9780-4e1f-b31b-187fc092f134", author_id: "2a73c6ff-734d-41cc-ab7b-358f9b0229c9", author: #Ecto.Association.NotLoaded, comment_thread_id: nil, comment_thread: #Ecto.Association.NotLoaded, access_context_id: nil, access_context: #Ecto.Association.NotLoaded, action: "comment_added", content: %Operately.Activities.Content.CommentAdded{company_id: nil, company: #Ecto.Association.NotLoaded, comment_thread_id: nil, comment_thread: #Ecto.Association.NotLoaded, comment_id: "34eb01ec-1de7-4cda-abb8-d16f18f35cc7", comment: #Ecto.Association.NotLoaded, project_id: nil, project: #Ecto.Association.NotLoaded, space_id: nil, space: #Ecto.Association.NotLoaded, goal_id: nil, goal: #Ecto.Association.NotLoaded, activity_id: nil, activity: #Ecto.Association.NotLoaded}, resource_id: nil, resource_type: nil, notifications: [], permissions: nil, inserted_at: ~N[2025-04-29 10:30:51], updated_at: ~N[2025-04-29 10:30:51], requester_access_level: nil, request_info: nil} 10:30:51.462 [error] Comment associated with activity: %Operately.Updates.Comment{__meta__: #Ecto.Schema.Metadata<:loaded, "comments">, id: "34eb01ec-1de7-4cda-abb8-d16f18f35cc7", update_id: nil, update: #Ecto.Association.NotLoaded, author_id: "2a73c6ff-734d-41cc-ab7b-358f9b0229c9", author: #Ecto.Association.NotLoaded, entity_id: nil, entity_type: nil, content: %{"message" => "some comment"}, reactions: #Ecto.Association.NotLoaded, notification: nil, inserted_at: ~N[2025-04-29 10:30:51], updated_at: ~N[2025-04-29 10:30:51], requester_access_level: nil} PASSED Test: assigns access_context to space activities task_name_editing action (test/operately/data/change_013_create_activities_access_context_test.exs:199) PASSED Test: assigns access_context to task activities task_closing action (test/operately/data/change_013_create_activities_access_context_test.exs:760) PASSED Test: assigns access_context to project activities project_pausing action (test/operately/data/change_013_create_activities_access_context_test.exs:671) PASSED Test: assigns access_context to project activities project_check_in_commented action (test/operately/data/change_013_create_activities_access_context_test.exs:521) PASSED Test: assigns access_context to project activities project_check_in_submitted action (test/operately/data/change_013_create_activities_access_context_test.exs:551) PASSED Test: assigns access_context to company activities company_invitation_token_created action (test/operately/data/change_013_create_activities_access_context_test.exs:55) PASSED Test: assigns access_context to goal activities goal_closing action (test/operately/data/change_013_create_activities_access_context_test.exs:361) PASSED Test: assigns access_context to space activities discussion_comment_submitted action (test/operately/data/change_013_create_activities_access_context_test.exs:154) PASSED Test: assigns access_context to goal activities goal_discussion_editing action (test/operately/data/change_013_create_activities_access_context_test.exs:406) PASSED Test: assigns access_context to space activities task_reopening action (test/operately/data/change_013_create_activities_access_context_test.exs:229) PASSED Test: assigns access_context to goal activities goal_check_in_commented action (test/operately/data/change_013_create_activities_access_context_test.exs:331) PASSED OperatelyWeb.Api.Mutations.PostGoalProgressUpdateTest Test: permissions if caller has levels company=no_access, space=full_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/post_goal_progress_update_test.exs:43) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=no_access on the goal, then expect code=404 (test/operately_web/api/mutations/post_goal_progress_update_test.exs:43) PASSED Test: subscriptions to notifications adds mentioned people to subscription list (test/operately_web/api/mutations/post_goal_progress_update_test.exs:129) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/post_goal_progress_update_test.exs:43) PASSED Test: permissions if caller has levels company=full_access, space=no_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/post_goal_progress_update_test.exs:43) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/post_goal_progress_update_test.exs:43) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=reviewer on the goal, then expect code=200 (test/operately_web/api/mutations/post_goal_progress_update_test.exs:43) PASSED Test: permissions if caller has levels company=no_access, space=edit_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/post_goal_progress_update_test.exs:43) PASSED Test: security it requires authentication (test/operately_web/api/mutations/post_goal_progress_update_test.exs:16) PASSED Test: post_goal_progress_update functionality posts goal progress update (test/operately_web/api/mutations/post_goal_progress_update_test.exs:74) PASSED Test: subscriptions to notifications creates subscription list for goal update (test/operately_web/api/mutations/post_goal_progress_update_test.exs:103) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=champion on the goal, then expect code=200 (test/operately_web/api/mutations/post_goal_progress_update_test.exs:43) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/post_goal_progress_update_test.exs:43) PASSED Test: subscriptions to notifications doesn't create repeated subscription (test/operately_web/api/mutations/post_goal_progress_update_test.exs:152) PASSED OperatelyWeb.Api.Mutations.UpdateProjectContributorTest Test: permissions if caller has levels company=no_access, space=view_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/update_project_contributor_test.exs:43) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/update_project_contributor_test.exs:43) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/update_project_contributor_test.exs:43) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/update_project_contributor_test.exs:43) PASSED Test: permissions if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_project_contributor_test.exs:43) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=403 (test/operately_web/api/mutations/update_project_contributor_test.exs:43) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/update_project_contributor_test.exs:43) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/update_project_contributor_test.exs:43) PASSED Test: security it requires authentication (test/operately_web/api/mutations/update_project_contributor_test.exs:12) PASSED Test: permissions if caller has levels company=view_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/update_project_contributor_test.exs:43) PASSED Test: update_project_contributor functionality updates project contributor (test/operately_web/api/mutations/update_project_contributor_test.exs:71) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/update_project_contributor_test.exs:43) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=view_access on the project, then expect code=403 (test/operately_web/api/mutations/update_project_contributor_test.exs:43) PASSED Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/update_project_contributor_test.exs:43) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_project_contributor_test.exs:43) PASSED Operately.Data.Change046UpdateFileCreatedActivityFormatTest Test: updates activities content (test/operately/data/change_046_update_file_created_activity_format_test.exs:16) PASSED Operately.OkrsTest Test: objectives delete_objective/1 deletes the objective (test/operately/okrs_test.exs:72) PASSED Test: objectives get_objective!/1 returns the objective with given id (test/operately/okrs_test.exs:28) PASSED Test: key_results update_key_result/2 with invalid data returns error changeset (test/operately/okrs_test.exs:138) PASSED Test: objectives change_objective/1 returns a objective changeset (test/operately/okrs_test.exs:79) PASSED Test: key_results create_key_result/1 with valid data creates a key_result (test/operately/okrs_test.exs:105) PASSED Test: objectives update_objective/2 with valid data updates the objective (test/operately/okrs_test.exs:52) PASSED Test: objectives create_objective/1 with invalid data returns error changeset (test/operately/okrs_test.exs:48) PASSED Test: objectives update_objective/2 with invalid data returns error changeset (test/operately/okrs_test.exs:64) PASSED Test: objectives list_objectives/0 returns all objectives (test/operately/okrs_test.exs:22) PASSED Test: key_results create_key_result/1 with invalid data returns error changeset (test/operately/okrs_test.exs:123) PASSED Test: key_results change_key_result/1 returns a key_result changeset (test/operately/okrs_test.exs:152) PASSED Test: key_results update_key_result/2 with valid data updates the key_result (test/operately/okrs_test.exs:127) PASSED Test: objectives create_objective/1 with valid data creates a objective (test/operately/okrs_test.exs:34) PASSED Test: key_results get_key_result!/1 returns the key_result with given id (test/operately/okrs_test.exs:99) PASSED Test: key_results delete_key_result/1 deletes the key_result (test/operately/okrs_test.exs:145) PASSED OperatelyWeb.Api.Mutations.UnsubscribeFromNotificationsTest Test: unsubscribe_from_notifications functionality unsubscribes to notifications list (test/operately_web/api/mutations/unsubscribe_from_notifications_test.exs:26) PASSED Test: security it requires authentication (test/operately_web/api/mutations/unsubscribe_from_notifications_test.exs:10) PASSED OperatelyWeb.HealthControllerTest Test: GET /health (test/operately_web/controllers/health_controller_test.exs:4) PASSED OperatelyWeb.Api.Mutations.DisconnectGoalFromProjectTest Test: permissions space members without edit access can't disconnect goal from project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:78) PASSED Test: permissions company members without view access can't see a project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:27) PASSED Test: permissions reviewers can disconnect goal from project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:154) PASSED Test: permissions space members with edit access can disconnect goal from project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:88) PASSED Test: permissions contributors without edit access can't disconnect goal from project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:112) PASSED Test: permissions company owner can disconnect goal from project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:53) PASSED Test: permissions company members with edit access can disconnect goal from project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:45) PASSED Test: permissions space members without view access can't see a project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:68) PASSED Test: security it requires authentication (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:13) PASSED Test: permissions contributors with edit access can disconnect goal from project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:125) PASSED Test: permissions champions can disconnect goal from project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:137) PASSED Test: permissions company members without edit access can't disconnect goal from project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:36) PASSED Test: permissions space managers can disconnect goal from project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:97) PASSED Test: disconnect_goal_from_project functionality disconnects goal (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:175) PASSED OperatelyWeb.Api.Mutations.ResumeProjectTest Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/resume_project_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/resume_project_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/resume_project_test.exs:39) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/resume_project_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/resume_project_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/resume_project_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/resume_project_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/mutations/resume_project_test.exs:11) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/resume_project_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/resume_project_test.exs:39) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/resume_project_test.exs:39) PASSED OperatelyWeb.Api.Mutations.DeleteGoalTest Test: permissions if caller has levels company=no_access, space=full_access and goal=no_access, then expect code=200 (test/operately_web/api/mutations/delete_goal_test.exs:42) PASSED Test: permissions if caller has levels company=no_access, space=no_access and goal=no_access, then expect code=404 (test/operately_web/api/mutations/delete_goal_test.exs:42) PASSED Test: permissions if caller has levels company=comment_access, space=no_access and goal=no_access, then expect code=403 (test/operately_web/api/mutations/delete_goal_test.exs:42) PASSED Test: permissions if caller has levels company=full_access, space=no_access and goal=no_access, then expect code=200 (test/operately_web/api/mutations/delete_goal_test.exs:42) PASSED Test: permissions if caller has levels company=no_access, space=comment_access and goal=no_access, then expect code=403 (test/operately_web/api/mutations/delete_goal_test.exs:42) PASSED Test: permissions if caller has levels company=no_access, space=no_access and goal=reviewer, then expect code=200 (test/operately_web/api/mutations/delete_goal_test.exs:42) PASSED Test: permissions if caller has levels company=no_access, space=edit_access and goal=no_access, then expect code=200 (test/operately_web/api/mutations/delete_goal_test.exs:42) PASSED Test: security it requires authentication (test/operately_web/api/mutations/delete_goal_test.exs:15) PASSED Test: permissions if caller has levels company=no_access, space=no_access and goal=champion, then expect code=200 (test/operately_web/api/mutations/delete_goal_test.exs:42) PASSED Test: permissions if caller has levels company=edit_access, space=no_access and goal=no_access, then expect code=200 (test/operately_web/api/mutations/delete_goal_test.exs:42) PASSED OperatelyWeb.Api.Mutations.ChangeTaskDescriptionTest Test: permissions space members without edit access can't change task description (test/operately_web/api/mutations/change_task_description_test.exs:75) PASSED Test: permissions company members without view access can't see a project (test/operately_web/api/mutations/change_task_description_test.exs:29) PASSED Test: permissions reviewers can change task description (test/operately_web/api/mutations/change_task_description_test.exs:145) PASSED Test: permissions space members with edit access can change task description (test/operately_web/api/mutations/change_task_description_test.exs:84) PASSED Test: permissions contributors without edit access can't change task description (test/operately_web/api/mutations/change_task_description_test.exs:106) PASSED Test: permissions company owner can change task description (test/operately_web/api/mutations/change_task_description_test.exs:52) PASSED Test: permissions company members with edit access can change task description (test/operately_web/api/mutations/change_task_description_test.exs:45) PASSED Test: permissions space members without view access can't see a project (test/operately_web/api/mutations/change_task_description_test.exs:66) PASSED Test: security it requires authentication (test/operately_web/api/mutations/change_task_description_test.exs:15) PASSED Test: permissions contributors with edit access can change task description (test/operately_web/api/mutations/change_task_description_test.exs:118) PASSED Test: permissions champions can change task description (test/operately_web/api/mutations/change_task_description_test.exs:129) PASSED Test: permissions company members without edit access can't change task description (test/operately_web/api/mutations/change_task_description_test.exs:37) PASSED Test: permissions space managers can change task description (test/operately_web/api/mutations/change_task_description_test.exs:92) PASSED Test: change_task_description functionality changes task description (test/operately_web/api/mutations/change_task_description_test.exs:165) PASSED Operately.WorkMaps.GetWorkMapQueryTest Test: functionality - execute/1 with deeply nested structure returns complete hierarchy with all nested children (test/operately/work_maps/get_work_map_query_test.exs:275) PASSED Test: functionality - execute/1 with company_id and space_id parameters returns only goals and projects for the specified space (test/operately/work_maps/get_work_map_query_test.exs:82) PASSED Test: permissions - query nested projects champion has access to public_project, project1, project2, secret_project (test/operately/work_maps/get_work_map_query_test.exs:436) PASSED Test: permissions - query goals creator has access to 6 public, internal and secret goals (test/operately/work_maps/get_work_map_query_test.exs:518) PASSED Test: permissions - query goals space member has access to 4 public and internal goals (test/operately/work_maps/get_work_map_query_test.exs:496) PASSED Test: permissions - query nested projects company_member has access to public_project (test/operately/work_maps/get_work_map_query_test.exs:436) PASSED Test: permissions - query goals company member has access to 2 public goals (test/operately/work_maps/get_work_map_query_test.exs:486) PASSED Test: functionality - execute/1 with all parameters combined filters correctly with all parameters (test/operately/work_maps/get_work_map_query_test.exs:330) PASSED Test: permissions - query root projects space_member has access to public_project, project1, project2 (test/operately/work_maps/get_work_map_query_test.exs:387) PASSED Test: functionality - execute/1 with company_id and parent_goal_id parameters returns only child goals and projects for the specified parent goal (test/operately/work_maps/get_work_map_query_test.exs:174) PASSED Test: functionality - execute/1 with company_id and space_id parameters returns only projects for space3 (test/operately/work_maps/get_work_map_query_test.exs:139) PASSED Test: functionality - execute/1 with company_id and owner_id parameters returns only goals and projects owned by the specified person (test/operately/work_maps/get_work_map_query_test.exs:241) PASSED Test: functionality - execute/1 with only company_id parameter returns only root goals and projects for the specified company (test/operately/work_maps/get_work_map_query_test.exs:31) PASSED Test: permissions - query root projects creator has access to public_project, project1, project2, secret_project (test/operately/work_maps/get_work_map_query_test.exs:387) PASSED Test: permissions - query nested projects creator has access to public_project, project1, project2, secret_project (test/operately/work_maps/get_work_map_query_test.exs:436) PASSED Test: permissions - query root projects champion has access to public_project, project1, project2, secret_project (test/operately/work_maps/get_work_map_query_test.exs:387) PASSED Test: functionality - execute/1 with company_id and space_id parameters returns only goals and projects for space2 with correct hierarchy (test/operately/work_maps/get_work_map_query_test.exs:94) PASSED Test: permissions - query root projects company_member has access to public_project (test/operately/work_maps/get_work_map_query_test.exs:387) PASSED Test: permissions - query nested projects space_member has access to public_project, project1, project2 (test/operately/work_maps/get_work_map_query_test.exs:436) PASSED Test: permissions - query goals champion has access to 6 public, internal and secret goals (test/operately/work_maps/get_work_map_query_test.exs:518) PASSED Operately.Operations.ProjectGoalDisconnectionTest Test: ProjectGoalDisconnection operation creates activity and notification (test/operately/operations/project_goal_disconnection_test.exs:41) PASSED Test: ProjectGoalDisconnection operation updates project.goal_id to nil (test/operately/operations/project_goal_disconnection_test.exs:31) PASSED OperatelyWeb.Api.Mutations.EditKeyResourceTest Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_key_resource_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/edit_key_resource_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_key_resource_test.exs:39) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_key_resource_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_key_resource_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_key_resource_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_key_resource_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_key_resource_test.exs:11) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_key_resource_test.exs:39) PASSED Test: edit_key_resource functionality edits key resource (test/operately_web/api/mutations/edit_key_resource_test.exs:71) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_key_resource_test.exs:39) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_key_resource_test.exs:39) PASSED OperatelyWeb.Api.Mutations.AddReactionTest Test: permissions goal update comment - if caller has levels company=no_access, space=edit_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:371) PASSED Test: permissions resource hub document comment - if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/mutations/add_reaction_test.exs:423) PASSED Test: permissions resource hub document - if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/mutations/add_reaction_test.exs:126) PASSED Test: permissions message comment - if caller has levels company=no_access, space=full_access on the space, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:397) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=view_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:78) PASSED Test: permissions goal update comment - if caller has levels company=no_access, space=no_access, goal=no_access on the goal, then expect code=404 (test/operately_web/api/mutations/add_reaction_test.exs:371) PASSED Test: permissions resource hub link - if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/mutations/add_reaction_test.exs:172) PASSED Test: permissions resource hub link - if caller has levels company=no_access and space=comment_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:172) PASSED Test: permissions goal discussion comment - if caller has levels company=no_access, space=view_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:345) PASSED Test: permissions if caller has levels company=view_access, space=no_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:219) PASSED Test: permissions resource hub link comment - if caller has levels company=comment_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:473) PASSED Test: permissions resource hub link comment - if caller has levels company=view_access and space=no_access, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:473) PASSED Test: permissions resource hub document - if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:126) PASSED Test: permissions project retrospective comment - if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:293) PASSED Test: permissions if caller has levels company=view_access, space=no_access on the space, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:243) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:219) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/add_reaction_test.exs:78) PASSED Test: permissions message comment - if caller has levels company=no_access, space=no_access on the space, then expect code=404 (test/operately_web/api/mutations/add_reaction_test.exs:397) PASSED Test: permissions project retrospective - if caller has levels company=no_access, space=no_access, project=view_access on the project, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:102) PASSED Test: permissions resource hub link - if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:172) PASSED Test: permissions goal discussion comment - if caller has levels company=no_access, space=edit_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:345) PASSED Test: permissions project milestone comment - if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:319) PASSED Test: permissions project retrospective - if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:102) PASSED Test: permissions if caller has levels company=full_access, space=no_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:219) PASSED Test: permissions if caller has levels company=full_access, space=no_access, goal=no_access on the comment thread, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:195) PASSED Test: permissions project retrospective comment - if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:293) PASSED Test: permissions project retrospective - if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:102) PASSED Test: permissions project retrospective - if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:102) PASSED Test: permissions message comment - if caller has levels company=edit_access, space=no_access on the space, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:397) PASSED Test: permissions project retrospective - if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:102) PASSED Test: permissions if caller has levels company=comment_access, space=no_access on the space, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:243) PASSED Test: permissions if caller has levels company=no_access, space=full_access, goal=no_access on the comment thread, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:195) PASSED Test: permissions resource hub file - if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:149) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=no_access on the goal, then expect code=404 (test/operately_web/api/mutations/add_reaction_test.exs:219) PASSED Test: permissions resource hub link comment - if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/mutations/add_reaction_test.exs:473) PASSED Test: permissions project check-in comment - if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:267) PASSED Test: permissions goal update comment - if caller has levels company=view_access, space=no_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:371) PASSED Test: permissions project milestone comment - if caller has levels company=view_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:319) PASSED Test: permissions project retrospective comment - if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:293) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, goal=no_access on the comment thread, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:195) PASSED Test: permissions if caller has levels company=no_access, space=edit_access, goal=no_access on the comment thread, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:195) PASSED Test: permissions resource hub document comment - if caller has levels company=comment_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:423) PASSED Test: permissions if caller has levels company=no_access, space=no_access on the space, then expect code=404 (test/operately_web/api/mutations/add_reaction_test.exs:243) PASSED Test: permissions resource hub file comment - if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:448) PASSED Test: permissions project retrospective - if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:102) PASSED Test: permissions project check-in - if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:78) PASSED Test: permissions if caller has levels company=no_access, space=full_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:219) PASSED Test: permissions message comment - if caller has levels company=no_access, space=view_access on the space, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:397) PASSED Test: permissions goal discussion comment - if caller has levels company=no_access, space=no_access, goal=champion on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:345)10:30:55.940 [error] Failed to send email 10:30:55.941 [error] ** (RuntimeError) Unsupported action: goal_created (operately 0.1.0) lib/operately_email/emails/comment_added_email.ex:58: OperatelyEmail.Emails.CommentAddedEmail.get_action/1 (operately 0.1.0) lib/operately_email/emails/comment_added_email.ex:12: OperatelyEmail.Emails.CommentAddedEmail.send/2 (operately 0.1.0) lib/operately/notifications/email_worker.ex:13: Operately.Notifications.EmailWorker.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:129: Oban.Queue.Executor.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:74: Oban.Queue.Executor.call/1 (oban 2.15.2) lib/oban/engines/inline.ex:97: Oban.Engines.Inline.execute_job/2 (oban 2.15.2) lib/oban/engines/inline.ex:37: Oban.Engines.Inline.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:181: anonymous fn/4 in Oban.Engine.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:314: anonymous fn/3 in Oban.Engine.with_span/4 (telemetry 1.3.0) /home/dev/app/app/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (ecto 3.12.3) lib/ecto/multi.ex:897: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1049: DBConnection.transaction/3 (ecto 3.12.3) lib/ecto/multi.ex:876: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1049: DBConnection.transaction/3 PASSED Test: permissions if caller has levels company=view_access, space=no_access, goal=no_access on the comment thread, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:195) PASSED Test: add_reaction functionality add reaction to a discussion (test/operately_web/api/mutations/add_reaction_test.exs:509) PASSED Test: permissions project milestone comment - if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:319) PASSED Test: permissions message comment - if caller has levels company=comment_access, space=no_access on the space, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:397) PASSED Test: permissions resource hub document comment - if caller has levels company=no_access and space=view_access, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:423) PASSED Test: permissions project check-in comment - if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/add_reaction_test.exs:267) PASSED Test: permissions project milestone comment - if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:319) PASSED Test: permissions goal update comment - if caller has levels company=full_access, space=no_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:371) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=champion on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:219) PASSED Test: permissions project retrospective comment - if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:293) PASSED Test: permissions project retrospective comment - if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:293) PASSED Test: permissions project retrospective - if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:102) PASSED Test: permissions resource hub file - if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:149) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:78) PASSED Test: permissions resource hub link - if caller has levels company=comment_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:172) PASSED Test: permissions goal update comment - if caller has levels company=edit_access, space=no_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:371) PASSED Test: permissions resource hub link - if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:172) PASSED Test: permissions goal update comment - if caller has levels company=no_access, space=view_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:371) PASSED Test: permissions project check-in comment - if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:267) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, goal=no_access on the comment thread, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:195) PASSED Test: permissions resource hub file - if caller has levels company=no_access and space=comment_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:149) PASSED Test: permissions project retrospective - if caller has levels company=view_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:102) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:78) PASSED Test: permissions project retrospective comment - if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:293) PASSED Test: permissions resource hub document - if caller has levels company=no_access and space=comment_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:126) PASSED Test: permissions goal update comment - if caller has levels company=no_access, space=no_access, goal=champion on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:371) PASSED Test: permissions project retrospective - if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:102) PASSED Test: permissions project check-in comment - if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:267) PASSED Test: permissions resource hub file - if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:149) PASSED Test: permissions resource hub file - if caller has levels company=comment_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:149) PASSED Test: permissions project milestone comment - if caller has levels company=no_access, space=view_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:319) PASSED Test: permissions project check-in comment - if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:267) PASSED Test: permissions project retrospective comment - if caller has levels company=no_access, space=no_access, project=view_access on the project, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:293) PASSED Test: permissions project check-in comment - if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:267) PASSED Test: permissions goal discussion comment - if caller has levels company=no_access, space=no_access, goal=reviewer on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:345)10:30:56.735 [error] Failed to send email 10:30:56.737 [error] ** (RuntimeError) Unsupported action: goal_created (operately 0.1.0) lib/operately_email/emails/comment_added_email.ex:58: OperatelyEmail.Emails.CommentAddedEmail.get_action/1 (operately 0.1.0) lib/operately_email/emails/comment_added_email.ex:12: OperatelyEmail.Emails.CommentAddedEmail.send/2 (operately 0.1.0) lib/operately/notifications/email_worker.ex:13: Operately.Notifications.EmailWorker.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:129: Oban.Queue.Executor.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:74: Oban.Queue.Executor.call/1 (oban 2.15.2) lib/oban/engines/inline.ex:97: Oban.Engines.Inline.execute_job/2 (oban 2.15.2) lib/oban/engines/inline.ex:37: Oban.Engines.Inline.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:181: anonymous fn/4 in Oban.Engine.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:314: anonymous fn/3 in Oban.Engine.with_span/4 (telemetry 1.3.0) /home/dev/app/app/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (ecto 3.12.3) lib/ecto/multi.ex:897: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1049: DBConnection.transaction/3 (ecto 3.12.3) lib/ecto/multi.ex:876: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1049: DBConnection.transaction/3 PASSED Test: permissions project milestone comment - if caller has levels company=no_access, space=no_access, project=view_access on the project, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:319) PASSED Test: permissions resource hub file comment - if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:448) PASSED Test: permissions goal discussion comment - if caller has levels company=no_access, space=full_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:345) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, goal=no_access on the comment thread, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:195) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:78) PASSED Test: permissions if caller has levels company=no_access, space=view_access on the space, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:243) PASSED Test: permissions resource hub document comment - if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:423) PASSED Test: permissions goal discussion comment - if caller has levels company=comment_access, space=no_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:345) PASSED Test: permissions project check-in comment - if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:267) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:78) PASSED Test: permissions resource hub file - if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:149) PASSED Test: permissions if caller has levels company=no_access, space=view_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:219) PASSED Test: permissions resource hub document - if caller has levels company=view_access and space=no_access, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:126) PASSED Test: permissions resource hub file - if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/mutations/add_reaction_test.exs:149) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=reviewer on the comment thread, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:195) PASSED Test: permissions message comment - if caller has levels company=full_access, space=no_access on the space, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:397) PASSED Test: permissions project check-in comment - if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:267) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:78) PASSED Test: permissions resource hub file comment - if caller has levels company=no_access and space=comment_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:448) PASSED Test: permissions resource hub document comment - if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:423) PASSED Test: permissions project milestone comment - if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:319) PASSED Test: permissions project retrospective comment - if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:293) PASSED Test: security it requires authentication (test/operately_web/api/mutations/add_reaction_test.exs:18) PASSED Test: permissions resource hub file - if caller has levels company=no_access and space=view_access, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:149) PASSED Test: permissions goal discussion comment - if caller has levels company=no_access, space=comment_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:345) PASSED Test: permissions resource hub document comment - if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:423) PASSED Test: permissions goal update comment - if caller has levels company=no_access, space=comment_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:371) PASSED Test: permissions project milestone comment - if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:319) PASSED Test: permissions resource hub file comment - if caller has levels company=view_access and space=no_access, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:448) PASSED Test: permissions project check-in - if caller has levels company=view_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:78) PASSED Test: permissions message comment - if caller has levels company=no_access, space=edit_access on the space, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:397) PASSED Test: permissions if caller has levels company=no_access, space=comment_access on the space, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:243) PASSED Test: permissions resource hub link - if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:172) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=champion on the comment thread, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:195) PASSED Test: permissions resource hub file comment - if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:448) PASSED Test: permissions resource hub link comment - if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:473) PASSED Test: permissions project retrospective comment - if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:293) PASSED Test: permissions resource hub link comment - if caller has levels company=no_access and space=comment_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:473) PASSED Test: permissions project retrospective comment - if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/add_reaction_test.exs:293) PASSED Test: permissions resource hub document - if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:126) PASSED Test: permissions project milestone comment - if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:319) PASSED Test: permissions resource hub document - if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:126) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:219) PASSED Test: permissions resource hub file comment - if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/mutations/add_reaction_test.exs:448) PASSED Test: permissions project milestone comment - if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/add_reaction_test.exs:319) PASSED Test: permissions resource hub document - if caller has levels company=no_access and space=view_access, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:126) PASSED Test: permissions resource hub link comment - if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:473) PASSED Test: permissions project retrospective - if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/add_reaction_test.exs:102) PASSED Test: permissions project retrospective comment - if caller has levels company=view_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:293) PASSED Test: permissions project check-in comment - if caller has levels company=no_access, space=no_access, project=view_access on the project, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:267) PASSED Test: permissions goal update comment - if caller has levels company=comment_access, space=no_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:371) PASSED Test: permissions project check-in comment - if caller has levels company=view_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:267) PASSED Test: permissions project check-in comment - if caller has levels company=no_access, space=view_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:267) PASSED Test: permissions resource hub document comment - if caller has levels company=view_access and space=no_access, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:423) PASSED Test: permissions project retrospective comment - if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:293) PASSED Test: permissions if caller has levels company=edit_access, space=no_access on the space, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:243) PASSED Test: permissions resource hub file comment - if caller has levels company=comment_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:448) PASSED Test: permissions resource hub link - if caller has levels company=view_access and space=no_access, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:172) PASSED Test: permissions resource hub document comment - if caller has levels company=no_access and space=comment_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:423) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=no_access on the comment thread, then expect code=404 (test/operately_web/api/mutations/add_reaction_test.exs:195) PASSED Test: permissions goal update comment - if caller has levels company=no_access, space=no_access, goal=reviewer on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:371) PASSED Test: permissions message comment - if caller has levels company=no_access, space=comment_access on the space, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:397) PASSED Test: permissions resource hub link comment - if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:473) PASSED Test: permissions resource hub link - if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:172) PASSED Test: permissions project check-in - if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:78) PASSED Test: permissions project retrospective comment - if caller has levels company=no_access, space=view_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:293) PASSED Test: permissions goal update comment - if caller has levels company=no_access, space=full_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:371) PASSED Test: permissions if caller has levels company=no_access, space=edit_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:219) PASSED Test: permissions project milestone comment - if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:319) PASSED Test: permissions resource hub link - if caller has levels company=no_access and space=view_access, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:172) PASSED Test: permissions resource hub document comment - if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:423) PASSED Test: permissions message comment - if caller has levels company=view_access, space=no_access on the space, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:397) PASSED Test: permissions resource hub file comment - if caller has levels company=no_access and space=view_access, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:448) PASSED Test: permissions resource hub file - if caller has levels company=view_access and space=no_access, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:149) PASSED Test: permissions if caller has levels company=no_access, space=full_access on the space, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:243) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=reviewer on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:219) PASSED Test: permissions resource hub document - if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:126) PASSED Test: permissions project check-in comment - if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:267) PASSED Test: permissions project milestone comment - if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:319) PASSED Test: permissions goal discussion comment - if caller has levels company=full_access, space=no_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:345) PASSED Test: permissions resource hub document - if caller has levels company=comment_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:126) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=no_access, project=view_access on the project, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:78) PASSED Test: permissions if caller has levels company=no_access, space=edit_access on the space, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:243) PASSED Test: permissions if caller has levels company=full_access, space=no_access on the space, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:243) PASSED Test: permissions project retrospective - if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:102) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:78) PASSED Test: permissions goal discussion comment - if caller has levels company=no_access, space=no_access, goal=no_access on the goal, then expect code=404 (test/operately_web/api/mutations/add_reaction_test.exs:345) PASSED Test: permissions project retrospective - if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:102) PASSED Test: permissions resource hub link comment - if caller has levels company=no_access and space=view_access, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:473) PASSED Test: permissions project check-in - if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:78) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:219) PASSED Test: permissions project retrospective - if caller has levels company=no_access, space=view_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:102) PASSED Test: permissions resource hub link comment - if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:473) PASSED Test: permissions project milestone comment - if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:319) PASSED Test: permissions goal discussion comment - if caller has levels company=edit_access, space=no_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:345) PASSED Test: permissions if caller has levels company=no_access, space=view_access, goal=no_access on the comment thread, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:195) PASSED Test: permissions project check-in comment - if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:267) PASSED Test: permissions resource hub file comment - if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:448) PASSED Test: permissions goal discussion comment - if caller has levels company=view_access, space=no_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:345) PASSED OperatelyWeb.Api.Mutations.AddFirstCompanyTest Test: add_first_company functionality allows company and admin account creation only once (test/operately_web/api/mutations/add_first_company_test.exs:32) PASSED Test: add_first_company functionality creates company and owner account (test/operately_web/api/mutations/add_first_company_test.exs:14) PASSED OperatelyWeb.Api.Queries.GetResourceHubFolderTest Test: permissions if caller has levels company=view_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_folder_test.exs:39) PASSED Test: permissions if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/queries/get_resource_hub_folder_test.exs:39) PASSED Test: get_resource_hub_test functionality include_path_to_folder (test/operately_web/api/queries/get_resource_hub_folder_test.exs:126) PASSED Test: permissions if caller has levels company=comment_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_folder_test.exs:39) PASSED Test: permissions if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_folder_test.exs:39) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_folder_test.exs:39) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_folder_test.exs:39) PASSED Test: permissions if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_folder_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_resource_hub_folder_test.exs:10) PASSED Test: get_resource_hub_test functionality include_nodes (test/operately_web/api/queries/get_resource_hub_folder_test.exs:80) PASSED Test: get_resource_hub_test functionality include_resource_hub (test/operately_web/api/queries/get_resource_hub_folder_test.exs:112) PASSED Test: permissions if caller has levels company=no_access and space=view_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_folder_test.exs:39) PASSED Test: permissions if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_folder_test.exs:39) PASSED Operately.Operations.ResourceHubLinkEditingTest Test: Creating link sends notifications to selected people (test/operately/operations/resource_hub_link_editing_test.exs:40) PASSED Test: Creating link sends notifications to everyone (test/operately/operations/resource_hub_link_editing_test.exs:20) PASSED Test: Person without permissions is not notified (test/operately/operations/resource_hub_link_editing_test.exs:60) PASSED Operately.Assignments.FilterLateAssignmentsTest Test: business_days_between/2 month boundary - Dec -> Jan (test/operately/assignments/filter_late_assignments_test.exs:32) PASSED Test: business_days_between/2 consecutive business days - Mon -> Tue (test/operately/assignments/filter_late_assignments_test.exs:12) PASSED Test: business_days_between/2 longer month boundary - Dec -> Jan (test/operately/assignments/filter_late_assignments_test.exs:36) PASSED Test: business_days_between/2 later dates return 0 (test/operately/assignments/filter_late_assignments_test.exs:24) PASSED Test: business_days_between/2 2 full weeks (test/operately/assignments/filter_late_assignments_test.exs:20) PASSED Test: business_days_between/2 start on weekend - Sat -> Tue (test/operately/assignments/filter_late_assignments_test.exs:28) PASSED Test: business_days_between/2 same date returns 0 (test/operately/assignments/filter_late_assignments_test.exs:7) PASSED Test: business_days_between/2 spanning weekend - Fri -> Mon (test/operately/assignments/filter_late_assignments_test.exs:16) PASSED OperatelyWeb.Api.Mutations.RemoveCompanyOwnerTest Test: security regular members can't remove admins (test/operately_web/api/mutations/remove_company_owner_test.exs:17) PASSED Test: security company owners can remove owners (test/operately_web/api/mutations/remove_company_owner_test.exs:31) PASSED Test: security it requires authentication (test/operately_web/api/mutations/remove_company_owner_test.exs:13) PASSED Test: security admins can't remove owners (test/operately_web/api/mutations/remove_company_owner_test.exs:24) PASSED Prosemirror2HtmlTest Test: mulitple nodes (test/prosemirror2html_test.exs:169) PASSED Test: multiple marks (test/prosemirror2html_test.exs:238) PASSED Test: bold mark (test/prosemirror2html_test.exs:218) PASSED Test: blobs (test/prosemirror2html_test.exs:261) PASSED Test: converts a a complex paragraph with various nodes and marks (test/prosemirror2html_test.exs:143) PASSED Test: paragraph (test/prosemirror2html_test.exs:198) PASSED Operately.Operations.GroupMembersPermissionsEditingTest Test: GroupMembersPermissionsEditing operation creates activity (test/operately/operations/group_members_permissions_editing_test.exs:54) PASSED Test: GroupMembersPermissionsEditing operation edits members' permissions (test/operately/operations/group_members_permissions_editing_test.exs:27) PASSED Operately.Operations.ProjectRetrospectiveEditingTest Test: ProjectRetrospectiveEditing operation doesn't update if there are no changes (test/operately/operations/project_retrospective_editing_test.exs:32) PASSED Test: ProjectRetrospectiveEditing operation edits retrospective (test/operately/operations/project_retrospective_editing_test.exs:22) PASSED Test: ProjectRetrospectiveEditing operation creates activity (test/operately/operations/project_retrospective_editing_test.exs:48) PASSED OperatelyWeb.Api.Queries.GetWorkMapTest Test: permissions - query nested items space_member has access to public_project, project1, project2 (test/operately_web/api/queries/get_work_map_test.exs:96) PASSED Test: permissions - query root items company_member has access to public_project (test/operately_web/api/queries/get_work_map_test.exs:45) PASSED Test: functionality filters by parent_goal_id (test/operately_web/api/queries/get_work_map_test.exs:274) PASSED Test: functionality returns hierarchical structure (test/operately_web/api/queries/get_work_map_test.exs:303) PASSED Test: permissions - query goals champion has access to all 6 goals including secret ones (test/operately_web/api/queries/get_work_map_test.exs:198) PASSED Test: functionality filters by owner_id (test/operately_web/api/queries/get_work_map_test.exs:288) PASSED Test: permissions - query nested items creator has access to public_project, project1, project2, secret_project (test/operately_web/api/queries/get_work_map_test.exs:96) PASSED Test: permissions - query goals company member has access to 2 public goals (test/operately_web/api/queries/get_work_map_test.exs:150) PASSED Test: permissions - query root items champion has access to public_project, project1, project2, secret_project (test/operately_web/api/queries/get_work_map_test.exs:45) PASSED Test: permissions - query root items creator has access to public_project, project1, project2, secret_project (test/operately_web/api/queries/get_work_map_test.exs:45) PASSED Test: permissions - query nested items company_member has access to public_project (test/operately_web/api/queries/get_work_map_test.exs:96) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_work_map_test.exs:8) PASSED Test: permissions - query goals space member has access to 4 public and internal goals (test/operately_web/api/queries/get_work_map_test.exs:167) PASSED Test: functionality filters by space_id (test/operately_web/api/queries/get_work_map_test.exs:254) PASSED Test: permissions - query goals creator has access to all 6 goals including secret ones (test/operately_web/api/queries/get_work_map_test.exs:198) PASSED Test: permissions - query root items space_member has access to public_project, project1, project2 (test/operately_web/api/queries/get_work_map_test.exs:45) PASSED Test: permissions - query nested items champion has access to public_project, project1, project2, secret_project (test/operately_web/api/queries/get_work_map_test.exs:96) PASSED Test: functionality returns empty list when no matching items exist (test/operately_web/api/queries/get_work_map_test.exs:246) PASSED OperatelyWeb.Api.Mutations.AddKeyResourceTest Test: permissions space members without edit access can't add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:74) PASSED Test: permissions company members without view access can't see a project (test/operately_web/api/mutations/add_key_resource_test.exs:27) PASSED Test: permissions reviewers can add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:144) PASSED Test: permissions space members with edit access can add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:83) PASSED Test: permissions contributors without edit access can't add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:105) PASSED Test: permissions company admins can add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:50) PASSED Test: permissions company members with edit access can add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:43) PASSED Test: permissions space members without view access can't see a project (test/operately_web/api/mutations/add_key_resource_test.exs:65) PASSED Test: security it requires authentication (test/operately_web/api/mutations/add_key_resource_test.exs:13) PASSED Test: permissions contributors with edit access can add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:117) PASSED Test: permissions champions can add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:128) PASSED Test: permissions company members without edit access can't add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:35) PASSED Test: permissions space managers can add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:91) PASSED Test: add_key_resource functionality adds key resource (test/operately_web/api/mutations/add_key_resource_test.exs:164) PASSED OperatelyWeb.Api.Mutations.EditCompanyTest Test: authorization company members can't edit (test/operately_web/api/mutations/edit_company_test.exs:19) PASSED Test: functionality it changes the company name (test/operately_web/api/mutations/edit_company_test.exs:43) PASSED Test: authorization company owner can edit (test/operately_web/api/mutations/edit_company_test.exs:29) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_company_test.exs:5) PASSED Test: authorization company admin can edit (test/operately_web/api/mutations/edit_company_test.exs:24) PASSED OperatelyWeb.Api.Queries.GetProjectCheckInTest Test: permissions reviewers have access (test/operately_web/api/queries/get_project_check_in_test.exs:75) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_project_check_in_test.exs:29) PASSED Test: get_project_check_in functionality include_potential_subscribers (test/operately_web/api/queries/get_project_check_in_test.exs:185) PASSED Test: get_project_check_in functionality include_unread_notifications (test/operately_web/api/queries/get_project_check_in_test.exs:102) PASSED Test: get_project_check_in functionality include_reactions (test/operately_web/api/queries/get_project_check_in_test.exs:133) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_project_check_in_test.exs:51) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_project_check_in_test.exs:43) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_project_check_in_test.exs:59) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_project_check_in_test.exs:15) PASSED Test: get_project_check_in functionality include_project (test/operately_web/api/queries/get_project_check_in_test.exs:156) PASSED Test: get_project_check_in functionality include_subscriptions_list (test/operately_web/api/queries/get_project_check_in_test.exs:172) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_project_check_in_test.exs:36) PASSED Test: get_project_check_in functionality include_author (test/operately_web/api/queries/get_project_check_in_test.exs:118) PASSED OperatelyWeb.Api.Mutations.ArchiveProjectTest Test: permissions space members who don't have full access can't archive a project (test/operately_web/api/mutations/archive_project_test.exs:74) PASSED Test: permissions company members who don't have view access can't see a project (test/operately_web/api/mutations/archive_project_test.exs:27) PASSED Test: permissions reviewers can archive a project (test/operately_web/api/mutations/archive_project_test.exs:144) PASSED Test: permissions space members who have full access can archive a project (test/operately_web/api/mutations/archive_project_test.exs:83) PASSED Test: permissions contributors who don't have full access can't archive a project (test/operately_web/api/mutations/archive_project_test.exs:105) PASSED Test: permissions company admins can archive a project (test/operately_web/api/mutations/archive_project_test.exs:50) PASSED Test: permissions company members who have full access can archive a project (test/operately_web/api/mutations/archive_project_test.exs:43) PASSED Test: permissions space members who don't have view access can't see a project (test/operately_web/api/mutations/archive_project_test.exs:65) PASSED Test: security it requires authentication (test/operately_web/api/mutations/archive_project_test.exs:13) PASSED Test: permissions contributors who have full access can archive a project (test/operately_web/api/mutations/archive_project_test.exs:117) PASSED Test: permissions champions can archive a project (test/operately_web/api/mutations/archive_project_test.exs:128) PASSED Test: permissions company members who don't have full access can't archive a project (test/operately_web/api/mutations/archive_project_test.exs:35) PASSED Test: permissions space managers can archive a project (test/operately_web/api/mutations/archive_project_test.exs:91) PASSED Test: archive_project functionality archives project (test/operately_web/api/mutations/archive_project_test.exs:164) PASSED Operately.GoalsTest Test: goals change_goal/1 returns a goal changeset (test/operately/goals_test.exs:77) PASSED Test: goals get_goal!/1 returns the goal with given id (test/operately/goals_test.exs:27) PASSED Test: goal deletion when goal is deleted, its discussions are also deleted (test/operately/goals_test.exs:138) PASSED Test: goal deletion given goal has child goal, it cannot be deleted (test/operately/goals_test.exs:88) PASSED Test: goal deletion given child goal and project are deleted first, goal can be deleted (test/operately/goals_test.exs:104) PASSED Test: goals update_goal/2 with valid data updates the goal (test/operately/goals_test.exs:62) PASSED Test: goals create_goal/2 with invalid data returns error changeset (test/operately/goals_test.exs:51) PASSED Test: goals update_goal/2 with invalid data returns error changeset (test/operately/goals_test.exs:69) PASSED Test: goals list_goals/0 returns all goals (test/operately/goals_test.exs:23) PASSED Test: goal deletion when goal is deleted, its targets are also deleted (test/operately/goals_test.exs:120) PASSED Test: goal deletion when goal is deleted, its discussions', check-ins', comments' and reactions are also deleted (test/operately/goals_test.exs:172) PASSED Test: goal deletion when goal is deleted, its check-ins are also deleted (test/operately/goals_test.exs:129) PASSED Test: goals create_goal/2 with valid data creates a goal (test/operately/goals_test.exs:31) PASSED Test: goal deletion given goal has child project, it cannot be deleted (test/operately/goals_test.exs:96) PASSED Test: goal deletion when goal is deleted, its discussions' and check-ins' comments are also deleted (test/operately/goals_test.exs:152) PASSED Operately.Operations.GoalClosingTest Test: GoalClosing operation creates activity, thread and notification (test/operately/operations/goal_closing_test.exs:45)10:31:01.722 [error] Failed to send email 10:31:01.725 [error] ** (FunctionClauseError) no function clause matching in Prosemirror2Html.convert/2 (operately 0.1.0) lib/prosemirror2html.ex:12: Prosemirror2Html.convert(%{}, %Prosemirror2Html.Options{domain: "http://localhost:4002", highlights: %{"bgBlue" => "background-color: #bfdbfe;", "bgGreen" => "background-color: #bbf7d0;", "bgOrange" => "background-color: #fed7aa;", "bgPurple" => "background-color: #e9d5ff;", "bgRed" => "background-color: #fecaca;", "bgYellow" => "background-color: #fef08a;", "textBlue" => "color: #3b82f6; background-color: transparent;", "textGreen" => "color: #22c55e; background-color: transparent;", "textOrange" => "color: #f97316; background-color: transparent;", "textPurple" => "color: #a855f7; background-color: transparent;", "textRed" => "color: #ef4444; background-color: transparent;", "textYellow" => "color: #eab308; background-color: transparent;"}}) (operately 0.1.0) lib/operately_email/templates.ex:64: OperatelyEmail.Templates.rich_text/1 (operately 0.1.0) lib/operately_email/templates/goal_closing.html.eex:16: OperatelyEmail.Templates."goal_closing.html"/1 (phoenix_view 2.0.4) lib/phoenix_view.ex:401: Phoenix.View.render_within/3 (phoenix_view 2.0.4) lib/phoenix_view.ex:577: Phoenix.View.render_to_iodata/3 (phoenix_view 2.0.4) lib/phoenix_view.ex:584: Phoenix.View.render_to_string/3 (operately 0.1.0) lib/operately_email/mailers/notification_mailer.ex:37: OperatelyEmail.Mailers.NotificationMailer.render/2 (operately 0.1.0) lib/operately/notifications/email_worker.ex:13: Operately.Notifications.EmailWorker.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:129: Oban.Queue.Executor.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:74: Oban.Queue.Executor.call/1 (oban 2.15.2) lib/oban/engines/inline.ex:97: Oban.Engines.Inline.execute_job/2 (oban 2.15.2) lib/oban/engines/inline.ex:37: Oban.Engines.Inline.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:181: anonymous fn/4 in Oban.Engine.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:314: anonymous fn/3 in Oban.Engine.with_span/4 (telemetry 1.3.0) /home/dev/app/app/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (ecto 3.12.3) lib/ecto/multi.ex:897: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1049: DBConnection.transaction/3 PASSED Test: GoalClosing operation updates goal (test/operately/operations/goal_closing_test.exs:31) PASSED OperatelyWeb.Api.Queries.GetProjectTest Test: permissions champions have access (test/operately_web/api/queries/get_project_test.exs:70) PASSED Test: security it is not possible to get a project from another company (test/operately_web/api/queries/get_project_test.exs:19) PASSED Test: get_project functionality include_champion (test/operately_web/api/queries/get_project_test.exs:193) PASSED Test: get_project functionality include_permissions (test/operately_web/api/queries/get_project_test.exs:222) PASSED Test: get_project functionality include_access_levels (test/operately_web/api/queries/get_project_test.exs:244) PASSED Test: get_project functionality include_potential_subscribers (test/operately_web/api/queries/get_project_test.exs:283) PASSED Test: get_project functionality include_archived (test/operately_web/api/queries/get_project_test.exs:214) PASSED Test: get_project functionality include_retrospective (test/operately_web/api/queries/get_project_test.exs:145) PASSED Test: get_project functionality include_reviewer (test/operately_web/api/queries/get_project_test.exs:203) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_project_test.exs:86) PASSED Test: get_project functionality include_milestones (test/operately_web/api/queries/get_project_test.exs:313) PASSED Test: get_project functionality returns 400 if id is not provided (test/operately_web/api/queries/get_project_test.exs:113) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_project_test.exs:54) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_project_test.exs:47) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_project_test.exs:62) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_project_test.exs:15) PASSED Test: get_project functionality include_unread_notifications (test/operately_web/api/queries/get_project_test.exs:117) PASSED Test: get_project functionality include_goal (test/operately_web/api/queries/get_project_test.exs:177) PASSED Test: get_project functionality include_space (test/operately_web/api/queries/get_project_test.exs:134) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_project_test.exs:40) PASSED Test: get_project functionality include_contributors_access_levels (test/operately_web/api/queries/get_project_test.exs:263) PASSED Test: get_project functionality get a project with nothing included (test/operately_web/api/queries/get_project_test.exs:106) PASSED Test: get_project functionality include_contributors (test/operately_web/api/queries/get_project_test.exs:157) PASSED Test: get_project functionality include_key_resources (test/operately_web/api/queries/get_project_test.exs:232) PASSED OperatelyWeb.Api.Mutations.AddCompanyMemberTest Test: add_company_member functionality email can be used to create one and only one account per company (test/operately_web/api/mutations/add_company_member_test.exs:57) PASSED Test: security member account without full access can't invite other members (test/operately_web/api/mutations/add_company_member_test.exs:17) PASSED Test: add_company_member functionality email can't be blank (test/operately_web/api/mutations/add_company_member_test.exs:43) PASSED Test: add_company_member functionality email already taken (test/operately_web/api/mutations/add_company_member_test.exs:36) PASSED Test: add_company_member functionality full_name can't be blank (test/operately_web/api/mutations/add_company_member_test.exs:50) PASSED Test: security it requires authentication (test/operately_web/api/mutations/add_company_member_test.exs:13) PASSED Test: add_company_member functionality creates first-time-access token for new member (test/operately_web/api/mutations/add_company_member_test.exs:30) PASSED OperatelyWeb.Api.Queries.GetGoalsTest Test: permissions reviewers have access (test/operately_web/api/queries/get_goals_test.exs:122) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_goals_test.exs:28) PASSED Test: get_goals functionality include_last_check_in (test/operately_web/api/queries/get_goals_test.exs:143) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_goals_test.exs:89) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_goals_test.exs:65) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_goals_test.exs:105) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_goals_test.exs:13) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_goals_test.exs:48) PASSED Operately.Data.Change022CreateGoalBindingsTest Test: creates access bindings between goals and spaces (test/operately/data/change_022_create_goal_bindings_test.exs:50) PASSED Test: creates access bindings between goals and companies (test/operately/data/change_022_create_goal_bindings_test.exs:32) PASSED Test: creates access bindings between goals and champions and reviewers (test/operately/data/change_022_create_goal_bindings_test.exs:68) PASSED OperatelyWeb.Api.Mutations.PostProjectCheckInTest Test: permissions if caller has levels company=no_access, space=view_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/post_project_check_in_test.exs:46) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/post_project_check_in_test.exs:46) PASSED Test: subscriptions to notifications creates subscription list for project check-in (test/operately_web/api/mutations/post_project_check_in_test.exs:99) PASSED Test: subscriptions to notifications doesn't create repeated subscription (test/operately_web/api/mutations/post_project_check_in_test.exs:140) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_project_check_in_test.exs:46) PASSED Test: subscriptions to notifications adds mentioned people to subscription list (test/operately_web/api/mutations/post_project_check_in_test.exs:119) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/post_project_check_in_test.exs:46) PASSED Test: permissions if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_project_check_in_test.exs:46) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/post_project_check_in_test.exs:46) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/post_project_check_in_test.exs:46) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/post_project_check_in_test.exs:46) PASSED Test: security it requires authentication (test/operately_web/api/mutations/post_project_check_in_test.exs:15) PASSED Test: permissions if caller has levels company=view_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/post_project_check_in_test.exs:46) PASSED Test: post_project_check_in functionality creates project check-in (test/operately_web/api/mutations/post_project_check_in_test.exs:72) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/post_project_check_in_test.exs:46) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=view_access on the project, then expect code=403 (test/operately_web/api/mutations/post_project_check_in_test.exs:46) PASSED Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_project_check_in_test.exs:46) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_project_check_in_test.exs:46) PASSED Operately.Activities.EncoderTest Test: properly encodes datetime structs (test/operately/activities/encoder_test.exs:40) PASSED Test: removes all un-encodable things from the structure (test/operately/activities/encoder_test.exs:4) PASSED OperatelyWeb.Api.Queries.GetGoalProgressUpdatesTest Test: permissions reviewers have access (test/operately_web/api/queries/get_goal_progress_updates_test.exs:82) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_goal_progress_updates_test.exs:28) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_goal_progress_updates_test.exs:54) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_goal_progress_updates_test.exs:45) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_goal_progress_updates_test.exs:65) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_goal_progress_updates_test.exs:13) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_goal_progress_updates_test.exs:35) PASSED Operately.AccessBindingsTest Test: access_bindings delete_binding/1 deletes the binding (test/operately/access/bindings_test.exs:78) PASSED Test: access_bindings get_binding!/1 returns the binding with given id (test/operately/access/bindings_test.exs:34) PASSED Test: access_bindings change_binding/1 returns a binding changeset (test/operately/access/bindings_test.exs:87) PASSED Test: access_bindings update_binding/2 with valid data updates the binding (test/operately/access/bindings_test.exs:58) PASSED Test: access_bindings create_binding/1 with invalid data returns error changeset (test/operately/access/bindings_test.exs:54) PASSED Test: access_bindings update_binding/2 with invalid data returns error changeset (test/operately/access/bindings_test.exs:69) PASSED Test: access_bindings list_bindings/0 returns all bindings (test/operately/access/bindings_test.exs:22) PASSED Test: access_bindings create_binding/1 with valid data creates a binding (test/operately/access/bindings_test.exs:43) PASSED OperatelyWeb.Api.Mutations.EditGoalTimeframeTest Test: permissions space members without edit access can't edit a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:68) PASSED Test: permissions company members without view access can't see a goal (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:26) PASSED Test: permissions space members with edit access can edit a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:76) PASSED Test: permissions champions can edit a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:97) PASSED Test: permissions company owner can edit a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:47) PASSED Test: permissions company members with edit access can edit a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:40) PASSED Test: permissions space members without view access can't see a goal (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:60) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:12) PASSED Test: permissions reviewers can edit a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:112) PASSED Test: edit_goal_timeframe functionality edits a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:131) PASSED Test: permissions company members without edit access can't edit a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:33) PASSED Test: permissions space managers can edit a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:84) PASSED Operately.Data.Change035AddSpaceToProjectActivitiesTest Test: project_check_in_commented migration doesn't delete existing data in activity content (test/operately/data/change_035_add_space_to_project_activities_test.exs:63) PASSED Test: project_check_in_submitted and project_check_in_acknowledged migration doesn't delete existing data in activity content (test/operately/data/change_035_add_space_to_project_activities_test.exs:20) PASSED Operately.Blobs.TokensTest Test: returns error on garbage data (test/operately/blobs/tokens_test.exs:12) PASSED Test: encryption and validation (test/operately/blobs/tokens_test.exs:6) PASSED Test: returns error even for base64 valid garbage (test/operately/blobs/tokens_test.exs:18) PASSED OperatelyWeb.Api.Queries.GetSpaceTest Test: get_space functionality get_space (test/operately_web/api/queries/get_space_test.exs:75) PASSED Test: permissions member has access to company space (test/operately_web/api/queries/get_space_test.exs:26) PASSED Test: get_space functionality get_space when not a member (test/operately_web/api/queries/get_space_test.exs:93) PASSED Test: get_space functionality include_members (test/operately_web/api/queries/get_space_test.exs:132) PASSED Test: permissions member has access to space they are NOT part of (test/operately_web/api/queries/get_space_test.exs:51) PASSED Test: permissions members has access to space they are part of (test/operately_web/api/queries/get_space_test.exs:42) PASSED Test: get_space functionality space does not exist (test/operately_web/api/queries/get_space_test.exs:70) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_space_test.exs:13) PASSED Test: get_space functionality include_access_levels (test/operately_web/api/queries/get_space_test.exs:154) PASSED Test: get_space functionality include_potential_subscribers (test/operately_web/api/queries/get_space_test.exs:167) PASSED Test: permissions member doesn't have access to space they are not part of (test/operately_web/api/queries/get_space_test.exs:35) PASSED Test: get_space functionality include_unread_notifications (test/operately_web/api/queries/get_space_test.exs:115) PASSED Operately.CompaniesTest Test: companies change_company/1 returns a company changeset (test/operately/companies_test.exs:57) PASSED Test: companies get_company!/1 returns the company with given id (test/operately/companies_test.exs:22) PASSED Test: companies update_company/2 with valid data updates the company (test/operately/companies_test.exs:40) PASSED Test: companies create_company/1 with invalid data returns error changeset (test/operately/companies_test.exs:34) PASSED Test: companies update_company/2 with invalid data returns error changeset (test/operately/companies_test.exs:49) PASSED Test: companies list_companies/0 returns all companies (test/operately/companies_test.exs:17) PASSED Test: companies create_company/1 with valid data creates a company (test/operately/companies_test.exs:27) PASSED OperatelyWeb.Api.Mutations.EditProjectPermissionsTest Test: permissions space members without full access can't edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:68) PASSED Test: permissions company members without view access can't see a project (test/operately_web/api/mutations/edit_project_permissions_test.exs:26) PASSED Test: permissions reviewers can edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:134) PASSED Test: permissions space members with full access can edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:76) PASSED Test: permissions contributors without full access can't edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:97) PASSED Test: permissions company owners can edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:47) PASSED Test: permissions company members with full access can edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:40) PASSED Test: permissions space members without view access can't see a project (test/operately_web/api/mutations/edit_project_permissions_test.exs:60) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_project_permissions_test.exs:12) PASSED Test: permissions contributors with full access can edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:108) PASSED Test: permissions champions can edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:119) PASSED Test: permissions company members without full access can't edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:33) PASSED Test: permissions space managers can edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:84) PASSED Test: edit_project_permissions functionality edits project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:153) PASSED OperatelyWeb.Api.Mutations.RemoveCompanyAdminTest Test: permissions company members without full access can't add admins (test/operately_web/api/mutations/remove_company_admin_test.exs:26) PASSED Test: remove_company_admin functionality removes admin (test/operately_web/api/mutations/remove_company_admin_test.exs:60) PASSED Test: permissions admins from other companies are not found (test/operately_web/api/mutations/remove_company_admin_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/mutations/remove_company_admin_test.exs:11) PASSED Test: permissions company admins can't remove other admins (test/operately_web/api/mutations/remove_company_admin_test.exs:34) PASSED OperatelyWeb.Api.Queries.ListResourceHubContentTest Test: permissions if caller has levels company=view_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_test.exs:39) PASSED Test: permissions if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/queries/get_resource_hub_test.exs:39) PASSED Test: permissions if caller has levels company=comment_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_test.exs:39) PASSED Test: permissions if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_test.exs:39) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_test.exs:39) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_test.exs:39) PASSED Test: permissions if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_resource_hub_test.exs:10) PASSED Test: get_resource_hub functionality include_nodes (test/operately_web/api/queries/get_resource_hub_test.exs:73) PASSED Test: get_resource_hub functionality include_space (test/operately_web/api/queries/get_resource_hub_test.exs:99) PASSED Test: permissions if caller has levels company=no_access and space=view_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_test.exs:39) PASSED Test: permissions if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_test.exs:39) PASSED OperatelyWeb.Api.Mutations.EditSubscriptionsListTest Test: permissions if caller has levels company=no_access, space=view_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:45) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:45) PASSED Test: edit_subscriptions_list functionality adds new subscriptions (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:110) PASSED Test: edit_subscriptions_list functionality doesn't cancel all subscriptions (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:163) PASSED Test: edit_subscriptions_list functionality adds and cancels subscriptions (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:145) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:45) PASSED Test: edit_subscriptions_list functionality cancels subscriptions (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:125) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:45) PASSED Test: permissions if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:45) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:45) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:45) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:45) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:14) PASSED Test: permissions if caller has levels company=view_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:45) PASSED Test: edit_subscriptions_list functionality edits send_to_everyone field (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:85) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:45) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=view_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:45) PASSED Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:45) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:45) PASSED Test: edit_subscriptions_list functionality reactivates canceled subscriptions (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:181) PASSED Operately.Messages.MessageTest Test: creating a draft message state is draft (test/operately/messages/message_test.exs:53) PASSED Test: updating state to published published_at is set (test/operately/messages/message_test.exs:89) PASSED Test: updating state to published state transitions to published (test/operately/messages/message_test.exs:85) PASSED Test: creating a message published_at is set (test/operately/messages/message_test.exs:30) PASSED Test: creating a draft message published_at is nil (test/operately/messages/message_test.exs:57) PASSED Operately.Operations.TaskStatusChangeTest Test: TaskStatusChange operation creates activity (test/operately/operations/task_status_change_test.exs:47) PASSED Test: TaskStatusChange operation updates task and milestone (test/operately/operations/task_status_change_test.exs:27) PASSED OperatelyWeb.Api.Queries.GetCompanyTest Test: security suspended people don't have access (test/operately_web/api/queries/get_company_test.exs:11) PASSED Test: get_company functionality include_admins (test/operately_web/api/queries/get_company_test.exs:52) PASSED Test: get_company functionality include_people (test/operately_web/api/queries/get_company_test.exs:44) PASSED Test: get_company functionality include_owners (test/operately_web/api/queries/get_company_test.exs:60) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_company_test.exs:5) PASSED Test: get_company functionality only company (test/operately_web/api/queries/get_company_test.exs:35) PASSED OperatelyWeb.Api.Mutations.EditDiscussionTest Test: space permissions space member without edit access can't edit discussion (test/operately_web/api/mutations/edit_discussion_test.exs:81) PASSED Test: company permissions company member can see only their company (test/operately_web/api/mutations/edit_discussion_test.exs:28) PASSED Test: space permissions space members with edit access can edit discussion (test/operately_web/api/mutations/edit_discussion_test.exs:89) PASSED Test: edit_discussion functionality edits discussion (test/operately_web/api/mutations/edit_discussion_test.exs:119) PASSED Test: company permissions company owners can edit discussion (test/operately_web/api/mutations/edit_discussion_test.exs:51) PASSED Test: company permissions company members with edit access can edit discussion (test/operately_web/api/mutations/edit_discussion_test.exs:43) PASSED Test: space permissions company member without view access can't see space (test/operately_web/api/mutations/edit_discussion_test.exs:74) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_discussion_test.exs:15) PASSED Test: edit_discussion functionality mentioned people are added to subscriptions list (test/operately_web/api/mutations/edit_discussion_test.exs:126) PASSED Test: company permissions company members without edit access can't edit discussion (test/operately_web/api/mutations/edit_discussion_test.exs:36) PASSED Test: space permissions company owner can edit discussion (test/operately_web/api/mutations/edit_discussion_test.exs:97) PASSED OperatelyWeb.Api.Queries.GetDiscussionsTest Test: get_discussions functionality with no includes (test/operately_web/api/queries/get_discussions_test.exs:100) PASSED Test: permissions company space - company members have access (test/operately_web/api/queries/get_discussions_test.exs:25) PASSED Test: get_discussions functionality include_author (test/operately_web/api/queries/get_discussions_test.exs:111) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_discussions_test.exs:55) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_discussions_test.exs:45) PASSED Test: get_discussions functionality discussions are sorted by published_at desc (test/operately_web/api/queries/get_discussions_test.exs:84) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_discussions_test.exs:12) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_discussions_test.exs:35) PASSED Test: get_discussions functionality include_comments_count (test/operately_web/api/queries/get_discussions_test.exs:121) PASSED Operately.Data.Change045UpdateResourceHubActivitiesAccessContextTest Test: updates access context of existing resource hub activities (test/operately/data/change_045_update_resource_hub_activities_access_context_test.exs:19) PASSED Operately.DemoTest Test: milestone creation (test/operately/demo_test.exs:14)"Adding company to resources" "Adding company_space to resources" "Adding owner to resources" "Adding alpha to resources" PASSED Test: it creates a demo company without failures (test/operately/demo_test.exs:6)"Adding company to resources" "Adding company_space to resources" "Adding owner to resources" "Adding bob_williams to resources" "Adding martin_smith to resources" "Adding david_brown to resources" "Adding emily_davis to resources" "Adding frank_miller to resources" "Adding grace_wilson to resources" "Adding henry_taylor to resources" "Adding ivy_anderson to resources" "Adding jack_thomas to resources" "Adding karen_martinez to resources" "Adding liam_harris to resources" "Adding mia_clark to resources" "Adding noah_lewis to resources" "Adding olivia_hall to resources" "Adding paul_young to resources" "Adding quinn_walker to resources" "Adding rachel_king to resources" "Adding tina_scott to resources" "Adding walter_baker to resources" "Adding product_space to resources" "Adding people_space to resources" "Adding marketing_space to resources" "Adding finance_space to resources" "Adding accelerate_user_growth to resources" "Adding increase_user_acquisition to resources" "Adding optimize_roi_of_ads to resources" "Adding get_more_users_through_word_of_mouth to resources" "Adding expand_into_new_markets to resources" "Adding improve_product to resources" "Adding enhance_product_functionality to resources" "Adding scale_up_company to resources" "Adding document_core_business_processes to resources" "Adding expand_team_capabilities to resources" "Adding ensure_financial_stability to resources" "Adding refine_ad_targeting to resources" "Adding implement_in_app_referral_program to resources" "Adding conduct_market_research_germany to resources" "Adding develop_spanish_localization to resources" "Adding develop_collaborative_features to resources" "Adding create_process_templates to resources" "Adding hire_ux_designer to resources" "Adding hire_customer_support to resources" "Adding prepare_series_a to resources" "Adding market_expansion_update to resources" "Adding learning_development_launch to resources" "Adding collaborative_features_beta to resources" "Adding welcome_tina_scott to resources" "Adding quarterly_company_update to resources" "Adding product_development_playbook to resources" "Adding technical_architecture_overview to resources" "Adding brand_guidelines to resources" "Adding market_expansion_strategy to resources" "Adding employee_handbook to resources" "Adding onboarding_process_guide to resources" "Adding financial_controls_handbook to resources" PASSED Test: goal creation (test/operately/demo_test.exs:46)"Adding company to resources" "Adding company_space to resources" "Adding owner to resources" "Adding yearly_goal to resources" "Adding quarterly_goal to resources" PASSED OperatelyWeb.Api.Mutations.NewInvitationTokenTest Test: new_invitation_token functionality no invitation associated with member (test/operately_web/api/mutations/new_invitation_token_test.exs:59) PASSED Test: permissions if caller has levels company=view_access, then expect code=403 (test/operately_web/api/mutations/new_invitation_token_test.exs:24) PASSED Test: permissions if caller has levels company=full_access, then expect code=200 (test/operately_web/api/mutations/new_invitation_token_test.exs:24) PASSED Test: permissions if caller has levels company=edit_access, then expect code=403 (test/operately_web/api/mutations/new_invitation_token_test.exs:24) PASSED Test: new_invitation_token functionality new invitation token is issued (test/operately_web/api/mutations/new_invitation_token_test.exs:52) PASSED Test: security it requires authentication (test/operately_web/api/mutations/new_invitation_token_test.exs:8) PASSED Test: permissions if caller has levels company=comment_access, then expect code=403 (test/operately_web/api/mutations/new_invitation_token_test.exs:24) PASSED OperatelyWeb.Api.Mutations.UpdateTaskTest Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_task_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/update_task_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_task_test.exs:40) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_task_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/update_task_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/update_task_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/update_task_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/mutations/update_task_test.exs:12) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_task_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/update_task_test.exs:40) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/update_task_test.exs:40) PASSED OperatelyWeb.Api.Mutations.UpdateTaskStatusTest Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_task_status_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/update_task_status_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_task_status_test.exs:40) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_task_status_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/update_task_status_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/update_task_status_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/update_task_status_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/mutations/update_task_status_test.exs:12) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_task_status_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/update_task_status_test.exs:40) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/update_task_status_test.exs:40) PASSED Operately.Data.Change029CreateSubscriptionsListForMessagesTest Test: creates subscriptions list for existing messages (test/operately/data/change_029_create_subscriptions_list_for_messages_test.exs:19) PASSED OperatelyWeb.Api.Mutations.ConnectGoalToProjectTest Test: permissions space members without edit access can't connect goal to project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:78) PASSED Test: permissions company members without view access can't see a project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:27) PASSED Test: permissions reviewers can connect goal to project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:154) PASSED Test: permissions space members with edit access can connect goal to project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:88) PASSED Test: permissions contributors without edit access can't connect goal to project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:112) PASSED Test: permissions company owners can connect goal to project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:53) PASSED Test: permissions company members with edit access can connect goal to project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:45) PASSED Test: permissions space members without view access can't see a project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:68) PASSED Test: security it requires authentication (test/operately_web/api/mutations/connect_goal_to_project_test.exs:13) PASSED Test: permissions contributors with edit access can connect goal to project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:125) PASSED Test: permissions champions can connect goal to project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:137) PASSED Test: permissions company members without edit access can't connect goal to project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:36) PASSED Test: permissions space managers can connect goal to project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:97) PASSED Test: connect_goal_to_project functionality connect goal (test/operately_web/api/mutations/connect_goal_to_project_test.exs:175) PASSED Operately.Operations.TaskAddingTest Test: TaskAdding operation creates activity (test/operately/operations/task_adding_test.exs:45) PASSED Test: TaskAdding operation creates task (test/operately/operations/task_adding_test.exs:28) PASSED Operately.Operations.ProjectContributorRemovedTest Test: ProjectContributorRemoved operation deletes access binding (test/operately/operations/project_contributor_removed_test.exs:43) PASSED Test: ProjectContributorRemoved operation deletes contributor (test/operately/operations/project_contributor_removed_test.exs:29) PASSED Test: ProjectContributorRemoved operation creates activity (test/operately/operations/project_contributor_removed_test.exs:54) PASSED Operately.Operations.GoalEditingTest Test: GoalEditing operation updates company space goal (test/operately/operations/goal_editing_test.exs:78) PASSED Test: GoalEditing operation updates goal's bindings to champion and reviewer with tags (test/operately/operations/goal_editing_test.exs:122) PASSED Test: GoalEditing operation updates goal's bindings to space (test/operately/operations/goal_editing_test.exs:110) PASSED Test: GoalEditing operation creates activity and notification (test/operately/operations/goal_editing_test.exs:160) PASSED Test: GoalEditing operation updates goal (test/operately/operations/goal_editing_test.exs:54) PASSED Test: GoalEditing operation updates goal's bindings to company (test/operately/operations/goal_editing_test.exs:93) PASSED Operately.Operations.ResourceHubLinkCreatingTest Test: Creating link sends notifications to selected people (test/operately/operations/resource_hub_link_creating_test.exs:41) PASSED Test: Creating link sends notifications to everyone (test/operately/operations/resource_hub_link_creating_test.exs:21) PASSED Test: Person without permissions is not notified (test/operately/operations/resource_hub_link_creating_test.exs:61) PASSED Operately.Operations.GoalCreationTest Test: GoalCreation operation adds tags to reviewer's and champion's bindings (test/operately/operations/goal_creation_test.exs:112) PASSED Test: GoalCreation operation creates targets (test/operately/operations/goal_creation_test.exs:47) PASSED Test: GoalCreation operation creates activity and notification (test/operately/operations/goal_creation_test.exs:126) PASSED Test: GoalCreation operation creates bindings to space when it's company space (test/operately/operations/goal_creation_test.exs:87) PASSED Test: GoalCreation operation creates bindings to space (test/operately/operations/goal_creation_test.exs:76) PASSED Test: GoalCreation operation creates bindings to reviewer and champion (test/operately/operations/goal_creation_test.exs:101) PASSED Test: GoalCreation operation creates goal and context (test/operately/operations/goal_creation_test.exs:38) PASSED Test: GoalCreation operation creates bindings to company (test/operately/operations/goal_creation_test.exs:63) PASSED OperatelyWeb.Api.Plugs.RequireAuthenticatedAccountTest Test: it returns the connection if the current account is not nil (test/operately_web/api/plugs/require_authenticated_account_test.exs:16) PASSED Test: it returns 401 if the current account is nil (test/operately_web/api/plugs/require_authenticated_account_test.exs:5) PASSED Test: except option it skips authentication if the tuple is in the except list (test/operately_web/api/plugs/require_authenticated_account_test.exs:28) PASSED Operately.Goals.TimeframeTest Test: can be constructed from a Timeframe struct (test/operately/goals/timeframe_test.exs:65) PASSED Test: changeset/1 validates type (test/operately/goals/timeframe_test.exs:20) PASSED Test: convert_old_timeframe (test/operately/goals/timeframe_test.exs:75) PASSED Test: changeset/1 validates quarter dates (test/operately/goals/timeframe_test.exs:34) PASSED Test: changeset/1 validates year dates (test/operately/goals/timeframe_test.exs:28) PASSED Test: changeset/1 validates month dates (test/operately/goals/timeframe_test.exs:46) PASSED Test: changeset/1 with valid data returns no errors (test/operately/goals/timeframe_test.exs:6) PASSED Test: changeset/1 validates start date is before end date (test/operately/goals/timeframe_test.exs:24) PASSED Operately.Operations.ProjectPermissionsEditingTest Test: ProjectPermissionsEditing operation edits bindings to company space (test/operately/operations/project_permissions_editing_test.exs:50) PASSED Test: ProjectPermissionsEditing operation edits bindings (test/operately/operations/project_permissions_editing_test.exs:30) PASSED Test: ProjectPermissionsEditing operation creates activity (test/operately/operations/project_permissions_editing_test.exs:66) PASSED OperatelyWeb.Api.Queries.GetUnreadNotificationCountTest Test: get_unread_notification_count functionality returns the number of unread notifications (test/operately_web/api/queries/get_unread_notification_count_test.exs:16) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_unread_notification_count_test.exs:8) PASSED OperatelyWeb.Api.Queries.SearchPeopleTest Test: search_people functionality orders by the best prefix match on full name (test/operately_web/api/queries/search_people_test.exs:68) PASSED Test: security returns people only from the company (test/operately_web/api/queries/search_people_test.exs:15) PASSED Test: search_people functionality ignoring people by id (test/operately_web/api/queries/search_people_test.exs:77) PASSED Test: search_people functionality searches people by title (test/operately_web/api/queries/search_people_test.exs:52) PASSED Test: search_people functionality searches people by name (test/operately_web/api/queries/search_people_test.exs:43) PASSED Test: search_people functionality returns up to 10 matches (test/operately_web/api/queries/search_people_test.exs:61) PASSED Test: security it requires authentication (test/operately_web/api/queries/search_people_test.exs:11) PASSED Test: security suspended people don't have access (test/operately_web/api/queries/search_people_test.exs:26) PASSED Test: search_people functionality excludes suspended people (test/operately_web/api/queries/search_people_test.exs:85) PASSED Operately.Companies.ShortIdTest Test: conversion (test/operately/companies/short_id_test.exs:24) PASSED Test: generate (test/operately/companies/short_id_test.exs:8) PASSED OperatelyWeb.Api.Queries.GetTaskTest Test: permissions reviewers have access (test/operately_web/api/queries/get_task_test.exs:75) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_task_test.exs:29) PASSED Test: get_task functionality get a task with nothing included (test/operately_web/api/queries/get_task_test.exs:101) PASSED Test: get_task functionality include_milestone (test/operately_web/api/queries/get_task_test.exs:119) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_task_test.exs:51) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_task_test.exs:43) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_task_test.exs:59) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_task_test.exs:15) PASSED Test: get_task functionality include_project (test/operately_web/api/queries/get_task_test.exs:131) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_task_test.exs:36) PASSED Test: get_task functionality include_assignees (test/operately_web/api/queries/get_task_test.exs:108) PASSED OperatelyWeb.Api.Mutations.EditGoalProgressUpdateTest Test: edit_goal_progress_update functionality mentioned people are added to subscriptions list (test/operately_web/api/mutations/edit_goal_progress_update_test.exs:82) PASSED Test: permissions company members without view access can't see goal update (test/operately_web/api/mutations/edit_goal_progress_update_test.exs:28) PASSED Test: permissions author/champion can edit goal update (test/operately_web/api/mutations/edit_goal_progress_update_test.exs:53) PASSED Test: permissions member without edit access can't edit goal update (test/operately_web/api/mutations/edit_goal_progress_update_test.exs:43) PASSED Test: edit_goal_progress_update functionality archives goal (test/operately_web/api/mutations/edit_goal_progress_update_test.exs:73) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_goal_progress_update_test.exs:14) PASSED Test: permissions space members without view access can't see goal update (test/operately_web/api/mutations/edit_goal_progress_update_test.exs:35) PASSED OperatelyWeb.Api.Queries.GetAccountTest Test: when authenticated, it returns the current account's information (test/operately_web/api/queries/get_account_test.exs:8) PASSED Test: it requires authentication (test/operately_web/api/queries/get_account_test.exs:4) PASSED OperatelyWeb.Api.Queries.GetProjectRetrospectiveTest Test: get_project_retrospective functionality include_author (test/operately_web/api/queries/get_project_retrospective_test.exs:107) PASSED Test: permissions company members (test/operately_web/api/queries/get_project_retrospective_test.exs:27) PASSED Test: get_project_retrospective functionality include_project (test/operately_web/api/queries/get_project_retrospective_test.exs:117) PASSED Test: get_project_retrospective functionality include_potential_subscribers (test/operately_web/api/queries/get_project_retrospective_test.exs:142) PASSED Test: get_project_retrospective functionality get a project retrospective with nothing included (test/operately_web/api/queries/get_project_retrospective_test.exs:83) PASSED Test: permissions project contributors (test/operately_web/api/queries/get_project_retrospective_test.exs:61) PASSED Test: get_project_retrospective functionality include_unread_notifications (test/operately_web/api/queries/get_project_retrospective_test.exs:91) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_project_retrospective_test.exs:10) PASSED Test: permissions space members (test/operately_web/api/queries/get_project_retrospective_test.exs:43) PASSED Test: get_project_retrospective functionality include_permissions (test/operately_web/api/queries/get_project_retrospective_test.exs:127) PASSED OperatelyWeb.Api.Mutations.EditProjectCheckInTest Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_check_in_test.exs:41) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/edit_project_check_in_test.exs:41) PASSED Test: edit_project_check_in functionality mentioned people are added to subscriptions list (test/operately_web/api/mutations/edit_project_check_in_test.exs:86) PASSED Test: permissions if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_check_in_test.exs:41) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_check_in_test.exs:41) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_check_in_test.exs:41) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_check_in_test.exs:41) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_project_check_in_test.exs:41) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_project_check_in_test.exs:13) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_check_in_test.exs:41) PASSED Test: edit_project_check_in functionality edits project check-in (test/operately_web/api/mutations/edit_project_check_in_test.exs:75) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_project_check_in_test.exs:41) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_project_check_in_test.exs:41) PASSED Operately.Data.Change009CreateProjectsAccessContextTest Test: creates access_context successfully when a project already has access context (test/operately/data/change_009_create_projects_access_context_test.exs:44) PASSED Test: creates access_context for existing projects (test/operately/data/change_009_create_projects_access_context_test.exs:25) PASSED Test: creates access_context for soft-deleted projects (test/operately/data/change_009_create_projects_access_context_test.exs:55) PASSED OperatelyWeb.Api.Mutations.ResetPasswordTest Test: security it fails if the reset password token is invalid (test/operately_web/api/mutations/reset_password_test.exs:23) PASSED Test: security it fails if the email is invalid (test/operately_web/api/mutations/reset_password_test.exs:41) PASSED Test: password reset (test/operately_web/api/mutations/reset_password_test.exs:10) PASSED Test: security it fails if password confirmation is invalid (test/operately_web/api/mutations/reset_password_test.exs:32) PASSED Operately.Operations.CompanyAdminAddingTest Test: CompanyAdminAdding operation creates activity (test/operately/operations/company_admin_adding_test.exs:29) PASSED Test: CompanyAdminAdding operation promotes people to admin (test/operately/operations/company_admin_adding_test.exs:21) PASSED Test: CompanyAdminAdding operation creates notification (test/operately/operations/company_admin_adding_test.exs:43) PASSED OperatelyWeb.Api.Mutations.PostDiscussionTest Test: space permissions space member without edit access can't create discussion (test/operately_web/api/mutations/post_discussion_test.exs:71) PASSED Test: company permissions company member can see only their company (test/operately_web/api/mutations/post_discussion_test.exs:27) PASSED Test: subscriptions to notifications adds mentioned people to subscription list (test/operately_web/api/mutations/post_discussion_test.exs:155) PASSED Test: space permissions space members with edit access can create discussion (test/operately_web/api/mutations/post_discussion_test.exs:78) PASSED Test: post_discussion functionality creates discussion within space (test/operately_web/api/mutations/post_discussion_test.exs:105) PASSED Test: company permissions company owners can create discussion (test/operately_web/api/mutations/post_discussion_test.exs:46) PASSED Test: company permissions company members with edit access can create discussion (test/operately_web/api/mutations/post_discussion_test.exs:39) PASSED Test: space permissions company member without view access can't see space (test/operately_web/api/mutations/post_discussion_test.exs:66) PASSED Test: security it requires authentication (test/operately_web/api/mutations/post_discussion_test.exs:14) PASSED Test: post_discussion functionality creates discussion within company (test/operately_web/api/mutations/post_discussion_test.exs:112) PASSED Test: subscriptions to notifications creates subscription list for message (test/operately_web/api/mutations/post_discussion_test.exs:131) PASSED Test: company permissions company members without edit access can't create discussion (test/operately_web/api/mutations/post_discussion_test.exs:34) PASSED Test: space permissions company owner can create discussion (test/operately_web/api/mutations/post_discussion_test.exs:85) PASSED Test: subscriptions to notifications doesn't create repeated subscription (test/operately_web/api/mutations/post_discussion_test.exs:176) PASSED TurboConnect.MutationTest Test: defining a mutation with inputs and outputs (test/turbo_connect/mutation_test.exs:23) PASSED OperatelyWeb.Api.Queries.SearchProjectContributorCandidatesTest Test: permissions champions have access (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:102) PASSED Test: security doesn't show people from other companies (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:16) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:124) PASSED Test: search_project_contributor_candidates functionality returns people based on query (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:168) PASSED Test: permissions space members have no access (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:80) PASSED Test: permissions company members have access (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:70) PASSED Test: permissions space members have access (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:91) PASSED Test: security it requires authentication (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:12) PASSED Test: search_project_contributor_candidates functionality doesn't return suspended people (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:191) PASSED Test: permissions company members have no access (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:60) PASSED Test: permissions suspended people don't have access (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:146) PASSED Operately.Projects.ListOperationTest Test: visibility filters colaborator can see the public and private projects they are a contributor of (test/operately/projects/list_operation_test.exs:41) PASSED Test: group filters listing projects for a group (test/operately/projects/list_operation_test.exs:69) PASSED Test: visibility filters creator can see all projects (test/operately/projects/list_operation_test.exs:36) PASSED Test: visibility filters non_colaborator can only see public projects (test/operately/projects/list_operation_test.exs:54) PASSED OperatelyWeb.Api.Queries.GetNotificationsTest Operately.Assignments.LoaderTest Test: goal updates returns all late updates (test/operately/assignments/loader_test.exs:99) PASSED Test: projects doesn't return late projects to non-champions (test/operately/assignments/loader_test.exs:34) PASSED Test: late project check-in acknowledgement notifies managers more than 15 days late (test/operately/assignments/loader_test.exs:197) PASSED Test: late goal notifies managers more than 15 days late (test/operately/assignments/loader_test.exs:231) PASSED Test: late goal update acknowledgement notifies managers more than 10 days late (test/operately/assignments/loader_test.exs:255) PASSED Test: management hierarchy includes management hierarchy (test/operately/assignments/loader_test.exs:284) PASSED Test: late goal notifies managers more than 10 days late (test/operately/assignments/loader_test.exs:221) PASSED Test: late project notifies managers more than 15 days late (test/operately/assignments/loader_test.exs:163) PASSED Test: late goal notifies managers more than 5 days late (test/operately/assignments/loader_test.exs:210) PASSED Test: goal updates doesn't return late updates to non-reviewer (test/operately/assignments/loader_test.exs:108) PASSED Test: late goal notifies reviewer only more than 3 days late (test/operately/assignments/loader_test.exs:129) PASSED Test: goals returns all late goals (test/operately/assignments/loader_test.exs:74) PASSED Test: project check-ins doesn't return late check-ins to non-reviewers (test/operately/assignments/loader_test.exs:59) PASSED Test: goals doesn't return late goals to non-champions (test/operately/assignments/loader_test.exs:83) PASSED Test: projects returns all late projects (test/operately/assignments/loader_test.exs:25) PASSED Test: late project notifies managers more than 5 days late (test/operately/assignments/loader_test.exs:142) PASSED Test: late project check-in acknowledgement notifies managers more than 10 days late (test/operately/assignments/loader_test.exs:187) PASSED Test: late project notifies managers more than 10 days late (test/operately/assignments/loader_test.exs:153) PASSED Test: project check-ins returns all late check-ins (test/operately/assignments/loader_test.exs:50) PASSED Test: late goal update acknowledgement notifies managers more than 15 days late (test/operately/assignments/loader_test.exs:265) PASSED Test: late project notifies reviewer only more than 3 days late (test/operately/assignments/loader_test.exs:116) PASSED Test: late project check-in acknowledgement notifies managers more than 5 days late (test/operately/assignments/loader_test.exs:176) PASSED Test: late goal update acknowledgement notifies managers more than 5 days late (test/operately/assignments/loader_test.exs:244) PASSED Mix.Tasks.Operately.Gen.Operation.Task Test: runs the generation without errors (test/mix/tasks/operately.gen.operation_test.exs:8) Generating operation: ProjectEditing This will generate the following: * Operation: lib/operately/operations/project_editing.ex * API Mutation: lib/operately_web/api/mutations/edit_project.ex * API Types: lib/operately_web/api/types.ex * Activity Schema: lib/operately/activities/content/project_editing.ex * Notification Handler: lib/operately/activities/notifications/project_editing.ex * Email Handler: lib/operately_email/emails/project_editing_email.ex * Email HTML Template: lib/operately_email/templates/project_editing.html.eex * Email Text Template: lib/operately_email/templates/project_editing.text.eex * Serializer: lib/operately_web/api/serializers/activity_content/project_editing.ex * Activity Item: assets/js/features/activities/ProjectEditing/index.tsx A few more questions: 1. What are the inputs for the api mutation? e.g company_id:string space_id:string name:string 2. What data should be stored in the activity? e.g company_id:string space_id:string name:string defmodule Operately.Operations.ProjectEditing do alias Ecto.Multi alias Operately.Repo alias Operately.Activities def run(author, _attrs) do raise "Operation for ProjectEditing not implemented" Multi.new() |> Multi.insert(:something, nil) |> Activities.insert_sync(author.id, :project_editing, fn _changes -> %{ company_id: "TODO", space_id: "TODO", name: "TODO" } end) |> Repo.transaction() |> Repo.extract_result(:something) end end Injecting into lib/operately_web/api.ex ===================================== query :search_potential_space_members, Q.SearchPotentialSpaceMembers query :search_project_contributor_candidates, Q.SearchProjectContributorCandidates query :get_work_map, Q.GetWorkMap mutation :edit_project, M.EditProject mutation :archive_message, M.ArchiveMessage mutation :restore_company_member, M.RestoreCompanyMember mutation :add_company, M.AddCompany mutation :add_company_admins, M.AddCompanyAdmins mutation :add_company_member, M.AddCompanyMember ===================================== defmodule OperatelyWeb.Api.Mutations.EditProject do use TurboConnect.Mutation use OperatelyWeb.Api.Helpers alias Operately.Operations.ProjectEditing inputs do field :company_id, :string field :space_id, :string field :name, :string end outputs do field :something, :something # TODO end def call(conn, inputs) do with( {:ok, me} <- find_me(conn), {:ok, resource} <- find_resource(me, inputs), {:ok, :allowed} <- authorize(company), {:ok, result} <- execute(ProjectEditing.run(ctx.me, ctx.attrs) end) {:ok, seriliazed} <- %{person: Serializer.serialize(result, level: :full)} ) do {:ok, %{something: serialized}} else {:error, :forbidden} -> {:error, :forbidden} {:error, :not_found} -> {:error, :not_found} {:error, _} -> {:error, :internal_server_error} end end defp authorize(resource) do # Permissions.check(resource.request_info.access_level, :can_do_things) end defp find_resource(me, _inputs) do # e.g. Project.get(me, id: inputs.project_id) end defp execute(me, resource, inputs) do ProjectEditing.run(me, resource, inputs) end end defmodule OperatelyWeb.Api.Mutations.EditProjectTest do use OperatelyWeb.TurboCase setup ctx do ctx |> Factory.setup() end describe "security" do test "it requires authentication", ctx do assert {401, _} = mutation(ctx.conn, :edit_project, %{}) end end describe "permissions" do end describe "functionality" do end end Injecting into lib/operately_web/api/types.ex ===================================== field :company, :integer field :space, :integer end object :activity_content_project_editing do field :company_id, :string field :space_id, :string field :name, :string end object :activity_content_message_archiving do field :company_id, :string field :space_id, :string field :space, :space field :message_id, :string ===================================== defmodule Operately.Activities.Content.ProjectEditing do use Operately.Activities.Content embedded_schema do field :company_id, :string field :space_id, :string field :name, :string end def changeset(attrs) do %__MODULE__{} |> cast(attrs, __schema__(:fields)) |> validate_required(__schema__(:fields)) end def build(params) do changeset(params) end end defmodule Operately.Activities.Notifications.ProjectEditing do def dispatch(_activity) do Operately.Notifications.bulk_create([]) end end defmodule OperatelyEmail.Emails.ProjectEditingEmail do import OperatelyEmail.Mailers.ActivityMailer def send(person, activity) do author = Repo.preload(activity, :author).author company |> new() |> from(author) |> to(person) |> subject(where: "...", who: author, action: "...") |> assign(:author, author) |> render("project_editing") end end <%= title("...") %> <%= short_name(@author) %> ... import * as People from "@/models/people"; import type { Activity } from "@/models/activities"; import type { ActivityContentProjectEditing } from "@/api"; import type { ActivityHandler } from "../interfaces"; const ProjectEditing: ActivityHandler = { pageHtmlTitle(_activity: Activity) { throw new Error("Not implemented"); }, pagePath(_activity: Activity) { throw new Error("Not implemented"); }, PageTitle(_props: { activity: any }) { throw new Error("Not implemented"); }, PageContent(_props: { activity: Activity }) { throw new Error("Not implemented"); }, PageOptions(_props: { activity: Activity }) { return null; }, FeedItemTitle(_props: { activity: Activity }) { return null; }, FeedItemContent(_props: { activity: Activity; page: any }) { return null; }, feedItemAlignment(_activity: Activity): "items-start" | "items-center" { return "items-center"; }, commentCount(_activity: Activity): number { throw new Error("Not implemented"); }, hasComments(_activity: Activity): boolean { throw new Error("Not implemented"); }, NotificationTitle(_props: { activity: Activity }) { return null; }, NotificationLocation(_props: { activity: Activity }) { return null; }, }; function content(activity: Activity): ActivityContentProjectEditing { return activity.content as ActivityContentProjectEditing; } export default ProjectEditing; defimpl OperatelyWeb.Api.Serializable, for: Operately.Activities.Content.ProjectEditing do alias OperatelyWeb.Api.Serializer def serialize(content, level: :essential) do %{ company_id: Serializer.serialize(content["company_id"], level: :essential), space_id: Serializer.serialize(content["space_id"], level: :essential), name: Serializer.serialize(content["name"], level: :essential) } end end PASSED OperatelyWeb.Api.Queries.GetProjectCheckInsTest Test: permissions reviewers have access (test/operately_web/api/queries/get_project_check_ins_test.exs:73) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_project_check_ins_test.exs:27) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_project_check_ins_test.exs:49) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_project_check_ins_test.exs:41) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_project_check_ins_test.exs:57) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_project_check_ins_test.exs:12) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_project_check_ins_test.exs:34) PASSED Operately.Operations.GoalTimeframeEditingTest Test: GoalTimeframeEditing operation creates activity and thread (test/operately/operations/goal_timeframe_editing_test.exs:46) PASSED Test: GoalTimeframeEditing operation updates goal (test/operately/operations/goal_timeframe_editing_test.exs:25) PASSED Operately.NotificationsTest Test: notifications get_notification!/1 returns the notification with given id (test/operately/notifications_test.exs:25) PASSED Test: notifications list_notifications/0 returns all notifications (test/operately/notifications_test.exs:21) PASSED TurboConnect.ApiTest Test: routing mutations route mutations to the correct handler (test/turbo_connect/api_test.exs:161) PASSED Test: __queries__ returns the queries defined in the module (test/turbo_connect/api_test.exs:100) PASSED Test: routing mutations return 404 for unknown mutations (test/turbo_connect/api_test.exs:168) PASSED Test: routing queries return 404 for unknown queries (test/turbo_connect/api_test.exs:145) PASSED Test: routing queries route queries to the correct handler (test/turbo_connect/api_test.exs:138) PASSED Test: routing queries return 400 for invalid queries (test/turbo_connect/api_test.exs:152) PASSED Test: __types__ returns the types defined in the module (test/turbo_connect/api_test.exs:75) PASSED Test: __mutations__ returns the mutations defined in the module (test/turbo_connect/api_test.exs:118) PASSED Test: routing mutations return 400 for invalid mutations (test/turbo_connect/api_test.exs:175) PASSED OperatelyWeb.Api.Mutations.JoinSpaceTest Test: permissions company members without view access can't see space (test/operately_web/api/mutations/join_space_test.exs:24) PASSED Test: permissions company owners can join space (test/operately_web/api/mutations/join_space_test.exs:46) PASSED Test: permissions company members with full access can join space (test/operately_web/api/mutations/join_space_test.exs:39) PASSED Test: join_space functionality person joins space (test/operately_web/api/mutations/join_space_test.exs:70) PASSED Test: security it requires authentication (test/operately_web/api/mutations/join_space_test.exs:11) PASSED Test: permissions company members with view access can join space (test/operately_web/api/mutations/join_space_test.exs:32) PASSED OperatelyWeb.Api.Mutations.PublishResourceHubDocumentTest Test: permissions User has no permissions (test/operately_web/api/mutations/publish_resource_hub_document_test.exs:25) PASSED Test: publish_resource_hub_document functionality published draft document (test/operately_web/api/mutations/publish_resource_hub_document_test.exs:71) PASSED Test: permissions User has permissions (test/operately_web/api/mutations/publish_resource_hub_document_test.exs:47) PASSED Test: publish_resource_hub_document functionality activity is created (test/operately_web/api/mutations/publish_resource_hub_document_test.exs:85) PASSED Test: security it requires authentication (test/operately_web/api/mutations/publish_resource_hub_document_test.exs:8) PASSED Test: permissions User has view access (test/operately_web/api/mutations/publish_resource_hub_document_test.exs:36) PASSED Operately.Data.Change030CreateSubscriptionsListForProjectRetrospectivesTest Test: creates subscriptions list for existing project retrospective (test/operately/data/change_030_create_subscriptions_list_for_project_retrospectives_test.exs:28) PASSED OperatelyWeb.Api.Queries.GetCommentsTest Test: permissions - project check-in reviewers have access (test/operately_web/api/queries/get_comments_test.exs:112) PASSED Test: permissions - project check-in company members have no access (test/operately_web/api/queries/get_comments_test.exs:33) PASSED Test: permissions - discussions company members have access (test/operately_web/api/queries/get_comments_test.exs:287) PASSED Test: permissions - comment-thread company members have access (test/operately_web/api/queries/get_comments_test.exs:348) PASSED Test: permissions - comment-thread space members have access (test/operately_web/api/queries/get_comments_test.exs:375) PASSED Test: permissions - comment-thread reviewers have access (test/operately_web/api/queries/get_comments_test.exs:414)10:31:18.198 [error] Failed to send email 10:31:18.199 [error] ** (RuntimeError) Unsupported action: goal_created (operately 0.1.0) lib/operately_email/emails/comment_added_email.ex:58: OperatelyEmail.Emails.CommentAddedEmail.get_action/1 (operately 0.1.0) lib/operately_email/emails/comment_added_email.ex:12: OperatelyEmail.Emails.CommentAddedEmail.send/2 (operately 0.1.0) lib/operately/notifications/email_worker.ex:13: Operately.Notifications.EmailWorker.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:129: Oban.Queue.Executor.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:74: Oban.Queue.Executor.call/1 (oban 2.15.2) lib/oban/engines/inline.ex:97: Oban.Engines.Inline.execute_job/2 (oban 2.15.2) lib/oban/engines/inline.ex:37: Oban.Engines.Inline.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:181: anonymous fn/4 in Oban.Engine.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:314: anonymous fn/3 in Oban.Engine.with_span/4 (telemetry 1.3.0) /home/dev/app/app/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (ecto 3.12.3) lib/ecto/multi.ex:897: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1049: DBConnection.transaction/3 (ecto 3.12.3) lib/ecto/multi.ex:876: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1049: DBConnection.transaction/3 10:31:18.204 [error] Failed to send email 10:31:18.204 [error] ** (RuntimeError) Unsupported action: goal_created (operately 0.1.0) lib/operately_email/emails/comment_added_email.ex:58: OperatelyEmail.Emails.CommentAddedEmail.get_action/1 (operately 0.1.0) lib/operately_email/emails/comment_added_email.ex:12: OperatelyEmail.Emails.CommentAddedEmail.send/2 (operately 0.1.0) lib/operately/notifications/email_worker.ex:13: Operately.Notifications.EmailWorker.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:129: Oban.Queue.Executor.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:74: Oban.Queue.Executor.call/1 (oban 2.15.2) lib/oban/engines/inline.ex:97: Oban.Engines.Inline.execute_job/2 (oban 2.15.2) lib/oban/engines/inline.ex:37: Oban.Engines.Inline.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:181: anonymous fn/4 in Oban.Engine.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:314: anonymous fn/3 in Oban.Engine.with_span/4 (telemetry 1.3.0) /home/dev/app/app/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (ecto 3.12.3) lib/ecto/multi.ex:897: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1049: DBConnection.transaction/3 (ecto 3.12.3) lib/ecto/multi.ex:876: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1049: DBConnection.transaction/3 10:31:18.208 [error] Failed to send email 10:31:18.209 [error] ** (RuntimeError) Unsupported action: goal_created (operately 0.1.0) lib/operately_email/emails/comment_added_email.ex:58: OperatelyEmail.Emails.CommentAddedEmail.get_action/1 (operately 0.1.0) lib/operately_email/emails/comment_added_email.ex:12: OperatelyEmail.Emails.CommentAddedEmail.send/2 (operately 0.1.0) lib/operately/notifications/email_worker.ex:13: Operately.Notifications.EmailWorker.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:129: Oban.Queue.Executor.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:74: Oban.Queue.Executor.call/1 (oban 2.15.2) lib/oban/engines/inline.ex:97: Oban.Engines.Inline.execute_job/2 (oban 2.15.2) lib/oban/engines/inline.ex:37: Oban.Engines.Inline.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:181: anonymous fn/4 in Oban.Engine.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:314: anonymous fn/3 in Oban.Engine.with_span/4 (telemetry 1.3.0) /home/dev/app/app/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (ecto 3.12.3) lib/ecto/multi.ex:897: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1049: DBConnection.transaction/3 (ecto 3.12.3) lib/ecto/multi.ex:876: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1049: DBConnection.transaction/3 PASSED Test: permissions - comment-thread company members have no access (test/operately_web/api/queries/get_comments_test.exs:335) PASSED Test: permissions - goal update reviewers have access (test/operately_web/api/queries/get_comments_test.exs:226) PASSED Test: permissions - discussions space members have access (test/operately_web/api/queries/get_comments_test.exs:301) PASSED Test: permissions - goal update company members have no access (test/operately_web/api/queries/get_comments_test.exs:147) PASSED Test: permissions - goal update space members have no access (test/operately_web/api/queries/get_comments_test.exs:173) PASSED Test: permissions - project check-in space members have access (test/operately_web/api/queries/get_comments_test.exs:73) PASSED Test: permissions - project check-in space members have no access (test/operately_web/api/queries/get_comments_test.exs:59) PASSED Test: permissions - project check-in champions have access (test/operately_web/api/queries/get_comments_test.exs:87) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_comments_test.exs:19) PASSED Test: permissions - goal update space members have access (test/operately_web/api/queries/get_comments_test.exs:187) PASSED Test: permissions - discussions company members have no access (test/operately_web/api/queries/get_comments_test.exs:273) PASSED Test: permissions - goal update champions have access (test/operately_web/api/queries/get_comments_test.exs:201) PASSED Test: permissions - project check-in company members have access (test/operately_web/api/queries/get_comments_test.exs:46) PASSED Test: permissions - comment-thread champions have access (test/operately_web/api/queries/get_comments_test.exs:389)10:31:18.661 [error] Failed to send email 10:31:18.663 [error] ** (RuntimeError) Unsupported action: goal_created (operately 0.1.0) lib/operately_email/emails/comment_added_email.ex:58: OperatelyEmail.Emails.CommentAddedEmail.get_action/1 (operately 0.1.0) lib/operately_email/emails/comment_added_email.ex:12: OperatelyEmail.Emails.CommentAddedEmail.send/2 (operately 0.1.0) lib/operately/notifications/email_worker.ex:13: Operately.Notifications.EmailWorker.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:129: Oban.Queue.Executor.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:74: Oban.Queue.Executor.call/1 (oban 2.15.2) lib/oban/engines/inline.ex:97: Oban.Engines.Inline.execute_job/2 (oban 2.15.2) lib/oban/engines/inline.ex:37: Oban.Engines.Inline.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:181: anonymous fn/4 in Oban.Engine.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:314: anonymous fn/3 in Oban.Engine.with_span/4 (telemetry 1.3.0) /home/dev/app/app/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (ecto 3.12.3) lib/ecto/multi.ex:897: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1049: DBConnection.transaction/3 (ecto 3.12.3) lib/ecto/multi.ex:876: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1049: DBConnection.transaction/3 10:31:18.669 [error] Failed to send email 10:31:18.670 [error] ** (RuntimeError) Unsupported action: goal_created (operately 0.1.0) lib/operately_email/emails/comment_added_email.ex:58: OperatelyEmail.Emails.CommentAddedEmail.get_action/1 (operately 0.1.0) lib/operately_email/emails/comment_added_email.ex:12: OperatelyEmail.Emails.CommentAddedEmail.send/2 (operately 0.1.0) lib/operately/notifications/email_worker.ex:13: Operately.Notifications.EmailWorker.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:129: Oban.Queue.Executor.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:74: Oban.Queue.Executor.call/1 (oban 2.15.2) lib/oban/engines/inline.ex:97: Oban.Engines.Inline.execute_job/2 (oban 2.15.2) lib/oban/engines/inline.ex:37: Oban.Engines.Inline.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:181: anonymous fn/4 in Oban.Engine.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:314: anonymous fn/3 in Oban.Engine.with_span/4 (telemetry 1.3.0) /home/dev/app/app/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (ecto 3.12.3) lib/ecto/multi.ex:897: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1049: DBConnection.transaction/3 (ecto 3.12.3) lib/ecto/multi.ex:876: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1049: DBConnection.transaction/3 10:31:18.675 [error] Failed to send email 10:31:18.677 [error] ** (RuntimeError) Unsupported action: goal_created (operately 0.1.0) lib/operately_email/emails/comment_added_email.ex:58: OperatelyEmail.Emails.CommentAddedEmail.get_action/1 (operately 0.1.0) lib/operately_email/emails/comment_added_email.ex:12: OperatelyEmail.Emails.CommentAddedEmail.send/2 (operately 0.1.0) lib/operately/notifications/email_worker.ex:13: Operately.Notifications.EmailWorker.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:129: Oban.Queue.Executor.perform/1 (oban 2.15.2) lib/oban/queue/executor.ex:74: Oban.Queue.Executor.call/1 (oban 2.15.2) lib/oban/engines/inline.ex:97: Oban.Engines.Inline.execute_job/2 (oban 2.15.2) lib/oban/engines/inline.ex:37: Oban.Engines.Inline.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:181: anonymous fn/4 in Oban.Engine.insert_job/3 (oban 2.15.2) lib/oban/engine.ex:314: anonymous fn/3 in Oban.Engine.with_span/4 (telemetry 1.3.0) /home/dev/app/app/deps/telemetry/src/telemetry.erl:324: :telemetry.span/3 (ecto 3.12.3) lib/ecto/multi.ex:897: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1049: DBConnection.transaction/3 (ecto 3.12.3) lib/ecto/multi.ex:876: Ecto.Multi.apply_operation/5 (elixir 1.17.2) lib/enum.ex:2531: Enum."-reduce/3-lists^foldl/2-0-"/3 (ecto 3.12.3) lib/ecto/multi.ex:870: anonymous fn/5 in Ecto.Multi.apply_operations/5 (ecto_sql 3.12.0) lib/ecto/adapters/sql.ex:1382: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4 (db_connection 2.7.0) lib/db_connection.ex:1049: DBConnection.transaction/3 PASSED Test: permissions - goal update company members have access (test/operately_web/api/queries/get_comments_test.exs:160) PASSED Test: permissions - discussions company space - company members have access (test/operately_web/api/queries/get_comments_test.exs:260) PASSED Test: permissions - comment-thread space members have no access (test/operately_web/api/queries/get_comments_test.exs:361) PASSED OperatelyWeb.Api.Queries.GetCompaniesTest Test: get_companies functionality get companies with nothing extra (test/operately_web/api/queries/get_companies_test.exs:18) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_companies_test.exs:10) PASSED Test: get_companies functionality include_member_count doesn't include suspended members (test/operately_web/api/queries/get_companies_test.exs:36) PASSED Operately.Operations.CompanyMemberAddingTest Test: CompanyMemberAdding operation creates members's access group and membership (test/operately/operations/company_member_adding_test.exs:47) PASSED Test: CompanyMemberAdding operation creates activity (test/operately/operations/company_member_adding_test.exs:79) PASSED Test: CompanyMemberAdding operation creates company space member (test/operately/operations/company_member_adding_test.exs:69) PASSED Test: CompanyMemberAdding operation creates person (test/operately/operations/company_member_adding_test.exs:32) PASSED Test: CompanyMemberAdding operation creates invitation for person (test/operately/operations/company_member_adding_test.exs:60) PASSED OperatelyWeb.Api.Queries.GetMilestoneTest Test: permissions reviewers have access (test/operately_web/api/queries/get_milestone_test.exs:73) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_milestone_test.exs:27) PASSED Test: get_milestone functionality include_project (test/operately_web/api/queries/get_milestone_test.exs:101) PASSED Test: get_milestone functionality include_comments (test/operately_web/api/queries/get_milestone_test.exs:127) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_milestone_test.exs:49) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_milestone_test.exs:41) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_milestone_test.exs:57) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_milestone_test.exs:13) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_milestone_test.exs:34) PASSED Test: get_milestone functionality include_permissions (test/operately_web/api/queries/get_milestone_test.exs:114) PASSED Operately.Data.Change014CreatePeopleAccessGroupTest Test: ignores person when they already have access_group (test/operately/data/change_014_create_people_access_group_test.exs:31) PASSED Test: creates access_group for existing people (test/operately/data/change_014_create_people_access_group_test.exs:15) PASSED Operately.InvitationsTest Test: invitations delete_invitation/1 deletes the invitation (test/operately/invitations_test.exs:64) PASSED Test: invitations get_invitation!/1 returns the invitation with given id (test/operately/invitations_test.exs:22) PASSED Test: invitation_tokens delete_invitation_token/1 deletes the invitation_token (test/operately/invitations_test.exs:123) PASSED Test: invitation_tokens list_invitation_tokens/0 returns all invitation_tokens (test/operately/invitations_test.exs:72) PASSED Test: invitation_tokens get_invitation_token_by_invitation!/1 returns the invitation_token with given id (test/operately/invitations_test.exs:82) PASSED Test: invitations create_invitation/1 with valid data creates a invitation (test/operately/invitations_test.exs:48) PASSED Test: invitations get_invitation_by_member/1 returns the invitation (test/operately/invitations_test.exs:36) PASSED Test: invitations create_invitation/1 with invalid data returns error changeset (test/operately/invitations_test.exs:60) PASSED Test: invitations list_invitations/0 returns all invitations (test/operately/invitations_test.exs:17) PASSED Test: invitation_tokens create_invitation_token!/1 with valid data creates a invitation_token (test/operately/invitations_test.exs:91) PASSED Test: invalid invitation_tokens valid_token_time?/2 returns correct value (test/operately/invitations_test.exs:143) PASSED Test: invitation_tokens create_invitation_token!/1 deletes previous invitation_token (test/operately/invitations_test.exs:102) PASSED Test: invitations get_invitation_by_token!/1 returns the invitation (test/operately/invitations_test.exs:27) PASSED Test: invitation_tokens get_invitation_token!/1 returns the invitation_token with given id (test/operately/invitations_test.exs:77) PASSED Test: invalid invitation_tokens tokens already expired (test/operately/invitations_test.exs:131) PASSED OperatelyWeb.Api.SerializerTest Test: date and time serialization it serializes DateTime with the timezone (test/operately_web/api/serializer_test.exs:12) PASSED Test: date and time serialization it serializes naive date time as UTC (test/operately_web/api/serializer_test.exs:6) PASSED Operately.Data.Change016CreatePeopleAccessGroupMembershipTest Test: creates access group membership for existing people (test/operately/data/change_016_create_people_access_group_membership_test.exs:14) PASSED Operately.Data.Change008ConvertGoalTimeframesToNewFormatTest Test: convert annual timeframes to new format (test/operately/data/change_008_convert_goal_timeframes_to_new_format_test.exs:16) PASSED Test: convert quarter timeframes to new format (test/operately/data/change_008_convert_goal_timeframes_to_new_format_test.exs:4) PASSED Test: doesn't touch goals without deprecated timeframes (test/operately/data/change_008_convert_goal_timeframes_to_new_format_test.exs:28) PASSED Operately.Operations.ProjectContributorAdditionTest Test: ProjectContributorAddition operation creates access binding (test/operately/operations/project_contributor_addition_test.exs:37) PASSED Test: ProjectContributorAddition operation creates contributor (test/operately/operations/project_contributor_addition_test.exs:23) PASSED Test: ProjectContributorAddition operation creates activity and notification (test/operately/operations/project_contributor_addition_test.exs:54) PASSED Operately.TasksTest Test: tasks get_task!/1 returns the task with given id (test/operately/tasks_test.exs:43) PASSED Test: tasks list_tasks with space_id returns tasks for that space (test/operately/tasks_test.exs:39) PASSED Test: task_assignees list_task_assignees/0 returns all task_assignees (test/operately/tasks_test.exs:49) PASSED Operately.Operations.GoalReopeningTest Test: GoalReopening operation creates activity, thread and notification (test/operately/operations/goal_reopening_test.exs:46) PASSED Test: GoalReopening operation updates goal (test/operately/operations/goal_reopening_test.exs:32) PASSED OperatelyWeb.Api.Mutations.SubscribeToNotificationsTest Test: permissions if caller has levels company=no_access, space=view_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:44) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:44) PASSED Test: subscribe_to_notifications functionality updates canceled subscription (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:93) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:44) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:44) PASSED Test: permissions if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:44) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:44) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=200 (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:44) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:44) PASSED Test: security it requires authentication (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:13) PASSED Test: permissions if caller has levels company=view_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:44) PASSED Test: subscribe_to_notifications functionality subscribes to check-in notifications (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:82) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:44) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=view_access on the project, then expect code=200 (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:44) PASSED Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:44) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:44) PASSED Operately.Data.Change033AddSpaceToProjectResumingActivityTest Test: migration doesn't delete existing data in activity content (test/operately/data/change_033_add_space_to_project_resuming_activity_test.exs:15) PASSED OperatelyWeb.AccountOauthControllerTest Test: callback/2 when a person with the given email exists in the company (test/operately_web/controllers/account_oauth_controller_test.exs:30) PASSED Test: OAuth redirect uses redirect_to parameter from session during callback phase (test/operately_web/controllers/account_oauth_controller_test.exs:101) PASSED Test: OAuth redirect stores redirect_to parameter during request phase (test/operately_web/controllers/account_oauth_controller_test.exs:95) PASSED Test: OAuth redirect handles empty redirect_to parameter (test/operately_web/controllers/account_oauth_controller_test.exs:124) PASSED Test: callback/2 creating a new account while attempting log in (test/operately_web/controllers/account_oauth_controller_test.exs:15) PASSED Test: callback/2 when the account exists, but the avatar_url is different, it updates the avatar_url (test/operately_web/controllers/account_oauth_controller_test.exs:58) PASSED Operately.Operations.ProjectKeyResourceAddingTest Test: ProjectCreation operation creates activity and notification (test/operately/operations/project_key_resource_adding_test.exs:19) PASSED Operately.Goals.CycleDetectionTest Test: goal hierarchy cycle detection prevents indirect cycles in a multi-level hierarchy (test/operately/goals/cycle_detection_test.exs:65) PASSED Test: goal hierarchy cycle detection allows creating a goal with a valid parent (test/operately/goals/cycle_detection_test.exs:18) PASSED Test: goal hierarchy cycle detection prevents cycle when updating a goal in a complex hierarchy (test/operately/goals/cycle_detection_test.exs:78) PASSED Test: goal hierarchy cycle detection prevents a goal from being its own parent (test/operately/goals/cycle_detection_test.exs:48) PASSED Test: goal hierarchy cycle detection allows removing a goal's parent (test/operately/goals/cycle_detection_test.exs:38) PASSED Test: goal hierarchy cycle detection prevents direct cycles between two goals (test/operately/goals/cycle_detection_test.exs:56) PASSED Test: goal hierarchy cycle detection allows creating a goal without a parent (test/operately/goals/cycle_detection_test.exs:13) PASSED Test: goal hierarchy cycle detection allows changing a goal's parent to a valid new parent (test/operately/goals/cycle_detection_test.exs:27) PASSED OperatelyWeb.Api.Mutations.EditGoalDiscussionTest Test: permissions space members without edit access can't edit a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:74) PASSED Test: permissions company members without view access can't see a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:27) PASSED Test: permissions space members with edit access can edit a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:83) PASSED Test: permissions champions can edit a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:106) PASSED Test: permissions company owner can edit a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:51) PASSED Test: permissions company members with edit access can edit a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:43) PASSED Test: permissions space members without view access can't see a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:65) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_goal_discussion_test.exs:12) PASSED Test: permissions reviewers can edit a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:122) PASSED Test: edit_goal_discussion functionality edits a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:142) PASSED Test: permissions company members without edit access can't edit a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:35) PASSED Test: permissions space managers can edit a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:92) PASSED OperatelyWeb.Api.Mutations.AddCompanyTest Test: add_company functionality creates company and an associated person record (test/operately_web/api/mutations/add_company_test.exs:17) PASSED Test: security it requires authentication (test/operately_web/api/mutations/add_company_test.exs:11) PASSED Operately.Api.Queries.GetProjectContributorTest Test: permissions company members (test/operately_web/api/queries/get_project_contributor_test.exs:21) PASSED Test: permissions project contributors (test/operately_web/api/queries/get_project_contributor_test.exs:55) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_project_contributor_test.exs:5) PASSED Test: permissions space members (test/operately_web/api/queries/get_project_contributor_test.exs:37) PASSED OperatelyWeb.Api.Mutations.AcknowledgeProjectCheckInTest Test: permissions reviewers can acknowledge a check-in (test/operately_web/api/mutations/acknowledge_project_check_in_test.exs:64) PASSED Test: permissions company members without view access can't see a check-in (test/operately_web/api/mutations/acknowledge_project_check_in_test.exs:27) PASSED Test: acknowledge_project_check_in functionality acknowledges check-in (test/operately_web/api/mutations/acknowledge_project_check_in_test.exs:80) PASSED Test: permissions space members can't acknowledge a check-in (test/operately_web/api/mutations/acknowledge_project_check_in_test.exs:49) PASSED Test: permissions space members without view access can't see a check-in (test/operately_web/api/mutations/acknowledge_project_check_in_test.exs:41) PASSED Test: permissions contributors can't acknowledge a check-in (test/operately_web/api/mutations/acknowledge_project_check_in_test.exs:57) PASSED Test: security it requires authentication (test/operately_web/api/mutations/acknowledge_project_check_in_test.exs:13) PASSED Test: permissions company members can't acknowledge a check-in (test/operately_web/api/mutations/acknowledge_project_check_in_test.exs:34) PASSED Operately.Operations.ProjectCreationTest Test: ProjectCreation operation doesn't create without champion or reviewer (test/operately/operations/project_creation_test.exs:126) PASSED Test: ProjectCreation operation creates bindings to company (test/operately/operations/project_creation_test.exs:59) PASSED Test: ProjectCreation operation adds tags to reviewer's and champion's bindings (test/operately/operations/project_creation_test.exs:140) PASSED Test: ProjectCreation operation doesn't add creator as contributor (test/operately/operations/project_creation_test.exs:97) PASSED Test: ProjectCreation operation creates bindings to contributors (test/operately/operations/project_creation_test.exs:84) PASSED Test: ProjectCreation operation doesn't create bindings to space (test/operately/operations/project_creation_test.exs:113) PASSED Test: ProjectCreation operation creates project (test/operately/operations/project_creation_test.exs:45) PASSED Test: ProjectCreation operation creates bindings to space (test/operately/operations/project_creation_test.exs:73) PASSED Test: ProjectCreation operation creates activity and notification (test/operately/operations/project_creation_test.exs:154) PASSED OperatelyWeb.Api.Mutations.CreateResourceHubLinkTest Test: permissions if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_link_test.exs:42) PASSED Test: permissions if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/mutations/create_resource_hub_link_test.exs:42) PASSED Test: permissions if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_link_test.exs:42) PASSED Test: permissions if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_link_test.exs:42) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_link_test.exs:42) PASSED Test: permissions if caller has levels company=comment_access and space=no_access, then expect code=403 (test/operately_web/api/mutations/create_resource_hub_link_test.exs:42) PASSED Test: security it requires authentication (test/operately_web/api/mutations/create_resource_hub_link_test.exs:17) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=403 (test/operately_web/api/mutations/create_resource_hub_link_test.exs:42) PASSED Test: functionality creates file within hub (test/operately_web/api/mutations/create_resource_hub_link_test.exs:81) PASSED Operately.Operations.ResourceHubFolderCopyingTest Test: Copy folder to different location folder is copied to the root of another Resource Hub (test/operately/operations/resource_hub_folder_copying_test.exs:191) PASSED Test: Copy content empty folder is copied (test/operately/operations/resource_hub_folder_copying_test.exs:52) PASSED Test: Copy folder to different location folder is copied to another folder in another Resource Hub (test/operately/operations/resource_hub_folder_copying_test.exs:209) PASSED Test: Copy content link within folder is copied (test/operately/operations/resource_hub_folder_copying_test.exs:128) PASSED Test: Copy content file within folder is copied (test/operately/operations/resource_hub_folder_copying_test.exs:99) PASSED Test: Copy folder to different location folder is copied to another folder in the same Resource Hub (test/operately/operations/resource_hub_folder_copying_test.exs:168) PASSED Test: Copy content folder and its nested content are copied (test/operately/operations/resource_hub_folder_copying_test.exs:20) PASSED Test: Copy content document within folder is copied (test/operately/operations/resource_hub_folder_copying_test.exs:70) PASSED Test: Subscriptions subscriptions list and active subscriptions are copied (test/operately/operations/resource_hub_folder_copying_test.exs:252) PASSED Operately.Data.Change028CreateSubscriptionsListForGoalUpdatesTest Test: creates subscriptions list for existing goal updates (test/operately/data/change_028_create_subscriptions_list_for_goal_updates_test.exs:22) PASSED OperatelyWeb.Api.Queries.GetInvitationTest Test: get_invitation functionality returns the invitation (test/operately_web/api/queries/get_invitation_test.exs:9) PASSED Operately.Data.Change038AddSpaceToGoalEditingActivityTest Test: migration doesn't delete existing data in activity content (test/operately/data/change_038_add_space_to_goal_editing_activity_test.exs:15) PASSED Operately.PeopleTest Test: apply_account_email/3 applies the email without persisting it (test/operately/people_test.exs:282) PASSED Test: people change_person/1 returns a person changeset (test/operately/people_test.exs:114) PASSED Test: generate_account_session_token/1 generates a token (test/operately/people_test.exs:369) PASSED Test: people create_person/1 with valid data creates a person (test/operately/people_test.exs:68) PASSED Test: register_account/1 validates email and password when given (test/operately/people_test.exs:174) PASSED Test: register_account/1 registers accounts with a hashed password (test/operately/people_test.exs:200) PASSED Test: apply_account_email/3 validates current password (test/operately/people_test.exs:275) PASSED Test: change_account_registration/2 allows fields to be set (test/operately/people_test.exs:216) PASSED Test: apply_account_email/3 requires email to change (test/operately/people_test.exs:245) PASSED Test: delete_account_session_token/1 deletes the token (test/operately/people_test.exs:408) PASSED Test: register_account/1 validates email uniqueness (test/operately/people_test.exs:190) PASSED Test: get_account!/1 raises if id is invalid (test/operately/people_test.exs:152) PASSED Test: register_account/1 validates maximum values for email and password for security (test/operately/people_test.exs:183) PASSED Test: inspect/2 for the Account module does not include password (test/operately/people_test.exs:441) PASSED Test: get_account_by_email/1 does not return the account if the email does not exist (test/operately/people_test.exs:123) PASSED Test: get_account_by_session_token/1 does not return account for expired token (test/operately/people_test.exs:401) PASSED Test: apply_account_email/3 validates email (test/operately/people_test.exs:250) PASSED Test: get_account_by_email_and_password/2 does not return the account if the email does not exist (test/operately/people_test.exs:134) PASSED Test: change_account_password/2 allows fields to be set (test/operately/people_test.exs:296) PASSED Test: apply_account_email/3 validates email uniqueness (test/operately/people_test.exs:266) PASSED Test: reset_account_password/2 deletes all tokens for the given account (test/operately/people_test.exs:433) PASSED Test: people update_person/2 with invalid data returns error changeset (test/operately/people_test.exs:96) PASSED Test: people update_person/2 with valid data updates the person (test/operately/people_test.exs:85) PASSED Test: reset_account_password/2 validates maximum values for password for security (test/operately/people_test.exs:421) PASSED Test: update_account_password/3 validates current password (test/operately/people_test.exs:335) PASSED Test: get_account_by_session_token/1 returns account by token (test/operately/people_test.exs:392) PASSED Test: people update_person/3 with valid avatar_blob_id updates the person (test/operately/people_test.exs:101) PASSED Test: people get_person!/1 returns the person with given id (test/operately/people_test.exs:22) PASSED Test: get_account_by_session_token/1 does not return account for invalid token (test/operately/people_test.exs:397) PASSED Test: get_account_by_email_and_password/2 does not return the account if the password is not valid (test/operately/people_test.exs:138) PASSED Test: update_account_password/3 validates password (test/operately/people_test.exs:313) PASSED Test: update_account_password/3 deletes all tokens for the given account (test/operately/people_test.exs:352) PASSED Test: change_account_password/2 returns a account changeset (test/operately/people_test.exs:291) PASSED Test: register_account/1 requires email and password to be set (test/operately/people_test.exs:165) PASSED Test: get_account_by_email_and_password/2 returns the account if the email and password are valid (test/operately/people_test.exs:143) PASSED Test: reset_account_password/2 updates the password (test/operately/people_test.exs:427) PASSED Test: update_account_password/3 validates maximum values for password for security (test/operately/people_test.exs:326) PASSED Test: update_account_password/3 updates the password (test/operately/people_test.exs:342) PASSED Test: people create_person/1 with invalid data returns error changeset (test/operately/people_test.exs:81) PASSED Test: change_account_email/2 returns a account changeset (test/operately/people_test.exs:234) PASSED Test: get_account_by_email/1 returns the account if the email exists (test/operately/people_test.exs:127) PASSED Test: apply_account_email/3 validates maximum value for email for security (test/operately/people_test.exs:257) PASSED Test: get_account!/1 returns the account with the given id (test/operately/people_test.exs:158) PASSED Test: change_account_registration/2 returns a changeset (test/operately/people_test.exs:211) PASSED OperatelyWeb.Api.Queries.GetActivitiesTest Test: permissions champions have access (test/operately_web/api/queries/get_activities_test.exs:103) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_activities_test.exs:36) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_activities_test.exs:72) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_activities_test.exs:59) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_activities_test.exs:86) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_activities_test.exs:14) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_activities_test.exs:47) PASSED OperatelyWeb.Api.Mutations.ChangeGoalParentTest Test: permissions space members without edit access can't change goal parent (test/operately_web/api/mutations/change_goal_parent_test.exs:80) PASSED Test: permissions company members without view access can't see a goal (test/operately_web/api/mutations/change_goal_parent_test.exs:28) PASSED Test: permissions space members with edit access can change goal parent (test/operately_web/api/mutations/change_goal_parent_test.exs:90) PASSED Test: permissions champions can change goal parent (test/operately_web/api/mutations/change_goal_parent_test.exs:114) PASSED Test: permissions company admins can change goal parent (test/operately_web/api/mutations/change_goal_parent_test.exs:54) PASSED Test: permissions company members with edit access can change goal parent (test/operately_web/api/mutations/change_goal_parent_test.exs:46) PASSED Test: permissions space members without view access can't see a goal (test/operately_web/api/mutations/change_goal_parent_test.exs:70) PASSED Test: security it requires authentication (test/operately_web/api/mutations/change_goal_parent_test.exs:13) PASSED Test: permissions reviewers can change goal parent (test/operately_web/api/mutations/change_goal_parent_test.exs:131) PASSED Test: change_goal_parent functionality archives goal (test/operately_web/api/mutations/change_goal_parent_test.exs:157) PASSED Test: permissions company members without edit access can't change goal parent (test/operately_web/api/mutations/change_goal_parent_test.exs:37) PASSED Test: permissions space managers can change goal parent (test/operately_web/api/mutations/change_goal_parent_test.exs:99) PASSED Operately.TenetsTest Test: tenets delete_tenet/1 deletes the tenet (test/operately/tenets_test.exs:50) PASSED Test: tenets get_tenet!/1 returns the tenet with given id (test/operately/tenets_test.exs:18) PASSED Test: tenets change_tenet/1 returns a tenet changeset (test/operately/tenets_test.exs:56) PASSED Test: tenets update_tenet/2 with valid data updates the tenet (test/operately/tenets_test.exs:35) PASSED Test: tenets create_tenet/1 with invalid data returns error changeset (test/operately/tenets_test.exs:31) PASSED Test: tenets update_tenet/2 with invalid data returns error changeset (test/operately/tenets_test.exs:44) PASSED Test: tenets list_tenets/0 returns all tenets (test/operately/tenets_test.exs:13) PASSED Test: tenets create_tenet/1 with valid data creates a tenet (test/operately/tenets_test.exs:23) PASSED OperatelyWeb.Api.Mutations.CopyResourceHubFolderTest Test: permissions if caller has levels company=comment_access, origin_space=no_access and dest_space=no_access, then expect code=403 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=view_access and dest_space=no_access, then expect code=404 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=no_access and dest_space=no_access, then expect code=404 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=comment_access and dest_space=full_access, then expect code=403 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=edit_access and dest_space=comment_access, then expect code=403 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=view_access, origin_space=no_access and dest_space=no_access, then expect code=403 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=edit_access and dest_space=full_access, then expect code=200 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=full_access and dest_space=view_access, then expect code=403 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=edit_access and dest_space=view_access, then expect code=403 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=comment_access and dest_space=view_access, then expect code=403 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=edit_access and dest_space=no_access, then expect code=404 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=view_access and dest_space=view_access, then expect code=403 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=full_access and dest_space=comment_access, then expect code=403 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=view_access and dest_space=edit_access, then expect code=403 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=full_access, origin_space=no_access and dest_space=no_access, then expect code=200 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=full_access and dest_space=full_access, then expect code=200 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=no_access and dest_space=edit_access, then expect code=404 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=no_access and dest_space=comment_access, then expect code=404 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: functionality copied folder into resource hub in another space (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:155) PASSED Test: permissions if caller has levels company=no_access, origin_space=no_access and dest_space=full_access, then expect code=404 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: security it requires authentication (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:15) PASSED Test: permissions if caller has levels company=no_access, origin_space=view_access and dest_space=full_access, then expect code=403 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: functionality creates a copy of folder (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:112) PASSED Test: functionality folder is copied and copy has the same name (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:200) PASSED Test: permissions if caller has levels company=edit_access, origin_space=no_access and dest_space=no_access, then expect code=200 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=comment_access and dest_space=edit_access, then expect code=403 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=comment_access and dest_space=no_access, then expect code=404 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: functionality copies folder into another parent folder (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:128) PASSED Test: functionality folder is copied and copy has a different name (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:178) PASSED Test: permissions if caller has levels company=no_access, origin_space=no_access and dest_space=view_access, then expect code=404 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=full_access and dest_space=no_access, then expect code=404 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=view_access and dest_space=comment_access, then expect code=403 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=full_access and dest_space=edit_access, then expect code=200 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=comment_access and dest_space=comment_access, then expect code=403 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=edit_access and dest_space=edit_access, then expect code=200 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED OperatelyWeb.Api.Mutations.MarkAllNotificationsAsReadTest Test: mark_all_as_read functionality it marks all unread notification as read (test/operately_web/api/mutations/mark_all_notifications_as_read_test.exs:17) PASSED Test: security it requires authentication (test/operately_web/api/mutations/mark_all_notifications_as_read_test.exs:9) PASSED Test: mark_all_as_read functionality it marks only current user's notifications as read (test/operately_web/api/mutations/mark_all_notifications_as_read_test.exs:31) PASSED Operately.Data.Change044RenameResourceHubsTest Test: renames existing resource hubs to Documents & Files (test/operately/data/change_044_rename_resource_hubs_test.exs:13) PASSED OperatelyWeb.Api.Mutations.AddProjectContributorsTest Test: permissions space members without full access can't add contributor to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:68) PASSED Test: permissions company members without view access can't see a project (test/operately_web/api/mutations/add_project_contributors_test.exs:27) PASSED Test: permissions reviewers can add contributor to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:130) PASSED Test: permissions space members with full access can add contributor to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:76) PASSED Test: permissions contributors without full access can't add contributor to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:95) PASSED Test: permissions company admins can add contributor to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:47) PASSED Test: permissions company members with full access can add contributor to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:41) PASSED Test: permissions space members without view access can't see a project (test/operately_web/api/mutations/add_project_contributors_test.exs:60) PASSED Test: security it requires authentication (test/operately_web/api/mutations/add_project_contributors_test.exs:13) PASSED Test: permissions contributors with full access can add contributor to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:106) PASSED Test: permissions champions can add contributor to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:116) PASSED Test: permissions company members without full access can't add contributor to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:34) PASSED Test: permissions space managers can add contributor to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:83) PASSED Test: add_project_contributors functionality adds multiple contributors to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:148) PASSED Operately.Data.Change025PopulateAccountFullNameTest Test: it populates account full name based on person records (test/operately/data/change_025_populate_account_full_name_test.exs:9) PASSED OperatelyWeb.Api.Mutations.RemoveGroupMemberTest Test: permissions if caller has levels company=70 and space=0 on the space, then expect code=403 (test/operately_web/api/mutations/remove_group_member_test.exs:36) PASSED Test: permissions if caller has levels company=0 and space=0 on the space, then expect code=404 (test/operately_web/api/mutations/remove_group_member_test.exs:36) PASSED Test: permissions if caller has levels company=100 and space=0 on the space, then expect code=200 (test/operately_web/api/mutations/remove_group_member_test.exs:36) PASSED Test: permissions if caller has levels company=0 and space=100 on the space, then expect code=200 (test/operately_web/api/mutations/remove_group_member_test.exs:36) PASSED Test: permissions if caller has levels company=0 and space=70 on the space, then expect code=403 (test/operately_web/api/mutations/remove_group_member_test.exs:36) PASSED Test: permissions if caller has levels company=40 and space=0 on the space, then expect code=403 (test/operately_web/api/mutations/remove_group_member_test.exs:36) PASSED Test: security it requires authentication (test/operately_web/api/mutations/remove_group_member_test.exs:12) PASSED Test: permissions if caller has levels company=0 and space=40 on the space, then expect code=403 (test/operately_web/api/mutations/remove_group_member_test.exs:36) PASSED Operately.Data.Change024RemovePrivateProjectsBindingsTest Test: removes private projects bindings (test/operately/data/change_024_remove_private_projects_bindings_test.exs:20) PASSED Operately.Operations.ProjectCheckInTest Test: Creating project check-in notifies all contributors (test/operately/operations/project_check_in_test.exs:64) PASSED Test: Creating project check-in notifies mentioned person (test/operately/operations/project_check_in_test.exs:137) PASSED Test: Creating project check-in does not notify creator (test/operately/operations/project_check_in_test.exs:120) PASSED Test: Creating project check-in notifies only reviewer (test/operately/operations/project_check_in_test.exs:41) PASSED Test: Creating project check-in notifies all contributors if send_to_everyone is true (test/operately/operations/project_check_in_test.exs:93) PASSED Operately.Operations.ResourceHubDocumentCreatingTest Test: Creating message sends notifications to selected people (test/operately/operations/resource_hub_document_creating_test.exs:46) PASSED Test: Creating document sends notifications to everyone (test/operately/operations/resource_hub_document_creating_test.exs:18) PASSED Test: Person without permissions is not notified (test/operately/operations/resource_hub_document_creating_test.exs:74) PASSED OperatelyWeb.Api.ActionTest Test: run/3 runs the function and adds the result to the context (test/operately_web/api/action_test.exs:14) PASSED Test: run/3 if the function returns an error, it adds the error to the context (test/operately_web/api/action_test.exs:36) PASSED Test: run/3 if the key already exists, it raises an ArgumentError (test/operately_web/api/action_test.exs:28) PASSED Test: run/3 if one of the functions returns an error, it stops the chain (test/operately_web/api/action_test.exs:42) PASSED Test: new/0 returns an empty context (test/operately_web/api/action_test.exs:8) PASSED Test: run/3 if the function takes a context, it passes the context to the function (test/operately_web/api/action_test.exs:19) PASSED OperatelyWeb.Api.Queries.SearchPotentialSpaceMembersTest Test: search_potential_space_members functionality returns all petential members (test/operately_web/api/queries/search_potential_space_members_test.exs:123) PASSED Test: security it doesn't return people from other companies (test/operately_web/api/queries/search_potential_space_members_test.exs:16) PASSED Test: search_potential_space_members functionality query members by name (test/operately_web/api/queries/search_potential_space_members_test.exs:131) PASSED Test: search_potential_space_members functionality exlude_ids excludes members from result (test/operately_web/api/queries/search_potential_space_members_test.exs:151) PASSED Test: permissions space member has no access (test/operately_web/api/queries/search_potential_space_members_test.exs:78) PASSED Test: permissions company member has no access (test/operately_web/api/queries/search_potential_space_members_test.exs:68) PASSED Test: permissions suspended people don't have access (test/operately_web/api/queries/search_potential_space_members_test.exs:94) PASSED Test: security it requires authentication (test/operately_web/api/queries/search_potential_space_members_test.exs:12) PASSED Test: search_potential_space_members functionality existing members excluded from result (test/operately_web/api/queries/search_potential_space_members_test.exs:167) PASSED Test: search_potential_space_members functionality suspended people excluded from result (test/operately_web/api/queries/search_potential_space_members_test.exs:183) PASSED Test: permissions company member has access (test/operately_web/api/queries/search_potential_space_members_test.exs:55) PASSED Test: search_potential_space_members functionality query members by title (test/operately_web/api/queries/search_potential_space_members_test.exs:141) PASSED Operately.Operations.CompanyAdminRemovingTest Test: CompanyAdminAdding operation creates notification (test/operately/operations/company_admin_removing_test.exs:27) PASSED Test: CompanyAdminRemoving operation creates activity (test/operately/operations/company_admin_removing_test.exs:18) PASSED OperatelyWeb.Api.Mutations.CreateTaskTest Test: permissions space members without edit access can't create task (test/operately_web/api/mutations/create_task_test.exs:73) PASSED Test: permissions company members without view access can't see a project (test/operately_web/api/mutations/create_task_test.exs:27) PASSED Test: permissions reviewers can create task (test/operately_web/api/mutations/create_task_test.exs:143) PASSED Test: permissions space members with edit access can create task (test/operately_web/api/mutations/create_task_test.exs:82) PASSED Test: permissions contributors without edit access can't create task (test/operately_web/api/mutations/create_task_test.exs:104) PASSED Test: permissions company owners can create task (test/operately_web/api/mutations/create_task_test.exs:50) PASSED Test: permissions company members with edit access can create task (test/operately_web/api/mutations/create_task_test.exs:43) PASSED Test: permissions space members without view access can't see a project (test/operately_web/api/mutations/create_task_test.exs:64) PASSED Test: security it requires authentication (test/operately_web/api/mutations/create_task_test.exs:13) PASSED Test: permissions contributors with edit access can create task (test/operately_web/api/mutations/create_task_test.exs:116) PASSED Test: create_task functionality creates task without assignee (test/operately_web/api/mutations/create_task_test.exs:173) PASSED Test: permissions champions can create task (test/operately_web/api/mutations/create_task_test.exs:127) PASSED Test: permissions company members without edit access can't create task (test/operately_web/api/mutations/create_task_test.exs:35) PASSED Test: permissions space managers can create task (test/operately_web/api/mutations/create_task_test.exs:90) PASSED Test: create_task functionality creates task (test/operately_web/api/mutations/create_task_test.exs:163) PASSED Operately.Data.Change032AddSpaceToProjectCreatedActivityTest Test: migration doesn't delete current data in activity content (test/operately/data/change_032_add_space_to_project_created_activity_test.exs:15) PASSED Operately.Blobs.EncryptionTest Test: raises error on invalid token (test/operately/blobs/encryption_test.exs:16) PASSED Test: raises error if the secret key is not invalid (test/operately/blobs/encryption_test.exs:24) PASSED Test: works with openssl generated keys (test/operately/blobs/encryption_test.exs:6) PASSED Test: raises error if the secret key is not provided (test/operately/blobs/encryption_test.exs:20) PASSED Operately.Data.Chenge027CreateSubscriptionsListForCheckInsTest Test: creates subscriptions list for existing check-ins (test/operately/data/change_027_create_subscriptions_list_for_check_ins_test.exs:27) PASSED OperatelyWeb.Api.Queries.ListGoalContributorsTest Test: permissions if caller has levels company=no_access, space=edit_access and goal=no_access, then expect code=allowed (test/operately_web/api/queries/list_goal_contributors_test.exs:43) PASSED Test: permissions if caller has levels company=no_access, space=no_access and goal=no_access, then expect code=forbidden (test/operately_web/api/queries/list_goal_contributors_test.exs:43) PASSED Test: list_goal_contributors functionality returns contributors for goal with child goals (test/operately_web/api/queries/list_goal_contributors_test.exs:80) PASSED Test: permissions if caller has levels company=no_access, space=full_access and goal=no_access, then expect code=allowed (test/operately_web/api/queries/list_goal_contributors_test.exs:43) PASSED Test: permissions if caller has levels company=comment_access, space=no_access and goal=no_access, then expect code=allowed (test/operately_web/api/queries/list_goal_contributors_test.exs:43) PASSED Test: permissions if caller has levels company=no_access, space=view_access and goal=no_access, then expect code=allowed (test/operately_web/api/queries/list_goal_contributors_test.exs:43) PASSED Test: permissions if caller has levels company=no_access, space=no_access and goal=reviewer, then expect code=allowed (test/operately_web/api/queries/list_goal_contributors_test.exs:43) PASSED Test: permissions if caller has levels company=no_access, space=comment_access and goal=no_access, then expect code=allowed (test/operately_web/api/queries/list_goal_contributors_test.exs:43) PASSED Test: security it requires authentication (test/operately_web/api/queries/list_goal_contributors_test.exs:11) PASSED Test: permissions if caller has levels company=edit_access, space=no_access and goal=no_access, then expect code=allowed (test/operately_web/api/queries/list_goal_contributors_test.exs:43) PASSED Test: permissions if caller has levels company=full_access, space=no_access and goal=no_access, then expect code=allowed (test/operately_web/api/queries/list_goal_contributors_test.exs:43) PASSED Test: permissions if caller has levels company=no_access, space=no_access and goal=champion, then expect code=allowed (test/operately_web/api/queries/list_goal_contributors_test.exs:43) PASSED Test: permissions if caller has levels company=view_access, space=no_access and goal=no_access, then expect code=allowed (test/operately_web/api/queries/list_goal_contributors_test.exs:43) PASSED Test: list_goal_contributors functionality returns contributors for goal without child goals (test/operately_web/api/queries/list_goal_contributors_test.exs:92) PASSED OperatelyWeb.Api.Mutations.RemoveProjectMilestoneTest Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/remove_project_milestone_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/remove_project_milestone_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/remove_project_milestone_test.exs:39) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/remove_project_milestone_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/remove_project_milestone_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/remove_project_milestone_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/remove_project_milestone_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/mutations/remove_project_milestone_test.exs:11) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/remove_project_milestone_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/remove_project_milestone_test.exs:39) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/remove_project_milestone_test.exs:39) PASSED Operately.Data.Change050CreateBindingsBetweenPeopleAndCompanySpaceTest Test: Creates memberships between people and company space (test/operately/data/change_050_create_bindings_between_people_and_company_space_test.exs:39) PASSED Test: Creates bindings between people and company space (test/operately/data/change_050_create_bindings_between_people_and_company_space_test.exs:22) PASSED OperatelyWeb.Api.Mutations.RemoveCompanyMemberTest Test: permissions if caller has levels company=view_access, then expect code=403 (test/operately_web/api/mutations/remove_company_member_test.exs:23) PASSED Test: permissions if caller has levels company=full_access, then expect code=200 (test/operately_web/api/mutations/remove_company_member_test.exs:23) PASSED Test: permissions if caller has levels company=edit_access, then expect code=403 (test/operately_web/api/mutations/remove_company_member_test.exs:23) PASSED Test: remove_company_member functionality admin can remove members (test/operately_web/api/mutations/remove_company_member_test.exs:45) PASSED Test: security it requires authentication (test/operately_web/api/mutations/remove_company_member_test.exs:7) PASSED Test: permissions if caller has levels company=comment_access, then expect code=403 (test/operately_web/api/mutations/remove_company_member_test.exs:23) PASSED OperatelyWeb.Api.Queries.GetGoalTest Test: permissions reviewers have access (test/operately_web/api/queries/get_goal_test.exs:99) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_goal_test.exs:31) PASSED Test: get_goals functionality include_projects (test/operately_web/api/queries/get_goal_test.exs:218) PASSED Test: get_goals functionality include_targets (test/operately_web/api/queries/get_goal_test.exs:269) PASSED Test: get_goals functionality include_privacy (test/operately_web/api/queries/get_goal_test.exs:303) PASSED Test: get_goals functionality include_space (test/operately_web/api/queries/get_goal_test.exs:256) PASSED Test: get_goals functionality include_closed_by (test/operately_web/api/queries/get_goal_test.exs:166) PASSED Test: get_goals functionality include_reviewer (test/operately_web/api/queries/get_goal_test.exs:245) PASSED Test: get_goals functionality when id is not provided (test/operately_web/api/queries/get_goal_test.exs:121) PASSED Test: get_goals functionality include_unread_notifications (test/operately_web/api/queries/get_goal_test.exs:131) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_goal_test.exs:67) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_goal_test.exs:53) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_goal_test.exs:81) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_goal_test.exs:17) PASSED Test: get_goals functionality with no includes (test/operately_web/api/queries/get_goal_test.exs:148) PASSED Test: get_goals functionality include_permissions (test/operately_web/api/queries/get_goal_test.exs:205) PASSED Test: get_goals functionality include_champion (test/operately_web/api/queries/get_goal_test.exs:156) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_goal_test.exs:42) PASSED Test: get_goals functionality include_potential_subscribers (test/operately_web/api/queries/get_goal_test.exs:336) PASSED Test: get_goals functionality when goal does not exist (test/operately_web/api/queries/get_goal_test.exs:125) PASSED Test: get_goals functionality include_last_check_in (test/operately_web/api/queries/get_goal_test.exs:184) PASSED Test: get_goals functionality include_access_levels (test/operately_web/api/queries/get_goal_test.exs:282) PASSED OperatelyWeb.TelemetryTest Test: it records the api response codes (test/operately_web/telemetry_test.exs:57) operately.api.request.status.401:1|c operately.api.request.duration:0|ms PASSED Test: it records the duration of API requests (test/operately_web/telemetry_test.exs:52) operately.api.request.status.401:1|c operately.api.request.duration:0|ms PASSED Test: it records the database query times (test/operately_web/telemetry_test.exs:62) operately.repo.query.total_time:1|ms operately.repo.query.query_time:1|ms operately.repo.query.queue_time:1|ms PASSED OperatelyWeb.Api.Mutations.AddCompanyAdminsTest Test: permissions company members with full access can add new admins (test/operately_web/api/mutations/add_company_admins_test.exs:18) PASSED Test: add_company_admins functionality adds one admin (test/operately_web/api/mutations/add_company_admins_test.exs:54) PASSED Test: permissions company members with non-admin roles can't add new admins (test/operately_web/api/mutations/add_company_admins_test.exs:36) PASSED Test: add_company_admins functionality adds multiple members (test/operately_web/api/mutations/add_company_admins_test.exs:60) PASSED Test: security it requires authentication (test/operately_web/api/mutations/add_company_admins_test.exs:10) PASSED Test: permissions company members with edit access can add new admins (test/operately_web/api/mutations/add_company_admins_test.exs:27) PASSED OperatelyEmail.ProjectCreatedEmailTest Test: sends an email to the project contributors (test/operately_email/project_created_email_test.exs:38) PASSED TurboConnect.QueryTest Test: defining a query with inputs and outputs (test/turbo_connect/query_test.exs:24) PASSED Operately.Operations.GroupPermissionsEditingTest Test: GroupPermissionsEditing operation works when there is no binding to anonymous group (test/operately/operations/group_permissions_editing_test.exs:43) PASSED Test: GroupPermissionsEditing operation edits permissions (test/operately/operations/group_permissions_editing_test.exs:23) PASSED Test: GroupPermissionsEditing operation creates activity (test/operately/operations/group_permissions_editing_test.exs:52) PASSED OperatelyWeb.Api.Mutations.RestoreCompanyMemberTest Test: permissions company members can't restore people (test/operately_web/api/mutations/restore_company_member_test.exs:21) PASSED Test: permissions can't restore people from other companies (test/operately_web/api/mutations/restore_company_member_test.exs:36) PASSED Test: permissions company owners can restore people (test/operately_web/api/mutations/restore_company_member_test.exs:31) PASSED Test: functionality it restores a suspended person (test/operately_web/api/mutations/restore_company_member_test.exs:46) PASSED Test: security it requires authentication (test/operately_web/api/mutations/restore_company_member_test.exs:15) PASSED Test: permissions company admins can restore people (test/operately_web/api/mutations/restore_company_member_test.exs:26) PASSED OperatelyWeb.Api.Queries.GetActivityTest Test: permissions reviewers have access (test/operately_web/api/queries/get_activity_test.exs:94) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_activity_test.exs:28) PASSED Test: get_activity functionality with no includes (test/operately_web/api/queries/get_activity_test.exs:121) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_activity_test.exs:63) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_activity_test.exs:48) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_activity_test.exs:78) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_activity_test.exs:14) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_activity_test.exs:38) PASSED Test: get_activity functionality include_unread_goal_notifications (test/operately_web/api/queries/get_activity_test.exs:133) PASSED Operately.Data.Change031AddRetrospectiveToProjectClosedActivityTest Test: migration doesn't delete current data in activity content (test/operately/data/change_031_add_retrospective_to_project_closed_activity_test.exs:15) PASSED Operately.Data.Change043CreateAccessBindingsBetweenResourceHubsAndPeopleTest Test: creates bindings to exising resource hubs contexts (test/operately/data/change_043_create_access_bindings_between_resource_hubs_and_people_test.exs:15) PASSED OperatelyWeb.Api.Mutations.EditProjectRetrospectiveTest Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_retrospective_test.exs:48) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/edit_project_retrospective_test.exs:48) PASSED Test: edit_project_retrospective functionality doesn't edit retrospective if content doesn't have the correct keys (test/operately_web/api/mutations/edit_project_retrospective_test.exs:101) PASSED Test: permissions if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_retrospective_test.exs:48) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_retrospective_test.exs:48) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_retrospective_test.exs:48) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_retrospective_test.exs:48) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_project_retrospective_test.exs:48) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_project_retrospective_test.exs:19) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_retrospective_test.exs:48) PASSED Test: edit_project_retrospective functionality edits project retrospective (test/operately_web/api/mutations/edit_project_retrospective_test.exs:85) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_project_retrospective_test.exs:48) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_project_retrospective_test.exs:48) PASSED Test: edit_project_retrospective functionality mentioned people are added to subscriptions list (test/operately_web/api/mutations/edit_project_retrospective_test.exs:108) PASSED OperatelyWeb.Api.Mutations.UpdateProjectDescriptionTest Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_project_description_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/update_project_description_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_project_description_test.exs:40) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_project_description_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/update_project_description_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/update_project_description_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/update_project_description_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/mutations/update_project_description_test.exs:12) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_project_description_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/update_project_description_test.exs:40) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/update_project_description_test.exs:40) PASSED Operately.Operations.ResourceHubDocumentEditingTest Test: Editing document doens't send notifications to anyone (test/operately/operations/resource_hub_document_editing_test.exs:24) PASSED Operately.Operations.SpaceJoiningTest Test: SpaceJoining operation adds access group membership (test/operately/operations/space_joining_test.exs:29) PASSED Test: SpaceJoining operation adds member to space (test/operately/operations/space_joining_test.exs:21) PASSED Test: SpaceJoining operation adds access binding (test/operately/operations/space_joining_test.exs:39) PASSED Operately.Data.Change019CreateAccessGroupsForSpacesTest Test: creates access group membership for existing people (test/operately/data/change_019_create_access_groups_for_spaces_test.exs:31) PASSED OperatelyWeb.Api.Queries.GetKeyResourceTest Test: permissions reviewers have access (test/operately_web/api/queries/get_key_resource_test.exs:71) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_key_resource_test.exs:25) PASSED Test: permissions suspended people don't have access (test/operately_web/api/queries/get_key_resource_test.exs:87) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_key_resource_test.exs:47) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_key_resource_test.exs:39) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_key_resource_test.exs:55) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_key_resource_test.exs:12) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_key_resource_test.exs:32) PASSED OperatelyWeb.Api.Mutations.PauseProjectTest Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/pause_project_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/pause_project_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/pause_project_test.exs:39) PASSED Test: permissions if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/pause_project_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/pause_project_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/pause_project_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/pause_project_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/mutations/pause_project_test.exs:11) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/pause_project_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/pause_project_test.exs:39) PASSED Test: permissions if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/pause_project_test.exs:39) PASSED Operately.ShortUuidTest Test: encode! raises an error for invalid UUIDs (test/operately/short_uuid_test.exs:48) PASSED Test: encode/1 returns invalid UUID for non-UUIDs (test/operately/short_uuid_test.exs:15) PASSED Test: decode! raises an error for invalid short UUIDs (test/operately/short_uuid_test.exs:54) PASSED Test: decode/1 returns an error for non-base62 characters (test/operately/short_uuid_test.exs:32) PASSED Test: decode/1 returns an error for impossibly long short uuids (test/operately/short_uuid_test.exs:28) PASSED Test: encoding is performant (test/operately/short_uuid_test.exs:36) PASSED Test: encode/1 encodes a UUID to a short UUID (test/operately/short_uuid_test.exs:4) PASSED Test: decode/1 decodes a short UUID to a UUID (test/operately/short_uuid_test.exs:19) PASSED OperatelyWeb.Api.Mutations.MarkNotificationAsReadTest Test: security you can't mark someone else's notification as read (test/operately_web/api/mutations/mark_notification_as_read_test.exs:13) PASSED Test: security it requires authentication (test/operately_web/api/mutations/mark_notification_as_read_test.exs:9) PASSED Test: mark_all_as_read functionality it marks the notification as read (test/operately_web/api/mutations/mark_notification_as_read_test.exs:34) PASSED Operately.BlobsTest Test: blobs delete_blob/1 deletes the blob (test/operately/blobs_test.exs:68) PASSED Test: blobs get_blob!/1 returns the blob with given id (test/operately/blobs_test.exs:28) PASSED Test: blobs change_blob/1 returns a blob changeset (test/operately/blobs_test.exs:74) PASSED Test: blobs update_blob/2 with valid data updates the blob (test/operately/blobs_test.exs:53) PASSED Test: blobs create_blob/1 with invalid data returns error changeset (test/operately/blobs_test.exs:49) PASSED Test: blobs update_blob/2 with invalid data returns error changeset (test/operately/blobs_test.exs:62) PASSED Test: blobs list_blobs/0 returns all blobs (test/operately/blobs_test.exs:23) PASSED Test: blobs create_blob/1 with valid data creates a blob (test/operately/blobs_test.exs:33) PASSED Operately.Data.Change036AddSpaceToProjectActivitiesTest Test: migration doesn't delete existing data in activity content project_goal_connection (test/operately/data/change_036_add_space_to_project_activities_test.exs:42) PASSED Test: migration doesn't delete existing data in activity content project_archived (test/operately/data/change_036_add_space_to_project_activities_test.exs:25) PASSED Test: migration doesn't delete existing data in activity content project_goal_disconnection (test/operately/data/change_036_add_space_to_project_activities_test.exs:60) PASSED Operately.Data.Change049PopulateCommentEntityIdWithMilestoneIdTest Test: Doesn't affect other comments (test/operately/data/change_049_populate_comment_entity_id_with_milestone_id_test.exs:37) PASSED Test: Populates comment entity_id with milestone id (test/operately/data/change_049_populate_comment_entity_id_with_milestone_id_test.exs:15) PASSED OperatelyWeb.Api.Mutations.CreateResourceHubDocumentTest Test: permissions if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_document_test.exs:43) PASSED Test: permissions if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/mutations/create_resource_hub_document_test.exs:43) PASSED Test: subscriptions to notifications adds mentioned people to subscription list (test/operately_web/api/mutations/create_resource_hub_document_test.exs:161) PASSED Test: permissions if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_document_test.exs:43) PASSED Test: functionality creates document within folder (test/operately_web/api/mutations/create_resource_hub_document_test.exs:95) PASSED Test: permissions if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_document_test.exs:43) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_document_test.exs:43) PASSED Test: permissions if caller has levels company=comment_access and space=no_access, then expect code=403 (test/operately_web/api/mutations/create_resource_hub_document_test.exs:43) PASSED Test: security it requires authentication (test/operately_web/api/mutations/create_resource_hub_document_test.exs:18) PASSED Test: functionality creates draft document (test/operately_web/api/mutations/create_resource_hub_document_test.exs:113) PASSED Test: subscriptions to notifications creates subscription list for document (test/operately_web/api/mutations/create_resource_hub_document_test.exs:139) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=403 (test/operately_web/api/mutations/create_resource_hub_document_test.exs:43) PASSED Test: functionality creates document within hub (test/operately_web/api/mutations/create_resource_hub_document_test.exs:78) PASSED Test: subscriptions to notifications doesn't create repeated subscription (test/operately_web/api/mutations/create_resource_hub_document_test.exs:183) PASSED Operately.Operations.GroupMembersAddingTest Test: GroupMembersAdding operation adds members to access group (test/operately/operations/group_members_adding_test.exs:45) PASSED Test: GroupMembersAdding operation creates notification (test/operately/operations/group_members_adding_test.exs:113) PASSED Test: GroupMembersAdding operation creates activity (test/operately/operations/group_members_adding_test.exs:91) PASSED Test: GroupMembersAdding operation adds members to group (test/operately/operations/group_members_adding_test.exs:34) PASSED Test: GroupMembersAdding operation adds access bindings (test/operately/operations/group_members_adding_test.exs:71) PASSED Operately.AccessGroupsTest Test: access_groups get_group!/1 returns the group with given id (test/operately/access/groups_test.exs:15) PASSED Test: access_groups delete_group/1 deletes the group (test/operately/access/groups_test.exs:33) PASSED Test: access_groups update_group/2 with valid data updates the group (test/operately/access/groups_test.exs:26) PASSED Test: access_groups change_group/1 returns a group changeset (test/operately/access/groups_test.exs:39) PASSED Test: access_groups list_groups/0 returns all groups (test/operately/access/groups_test.exs:10) PASSED Test: access_groups create_group/1 with valid data creates a group (test/operately/access/groups_test.exs:20) PASSED OperatelyWeb.Api.Mutations.CreateProjectTest Test: space permissions space member without edit access can't create project (test/operately_web/api/mutations/create_project_test.exs:70) PASSED Test: company permissions company member can see only their company (test/operately_web/api/mutations/create_project_test.exs:25) PASSED Test: space permissions space members with edit access can create project (test/operately_web/api/mutations/create_project_test.exs:77) PASSED Test: create_project functionality creates project within space (test/operately_web/api/mutations/create_project_test.exs:107) PASSED Test: company permissions company admins can create project (test/operately_web/api/mutations/create_project_test.exs:44) PASSED Test: company permissions company members with edit access can create project (test/operately_web/api/mutations/create_project_test.exs:37) PASSED Test: space permissions company member without view access can't see space (test/operately_web/api/mutations/create_project_test.exs:65) PASSED Test: security it requires authentication (test/operately_web/api/mutations/create_project_test.exs:11) PASSED Test: create_project functionality creates project within company (test/operately_web/api/mutations/create_project_test.exs:112) PASSED Test: company permissions company members without edit access can't create project (test/operately_web/api/mutations/create_project_test.exs:32) PASSED Test: space permissions company admins can create project (test/operately_web/api/mutations/create_project_test.exs:84) PASSED Operately.Operations.ResourceHubLinkDeletingTest Test: Deleting link sends notifications to selected people (test/operately/operations/resource_hub_link_deleting_test.exs:40) PASSED Test: Deleting link sends notifications to everyone (test/operately/operations/resource_hub_link_deleting_test.exs:20) PASSED Test: Person without permissions is not notified (test/operately/operations/resource_hub_link_deleting_test.exs:60) PASSED Operately.Data.Change039AddSpaceToProjectTimelineEditedActivityTest Test: migration doesn't delete existing data in activity content (test/operately/data/change_039_add_space_to_project_timeline_edited_activity_test.exs:15) PASSED Operately.Data.Change012CreateGoalsAccessContextTest Test: creates access_context successfully when a goal already has access context (test/operately/data/change_012_create_goals_access_context_test.exs:41) PASSED Test: creates access_context for existing goals (test/operately/data/change_012_create_goals_access_context_test.exs:25) PASSED Test: creates access_context for soft-deleted goals (test/operately/data/change_012_create_goals_access_context_test.exs:52) PASSED OperatelyWeb.Api.Mutations.EditResourceHubFileTest Test: permissions if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/edit_resource_hub_file_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=no_access, then expect code=404 (test/operately_web/api/mutations/edit_resource_hub_file_test.exs:40) PASSED Test: permissions if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/edit_resource_hub_file_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/edit_resource_hub_file_test.exs:40) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/mutations/edit_resource_hub_file_test.exs:40) PASSED Test: permissions if caller has levels company=comment_access and space=no_access, then expect code=403 (test/operately_web/api/mutations/edit_resource_hub_file_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_resource_hub_file_test.exs:15) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=403 (test/operately_web/api/mutations/edit_resource_hub_file_test.exs:40) PASSED Test: functionality edits file (test/operately_web/api/mutations/edit_resource_hub_file_test.exs:79) PASSED Operately.Data.Change010CreateGroupsAccessContextTest Test: creates access_context successfully when a group already has access context (test/operately/data/change_010_create_groups_access_context_test.exs:40) PASSED Test: creates access_context for existing groups (test/operately/data/change_010_create_groups_access_context_test.exs:23) PASSED Test: creates access_context for soft-deleted groups (test/operately/data/change_010_create_groups_access_context_test.exs:51) PASSED OperatelyWeb.Api.Mutations.EditProjectNameTest Test: permissions space members without edit access can't edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:67) PASSED Test: permissions company members without view access can't see a project (test/operately_web/api/mutations/edit_project_name_test.exs:25) PASSED Test: permissions reviewers can edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:133) PASSED Test: permissions space members with edit access can edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:75) PASSED Test: permissions contributors without edit access can't edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:96) PASSED Test: permissions company owners can edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:46) PASSED Test: permissions company members with edit access can edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:39) PASSED Test: permissions space members without view access can't see a project (test/operately_web/api/mutations/edit_project_name_test.exs:59) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_project_name_test.exs:11) PASSED Test: permissions contributors with edit access can edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:107) PASSED Test: permissions champions can edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:118) PASSED Test: permissions company members without edit access can't edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:32) PASSED Test: permissions space managers can edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:83) PASSED Test: edit_project_name functionality edits project name (test/operately_web/api/mutations/edit_project_name_test.exs:152) PASSED Operately.GroupsTest Test: groups change_group/1 returns a group changeset (test/operately/groups_test.exs:61) PASSED Test: groups get_group!/1 returns the group with given id (test/operately/groups_test.exs:34) PASSED Test: groups update_group/2 with valid data updates the group (test/operately/groups_test.exs:49) PASSED Test: groups create_group/1 with invalid data returns error changeset (test/operately/groups_test.exs:45) PASSED Test: groups update_group/2 with invalid data returns error changeset (test/operately/groups_test.exs:56) PASSED Test: groups list_potential_members returns members that are not in the group (test/operately/groups_test.exs:23) PASSED Test: groups create_group/1 with valid data creates a group (test/operately/groups_test.exs:38) PASSED Operately.Projects.ContributorTest Test: getter get (test/operately/projects/contributor_test.exs:46) PASSED TurboConnect.TsGenTest Test: generating TypeScript code (test/turbo_connect/ts_gen_test.exs:231) PASSED OperatelyWeb.Api.Mutations.JoinCompanyText Test: join_company functionality if fails if token is invalid (test/operately_web/api/mutations/join_company_test.exs:32) PASSED Test: join_company functionality it fails if passwords don't match (test/operately_web/api/mutations/join_company_test.exs:21) PASSED Test: join_company functionality change password successfully (test/operately_web/api/mutations/join_company_test.exs:43) PASSED OperatelyWeb.PageControllerTest Test: GET / (test/operately_web/controllers/page_controller_test.exs:6) PASSED OperatelyWeb.Api.Mutations.AddCompanyOwnersTest Test: security regular members can't add owners (test/operately_web/api/mutations/add_company_owners_test.exs:17) PASSED Test: security company owners can add owners (test/operately_web/api/mutations/add_company_owners_test.exs:31) PASSED Test: security it requires authentication (test/operately_web/api/mutations/add_company_owners_test.exs:13) PASSED Test: security admins can't add owners (test/operately_web/api/mutations/add_company_owners_test.exs:24) PASSED OperatelyWeb.Api.Mutations.MarkNotificationsAsReadTest Test: security you can't mark someone else's notification as read (test/operately_web/api/mutations/mark_notifications_as_read_test.exs:13) PASSED Test: security it requires authentication (test/operately_web/api/mutations/mark_notifications_as_read_test.exs:9) PASSED Test: mark_as_read functionality it marks notifications as read (test/operately_web/api/mutations/mark_notifications_as_read_test.exs:29) PASSED Operately.WorkMaps.WorkMapItemTest Test: build_item/2 for goals a closed goal with success 'no' should have status 'missed' (test/operately/work_maps/work_map_item_test.exs:71) PASSED Test: build_item/2 for projects given a project's last check-in is on_track, its status should also be on_track (test/operately/work_maps/work_map_item_test.exs:28) PASSED Test: build_item/2 for goals given a goal's last update is pending, its status should also be pending (test/operately/work_maps/work_map_item_test.exs:85) PASSED Test: build_item/2 for goals given a goal's last update is concern, its status should also be concern (test/operately/work_maps/work_map_item_test.exs:85) PASSED Test: build_item/2 for projects a project without check-in should be 'on_track' (test/operately/work_maps/work_map_item_test.exs:41) PASSED Test: build_item/2 for projects given a project's last check-in is issue, its status should also be issue (test/operately/work_maps/work_map_item_test.exs:28) PASSED Test: build_item/2 for goals a closed goal with success 'yes' should have status 'achieved' (test/operately/work_maps/work_map_item_test.exs:60) PASSED Test: build_item/2 for projects a closed project should have status 'completed' (test/operately/work_maps/work_map_item_test.exs:13) PASSED Test: build_item/2 for goals given a goal's last update is issue, its status should also be issue (test/operately/work_maps/work_map_item_test.exs:85) PASSED Test: build_item/2 for goals a goal without update should be 'on_track' (test/operately/work_maps/work_map_item_test.exs:97) PASSED Test: build_item/2 for projects given a project's last check-in is caution, its status should also be caution (test/operately/work_maps/work_map_item_test.exs:28) PASSED Test: build_item/2 for goals given a goal's last update is on_track, its status should also be on_track (test/operately/work_maps/work_map_item_test.exs:85) PASSED Finished in 88005ms 2 failed, 0 excluded, 2612 passed %IO.Stream{device: :standard_io, raw: false, line_or_bytes: :line} Rerunning failed tests... Operately.PubSub.PostgresPubSubTest Test: operately endpoint is able to broadcast messages to the channel (test/operately/pub_sub/postgres_pub_sub_test.exs:42) PASSED Test: broadcast/4 sends a message to the Postgres channel (test/operately/pub_sub/postgres_pub_sub_test.exs:30) PASSED Finished in 50ms 0 failed, 0 excluded, 2 passed make test.ee OperatelyEE.CompanyCreationNotificationJobTest Test: it sends a notification to Discord (ee/test/lib/company_creation_notification_job_test.exs:21) PASSED OperatelyEE.AccountOnboardingJobTest Test: it adds the new user to the contact list (ee/test/lib/account_onboarding_job_test.exs:18) PASSED Finished in 357ms 0 failed, 0 excluded, 2 passed make test.npm Determining test suites to run...    RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...     PASS  assets/js/features/goals/GoalTree/tree/__tests__/buildTree.test.tsx  RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...     PASS  assets/js/components/RichContent/contentOps.test.tsx  RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...     PASS  assets/js/utils/timeframes.test.tsx  RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...     PASS  assets/js/components/RichContent/Summary.test.tsx  RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...     PASS  assets/js/utils/time.test.tsx  RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...     PASS  assets/js/utils/strings.test.tsx  RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...     PASS  assets/js/utils/numbers.test.tsx  RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...     PASS  assets/js/models/goals/__tests__/index.test.tsx  RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...     PASS  assets/js/features/Permissions/AccessFields.test.tsx  RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...     PASS  assets/js/utils/validators.test.tsx  RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...     PASS  assets/js/models/projects/index.test.tsx  RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...     PASS  assets/js/utils/quarters.test.tsx  RUNS  ...      RUNS  ...      RUNS  ...     PASS  assets/js/models/goals/filterPossibleParentGoals.test.tsx  RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...     PASS  assets/js/models/goals/index.test.tsx  RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...      RUNS  ...     PASS  assets/js/models/people/index.test.tsx  RUNS  ...     Test Suites: 15 passed, 15 total Tests: 125 passed, 125 total Snapshots: 0 total Time: 4.616 s Ran all test suites. Exporting environment variables Exporting SEMAPHORE_JOB_RESULT [ -f app/testreports/junit.xml ] && test-results publish app/testreports/junit.xml * Using exunit parser * Saving results to /tmp/test-results-4249100516/result-3733959069.json * Saving results to /tmp/test-results1650787243 * Pushing artifacts: $ /usr/local/bin/artifact push job /tmp/test-results1650787243 -d test-results/junit.json * starting to generate summary * Saving results to /tmp/test-results4204521323 * Pushing artifacts: $ /usr/local/bin/artifact push job /tmp/test-results4204521323 -d test-results/summary.json * Pushing artifacts: $ /usr/local/bin/artifact push workflow /tmp/test-results1650787243 -d test-results/77752cec-b5e6-4a74-9dd1-fa21d670fb61/72ebddc6-4fd7-4816-b3cb-c57ca3426024.json * Pushing artifacts: $ /usr/local/bin/artifact push job app/testreports/junit.xml -d test-results/junit.xml artifact push workflow screenshots [Apr 29 10:31:41.605] Successfully pushed artifact for current workflow. [Apr 29 10:31:41.606] * Local source: screenshots. [Apr 29 10:31:41.606] * Remote destination: artifacts/workflows/27bf7e82-9b26-4c7b-83d7-d7aa77ec1461/screenshots.