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 2286 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: 3814, done. remote: Counting objects: 0% (1/3814) remote: Counting objects: 1% (39/3814) remote: Counting objects: 2% (77/3814) remote: Counting objects: 3% (115/3814) remote: Counting objects: 4% (153/3814) remote: Counting objects: 5% (191/3814) remote: Counting objects: 6% (229/3814) remote: Counting objects: 7% (267/3814) remote: Counting objects: 8% (306/3814) remote: Counting objects: 9% (344/3814) remote: Counting objects: 10% (382/3814) remote: Counting objects: 11% (420/3814) remote: Counting objects: 12% (458/3814) remote: Counting objects: 13% (496/3814) remote: Counting objects: 14% (534/3814) remote: Counting objects: 15% (573/3814) remote: Counting objects: 16% (611/3814) remote: Counting objects: 17% (649/3814) remote: Counting objects: 18% (687/3814) remote: Counting objects: 19% (725/3814) remote: Counting objects: 20% (763/3814) remote: Counting objects: 21% (801/3814) remote: Counting objects: 22% (840/3814) remote: Counting objects: 23% (878/3814) remote: Counting objects: 24% (916/3814) remote: Counting objects: 25% (954/3814) remote: Counting objects: 26% (992/3814) remote: Counting objects: 27% (1030/3814) remote: Counting objects: 28% (1068/3814) remote: Counting objects: 29% (1107/3814) remote: Counting objects: 30% (1145/3814) remote: Counting objects: 31% (1183/3814) remote: Counting objects: 32% (1221/3814) remote: Counting objects: 33% (1259/3814) remote: Counting objects: 34% (1297/3814) remote: Counting objects: 35% (1335/3814) remote: Counting objects: 36% (1374/3814) remote: Counting objects: 37% (1412/3814) remote: Counting objects: 38% (1450/3814) remote: Counting objects: 39% (1488/3814) remote: Counting objects: 40% (1526/3814) remote: Counting objects: 41% (1564/3814) remote: Counting objects: 42% (1602/3814) remote: Counting objects: 43% (1641/3814) remote: Counting objects: 44% (1679/3814) remote: Counting objects: 45% (1717/3814) remote: Counting objects: 46% (1755/3814) remote: Counting objects: 47% (1793/3814) remote: Counting objects: 48% (1831/3814) remote: Counting objects: 49% (1869/3814) remote: Counting objects: 50% (1907/3814) remote: Counting objects: 51% (1946/3814) remote: Counting objects: 52% (1984/3814) remote: Counting objects: 53% (2022/3814) remote: Counting objects: 54% (2060/3814) remote: Counting objects: 55% (2098/3814) remote: Counting objects: 56% (2136/3814) remote: Counting objects: 57% (2174/3814) remote: Counting objects: 58% (2213/3814) remote: Counting objects: 59% (2251/3814) remote: Counting objects: 60% (2289/3814) remote: Counting objects: 61% (2327/3814) remote: Counting objects: 62% (2365/3814) remote: Counting objects: 63% (2403/3814) remote: Counting objects: 64% (2441/3814) remote: Counting objects: 65% (2480/3814) remote: Counting objects: 66% (2518/3814) remote: Counting objects: 67% (2556/3814) remote: Counting objects: 68% (2594/3814) remote: Counting objects: 69% (2632/3814) remote: Counting objects: 70% (2670/3814) remote: Counting objects: 71% (2708/3814) remote: Counting objects: 72% (2747/3814) remote: Counting objects: 73% (2785/3814) remote: Counting objects: 74% (2823/3814) remote: Counting objects: 75% (2861/3814) remote: Counting objects: 76% (2899/3814) remote: Counting objects: 77% (2937/3814) remote: Counting objects: 78% (2975/3814) remote: Counting objects: 79% (3014/3814) remote: Counting objects: 80% (3052/3814) remote: Counting objects: 81% (3090/3814) remote: Counting objects: 82% (3128/3814) remote: Counting objects: 83% (3166/3814) remote: Counting objects: 84% (3204/3814) remote: Counting objects: 85% (3242/3814) remote: Counting objects: 86% (3281/3814) remote: Counting objects: 87% (3319/3814) remote: Counting objects: 88% (3357/3814) remote: Counting objects: 89% (3395/3814) remote: Counting objects: 90% (3433/3814) remote: Counting objects: 91% (3471/3814) remote: Counting objects: 92% (3509/3814) remote: Counting objects: 93% (3548/3814) remote: Counting objects: 94% (3586/3814) remote: Counting objects: 95% (3624/3814) remote: Counting objects: 96% (3662/3814) remote: Counting objects: 97% (3700/3814) remote: Counting objects: 98% (3738/3814) remote: Counting objects: 99% (3776/3814) remote: Counting objects: 100% (3814/3814) remote: Counting objects: 100% (3814/3814), done. remote: Compressing objects: 0% (1/2639) remote: Compressing objects: 1% (27/2639) remote: Compressing objects: 2% (53/2639) remote: Compressing objects: 3% (80/2639) remote: Compressing objects: 4% (106/2639) remote: Compressing objects: 5% (132/2639) remote: Compressing objects: 6% (159/2639) remote: Compressing objects: 7% (185/2639) remote: Compressing objects: 8% (212/2639) remote: Compressing objects: 9% (238/2639) remote: Compressing objects: 10% (264/2639) remote: Compressing objects: 11% (291/2639) remote: Compressing objects: 12% (317/2639) remote: Compressing objects: 13% (344/2639) remote: Compressing objects: 14% (370/2639) remote: Compressing objects: 15% (396/2639) remote: Compressing objects: 16% (423/2639) remote: Compressing objects: 17% (449/2639) remote: Compressing objects: 18% (476/2639) remote: Compressing objects: 19% (502/2639) remote: Compressing objects: 20% (528/2639) remote: Compressing objects: 21% (555/2639) remote: Compressing objects: 22% (581/2639) remote: Compressing objects: 23% (607/2639) remote: Compressing objects: 24% (634/2639) remote: Compressing objects: 25% (660/2639) remote: Compressing objects: 26% (687/2639) remote: Compressing objects: 27% (713/2639) remote: Compressing objects: 28% (739/2639) remote: Compressing objects: 29% (766/2639) remote: Compressing objects: 30% (792/2639) remote: Compressing objects: 31% (819/2639) remote: Compressing objects: 32% (845/2639) remote: Compressing objects: 33% (871/2639) remote: Compressing objects: 34% (898/2639) remote: Compressing objects: 35% (924/2639) remote: Compressing objects: 36% (951/2639) remote: Compressing objects: 37% (977/2639) remote: Compressing objects: 38% (1003/2639) remote: Compressing objects: 39% (1030/2639) remote: Compressing objects: 40% (1056/2639) remote: Compressing objects: 41% (1082/2639) remote: Compressing objects: 42% (1109/2639) remote: Compressing objects: 43% (1135/2639) remote: Compressing objects: 44% (1162/2639) remote: Compressing objects: 45% (1188/2639) remote: Compressing objects: 46% (1214/2639) remote: Compressing objects: 47% (1241/2639) remote: Compressing objects: 48% (1267/2639) remote: Compressing objects: 49% (1294/2639) remote: Compressing objects: 50% (1320/2639) remote: Compressing objects: 51% (1346/2639) remote: Compressing objects: 52% (1373/2639) remote: Compressing objects: 53% (1399/2639) remote: Compressing objects: 54% (1426/2639) remote: Compressing objects: 55% (1452/2639) remote: Compressing objects: 56% (1478/2639) remote: Compressing objects: 57% (1505/2639) remote: Compressing objects: 58% (1531/2639) remote: Compressing objects: 59% (1558/2639) remote: Compressing objects: 60% (1584/2639) remote: Compressing objects: 61% (1610/2639) remote: Compressing objects: 62% (1637/2639) remote: Compressing objects: 63% (1663/2639) remote: Compressing objects: 64% (1689/2639) remote: Compressing objects: 65% (1716/2639) remote: Compressing objects: 66% (1742/2639) remote: Compressing objects: 67% (1769/2639) remote: Compressing objects: 68% (1795/2639) remote: Compressing objects: 69% (1821/2639) remote: Compressing objects: 70% (1848/2639) remote: Compressing objects: 71% (1874/2639) remote: Compressing objects: 72% (1901/2639) remote: Compressing objects: 73% (1927/2639) remote: Compressing objects: 74% (1953/2639) remote: Compressing objects: 75% (1980/2639) remote: Compressing objects: 76% (2006/2639) remote: Compressing objects: 77% (2033/2639) remote: Compressing objects: 78% (2059/2639) remote: Compressing objects: 79% (2085/2639) remote: Compressing objects: 80% (2112/2639) remote: Compressing objects: 81% (2138/2639) remote: Compressing objects: 82% (2164/2639) remote: Compressing objects: 83% (2191/2639) remote: Compressing objects: 84% (2217/2639) remote: Compressing objects: 85% (2244/2639) remote: Compressing objects: 86% (2270/2639) remote: Compressing objects: 87% (2296/2639) remote: Compressing objects: 88% (2323/2639) remote: Compressing objects: 89% (2349/2639) remote: Compressing objects: 90% (2376/2639) remote: Compressing objects: 91% (2402/2639) remote: Compressing objects: 92% (2428/2639) remote: Compressing objects: 93% (2455/2639) remote: Compressing objects: 94% (2481/2639) remote: Compressing objects: 95% (2508/2639) remote: Compressing objects: 96% (2534/2639) remote: Compressing objects: 97% (2560/2639) remote: Compressing objects: 98% (2587/2639) remote: Compressing objects: 99% (2613/2639) remote: Compressing objects: 100% (2639/2639) remote: Compressing objects: 100% (2639/2639), done. Receiving objects: 0% (1/3814) Receiving objects: 1% (39/3814) Receiving objects: 2% (77/3814) Receiving objects: 3% (115/3814) Receiving objects: 4% (153/3814) Receiving objects: 5% (191/3814) Receiving objects: 6% (229/3814) Receiving objects: 7% (267/3814) Receiving objects: 8% (306/3814) Receiving objects: 9% (344/3814) Receiving objects: 10% (382/3814) Receiving objects: 11% (420/3814) Receiving objects: 12% (458/3814) Receiving objects: 13% (496/3814) Receiving objects: 14% (534/3814) Receiving objects: 15% (573/3814) Receiving objects: 16% (611/3814) Receiving objects: 17% (649/3814) Receiving objects: 18% (687/3814) Receiving objects: 19% (725/3814) Receiving objects: 20% (763/3814) Receiving objects: 21% (801/3814) Receiving objects: 22% (840/3814) Receiving objects: 23% (878/3814) Receiving objects: 24% (916/3814) Receiving objects: 25% (954/3814) Receiving objects: 26% (992/3814) Receiving objects: 27% (1030/3814) Receiving objects: 28% (1068/3814) Receiving objects: 29% (1107/3814) Receiving objects: 30% (1145/3814) Receiving objects: 31% (1183/3814) Receiving objects: 32% (1221/3814) Receiving objects: 33% (1259/3814) Receiving objects: 34% (1297/3814) Receiving objects: 35% (1335/3814) Receiving objects: 36% (1374/3814) Receiving objects: 37% (1412/3814) Receiving objects: 38% (1450/3814) Receiving objects: 39% (1488/3814) Receiving objects: 40% (1526/3814) Receiving objects: 41% (1564/3814) Receiving objects: 42% (1602/3814) Receiving objects: 43% (1641/3814) Receiving objects: 44% (1679/3814) Receiving objects: 45% (1717/3814) Receiving objects: 46% (1755/3814) Receiving objects: 47% (1793/3814) Receiving objects: 48% (1831/3814) Receiving objects: 49% (1869/3814) Receiving objects: 50% (1907/3814) Receiving objects: 51% (1946/3814) Receiving objects: 52% (1984/3814) Receiving objects: 53% (2022/3814) Receiving objects: 54% (2060/3814) Receiving objects: 55% (2098/3814) Receiving objects: 56% (2136/3814) Receiving objects: 57% (2174/3814) Receiving objects: 58% (2213/3814) Receiving objects: 59% (2251/3814) Receiving objects: 60% (2289/3814) Receiving objects: 61% (2327/3814) Receiving objects: 62% (2365/3814) Receiving objects: 63% (2403/3814) Receiving objects: 64% (2441/3814) Receiving objects: 65% (2480/3814) Receiving objects: 66% (2518/3814) Receiving objects: 67% (2556/3814) Receiving objects: 68% (2594/3814) Receiving objects: 69% (2632/3814) Receiving objects: 70% (2670/3814) Receiving objects: 71% (2708/3814) Receiving objects: 72% (2747/3814) Receiving objects: 73% (2785/3814) Receiving objects: 74% (2823/3814) Receiving objects: 75% (2861/3814) Receiving objects: 76% (2899/3814) Receiving objects: 77% (2937/3814) Receiving objects: 78% (2975/3814) Receiving objects: 79% (3014/3814) Receiving objects: 80% (3052/3814) Receiving objects: 81% (3090/3814) Receiving objects: 82% (3128/3814) Receiving objects: 83% (3166/3814) Receiving objects: 84% (3204/3814) Receiving objects: 85% (3242/3814) Receiving objects: 86% (3281/3814) Receiving objects: 87% (3319/3814) remote: Total 3814 (delta 1294), reused 2292 (delta 950), pack-reused 0 (from 0) Receiving objects: 88% (3357/3814) Receiving objects: 89% (3395/3814) Receiving objects: 90% (3433/3814) Receiving objects: 91% (3471/3814) Receiving objects: 92% (3509/3814) Receiving objects: 93% (3548/3814) Receiving objects: 94% (3586/3814) Receiving objects: 95% (3624/3814) Receiving objects: 96% (3662/3814) Receiving objects: 97% (3700/3814) Receiving objects: 98% (3738/3814) Receiving objects: 99% (3776/3814) Receiving objects: 100% (3814/3814) Receiving objects: 100% (3814/3814), 1.92 MiB | 4.00 MiB/s, done. Resolving deltas: 0% (0/1294) Resolving deltas: 1% (13/1294) Resolving deltas: 2% (26/1294) Resolving deltas: 3% (39/1294) Resolving deltas: 4% (52/1294) Resolving deltas: 5% (65/1294) Resolving deltas: 6% (78/1294) Resolving deltas: 7% (91/1294) Resolving deltas: 8% (104/1294) Resolving deltas: 9% (117/1294) Resolving deltas: 10% (130/1294) Resolving deltas: 11% (143/1294) Resolving deltas: 12% (156/1294) Resolving deltas: 13% (169/1294) Resolving deltas: 14% (182/1294) Resolving deltas: 15% (195/1294) Resolving deltas: 16% (208/1294) Resolving deltas: 17% (220/1294) Resolving deltas: 18% (233/1294) Resolving deltas: 19% (246/1294) Resolving deltas: 20% (259/1294) Resolving deltas: 21% (272/1294) Resolving deltas: 22% (285/1294) Resolving deltas: 23% (298/1294) Resolving deltas: 24% (311/1294) Resolving deltas: 25% (324/1294) Resolving deltas: 26% (337/1294) Resolving deltas: 27% (350/1294) Resolving deltas: 28% (363/1294) Resolving deltas: 29% (376/1294) Resolving deltas: 30% (389/1294) Resolving deltas: 31% (402/1294) Resolving deltas: 32% (415/1294) Resolving deltas: 33% (428/1294) Resolving deltas: 34% (440/1294) Resolving deltas: 35% (453/1294) Resolving deltas: 36% (466/1294) Resolving deltas: 37% (479/1294) Resolving deltas: 38% (492/1294) Resolving deltas: 39% (505/1294) Resolving deltas: 40% (518/1294) Resolving deltas: 41% (531/1294) Resolving deltas: 42% (544/1294) Resolving deltas: 43% (557/1294) Resolving deltas: 44% (570/1294) Resolving deltas: 45% (583/1294) Resolving deltas: 46% (596/1294) Resolving deltas: 47% (609/1294) Resolving deltas: 48% (622/1294) Resolving deltas: 49% (635/1294) Resolving deltas: 50% (647/1294) Resolving deltas: 51% (660/1294) Resolving deltas: 52% (673/1294) Resolving deltas: 53% (686/1294) Resolving deltas: 54% (699/1294) Resolving deltas: 55% (712/1294) Resolving deltas: 56% (725/1294) Resolving deltas: 57% (738/1294) Resolving deltas: 58% (751/1294) Resolving deltas: 59% (764/1294) Resolving deltas: 60% (777/1294) Resolving deltas: 61% (790/1294) Resolving deltas: 62% (803/1294) Resolving deltas: 63% (816/1294) Resolving deltas: 64% (829/1294) Resolving deltas: 65% (842/1294) Resolving deltas: 66% (855/1294) Resolving deltas: 67% (867/1294) Resolving deltas: 68% (880/1294) Resolving deltas: 69% (893/1294) Resolving deltas: 70% (906/1294) Resolving deltas: 71% (919/1294) Resolving deltas: 72% (932/1294) Resolving deltas: 73% (945/1294) Resolving deltas: 74% (958/1294) Resolving deltas: 75% (971/1294) Resolving deltas: 76% (984/1294) Resolving deltas: 77% (997/1294) Resolving deltas: 78% (1010/1294) Resolving deltas: 79% (1023/1294) Resolving deltas: 80% (1036/1294) Resolving deltas: 81% (1049/1294) Resolving deltas: 82% (1062/1294) Resolving deltas: 83% (1075/1294) Resolving deltas: 84% (1087/1294) Resolving deltas: 85% (1100/1294) Resolving deltas: 86% (1113/1294) Resolving deltas: 87% (1126/1294) Resolving deltas: 88% (1139/1294) Resolving deltas: 89% (1152/1294) Resolving deltas: 90% (1165/1294) Resolving deltas: 91% (1178/1294) Resolving deltas: 92% (1191/1294) Resolving deltas: 93% (1204/1294) Resolving deltas: 94% (1217/1294) Resolving deltas: 95% (1230/1294) Resolving deltas: 96% (1243/1294) Resolving deltas: 97% (1256/1294) Resolving deltas: 98% (1269/1294) Resolving deltas: 99% (1282/1294) Resolving deltas: 100% (1294/1294) Resolving deltas: 100% (1294/1294), done. HEAD is now at 487a200 fix: Show outdated items in Work Map (#2365) cache restore app-deps HIT: 'app-deps', using key 'app-deps'. Downloading key 'app-deps'... Download complete. Duration: 132.189155ms. Size: 4.1M bytes. Unpacking '/tmp/app-deps-2883676176'... Unpack complete. Duration: 69.520323ms. Restored: app/deps/. cache restore app-build HIT: 'app-build', using key 'app-build'. Downloading key 'app-build'... Download complete. Duration: 2.846148148s. Size: 34.7M bytes. Unpacking '/tmp/app-build-2500754727'... Unpack complete. Duration: 488.630967ms. 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: 805.480423ms. Size: 45.2M bytes. Unpacking '/tmp/app-node-modules-922125398'... Unpack complete. Duration: 2.296804782s. 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: 720.474432ms. Size: 48.3M bytes. Unpacking '/tmp/turboui-node-modules-530542979'... Unpack complete. Duration: 2.673731334s. Restored: turboui/node_modules/. cache restore turboui-dist HIT: 'turboui-dist', using key 'turboui-dist'. Downloading key 'turboui-dist'... Download complete. Duration: 2.667824ms. Size: 77.7K bytes. Unpacking '/tmp/turboui-dist-3908129457'... Unpack complete. Duration: 6.196121ms. Restored: turboui/dist/. ./scripts/cache-fix-for-erlang make test.build [?25l[+] Running 0/3 ⠙ app Pulling 0.1s  ⠋ db Pulling 0.1s  ⠋ s3mock Pulling 0.1s  [?25h[?25l[+] Running 0/3 ⠹ app Pulling 0.2s  ⠙ db Pulling 0.2s  ⠙ s3mock Pulling 0.2s  [?25h[?25l[+] Running 0/3 ⠸ app Pulling 0.3s  ⠹ db Pulling 0.3s  ⠹ s3mock Pulling 0.3s  [?25h[?25l[+] Running 0/3 ⠼ app Pulling 0.4s  ⠸ db Pulling 0.4s  ⠸ s3mock Pulling 0.4s  [?25h[?25l[+] Running 0/3 ⠴ app Pulling 0.5s  ⠼ db Pulling 0.5s  ⠼ s3mock Pulling 0.5s  [?25h[?25l[+] Running 0/3 ⠦ app Pulling 0.6s  ⠴ db Pulling 0.6s  ⠴ s3mock Pulling 0.6s  [?25h[?25l[+] Running 0/3 ⠧ app Pulling 0.7s  ⠦ db Pulling 0.7s  ⠦ s3mock Pulling 0.7s  [?25h[?25l[+] Running 0/3 ⠇ app Pulling 0.8s  ⠧ db Pulling 0.8s  ⠧ s3mock Pulling 0.8s  [?25h[?25l[+] Running 0/3 ⠏ app Pulling 0.9s  ⠇ db Pulling 0.9s  ⠇ s3mock Pulling 0.9s  [?25h[?25l[+] Running 0/3 ⠋ app Pulling 1.0s  ⠏ db Pulling 1.0s  ⠏ s3mock Pulling 1.0s  [?25h[?25l[+] Running 0/3 ⠙ app Pulling 1.1s  ⠋ db Pulling 1.1s  ⠋ s3mock Pulling 1.1s  [?25h[?25l[+] Running 0/3 ⠹ app Pulling 1.2s  ⠙ db Pulling 1.2s  ⠙ s3mock Pulling 1.2s  [?25h[?25l[+] Running 0/3 ⠸ app Pulling 1.3s  ⠹ db Pulling 1.3s  ⠹ s3mock Pulling 1.3s  [?25h[?25l[+] Running 0/3 ⠼ app Pulling 1.4s  ⠸ db Pulling 1.4s  ⠸ s3mock Pulling 1.4s  [?25h[?25l[+] Running 0/3 ⠴ app Pulling 1.5s  ⠼ db Pulling 1.5s  ⠼ s3mock Pulling 1.5s  [?25h[?25l[+] Running 0/3 ⠦ app Pulling 1.6s  ⠴ db Pulling 1.6s  ⠴ s3mock Pulling 1.6s  [?25h[?25l[+] Running 0/3 ⠧ app Pulling 1.7s  ⠦ db Pulling 1.7s  ⠦ s3mock Pulling 1.7s  [?25h[?25l[+] Running 0/23 ⠇ app [⠀⠀⠀⠀] Pulling 1.8s  ⠧ db [⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 1.8s  ⠧ s3mock [⠀⠀⠀] Pulling 1.8s  [?25h[?25l[+] Running 0/23 ⠏ app [⠀⠀⠀⠀] Pulling 1.9s  ⠇ db [⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 1.9s  ⠇ s3mock [⠀⠀⠀] Pulling 1.9s  [?25h[?25l[+] Running 0/23 ⠋ app [⠀⠀⠀⠀] Pulling 2.0s  ⠏ db [⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.0s  ⠏ s3mock [⠀⠀⠀] Pulling 2.0s  [?25h[?25l[+] Running 0/23 ⠙ app [⠀⠀⠀⠀] Pulling 2.1s  ⠋ db [⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.1s  ⠋ s3mock [⠀⠀⠀] Pulling 2.1s  [?25h[?25l[+] Running 1/23 ⠹ app [⠀⠀⠀⠀] Pulling 2.2s  ⠙ db [⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.2s  ⠙ s3mock [⠀⠀⠀] Pulling 2.2s  [?25h[?25l[+] Running 1/23 ⠸ app [⠀⠀⠀⠀] Pulling 2.3s  ⠹ db [⡀⣄⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.3s  ⠹ s3mock [⠀⠀⠀] Pulling 2.3s  [?25h[?25l[+] Running 2/23 ⠼ app [⠀⠀⠀⠀] Pulling 2.4s  ⠸ db [⣤⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.4s  ⠸ s3mock [⠀⠀⠀] Pulling 2.4s  [?25h[?25l[+] Running 2/23 ⠴ app [⠀⠀⠀⠀] Pulling 2.5s  ⠼ db [⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.5s  ⠼ s3mock [⠀⠀⠀] Pulling 2.5s  [?25h[?25l[+] Running 3/23 ⠦ app [⠀⠀⠀⠀] Pulling 2.6s  ⠴ db [⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.6s  ⠴ s3mock [⠀⠀⠀] Pulling 2.6s  [?25h[?25l[+] Running 3/23 ⠧ app [⠀⠀⠀⠀] Pulling 2.7s  ⠦ db [⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.7s  ⠦ s3mock [⠀⠀⠀] Pulling 2.7s  [?25h[?25l[+] Running 3/23 ⠇ app [⠀⠀⠀⠀] Pulling 2.8s  ⠧ db [⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.8s  ⠧ s3mock [⠀⠀⠀] Pulling 2.8s  [?25h[?25l[+] Running 4/23 ⠏ app [⠀⠀⠀⠀] Pulling 2.9s  ⠇ db [⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.9s  ⠇ s3mock [⠀⠀⠀] Pulling 2.9s  [?25h[?25l[+] Running 6/23 ⠋ app [⠀⠀⠀⠀] Pulling 3.0s  ⠏ db [⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀] Pulling 3.0s  ⠏ s3mock [⠀⠀⠀] Pulling 3.0s  [?25h[?25l[+] Running 6/23 ⠙ app [⠀⠀⠀⠀] Pulling 3.1s  ⠋ db [⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀] Pulling 3.1s  ⠋ s3mock [⠀⠀⠀] Pulling 3.1s  [?25h[?25l[+] Running 6/23 ⠹ app [⠀⠀⠀⠀] Pulling 3.2s  ⠙ db [⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀] Pulling 3.2s  ⠙ s3mock [⠀⠀⠀] Pulling 3.2s  [?25h[?25l[+] Running 6/23 ⠸ app [⠀⠀⠀⠀] Pulling 3.3s  ⠹ db [⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀] Pulling 3.3s  ⠹ s3mock [⠀⠀⠀] Pulling 3.3s  [?25h[?25l[+] Running 7/23 ⠼ app [⠀⠀⠀⠀] Pulling 3.4s  ⠸ db [⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀] Pulling 3.4s  ⠸ s3mock [⠀⠀⠀] Pulling 3.4s  [?25h[?25l[+] Running 8/23 ⠴ app [⠀⠀⠀⠀] Pulling 3.5s  ⠼ db [⣿⣿⣿⣿⣿⣿⣿⣿⠀⣿⠀⠀⠀] Pulling 3.5s  ⠼ s3mock [⠀⠀⠀] Pulling 3.5s  [?25h[?25l[+] Running 8/23 ⠦ app [⠀⠀⠀⠀] Pulling 3.6s  ⠴ db [⣿⣿⣿⣿⣿⣿⣿⣿⡀⣿⠀⠀⠀] Pulling 3.6s  ⠴ s3mock [⠀⠀⠀] Pulling 3.6s  [?25h[?25l[+] Running 8/23 ⠧ app [⠀⠀⠀⠀] Pulling 3.7s  ⠦ db [⣿⣿⣿⣿⣿⣿⣿⣿⡀⣿⠀⠀⠀] Pulling 3.7s  ⠦ s3mock [⠀⠀⠀] Pulling 3.7s  [?25h[?25l[+] Running 9/23 ⠇ app [⠀⠀⠀⠀] Pulling 3.8s  ⠧ db [⣿⣿⣿⣿⣿⣿⣿⣿⣀⣿⣿⠀⠀] Pulling 3.8s  ⠧ s3mock [⠀⠀⠀] Pulling 3.8s  [?25h[?25l[+] Running 10/23 ⠏ app [⠀⠀⠀⠀] Pulling 3.9s  ⠇ db [⣿⣿⣿⣿⣿⣿⣿⣿⣀⣿⣿⣿⠀] Pulling 3.9s  ⠇ s3mock [⠀⠀⠀] Pulling 3.9s  [?25h[?25l[+] Running 10/23 ⠋ app [⠀⠀⠀⠀] Pulling 4.0s  ⠏ db [⣿⣿⣿⣿⣿⣿⣿⣿⣄⣿⣿⣿⠀] Pulling 4.0s  ⠏ s3mock [⠀⠀⠀] Pulling 4.0s  [?25h[?25l[+] Running 10/23 ⠙ app [⠀⠀⠀⠀] Pulling 4.1s  ⠋ db [⣿⣿⣿⣿⣿⣿⣿⣿⣤⣿⣿⣿⠀] Pulling 4.1s  ⠋ s3mock [⠀⠀⠀] Pulling 4.1s  [?25h[?25l[+] Running 11/23 ⠹ app [⠀⠀⠀⠀] Pulling 4.2s  ⠙ db [⣿⣿⣿⣿⣿⣿⣿⣿⣦⣿⣿⣿⣿] 105.3MB / 137.9MB Pulling 4.2s  ⠙ s3mock [⠀⠀⠀] Pulling 4.2s  [?25h[?25l[+] Running 11/23 ⠸ app [⠀⠀⠀⠀] Pulling 4.3s  ⠹ db [⣿⣿⣿⣿⣿⣿⣿⣿⣦⣿⣿⣿⣿] 110.1MB / 137.9MB Pulling 4.3s  ⠹ s3mock [⠀⠀⠀] Pulling 4.3s  [?25h[?25l[+] Running 11/23 ⠼ app [⠀⠀⠀⠀] Pulling 4.4s  ⠸ db [⣿⣿⣿⣿⣿⣿⣿⣿⣶⣿⣿⣿⣿] 121.9MB / 137.9MB Pulling 4.4s  ⠸ s3mock [⠀⠀⠀] Pulling 4.4s  [?25h[?25l[+] Running 12/23 ⠴ app [⠀⠀⠀⠀] Pulling 4.5s  ⠼ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 133.8MB / 137.9MB Pulling 4.5s  ⠼ s3mock [⠀⠀⠀] Pulling 4.5s  [?25h[?25l[+] Running 12/23 ⠦ app [⠀⠀⠀⠀] Pulling 4.6s  ⠴ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 4.6s  ⠴ s3mock [⠀⠀⠀] Pulling 4.6s  [?25h[?25l[+] Running 12/23 ⠧ app [⠀⡀⠀⠀] Pulling 4.7s  ⠦ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 4.7s  ⠦ s3mock [⠀⠀⠀] Pulling 4.7s  [?25h[?25l[+] Running 12/23 ⠇ app [⠀⣀⠀⠀] Pulling 4.8s  ⠧ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 4.8s  ⠧ s3mock [⠀⠀⠀] Pulling 4.8s  [?25h[?25l[+] Running 12/23 ⠏ app [⠀⣤⠀⠀] Pulling 4.9s  ⠇ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 4.9s  ⠇ s3mock [⠀⠀⠀] Pulling 4.9s  [?25h[?25l[+] Running 12/23 ⠋ app [⠀⣤⠀⠀] Pulling 5.0s  ⠏ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 5.0s  ⠏ s3mock [⠀⠀⠀] Pulling 5.0s  [?25h[?25l[+] Running 12/23 ⠙ app [⣿⣦⠀⠀] Pulling 5.1s  ⠋ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 5.1s  ⠋ s3mock [⠀⠀⠀] Pulling 5.1s  [?25h[?25l[+] Running 13/23 ⠹ app [⣿⣿⠀⠀] Pulling 5.2s  ⠙ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 5.2s  ⠙ s3mock [⠀⠀⠀] Pulling 5.2s  [?25h[?25l[+] Running 13/23 ⠸ app [⣿⣿⠀⠀] Pulling 5.3s  ⠹ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 5.3s  ⠹ s3mock [⠀⠀⠀] Pulling 5.3s  [?25h[?25l[+] Running 13/23 ⠼ app [⣿⣿⠀⠀] Pulling 5.4s  ⠸ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 5.4s  ⠸ s3mock [⠀⠀⠀] Pulling 5.4s  [?25h[?25l[+] Running 13/23 ⠴ app [⣿⣿⠀⠀] Pulling 5.5s  ⠼ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 5.5s  ⠼ s3mock [⠀⠀⠀] Pulling 5.5s  [?25h[?25l[+] Running 13/23 ⠦ app [⣿⣿⠀⠀] Pulling 5.6s  ⠴ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 5.6s  ⠴ s3mock [⠀⠀⠀] Pulling 5.6s  [?25h[?25l[+] Running 13/23 ⠧ app [⣿⣿⠀⠀] Pulling 5.7s  ⠦ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 5.7s  ⠦ s3mock [⠀⠀⠀] Pulling 5.7s  [?25h[?25l[+] Running 13/23 ⠇ app [⣿⣿⠀⠀] Pulling 5.8s  ⠧ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 5.8s  ⠧ s3mock [⠀⠀⠀] Pulling 5.8s  [?25h[?25l[+] Running 13/23 ⠏ app [⣿⣿⠀⠀] Pulling 6.0s  ⠇ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 6.0s  ⠇ s3mock [⠀⠀⠀] Pulling 6.0s  [?25h[?25l[+] Running 13/23 ⠋ app [⣿⣿⠀⠀] Pulling 6.0s  ⠏ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 6.0s  ⠏ s3mock [⠀⠀⠀] Pulling 6.0s  [?25h[?25l[+] Running 13/23 ⠙ app [⣿⣿⠀⠀] Pulling 6.1s  ⠋ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 6.1s  ⠋ s3mock [⠀⠀⠀] Pulling 6.1s  [?25h[?25l[+] Running 13/23 ⠹ app [⣿⣿⠀⠀] Pulling 6.2s  ⠙ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 6.2s  ⠙ s3mock [⠀⠀⠀] Pulling 6.2s  [?25h[?25l[+] Running 13/23 ⠸ app [⣿⣿⠀⠀] Pulling 6.3s  ⠹ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 6.3s  ⠹ s3mock [⠀⠀⠀] Pulling 6.3s  [?25h[?25l[+] Running 13/23 ⠼ app [⣿⣿⠀⠀] Pulling 6.4s  ⠸ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 6.4s  ⠸ s3mock [⠀⠀⠀] Pulling 6.4s  [?25h[?25l[+] Running 14/23 ⠴ app [⣿⣿⠀⠀] Pulling 6.5s  ⠼ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 6.5s  ⠼ s3mock [⠀⠀⠀] Pulling 6.5s  [?25h[?25l[+] Running 14/23 ⠦ app [⣿⣿⠀⠀] Pulling 6.6s  ⠴ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 6.6s  ⠴ s3mock [⠀⠀⠀] Pulling 6.6s  [?25h[?25l[+] Running 14/23 ⠧ app [⣿⣿⠀⠀] Pulling 6.7s  ⠦ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 6.7s  ⠦ s3mock [⠀⠀⠀] Pulling 6.7s  [?25h[?25l[+] Running 14/23 ⠇ app [⣿⣿⠀⠀] Pulling 6.8s  ⠧ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 6.8s  ⠧ s3mock [⠀⠀⠀] Pulling 6.8s  [?25h[?25l[+] Running 14/23 ⠏ app [⣿⣿⠀⠀] Pulling 6.9s  ⠇ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 6.9s  ⠇ s3mock [⠀⠀⠀] Pulling 6.9s  [?25h[?25l[+] Running 14/23 ⠋ app [⣿⣿⠀⠀] Pulling 7.0s  ⠏ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 7.0s  ⠏ s3mock [⠀⠀⠀] Pulling 7.0s  [?25h[?25l[+] Running 14/23 ⠙ app [⣿⣿⠀⠀] Pulling 7.1s  ⠋ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 7.1s  ⠋ s3mock [⠀⠀⠀] Pulling 7.1s  [?25h[?25l[+] Running 14/23 ⠹ app [⣿⣿⠀⠀] Pulling 7.2s  ⠙ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 7.2s  ⠙ s3mock [⠀⠀⠀] Pulling 7.2s  [?25h[?25l[+] Running 14/23 ⠸ app [⣿⣿⠀⠀] Pulling 7.3s  ⠹ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 137.2MB / 137.9MB Pulling 7.3s  ⠹ s3mock [⠀⠀⠀] Pulling 7.3s  [?25h[?25l[+] Running 16/23 ⠼ app [⣿⣿⠀⠀] Pulling 7.4s  ✔ db Pulled 7.4s  ⠸ s3mock [⠀⠀⠀] Pulling 7.4s  [?25h[?25l[+] Running 16/23 ⠴ app [⣿⣿⠀⠀] Pulling 7.5s  ✔ db Pulled 7.4s  ⠼ s3mock [⠀⠀⠀] Pulling 7.5s  [?25h[?25l[+] Running 16/23 ⠦ app [⣿⣿⠀⠀] Pulling 7.6s  ✔ db Pulled 7.4s  ⠴ s3mock [⠀⠀⠀] Pulling 7.6s  [?25h[?25l[+] Running 16/23 ⠧ app [⣿⣿⠀⠀] Pulling 7.7s  ✔ db Pulled 7.4s  ⠦ s3mock [⠀⠀⠀] Pulling 7.7s  [?25h[?25l[+] Running 16/23 ⠇ app [⣿⣿⠀⠀] Pulling 7.8s  ✔ db Pulled 7.4s  ⠧ s3mock [⠀⠀⠀] Pulling 7.8s  [?25h[?25l[+] Running 16/23 ⠏ app [⣿⣿⠀⠀] Pulling 7.9s  ✔ db Pulled 7.4s  ⠇ s3mock [⠀⠀⠀] Pulling 7.9s  [?25h[?25l[+] Running 16/23 ⠋ app [⣿⣿⠀⠀] Pulling 8.0s  ✔ db Pulled 7.4s  ⠏ s3mock [⠀⠀⠀] Pulling 8.0s  [?25h[?25l[+] Running 16/23 ⠙ app [⣿⣿⠀⠀] Pulling 8.1s  ✔ db Pulled 7.4s  ⠋ s3mock [⠀⠀⠀] Pulling 8.1s  [?25h[?25l[+] Running 16/23 ⠹ app [⣿⣿⠀⠀] Pulling 8.2s  ✔ db Pulled 7.4s  ⠙ s3mock [⠀⠀⠀] Pulling 8.2s  [?25h[?25l[+] Running 16/23 ⠸ app [⣿⣿⠀⠀] Pulling 8.3s  ✔ db Pulled 7.4s  ⠹ s3mock [⠀⠀⠀] Pulling 8.3s  [?25h[?25l[+] Running 16/23 ⠼ app [⣿⣿⠀⠀] Pulling 8.4s  ✔ db Pulled 7.4s  ⠸ s3mock [⠀⠀⠀] Pulling 8.4s  [?25h[?25l[+] Running 16/23 ⠴ app [⣿⣿⠀⠀] Pulling 8.5s  ✔ db Pulled 7.4s  ⠼ s3mock [⠀⠀⠀] Pulling 8.5s  [?25h[?25l[+] Running 16/23 ⠦ app [⣿⣿⠀⠀] Pulling 8.6s  ✔ db Pulled 7.4s  ⠴ s3mock [⠀⠀⠀] Pulling 8.6s  [?25h[?25l[+] Running 16/23 ⠧ app [⣿⣿⠀⠀] Pulling 8.7s  ✔ db Pulled 7.4s  ⠦ s3mock [⠀⠀⠀] Pulling 8.7s  [?25h[?25l[+] Running 16/23 ⠇ app [⣿⣿⠀⠀] Pulling 8.8s  ✔ db Pulled 7.4s  ⠧ s3mock [⠀⠀⠀] Pulling 8.8s  [?25h[?25l[+] Running 16/23 ⠏ app [⣿⣿⠀⠀] Pulling 8.9s  ✔ db Pulled 7.4s  ⠇ s3mock [⠀⠀⠀] Pulling 8.9s  [?25h[?25l[+] Running 16/23 ⠋ app [⣿⣿⠀⠀] Pulling 9.0s  ✔ db Pulled 7.4s  ⠏ s3mock [⠀⠀⠀] Pulling 9.0s  [?25h[?25l[+] Running 16/23 ⠙ app [⣿⣿⠀⠀] Pulling 9.1s  ✔ db Pulled 7.4s  ⠋ s3mock [⠀⠀⠀] Pulling 9.1s  [?25h[?25l[+] Running 16/23 ⠹ app [⣿⣿⠀⠀] Pulling 9.2s  ✔ db Pulled 7.4s  ⠙ s3mock [⠀⠀⠀] Pulling 9.2s  [?25h[?25l[+] Running 16/23 ⠸ app [⣿⣿⠀⠀] Pulling 9.3s  ✔ db Pulled 7.4s  ⠹ s3mock [⠀⠀⠀] Pulling 9.3s  [?25h[?25l[+] Running 16/23 ⠼ app [⣿⣿⠀⠀] Pulling 9.4s  ✔ db Pulled 7.4s  ⠸ s3mock [⠀⠀⠀] Pulling 9.4s  [?25h[?25l[+] Running 16/23 ⠴ app [⣿⣿⠀⠀] Pulling 9.5s  ✔ db Pulled 7.4s  ⠼ s3mock [⠀⠀⠀] Pulling 9.5s  [?25h[?25l[+] Running 16/23 ⠦ app [⣿⣿⠀⠀] Pulling 9.6s  ✔ db Pulled 7.4s  ⠴ s3mock [⠀⠀⠀] Pulling 9.6s  [?25h[?25l[+] Running 16/23 ⠧ app [⣿⣿⠀⠀] Pulling 9.7s  ✔ db Pulled 7.4s  ⠦ s3mock [⠀⠀⠀] Pulling 9.7s  [?25h[?25l[+] Running 16/23 ⠇ app [⣿⣿⠀⠀] Pulling 9.8s  ✔ db Pulled 7.4s  ⠧ s3mock [⠀⠀⠀] Pulling 9.8s  [?25h[?25l[+] Running 16/23 ⠏ app [⣿⣿⠀⠀] 53.14MB / 419.9MB Pulling 9.9s  ✔ db Pulled 7.4s  ⠇ s3mock [⠀⠀⠀] Pulling 9.9s  [?25h[?25l[+] Running 16/23 ⠋ app [⣿⣿⠀⠀] 58.51MB / 419.9MB Pulling 10.0s  ✔ db Pulled 7.4s  ⠏ s3mock [⣿⠀⠀] Pulling 10.0s  [?25h[?25l[+] Running 16/23 ⠙ app [⣿⣿⣿⠀] 69.14MB / 419.9MB Pulling 10.1s  ✔ db Pulled 7.4s  ⠋ s3mock [⣿⠀⠀] Pulling 10.1s  [?25h[?25l[+] Running 16/23 ⠹ app [⣿⣿⣿⠀] 80.73MB / 419.9MB Pulling 10.2s  ✔ db Pulled 7.4s  ⠙ s3mock [⣿⠀⠀] Pulling 10.2s  [?25h[?25l[+] Running 17/23 ⠸ app [⣿⣿⣿⠀] 94.17MB / 419.9MB Pulling 10.3s  ✔ db Pulled 7.4s  ⠹ s3mock [⣿⠀⠀] Pulling 10.3s  [?25h[?25l[+] Running 17/23 ⠼ app [⣿⣿⣿⡀] 109.9MB / 419.9MB Pulling 10.4s  ✔ db Pulled 7.4s  ⠸ s3mock [⣿⠀⠀] Pulling 10.4s  [?25h[?25l[+] Running 18/23 ⠴ app [⣿⣿⣿⡀] 121.7MB / 419.9MB Pulling 10.5s  ✔ db Pulled 7.4s  ⠼ s3mock [⣿⠀⠀] Pulling 10.5s  [?25h[?25l[+] Running 18/23 ⠦ app [⣿⣿⣿⡀] 130.3MB / 419.9MB Pulling 10.6s  ✔ db Pulled 7.4s  ⠴ s3mock [⣿⠀⠀] Pulling 10.6s  [?25h[?25l[+] Running 18/23 ⠧ app [⣿⣿⣿⡀] 130.3MB / 419.9MB Pulling 10.8s  ✔ db Pulled 7.4s  ⠦ s3mock [⣿⠀⠀] Pulling 10.8s  [?25h[?25l[+] Running 18/23 ⠇ app [⣿⣿⣿⡀] 134MB / 419.9MB Pulling 10.8s  ✔ db Pulled 7.4s  ⠧ s3mock [⣿⠀⠀] Pulling 10.8s  [?25h[?25l[+] Running 18/23 ⠏ app [⣿⣿⣿⡀] 148MB / 419.9MB Pulling 10.9s  ✔ db Pulled 7.4s  ⠇ s3mock [⣿⠀⠀] Pulling 10.9s  [?25h[?25l[+] Running 18/23 ⠋ app [⣿⣿⣿⣀] 158.7MB / 419.9MB Pulling 11.0s  ✔ db Pulled 7.4s  ⠏ s3mock [⣿⠀⠀] Pulling 11.0s  [?25h[?25l[+] Running 18/23 ⠙ app [⣿⣿⣿⣀] 158.7MB / 419.9MB Pulling 11.1s  ✔ db Pulled 7.4s  ⠋ s3mock [⣿⠀⠀] Pulling 11.1s  [?25h[?25l[+] Running 18/23 ⠹ app [⣿⣿⣿⣀] 165.7MB / 419.9MB Pulling 11.2s  ✔ db Pulled 7.4s  ⠙ s3mock [⣿⠀⠀] Pulling 11.2s  [?25h[?25l[+] Running 18/23 ⠸ app [⣿⣿⣿⣀] 175.3MB / 419.9MB Pulling 11.3s  ✔ db Pulled 7.4s  ⠹ s3mock [⣿⠀⠀] Pulling 11.3s  [?25h[?25l[+] Running 18/23 ⠼ app [⣿⣿⣿⣀] 178.5MB / 419.9MB Pulling 11.4s  ✔ db Pulled 7.4s  ⠸ s3mock [⣿⠀⠀] Pulling 11.4s  [?25h[?25l[+] Running 18/23 ⠴ app [⣿⣿⣿⣀] 189.2MB / 419.9MB Pulling 11.5s  ✔ db Pulled 7.4s  ⠼ s3mock [⣿⠀⠀] Pulling 11.5s  [?25h[?25l[+] Running 18/23 ⠦ app [⣿⣿⣿⣄] 198.9MB / 419.9MB Pulling 11.6s  ✔ db Pulled 7.4s  ⠴ s3mock [⣿⠀⠀] Pulling 11.6s  [?25h[?25l[+] Running 18/23 ⠧ app [⣿⣿⣿⣄] 206.9MB / 419.9MB Pulling 11.7s  ✔ db Pulled 7.4s  ⠦ s3mock [⣿⠀⠀] Pulling 11.7s  [?25h[?25l[+] Running 18/23 ⠇ app [⣿⣿⣿⣄] 219.2MB / 419.9MB Pulling 11.8s  ✔ db Pulled 7.4s  ⠧ s3mock [⣿⠀⠀] Pulling 11.8s  [?25h[?25l[+] Running 18/23 ⠏ app [⣿⣿⣿⣄] 224MB / 419.9MB Pulling 11.9s  ✔ db Pulled 7.4s  ⠇ s3mock [⣿⠀⠀] Pulling 11.9s  [?25h[?25l[+] Running 18/23 ⠋ app [⣿⣿⣿⣄] 239MB / 419.9MB Pulling 12.0s  ✔ db Pulled 7.4s  ⠏ s3mock [⣿⠀⠀] Pulling 12.0s  [?25h[?25l[+] Running 18/23 ⠙ app [⣿⣿⣿⣤] 250.8MB / 419.9MB Pulling 12.1s  ✔ db Pulled 7.4s  ⠋ s3mock [⣿⠀⠀] Pulling 12.1s  [?25h[?25l[+] Running 18/23 ⠹ app [⣿⣿⣿⣤] 261.6MB / 419.9MB Pulling 12.2s  ✔ db Pulled 7.4s  ⠙ s3mock [⣿⠀⠀] Pulling 12.2s  [?25h[?25l[+] Running 18/23 ⠸ app [⣿⣿⣿⣤] 273.4MB / 419.9MB Pulling 12.3s  ✔ db Pulled 7.4s  ⠹ s3mock [⣿⠀⠀] Pulling 12.3s  [?25h[?25l[+] Running 18/23 ⠼ app [⣿⣿⣿⣤] 280.4MB / 419.9MB Pulling 12.4s  ✔ db Pulled 7.4s  ⠸ s3mock [⣿⠀⠀] Pulling 12.4s  [?25h[?25l[+] Running 18/23 ⠴ app [⣿⣿⣿⣦] 296MB / 419.9MB Pulling 12.5s  ✔ db Pulled 7.4s  ⠼ s3mock [⣿⠀⠀] Pulling 12.5s  [?25h[?25l[+] Running 18/23 ⠦ app [⣿⣿⣿⣦] 307.2MB / 419.9MB Pulling 12.6s  ✔ db Pulled 7.4s  ⠴ s3mock [⣿⠀⠀] Pulling 12.6s  [?25h[?25l[+] Running 18/23 ⠧ app [⣿⣿⣿⣦] 318MB / 419.9MB Pulling 12.7s  ✔ db Pulled 7.4s  ⠦ s3mock [⣿⠀⠀] Pulling 12.7s  [?25h[?25l[+] Running 18/23 ⠇ app [⣿⣿⣿⣦] 322.8MB / 419.9MB Pulling 12.8s  ✔ db Pulled 7.4s  ⠧ s3mock [⣿⠀⠀] Pulling 12.8s  [?25h[?25l[+] Running 18/23 ⠏ app [⣿⣿⣿⣦] 322.8MB / 419.9MB Pulling 12.9s  ✔ db Pulled 7.4s  ⠇ s3mock [⣿⠀⠀] Pulling 12.9s  [?25h[?25l[+] Running 18/23 ⠋ app [⣿⣿⣿⣶] 333MB / 419.9MB Pulling 13.0s  ✔ db Pulled 7.4s  ⠏ s3mock [⣿⠀⠀] Pulling 13.0s  [?25h[?25l[+] Running 18/23 ⠙ app [⣿⣿⣿⣶] 343.1MB / 419.9MB Pulling 13.1s  ✔ db Pulled 7.4s  ⠋ s3mock [⣿⠀⠀] Pulling 13.1s  [?25h[?25l[+] Running 18/23 ⠹ app [⣿⣿⣿⣶] 356.6MB / 419.9MB Pulling 13.2s  ✔ db Pulled 7.4s  ⠙ s3mock [⣿⠀⠀] Pulling 13.2s  [?25h[?25l[+] Running 18/23 ⠸ app [⣿⣿⣿⣶] 367.3MB / 419.9MB Pulling 13.3s  ✔ db Pulled 7.4s  ⠹ s3mock [⣿⠀⠀] Pulling 13.3s  [?25h[?25l[+] Running 18/23 ⠼ app [⣿⣿⣿⣶] 370.5MB / 419.9MB Pulling 13.4s  ✔ db Pulled 7.4s  ⠸ s3mock [⣿⠀⠀] Pulling 13.4s  [?25h[?25l[+] Running 18/23 ⠴ app [⣿⣿⣿⣷] 385.5MB / 419.9MB Pulling 13.5s  ✔ db Pulled 7.4s  ⠼ s3mock [⣿⠀⠀] Pulling 13.5s  [?25h[?25l[+] Running 18/23 ⠦ app [⣿⣿⣿⣷] 397.3MB / 419.9MB Pulling 13.7s  ✔ db Pulled 7.4s  ⠴ s3mock [⣿⠀⠀] Pulling 13.7s  [?25h[?25l[+] Running 18/23 ⠧ app [⣿⣿⣿⣷] 400.5MB / 419.9MB Pulling 13.7s  ✔ db Pulled 7.4s  ⠦ s3mock [⣿⠀⠀] Pulling 13.7s  [?25h[?25l[+] Running 18/23 ⠇ app [⣿⣿⣿⣷] 412.8MB / 419.9MB Pulling 13.8s  ✔ db Pulled 7.4s  ⠧ s3mock [⣿⠀⠀] Pulling 13.8s  [?25h[?25l[+] Running 18/23 ⠏ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 13.9s  ✔ db Pulled 7.4s  ⠇ s3mock [⣿⠀⠀] Pulling 13.9s  [?25h[?25l[+] Running 18/23 ⠋ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 14.0s  ✔ db Pulled 7.4s  ⠏ s3mock [⣿⠀⠀] Pulling 14.0s  [?25h[?25l[+] Running 18/23 ⠙ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 14.1s  ✔ db Pulled 7.4s  ⠋ s3mock [⣿⠀⠀] Pulling 14.1s  [?25h[?25l[+] Running 18/23 ⠹ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 14.2s  ✔ db Pulled 7.4s  ⠙ s3mock [⣿⠀⠀] Pulling 14.2s  [?25h[?25l[+] Running 18/23 ⠸ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 14.3s  ✔ db Pulled 7.4s  ⠹ s3mock [⣿⠀⠀] Pulling 14.3s  [?25h[?25l[+] Running 18/23 ⠼ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 14.4s  ✔ db Pulled 7.4s  ⠸ s3mock [⣿⠀⠀] Pulling 14.4s  [?25h[?25l[+] Running 18/23 ⠴ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 14.5s  ✔ db Pulled 7.4s  ⠼ s3mock [⣿⠀⠀] Pulling 14.5s  [?25h[?25l[+] Running 18/23 ⠦ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 14.6s  ✔ db Pulled 7.4s  ⠴ s3mock [⣿⠀⠀] Pulling 14.6s  [?25h[?25l[+] Running 18/23 ⠧ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 14.7s  ✔ db Pulled 7.4s  ⠦ s3mock [⣿⠀⠀] Pulling 14.7s  [?25h[?25l[+] Running 18/23 ⠇ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 14.8s  ✔ db Pulled 7.4s  ⠧ s3mock [⣿⠀⠀] Pulling 14.8s  [?25h[?25l[+] Running 18/23 ⠏ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 14.9s  ✔ db Pulled 7.4s  ⠇ s3mock [⣿⠀⠀] Pulling 14.9s  [?25h[?25l[+] Running 18/23 ⠋ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 15.0s  ✔ db Pulled 7.4s  ⠏ s3mock [⣿⠀⠀] Pulling 15.0s  [?25h[?25l[+] Running 18/23 ⠙ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 15.1s  ✔ db Pulled 7.4s  ⠋ s3mock [⣿⠀⠀] Pulling 15.1s  [?25h[?25l[+] Running 18/23 ⠹ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 15.2s  ✔ db Pulled 7.4s  ⠙ s3mock [⣿⠀⠀] Pulling 15.2s  [?25h[?25l[+] Running 18/23 ⠸ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 15.3s  ✔ db Pulled 7.4s  ⠹ s3mock [⣿⠀⠀] Pulling 15.3s  [?25h[?25l[+] Running 18/23 ⠼ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 15.4s  ✔ db Pulled 7.4s  ⠸ s3mock [⣿⠀⠀] Pulling 15.4s  [?25h[?25l[+] Running 18/23 ⠴ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 15.5s  ✔ db Pulled 7.4s  ⠼ s3mock [⣿⠀⠀] 4.395MB / 77.95MB Pulling 15.5s  [?25h[?25l[+] Running 18/23 ⠦ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 15.6s  ✔ db Pulled 7.4s  ⠴ s3mock [⣿⠀⠀] 7.823MB / 77.95MB Pulling 15.6s  [?25h[?25l[+] Running 18/23 ⠧ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 15.7s  ✔ db Pulled 7.4s  ⠦ s3mock [⣿⣀⣀] 24.62MB / 77.95MB Pulling 15.7s  [?25h[?25l[+] Running 18/23 ⠇ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 15.8s  ✔ db Pulled 7.4s  ⠧ s3mock [⣿⣄⣀] 31.66MB / 77.95MB Pulling 15.8s  [?25h[?25l[+] Running 18/23 ⠏ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 15.9s  ✔ db Pulled 7.4s  ⠇ s3mock [⣿⣦⣄] 44.23MB / 77.95MB Pulling 15.9s  [?25h[?25l[+] Running 18/23 ⠋ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 16.0s  ✔ db Pulled 7.4s  ⠏ s3mock [⣿⣶⣦] 56.78MB / 77.95MB Pulling 16.0s  [?25h[?25l[+] Running 18/23 ⠙ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 16.1s  ✔ db Pulled 7.4s  ⠋ s3mock [⣿⣷⣶] 70.12MB / 77.95MB Pulling 16.1s  [?25h[?25l[+] Running 19/23 ⠹ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 16.2s  ✔ db Pulled 7.4s  ⠙ s3mock [⣿⣿⣿] 70.12MB / 77.95MB Pulling 16.2s  [?25h[?25l[+] Running 19/23 ⠸ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 16.3s  ✔ db Pulled 7.4s  ⠹ s3mock [⣿⣿⣿] 70.12MB / 77.95MB Pulling 16.3s  [?25h[?25l[+] Running 19/23 ⠼ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 16.4s  ✔ db Pulled 7.4s  ⠸ s3mock [⣿⣿⣿] 70.12MB / 77.95MB Pulling 16.4s  [?25h[?25l[+] Running 19/23 ⠴ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 16.6s  ✔ db Pulled 7.4s  ⠼ s3mock [⣿⣿⣿] 70.12MB / 77.95MB Pulling 16.6s  [?25h[?25l[+] Running 19/23 ⠦ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 16.6s  ✔ db Pulled 7.4s  ⠴ s3mock [⣿⣿⣿] 70.12MB / 77.95MB Pulling 16.6s  [?25h[?25l[+] Running 19/23 ⠧ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 16.7s  ✔ db Pulled 7.4s  ⠦ s3mock [⣿⣿⣿] 70.12MB / 77.95MB Pulling 16.7s  [?25h[?25l[+] Running 19/23 ⠇ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 16.8s  ✔ db Pulled 7.4s  ⠧ s3mock [⣿⣿⣿] 70.12MB / 77.95MB Pulling 16.8s  [?25h[?25l[+] Running 19/23 ⠏ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 17.0s  ✔ db Pulled 7.4s  ⠇ s3mock [⣿⣿⣿] 70.12MB / 77.95MB Pulling 17.0s  [?25h[?25l[+] Running 19/23 ⠋ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 17.1s  ✔ db Pulled 7.4s  ⠏ s3mock [⣿⣿⣿] 71.51MB / 77.95MB Pulling 17.1s  [?25h[?25l[+] Running 19/23 ⠙ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 17.2s  ✔ db Pulled 7.4s  ⠋ s3mock [⣿⣿⣿] 71.51MB / 77.95MB Pulling 17.2s  [?25h[?25l[+] Running 19/23 ⠹ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 17.3s  ✔ db Pulled 7.4s  ⠙ s3mock [⣿⣿⣿] 71.51MB / 77.95MB Pulling 17.3s  [?25h[?25l[+] Running 19/23 ⠸ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 17.5s  ✔ db Pulled 7.4s  ⠹ s3mock [⣿⣿⣿] 71.51MB / 77.95MB Pulling 17.5s  [?25h[?25l[+] Running 21/23 ⠼ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 17.5s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠴ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 17.6s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠦ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 17.7s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠧ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 17.8s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠇ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 17.9s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠏ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 18.0s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠋ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 18.1s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠙ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 18.2s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠹ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 18.3s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠸ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 18.4s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠼ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 18.7s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠴ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 18.7s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠦ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 18.8s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠧ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 18.9s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠇ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 19.0s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠏ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 19.1s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠋ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 19.2s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠙ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 19.3s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠹ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 19.4s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠸ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 19.5s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠼ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 19.6s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠴ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 19.7s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠦ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 19.8s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠧ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 19.9s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠇ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 20.0s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠏ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 20.1s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠋ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 20.2s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠙ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 20.3s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠹ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 20.4s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠸ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 20.5s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠼ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 20.6s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠴ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 20.7s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠦ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 20.8s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠧ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 20.9s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠇ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 21.0s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠏ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 21.1s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠋ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 21.2s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠙ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 21.3s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠹ app [⣿⣿⣿⣿] 412.8MB / 419.9MB Pulling 21.4s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠸ app [⣿⣿⣿⣿] 413.2MB / 419.9MB Pulling 21.5s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠼ app [⣿⣿⣿⣿] 413.2MB / 419.9MB Pulling 21.6s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 21/23 ⠴ app [⣿⣿⣿⣿] 419.9MB / 419.9MB Pulling 21.7s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 23/23 ✔ app Pulled 21.7s  ✔ db Pulled 7.4s  ✔ s3mock Pulled 17.5s  [?25h[?25l[+] Running 2/4 ✔ Network operately_default Created0.0s  ✔ Volume "operately_postgres-data" Created0.0s  ⠋ Container operately-s3mock-1 Creating0.1s  ⠋ Container operately-db-1 Creating0.1s  [?25h[?25l[+] Running 2/4 ✔ Network operately_default Created0.0s  ✔ Volume "operately_postgres-data" Created0.0s  ⠙ Container operately-s3mock-1 Creating0.2s  ⠙ Container operately-db-1 Creating0.2s  [?25h[?25l[+] Running 2/4 ✔ Network operately_default Created0.0s  ✔ Volume "operately_postgres-data" Created0.0s  ⠹ Container operately-s3mock-1 Creating0.3s  ⠹ Container operately-db-1 Creating0.3s  [?25h[?25l[+] Running 3/5 ✔ Network operately_default Created0.0s  ✔ Volume "operately_postgres-data" Created0.0s  ⠸ Container operately-s3mock-1 Starting0.4s  ⠸ Container operately-db-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-s3mock-1 Starting0.5s  ⠼ Container operately-db-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-s3mock-1 Started0.5s  ✔ Container operately-db-1 Started0.5s  ⠙ Container operately-app-1 Starting0.2s  [?25h[?25l[+] Running 4/5 ✔ Network operately_default Created0.0s  ✔ Volume "operately_postgres-data" Created0.0s  ✔ Container operately-s3mock-1 Started0.5s  ✔ Container operately-db-1 Started0.5s  ⠹ Container operately-app-1 Starting0.3s  [?25h[?25l[+] Running 4/5 ✔ Network operately_default Created0.0s  ✔ Volume "operately_postgres-data" Created0.0s  ✔ Container operately-s3mock-1 Started0.5s  ✔ Container operately-db-1 Started0.5s  ⠸ Container operately-app-1 Starting0.4s  [?25h[?25l[+] Running 5/5 ✔ Network operately_default Created0.0s  ✔ Volume "operately_postgres-data" Created0.0s  ✔ Container operately-s3mock-1 Started0.5s  ✔ Container operately-db-1 Started0.5s  ✔ Container operately-app-1 Started0.4s  [?25hexport export [?25l(#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠇ idealTree: timing idealTree Completed in 238ms (#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠏ idealTree: timing idealTree Completed in 238ms (#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠏ idealTree: timing idealTree Completed in 238ms (#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠏ idealTree: timing idealTree Completed in 238ms (#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠏ idealTree: timing idealTree Completed in 238ms (##################) ⠧ 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 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.251s 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 Compiling 4 files (.ex) Generated operately app [?25l(⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠙ idealTree: sill logfile done cleaning log files (#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠏ idealTree: timing idealTree Completed in 280ms (#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠏ idealTree: timing idealTree Completed in 280ms (#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠏ idealTree: timing idealTree Completed in 280ms (#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠏ idealTree: timing idealTree Completed in 280ms (#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠏ idealTree: timing idealTree Completed in 280ms (#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠏ idealTree: timing idealTree Completed in 280ms (#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠏ idealTree: timing idealTree Completed in 280ms (#########⠂⠂⠂⠂⠂⠂⠂⠂⠂) ⠸ idealTree: timing idealTree Completed in 280ms (##################) ⠧ 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/ (##################) ⠼ reify:@esbuild/aix-ppc64: timing reifyNode:node_modules/ [?25h up to date, audited 715 packages in 3s 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... ✓ 15452 modules transformed. priv/static/.vite/manifest.json  0.29 kB │ gzip: 0.16 kB priv/static/assets/app-BLRd5cS8.js 2,563.91 kB │ gzip: 329.66 kB │ map: 3,462.11 kB priv/static/assets/vendor-DWA5rud3.js 4,456.01 kB │ gzip: 912.25 kB │ map: 8,998.99 kB ✓ built in 22.07s Rebuilding... Done in 2113ms. Check your digested files at "priv/static" The database for Operately.Repo has been created  14:28:59.737 [info] == Running 20230306115717 Operately.Repo.Migrations.CreateGroups.change/0 forward  14:28:59.738 [info] create table groups  14:28:59.740 [info] == Migrated 20230306115717 in 0.0s  14:28:59.759 [info] == Running 20230307123238 Operately.Repo.Migrations.CreateObjectives.change/0 forward  14:28:59.759 [info] create table objectives  14:28:59.760 [info] == Migrated 20230307123238 in 0.0s  14:28:59.761 [info] == Running 20230307135121 Operately.Repo.Migrations.CreateKeyResults.change/0 forward  14:28:59.761 [info] create table key_results  14:28:59.762 [info] create index key_results_objective_id_index  14:28:59.763 [info] == Migrated 20230307135121 in 0.0s  14:28:59.764 [info] == Running 20230307154049 Operately.Repo.Migrations.AddDirectionToKeyResultsTable.change/0 forward  14:28:59.764 [info] alter table key_results  14:28:59.764 [info] == Migrated 20230307154049 in 0.0s  14:28:59.765 [info] == Running 20230308141139 Operately.Repo.Migrations.CreateTenets.change/0 forward  14:28:59.765 [info] create table tenets  14:28:59.766 [info] == Migrated 20230308141139 in 0.0s  14:28:59.767 [info] == Running 20230309131630 Operately.Repo.Migrations.CreateKpis.change/0 forward  14:28:59.767 [info] create table kpis  14:28:59.768 [info] == Migrated 20230309131630 in 0.0s  14:28:59.768 [info] == Running 20230309160755 Operately.Repo.Migrations.CreateProjects.change/0 forward  14:28:59.769 [info] create table projects  14:28:59.769 [info] == Migrated 20230309160755 in 0.0s  14:28:59.770 [info] == Running 20230314122433 Operately.Repo.Migrations.CreatePeople.change/0 forward  14:28:59.770 [info] create table people  14:28:59.771 [info] create index people_handle_index  14:28:59.772 [info] == Migrated 20230314122433 in 0.0s  14:28:59.773 [info] == Running 20230314123005 Operately.Repo.Migrations.CreateAccountsAuthTables.change/0 forward  14:28:59.774 [info] execute "CREATE EXTENSION IF NOT EXISTS citext"  14:28:59.779 [info] create table accounts  14:28:59.780 [info] create index accounts_email_index  14:28:59.781 [info] create table accounts_tokens  14:28:59.782 [info] create index accounts_tokens_account_id_index  14:28:59.782 [info] create index accounts_tokens_context_token_index  14:28:59.782 [info] == Migrated 20230314123005 in 0.0s  14:28:59.784 [info] == Running 20230317152250 Operately.Repo.Migrations.CreateAlignments.change/0 forward  14:28:59.784 [info] create table alignments  14:28:59.785 [info] == Migrated 20230317152250 in 0.0s  14:28:59.786 [info] == Running 20230319194352 Operately.Repo.Migrations.CreateOwnerships.change/0 forward  14:28:59.786 [info] create table ownerships  14:28:59.786 [info] == Migrated 20230319194352 in 0.0s  14:28:59.788 [info] == Running 20230323173550 Operately.Repo.Migrations.CreateMembers.change/0 forward  14:28:59.788 [info] create table members  14:28:59.789 [info] create index members_group_id_index  14:28:59.789 [info] create index members_person_id_index  14:28:59.790 [info] == Migrated 20230323173550 in 0.0s  14:28:59.791 [info] == Running 20230413142030 Operately.Repo.Migrations.AddStatusFieldToKeyResults.change/0 forward  14:28:59.791 [info] alter table key_results  14:28:59.791 [info] == Migrated 20230413142030 in 0.0s  14:28:59.792 [info] == Running 20230416071114 Operately.Repo.Migrations.CreateUpdates.change/0 forward  14:28:59.792 [info] create table updates  14:28:59.793 [info] create index updates_author_id_index  14:28:59.795 [info] == Migrated 20230416071114 in 0.0s  14:28:59.796 [info] == Running 20230417173349 Operately.Repo.Migrations.CreateComments.change/0 forward  14:28:59.796 [info] create table comments  14:28:59.798 [info] create index comments_update_id_index  14:28:59.799 [info] create index comments_author_id_index  14:28:59.800 [info] == Migrated 20230417173349 in 0.0s  14:28:59.803 [info] == Running 20230420073647 Operately.Repo.Migrations.ConnectPeopleWithAccounts.change/0 forward  14:28:59.803 [info] alter table people  14:28:59.804 [info] == Migrated 20230420073647 in 0.0s  14:28:59.805 [info] == Running 20230424111700 Operately.Repo.Migrations.AddMissionToGroups.change/0 forward  14:28:59.805 [info] alter table groups  14:28:59.806 [info] == Migrated 20230424111700 in 0.0s  14:28:59.806 [info] == Running 20230424144020 Operately.Repo.Migrations.AddGroupContactsTable.change/0 forward  14:28:59.806 [info] create table contacts  14:28:59.808 [info] create index contacts_group_id_index  14:28:59.808 [info] == Migrated 20230424144020 in 0.0s  14:28:59.809 [info] == Running 20230425114123 Operately.Repo.Migrations.AddGroupIdToProjects.change/0 forward  14:28:59.809 [info] alter table projects  14:28:59.810 [info] create index projects_group_id_index  14:28:59.810 [info] == Migrated 20230425114123 in 0.0s  14:28:59.811 [info] == Running 20230425161330 Operately.Repo.Migrations.AddGroupIdToObjectives.change/0 forward  14:28:59.812 [info] alter table objectives  14:28:59.812 [info] create index objectives_group_id_index  14:28:59.813 [info] == Migrated 20230425161330 in 0.0s  14:28:59.814 [info] == Running 20230426065811 :"Elixir.Operately.Repo.Migrations.Add-steps-to-key-results".change/0 forward  14:28:59.814 [info] alter table key_results  14:28:59.815 [info] == Migrated 20230426065811 in 0.0s  14:28:59.815 [info] == Running 20230427073231 Operately.Repo.Migrations.AddOwnerToObjectives.change/0 forward  14:28:59.816 [info] alter table objectives  14:28:59.817 [info] create index objectives_owner_id_index  14:28:59.817 [info] == Migrated 20230427073231 in 0.0s  14:28:59.818 [info] == Running 20230501204731 Operately.Repo.Migrations.AddOwnerIdToKeyResults.change/0 forward  14:28:59.818 [info] alter table key_results  14:28:59.819 [info] create index key_results_owner_id_index  14:28:59.819 [info] == Migrated 20230501204731 in 0.0s  14:28:59.820 [info] == Running 20230503165843 Operately.Repo.Migrations.AddGroupIdToKeyResults.change/0 forward  14:28:59.820 [info] alter table key_results  14:28:59.821 [info] create index key_results_group_id_index  14:28:59.821 [info] == Migrated 20230503165843 in 0.0s  14:28:59.822 [info] == Running 20230505081629 Operately.Repo.Migrations.CreateCompanies.change/0 forward  14:28:59.822 [info] create table companies  14:28:59.823 [info] == Migrated 20230505081629 in 0.0s  14:28:59.826 [info] == Running 20230505084350 Operately.Repo.Migrations.ConnectTenetsWithCompany.change/0 forward  14:28:59.826 [info] alter table tenets  14:28:59.827 [info] create index tenets_company_id_index  14:28:59.827 [info] == Migrated 20230505084350 in 0.0s  14:28:59.828 [info] == Running 20230505091631 Operately.Repo.Migrations.ConnectKpisWithTenets.change/0 forward  14:28:59.828 [info] alter table kpis  14:28:59.829 [info] create index kpis_tenet_id_index  14:28:59.829 [info] == Migrated 20230505091631 in 0.0s  14:28:59.830 [info] == Running 20230505101413 Operately.Repo.Migrations.CreateKpiMetrics.change/0 forward  14:28:59.830 [info] create table kpi_metrics  14:28:59.831 [info] create index kpi_metrics_kpi_id_index  14:28:59.831 [info] == Migrated 20230505101413 in 0.0s  14:28:59.832 [info] == Running 20230505144357 Operately.Repo.Migrations.ConnectTenetsWithObjectives.change/0 forward  14:28:59.832 [info] alter table objectives  14:28:59.833 [info] create index objectives_tenet_id_index  14:28:59.833 [info] == Migrated 20230505144357 in 0.0s  14:28:59.834 [info] == Running 20230508072606 Operately.Repo.Migrations.AddStartedAtAndDeadlineToProjects.change/0 forward  14:28:59.834 [info] alter table projects  14:28:59.834 [info] == Migrated 20230508072606 in 0.0s  14:28:59.835 [info] == Running 20230509105957 Operately.Repo.Migrations.ConvertProjectDescriptionToLongString.change/0 forward  14:28:59.835 [info] alter table projects  14:28:59.835 [info] == Migrated 20230509105957 in 0.0s  14:28:59.836 [info] == Running 20230509112631 Operately.Repo.Migrations.AddOwnerIdToProjects.change/0 forward  14:28:59.836 [info] alter table projects  14:28:59.836 [info] create index projects_owner_id_index  14:28:59.837 [info] == Migrated 20230509112631 in 0.0s  14:28:59.838 [info] == Running 20230511081625 Operately.Repo.Migrations.CreateProjectMilestones.change/0 forward  14:28:59.838 [info] create table project_milestones  14:28:59.839 [info] create index project_milestones_project_id_index  14:28:59.839 [info] == Migrated 20230511081625 in 0.0s  14:28:59.840 [info] == Running 20230511123715 Operately.Repo.Migrations.AddStatusToProjectMilestones.change/0 forward  14:28:59.840 [info] alter table project_milestones  14:28:59.840 [info] == Migrated 20230511123715 in 0.0s  14:28:59.841 [info] == Running 20230511130648 Operately.Repo.Migrations.ConnectProjectsWithObjectives.change/0 forward  14:28:59.841 [info] alter table projects  14:28:59.842 [info] create index projects_objective_id_index  14:28:59.842 [info] == Migrated 20230511130648 in 0.0s  14:28:59.843 [info] == Running 20230511143354 Operately.Repo.Migrations.CreateProjectContributors.change/0 forward  14:28:59.843 [info] create table project_contributors  14:28:59.844 [info] create index project_contributors_project_id_index  14:28:59.844 [info] create index project_contributors_person_id_index  14:28:59.844 [info] == Migrated 20230511143354 in 0.0s  14:28:59.845 [info] == Running 20230514143822 Operately.Repo.Migrations.AddNextUpdateScheduledAtToProjects.change/0 forward  14:28:59.845 [info] alter table projects  14:28:59.846 [info] == Migrated 20230514143822 in 0.0s  14:28:59.846 [info] == Running 20230514150838 Operately.Repo.Migrations.AddPhasesToProjects.change/0 forward  14:28:59.846 [info] alter table projects  14:28:59.847 [info] == Migrated 20230514150838 in 0.0s  14:28:59.847 [info] == Running 20230516165829 Operately.Repo.Migrations.AddTypeToUpdates.change/0 forward  14:28:59.847 [info] alter table updates  14:28:59.848 [info] == Migrated 20230516165829 in 0.0s  14:28:59.848 [info] == Running 20230516165859 Operately.Repo.Migrations.ChangeContentToJsonbInUpdates.change/0 forward  14:28:59.848 [info] alter table updates  14:28:59.849 [info] == Migrated 20230516165859 in 0.0s  14:28:59.849 [info] == Running 20230518085735 :"Elixir.Operately.Repo.Migrations.Connect-people-with-the-company".change/0 forward  14:28:59.849 [info] alter table people  14:28:59.850 [info] create index people_company_id_index  14:28:59.850 [info] == Migrated 20230518085735 in 0.0s  14:28:59.851 [info] == Running 20230522145215 Operately.Repo.Migrations.ConvertProjectDescriptionToRichText.change/0 forward  14:28:59.851 [info] alter table projects  14:28:59.851 [info] == Migrated 20230522145215 in 0.0s  14:28:59.852 [info] == Running 20230524112942 Operately.Repo.Migrations.ChangeCommentContentTypeToJsonb.change/0 forward  14:28:59.852 [info] alter table comments  14:28:59.852 [info] == Migrated 20230524112942 in 0.0s  14:28:59.853 [info] == Running 20230525072607 Operately.Repo.Migrations.AddAcknowledgementsToUpdates.change/0 forward  14:28:59.853 [info] alter table updates  14:28:59.854 [info] create index updates_acknowledging_person_id_index  14:28:59.854 [info] == Migrated 20230525072607 in 0.0s  14:28:59.855 [info] == Running 20230525094352 Operately.Repo.Migrations.CreateReactions.change/0 forward  14:28:59.855 [info] create table reactions  14:28:59.856 [info] create index reactions_person_id_index  14:28:59.857 [info] == Migrated 20230525094352 in 0.0s  14:28:59.857 [info] == Running 20230531125654 Operately.Repo.Migrations.ChangeObjectiveDescriptionToRichText.change/0 forward  14:28:59.857 [info] alter table objectives  14:28:59.858 [info] == Migrated 20230531125654 in 0.0s  14:28:59.858 [info] == Running 20230613093854 Operately.Repo.Migrations.AddReviwerToProjects.change/0 forward  14:28:59.858 [info] alter table projects  14:28:59.859 [info] create index projects_reviewer_id_index  14:28:59.859 [info] == Migrated 20230613093854 in 0.0s  14:28:59.860 [info] == Running 20230616104714 Operately.Repo.Migrations.RemoveOwnerAndReviewerFromProjects.change/0 forward  14:28:59.860 [info] alter table projects  14:28:59.861 [info] == Migrated 20230616104714 in 0.0s  14:28:59.861 [info] == Running 20230616104947 Operately.Repo.Migrations.AddContributorRole.change/0 forward  14:28:59.862 [info] alter table project_contributors  14:28:59.862 [info] == Migrated 20230616104947 in 0.0s  14:28:59.863 [info] == Running 20230619081500 Operately.Repo.Migrations.CascadeDeletionFromUpdatesToComments.change/0 forward  14:28:59.863 [info] drop constraint comments_update_id_fkey from table comments  14:28:59.863 [info] alter table comments  14:28:59.864 [info] == Migrated 20230619081500 in 0.0s  14:28:59.865 [info] == Running 20230622091228 Operately.Repo.Migrations.CreateProjectDocuments.change/0 forward  14:28:59.865 [info] create table project_documents  14:28:59.866 [info] == Migrated 20230622091228 in 0.0s  14:28:59.866 [info] == Running 20230622091416 Operately.Repo.Migrations.AddDocumentLinksToProjects.change/0 forward  14:28:59.867 [info] alter table projects  14:28:59.868 [info] create index projects_pitch_document_id_index  14:28:59.868 [info] create index projects_plan_document_id_index  14:28:59.869 [info] create index projects_execution_review_document_id_index  14:28:59.869 [info] create index projects_control_review_document_id_index  14:28:59.869 [info] create index projects_retrospective_document_id_index  14:28:59.870 [info] == Migrated 20230622091416 in 0.0s  14:28:59.870 [info] == Running 20230622123346 Operately.Repo.Migrations.ChangeFkContraintOnProjectDocuments.change/0 forward  14:28:59.871 [info] drop constraint projects_pitch_document_id_fkey from table projects  14:28:59.871 [info] drop constraint projects_plan_document_id_fkey from table projects  14:28:59.871 [info] drop constraint projects_execution_review_document_id_fkey from table projects  14:28:59.872 [info] drop constraint projects_control_review_document_id_fkey from table projects  14:28:59.872 [info] drop constraint projects_retrospective_document_id_fkey from table projects  14:28:59.872 [info] alter table projects  14:28:59.874 [info] == Migrated 20230622123346 in 0.0s  14:28:59.875 [info] == Running 20230622124736 Operately.Repo.Migrations.AddAuthorIdToProjectDocuments.change/0 forward  14:28:59.875 [info] alter table project_documents  14:28:59.876 [info] == Migrated 20230622124736 in 0.0s  14:28:59.877 [info] == Running 20230627111445 Operately.Repo.Migrations.AddCompanyAndCreatorIdToProjects.change/0 forward  14:28:59.877 [info] alter table projects  14:28:59.878 [info] create index projects_company_id_index  14:28:59.878 [info] == Migrated 20230627111445 in 0.0s  14:28:59.879 [info] == Running 20230628075117 Operately.Repo.Migrations.CreateActivities.change/0 forward  14:28:59.879 [info] create table activities  14:28:59.880 [info] == Migrated 20230628075117 in 0.0s  14:28:59.881 [info] == Running 20230628083813 Operately.Repo.Migrations.AddPersonIdToActivities.change/0 forward  14:28:59.881 [info] alter table activities  14:28:59.881 [info] create index activities_person_id_index  14:28:59.882 [info] == Migrated 20230628083813 in 0.0s  14:28:59.882 [info] == Running 20230628091302 Operately.Repo.Migrations.AddScopeTypeAndScopeIdToActivities.change/0 forward  14:28:59.883 [info] alter table activities  14:28:59.883 [info] == Migrated 20230628091302 in 0.0s  14:28:59.883 [info] == Running 20230628111810 Operately.Repo.Migrations.AddEventDataToActivities.change/0 forward  14:28:59.883 [info] alter table activities  14:28:59.884 [info] == Migrated 20230628111810 in 0.0s  14:28:59.884 [info] == Running 20230703132310 Operately.Repo.Migrations.AddPhaseToProjectMilestones.change/0 forward  14:28:59.884 [info] alter table project_milestones  14:28:59.885 [info] == Migrated 20230703132310 in 0.0s  14:28:59.886 [info] == Running 20230704093525 Operately.Repo.Migrations.CascadeDeletionFromProjectToMilestones.change/0 forward  14:28:59.886 [info] drop constraint project_milestones_project_id_fkey from table project_milestones  14:28:59.886 [info] alter table project_milestones  14:28:59.887 [info] == Migrated 20230704093525 in 0.0s  14:28:59.888 [info] == Running 20230706114152 Operately.Repo.Migrations.CascadeDeleteFromProjectToContributors.change/0 forward  14:28:59.888 [info] drop constraint project_contributors_project_id_fkey from table project_contributors  14:28:59.888 [info] alter table project_contributors  14:28:59.889 [info] == Migrated 20230706114152 in 0.0s  14:28:59.890 [info] == Running 20230707132916 Operately.Repo.Migrations.CreatePeoplePins.change/0 forward  14:28:59.890 [info] create table people_pins  14:28:59.891 [info] create index people_pins_person_id_index  14:28:59.892 [info] == Migrated 20230707132916 in 0.0s  14:28:59.893 [info] == Running 20230707134247 Operately.Repo.Migrations.ChangePinedToPinnedInPeoplePins.change/0 forward  14:28:59.893 [info] rename column pined_id to pinned_id on table people_pins  14:28:59.893 [info] rename column pened_type to pinned_type on table people_pins  14:28:59.893 [info] == Migrated 20230707134247 in 0.0s  14:28:59.894 [info] == Running 20230707134647 Operately.Repo.Migrations.ChangeTypeOfPinnedTypeFromUuidToString.change/0 forward  14:28:59.894 [info] alter table people_pins  14:28:59.895 [info] == Migrated 20230707134647 in 0.0s  14:28:59.896 [info] == Running 20230711113953 Operately.Repo.Migrations.CreateDashboards.change/0 forward  14:28:59.897 [info] create table dashboards  14:28:59.897 [info] create index dashboards_company_id_index  14:28:59.898 [info] == Migrated 20230711113953 in 0.0s  14:28:59.899 [info] == Running 20230711114252 Operately.Repo.Migrations.CreateDashboardPanels.change/0 forward  14:28:59.899 [info] create table dashboard_panels  14:28:59.900 [info] create index dashboard_panels_dashboard_id_index  14:28:59.901 [info] == Migrated 20230711114252 in 0.0s  14:28:59.902 [info] == Running 20230711115223 Operately.Repo.Migrations.LinkHomeDashboardToPerson.change/0 forward  14:28:59.902 [info] alter table people  14:28:59.902 [info] == Migrated 20230711115223 in 0.0s  14:28:59.904 [info] == Running 20230711115703 Operately.Repo.Migrations.RemovePinsTable.change/0 forward  14:28:59.904 [info] drop table people_pins  14:28:59.904 [info] == Migrated 20230711115703 in 0.0s  14:28:59.906 [info] == Running 20230711122712 Operately.Repo.Migrations.AddTypeToPanels.change/0 forward  14:28:59.906 [info] alter table dashboard_panels  14:28:59.907 [info] == Migrated 20230711122712 in 0.0s  14:28:59.908 [info] == Running 20230712120056 Operately.Repo.Migrations.AddNotificationFieldsToPeople.change/0 forward  14:28:59.908 [info] alter table people  14:28:59.909 [info] == Migrated 20230712120056 in 0.0s  14:28:59.910 [info] == Running 20230713075537 Operately.Repo.Migrations.AddObanJobsTable.up/0 forward  14:28:59.919 [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"  14:28:59.921 [info] create table if not exists public.oban_jobs  14:28:59.922 [info] create index if not exists public.oban_jobs_queue_index  14:28:59.923 [info] create index if not exists public.oban_jobs_state_index  14:28:59.923 [info] create index if not exists public.oban_jobs_scheduled_at_index  14:28:59.923 [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"  14:28:59.924 [info] execute "DROP TRIGGER IF EXISTS oban_notify ON \"public\".oban_jobs"  14:28:59.924 [info] trigger "oban_notify" for relation "public.oban_jobs" does not exist, skipping  14:28:59.924 [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"  14:28:59.924 [info] drop index if exists public.oban_jobs_scheduled_at_index  14:28:59.924 [info] create index public.oban_jobs_scheduled_at_index  14:28:59.925 [info] create check constraint worker_length on table public.oban_jobs  14:28:59.925 [info] create check constraint queue_length on table public.oban_jobs  14:28:59.925 [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"  14:28:59.926 [info] alter table public.oban_jobs  14:28:59.926 [info] execute "DROP FUNCTION IF EXISTS \"public\".oban_wrap_id(value bigint)"  14:28:59.926 [info] drop index if exists public.oban_jobs_scheduled_at_index  14:28:59.926 [info] drop index if exists public.oban_jobs_queue_index  14:28:59.926 [info] drop index if exists public.oban_jobs_state_index  14:28:59.927 [info] create index if not exists public.oban_jobs_queue_state_scheduled_at_id_index  14:28:59.927 [info] create index if not exists public.oban_jobs_attempted_at_id_index  14:28:59.927 [info] alter table public.oban_jobs  14:28:59.928 [info] alter table public.oban_jobs  14:28:59.928 [info] drop index if exists public.oban_jobs_queue_state_scheduled_at_id_index  14:28:59.928 [info] create index if not exists public.oban_jobs_state_queue_priority_scheduled_at_id_index  14:28:59.929 [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"  14:28:59.929 [info] execute "DROP TRIGGER IF EXISTS oban_notify ON \"public\".oban_jobs"  14:28:59.929 [info] execute "CREATE TRIGGER oban_notify\nAFTER INSERT ON \"public\".oban_jobs\nFOR EACH ROW EXECUTE PROCEDURE \"public\".oban_jobs_notify();\n"  14:28:59.929 [info] alter table public.oban_jobs  14:28:59.933 [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"  14:28:59.933 [info] create index if not exists public.oban_jobs_state_queue_priority_scheduled_at_id_index  14:28:59.934 [info] relation "oban_jobs_state_queue_priority_scheduled_at_id_index" already exists, skipping  14:28:59.934 [info] alter table public.oban_jobs  14:28:59.934 [info] create check constraint priority_range on table public.oban_jobs  14:28:59.935 [info] create check constraint positive_max_attempts on table public.oban_jobs  14:28:59.935 [info] create check constraint attempt_range on table public.oban_jobs  14:28:59.935 [info] drop index if exists public.oban_jobs_args_vector  14:28:59.935 [info] index "oban_jobs_args_vector" does not exist, skipping  14:28:59.935 [info] drop index if exists public.oban_jobs_worker_gist  14:28:59.935 [info] index "oban_jobs_worker_gist" does not exist, skipping  14:28:59.935 [info] drop index if exists public.oban_jobs_attempted_at_id_index  14:28:59.936 [info] create index if not exists public.oban_jobs_args_index  14:28:59.936 [info] create index if not exists public.oban_jobs_meta_index  14:28:59.936 [info] create table if not exists public.oban_peers  14:28:59.937 [info] execute "ALTER TABLE \"public\".oban_peers SET UNLOGGED"  14:28:59.938 [info] execute "COMMENT ON TABLE \"public\".oban_jobs IS '11'"  14:28:59.938 [info] == Migrated 20230713075537 in 0.0s  14:28:59.939 [info] == Running 20230727123601 :"Elixir.Operately.Repo.Migrations.Add-health-to-projects".change/0 forward  14:28:59.940 [info] alter table projects  14:28:59.940 [info] == Migrated 20230727123601 in 0.0s  14:28:59.941 [info] == Running 20230727150528 Operately.Repo.Migrations.AddPreviousAndNewPhases.change/0 forward  14:28:59.941 [info] alter table updates  14:28:59.941 [info] == Migrated 20230727150528 in 0.0s  14:28:59.941 [info] == Running 20230727152311 Operately.Repo.Migrations.AddPreviousAndNewHealthToUpdates.change/0 forward  14:28:59.942 [info] alter table updates  14:28:59.942 [info] == Migrated 20230727152311 in 0.0s  14:28:59.943 [info] == Running 20230728094435 :"Elixir.Operately.Repo.Migrations.Add-title-to-updates".change/0 forward  14:28:59.943 [info] alter table updates  14:28:59.943 [info] == Migrated 20230728094435 in 0.0s  14:28:59.943 [info] == Running 20230814102152 Operately.Repo.Migrations.CreateProjectKeyResources.change/0 forward  14:28:59.944 [info] create table project_key_resources  14:28:59.945 [info] create index project_key_resources_project_id_index  14:28:59.945 [info] == Migrated 20230814102152 in 0.0s  14:28:59.946 [info] == Running 20230815092629 Operately.Repo.Migrations.RemoveProjectKeyResourceTypeColumn.change/0 forward  14:28:59.946 [info] alter table project_key_resources  14:28:59.946 [info] == Migrated 20230815092629 in 0.0s  14:28:59.947 [info] == Running 20230825093602 Operately.Repo.Migrations.CreateProjectPhaseHistory.change/0 forward  14:28:59.947 [info] create table project_phase_history  14:28:59.948 [info] create index project_phase_history_project_id_index  14:28:59.948 [info] == Migrated 20230825093602 in 0.0s  14:28:59.949 [info] == Running 20230825131508 Operately.Repo.Migrations.CascadeDeleteFromProjectsToPhaseHistory.change/0 forward  14:28:59.949 [info] drop constraint project_phase_history_project_id_fkey from table project_phase_history  14:28:59.949 [info] alter table project_phase_history  14:28:59.950 [info] == Migrated 20230825131508 in 0.0s  14:28:59.951 [info] == Running 20230829111211 Operately.Repo.Migrations.AddCompletedAtToMilestones.change/0 forward  14:28:59.951 [info] alter table project_milestones  14:28:59.951 [info] == Migrated 20230829111211 in 0.0s  14:28:59.952 [info] == Running 20230830144428 Operately.Repo.Migrations.AddPrivateFieldToProjects.change/0 forward  14:28:59.952 [info] alter table projects  14:28:59.952 [info] == Migrated 20230830144428 in 0.0s  14:28:59.952 [info] == Running 20230902090224 Operately.Repo.Migrations.AllowSoftDeletionOfMilestones.change/0 forward  14:28:59.953 [info] alter table project_milestones  14:28:59.953 [info] == Migrated 20230902090224 in 0.0s  14:28:59.953 [info] == Running 20230906134049 Operately.Repo.Migrations.AddDueDateToPhaseHistory.change/0 forward  14:28:59.953 [info] alter table project_phase_history  14:28:59.954 [info] == Migrated 20230906134049 in 0.0s  14:28:59.954 [info] == Running 20230906144914 Operately.Repo.Migrations.RenameDueDateToDueTime.change/0 forward  14:28:59.954 [info] rename column due_date to due_time on table project_phase_history  14:28:59.954 [info] == Migrated 20230906144914 in 0.0s  14:28:59.955 [info] == Running 20230912141827 Operately.Repo.Migrations.AllowSoftDeletionOfProjects.change/0 forward  14:28:59.955 [info] alter table projects  14:28:59.955 [info] == Migrated 20230912141827 in 0.0s  14:28:59.956 [info] == Running 20230918105247 Operately.Repo.Migrations.CreateBlobs.change/0 forward  14:28:59.956 [info] create table blobs  14:28:59.957 [info] create index blobs_author_id_index  14:28:59.957 [info] == Migrated 20230918105247 in 0.0s  14:28:59.958 [info] == Running 20230918112716 Operately.Repo.Migrations.AddCompanyIdToBlobs.change/0 forward  14:28:59.958 [info] alter table blobs  14:28:59.959 [info] == Migrated 20230918112716 in 0.0s  14:28:59.959 [info] == Running 20230921124542 Operately.Repo.Migrations.AddMilestoneDescription.change/0 forward  14:28:59.959 [info] alter table project_milestones  14:28:59.960 [info] == Migrated 20230921124542 in 0.0s  14:28:59.960 [info] == Running 20230922120254 Operately.Repo.Migrations.CreateMilestoneComments.change/0 forward  14:28:59.960 [info] create table milestone_comments  14:28:59.961 [info] create index milestone_comments_comment_id_index  14:28:59.962 [info] create index milestone_comments_milestone_id_index  14:28:59.962 [info] == Migrated 20230922120254 in 0.0s  14:28:59.963 [info] == Running 20231002141938 Operately.Repo.Migrations.CreateProjectReviewRequests.change/0 forward  14:28:59.963 [info] create table project_review_requests  14:28:59.964 [info] create index project_review_requests_project_id_index  14:28:59.964 [info] create index project_review_requests_author_id_index  14:28:59.965 [info] == Migrated 20231002141938 in 0.0s  14:28:59.965 [info] == Running 20231006094542 Operately.Repo.Migrations.AddStatusToReviewRequests.change/0 forward  14:28:59.965 [info] alter table project_review_requests  14:28:59.966 [info] == Migrated 20231006094542 in 0.0s  14:28:59.967 [info] == Running 20231018133434 Operately.Repo.Migrations.CreateNotifications.change/0 forward  14:28:59.967 [info] create table notifications  14:28:59.968 [info] create index notifications_activity_id_index  14:28:59.968 [info] create index notifications_person_id_index  14:28:59.969 [info] == Migrated 20231018133434 in 0.0s  14:28:59.969 [info] == Running 20231020102017 Operately.Repo.Migrations.AddAuthorIdToActivities.change/0 forward  14:28:59.969 [info] alter table activities  14:28:59.970 [info] == Migrated 20231020102017 in 0.0s  14:28:59.971 [info] == Running 20231020110351 Operately.Repo.Migrations.AddActionToActivity.change/0 forward  14:28:59.971 [info] alter table activities  14:28:59.971 [info] == Migrated 20231020110351 in 0.0s  14:28:59.971 [info] == Running 20231020110437 Operately.Repo.Migrations.AddContentToActivity.change/0 forward  14:28:59.972 [info] alter table activities  14:28:59.972 [info] == Migrated 20231020110437 in 0.0s  14:28:59.972 [info] == Running 20231030105143 Operately.Repo.Migrations.RemovePersonHandle.change/0 forward  14:28:59.972 [info] alter table people  14:28:59.973 [info] == Migrated 20231030105143 in 0.0s  14:28:59.973 [info] == Running 20231108141211 Operately.Repo.Migrations.AddThemeToPeople.change/0 forward  14:28:59.974 [info] alter table people  14:28:59.974 [info] == Migrated 20231108141211 in 0.0s  14:28:59.974 [info] == Running 20231112102057 Operately.Repo.Migrations.AddIconAndColorToGroups.change/0 forward  14:28:59.974 [info] alter table groups  14:28:59.975 [info] == Migrated 20231112102057 in 0.0s  14:28:59.975 [info] == Running 20231121141905 Operately.Repo.Migrations.AddResourceTypeToProjectKeyResources.change/0 forward  14:28:59.975 [info] alter table project_key_resources  14:28:59.976 [info] == Migrated 20231121141905 in 0.0s  14:28:59.976 [info] == Running 20231124145333 Operately.Repo.Migrations.AddStatusToProjects.change/0 forward  14:28:59.976 [info] alter table projects  14:28:59.977 [info] == Migrated 20231124145333 in 0.0s  14:28:59.977 [info] == Running 20231126103410 Operately.Repo.Migrations.AddCompanyRoleToPeople.change/0 forward  14:28:59.977 [info] alter table people  14:28:59.978 [info] == Migrated 20231126103410 in 0.0s  14:28:59.978 [info] == Running 20231129135524 Operately.Repo.Migrations.AddTrustedEmailDomainsToCompany.change/0 forward  14:28:59.978 [info] alter table companies  14:28:59.979 [info] == Migrated 20231129135524 in 0.0s  14:28:59.979 [info] == Running 20231204133503 Operately.Repo.Migrations.AddEnabledExperimentalFeaturesToCompanies.change/0 forward  14:28:59.979 [info] alter table companies  14:28:59.980 [info] == Migrated 20231204133503 in 0.0s  14:28:59.980 [info] == Running 20231205124721 Operately.Repo.Migrations.CreateGoals.change/0 forward  14:28:59.980 [info] create table goals  14:28:59.981 [info] create index goals_group_id_index  14:28:59.982 [info] == Migrated 20231205124721 in 0.0s  14:28:59.982 [info] == Running 20231205173143 Operately.Repo.Migrations.AddPeopleToGoals.change/0 forward  14:28:59.982 [info] alter table goals  14:28:59.983 [info] == Migrated 20231205173143 in 0.0s  14:28:59.984 [info] == Running 20231205174631 Operately.Repo.Migrations.AddCompanyIdToGroups.change/0 forward  14:28:59.984 [info] alter table groups  14:28:59.985 [info] == Migrated 20231205174631 in 0.0s  14:28:59.985 [info] == Running 20231205175319 Operately.Repo.Migrations.AddTimeframeToGoals.change/0 forward  14:28:59.985 [info] alter table goals  14:28:59.986 [info] == Migrated 20231205175319 in 0.0s  14:28:59.986 [info] == Running 20231213151653 Operately.Repo.Migrations.CreateTargets.change/0 forward  14:28:59.987 [info] create table targets  14:28:59.988 [info] create index targets_goal_id_index  14:28:59.988 [info] == Migrated 20231213151653 in 0.0s  14:28:59.989 [info] == Running 20231213205153 Operately.Repo.Migrations.AddIndexToGoals.change/0 forward  14:28:59.989 [info] alter table targets  14:28:59.989 [info] == Migrated 20231213205153 in 0.0s  14:28:59.990 [info] == Running 20231221132148 Operately.Repo.Migrations.AddGoalIdToProjects.change/0 forward  14:28:59.990 [info] alter table projects  14:28:59.990 [info] == Migrated 20231221132148 in 0.0s  14:28:59.991 [info] == Running 20231221192557 Operately.Repo.Migrations.AddNextUpdateScheduledAtToGoals.change/0 forward  14:28:59.991 [info] alter table goals  14:28:59.991 [info] == Migrated 20231221192557 in 0.0s  14:28:59.992 [info] == Running 20231221192826 Operately.Repo.Migrations.AddValueToTargets.change/0 forward  14:28:59.992 [info] alter table targets  14:28:59.994 [info] == Migrated 20231221192826 in 0.0s  14:28:59.994 [info] == Running 20240110150435 Operately.Repo.Migrations.AddManagerIdToPeople.change/0 forward  14:28:59.994 [info] alter table people  14:28:59.995 [info] == Migrated 20240110150435 in 0.0s  14:28:59.996 [info] == Running 20240115155515 Operately.Repo.Migrations.AddCompanySpaceIdToCompanies.change/0 forward  14:28:59.996 [info] alter table companies  14:28:59.996 [info] == Migrated 20240115155515 in 0.0s  14:28:59.997 [info] == Running 20240124110949 Operately.Repo.Migrations.AddDeletedAtToGroups.change/0 forward  14:28:59.997 [info] alter table groups  14:28:59.997 [info] == Migrated 20240124110949 in 0.0s  14:28:59.998 [info] == Running 20240207091524 Operately.Repo.Migrations.AddDescriptionToGoals.change/0 forward  14:28:59.998 [info] alter table goals  14:28:59.998 [info] == Migrated 20240207091524 in 0.0s  14:28:59.999 [info] == Running 20240212132752 Operately.Repo.Migrations.CreateTasks.change/0 forward  14:28:59.999 [info] create table tasks  14:29:00.000 [info] create index tasks_assignee_id_index  14:29:00.001 [info] create index tasks_space_id_index  14:29:00.001 [info] == Migrated 20240212132752 in 0.0s  14:29:00.002 [info] == Running 20240212133903 Operately.Repo.Migrations.AddCreatorIdToTasks.change/0 forward  14:29:00.002 [info] alter table tasks  14:29:00.003 [info] == Migrated 20240212133903 in 0.0s  14:29:00.003 [info] == Running 20240213125012 Operately.Repo.Migrations.AddStatusToTasks.change/0 forward  14:29:00.004 [info] alter table tasks  14:29:00.004 [info] == Migrated 20240213125012 in 0.0s  14:29:00.005 [info] == Running 20240213132735 Operately.Repo.Migrations.AddClosedAtToTasks.change/0 forward  14:29:00.005 [info] alter table tasks  14:29:00.005 [info] == Migrated 20240213132735 in 0.0s  14:29:00.006 [info] == Running 20240213134551 Operately.Repo.Migrations.AddReopenedAtToTasks.change/0 forward  14:29:00.006 [info] alter table tasks  14:29:00.006 [info] == Migrated 20240213134551 in 0.0s  14:29:00.006 [info] == Running 20240213163203 Operately.Repo.Migrations.CreateTaskAssignees.change/0 forward  14:29:00.007 [info] create table task_assignees  14:29:00.008 [info] create index task_assignees_task_id_index  14:29:00.008 [info] create index task_assignees_person_id_index  14:29:00.008 [info] == Migrated 20240213163203 in 0.0s  14:29:00.009 [info] == Running 20240215132532 Operately.Repo.Migrations.AddMilestoneIdToTasks.change/0 forward  14:29:00.009 [info] alter table tasks  14:29:00.010 [info] == Migrated 20240215132532 in 0.0s  14:29:00.010 [info] == Running 20240219162003 Operately.Repo.Migrations.AddIndexToTasks.change/0 forward  14:29:00.011 [info] alter table tasks  14:29:00.011 [info] == Migrated 20240219162003 in 0.0s  14:29:00.011 [info] == Running 20240220083809 Operately.Repo.Migrations.DropIndexFromTasks.change/0 forward  14:29:00.011 [info] alter table tasks  14:29:00.012 [info] == Migrated 20240220083809 in 0.0s  14:29:00.012 [info] == Running 20240220084034 Operately.Repo.Migrations.AddTasksKanbanStateToMilestones.change/0 forward  14:29:00.012 [info] alter table project_milestones  14:29:00.013 [info] == Migrated 20240220084034 in 0.0s  14:29:00.013 [info] == Running 20240222124908 Operately.Repo.Migrations.IntroduceProjectCheckInsTable.change/0 forward  14:29:00.013 [info] create table project_check_ins  14:29:00.014 [info] == Migrated 20240222124908 in 0.0s  14:29:00.015 [info] == Running 20240222142200 Operately.Repo.Migrations.AddLastCheckInIdToProjects.change/0 forward  14:29:00.015 [info] alter table projects  14:29:00.016 [info] == Migrated 20240222142200 in 0.0s  14:29:00.016 [info] == Running 20240222142828 Operately.Repo.Migrations.AddLastCheckInStatusToProjects.change/0 forward  14:29:00.016 [info] alter table projects  14:29:00.017 [info] == Migrated 20240222142828 in 0.0s  14:29:00.017 [info] == Running 20240222143005 Operately.Repo.Migrations.AddNextCheckInScheduledAtToProjects.change/0 forward  14:29:00.017 [info] alter table projects  14:29:00.017 [info] == Migrated 20240222143005 in 0.0s  14:29:00.018 [info] == Running 20240222152957 Operately.Repo.Migrations.AddAuthorIdToProjectCheckIns.change/0 forward  14:29:00.018 [info] alter table project_check_ins  14:29:00.019 [info] == Migrated 20240222152957 in 0.0s  14:29:00.020 [info] == Running 20240222160352 Operately.Repo.Migrations.AddAcknowledgedByAndAcknowledgedAtToProjectCheckIns.change/0 forward  14:29:00.020 [info] alter table project_check_ins  14:29:00.020 [info] == Migrated 20240222160352 in 0.0s  14:29:00.021 [info] == Running 20240223094246 Operately.Repo.Migrations.AddEmojiToReactions.change/0 forward  14:29:00.021 [info] alter table reactions  14:29:00.021 [info] == Migrated 20240223094246 in 0.0s  14:29:00.022 [info] == Running 20240223102632 Operately.Repo.Migrations.AddEntityIdAndEntityTypeToComments.change/0 forward  14:29:00.022 [info] alter table comments  14:29:00.022 [info] == Migrated 20240223102632 in 0.0s  14:29:00.023 [info] == Running 20240308145459 Operately.Repo.Migrations.AddParentGoalIdToGoals.change/0 forward  14:29:00.023 [info] alter table goals  14:29:00.023 [info] == Migrated 20240308145459 in 0.0s  14:29:00.024 [info] == Running 20240312101625 Operately.Repo.Migrations.AddClosedByToProjects.change/0 forward  14:29:00.024 [info] alter table projects  14:29:00.025 [info] == Migrated 20240312101625 in 0.0s  14:29:00.026 [info] == Running 20240329083952 Operately.Repo.Migrations.AddClosedAtAndClosedByIdToGoals.change/0 forward  14:29:00.026 [info] alter table goals  14:29:00.026 [info] == Migrated 20240329083952 in 0.0s  14:29:00.027 [info] == Running 20240429090347 Operately.Repo.Migrations.RenameGoalTimeframeToDeprecatedTimeframe.change/0 forward  14:29:00.027 [info] rename column timeframe to deprecated_timeframe on table goals  14:29:00.027 [info] == Migrated 20240429090347 in 0.0s  14:29:00.028 [info] == Running 20240429090939 Operately.Repo.Migrations.AddTimeframeJsonbToGoals.change/0 forward  14:29:00.028 [info] alter table goals  14:29:00.028 [info] == Migrated 20240429090939 in 0.0s  14:29:00.029 [info] == Running 20240430151122 Operately.Repo.Migrations.AddSuspendedFieldToPeople.change/0 forward  14:29:00.029 [info] alter table people  14:29:00.029 [info] == Migrated 20240430151122 in 0.0s  14:29:00.030 [info] == Running 20240430151356 Operately.Repo.Migrations.AddSuspendedAtToPeople.change/0 forward  14:29:00.030 [info] alter table people  14:29:00.030 [info] == Migrated 20240430151356 in 0.0s  14:29:00.031 [info] == Running 20240502134600 Operately.Repo.Migrations.AddCommentThreadsTable.change/0 forward  14:29:00.031 [info] create table comment_threads  14:29:00.032 [info] == Migrated 20240502134600 in 0.0s  14:29:00.033 [info] == Running 20240502140047 Operately.Repo.Migrations.AddCommentThreadIdToActivities.change/0 forward  14:29:00.033 [info] alter table activities  14:29:00.033 [info] == Migrated 20240502140047 in 0.0s  14:29:00.034 [info] == Running 20240503140142 Operately.Repo.Migrations.AddParentToThreads.change/0 forward  14:29:00.034 [info] alter table comment_threads  14:29:00.034 [info] == Migrated 20240503140142 in 0.0s  14:29:00.035 [info] == Running 20240509115125 Operately.Repo.Migrations.AddSuccessToGoals.change/0 forward  14:29:00.035 [info] alter table goals  14:29:00.035 [info] == Migrated 20240509115125 in 0.0s  14:29:00.036 [info] == Running 20240516142551 Operately.Repo.Migrations.AddTitlesToCommentThreads.change/0 forward  14:29:00.036 [info] alter table comment_threads  14:29:00.036 [info] == Migrated 20240516142551 in 0.0s  14:29:00.037 [info] == Running 20240522152329 Operately.Repo.Migrations.AddTimezoneToPeople.change/0 forward  14:29:00.037 [info] alter table people  14:29:00.038 [info] == Migrated 20240522152329 in 0.0s  14:29:00.038 [info] == Running 20240529105412 Operately.Repo.Migrations.CreateInvitations.change/0 forward  14:29:00.039 [info] create table invitations  14:29:00.040 [info] create index invitations_admin_id_index  14:29:00.040 [info] create index invitations_member_id_index  14:29:00.040 [info] == Migrated 20240529105412 in 0.0s  14:29:00.041 [info] == Running 20240529124732 Operately.Repo.Migrations.CreateInvitationTokens.change/0 forward  14:29:00.041 [info] create table invitation_tokens  14:29:00.042 [info] create index invitation_tokens_invitation_id_index  14:29:00.042 [info] == Migrated 20240529124732 in 0.0s  14:29:00.043 [info] == Running 20240531140759 Operately.Repo.Migrations.RemoveAdminNameFromInvitation.change/0 forward  14:29:00.043 [info] alter table invitations  14:29:00.043 [info] == Migrated 20240531140759 in 0.0s  14:29:00.044 [info] == Running 20240606221834 Operately.Repo.Migrations.CreateAccessContexts.change/0 forward  14:29:00.044 [info] create table access_contexts  14:29:00.045 [info] == Migrated 20240606221834 in 0.0s  14:29:00.045 [info] == Running 20240606222242 Operately.Repo.Migrations.CreateAccessGroups.change/0 forward  14:29:00.046 [info] create table access_groups  14:29:00.046 [info] == Migrated 20240606222242 in 0.0s  14:29:00.047 [info] == Running 20240606222753 Operately.Repo.Migrations.CreateAccessBindings.change/0 forward  14:29:00.047 [info] create table access_bindings  14:29:00.048 [info] create index access_bindings_group_id_index  14:29:00.048 [info] create index access_bindings_context_id_index  14:29:00.049 [info] == Migrated 20240606222753 in 0.0s  14:29:00.049 [info] == Running 20240606224931 Operately.Repo.Migrations.CreateAccessGroupMemberships.change/0 forward  14:29:00.049 [info] create table access_group_memberships  14:29:00.050 [info] create index access_group_memberships_person_id_index  14:29:00.051 [info] create index access_group_memberships_group_id_index  14:29:00.051 [info] == Migrated 20240606224931 in 0.0s  14:29:00.052 [info] == Running 20240609153530 Operately.Repo.Migrations.AddStorageType.change/0 forward  14:29:00.052 [info] alter table blobs  14:29:00.052 [info] == Migrated 20240609153530 in 0.0s  14:29:00.053 [info] == Running 20240610091322 Operately.Repo.Migrations.AddProjectAccessContext.change/0 forward  14:29:00.053 [info] alter table access_contexts  14:29:00.054 [info] create index access_contexts_project_id_index  14:29:00.054 [info] == Migrated 20240610091322 in 0.0s  14:29:00.055 [info] == Running 20240610184000 Operately.Repo.Migrations.AddGroupAccessContext.change/0 forward  14:29:00.055 [info] alter table access_contexts  14:29:00.055 [info] create index access_contexts_group_id_index  14:29:00.056 [info] == Migrated 20240610184000 in 0.0s  14:29:00.056 [info] == Running 20240610194000 Operately.Repo.Migrations.AddActivityAccessContext.change/0 forward  14:29:00.057 [info] alter table activities  14:29:00.057 [info] create index activities_context_id_index  14:29:00.057 [info] == Migrated 20240610194000 in 0.0s  14:29:00.058 [info] == Running 20240610204000 Operately.Repo.Migrations.AddCompanyAccessContext.change/0 forward  14:29:00.058 [info] alter table access_contexts  14:29:00.059 [info] create index access_contexts_company_id_index  14:29:00.059 [info] == Migrated 20240610204000 in 0.0s  14:29:00.060 [info] == Running 20240612151600 Operately.Repo.Migrations.AddGoalAccessContext.change/0 forward  14:29:00.060 [info] alter table access_contexts  14:29:00.060 [info] create index access_contexts_goal_id_index  14:29:00.061 [info] == Migrated 20240612151600 in 0.0s  14:29:00.061 [info] == Running 20240613093658 Operately.Repo.Migrations.AddBlobIdToPeopleTable.change/0 forward  14:29:00.062 [info] alter table people  14:29:00.062 [info] == Migrated 20240613093658 in 0.0s  14:29:00.063 [info] == Running 20240625115345 Operately.Repo.Migrations.AddGroupIdFieldToAccessGroupsTable.change/0 forward  14:29:00.063 [info] alter table access_groups  14:29:00.063 [info] create index access_groups_group_id_index  14:29:00.064 [info] == Migrated 20240625115345 in 0.0s  14:29:00.065 [info] == Running 20240627084024 Operately.Repo.Migrations.AddPersonIdFieldToAccessGroupsSchema.change/0 forward  14:29:00.065 [info] alter table access_groups  14:29:00.065 [info] create index access_groups_person_id_index  14:29:00.066 [info] == Migrated 20240627084024 in 0.0s  14:29:00.066 [info] == Running 20240627143843 Operately.Repo.Migrations.AddSizeToBlobs.change/0 forward  14:29:00.067 [info] alter table blobs  14:29:00.067 [info] == Migrated 20240627143843 in 0.0s  14:29:00.067 [info] == Running 20240627144248 Operately.Repo.Migrations.AddContentTypeToBlobs.change/0 forward  14:29:00.068 [info] alter table blobs  14:29:00.068 [info] == Migrated 20240627144248 in 0.0s  14:29:00.068 [info] == Running 20240628081627 Operately.Repo.Migrations.AddCompanyIdFieldToAccessGroupsSchema.change/0 forward  14:29:00.069 [info] alter table access_groups  14:29:00.069 [info] create index access_groups_company_id_index  14:29:00.069 [info] == Migrated 20240628081627 in 0.0s  14:29:00.070 [info] == Running 20240628084820 Operately.Repo.Migrations.AddTagFieldToAccessGroupSchema.change/0 forward  14:29:00.070 [info] alter table access_groups  14:29:00.070 [info] == Migrated 20240628084820 in 0.0s  14:29:00.071 [info] == Running 20240701134437 Operately.Repo.Migrations.AddShortIdToCompanies.change/0 forward  14:29:00.071 [info] alter table companies  14:29:00.071 [info] == Migrated 20240701134437 in 0.0s  14:29:00.072 [info] == Running 20240701150412 Operately.Repo.Migrations.AddUniqueConstraintToCompanyShortId.change/0 forward  14:29:00.072 [info] create index companies_short_id_index  14:29:00.073 [info] == Migrated 20240701150412 in 0.0s  14:29:00.073 [info] == Running 20240712101332 Operately.Repo.Migrations.AddTagPropertyToBindingsTable.change/0 forward  14:29:00.073 [info] alter table access_bindings  14:29:00.074 [info] == Migrated 20240712101332 in 0.0s  14:29:00.074 [info] == Running 20240725091444 Operately.Repo.Migrations.AddHasOpenInvitationFieldToPeople.change/0 forward  14:29:00.074 [info] alter table people  14:29:00.075 [info] == Migrated 20240725091444 in 0.0s  14:29:00.075 [info] == Running 20240730162256 Operately.Repo.Migrations.RenameActivityContextIdToActivityAccessContextId.change/0 forward  14:29:00.075 [info] rename column context_id to access_context_id on table activities  14:29:00.075 [info] == Migrated 20240730162256 in 0.0s  14:29:00.076 [info] == Running 20240801153306 Operately.Repo.Migrations.AddFullNameToAccounts.change/0 forward  14:29:00.076 [info] alter table accounts  14:29:00.076 [info] == Migrated 20240801153306 in 0.0s  14:29:00.077 [info] == Running 20240827092026 Operately.Repo.Migrations.CreateSubscriptionLists.change/0 forward  14:29:00.077 [info] create table subscription_lists  14:29:00.078 [info] == Migrated 20240827092026 in 0.0s  14:29:00.078 [info] == Running 20240827092208 Operately.Repo.Migrations.CreateSubscriptions.change/0 forward  14:29:00.079 [info] create table subscriptions  14:29:00.080 [info] create index subscriptions_subscription_list_id_index  14:29:00.080 [info] create index subscriptions_person_id_index  14:29:00.081 [info] == Migrated 20240827092208 in 0.0s  14:29:00.081 [info] == Running 20240828132022 Operately.Repo.Migrations.AddSubscriptionListRelationshipWithProjectCheckInTable.change/0 forward  14:29:00.081 [info] alter table project_check_ins  14:29:00.082 [info] create index project_check_ins_subscription_list_id_index  14:29:00.082 [info] == Migrated 20240828132022 in 0.0s  14:29:00.083 [info] == Running 20240909112047 Operately.Repo.Migrations.AddCanceledFieldToSubscriptionsSchema.change/0 forward  14:29:00.083 [info] alter table subscriptions  14:29:00.083 [info] == Migrated 20240909112047 in 0.0s  14:29:00.084 [info] == Running 20240911170712 Operately.Repo.Migrations.CopyGoalCheckInsFromUpdatesToNewTable.up/0 forward  14:29:00.084 [info] execute "CREATE TABLE goal_updates AS SELECT * FROM updates WHERE updates.type = 'goal_check_in';"  14:29:00.085 [info] execute "ALTER TABLE goal_updates ADD CONSTRAINT goal_updates_pkey PRIMARY KEY (id);"  14:29:00.085 [info] alter table goal_updates  14:29:00.086 [info] create index goal_updates_goal_id_index  14:29:00.090 [debug] QUERY OK source="goal_updates" db=0.0ms 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  14:29:00.090 [info] alter table goal_updates  14:29:00.091 [info] rename column acknowledging_person_id to acknowledged_by_id on table goal_updates  14:29:00.091 [info] == Migrated 20240911170712 in 0.0s  14:29:00.092 [info] == Running 20240912132541 Operately.Repo.Migrations.UpdateCommentsEntityTypeValueToGoalCheckIn.up/0 forward  14:29:00.096 [debug] QUERY OK source="comments" db=0.1ms 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  14:29:00.096 [info] == Migrated 20240912132541 in 0.0s  14:29:00.097 [info] == Running 20240912145520 Operately.Repo.Migrations.UpdateReactionsEntityTypeToGoalUpdate.up/0 forward  14:29:00.099 [debug] QUERY OK source="reactions" db=0.1ms 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  14:29:00.099 [info] == Migrated 20240912145520 in 0.0s  14:29:00.099 [info] == Running 20240914202720 Operately.Repo.Migrations.AddSubscriptionListRelationshipWithGoalUpdateTable.change/0 forward  14:29:00.100 [info] alter table goal_updates  14:29:00.100 [info] create index goal_updates_subscription_list_id_index  14:29:00.101 [info] == Migrated 20240914202720 in 0.0s  14:29:00.101 [info] == Running 20240916140730 Operately.Repo.Migrations.CreateSubscriptionsListForExistingGoalUpdates.up/0 forward  14:29:00.103 [debug] QUERY OK source="goal_updates" db=0.0ms 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  14:29:00.103 [info] == Migrated 20240916140730 in 0.0s  14:29:00.104 [info] == Running 20240916184443 Operately.Repo.Migrations.CreateSubcriptionsListForExistingProjectCheckIns.up/0 forward  14:29:00.107 [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  14:29:00.107 [info] == Migrated 20240916184443 in 0.0s  14:29:00.108 [info] == Running 20240917173757 Operately.Repo.Migrations.CopyDiscussionsFromUpdatesToMessagesTable.up/0 forward  14:29:00.108 [info] execute "CREATE TABLE messages AS SELECT * FROM updates WHERE updates.type = 'project_discussion';"  14:29:00.108 [info] execute "ALTER TABLE messages ADD CONSTRAINT messages_pkey PRIMARY KEY (id);"  14:29:00.109 [info] alter table messages  14:29:00.109 [info] create index messages_space_id_index  14:29:00.110 [info] create index messages_author_id_index  14:29:00.110 [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  14:29:00.110 [info] alter table messages  14:29:00.111 [info] == Migrated 20240917173757 in 0.0s  14:29:00.112 [info] == Running 20240918101843 Operately.Repo.Migrations.UpdateCommentEntityTypeValueToMessage.up/0 forward  14:29:00.114 [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  14:29:00.114 [info] == Migrated 20240918101843 in 0.0s  14:29:00.116 [info] == Running 20240918102916 Operately.Repo.Migrations.UpdateReactionEntityTypeValueToMessage.up/0 forward  14:29:00.117 [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  14:29:00.117 [info] == Migrated 20240918102916 in 0.0s  14:29:00.118 [info] == Running 20240918182641 Operately.Repo.Migrations.AddSubscriptionListRelationshipWithMessagesTable.change/0 forward  14:29:00.119 [info] alter table messages  14:29:00.120 [info] create index messages_subscription_list_id_index  14:29:00.121 [info] == Migrated 20240918182641 in 0.0s  14:29:00.122 [info] == Running 20240919103804 Operately.Repo.Migrations.CreateSubscriptionsListForExistingMessages.up/0 forward  14:29:00.125 [debug] QUERY OK source="messages" db=0.0ms 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  14:29:00.125 [info] == Migrated 20240919103804 in 0.0s  14:29:00.126 [info] == Running 20240923095718 Operately.Repo.Migrations.CreateTableForProjectRetrospective.up/0 forward  14:29:00.127 [info] create table project_retrospectives  14:29:00.129 [info] create index project_retrospectives_subscription_list_id_index  14:29:00.130 [info] create index project_retrospectives_author_id_index  14:29:00.131 [info] create index project_retrospectives_project_id_index  14:29:00.132 [debug] QUERY OK source="projects" db=0.0ms 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  14:29:00.132 [info] == Migrated 20240923095718 in 0.0s  14:29:00.133 [info] == Running 20241002151620 Operately.Repo.Migrations.CreateSubscriptionsListForExistingProjectRetrospective.up/0 forward  14:29:00.139 [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  14:29:00.139 [info] == Migrated 20241002151620 in 0.0s  14:29:00.141 [info] == Running 20241003135919 Operately.Repo.Migrations.AddRetrospectiveToProjectClosedActivity.up/0 forward  14:29:00.145 [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  14:29:00.146 [info] == Migrated 20241003135919 in 0.0s  14:29:00.147 [info] == Running 20241010142306 Operately.Repo.Migrations.AddSpaceFieldToProjectCreatedActivity.up/0 forward  14:29:00.150 [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  14:29:00.150 [info] == Migrated 20241010142306 in 0.0s  14:29:00.152 [info] == Running 20241010162832 Operately.Repo.Migrations.AddSpaceFieldToProjectResumingActivity.up/0 forward  14:29:00.153 [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  14:29:00.153 [info] == Migrated 20241010162832 in 0.0s  14:29:00.155 [info] == Running 20241010172454 Operately.Repo.Migrations.AddSpaceKeyToProjectPausingActivity.up/0 forward  14:29:00.157 [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" 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  14:29:00.157 [info] == Migrated 20241010172454 in 0.0s  14:29:00.159 [info] == Running 20241010185006 Operately.Repo.Migrations.AddSpaceToProjectCheckInActivities.up/0 forward  14:29:00.161 [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" 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  14:29:00.161 [info] == Migrated 20241010185006 in 0.0s  14:29:00.163 [info] == Running 20241011101759 Operately.Repo.Migrations.AddSpaceKeyToProjectActivities.up/0 forward  14:29:00.165 [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" 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  14:29:00.165 [info] == Migrated 20241011101759 in 0.0s  14:29:00.166 [info] == Running 20241011111805 Operately.Repo.Migrations.AddSpaceKeyToGoalUpdateActivities.up/0 forward  14:29:00.168 [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" 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  14:29:00.168 [info] == Migrated 20241011111805 in 0.0s  14:29:00.169 [info] == Running 20241011142317 Operately.Repo.Migrations.AddSpaceToGoalEditingActivity.up/0 forward  14:29:00.170 [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  14:29:00.170 [info] == Migrated 20241011142317 in 0.0s  14:29:00.171 [info] == Running 20241014102321 Operately.Repo.Migrations.AddSpaceToProjectTimelineEditedActivity.up/0 forward  14:29:00.172 [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  14:29:00.173 [info] == Migrated 20241014102321 in 0.0s  14:29:00.174 [info] == Running 20241024114823 Operately.Repo.Migrations.AddClosedAtToExistingClosedProjects.up/0 forward  14:29:00.174 [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  14:29:00.175 [info] == Migrated 20241024114823 in 0.0s  14:29:00.176 [info] == Running 20241029095032 Operately.Repo.Migrations.AddStatusFieldToGoalUpdates.change/0 forward  14:29:00.176 [info] alter table goal_updates  14:29:00.176 [info] == Migrated 20241029095032 in 0.0s  14:29:00.177 [info] == Running 20241030164401 Operately.Repo.Migrations.PupulateGoalUpdatesStatusFieldWithDefaultValue.up/0 forward  14:29:00.178 [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  14:29:00.178 [info] == Migrated 20241030164401 in 0.0s  14:29:00.179 [info] == Running 20241107124746 Operately.Repo.Migrations.DropSupportForIconsInSpaces.change/0 forward  14:29:00.179 [info] alter table groups  14:29:00.180 [info] == Migrated 20241107124746 in 0.0s  14:29:00.180 [info] == Running 20241107152926 Operately.Repo.Migrations.AddResourceHubResourceNodeAndFolder.change/0 forward  14:29:00.180 [info] create table resource_hubs  14:29:00.182 [info] create index resource_hubs_space_id_index  14:29:00.182 [info] alter table access_contexts  14:29:00.183 [info] create index access_contexts_resource_hub_id_index  14:29:00.183 [info] create table resource_nodes  14:29:00.184 [info] create index resource_nodes_resource_hub_id_index  14:29:00.185 [info] create table resource_folders  14:29:00.186 [info] create index resource_folders_node_id_index  14:29:00.186 [info] alter table resource_nodes  14:29:00.187 [info] create index resource_nodes_folder_id_index  14:29:00.187 [info] == Migrated 20241107152926 in 0.0s  14:29:00.188 [info] == Running 20241107172651 Operately.Repo.Migrations.CreateOneResourceHubForEveryExistingSpace.up/0 forward  14:29:00.191 [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  14:29:00.191 [info] == Migrated 20241107172651 in 0.0s  14:29:00.192 [info] == Running 20241111124913 Operately.Repo.Migrations.AddTimestampsToResourceNodesAndFolders.change/0 forward  14:29:00.192 [info] alter table resource_nodes  14:29:00.192 [info] alter table resource_folders  14:29:00.192 [info] == Migrated 20241111124913 in 0.0s  14:29:00.193 [info] == Running 20241111151040 Operately.Repo.Migrations.AddStateToMessages.change/0 forward  14:29:00.193 [info] alter table messages  14:29:00.193 [info] == Migrated 20241111151040 in 0.0s  14:29:00.194 [info] == Running 20241112130317 Operately.Repo.Migrations.RenameNodeFolderFieldToParentField.change/0 forward  14:29:00.194 [info] rename column folder_id to parent_folder_id on table resource_nodes  14:29:00.194 [info] drop index resource_nodes_folder_id_index  14:29:00.195 [info] create index resource_nodes_parent_folder_id_index  14:29:00.195 [info] == Migrated 20241112130317 in 0.0s  14:29:00.196 [info] == Running 20241113112605 Operately.Repo.Migrations.CreateMessagesBoardsSchemaAndAddRelationshipToMessages.change/0 forward  14:29:00.196 [info] create table messages_boards  14:29:00.197 [info] alter table messages  14:29:00.197 [info] create index messages_boards_space_id_index  14:29:00.198 [info] create index messages_messages_board_id_index  14:29:00.198 [info] == Migrated 20241113112605 in 0.0s  14:29:00.199 [info] == Running 20241113125136 Operately.Repo.Migrations.PopulateMessagesBoardIdFieldInMessages.change/0 forward  14:29:00.201 [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  14:29:00.201 [info] == Migrated 20241113125136 in 0.0s  14:29:00.203 [info] == Running 20241115093941 Operately.Repo.Migrations.CreateAccessBindingsBetweenResourceHubsAndCompanyMembers.up/0 forward  14:29:00.206 [debug] QUERY OK source="resource_hubs" db=0.1ms 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  14:29:00.206 [info] == Migrated 20241115093941 in 0.0s  14:29:00.207 [info] == Running 20241115105023 Operately.Repo.Migrations.AddPublishedAtDateForMessages.change/0 forward  14:29:00.207 [info] alter table messages  14:29:00.207 [info] == Migrated 20241115105023 in 0.0s  14:29:00.208 [info] == Running 20241115105054 Operately.Repo.Migrations.PopulatePublishedAtDateForMessages.up/0 forward  14:29:00.208 [info] execute "UPDATE messages SET published_at = inserted_at"  14:29:00.208 [info] == Migrated 20241115105054 in 0.0s  14:29:00.209 [info] == Running 20241117192821 Operately.Repo.Migrations.AddDeletedAtToMessages.change/0 forward  14:29:00.209 [info] alter table messages  14:29:00.210 [info] == Migrated 20241117192821 in 0.0s  14:29:00.210 [info] == Running 20241118100459 Operately.Repo.Migrations.AddResourceHubDocumentsSchema.change/0 forward  14:29:00.211 [info] create table resource_documents  14:29:00.212 [info] create index resource_documents_node_id_index  14:29:00.212 [info] create index resource_documents_subscription_list_id_index  14:29:00.213 [info] == Migrated 20241118100459 in 0.0s  14:29:00.213 [info] == Running 20241120145441 Operately.Repo.Migrations.AddSiteAdminFieldToAccounts.change/0 forward  14:29:00.214 [info] alter table accounts  14:29:00.214 [info] == Migrated 20241120145441 in 0.0s  14:29:00.215 [info] == Running 20241120165930 Operately.Repo.Migrations.AddAuthorFieldToResourceHubDocument.change/0 forward  14:29:00.215 [info] alter table resource_documents  14:29:00.215 [info] create index resource_documents_author_id_index  14:29:00.216 [info] == Migrated 20241120165930 in 0.0s  14:29:00.217 [info] == Running 20241121140809 Operately.Repo.Migrations.AddResourceHubFilesSchema.change/0 forward  14:29:00.217 [info] create table resource_files  14:29:00.218 [info] create index resource_files_node_id_index  14:29:00.219 [info] create index resource_files_author_id_index  14:29:00.219 [info] create index resource_files_blob_id_index  14:29:00.219 [info] == Migrated 20241121140809 in 0.0s  14:29:00.220 [info] == Running 20241126115317 Operately.Repo.Migrations.AddSoftDeletedToDocuments.change/0 forward  14:29:00.220 [info] alter table resource_nodes  14:29:00.220 [info] alter table resource_documents  14:29:00.221 [info] == Migrated 20241126115317 in 0.0s  14:29:00.221 [info] == Running 20241127142637 Operately.Repo.Migrations.RemoveDescriptionFieldFromFolder.change/0 forward  14:29:00.222 [info] alter table resource_folders  14:29:00.222 [info] == Migrated 20241127142637 in 0.0s  14:29:00.223 [info] == Running 20241201132900 Operately.Repo.Migrations.ConfirmAllPreviousAccounts.change/0 forward  14:29:00.238 [debug] QUERY OK source="accounts" db=0.1ms UPDATE "accounts" AS a0 SET "confirmed_at" = $1 [~N[2025-04-29 14:29:00]] ↳ Ecto.Migration.Runner.perform_operation/3, at: lib/ecto/migration/runner.ex:310  14:29:00.238 [info] == Migrated 20241201132900 in 0.0s  14:29:00.240 [info] == Running 20241201133659 Operately.Repo.Migrations.AddEmailActivationCodes.change/0 forward  14:29:00.240 [info] create table email_activation_codes  14:29:00.242 [info] create index email_activation_codes_code_index  14:29:00.243 [info] == Migrated 20241201133659 in 0.0s  14:29:00.244 [info] == Running 20241202194057 Operately.Repo.Migrations.AddSubscriptionsListFieldToResourceHubFile.change/0 forward  14:29:00.245 [info] alter table resource_files  14:29:00.246 [info] create index resource_files_subscription_list_id_index  14:29:00.247 [info] == Migrated 20241202194057 in 0.0s  14:29:00.248 [info] == Running 20241204102735 Operately.Repo.Migrations.AddSoftDeletedToResourceHubFile.change/0 forward  14:29:00.249 [info] alter table resource_files  14:29:00.250 [info] == Migrated 20241204102735 in 0.0s  14:29:00.251 [info] == Running 20241205122925 Operately.Repo.Migrations.AddHeightAndWidthFieldsToBlobsSchema.change/0 forward  14:29:00.251 [info] alter table blobs  14:29:00.252 [info] == Migrated 20241205122925 in 0.0s  14:29:00.253 [info] == Running 20241206102636 Operately.Repo.Migrations.AddSoftDeletedToFolders.change/0 forward  14:29:00.253 [info] alter table resource_folders  14:29:00.253 [info] == Migrated 20241206102636 in 0.0s  14:29:00.254 [info] == Running 20241209142058 Operately.Repo.Migrations.AddPreviewBlobRelationshipBetweenFilesAndBlobs.change/0 forward  14:29:00.254 [info] alter table resource_files  14:29:00.255 [info] create index resource_files_preview_blob_id_index  14:29:00.255 [info] == Migrated 20241209142058 in 0.0s  14:29:00.256 [info] == Running 20241219153512 Operately.Repo.Migrations.RenameExistingResourceHubsToDocumentsAndFiles.up/0 forward  14:29:00.257 [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  14:29:00.257 [info] == Migrated 20241219153512 in 0.0s  14:29:00.258 [info] == Running 20241220130517 Operately.Repo.Migrations.AddResourceHubLinkSchema.change/0 forward  14:29:00.258 [info] create table resource_links  14:29:00.260 [info] create index resource_links_node_id_index  14:29:00.261 [info] create index resource_links_author_id_index  14:29:00.261 [info] create index resource_links_subscription_list_id_index  14:29:00.261 [info] == Migrated 20241220130517 in 0.0s  14:29:00.262 [info] == Running 20250103164752 Operately.Repo.Migrations.UpdateResourceHubActivitiesAccessContext.up/0 forward  14:29:00.264 [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  14:29:00.264 [info] == Migrated 20250103164752 in 0.0s  14:29:00.265 [info] == Running 20250103173929 Operately.Repo.Migrations.UpdateBlobSizeFieldFromIntToBigint.change/0 forward  14:29:00.265 [info] alter table blobs  14:29:00.267 [info] == Migrated 20250103173929 in 0.0s  14:29:00.268 [info] == Running 20250108125221 Operately.Repo.Migrations.UpdateFileCreatedActivityFormat.up/0 forward  14:29:00.270 [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  14:29:00.270 [info] == Migrated 20250108125221 in 0.0s  14:29:00.271 [info] == Running 20250120100306 Operately.Repo.Migrations.AddStatusAndPublishedAtFieldsToDocumentSchema.change/0 forward  14:29:00.271 [info] alter table resource_documents  14:29:00.271 [info] == Migrated 20250120100306 in 0.0s  14:29:00.272 [info] == Running 20250121095446 Operately.Repo.Migrations.PopulatePublishedAtFieldInExistingPublishedDocuments.up/0 forward  14:29:00.276 [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  14:29:00.276 [info] == Migrated 20250121095446 in 0.0s  14:29:00.277 [info] == Running 20250124144013 Operately.Repo.Migrations.DeleteGoalReparentActivitiesWithMissingData.up/0 forward  14:29:00.279 [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  14:29:00.279 [debug] QUERY OK source="activities" db=0.1ms 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  14:29:00.279 [info] == Migrated 20250124144013 in 0.0s  14:29:00.280 [info] == Running 20250129180403 Operately.Repo.Migrations.PopulateCommentEntityIdWithMilestoneId.up/0 forward  14:29:00.284 [debug] QUERY OK source="comments" db=0.1ms 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  14:29:00.284 [info] == Migrated 20250129180403 in 0.0s  14:29:00.286 [info] == Running 20250217140410 Operately.Repo.Migrations.CreateBindingsBetweenPeopleAndCompanySpace.up/0 forward  14:29:00.291 [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  14:29:00.291 [info] == Migrated 20250217140410 in 0.0s  14:29:00.292 [info] == Running 20250317102620 Operately.Repo.Migrations.AddCyclePreventionFunctionToGoals.up/0 forward  14:29:00.293 [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"  14:29:00.294 [info] execute "CREATE TRIGGER prevent_goal_cycle\nBEFORE INSERT OR UPDATE ON goals\nFOR EACH ROW EXECUTE FUNCTION check_goal_cycle();\n"  14:29:00.295 [info] create index goals_parent_goal_id_index  14:29:00.296 [info] == Migrated 20250317102620 in 0.0s  14:29:00.297 [info] == Running 20250325115924 Operately.Repo.Migrations.AddLastCheckInIdToGoals.change/0 forward  14:29:00.297 [info] alter table goals  14:29:00.298 [info] == Migrated 20250325115924 in 0.0s  14:29:00.299 [info] == Running 20250325131944 Operately.Repo.Migrations.PopulateLastCheckInOnGoals.up/0 forward  14:29:00.301 [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 []  14:29:00.302 [info] == Migrated 20250325131944 in 0.0s  14:29:00.303 [info] == Running 20250328094455 Operately.Repo.Migrations.AddGoalUpdatesTimeframe.change/0 forward  14:29:00.304 [info] alter table goal_updates  14:29:00.304 [info] == Migrated 20250328094455 in 0.0s  14:29:00.305 [info] == Running 20250328094716 Operately.Repo.Migrations.PopulateGoalUpdatesTimeframes.up/0 forward  14:29:00.307 [debug] QUERY OK db=0.1ms UPDATE goal_updates SET timeframe = goals.timeframe FROM goals WHERE goal_updates.goal_id = goals.id; []  14:29:00.307 [info] == Migrated 20250328094716 in 0.0s  14:29:00.308 [info] == Running 20250331193957 Operately.Repo.Migrations.AddCascadeDeleteToGoalTargets.up/0 forward  14:29:00.308 [info] drop constraint targets_goal_id_fkey from table targets  14:29:00.309 [info] alter table targets  14:29:00.309 [info] == Migrated 20250331193957 in 0.0s  14:29:00.310 [info] == Running 20250331194510 Operately.Repo.Migrations.AddCascadeDeleteToGoalAccessContexts.up/0 forward  14:29:00.310 [info] drop constraint access_contexts_goal_id_fkey from table access_contexts  14:29:00.311 [info] alter table access_contexts  14:29:00.311 [info] == Migrated 20250331194510 in 0.0s  14:29:00.312 [info] == Running 20250331194727 Operately.Repo.Migrations.AddCascadeDeleteToAccessBindings.up/0 forward  14:29:00.312 [info] drop constraint access_bindings_context_id_fkey from table access_bindings  14:29:00.312 [info] alter table access_bindings  14:29:00.313 [info] == Migrated 20250331194727 in 0.0s  14:29:00.314 [info] == Running 20250331195524 Operately.Repo.Migrations.AddCascadeDeleteToContextActivities.up/0 forward  14:29:00.314 [info] drop constraint activities_context_id_fkey from table activities  14:29:00.314 [info] alter table activities  14:29:00.315 [info] == Migrated 20250331195524 in 0.0s  14:29:00.315 [info] == Running 20250331200245 Operately.Repo.Migrations.AddCascadeDeleteToProjectAccessContexts.up/0 forward  14:29:00.315 [info] drop constraint access_contexts_project_id_fkey from table access_contexts  14:29:00.316 [info] alter table access_contexts  14:29:00.316 [info] == Migrated 20250331200245 in 0.0s  14:29:00.317 [info] == Running 20250331202813 Operately.Repo.Migrations.AddCascadeDeleteToGoalCheckIns.up/0 forward  14:29:00.317 [info] drop constraint goal_updates_goal_id_fkey from table goal_updates  14:29:00.318 [info] alter table goal_updates  14:29:00.318 [info] == Migrated 20250331202813 in 0.0s  14:29:00.319 [info] == Running 20250401104505 Operately.Repo.Migrations.AddCascadeDeleteToActivityNotifications.up/0 forward  14:29:00.319 [info] drop constraint notifications_activity_id_fkey from table notifications  14:29:00.319 [info] alter table notifications  14:29:00.320 [info] == Migrated 20250401104505 in 0.0s  14:29:00.321 [info] == Running 20250403112800 Operately.Repo.Migrations.AddUniqueAccountPlusCompanyConstraintToPeople.change/0 forward  14:29:00.321 [info] create index people_company_id_account_id_index  14:29:00.322 [info] == Migrated 20250403112800 in 0.0s make test.mix.unit OperatelyWeb.ErrorHTMLTest Test: renders 404.html (test/operately_web/controllers/error_html_test.exs:7) PASSED Test: renders 500.html (test/operately_web/controllers/error_html_test.exs:11) PASSED OperatelyWeb.AccountSessionControllerTest 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 logs the account out (test/operately_web/controllers/account_session_controller_test.exs:20) 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 OperatelyWeb.AccountAuthTest Test: log_in_account/3 stores the account token in the session (test/operately_web/account_auth_test.exs:20) PASSED Test: logout_account/1 works even if account is already logged out (test/operately_web/account_auth_test.exs:60) PASSED Test: require_authenticated_account/2 stores the path to redirect to on GET (test/operately_web/account_auth_test.exs:124) PASSED Test: fetch_current_account/2 authenticates account from cookies (test/operately_web/account_auth_test.exs:75) PASSED Test: fetch_current_account/2 authenticates account from session (test/operately_web/account_auth_test.exs:69) 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 erases session and cookies (test/operately_web/account_auth_test.exs:43) PASSED Test: require_authenticated_account/2 does not redirect if account is authenticated (test/operately_web/account_auth_test.exs:150) PASSED Test: log_in_account/3 clears everything previously stored in the session (test/operately_web/account_auth_test.exs:27) PASSED Test: redirect_if_account_is_authenticated/2 redirects if account is authenticated (test/operately_web/account_auth_test.exs:103) PASSED Test: log_in_account/3 writes a cookie if remember_me is configured (test/operately_web/account_auth_test.exs:32) PASSED Test: fetch_current_account/2 does not authenticate if data is missing (test/operately_web/account_auth_test.exs:94) PASSED Test: require_authenticated_account/2 redirects if account is not authenticated (test/operately_web/account_auth_test.exs:117) PASSED Operately.Tasks.KanbanStateTest Test: load (test/operately/tasks/kanban_state_test.exs:8) PASSED Test: remove (test/operately/tasks/kanban_state_test.exs:36) PASSED Test: add (test/operately/tasks/kanban_state_test.exs:23) PASSED Test: initialize (test/operately/tasks/kanban_state_test.exs:13) PASSED Test: add_todo (test/operately/tasks/kanban_state_test.exs:17) PASSED Operately.TimeTest 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_weekly_check_in check in late -> schedule next check-in for next Friday (test/operately/time_test.exs:25) 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_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 significantly late -> schedule next check-in for next Friday (test/operately/time_test.exs:29) 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 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 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 before due date -> schedule next check-in for first of next month (test/operately/time_test.exs:43) 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 time -> schedule first of next month (test/operately/time_test.exs:39) 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 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.ErrorJSONTest Test: renders 404 (test/operately_web/controllers/error_json_test.exs:4) PASSED Test: renders 500 (test/operately_web/controllers/error_json_test.exs:8) PASSED OperatelyWeb.Api.Queries.ListGoalContributorsTest Test: security it requires authentication (test/operately_web/api/queries/list_goal_contributors_test.exs:11) 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=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: list_goal_contributors functionality returns contributors for goal without child goals (test/operately_web/api/queries/list_goal_contributors_test.exs:92) PASSED 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=comment_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=no_access and goal=reviewer, 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 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=no_access and goal=no_access, then expect code=forbidden (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: 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=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=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 Operately.TenetsTest Test: tenets list_tenets/0 returns all tenets (test/operately/tenets_test.exs:13) PASSED Test: tenets update_tenet/2 with valid data updates the tenet (test/operately/tenets_test.exs:35) PASSED Test: tenets delete_tenet/1 deletes the tenet (test/operately/tenets_test.exs:50) PASSED Test: tenets update_tenet/2 with invalid data returns error changeset (test/operately/tenets_test.exs:44) PASSED Test: tenets create_tenet/1 with invalid data returns error changeset (test/operately/tenets_test.exs:31) PASSED Test: tenets get_tenet!/1 returns the tenet with given id (test/operately/tenets_test.exs:18) PASSED Test: tenets create_tenet/1 with valid data creates a tenet (test/operately/tenets_test.exs:23) PASSED Test: tenets change_tenet/1 returns a tenet changeset (test/operately/tenets_test.exs:56) PASSED OperatelyWeb.Api.Queries.ListResourceHubNodesTest Test: security it requires authentication (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:10) 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: list_resource_hub_nodes functionality list only nodes within folder (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:94) PASSED Test: list_resource_hub_nodes functionality include_children_count (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:146) 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_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: 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=comment_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_comments_count (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:118) 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: 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: 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=comment_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 fetches all nodes (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:78) PASSED OperatelyWeb.Api.Mutations.UpdateMilestoneDescriptionTest Test: security it requires authentication (test/operately_web/api/mutations/update_milestone_description_test.exs:13) 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=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=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: 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=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=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=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 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=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=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 OperatelyWeb.Api.Queries.GetInvitationTest Test: get_invitation functionality returns the invitation (test/operately_web/api/queries/get_invitation_test.exs:9) PASSED Operately.Operations.GroupCreationTest Test: GroupCreation operation creates group (test/operately/operations/group_creation_test.exs:27) PASSED Test: GroupCreation operation can create no_access binding to company members (test/operately/operations/group_creation_test.exs:70) PASSED Test: GroupCreation operation adds creator to managers group (test/operately/operations/group_creation_test.exs:108) PASSED Test: GroupCreation operation creates only view_access for anonymours users (test/operately/operations/group_creation_test.exs:86) PASSED Test: GroupCreation operation creates default resource hub (test/operately/operations/group_creation_test.exs:131) PASSED Test: GroupCreation operation creates full_access binding with creator (test/operately/operations/group_creation_test.exs:61) PASSED Test: GroupCreation operation adds creator as member of group (test/operately/operations/group_creation_test.exs:33) PASSED Test: GroupCreation operation creates default messages group (test/operately/operations/group_creation_test.exs:125) PASSED Test: GroupCreation operation creates access context, groups and bindings (test/operately/operations/group_creation_test.exs:42) PASSED Test: GroupCreation operation creates activity (test/operately/operations/group_creation_test.exs:116) PASSED OperatelyWeb.Api.Mutations.CreateResourceHubFileTest 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=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=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=comment_access and space=no_access, then expect code=403 (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=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=no_access and space=no_access, then expect code=404 (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 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: 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 OperatelyWeb.Api.Mutations.RemoveCompanyTrustedEmailDomainTest 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=full_access, then expect code=200 (test/operately_web/api/mutations/remove_company_trusted_email_domain_test.exs:23) PASSED 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=edit_access, then expect code=403 (test/operately_web/api/mutations/remove_company_trusted_email_domain_test.exs:23) PASSED OperatelyWeb.Api.Mutations.UpdateProjectContributorTest Test: security it requires authentication (test/operately_web/api/mutations/update_project_contributor_test.exs:12) 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=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: 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=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 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=full_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=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=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=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=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=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=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=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=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 OperatelyWeb.Api.Mutations.ArchiveGoalTest Test: security it requires authentication (test/operately_web/api/mutations/archive_goal_test.exs:13) PASSED Test: permissions company admins can archive a goal (test/operately_web/api/mutations/archive_goal_test.exs:50) PASSED Test: archive_goal functionality archives goal (test/operately_web/api/mutations/archive_goal_test.exs:141) PASSED 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 space members without view access can't see a goal (test/operately_web/api/mutations/archive_goal_test.exs:65) PASSED Test: permissions champions can archive a goal (test/operately_web/api/mutations/archive_goal_test.exs:105) 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 company members without view access can't see a goal (test/operately_web/api/mutations/archive_goal_test.exs:27) PASSED Test: permissions space managers can archive a goal (test/operately_web/api/mutations/archive_goal_test.exs:91) 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 members with full access can archive a goal (test/operately_web/api/mutations/archive_goal_test.exs:83) PASSED Test: permissions reviewers can archive a goal (test/operately_web/api/mutations/archive_goal_test.exs:121) 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.Mutations.MarkNotificationsAsReadTest Test: security it requires authentication (test/operately_web/api/mutations/mark_notifications_as_read_test.exs:9) PASSED 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: mark_as_read functionality it marks notifications as read (test/operately_web/api/mutations/mark_notifications_as_read_test.exs:29) PASSED Operately.OkrsTest Test: objectives list_objectives/0 returns all objectives (test/operately/okrs_test.exs:22) PASSED Test: objectives update_objective/2 with valid data updates the objective (test/operately/okrs_test.exs:52) PASSED Test: key_results update_key_result/2 with valid data updates the key_result (test/operately/okrs_test.exs:127) PASSED Test: key_results change_key_result/1 returns a key_result changeset (test/operately/okrs_test.exs:152) PASSED Test: key_results delete_key_result/1 deletes the key_result (test/operately/okrs_test.exs:145) PASSED Test: objectives delete_objective/1 deletes the objective (test/operately/okrs_test.exs:72) PASSED Test: objectives update_objective/2 with invalid data returns error changeset (test/operately/okrs_test.exs:64) PASSED Test: key_results create_key_result/1 with valid data creates a key_result (test/operately/okrs_test.exs:105) PASSED Test: objectives create_objective/1 with invalid data returns error changeset (test/operately/okrs_test.exs:48) PASSED Test: key_results update_key_result/2 with invalid data returns error changeset (test/operately/okrs_test.exs:138) PASSED Test: objectives get_objective!/1 returns the objective with given id (test/operately/okrs_test.exs:28) PASSED Test: key_results get_key_result!/1 returns the key_result with given id (test/operately/okrs_test.exs:99) PASSED Test: objectives create_objective/1 with valid data creates a objective (test/operately/okrs_test.exs:34) 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 invalid data returns error changeset (test/operately/okrs_test.exs:123) PASSED OperatelyWeb.HealthControllerTest Test: GET /health (test/operately_web/controllers/health_controller_test.exs:4) 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 TurboConnect.ApiTest Test: __types__ returns the types defined in the module (test/turbo_connect/api_test.exs:75) PASSED Test: routing queries return 404 for unknown queries (test/turbo_connect/api_test.exs:145) PASSED Test: routing mutations route mutations to the correct handler (test/turbo_connect/api_test.exs:161) PASSED Test: routing queries return 400 for invalid queries (test/turbo_connect/api_test.exs:152) PASSED Test: routing queries route queries to the correct handler (test/turbo_connect/api_test.exs:138) PASSED Test: __queries__ returns the queries defined in the module (test/turbo_connect/api_test.exs:100) PASSED Test: routing mutations return 400 for invalid mutations (test/turbo_connect/api_test.exs:175) PASSED Test: __mutations__ returns the mutations defined in the module (test/turbo_connect/api_test.exs:118) PASSED Test: routing mutations return 404 for unknown mutations (test/turbo_connect/api_test.exs:168) PASSED Operately.InvitationsTest Test: invitations list_invitations/0 returns all invitations (test/operately/invitations_test.exs:17) PASSED Test: invitations create_invitation/1 with valid data creates a invitation (test/operately/invitations_test.exs:48) PASSED Test: invitation_tokens create_invitation_token!/1 deletes previous invitation_token (test/operately/invitations_test.exs:102) PASSED Test: invalid invitation_tokens valid_token_time?/2 returns correct value (test/operately/invitations_test.exs:143) PASSED Test: invalid invitation_tokens tokens already expired (test/operately/invitations_test.exs:131) PASSED Test: invitations delete_invitation/1 deletes the invitation (test/operately/invitations_test.exs:64) PASSED Test: invitations create_invitation/1 with invalid data returns error changeset (test/operately/invitations_test.exs:60) 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 get_invitation_by_member/1 returns the invitation (test/operately/invitations_test.exs:36) PASSED Test: invitation_tokens delete_invitation_token/1 deletes the invitation_token (test/operately/invitations_test.exs:123) PASSED Test: invitations get_invitation!/1 returns the invitation with given id (test/operately/invitations_test.exs:22) PASSED Test: invitation_tokens get_invitation_token!/1 returns the invitation_token with given id (test/operately/invitations_test.exs:77) PASSED Test: invitations get_invitation_by_token!/1 returns the invitation (test/operately/invitations_test.exs:27) PASSED Test: invitation_tokens list_invitation_tokens/0 returns all invitation_tokens (test/operately/invitations_test.exs:72) PASSED Test: invitation_tokens create_invitation_token!/1 with valid data creates a invitation_token (test/operately/invitations_test.exs:91) PASSED Operately.Operations.ResourceHubFileCreatingTest Test: functionality creates subscriptions (test/operately/operations/resource_hub_file_creating_test.exs:24) 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 blobs are marked as uploaded (test/operately/operations/resource_hub_file_creating_test.exs:41) PASSED Test: notifications Creating file sends notifications to everyone (test/operately/operations/resource_hub_file_creating_test.exs:60) 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.Queries.GetGoalProgressUpdateTest Test: security it requires authentication (test/operately_web/api/queries/get_goal_progress_update_test.exs:15) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_goal_progress_update_test.exs:49) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_goal_progress_update_test.exs:70) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_goal_progress_update_test.exs:56) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_goal_progress_update_test.exs:42) 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_unread_notifications (test/operately_web/api/queries/get_goal_progress_update_test.exs:132) 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_potential_subscribers (test/operately_web/api/queries/get_goal_progress_update_test.exs:98) PASSED Operately.Data.Change013CreateActivitiesAccessContextTest 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 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 company activities company_member_removed action (test/operately/data/change_013_create_activities_access_context_test.exs:25) 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)14:29:31.474 [error] Unhandled activity: %Operately.Activities.Activity{__meta__: #Ecto.Schema.Metadata<:loaded, "activities">, id: "018bb159-57c1-4f90-9ba2-9de30fa6f6cc", author_id: "de439d3f-930d-4cad-adc9-952ea8ab58c2", 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: "5fec4779-bce6-4abe-93ef-6a3ddf393027", 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 14:29:31], updated_at: ~N[2025-04-29 14:29:31], requester_access_level: nil, request_info: nil} 14:29:31.474 [error] Comment associated with activity: %Operately.Updates.Comment{__meta__: #Ecto.Schema.Metadata<:loaded, "comments">, id: "5fec4779-bce6-4abe-93ef-6a3ddf393027", update_id: nil, update: #Ecto.Association.NotLoaded, author_id: "de439d3f-930d-4cad-adc9-952ea8ab58c2", 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 14:29:31], updated_at: ~N[2025-04-29 14:29:31], requester_access_level: nil} 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 goal activities goal_reparent action (test/operately/data/change_013_create_activities_access_context_test.exs:285) 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 project activities project_resuming action (test/operately/data/change_013_create_activities_access_context_test.exs:701) 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_created action (test/operately/data/change_013_create_activities_access_context_test.exs:476) 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 space activities task_size_change action (test/operately/data/change_013_create_activities_access_context_test.exs:244) 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 goal activities goal_discussion_editing action (test/operately/data/change_013_create_activities_access_context_test.exs:406) 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 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 project activities project_archived action (test/operately/data/change_013_create_activities_access_context_test.exs:491) 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 project activities project_goal_disconnection action (test/operately/data/change_013_create_activities_access_context_test.exs:626) 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 space activities discussion_posting action (test/operately/data/change_013_create_activities_access_context_test.exs:124) 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 project activities project_contributor_addition action (test/operately/data/change_013_create_activities_access_context_test.exs:581) 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 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_check_in_acknowledged action (test/operately/data/change_013_create_activities_access_context_test.exs:506) 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_goal_connection action (test/operately/data/change_013_create_activities_access_context_test.exs:611) 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 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 company activities company_member_added action (test/operately/data/change_013_create_activities_access_context_test.exs:70) 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_reopening action (test/operately/data/change_013_create_activities_access_context_test.exs:436) 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 goal activities goal_check_in_commented action (test/operately/data/change_013_create_activities_access_context_test.exs:331) 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_discussion_submitted action (test/operately/data/change_013_create_activities_access_context_test.exs:596) 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 goal activities goal_timeframe_editing action (test/operately/data/change_013_create_activities_access_context_test.exs:451) 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 project activities project_moved action (test/operately/data/change_013_create_activities_access_context_test.exs:656) 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 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 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 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 project activities project_renamed action (test/operately/data/change_013_create_activities_access_context_test.exs:686) 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 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_pausing action (test/operately/data/change_013_create_activities_access_context_test.exs:671) 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 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_description_change action (test/operately/data/change_013_create_activities_access_context_test.exs:184) 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 OperatelyWeb.Api.Queries.GetKeyResourceTest Test: security it requires authentication (test/operately_web/api/queries/get_key_resource_test.exs:12) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_key_resource_test.exs:47) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_key_resource_test.exs:71) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_key_resource_test.exs:55) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_key_resource_test.exs:39) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_key_resource_test.exs:25) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_key_resource_test.exs:32) PASSED Test: permissions suspended people don't have access (test/operately_web/api/queries/get_key_resource_test.exs:87) PASSED Operately.Operations.ProjectGoalDisconnectionTest Test: ProjectGoalDisconnection operation updates project.goal_id to nil (test/operately/operations/project_goal_disconnection_test.exs:31) PASSED Test: ProjectGoalDisconnection operation creates activity and notification (test/operately/operations/project_goal_disconnection_test.exs:41) PASSED Operately.Blobs.UpdateSrcDataTest Test: succesfully converts broken blob references (test/operately/blobs/update_src_data_test.exs:63) PASSED Test: update_discussion_content (test/operately/blobs/update_src_data_test.exs:67) PASSED OperatelyWeb.Api.Mutations.EditDiscussionTest Test: security it requires authentication (test/operately_web/api/mutations/edit_discussion_test.exs:15) PASSED Test: company permissions company owners can edit discussion (test/operately_web/api/mutations/edit_discussion_test.exs:51) PASSED Test: space permissions space member without edit access can't edit discussion (test/operately_web/api/mutations/edit_discussion_test.exs:81) 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: edit_discussion functionality edits discussion (test/operately_web/api/mutations/edit_discussion_test.exs:119) PASSED Test: company permissions company members with edit access can edit discussion (test/operately_web/api/mutations/edit_discussion_test.exs:43) 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 company owner can edit discussion (test/operately_web/api/mutations/edit_discussion_test.exs:97) 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 space members with edit access can edit discussion (test/operately_web/api/mutations/edit_discussion_test.exs:89) PASSED Test: edit_discussion functionality mentioned people are added to subscriptions list (test/operately_web/api/mutations/edit_discussion_test.exs:126) PASSED Operately.Operations.ProjectContributorRemovedTest Test: ProjectContributorRemoved operation deletes contributor (test/operately/operations/project_contributor_removed_test.exs:29) PASSED Test: ProjectContributorRemoved operation deletes access binding (test/operately/operations/project_contributor_removed_test.exs:43) PASSED Test: ProjectContributorRemoved operation creates activity (test/operately/operations/project_contributor_removed_test.exs:54) PASSED Operately.Data.Change014CreatePeopleAccessGroupTest Test: creates access_group for existing people (test/operately/data/change_014_create_people_access_group_test.exs:15) PASSED Test: ignores person when they already have access_group (test/operately/data/change_014_create_people_access_group_test.exs:31) 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.DeleteResourceHubDocumentTest 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=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=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=comment_access and space=no_access, then expect code=403 (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=no_access and space=no_access, then expect code=404 (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 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: 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 Operately.Companies.ShortIdTest Test: generate (test/operately/companies/short_id_test.exs:8) PASSED Test: conversion (test/operately/companies/short_id_test.exs:24) PASSED OperatelyWeb.Api.Plugs.RequireAuthenticatedAccountTest Test: it returns 401 if the current account is nil (test/operately_web/api/plugs/require_authenticated_account_test.exs:5) PASSED 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: 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.Operations.CompanyAddingTest Test: CompanyAdding operation creates company for an existing account (test/operately/operations/company_adding_test.exs:23) 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 company company space member (test/operately/operations/company_adding_test.exs:108) PASSED Test: CompanyAdding operation creates company and group access contexts (test/operately/operations/company_adding_test.exs:101) 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 with owner (test/operately/operations/company_adding_test.exs:39) PASSED Test: CompanyAdding operation creates company group (test/operately/operations/company_adding_test.exs:59) PASSED OperatelyWeb.Api.Mutations.ArchiveProjectTest Test: security it requires authentication (test/operately_web/api/mutations/archive_project_test.exs:13) PASSED Test: permissions company admins can archive a project (test/operately_web/api/mutations/archive_project_test.exs:50) PASSED Test: permissions champions can archive a project (test/operately_web/api/mutations/archive_project_test.exs:128) PASSED Test: archive_project functionality archives project (test/operately_web/api/mutations/archive_project_test.exs:164) PASSED 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 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: 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 members who have full access can archive a project (test/operately_web/api/mutations/archive_project_test.exs:43) PASSED Test: permissions reviewers can archive a project (test/operately_web/api/mutations/archive_project_test.exs:144) 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 space managers can archive a project (test/operately_web/api/mutations/archive_project_test.exs:91) 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 members who have full access can archive a project (test/operately_web/api/mutations/archive_project_test.exs:83) PASSED Test: permissions contributors who have full access can archive a project (test/operately_web/api/mutations/archive_project_test.exs:117) PASSED OperatelyWeb.Api.Mutations.EditSubscriptionsListTest Test: edit_subscriptions_list functionality adds new subscriptions (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:110) 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=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: 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=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: 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=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: 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=full_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=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=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=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 reactivates canceled subscriptions (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:181) 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: 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=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: edit_subscriptions_list functionality doesn't cancel all subscriptions (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:163) 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=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 adds and cancels subscriptions (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:145) 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.Messages.MessageTest Test: creating a message published_at is set (test/operately/messages/message_test.exs:30) 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 draft message state is draft (test/operately/messages/message_test.exs:53) PASSED Test: creating a draft message published_at is nil (test/operately/messages/message_test.exs:57) PASSED OperatelyWeb.Api.Mutations.EditSpaceTest Test: security it requires authentication (test/operately_web/api/mutations/edit_space_test.exs:10) PASSED Test: permissions company owners can edit a space (test/operately_web/api/mutations/edit_space_test.exs:44) PASSED Test: permissions space members with edit access can edit a space (test/operately_web/api/mutations/edit_space_test.exs:65) 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: permissions company members with edit access can edit a space (test/operately_web/api/mutations/edit_space_test.exs:37) 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 mission (test/operately_web/api/mutations/edit_space_test.exs:88) 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 name (test/operately_web/api/mutations/edit_space_test.exs:77) PASSED Operately.Operations.GoalEditingTest Test: GoalEditing operation updates goal (test/operately/operations/goal_editing_test.exs:54) 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 creates activity and notification (test/operately/operations/goal_editing_test.exs:160) PASSED Test: GoalEditing operation updates goal's bindings to space (test/operately/operations/goal_editing_test.exs:110) PASSED Test: GoalEditing operation updates company space goal (test/operately/operations/goal_editing_test.exs:78) PASSED Test: GoalEditing operation updates goal's bindings to company (test/operately/operations/goal_editing_test.exs:93) PASSED OperatelyWeb.Api.Mutations.EditProjectTimelineTest Test: security it requires authentication (test/operately_web/api/mutations/edit_project_timeline_test.exs:13) 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: edit_project_timeline functionality edits project start date and deadline (test/operately_web/api/mutations/edit_project_timeline_test.exs:72) PASSED Test: edit_project_timeline functionality adds project milestone (test/operately_web/api/mutations/edit_project_timeline_test.exs:115) 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_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: 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=edit_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 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=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: 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: 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=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=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 Operately.Operations.ProjectContributorEditedTest Test: updating responsibility (test/operately/operations/project_contributor_edited_test.exs:25) PASSED Test: choosing a new champion that is not already a contributor (test/operately/operations/project_contributor_edited_test.exs:60) PASSED Test: choosing a new champion from the contributors (test/operately/operations/project_contributor_edited_test.exs:78) PASSED Test: converting a reviewer to a contributor (test/operately/operations/project_contributor_edited_test.exs:49) PASSED Test: updating access level (test/operately/operations/project_contributor_edited_test.exs:31) PASSED Test: converting a champion to a contributor (test/operately/operations/project_contributor_edited_test.exs:37) PASSED OperatelyWeb.Api.Queries.GetProjectRetrospectiveTest Test: security it requires authentication (test/operately_web/api/queries/get_project_retrospective_test.exs:10) 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: get_project_retrospective functionality include_author (test/operately_web/api/queries/get_project_retrospective_test.exs:107) PASSED Test: get_project_retrospective functionality include_unread_notifications (test/operately_web/api/queries/get_project_retrospective_test.exs:91) PASSED Test: get_project_retrospective functionality include_potential_subscribers (test/operately_web/api/queries/get_project_retrospective_test.exs:142) PASSED Test: permissions project contributors (test/operately_web/api/queries/get_project_retrospective_test.exs:61) PASSED Test: permissions company members (test/operately_web/api/queries/get_project_retrospective_test.exs:27) PASSED Test: get_project_retrospective functionality include_permissions (test/operately_web/api/queries/get_project_retrospective_test.exs:127) PASSED Test: permissions space members (test/operately_web/api/queries/get_project_retrospective_test.exs:43) PASSED Test: get_project_retrospective functionality include_project (test/operately_web/api/queries/get_project_retrospective_test.exs:117) 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.Api.Mutations.EditGoalProgressUpdateTest Test: security it requires authentication (test/operately_web/api/mutations/edit_goal_progress_update_test.exs:14) PASSED Test: permissions author/champion can edit goal update (test/operately_web/api/mutations/edit_goal_progress_update_test.exs:53) PASSED 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: edit_goal_progress_update functionality archives goal (test/operately_web/api/mutations/edit_goal_progress_update_test.exs:73) 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: 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 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.Mutations.CreateGoalTest Test: security it requires authentication (test/operately_web/api/mutations/create_goal_test.exs:10) PASSED Test: company permissions company owners can create goal (test/operately_web/api/mutations/create_goal_test.exs:42) 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: create_goal functionality creates goal within company (test/operately_web/api/mutations/create_goal_test.exs:156) PASSED Test: create_goal functionality creates goal within space (test/operately_web/api/mutations/create_goal_test.exs:151) PASSED Test: space permissions space member without edit access can't create goal (test/operately_web/api/mutations/create_goal_test.exs:67) 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: 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 members with edit access can create goal (test/operately_web/api/mutations/create_goal_test.exs:35) 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: company permissions company member can see only their company (test/operately_web/api/mutations/create_goal_test.exs:23) PASSED Test: space permissions company owners can create goal (test/operately_web/api/mutations/create_goal_test.exs:81) 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 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 successfully created when champion has access to the space (test/operately_web/api/mutations/create_goal_test.exs:113) PASSED Operately.Operations.GroupMembersAddingTest Test: GroupMembersAdding operation adds members to group (test/operately/operations/group_members_adding_test.exs:34) 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 access group (test/operately/operations/group_members_adding_test.exs:45) PASSED Test: GroupMembersAdding operation adds access bindings (test/operately/operations/group_members_adding_test.exs:71) PASSED OperatelyWeb.Api.Mutations.EditProjectNameTest Test: security it requires authentication (test/operately_web/api/mutations/edit_project_name_test.exs:11) PASSED Test: permissions company owners can edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:46) PASSED Test: permissions champions can edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:118) PASSED Test: edit_project_name functionality edits project name (test/operately_web/api/mutations/edit_project_name_test.exs:152) PASSED 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 space members without view access can't see a project (test/operately_web/api/mutations/edit_project_name_test.exs:59) 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 members with edit access can edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:39) PASSED Test: permissions reviewers can edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:133) 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 space managers can edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:83) 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 members with edit access can edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:75) PASSED Test: permissions contributors with edit access can edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:107) 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 OperatelyWeb.Api.Mutations.UpdateProjectDescriptionTest Test: security it requires authentication (test/operately_web/api/mutations/update_project_description_test.exs:12) 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=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=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: 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=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=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=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 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=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=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 Operately.Data.Change050CreateBindingsBetweenPeopleAndCompanySpaceTest Test: Creates bindings between people and company space (test/operately/data/change_050_create_bindings_between_people_and_company_space_test.exs:22) PASSED Test: Creates memberships between people and company space (test/operately/data/change_050_create_bindings_between_people_and_company_space_test.exs:39) PASSED Operately.Operations.ProjectKeyResourceAddingTest Test: ProjectCreation operation creates activity and notification (test/operately/operations/project_key_resource_adding_test.exs:19) PASSED Operately.Operations.ResourceHubFileDeletingTest Test: Deleting file sends notifications to everyone (test/operately/operations/resource_hub_file_deleting_test.exs:21) PASSED Test: Deleting file sends notifications to selected people (test/operately/operations/resource_hub_file_deleting_test.exs:43) PASSED Test: Person without permissions is not notified (test/operately/operations/resource_hub_file_deleting_test.exs:65) PASSED OperatelyWeb.Api.Mutations.ResetPasswordTest Test: password reset (test/operately_web/api/mutations/reset_password_test.exs:10) PASSED Test: security it fails if the email is invalid (test/operately_web/api/mutations/reset_password_test.exs:41) PASSED 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 password confirmation is invalid (test/operately_web/api/mutations/reset_password_test.exs:32) PASSED OperatelyWeb.Api.Mutations.EditCommentTest 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)14:29:36.914 [error] Failed to send email 14:29:36.915 [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=full_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:129) 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=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=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, goal=reviewer on the thread, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:104)14:29:37.070 [error] Failed to send email 14:29:37.071 [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=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=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=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=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: Updates subscriptions message (test/operately_web/api/mutations/edit_comment_test.exs:254) 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 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: 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=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=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=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=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=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=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=edit_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 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=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=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=full_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=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=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=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=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=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=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=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, 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=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=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=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: 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=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=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=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=no_access on the space, then expect code=404 (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: 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=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=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=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=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=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=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=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=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=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=comment_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=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=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=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=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=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=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=view_access, goal=no_access on the thread, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:104) PASSED OperatelyWeb.Api.Mutations.EditGoalTimeframeTest Test: security it requires authentication (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:12) PASSED Test: permissions company owner can edit a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:47) PASSED Test: edit_goal_timeframe functionality edits a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:131) PASSED 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 space members without view access can't see a goal (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:60) PASSED Test: permissions champions can edit a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:97) 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 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 managers can edit a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:84) 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 members with edit access can edit a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:76) PASSED Test: permissions reviewers can edit a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:112) 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.Operations.ProjectCreationTest Test: ProjectCreation operation creates project (test/operately/operations/project_creation_test.exs:45) PASSED Test: ProjectCreation operation doesn't add creator as contributor (test/operately/operations/project_creation_test.exs:97) PASSED Test: ProjectCreation operation doesn't create without champion or reviewer (test/operately/operations/project_creation_test.exs:126) PASSED Test: ProjectCreation operation doesn't create bindings to space (test/operately/operations/project_creation_test.exs:113) PASSED Test: ProjectCreation operation creates bindings to contributors (test/operately/operations/project_creation_test.exs:84) PASSED Test: ProjectCreation operation creates bindings to company (test/operately/operations/project_creation_test.exs:59) PASSED Test: ProjectCreation operation creates activity and notification (test/operately/operations/project_creation_test.exs:154) PASSED Test: ProjectCreation operation creates bindings to space (test/operately/operations/project_creation_test.exs:73) PASSED Test: ProjectCreation operation adds tags to reviewer's and champion's bindings (test/operately/operations/project_creation_test.exs:140) PASSED OperatelyWeb.Api.Mutations.ChangeGoalParentTest Test: security it requires authentication (test/operately_web/api/mutations/change_goal_parent_test.exs:13) PASSED Test: permissions company admins can change goal parent (test/operately_web/api/mutations/change_goal_parent_test.exs:54) PASSED Test: change_goal_parent functionality archives goal (test/operately_web/api/mutations/change_goal_parent_test.exs:157) PASSED 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 space members without view access can't see a goal (test/operately_web/api/mutations/change_goal_parent_test.exs:70) PASSED Test: permissions champions can change goal parent (test/operately_web/api/mutations/change_goal_parent_test.exs:114) 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 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 managers can change goal parent (test/operately_web/api/mutations/change_goal_parent_test.exs:99) 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 members with edit access can change goal parent (test/operately_web/api/mutations/change_goal_parent_test.exs:90) PASSED Test: permissions reviewers can change goal parent (test/operately_web/api/mutations/change_goal_parent_test.exs:131) PASSED Operately.Data.Change037AddSpaceToGoalUpdateActivitiesTest 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 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 Operately.CommentsTest Test: milestone_comments list_milestone_comments/0 returns all milestone_comments (test/operately/comments_test.exs:38) PASSED Test: milestone_comments delete_milestone_comment/1 deletes the milestone_comment (test/operately/comments_test.exs:63) PASSED Test: milestone_comments change_milestone_comment/1 returns a milestone_comment changeset (test/operately/comments_test.exs:68) PASSED Test: milestone_comments update_milestone_comment/2 with invalid data returns error changeset (test/operately/comments_test.exs:54) PASSED Test: milestone_comments get_milestone_comment!/1 returns the milestone_comment with given id (test/operately/comments_test.exs:43) PASSED Test: milestone_comments update_milestone_comment/2 with valid data updates the milestone_comment (test/operately/comments_test.exs:48) PASSED OperatelyWeb.Api.Mutations.AddCompanyOwnersTest Test: security it requires authentication (test/operately_web/api/mutations/add_company_owners_test.exs:13) PASSED Test: security company owners can add owners (test/operately_web/api/mutations/add_company_owners_test.exs:31) PASSED Test: security regular members can't add owners (test/operately_web/api/mutations/add_company_owners_test.exs:17) PASSED Test: security admins can't add owners (test/operately_web/api/mutations/add_company_owners_test.exs:24) PASSED Operately.Projects.ListOperationTest Test: visibility filters creator can see all projects (test/operately/projects/list_operation_test.exs:36) PASSED Test: group filters listing projects for a group (test/operately/projects/list_operation_test.exs:69) PASSED 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: visibility filters non_colaborator can only see public projects (test/operately/projects/list_operation_test.exs:54) PASSED OperatelyWeb.Api.Queries.GetCompaniesTest Test: security it requires authentication (test/operately_web/api/queries/get_companies_test.exs:10) PASSED Test: get_companies functionality get companies with nothing extra (test/operately_web/api/queries/get_companies_test.exs:18) 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.GoalCreationTest Test: GoalCreation operation creates goal and context (test/operately/operations/goal_creation_test.exs:38) 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 adds tags to reviewer's and champion's bindings (test/operately/operations/goal_creation_test.exs:112) PASSED Test: GoalCreation operation creates bindings to reviewer and champion (test/operately/operations/goal_creation_test.exs:101) PASSED Test: GoalCreation operation creates bindings to space (test/operately/operations/goal_creation_test.exs:76) PASSED Test: GoalCreation operation creates targets (test/operately/operations/goal_creation_test.exs:47) PASSED Test: GoalCreation operation creates bindings to company (test/operately/operations/goal_creation_test.exs:63) PASSED Test: GoalCreation operation creates activity and notification (test/operately/operations/goal_creation_test.exs:126) PASSED OperatelyWeb.Api.Mutations.AcknowledgeProjectCheckInTest Test: security it requires authentication (test/operately_web/api/mutations/acknowledge_project_check_in_test.exs:13) 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 reviewers can acknowledge a check-in (test/operately_web/api/mutations/acknowledge_project_check_in_test.exs:64) PASSED Test: permissions contributors can't acknowledge a check-in (test/operately_web/api/mutations/acknowledge_project_check_in_test.exs:57) 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 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: permissions company members can't acknowledge a check-in (test/operately_web/api/mutations/acknowledge_project_check_in_test.exs:34) PASSED Test: acknowledge_project_check_in functionality acknowledges check-in (test/operately_web/api/mutations/acknowledge_project_check_in_test.exs:80) PASSED Operately.Operations.ResourceHubFolderCopyingTest Test: Copy content folder and its nested content are copied (test/operately/operations/resource_hub_folder_copying_test.exs:20) PASSED Test: Copy content link within folder is copied (test/operately/operations/resource_hub_folder_copying_test.exs:128) PASSED 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 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 file within folder is copied (test/operately/operations/resource_hub_folder_copying_test.exs:99) PASSED Test: Copy content empty folder is copied (test/operately/operations/resource_hub_folder_copying_test.exs:52) PASSED Test: Subscriptions subscriptions list and active subscriptions are copied (test/operately/operations/resource_hub_folder_copying_test.exs:252) PASSED Test: Copy content document within folder is copied (test/operately/operations/resource_hub_folder_copying_test.exs:70) 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 Operately.Data.Change034AddSpaceProjectPausingToActivityTest 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 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 OperatelyWeb.Api.Queries.GetProjectCheckInTest Test: security it requires authentication (test/operately_web/api/queries/get_project_check_in_test.exs:15) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_project_check_in_test.exs:51) 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 reviewers have access (test/operately_web/api/queries/get_project_check_in_test.exs:75) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_project_check_in_test.exs:59) 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 no access (test/operately_web/api/queries/get_project_check_in_test.exs:43) PASSED Test: get_project_check_in functionality include_potential_subscribers (test/operately_web/api/queries/get_project_check_in_test.exs:185) 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_author (test/operately_web/api/queries/get_project_check_in_test.exs:118) 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_unread_notifications (test/operately_web/api/queries/get_project_check_in_test.exs:102) PASSED Test: get_project_check_in functionality include_project (test/operately_web/api/queries/get_project_check_in_test.exs:156) PASSED OperatelyWeb.Api.Mutations.EditCompanyTest Test: security it requires authentication (test/operately_web/api/mutations/edit_company_test.exs:5) 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: authorization company members can't edit (test/operately_web/api/mutations/edit_company_test.exs:19) PASSED Test: authorization company admin can edit (test/operately_web/api/mutations/edit_company_test.exs:24) PASSED OperatelyWeb.Api.Queries.GetNotificationsTest OperatelyWeb.Api.Queries.GetMilestoneTest Test: security it requires authentication (test/operately_web/api/queries/get_milestone_test.exs:13) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_milestone_test.exs:49) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_milestone_test.exs:73) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_milestone_test.exs:57) PASSED Test: get_milestone functionality include_comments (test/operately_web/api/queries/get_milestone_test.exs:127) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_milestone_test.exs:41) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_milestone_test.exs:27) PASSED Test: get_milestone functionality include_permissions (test/operately_web/api/queries/get_milestone_test.exs:114) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_milestone_test.exs:34) PASSED Test: get_milestone functionality include_project (test/operately_web/api/queries/get_milestone_test.exs:101) PASSED OperatelyWeb.Api.Queries.GetPeopleTest Test: security it requires authentication (test/operately_web/api/queries/get_people_test.exs:10) PASSED Test: permissions suspended people don't have access (test/operately_web/api/queries/get_people_test.exs:64) PASSED Test: get_people functionality include_suspeded (test/operately_web/api/queries/get_people_test.exs:91) PASSED Test: get_people functionality returns all people from the company (test/operately_web/api/queries/get_people_test.exs:78) PASSED Test: permissions company member can't query people from another company (test/operately_web/api/queries/get_people_test.exs:48) 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 include_manager (test/operately_web/api/queries/get_people_test.exs:109) 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 only_suspended (test/operately_web/api/queries/get_people_test.exs:100) PASSED OperatelyWeb.Api.Mutations.DeleteResourceHubLinkTest 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=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=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=comment_access and space=no_access, then expect code=403 (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=no_access and space=no_access, then expect code=404 (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 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: 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 OperatelyWeb.Api.Mutations.AddReactionTest 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=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 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 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=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 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 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 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 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 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 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 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: security it requires authentication (test/operately_web/api/mutations/add_reaction_test.exs:18) 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 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 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 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 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 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 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 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 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=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 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 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 - 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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)14:29:42.756 [error] Failed to send email 14:29:42.756 [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 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 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 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 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 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 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=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 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 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 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 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 - 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 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 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 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 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 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 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 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 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 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 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 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 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 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: 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 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 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 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 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 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 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 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 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 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: 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 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 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 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 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 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 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 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 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 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 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, 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 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: add_reaction functionality add reaction to a discussion (test/operately_web/api/mutations/add_reaction_test.exs:509) 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 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 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 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 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 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 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 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 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=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 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 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=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=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 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 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 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 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 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 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 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 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=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 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 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 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 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 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=view_access, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:448) 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 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 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 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=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 - 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 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 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 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 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 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 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)14:29:44.936 [error] Failed to send email 14:29:44.938 [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 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 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 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 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 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, 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=edit_access, then expect code=200 (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=comment_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=comment_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=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 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 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=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=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 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 - 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=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 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 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=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 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 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 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 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 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 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 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 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 - 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 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 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 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 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 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=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=comment_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=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 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=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 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 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 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 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 Operately.KpisTest Test: kpi_metrics change_metric/1 returns a metric changeset (test/operately/kpis_test.exs:124) PASSED Test: kpis list_kpis/0 returns all kpis (test/operately/kpis_test.exs:13) PASSED Test: kpis update_kpi/2 with valid data updates the kpi (test/operately/kpis_test.exs:41) PASSED Test: kpi_metrics create_metric/1 with invalid data returns error changeset (test/operately/kpis_test.exs:99) PASSED Test: kpi_metrics delete_metric/1 deletes the metric (test/operately/kpis_test.exs:118) PASSED Test: kpi_metrics update_metric/2 with invalid data returns error changeset (test/operately/kpis_test.exs:112) PASSED Test: kpis delete_kpi/1 deletes the kpi (test/operately/kpis_test.exs:62) PASSED Test: kpis update_kpi/2 with invalid data returns error changeset (test/operately/kpis_test.exs:56) PASSED Test: kpi_metrics get_metric!/1 returns the metric with given id (test/operately/kpis_test.exs:86) PASSED Test: kpis create_kpi/1 with invalid data returns error changeset (test/operately/kpis_test.exs:37) PASSED Test: kpi_metrics update_metric/2 with valid data updates the metric (test/operately/kpis_test.exs:103) PASSED Test: kpis get_kpi!/1 returns the kpi with given id (test/operately/kpis_test.exs:18) PASSED Test: kpi_metrics list_kpi_metrics/0 returns all kpi_metrics (test/operately/kpis_test.exs:81) PASSED Test: kpis create_kpi/1 with valid data creates a kpi (test/operately/kpis_test.exs:23) PASSED Test: kpis change_kpi/1 returns a kpi changeset (test/operately/kpis_test.exs:68) PASSED Test: kpi_metrics create_metric/1 with valid data creates a metric (test/operately/kpis_test.exs:91) PASSED Operately.Operations.CompanyAdminRemovingTest Test: CompanyAdminRemoving operation creates activity (test/operately/operations/company_admin_removing_test.exs:18) PASSED Test: CompanyAdminAdding operation creates notification (test/operately/operations/company_admin_removing_test.exs:27) PASSED OperatelyWeb.Api.Queries.GetProjectsTest Test: security it requires authentication (test/operately_web/api/queries/get_projects_test.exs:14) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_projects_test.exs:69) PASSED Test: get_projects functionality include_goal (test/operately_web/api/queries/get_projects_test.exs:159) PASSED Test: get_projects functionality scope by space_id (test/operately_web/api/queries/get_projects_test.exs:183) 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 Test: permissions reviewers have access (test/operately_web/api/queries/get_projects_test.exs:96) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_projects_test.exs:80) PASSED Test: get_projects functionality include_reviewer (test/operately_web/api/queries/get_projects_test.exs:134) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_projects_test.exs:53) 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: permissions company members have no access (test/operately_web/api/queries/get_projects_test.exs:29) PASSED Test: get_projects functionality include_champion (test/operately_web/api/queries/get_projects_test.exs:125) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_projects_test.exs:43) 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_space (test/operately_web/api/queries/get_projects_test.exs:148) PASSED Operately.Operations.CommentAddingTest Test: Commenting on resource hub file Commenting on file notifies selected people (test/operately/operations/comment_adding_test.exs:601) PASSED Test: Commenting on check-in Commenting on check-in notifies everyone (test/operately/operations/comment_adding_test.exs:52) PASSED Test: Commenting on goal update Mentioned person is notified (test/operately/operations/comment_adding_test.exs:205) PASSED Test: Commenting on resource hub file Mentioned person is notified (test/operately/operations/comment_adding_test.exs:620) PASSED Test: Commenting on resource hub document Commenting on document notifies everyone (test/operately/operations/comment_adding_test.exs:468) 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 Mentioned person is notified (test/operately/operations/comment_adding_test.exs:525) PASSED Test: Commenting on message Commenting on message notifies selected people (test/operately/operations/comment_adding_test.exs:281) PASSED Test: Commenting on message Commenting on message notifies everyone (test/operately/operations/comment_adding_test.exs:255) 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 Commenting on update notifies selected people (test/operately/operations/comment_adding_test.exs:173) 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 link Mentioned person is notified (test/operately/operations/comment_adding_test.exs:705) PASSED Test: Commenting on check-in Mentioned person is notified (test/operately/operations/comment_adding_test.exs:82) PASSED Test: Commenting on project retrospective Commenting on retrospective notifies everyone (test/operately/operations/comment_adding_test.exs:361) PASSED Test: Commenting on goal update Commenting on update notifies everyone (test/operately/operations/comment_adding_test.exs:140) 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 message Mentioned person is notified (test/operately/operations/comment_adding_test.exs:310) PASSED Test: Commenting on project retrospective Mentioned person is notified (test/operately/operations/comment_adding_test.exs:422) PASSED Test: Commenting on resource hub link Commenting on link notifies everyone (test/operately/operations/comment_adding_test.exs:664) PASSED Operately.Operations.GoalTimeframeEditingTest Test: GoalTimeframeEditing operation updates goal (test/operately/operations/goal_timeframe_editing_test.exs:25) PASSED Test: GoalTimeframeEditing operation creates activity and thread (test/operately/operations/goal_timeframe_editing_test.exs:46) PASSED OperatelyWeb.Api.Queries.GetActivityTest Test: security it requires authentication (test/operately_web/api/queries/get_activity_test.exs:14) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_activity_test.exs:63) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_activity_test.exs:94) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_activity_test.exs:78) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_activity_test.exs:48) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_activity_test.exs:28) PASSED Test: get_activity functionality include_unread_goal_notifications (test/operately_web/api/queries/get_activity_test.exs:133) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_activity_test.exs:38) PASSED Test: get_activity functionality with no includes (test/operately_web/api/queries/get_activity_test.exs:121) PASSED Operately.Blobs.TokensTest Test: encryption and validation (test/operately/blobs/tokens_test.exs:6) PASSED Test: returns error on garbage data (test/operately/blobs/tokens_test.exs:12) PASSED Test: returns error even for base64 valid garbage (test/operately/blobs/tokens_test.exs:18) PASSED Operately.Data.Change021CreateProjectBindingsToCompanyAndSpaceTest 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 (test/operately/data/change_021_create_project_bindings_to_company_and_space_test.exs:72) 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.Operations.TaskUpdateTest Test: TaskUpdate operation updates task (test/operately/operations/task_update_test.exs:31) PASSED Test: TaskUpdate operation creates activity (test/operately/operations/task_update_test.exs:49) PASSED Operately.Operations.GoalReopeningTest Test: GoalReopening operation updates goal (test/operately/operations/goal_reopening_test.exs:32) PASSED Test: GoalReopening operation creates activity, thread and notification (test/operately/operations/goal_reopening_test.exs:46) PASSED OperatelyWeb.Api.Mutations.EditKeyResourceTest Test: security it requires authentication (test/operately_web/api/mutations/edit_key_resource_test.exs:11) 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: 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=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=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: 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=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=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=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 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=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=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 OperatelyWeb.Api.Mutations.ChangeTaskDescriptionTest Test: security it requires authentication (test/operately_web/api/mutations/change_task_description_test.exs:15) PASSED Test: permissions company owner can change task description (test/operately_web/api/mutations/change_task_description_test.exs:52) PASSED Test: permissions champions can change task description (test/operately_web/api/mutations/change_task_description_test.exs:129) PASSED Test: change_task_description functionality changes task description (test/operately_web/api/mutations/change_task_description_test.exs:165) PASSED 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 space members without view access can't see a project (test/operately_web/api/mutations/change_task_description_test.exs:66) 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 members with edit access can change task description (test/operately_web/api/mutations/change_task_description_test.exs:45) PASSED Test: permissions reviewers can change task description (test/operately_web/api/mutations/change_task_description_test.exs:145) 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 space managers can change task description (test/operately_web/api/mutations/change_task_description_test.exs:92) 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 members with edit access can change task description (test/operately_web/api/mutations/change_task_description_test.exs:84) PASSED Test: permissions contributors with edit access can change task description (test/operately_web/api/mutations/change_task_description_test.exs:118) PASSED OperatelyWeb.Api.Mutations.CreateResourceHubDocumentTest Test: security it requires authentication (test/operately_web/api/mutations/create_resource_hub_document_test.exs:18) 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: subscriptions to notifications creates subscription list for document (test/operately_web/api/mutations/create_resource_hub_document_test.exs:139) PASSED Test: subscriptions to notifications doesn't create repeated subscription (test/operately_web/api/mutations/create_resource_hub_document_test.exs:183) PASSED 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=comment_access and space=no_access, then expect code=403 (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=edit_access, then expect code=200 (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=no_access and space=no_access, then expect code=404 (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: 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: 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 draft document (test/operately_web/api/mutations/create_resource_hub_document_test.exs:113) PASSED OperatelyWeb.Api.Mutations.EditSpacePermissionsTest Test: security it requires authentication (test/operately_web/api/mutations/edit_space_permissions_test.exs:11) PASSED Test: permissions company owner can edit space permissions (test/operately_web/api/mutations/edit_space_permissions_test.exs:45) PASSED Test: permissions space managers can edit space permissions (test/operately_web/api/mutations/edit_space_permissions_test.exs:66) 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: permissions company members with full access can edit space permissions (test/operately_web/api/mutations/edit_space_permissions_test.exs:38) 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: permissions company members without full access can't edit space permissions (test/operately_web/api/mutations/edit_space_permissions_test.exs:31) PASSED Test: edit_space_permissions functionality edits space permissions (test/operately_web/api/mutations/edit_space_permissions_test.exs:78) PASSED OperatelyWeb.Api.Queries.ListSpaceToolsTest 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 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: security it requires authentication (test/operately_web/api/queries/list_space_tools_test.exs:13) 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 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: 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: list_space_tools functionality list goals (test/operately_web/api/queries/list_space_tools_test.exs:177) 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: 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: list_space_tools functionality list messages boards (test/operately_web/api/queries/list_space_tools_test.exs:185) 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 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 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: list_space_tools functionality list resource hubs (test/operately_web/api/queries/list_space_tools_test.exs:200) 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=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 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 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 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 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: 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: 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: 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 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=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=full_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=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=no_access and space=view_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:73) 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 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 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 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 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: invalid space it returns 422 invalid id (test/operately_web/api/queries/list_space_tools_test.exs:26) PASSED 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 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 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 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 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 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: list_space_tools functionality list projects (test/operately_web/api/queries/list_space_tools_test.exs:169) 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 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 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=full_access and space=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:73) 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 OperatelyWeb.Api.Mutations.ArchiveMessageTest Test: security it requires authentication (test/operately_web/api/mutations/archive_message_test.exs:16) PASSED Test: functionality it archives a message (test/operately_web/api/mutations/archive_message_test.exs:26) PASSED Test: functionality it archives a draft message (test/operately_web/api/mutations/archive_message_test.exs:31) PASSED Operately.Data.Change040AddStatusValueForExistingGoalUpdatesTest 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 Test: migration ignores updates with status (test/operately/data/change_040_add_status_value_for_existing_goal_updates_test.exs:32) PASSED OperatelyWeb.Api.Queries.GetProjectCheckInsTest Test: security it requires authentication (test/operately_web/api/queries/get_project_check_ins_test.exs:12) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_project_check_ins_test.exs:49) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_project_check_ins_test.exs:73) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_project_check_ins_test.exs:57) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_project_check_ins_test.exs:41) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_project_check_ins_test.exs:27) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_project_check_ins_test.exs:34) PASSED Operately.Data.Change020CreateProjectContributorsBindingsTest Test: creates access binding to existing contributors (test/operately/data/change_020_create_project_contributors_bindings_test.exs:39) PASSED OperatelyWeb.Api.Mutations.EditResourceHubDocumentTest 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=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=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=comment_access and space=no_access, then expect code=403 (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=no_access and space=no_access, then expect code=404 (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 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: 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 OperatelyWeb.Api.Mutations.AddCompanyTest Test: security it requires authentication (test/operately_web/api/mutations/add_company_test.exs:11) PASSED Test: add_company functionality creates company and an associated person record (test/operately_web/api/mutations/add_company_test.exs:17) PASSED OperatelyWeb.Api.Mutations.CreateBlobTest Test: security it requires authentication (test/operately_web/api/mutations/create_blob_test.exs:5) PASSED 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: create_blob functionality it creates multiple blob records in the database (test/operately_web/api/mutations/create_blob_test.exs:31) PASSED OperatelyWeb.Api.Mutations.PostGoalProgressUpdateTest Test: security it requires authentication (test/operately_web/api/mutations/post_goal_progress_update_test.exs:16) 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: subscriptions to notifications creates subscription list for goal update (test/operately_web/api/mutations/post_goal_progress_update_test.exs:103) PASSED Test: subscriptions to notifications doesn't create repeated subscription (test/operately_web/api/mutations/post_goal_progress_update_test.exs:152) 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/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: 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=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: 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=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: 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: 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=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: post_goal_progress_update functionality posts goal progress update (test/operately_web/api/mutations/post_goal_progress_update_test.exs:74) PASSED Operately.Operations.PasswordFirstTimeChangingTest Test: PasswordFirstTimeChanging operation changes password (test/operately/operations/password_first_time_changing_test.exs:25) PASSED Test: PasswordFirstTimeChanging operation sets has_open_invitation to false (test/operately/operations/password_first_time_changing_test.exs:35) PASSED Test: PasswordFirstTimeChanging operation creates activity (test/operately/operations/password_first_time_changing_test.exs:44) PASSED Operately.Goals.CycleDetectionTest 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 prevents a goal from being its own parent (test/operately/goals/cycle_detection_test.exs:48) PASSED 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 prevents direct cycles between two goals (test/operately/goals/cycle_detection_test.exs:56) 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 allows creating a goal with a valid parent (test/operately/goals/cycle_detection_test.exs:18) 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 Test: goal hierarchy cycle detection prevents cycle when updating a goal in a complex hierarchy (test/operately/goals/cycle_detection_test.exs:78) PASSED OperatelyWeb.Api.Queries.GetAssignmentsCountTest Test: security it requires authentication (test/operately_web/api/queries/get_assignments_count_test.exs:12) 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 goal updates (test/operately_web/api/queries/get_assignments_count_test.exs:106) PASSED Test: get_assignments_count counts due project check-ins (test/operately_web/api/queries/get_assignments_count_test.exs:80) 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 projects (test/operately_web/api/queries/get_assignments_count_test.exs:20) PASSED Test: get_assignments_count ignores closed projects (test/operately_web/api/queries/get_assignments_count_test.exs:39) PASSED OperatelyWeb.Api.HelpersTest Test: id_with_comments/2 returns the id with comments (test/operately_web/api/helpers_test.exs:10) PASSED Test: id_with_comments/2 doesn't create multiple dashes (test/operately_web/api/helpers_test.exs:14) PASSED Test: id_with_comments/2 takes at most 25 characters (test/operately_web/api/helpers_test.exs:18) PASSED OperatelyWeb.Api.Mutations.MoveProjectToSpaceTest 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: security it requires authentication (test/operately_web/api/mutations/move_project_to_space_test.exs:11) 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=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=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=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=edit_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=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=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: 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=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 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, 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, 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=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: 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=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=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=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 Operately.Api.Queries.GetProjectContributorTest Test: security it requires authentication (test/operately_web/api/queries/get_project_contributor_test.exs:5) PASSED Test: permissions project contributors (test/operately_web/api/queries/get_project_contributor_test.exs:55) PASSED Test: permissions company members (test/operately_web/api/queries/get_project_contributor_test.exs:21) PASSED Test: permissions space members (test/operately_web/api/queries/get_project_contributor_test.exs:37) PASSED OperatelyWeb.Api.ActionTest Test: new/0 returns an empty context (test/operately_web/api/action_test.exs:8) 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 one of the functions returns an error, it stops the chain (test/operately_web/api/action_test.exs:42) 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 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 takes a context, it passes the context to the function (test/operately_web/api/action_test.exs:19) PASSED Operately.AccessContextsTest Test: access_contexts list_contexts/0 returns all contexts (test/operately/access/contexts_test.exs:22) PASSED Test: access_contexts delete_context/1 deletes the context (test/operately/access/contexts_test.exs:44) PASSED 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 change_context/1 returns a context changeset (test/operately/access/contexts_test.exs:49) 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 update_context/2 with valid data updates the context (test/operately/access/contexts_test.exs:37) 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 goal (test/operately/access/contexts_test.exs:77) 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 group (test/operately/access/contexts_test.exs:71) 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 OperatelyWeb.Api.Queries.GetWorkMapTest Test: functionality filters by parent_goal_id (test/operately_web/api/queries/get_work_map_test.exs:274) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_work_map_test.exs:8) 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: functionality filters by owner_id (test/operately_web/api/queries/get_work_map_test.exs:288) 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: functionality filters by space_id (test/operately_web/api/queries/get_work_map_test.exs:254) PASSED Test: functionality returns empty list when no matching items exist (test/operately_web/api/queries/get_work_map_test.exs:246) PASSED 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 nested items company_member has access to public_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 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 goals champion 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 company_member has access to public_project (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: 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 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 space member has access to 4 public and internal goals (test/operately_web/api/queries/get_work_map_test.exs:167) PASSED Test: functionality returns hierarchical structure (test/operately_web/api/queries/get_work_map_test.exs:303) PASSED OperatelyWeb.Api.Mutations.EditResourceHubLinkTest 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=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=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=comment_access and space=no_access, then expect code=403 (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=no_access and space=no_access, then expect code=404 (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 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: 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 OperatelyWeb.Api.Mutations.ChangePasswordTest Test: if changes the password (test/operately_web/api/mutations/change_password_test.exs:9) 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: security it requires authentication (test/operately_web/api/mutations/change_password_test.exs:23) PASSED Test: security it fails with empty params (test/operately_web/api/mutations/change_password_test.exs:27) PASSED TurboConnect.TsGenTest Test: generating TypeScript code (test/turbo_connect/ts_gen_test.exs:231) PASSED OperatelyWeb.Api.Mutations.EditProjectRetrospectiveTest Test: security it requires authentication (test/operately_web/api/mutations/edit_project_retrospective_test.exs:19) 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: edit_project_retrospective functionality edits project retrospective (test/operately_web/api/mutations/edit_project_retrospective_test.exs:85) 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 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=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: 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=edit_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 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=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: 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: 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=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=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 Operately.Operations.ResourceHubDocumentCreatingTest Test: Creating document sends notifications to everyone (test/operately/operations/resource_hub_document_creating_test.exs:18) PASSED Test: Creating message sends notifications to selected people (test/operately/operations/resource_hub_document_creating_test.exs:46) PASSED Test: Person without permissions is not notified (test/operately/operations/resource_hub_document_creating_test.exs:74) PASSED Operately.BlobsTest Test: blobs list_blobs/0 returns all blobs (test/operately/blobs_test.exs:23) PASSED Test: blobs update_blob/2 with valid data updates the blob (test/operately/blobs_test.exs:53) PASSED Test: blobs delete_blob/1 deletes the blob (test/operately/blobs_test.exs:68) PASSED Test: blobs update_blob/2 with invalid data returns error changeset (test/operately/blobs_test.exs:62) PASSED Test: blobs create_blob/1 with invalid data returns error changeset (test/operately/blobs_test.exs:49) PASSED Test: blobs get_blob!/1 returns the blob with given id (test/operately/blobs_test.exs:28) PASSED Test: blobs create_blob/1 with valid data creates a blob (test/operately/blobs_test.exs:33) PASSED Test: blobs change_blob/1 returns a blob changeset (test/operately/blobs_test.exs:74) PASSED OperatelyWeb.Api.Mutations.UpdateProfileTest Test: security it requires authentication (test/operately_web/api/mutations/update_profile_test.exs:7) 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 my own profile update the theme (test/operately_web/api/mutations/update_profile_test.exs:90) PASSED Test: updating my own profile it updates the profile (test/operately_web/api/mutations/update_profile_test.exs:75) 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: 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 someone else's profile when I'm an admin, it updates the profile (test/operately_web/api/mutations/update_profile_test.exs:31) 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 Operately.Data.Change036AddSpaceToProjectActivitiesTest 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_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_goal_disconnection (test/operately/data/change_036_add_space_to_project_activities_test.exs:60) PASSED OperatelyWeb.Api.Queries.GetSpaceTest Test: security it requires authentication (test/operately_web/api/queries/get_space_test.exs:13) 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: get_space functionality include_potential_subscribers (test/operately_web/api/queries/get_space_test.exs:167) PASSED Test: get_space functionality get_space (test/operately_web/api/queries/get_space_test.exs:75) PASSED Test: get_space functionality space does not exist (test/operately_web/api/queries/get_space_test.exs:70) PASSED Test: get_space functionality include_members (test/operately_web/api/queries/get_space_test.exs:132) PASSED Test: permissions members has access to space they are part of (test/operately_web/api/queries/get_space_test.exs:42) PASSED Test: permissions member has access to company space (test/operately_web/api/queries/get_space_test.exs:26) PASSED Test: get_space functionality include_unread_notifications (test/operately_web/api/queries/get_space_test.exs:115) 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 get_space when not a member (test/operately_web/api/queries/get_space_test.exs:93) PASSED Test: get_space functionality include_access_levels (test/operately_web/api/queries/get_space_test.exs:154) PASSED Operately.Data.Change024RemovePrivateProjectsBindingsTest Test: removes private projects bindings (test/operately/data/change_024_remove_private_projects_bindings_test.exs:20) PASSED OperatelyWeb.Api.Mutations.CreateTaskTest Test: security it requires authentication (test/operately_web/api/mutations/create_task_test.exs:13) PASSED Test: permissions company owners can create task (test/operately_web/api/mutations/create_task_test.exs:50) PASSED Test: permissions champions can create task (test/operately_web/api/mutations/create_task_test.exs:127) PASSED Test: create_task functionality creates task without assignee (test/operately_web/api/mutations/create_task_test.exs:173) PASSED Test: create_task functionality creates task (test/operately_web/api/mutations/create_task_test.exs:163) PASSED Test: permissions space members without edit access can't create task (test/operately_web/api/mutations/create_task_test.exs:73) 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: permissions contributors without edit access can't create task (test/operately_web/api/mutations/create_task_test.exs:104) PASSED Test: permissions company members with edit access can create task (test/operately_web/api/mutations/create_task_test.exs:43) PASSED Test: permissions reviewers can create task (test/operately_web/api/mutations/create_task_test.exs:143) 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 space managers can create task (test/operately_web/api/mutations/create_task_test.exs:90) 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 members with edit access can create task (test/operately_web/api/mutations/create_task_test.exs:82) PASSED Test: permissions contributors with edit access can create task (test/operately_web/api/mutations/create_task_test.exs:116) PASSED Operately.Activities.EncoderTest Test: removes all un-encodable things from the structure (test/operately/activities/encoder_test.exs:4) PASSED Test: properly encodes datetime structs (test/operately/activities/encoder_test.exs:40) PASSED OperatelyWeb.Api.Mutations.PublishResourceHubDocumentTest Test: security it requires authentication (test/operately_web/api/mutations/publish_resource_hub_document_test.exs:8) PASSED Test: publish_resource_hub_document functionality published draft document (test/operately_web/api/mutations/publish_resource_hub_document_test.exs:71) PASSED Test: publish_resource_hub_document functionality activity is created (test/operately_web/api/mutations/publish_resource_hub_document_test.exs:85) PASSED Test: permissions User has permissions (test/operately_web/api/mutations/publish_resource_hub_document_test.exs:47) PASSED Test: permissions User has no permissions (test/operately_web/api/mutations/publish_resource_hub_document_test.exs:25) PASSED Test: permissions User has view access (test/operately_web/api/mutations/publish_resource_hub_document_test.exs:36) PASSED OperatelyWeb.Api.Queries.GetAccountTest Test: it requires authentication (test/operately_web/api/queries/get_account_test.exs:4) PASSED Test: when authenticated, it returns the current account's information (test/operately_web/api/queries/get_account_test.exs:8) PASSED OperatelyWeb.Api.Queries.GetCommentsTest Test: permissions - discussions company members have access (test/operately_web/api/queries/get_comments_test.exs:287) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_comments_test.exs:19) PASSED Test: permissions - project check-in space members have access (test/operately_web/api/queries/get_comments_test.exs:73) PASSED Test: permissions - discussions space members have access (test/operately_web/api/queries/get_comments_test.exs:301) PASSED Test: permissions - goal update champions have access (test/operately_web/api/queries/get_comments_test.exs:201) PASSED Test: permissions - discussions company members have no access (test/operately_web/api/queries/get_comments_test.exs:273) PASSED Test: permissions - comment-thread reviewers have access (test/operately_web/api/queries/get_comments_test.exs:414)14:29:55.181 [error] Failed to send email 14:29:55.182 [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 14:29:55.187 [error] Failed to send email 14:29:55.188 [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 14:29:55.192 [error] Failed to send email 14:29:55.193 [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 space members have access (test/operately_web/api/queries/get_comments_test.exs:375) PASSED Test: permissions - discussions company space - company members have access (test/operately_web/api/queries/get_comments_test.exs:260) PASSED Test: permissions - project check-in reviewers have access (test/operately_web/api/queries/get_comments_test.exs:112) PASSED Test: permissions - project check-in champions have access (test/operately_web/api/queries/get_comments_test.exs:87) PASSED Test: permissions - goal update space members have no access (test/operately_web/api/queries/get_comments_test.exs:173) PASSED Test: permissions - comment-thread champions have access (test/operately_web/api/queries/get_comments_test.exs:389)14:29:55.397 [error] Failed to send email 14:29:55.398 [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 14:29:55.402 [error] Failed to send email 14:29:55.403 [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 14:29:55.407 [error] Failed to send email 14:29:55.407 [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 check-in space members have no access (test/operately_web/api/queries/get_comments_test.exs:59) PASSED Test: permissions - goal update reviewers have access (test/operately_web/api/queries/get_comments_test.exs:226) PASSED Test: permissions - comment-thread space members have no access (test/operately_web/api/queries/get_comments_test.exs:361) PASSED Test: permissions - project check-in company members have no access (test/operately_web/api/queries/get_comments_test.exs:33) PASSED Test: permissions - goal update company members have access (test/operately_web/api/queries/get_comments_test.exs:160) 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 company members have access (test/operately_web/api/queries/get_comments_test.exs:348) 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 access (test/operately_web/api/queries/get_comments_test.exs:187) PASSED Test: permissions - comment-thread company members have no access (test/operately_web/api/queries/get_comments_test.exs:335) PASSED Operately.AccessGroupMembershipsTest 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 delete_group_membership/1 deletes the group_membership (test/operately/access/group_memberships_test.exs:56) 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 update_group_membership/2 with valid data updates the group_membership (test/operately/access/group_memberships_test.exs:44) PASSED 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 create_group_membership/1 with invalid data returns error changeset (test/operately/access/group_memberships_test.exs:40) PASSED OperatelyWeb.Api.Mutations.DeleteResourceHubFileTest 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=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=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=comment_access and space=no_access, then expect code=403 (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=no_access and space=no_access, then expect code=404 (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 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: 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 OperatelyWeb.Api.Mutations.EditParentFolderInResourceHubTest Test: security it requires authentication (test/operately_web/api/mutations/edit_parent_folder_in_resource_hub_test.exs:14) 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=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=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: 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=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=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: functionality change document parent folder (test/operately_web/api/mutations/edit_parent_folder_in_resource_hub_test.exs:79) 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: 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 folder parent folder (test/operately_web/api/mutations/edit_parent_folder_in_resource_hub_test.exs:111) PASSED OperatelyWeb.Api.Queries.GetGoalsTest Test: security it requires authentication (test/operately_web/api/queries/get_goals_test.exs:13) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_goals_test.exs:89) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_goals_test.exs:122) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_goals_test.exs:105) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_goals_test.exs:65) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_goals_test.exs:28) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_goals_test.exs:48) PASSED Test: get_goals functionality include_last_check_in (test/operately_web/api/queries/get_goals_test.exs:143) PASSED OperatelyWeb.Api.Queries.GetCompanyTest Test: security it requires authentication (test/operately_web/api/queries/get_company_test.exs:5) PASSED Test: get_company functionality include_admins (test/operately_web/api/queries/get_company_test.exs:52) PASSED Test: get_company functionality include_owners (test/operately_web/api/queries/get_company_test.exs:60) PASSED Test: get_company functionality include_people (test/operately_web/api/queries/get_company_test.exs:44) PASSED Test: security suspended people don't have access (test/operately_web/api/queries/get_company_test.exs:11) PASSED Test: get_company functionality only company (test/operately_web/api/queries/get_company_test.exs:35) PASSED Operately.Projects.ContributorTest Test: getter get (test/operately/projects/contributor_test.exs:46) PASSED OperatelyWeb.Api.Mutations.JoinCompanyText 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 if fails if token is invalid (test/operately_web/api/mutations/join_company_test.exs:32) PASSED Test: join_company functionality change password successfully (test/operately_web/api/mutations/join_company_test.exs:43) PASSED Operately.Operations.GroupMemberRemovingTest Test: GroupMemberRemoving operation removes member from group (test/operately/operations/group_member_removing_test.exs:28) PASSED Test: GroupMemberRemoving operation deletes access memberships and bindings (test/operately/operations/group_member_removing_test.exs:36) PASSED Test: GroupMemberRemoving operation creates activity (test/operately/operations/group_member_removing_test.exs:50) PASSED Operately.UpdatesTest Test: reactions list_reactions/2 returns all reactions (test/operately/updates_test.exs:124) PASSED Test: updates list_updates/0 returns all updates (test/operately/updates_test.exs:27) PASSED Test: updates update_update/2 with invalid data returns error changeset (test/operately/updates_test.exs:47) PASSED Test: reactions get_reaction!/1 returns the reaction with given id (test/operately/updates_test.exs:129) PASSED Test: comments update_comment/2 with valid data updates the comment (test/operately/updates_test.exs:93) PASSED Test: comments change_comment/1 returns a comment changeset (test/operately/updates_test.exs:112) PASSED Test: reactions change_reaction/1 returns a reaction changeset (test/operately/updates_test.exs:173) PASSED Test: reactions update_reaction/2 with invalid data returns error changeset (test/operately/updates_test.exs:161) PASSED Test: comments delete_comment/1 deletes the comment (test/operately/updates_test.exs:107) PASSED Test: updates change_update/1 returns a update changeset (test/operately/updates_test.exs:56) PASSED Test: updates delete_update/1 deletes the update (test/operately/updates_test.exs:51) PASSED Test: comments create_comment/1 with valid data creates a comment (test/operately/updates_test.exs:78) PASSED Test: reactions delete_reaction/1 deletes the reaction (test/operately/updates_test.exs:167) PASSED Test: updates update_update/2 with valid data updates the update (test/operately/updates_test.exs:39) PASSED Test: comments update_comment/2 with invalid data returns error changeset (test/operately/updates_test.exs:102) PASSED Test: reactions update_reaction/2 with valid data updates the reaction (test/operately/updates_test.exs:147) PASSED Test: updates get_update!/1 returns the update with given id (test/operately/updates_test.exs:31) PASSED Test: comments get_comment!/1 returns the comment with given id (test/operately/updates_test.exs:74) PASSED Test: updates create_update/1 with invalid data returns error changeset (test/operately/updates_test.exs:35) PASSED Test: reactions create_reaction/1 with invalid data returns error changeset (test/operately/updates_test.exs:143) PASSED Test: comments list_comments/0 returns all comments (test/operately/updates_test.exs:70) PASSED Test: comments create_comment/1 with invalid data returns error changeset (test/operately/updates_test.exs:89) PASSED Test: reactions create_reaction/1 with valid data creates a reaction (test/operately/updates_test.exs:134) PASSED Operately.Operations.ResourceHubLinkEditingTest Test: Creating link sends notifications to everyone (test/operately/operations/resource_hub_link_editing_test.exs:20) PASSED Test: Creating link sends notifications to selected people (test/operately/operations/resource_hub_link_editing_test.exs:40) PASSED Test: Person without permissions is not notified (test/operately/operations/resource_hub_link_editing_test.exs:60) PASSED Operately.Operations.ProjectClosedTest Test: Closing project notifies only reviewer (test/operately/operations/project_closed_test.exs:29) PASSED Test: Closing project notifies mentioned person (test/operately/operations/project_closed_test.exs:125) PASSED Test: Doesn't notify person without view access (test/operately/operations/project_closed_test.exs:164) PASSED Test: Closing project does not notify creator (test/operately/operations/project_closed_test.exs:108) PASSED Test: Closing project notifies contributors (test/operately/operations/project_closed_test.exs:52) 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.EditGoalDiscussionTest Test: security it requires authentication (test/operately_web/api/mutations/edit_goal_discussion_test.exs:12) PASSED Test: permissions company owner can edit a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:51) PASSED Test: edit_goal_discussion functionality edits a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:142) PASSED 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 space members without view access can't see a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:65) PASSED Test: permissions champions can edit a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:106) 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 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 managers can edit a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:92) 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 members with edit access can edit a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:83) PASSED Test: permissions reviewers can edit a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:122) PASSED OperatelyWeb.Api.SerializerTest Test: date and time serialization it serializes naive date time as UTC (test/operately_web/api/serializer_test.exs:6) PASSED Test: date and time serialization it serializes DateTime with the timezone (test/operately_web/api/serializer_test.exs:12) PASSED Operately.Data.Change012CreateGoalsAccessContextTest Test: creates access_context for existing goals (test/operately/data/change_012_create_goals_access_context_test.exs:25) PASSED 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 soft-deleted goals (test/operately/data/change_012_create_goals_access_context_test.exs:52) PASSED Operately.Data.Change049PopulateCommentEntityIdWithMilestoneIdTest Test: Populates comment entity_id with milestone id (test/operately/data/change_049_populate_comment_entity_id_with_milestone_id_test.exs:15) PASSED Test: Doesn't affect other comments (test/operately/data/change_049_populate_comment_entity_id_with_milestone_id_test.exs:37) PASSED Operately.PeopleTest Test: register_account/1 validates email and password when given (test/operately/people_test.exs:174) PASSED Test: update_account_password/3 validates maximum values for password for security (test/operately/people_test.exs:326) PASSED Test: people get_person!/1 returns the person with given id (test/operately/people_test.exs:22) PASSED Test: people update_person/2 with invalid data returns error changeset (test/operately/people_test.exs:96) PASSED Test: register_account/1 validates maximum values for email and password for security (test/operately/people_test.exs:183) 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: inspect/2 for the Account module does not include password (test/operately/people_test.exs:441) PASSED Test: apply_account_email/3 validates email uniqueness (test/operately/people_test.exs:266) 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: apply_account_email/3 requires email to change (test/operately/people_test.exs:245) PASSED Test: apply_account_email/3 validates maximum value for email for security (test/operately/people_test.exs:257) PASSED Test: change_account_registration/2 allows fields to be set (test/operately/people_test.exs:216) PASSED Test: change_account_password/2 allows fields to be set (test/operately/people_test.exs:296) PASSED Test: delete_account_session_token/1 deletes the token (test/operately/people_test.exs:408) PASSED Test: get_account_by_session_token/1 does not return account for expired token (test/operately/people_test.exs:401) PASSED Test: get_account!/1 returns the account with the given id (test/operately/people_test.exs:158) PASSED Test: people change_person/1 returns a person changeset (test/operately/people_test.exs:114) PASSED Test: people update_person/3 with valid avatar_blob_id updates the person (test/operately/people_test.exs:101) PASSED Test: generate_account_session_token/1 generates a token (test/operately/people_test.exs:369) PASSED Test: update_account_password/3 validates current password (test/operately/people_test.exs:335) 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: update_account_password/3 validates password (test/operately/people_test.exs:313) PASSED Test: get_account_by_session_token/1 does not return account for invalid token (test/operately/people_test.exs:397) PASSED Test: change_account_email/2 returns a account changeset (test/operately/people_test.exs:234) PASSED Test: people update_person/2 with valid data updates the person (test/operately/people_test.exs:85) PASSED Test: get_account!/1 raises if id is invalid (test/operately/people_test.exs:152) PASSED Test: apply_account_email/3 validates current password (test/operately/people_test.exs:275) PASSED Test: change_account_registration/2 returns a changeset (test/operately/people_test.exs:211) PASSED Test: update_account_password/3 deletes all tokens for the given account (test/operately/people_test.exs:352) PASSED Test: get_account_by_session_token/1 returns account by token (test/operately/people_test.exs:392) PASSED Test: people create_person/1 with valid data creates a person (test/operately/people_test.exs:68) PASSED Test: apply_account_email/3 applies the email without persisting it (test/operately/people_test.exs:282) PASSED Test: update_account_password/3 updates the password (test/operately/people_test.exs:342) PASSED Test: reset_account_password/2 validates maximum values for password for security (test/operately/people_test.exs:421) PASSED Test: get_account_by_email/1 returns the account if the email exists (test/operately/people_test.exs:127) PASSED Test: people create_person/1 with invalid data returns error changeset (test/operately/people_test.exs:81) PASSED Test: register_account/1 registers accounts with a hashed password (test/operately/people_test.exs:200) PASSED Test: reset_account_password/2 deletes all tokens for the given account (test/operately/people_test.exs:433) PASSED Test: reset_account_password/2 updates the password (test/operately/people_test.exs:427) 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: 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 password is not valid (test/operately/people_test.exs:138) PASSED Test: register_account/1 validates email uniqueness (test/operately/people_test.exs:190) PASSED TurboConnect.QueryTest Test: defining a query with inputs and outputs (test/turbo_connect/query_test.exs:24) PASSED OperatelyWeb.Api.Mutations.CreateResourceHubLinkTest 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=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=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=comment_access and space=no_access, then expect code=403 (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=no_access and space=no_access, then expect code=404 (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 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: 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 OperatelyWeb.Api.Mutations.EditProjectCheckInTest 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=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: 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=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=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: 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=edit_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 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=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: 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 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=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=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 OperatelyWeb.Api.Mutations.JoinSpaceTest Test: security it requires authentication (test/operately_web/api/mutations/join_space_test.exs:11) PASSED Test: permissions company owners can join space (test/operately_web/api/mutations/join_space_test.exs:46) PASSED Test: join_space functionality person joins space (test/operately_web/api/mutations/join_space_test.exs:70) PASSED Test: permissions company members with full access can join space (test/operately_web/api/mutations/join_space_test.exs:39) PASSED 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 members with view access can join space (test/operately_web/api/mutations/join_space_test.exs:32) PASSED Operately.Operations.GoalDiscussionCreationTest Test: GoalDiscussionCreation operation creates activity, thread and notification (test/operately/operations/goal_discussion_creation_test.exs:25) 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 Operately.Data.Change047PopulatePublishedAtFieldInExistingPublishedDocumentsTest 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 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 Operately.WorkMaps.WorkMapTest 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 deep nesting handles deep nesting with multiple levels (test/operately/work_maps/work_map_test.exs:116) PASSED 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 orphaned items handles orphaned items (parent not in list) (test/operately/work_maps/work_map_test.exs:150) 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 single item returns single root item unchanged (test/operately/work_maps/work_map_test.exs:22) 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.ProjectSpaceMovingTest Test: ProjectSpaceMoving operation changes project's space (test/operately/operations/project_space_moving_test.exs:33) 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 creates binding to new space and deletes old binding (test/operately/operations/project_space_moving_test.exs:42) 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 OperatelyWeb.Api.Mutations.CreateGoalDiscussionTest Test: security it requires authentication (test/operately_web/api/mutations/create_goal_discussion_test.exs:13) PASSED Test: permissions company owners can create a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:48) 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 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 space members without view access can't see a goal (test/operately_web/api/mutations/create_goal_discussion_test.exs:61) PASSED Test: permissions champions can create a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:98) 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: 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 company members without view access can't see a goal (test/operately_web/api/mutations/create_goal_discussion_test.exs:27) PASSED Test: permissions space managers can create a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:85) 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 members with edit access can create a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:77) PASSED Test: permissions reviewers can create a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:113) PASSED OperatelyWeb.Api.Mutations.SubscribeToNotificationsTest Test: subscribe_to_notifications functionality updates canceled subscription (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:93) 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=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=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: 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=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 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=full_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=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=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=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: 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=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=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=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 OperatelyWeb.Api.Queries.GetMeTest Test: security it requires authentication (test/operately_web/api/queries/get_me_test.exs:7) 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: 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 includes manager information when requested (test/operately_web/api/queries/get_me_test.exs:35) PASSED Operately.CompaniesTest Test: companies list_companies/0 returns all companies (test/operately/companies_test.exs:17) PASSED Test: companies update_company/2 with valid data updates the company (test/operately/companies_test.exs:40) PASSED Test: companies change_company/1 returns a company changeset (test/operately/companies_test.exs:57) PASSED Test: companies update_company/2 with invalid data returns error changeset (test/operately/companies_test.exs:49) PASSED Test: companies create_company/1 with invalid data returns error changeset (test/operately/companies_test.exs:34) PASSED Test: companies get_company!/1 returns the company with given id (test/operately/companies_test.exs:22) PASSED Test: companies create_company/1 with valid data creates a company (test/operately/companies_test.exs:27) PASSED OperatelyWeb.Api.Mutations.RemoveCompanyAdminTest Test: security it requires authentication (test/operately_web/api/mutations/remove_company_admin_test.exs:11) 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: permissions company members without full access can't add admins (test/operately_web/api/mutations/remove_company_admin_test.exs:26) 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.GetTasksTest Test: security it requires authentication (test/operately_web/api/queries/get_tasks_test.exs:15) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_tasks_test.exs:51) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_tasks_test.exs:75) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_tasks_test.exs:59) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_tasks_test.exs:43) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_tasks_test.exs:29) PASSED Test: get_tasks functionality include_assignees (test/operately_web/api/queries/get_tasks_test.exs:108) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_tasks_test.exs:36) PASSED Test: get_tasks functionality get tasks with nothing included (test/operately_web/api/queries/get_tasks_test.exs:101) PASSED OperatelyWeb.Api.Mutations.CreateProjectTest Test: security it requires authentication (test/operately_web/api/mutations/create_project_test.exs:11) PASSED Test: company permissions company admins can create project (test/operately_web/api/mutations/create_project_test.exs:44) PASSED Test: space permissions space member without edit access can't create project (test/operately_web/api/mutations/create_project_test.exs:70) 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: create_project functionality creates project within space (test/operately_web/api/mutations/create_project_test.exs:107) PASSED Test: company permissions company members with edit access can create project (test/operately_web/api/mutations/create_project_test.exs:37) 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 company admins can create project (test/operately_web/api/mutations/create_project_test.exs:84) 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 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 company (test/operately_web/api/mutations/create_project_test.exs:112) PASSED OperatelyWeb.Api.Mutations.MarkNotificationAsReadTest Test: security it requires authentication (test/operately_web/api/mutations/mark_notification_as_read_test.exs:9) PASSED 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: 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.PubSub.PostgresPubSubTest 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.8313.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)  |  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.8316.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)  |  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.RemoveGroupMemberTest 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=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=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=40 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=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=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=0 and space=40 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=100 and space=0 on the space, then expect code=200 (test/operately_web/api/mutations/remove_group_member_test.exs:36) PASSED Operately.Assignments.FilterLateAssignmentsTest Test: business_days_between/2 same date returns 0 (test/operately/assignments/filter_late_assignments_test.exs:7) 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 month boundary - Dec -> Jan (test/operately/assignments/filter_late_assignments_test.exs:32) 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 2 full weeks (test/operately/assignments/filter_late_assignments_test.exs:20) 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 spanning weekend - Fri -> Mon (test/operately/assignments/filter_late_assignments_test.exs:16) PASSED Test: business_days_between/2 longer month boundary - Dec -> Jan (test/operately/assignments/filter_late_assignments_test.exs:36) PASSED Operately.AccessActivityContextAssignerTest 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 project activities project_check_in_commented action (test/operately/access/activity_context_assigner_test.exs:407) 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 space activities space_joining action (test/operately/access/activity_context_assigner_test.exs:86) 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 space activities task_name_editing action (test/operately/access/activity_context_assigner_test.exs:163) 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 goal activities goal_editing action (test/operately/access/activity_context_assigner_test.exs:324) 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 project activities project_timeline_edited action (test/operately/access/activity_context_assigner_test.exs:558) 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 goal activities goal_created action (test/operately/access/activity_context_assigner_test.exs:286) 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 task activities task_adding action (test/operately/access/activity_context_assigner_test.exs:578) 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 project activities project_archived action (test/operately/access/activity_context_assigner_test.exs:385) 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 project activities project_goal_disconnection action (test/operately/access/activity_context_assigner_test.exs:492) 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 space activities discussion_posting action (test/operately/access/activity_context_assigner_test.exs:108)14:30:01.392 [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 space activities goal_archived action (test/operately/access/activity_context_assigner_test.exs:97) 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 project activities project_check_in_edit action (test/operately/access/activity_context_assigner_test.exs:418) 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_check_in_acknowledged action (test/operately/access/activity_context_assigner_test.exs:396) 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_goal_connection action (test/operately/access/activity_context_assigner_test.exs:481) 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 comment_added activity entity_type is :update (test/operately/access/activity_context_assigner_test.exs:653) 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 space activities task_priority_change action (test/operately/access/activity_context_assigner_test.exs:174) 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 task activities task_status_change action (test/operately/access/activity_context_assigner_test.exs:600) PASSED Test: assigns access_context to goal activities goal_check_in_commented action (test/operately/access/activity_context_assigner_test.exs:253)14:30:01.725 [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 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_discussion_submitted action (test/operately/access/activity_context_assigner_test.exs:470) 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 goal activities goal_timeframe_editing action (test/operately/access/activity_context_assigner_test.exs:350) 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 project activities project_moved action (test/operately/access/activity_context_assigner_test.exs:514) PASSED Test: assigns access_context to space activities discussion_comment_submitted action (test/operately/access/activity_context_assigner_test.exs:130)14:30:01.881 [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 company activities company_invitation_token_created action (test/operately/access/activity_context_assigner_test.exs:62) 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 goal activities goal_check_in_acknowledgement action (test/operately/access/activity_context_assigner_test.exs:242) 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 comment_added activity entity_type is :project_check_in (test/operately/access/activity_context_assigner_test.exs:640) 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_pausing action (test/operately/access/activity_context_assigner_test.exs:525) 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 goal activities goal_discussion_creation action (test/operately/access/activity_context_assigner_test.exs:300) 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 goal activities goal_check_in action (test/operately/access/activity_context_assigner_test.exs:231)14:30:02.134 [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 Operately.Data.Change011CreateCompaniesAccessContextTest Test: creates access_context for existing companies (test/operately/data/change_011_create_companies_access_context_test.exs:11) PASSED 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 OperatelyWeb.Api.Queries.GetResourceHubLinkTest Test: get_resource_hub_link functionality include_permissions (test/operately_web/api/queries/get_resource_hub_link_test.exs:140) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_resource_hub_link_test.exs:10) 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: get_resource_hub_link functionality include_subscriptions_list (test/operately_web/api/queries/get_resource_hub_link_test.exs:151) PASSED Test: get_resource_hub_link functionality include_author (test/operately_web/api/queries/get_resource_hub_link_test.exs:76) 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_parent_folder (test/operately_web/api/queries/get_resource_hub_link_test.exs:102) PASSED 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=full_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=comment_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_resource_hub (test/operately_web/api/queries/get_resource_hub_link_test.exs:89) 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: 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: 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=comment_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 get link (test/operately_web/api/queries/get_resource_hub_link_test.exs:70) PASSED Test: get_resource_hub_link functionality include_potential_subscribers (test/operately_web/api/queries/get_resource_hub_link_test.exs:162) PASSED Operately.Operations.GroupMembersPermissionsEditingTest Test: GroupMembersPermissionsEditing operation edits members' permissions (test/operately/operations/group_members_permissions_editing_test.exs:27) PASSED Test: GroupMembersPermissionsEditing operation creates activity (test/operately/operations/group_members_permissions_editing_test.exs:54) PASSED OperatelyWeb.Api.Queries.SearchPeopleTest Test: security it requires authentication (test/operately_web/api/queries/search_people_test.exs:11) PASSED Test: search_people functionality searches people by title (test/operately_web/api/queries/search_people_test.exs:52) PASSED 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: search_people functionality returns up to 10 matches (test/operately_web/api/queries/search_people_test.exs:61) PASSED Test: search_people functionality searches people by name (test/operately_web/api/queries/search_people_test.exs:43) PASSED Test: security returns people only from the company (test/operately_web/api/queries/search_people_test.exs:15) PASSED Test: search_people functionality excludes suspended people (test/operately_web/api/queries/search_people_test.exs:85) PASSED Test: security suspended people don't have access (test/operately_web/api/queries/search_people_test.exs:26) PASSED Test: search_people functionality ignoring people by id (test/operately_web/api/queries/search_people_test.exs:77) PASSED OperatelyWeb.Api.Queries.SearchProjectContributorCandidatesTest Test: security it requires authentication (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:12) PASSED Test: permissions space members have no access (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:80) PASSED Test: permissions champions have access (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:102) PASSED Test: permissions space members have access (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:91) 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 company members have access (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:70) 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 suspended people don't have access (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:146) PASSED Test: permissions company members have no access (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:60) 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 doesn't return suspended people (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:191) PASSED OperatelyWeb.Api.Mutations.RemoveProjectContributorTest Test: security it requires authentication (test/operately_web/api/mutations/remove_project_contributor_test.exs:13) 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=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: 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=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 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=full_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=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=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=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=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=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=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=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=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 Operately.Operations.SpaceJoiningTest Test: SpaceJoining operation adds member to space (test/operately/operations/space_joining_test.exs:21) PASSED Test: SpaceJoining operation adds access group membership (test/operately/operations/space_joining_test.exs:29) PASSED Test: SpaceJoining operation adds access binding (test/operately/operations/space_joining_test.exs:39) PASSED OperatelyWeb.Api.Mutations.AddSpaceMembersTest Test: security it requires authentication (test/operately_web/api/mutations/add_space_members_test.exs:12) PASSED Test: permissions company admins can add members to space (test/operately_web/api/mutations/add_space_members_test.exs:60) PASSED Test: permissions space managers can add members to space (test/operately_web/api/mutations/add_space_members_test.exs:94) 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: 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 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 multiple members (test/operately_web/api/mutations/add_space_members_test.exs:136) 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 one member (test/operately_web/api/mutations/add_space_members_test.exs:124) PASSED OperatelyWeb.Api.Mutations.RemoveKeyResourceTest Test: security it requires authentication (test/operately_web/api/mutations/remove_key_resource_test.exs:11) 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: 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=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=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: 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=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=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=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 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=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=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 OperatelyWeb.Api.Queries.GetPersonTest Test: security it requires authentication (test/operately_web/api/queries/get_person_test.exs:10) PASSED Test: get_person functionality returns the person (test/operately_web/api/queries/get_person_test.exs:50) PASSED Test: get_person functionality includes_reports (test/operately_web/api/queries/get_person_test.exs:68) PASSED Test: get_person functionality include_manager (test/operately_web/api/queries/get_person_test.exs:56) PASSED Test: permissions suspended people don't have access (test/operately_web/api/queries/get_person_test.exs:39) PASSED Test: security it doesn't return people from other companies (test/operately_web/api/queries/get_person_test.exs:14) PASSED Test: permissions company member can query people from the same company (test/operately_web/api/queries/get_person_test.exs:34) PASSED Test: get_person functionality includes_peers (test/operately_web/api/queries/get_person_test.exs:79) PASSED Operately.NotificationsTest Test: notifications list_notifications/0 returns all notifications (test/operately/notifications_test.exs:21) PASSED Test: notifications get_notification!/1 returns the notification with given id (test/operately/notifications_test.exs:25) PASSED Operately.Operations.ProjectCheckInTest Test: Creating project check-in notifies only reviewer (test/operately/operations/project_check_in_test.exs:41) 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 all contributors (test/operately/operations/project_check_in_test.exs:64) 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.AccessBindingsTest Test: access_bindings list_bindings/0 returns all bindings (test/operately/access/bindings_test.exs:22) PASSED Test: access_bindings update_binding/2 with valid data updates the binding (test/operately/access/bindings_test.exs:58) PASSED Test: access_bindings delete_binding/1 deletes the binding (test/operately/access/bindings_test.exs:78) PASSED Test: access_bindings update_binding/2 with invalid data returns error changeset (test/operately/access/bindings_test.exs:69) PASSED Test: access_bindings create_binding/1 with invalid data returns error changeset (test/operately/access/bindings_test.exs:54) PASSED Test: access_bindings get_binding!/1 returns the binding with given id (test/operately/access/bindings_test.exs:34) PASSED Test: access_bindings create_binding/1 with valid data creates a binding (test/operately/access/bindings_test.exs:43) PASSED Test: access_bindings change_binding/1 returns a binding changeset (test/operately/access/bindings_test.exs:87) PASSED Operately.AccessGroupsTest Test: access_groups list_groups/0 returns all groups (test/operately/access/groups_test.exs:10) PASSED Test: access_groups delete_group/1 deletes the group (test/operately/access/groups_test.exs:33) PASSED Test: access_groups change_group/1 returns a group changeset (test/operately/access/groups_test.exs:39) PASSED Test: access_groups update_group/2 with valid data updates the group (test/operately/access/groups_test.exs:26) PASSED Test: access_groups get_group!/1 returns the group with given id (test/operately/access/groups_test.exs:15) PASSED Test: access_groups create_group/1 with valid data creates a group (test/operately/access/groups_test.exs:20) PASSED Operately.Operations.ResourceHubDocumentEditingTest Test: Editing document doens't send notifications to anyone (test/operately/operations/resource_hub_document_editing_test.exs:24) PASSED OperatelyWeb.Api.Mutations.UpdateTaskStatusTest Test: security it requires authentication (test/operately_web/api/mutations/update_task_status_test.exs:12) 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=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=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: 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=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=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=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 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=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=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 OperatelyWeb.Api.Queries.GetTaskTest Test: security it requires authentication (test/operately_web/api/queries/get_task_test.exs:15) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_task_test.exs:51) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_task_test.exs:75) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_task_test.exs:59) PASSED Test: get_task functionality include_milestone (test/operately_web/api/queries/get_task_test.exs:119) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_task_test.exs:43) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_task_test.exs:29) PASSED Test: get_task functionality include_assignees (test/operately_web/api/queries/get_task_test.exs:108) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_task_test.exs:36) 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_project (test/operately_web/api/queries/get_task_test.exs:131) PASSED Operately.GoalsTest Test: goals list_goals/0 returns all goals (test/operately/goals_test.exs:23) PASSED Test: goals update_goal/2 with valid data updates the goal (test/operately/goals_test.exs:62) PASSED Test: goal deletion when goal is deleted, its check-ins are also deleted (test/operately/goals_test.exs:129) 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 discussions' and check-ins' comments are also deleted (test/operately/goals_test.exs:152) PASSED Test: goals change_goal/1 returns a goal changeset (test/operately/goals_test.exs:77) PASSED Test: goals update_goal/2 with invalid data returns error changeset (test/operately/goals_test.exs:69) 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 create_goal/2 with invalid data returns error changeset (test/operately/goals_test.exs:51) PASSED Test: goal deletion when goal is deleted, its discussions are also deleted (test/operately/goals_test.exs:138) PASSED Test: goals get_goal!/1 returns the goal with given id (test/operately/goals_test.exs:27) PASSED Test: goal deletion given goal has child project, it cannot be deleted (test/operately/goals_test.exs:96) 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 goal, it cannot be deleted (test/operately/goals_test.exs:88) PASSED Test: goal deletion when goal is deleted, its targets are also deleted (test/operately/goals_test.exs:120) PASSED Operately.Data.Change022CreateGoalBindingsTest 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 spaces (test/operately/data/change_022_create_goal_bindings_test.exs:50) PASSED Test: creates access bindings between goals and champions and reviewers (test/operately/data/change_022_create_goal_bindings_test.exs:68) 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 Operately.GroupsTest Test: groups list_potential_members returns members that are not in the group (test/operately/groups_test.exs:23) PASSED Test: groups update_group/2 with valid data updates the group (test/operately/groups_test.exs:49) PASSED Test: groups change_group/1 returns a group changeset (test/operately/groups_test.exs:61) PASSED Test: groups update_group/2 with invalid data returns error changeset (test/operately/groups_test.exs:56) PASSED Test: groups create_group/1 with invalid data returns error changeset (test/operately/groups_test.exs:45) PASSED Test: groups get_group!/1 returns the group with given id (test/operately/groups_test.exs:34) PASSED Test: groups create_group/1 with valid data creates a group (test/operately/groups_test.exs:38) PASSED Operately.Operations.GroupPermissionsEditingTest Test: GroupPermissionsEditing operation edits permissions (test/operately/operations/group_permissions_editing_test.exs:23) PASSED 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 creates activity (test/operately/operations/group_permissions_editing_test.exs:52) PASSED Operately.ProjectsTest Test: project_milestones delete_milestone/1 deletes the milestone (test/operately/projects_test.exs:164) PASSED Test: project_key_resources list_key_resources/0 returns all project_key_resources (test/operately/projects_test.exs:300) PASSED Test: projects list_projects/0 returns all projects (test/operately/projects_test.exs:36) PASSED Test: projects update_project/2 with invalid data returns error changeset (test/operately/projects_test.exs:69) PASSED Test: project_milestones change_milestone/1 returns a milestone changeset (test/operately/projects_test.exs:169) PASSED Test: project_milestones create_milestone/1 with valid data creates a milestone (test/operately/projects_test.exs:135) PASSED Test: project_documents create_document/1 with valid data creates a document (test/operately/projects_test.exs:247) 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_contributors change_contributor/1 returns a contributor changeset (test/operately/projects_test.exs:218) PASSED Test: project_documents get_document!/1 returns the document with given id (test/operately/projects_test.exs:243) PASSED Test: project_contributors update_contributor/2 with valid data updates the contributor (test/operately/projects_test.exs:206) PASSED Test: project_documents delete_document/1 deletes the document (test/operately/projects_test.exs:277) PASSED Test: project_key_resources change_key_resource/1 returns a key_resource changeset (test/operately/projects_test.exs:341) PASSED Test: project_milestones update_milestone/2 with valid data updates the milestone (test/operately/projects_test.exs:151) PASSED Test: projects change_project/1 returns a project changeset (test/operately/projects_test.exs:79) PASSED Test: projects archive_project/1 archives the project (test/operately/projects_test.exs:74) PASSED Test: project_key_resources update_key_resource/2 with valid data updates the key_resource (test/operately/projects_test.exs:322) 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_milestones get_milestone!/1 returns the milestone with given id (test/operately/projects_test.exs:123) PASSED Test: project_documents change_document/1 returns a document changeset (test/operately/projects_test.exs:282) PASSED Test: project_key_resources delete_key_resource/1 deletes the key_resource (test/operately/projects_test.exs:336) PASSED Test: project_contributors delete_contributor/1 deletes the contributor (test/operately/projects_test.exs:213) PASSED Test: projects update_project/2 with valid data updates the project (test/operately/projects_test.exs:62) PASSED Test: project_milestones create_milestone/1 with invalid data returns error changeset (test/operately/projects_test.exs:147) PASSED Test: project_documents create_document/1 with invalid data returns error changeset (test/operately/projects_test.exs:260) PASSED Test: project_contributors create_contributor/2 with valid data creates a contributor (test/operately/projects_test.exs:194) PASSED Test: project_key_resources create_key_resource/1 with invalid data returns error changeset (test/operately/projects_test.exs:318) PASSED Test: project_key_resources update_key_resource/2 with invalid data returns error changeset (test/operately/projects_test.exs:331) PASSED Test: projects get_project!/1 returns the project with given id (test/operately/projects_test.exs:40) PASSED Test: project_documents update_document/2 with valid data updates the document (test/operately/projects_test.exs:264) PASSED Test: project_key_resources create_key_resource/1 with valid data creates a key_resource (test/operately/projects_test.exs:308) PASSED Test: project_milestones list_project_milestones/1 returns all project_milestones (test/operately/projects_test.exs:119) PASSED Test: projects create_project/2 with valid data creates a project (test/operately/projects_test.exs:44) PASSED Test: project_contributors get_contributor!/1 returns the contributor with given id (test/operately/projects_test.exs:190) PASSED Test: projects outdated?/1 returns true if the project is outdated (test/operately/projects_test.exs:83) PASSED Test: project_documents list_project_documents/0 returns all project_documents (test/operately/projects_test.exs:239) PASSED Test: project_milestones get_next_milestone/1 returns the first upcoming milestone (test/operately/projects_test.exs:127) PASSED Test: project_contributors list_project_contributors/0 returns all project_contributors (test/operately/projects_test.exs:186) PASSED OperatelyWeb.Api.Mutations.AssCompanyTrustedEmailDomainTest 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=full_access, then expect code=200 (test/operately_web/api/mutations/add_company_trusted_email_domain_test.exs:23) PASSED 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=edit_access, then expect code=403 (test/operately_web/api/mutations/add_company_trusted_email_domain_test.exs:23) PASSED Operately.Assignments.LoaderTest Test: late project check-in acknowledgement notifies managers more than 15 days late (test/operately/assignments/loader_test.exs:197) PASSED Test: projects returns all late projects (test/operately/assignments/loader_test.exs:25) PASSED Test: goals returns all late goals (test/operately/assignments/loader_test.exs:74) PASSED Test: late goal notifies managers more than 5 days late (test/operately/assignments/loader_test.exs:210) PASSED Test: late project notifies managers more than 10 days late (test/operately/assignments/loader_test.exs:153) PASSED Test: late project check-in acknowledgement notifies managers more than 10 days late (test/operately/assignments/loader_test.exs:187) PASSED Test: management hierarchy includes management hierarchy (test/operately/assignments/loader_test.exs:284) PASSED Test: late goal update acknowledgement notifies managers more than 10 days late (test/operately/assignments/loader_test.exs:255) PASSED Test: late project check-in acknowledgement notifies managers more than 5 days late (test/operately/assignments/loader_test.exs:176) PASSED Test: goal updates returns all late updates (test/operately/assignments/loader_test.exs:99) PASSED Test: goals doesn't return late goals to non-champions (test/operately/assignments/loader_test.exs:83) PASSED Test: late goal notifies reviewer only more than 3 days late (test/operately/assignments/loader_test.exs:129) PASSED Test: late goal update acknowledgement notifies managers more than 15 days late (test/operately/assignments/loader_test.exs:265) PASSED Test: project check-ins doesn't return late check-ins to non-reviewers (test/operately/assignments/loader_test.exs:59) PASSED Test: late project notifies managers more than 15 days late (test/operately/assignments/loader_test.exs:163) PASSED Test: late goal update acknowledgement notifies managers more than 5 days late (test/operately/assignments/loader_test.exs:244) PASSED Test: projects doesn't return late projects to non-champions (test/operately/assignments/loader_test.exs:34) PASSED Test: late project notifies reviewer only more than 3 days late (test/operately/assignments/loader_test.exs:116) PASSED Test: project check-ins returns all late check-ins (test/operately/assignments/loader_test.exs:50) PASSED Test: late goal notifies managers more than 15 days late (test/operately/assignments/loader_test.exs:231) PASSED Test: goal updates doesn't return late updates to non-reviewer (test/operately/assignments/loader_test.exs:108) PASSED Test: late project notifies managers more than 5 days late (test/operately/assignments/loader_test.exs:142) PASSED Test: late goal notifies managers more than 10 days late (test/operately/assignments/loader_test.exs:221) PASSED OperatelyWeb.Api.Mutations.RenameResourceHubFolderTest 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=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=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=comment_access and space=no_access, then expect code=403 (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=no_access and space=no_access, then expect code=404 (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 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: 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 OperatelyWeb.Api.Queries.GetAssignmentsTest Test: security it requires authentication (test/operately_web/api/queries/get_assignments_test.exs:14) 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 exclude soft-deleted project check-ins (test/operately_web/api/queries/get_assignments_test.exs:264) PASSED 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_project_check_ins (test/operately_web/api/queries/get_assignments_test.exs:112) 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 (test/operately_web/api/queries/get_assignments_test.exs:67) 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 get_due_projects (test/operately_web/api/queries/get_assignments_test.exs:22) PASSED Test: get_due_assignments returns goal update creator, not current champion (test/operately_web/api/queries/get_assignments_test.exs:210) 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 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 goals (test/operately_web/api/queries/get_assignments_test.exs:251) PASSED OperatelyWeb.Api.Queries.GetGoalProgressUpdatesTest Test: security it requires authentication (test/operately_web/api/queries/get_goal_progress_updates_test.exs:13) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_goal_progress_updates_test.exs:54) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_goal_progress_updates_test.exs:82) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_goal_progress_updates_test.exs:65) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_goal_progress_updates_test.exs:45) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_goal_progress_updates_test.exs:28) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_goal_progress_updates_test.exs:35) PASSED OperatelyWeb.Api.Queries.GetResourceHubFileTest Test: security it requires authentication (test/operately_web/api/queries/get_resource_hub_file_test.exs:11) 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: get_resource_hub_file functionality include_author (test/operately_web/api/queries/get_resource_hub_file_test.exs:78) PASSED Test: get_resource_hub_file functionality include_potential_subscribers (test/operately_web/api/queries/get_resource_hub_file_test.exs:106) PASSED 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=full_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=comment_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_subscriptions_list (test/operately_web/api/queries/get_resource_hub_file_test.exs:91) 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: 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: 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=comment_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 get file (test/operately_web/api/queries/get_resource_hub_file_test.exs:70) PASSED OperatelyWeb.Api.Queries.ListResourceHubContentTest Test: security it requires authentication (test/operately_web/api/queries/get_resource_hub_test.exs:10) 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: 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=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=full_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=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=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=edit_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=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=comment_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_test.exs:39) PASSED Test: get_resource_hub functionality include_nodes (test/operately_web/api/queries/get_resource_hub_test.exs:73) PASSED OperatelyWeb.Api.Mutations.RestoreCompanyMemberTest Test: security it requires authentication (test/operately_web/api/mutations/restore_company_member_test.exs:15) PASSED Test: permissions can't restore people from other companies (test/operately_web/api/mutations/restore_company_member_test.exs:36) PASSED Test: functionality it restores a suspended person (test/operately_web/api/mutations/restore_company_member_test.exs:46) PASSED Test: permissions company owners can restore people (test/operately_web/api/mutations/restore_company_member_test.exs:31) PASSED Test: permissions company members can't restore people (test/operately_web/api/mutations/restore_company_member_test.exs:21) PASSED Test: permissions company admins can restore people (test/operately_web/api/mutations/restore_company_member_test.exs:26) PASSED OperatelyWeb.Api.Mutations.RemoveCompanyOwnerTest Test: security it requires authentication (test/operately_web/api/mutations/remove_company_owner_test.exs:13) PASSED Test: security company owners can remove owners (test/operately_web/api/mutations/remove_company_owner_test.exs:31) PASSED Test: security regular members can't remove admins (test/operately_web/api/mutations/remove_company_owner_test.exs:17) PASSED Test: security admins can't remove owners (test/operately_web/api/mutations/remove_company_owner_test.exs:24) PASSED OperatelyWeb.Api.Mutations.UpdateMilestoneTest Test: security it requires authentication (test/operately_web/api/mutations/update_milestone_test.exs:11) 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=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=comment_access, project=no_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=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=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=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=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 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=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=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 OperatelyWeb.Api.Mutations.DisconnectGoalFromProjectTest Test: security it requires authentication (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:13) 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 champions can disconnect goal from project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:137) PASSED Test: disconnect_goal_from_project functionality disconnects goal (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:175) PASSED 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 space members without view access can't see a project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:68) 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 members with edit access can disconnect goal from project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:45) PASSED Test: permissions reviewers can disconnect goal from project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:154) 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 space managers can disconnect goal from project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:97) 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 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 with edit access can disconnect goal from project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:125) PASSED Operately.Blobs.EncryptionTest Test: works with openssl generated keys (test/operately/blobs/encryption_test.exs:6) PASSED Test: raises error if the secret key is not invalid (test/operately/blobs/encryption_test.exs:24) PASSED Test: raises error on invalid token (test/operately/blobs/encryption_test.exs:16) PASSED Test: raises error if the secret key is not provided (test/operately/blobs/encryption_test.exs:20) PASSED Operately.Operations.DiscussionPostingTest Test: Creating message sends notifications to everyone (test/operately/operations/discussion_posting_test.exs:19) PASSED Test: Creating message sends notifications to selected people (test/operately/operations/discussion_posting_test.exs:48) PASSED Test: Person without permissions is not notified (test/operately/operations/discussion_posting_test.exs:77) PASSED OperatelyWeb.Api.Mutations.CreateCommentTest 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 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 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: security it requires authentication (test/operately_web/api/mutations/create_comment_test.exs:20) 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 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=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 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 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 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 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 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 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=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 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 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 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 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 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: create_comment functionality updates subscriptions list (test/operately_web/api/mutations/create_comment_test.exs:280) 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=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 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: 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=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 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 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 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 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 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 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 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 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 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 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: 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: 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 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 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 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=edit_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:124) 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=no_access, space=view_access, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:146) 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 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 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 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, 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=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 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 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 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 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 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 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=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=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 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 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: 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=no_access on the comment thread, then expect code=404 (test/operately_web/api/mutations/create_comment_test.exs:190) 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 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 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 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 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 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, 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=comment_access, space=no_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:168) 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=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=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=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 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 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: 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 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 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 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=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 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 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=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=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 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 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 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.Mutations.EditResourceHubFileTest 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=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=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=comment_access and space=no_access, then expect code=403 (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=no_access and space=no_access, then expect code=404 (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 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: 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 OperatelyEmail.ProjectCreatedEmailTest Test: sends an email to the project contributors (test/operately_email/project_created_email_test.exs:38) PASSED Operately.Data.Change010CreateGroupsAccessContextTest Test: creates access_context for existing groups (test/operately/data/change_010_create_groups_access_context_test.exs:23) PASSED 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 soft-deleted groups (test/operately/data/change_010_create_groups_access_context_test.exs:51) PASSED OperatelyWeb.Api.Mutations.EditGoalTest Test: edit_goal functionality edits goal targets (test/operately_web/api/mutations/edit_goal_test.exs:179) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_goal_test.exs:13) PASSED Test: permissions company owners can edit a goal (test/operately_web/api/mutations/edit_goal_test.exs:48) PASSED Test: edit_goal functionality edits goal permissions (test/operately_web/api/mutations/edit_goal_test.exs:200) PASSED Test: edit_goal functionality edits a goal name (test/operately_web/api/mutations/edit_goal_test.exs:132) 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 champion and reviewer (test/operately_web/api/mutations/edit_goal_test.exs:154) PASSED 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 space members without view access can't see a goal (test/operately_web/api/mutations/edit_goal_test.exs:61) PASSED Test: permissions champions can edit a goal (test/operately_web/api/mutations/edit_goal_test.exs:98) PASSED Test: permissions company members with edit access can edit a goal (test/operately_web/api/mutations/edit_goal_test.exs:41) PASSED Test: edit_goal functionality edits a goal description (test/operately_web/api/mutations/edit_goal_test.exs:144) 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: permissions space managers can edit a goal (test/operately_web/api/mutations/edit_goal_test.exs:85) 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 members with edit access can edit a goal (test/operately_web/api/mutations/edit_goal_test.exs:77) PASSED Test: permissions reviewers can edit a goal (test/operately_web/api/mutations/edit_goal_test.exs:113) PASSED Test: edit_goal functionality edits goal parent (test/operately_web/api/mutations/edit_goal_test.exs:227) PASSED Operately.Operations.TaskStatusChangeTest Test: TaskStatusChange operation updates task and milestone (test/operately/operations/task_status_change_test.exs:27) PASSED Test: TaskStatusChange operation creates activity (test/operately/operations/task_status_change_test.exs:47) PASSED OperatelyWeb.Api.Queries.GetDiscussionTest Test: security it requires authentication (test/operately_web/api/queries/get_discussion_test.exs:14) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_discussion_test.exs:50) PASSED Test: get_discussion functionality include_space (test/operately_web/api/queries/get_discussion_test.exs:80) PASSED Test: get_discussion functionality include_unread_notifications (test/operately_web/api/queries/get_discussion_test.exs:63) PASSED Test: get_discussion functionality include_potential_subscribers (test/operately_web/api/queries/get_discussion_test.exs:124) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_discussion_test.exs:42) 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_reactions (test/operately_web/api/queries/get_discussion_test.exs:102) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_discussion_test.exs:34) PASSED Test: get_discussion functionality include_author (test/operately_web/api/queries/get_discussion_test.exs:92) PASSED TurboConnect.FieldsTest Test: defining fields (test/turbo_connect/fields_test.exs:17) PASSED OperatelyWeb.Api.Mutations.MarkAllNotificationsAsReadTest 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 all unread notification as read (test/operately_web/api/mutations/mark_all_notifications_as_read_test.exs:17) 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.Operations.ProjectRetrospectiveEditingTest Test: ProjectRetrospectiveEditing operation edits retrospective (test/operately/operations/project_retrospective_editing_test.exs:22) PASSED Test: ProjectRetrospectiveEditing operation doesn't update if there are no changes (test/operately/operations/project_retrospective_editing_test.exs:32) PASSED Test: ProjectRetrospectiveEditing operation creates activity (test/operately/operations/project_retrospective_editing_test.exs:48) PASSED OperatelyWeb.Api.Mutations.ResumeProjectTest Test: security it requires authentication (test/operately_web/api/mutations/resume_project_test.exs:11) 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=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=comment_access, project=no_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=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=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=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=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 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=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=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 OperatelyWeb.Api.Mutations.DeleteGoalTest 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=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=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=edit_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=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=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=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=edit_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=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=comment_access, space=no_access and goal=no_access, then expect code=403 (test/operately_web/api/mutations/delete_goal_test.exs:42) PASSED Operately.Operations.CompanyMemberAddingTest Test: CompanyMemberAdding operation creates person (test/operately/operations/company_member_adding_test.exs:32) 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 members's access group and membership (test/operately/operations/company_member_adding_test.exs:47) PASSED Test: CompanyMemberAdding operation creates invitation for person (test/operately/operations/company_member_adding_test.exs:60) PASSED OperatelyWeb.Api.Mutations.CreateResourceHubTest 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=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=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=comment_access and space=no_access, then expect code=403 (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=no_access and space=no_access, then expect code=404 (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 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: 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 OperatelyWeb.Api.Mutations.EditProjectPermissionsTest Test: security it requires authentication (test/operately_web/api/mutations/edit_project_permissions_test.exs:12) PASSED Test: permissions company owners can edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:47) PASSED Test: permissions champions can edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:119) PASSED Test: edit_project_permissions functionality edits project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:153) PASSED 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 space members without view access can't see a project (test/operately_web/api/mutations/edit_project_permissions_test.exs:60) 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 members with full access can edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:40) PASSED Test: permissions reviewers can edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:134) 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 space managers can edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:84) 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 members with full access can edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:76) PASSED Test: permissions contributors with full access can edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:108) 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.GetActivitiesTest Test: security it requires authentication (test/operately_web/api/queries/get_activities_test.exs:14) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_activities_test.exs:72) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_activities_test.exs:103) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_activities_test.exs:86) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_activities_test.exs:59) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_activities_test.exs:36) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_activities_test.exs:47) PASSED OperatelyWeb.Api.Mutations.PauseProjectTest Test: security it requires authentication (test/operately_web/api/mutations/pause_project_test.exs:11) 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=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=comment_access, project=no_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=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=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=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=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 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=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=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 Operately.Data.Change046UpdateFileCreatedActivityFormatTest Test: updates activities content (test/operately/data/change_046_update_file_created_activity_format_test.exs:16) PASSED OperatelyWeb.Api.Mutations.UpdateTaskTest Test: security it requires authentication (test/operately_web/api/mutations/update_task_test.exs:12) 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=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=comment_access, project=no_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=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=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=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=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 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=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=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 OperatelyWeb.TelemetryTest 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 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 database query times (test/operately_web/telemetry_test.exs:62) operately.repo.query.total_time:1|ms operately.repo.query.query_time:0|ms operately.repo.query.queue_time:1|ms PASSED OperatelyWeb.Api.Queries.SearchPotentialSpaceMembersTest Test: security it requires authentication (test/operately_web/api/queries/search_potential_space_members_test.exs:12) PASSED Test: permissions space member has no access (test/operately_web/api/queries/search_potential_space_members_test.exs:78) 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: search_potential_space_members functionality returns all petential members (test/operately_web/api/queries/search_potential_space_members_test.exs:123) PASSED Test: permissions suspended people don't have access (test/operately_web/api/queries/search_potential_space_members_test.exs:94) 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 company member has no access (test/operately_web/api/queries/search_potential_space_members_test.exs:68) 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 title (test/operately_web/api/queries/search_potential_space_members_test.exs:141) 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 name (test/operately_web/api/queries/search_potential_space_members_test.exs:131) 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 OperatelyWeb.Api.Mutations.AddCompanyAdminsTest Test: security it requires authentication (test/operately_web/api/mutations/add_company_admins_test.exs:10) PASSED Test: add_company_admins functionality adds one admin (test/operately_web/api/mutations/add_company_admins_test.exs:54) PASSED Test: add_company_admins functionality adds multiple members (test/operately_web/api/mutations/add_company_admins_test.exs:60) 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: permissions company members with full access can add new admins (test/operately_web/api/mutations/add_company_admins_test.exs:18) PASSED Test: permissions company members with edit access can add new admins (test/operately_web/api/mutations/add_company_admins_test.exs:27) PASSED OperatelyWeb.Api.Mutations.PostMilestoneCommentTest 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=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: security it requires authentication (test/operately_web/api/mutations/post_milestone_comment_test.exs:13) 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=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=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: 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: 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=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=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=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=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=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=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=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=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=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: 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=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=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=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=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=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=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: 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=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 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=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=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=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=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: 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=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=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=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: post_milestone_comment functionality post comment with action: none (test/operately_web/api/mutations/post_milestone_comment_test.exs:108) 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=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=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=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=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 Operately.RichContentTest Test: .find_mentioned_ids/1 returns mentioned IDs (test/operately/rich_content_test.exs:176) PASSED Test: .lookup_mentioned_people/1 returns mentioned people with valid IDs (test/operately/rich_content_test.exs:184) PASSED OperatelyWeb.Api.Mutations.AddProjectContributorsTest Test: security it requires authentication (test/operately_web/api/mutations/add_project_contributors_test.exs:13) 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 champions can add contributor to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:116) PASSED Test: add_project_contributors functionality adds multiple contributors to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:148) PASSED 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 space members without view access can't see a project (test/operately_web/api/mutations/add_project_contributors_test.exs:60) 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 members with full access can add contributor to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:41) PASSED Test: permissions reviewers can add contributor to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:130) 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 space managers can add contributor to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:83) 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 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 with full access can add contributor to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:106) 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.Goals.TimeframeTest Test: changeset/1 with valid data returns no errors (test/operately/goals/timeframe_test.exs:6) PASSED Test: changeset/1 validates quarter dates (test/operately/goals/timeframe_test.exs:34) PASSED Test: can be constructed from a Timeframe struct (test/operately/goals/timeframe_test.exs:65) PASSED Test: changeset/1 validates month dates (test/operately/goals/timeframe_test.exs:46) PASSED Test: changeset/1 validates year dates (test/operately/goals/timeframe_test.exs:28) PASSED Test: changeset/1 validates type (test/operately/goals/timeframe_test.exs:20) PASSED Test: changeset/1 validates start date is before end date (test/operately/goals/timeframe_test.exs:24) PASSED Test: convert_old_timeframe (test/operately/goals/timeframe_test.exs:75) PASSED OperatelyWeb.Api.Mutations.DeleteResourceHubFolderTest 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=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=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=comment_access and space=no_access, then expect code=403 (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=no_access and space=no_access, then expect code=404 (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 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: 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 Operately.Operations.ResourceHubLinkCreatingTest Test: Creating link sends notifications to everyone (test/operately/operations/resource_hub_link_creating_test.exs:21) PASSED Test: Creating link sends notifications to selected people (test/operately/operations/resource_hub_link_creating_test.exs:41) PASSED Test: Person without permissions is not notified (test/operately/operations/resource_hub_link_creating_test.exs:61) PASSED Operately.Goals.TargetTest Test: format_value/1 formats integer values with units (test/operately/goals/target_test.exs:7) PASSED Test: format_value/1 handles negative values (test/operately/goals/target_test.exs:27) 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 handles zero values (test/operately/goals/target_test.exs:22) PASSED Test: format_value/1 formats float values with two decimal places (test/operately/goals/target_test.exs:12) PASSED Test: format_value/1 formats percentage values correctly (test/operately/goals/target_test.exs:17) PASSED OperatelyWeb.Api.Mutations.CreateSpaceTest Test: security it requires authentication (test/operately_web/api/mutations/create_space_test.exs:8) 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: permissions company members can create spaces (test/operately_web/api/mutations/create_space_test.exs:16) PASSED Test: permissions company members with full access can create space (test/operately_web/api/mutations/create_space_test.exs:21) PASSED OperatelyWeb.Api.Mutations.AcknowledgeGoalProgressUpdateTest Test: security it requires authentication (test/operately_web/api/mutations/acknowledge_goal_progress_update_test.exs:13) PASSED Test: permissions space members can't acknowledge an update (test/operately_web/api/mutations/acknowledge_goal_progress_update_test.exs:49) PASSED Test: acknowledge_goal_progress_update functionality acknowledges goal update (test/operately_web/api/mutations/acknowledge_goal_progress_update_test.exs:73) PASSED Test: permissions reviewers can acknowledge an update (test/operately_web/api/mutations/acknowledge_goal_progress_update_test.exs:57) 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 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 company members can't acknowledge an update (test/operately_web/api/mutations/acknowledge_goal_progress_update_test.exs:34) PASSED OperatelyWeb.Api.Mutations.RemoveCompanyMemberTest Test: security it requires authentication (test/operately_web/api/mutations/remove_company_member_test.exs:7) 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: remove_company_member functionality admin can remove members (test/operately_web/api/mutations/remove_company_member_test.exs:45) 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: 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=comment_access, then expect code=403 (test/operately_web/api/mutations/remove_company_member_test.exs:23) PASSED Operately.Operations.GoalClosingTest Test: GoalClosing operation updates goal (test/operately/operations/goal_closing_test.exs:31) PASSED Test: GoalClosing operation creates activity, thread and notification (test/operately/operations/goal_closing_test.exs:45)14:30:17.995 [error] Failed to send email 14:30:18.000 [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 Operately.Operations.CompanyAdminAddingTest Test: CompanyAdminAdding operation promotes people to admin (test/operately/operations/company_admin_adding_test.exs:21) PASSED Test: CompanyAdminAdding operation creates activity (test/operately/operations/company_admin_adding_test.exs:29) PASSED Test: CompanyAdminAdding operation creates notification (test/operately/operations/company_admin_adding_test.exs:43) PASSED Operately.Operations.TaskAddingTest Test: TaskAdding operation creates task (test/operately/operations/task_adding_test.exs:28) PASSED Test: TaskAdding operation creates activity (test/operately/operations/task_adding_test.exs:45) PASSED OperatelyWeb.Api.Mutations.PostDiscussionTest Test: security it requires authentication (test/operately_web/api/mutations/post_discussion_test.exs:14) PASSED Test: company permissions company owners can create discussion (test/operately_web/api/mutations/post_discussion_test.exs:46) PASSED Test: subscriptions to notifications creates subscription list for message (test/operately_web/api/mutations/post_discussion_test.exs:131) PASSED Test: subscriptions to notifications doesn't create repeated subscription (test/operately_web/api/mutations/post_discussion_test.exs:176) PASSED Test: space permissions space member without edit access can't create discussion (test/operately_web/api/mutations/post_discussion_test.exs:71) 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: post_discussion functionality creates discussion within space (test/operately_web/api/mutations/post_discussion_test.exs:105) PASSED Test: company permissions company members with edit access can create discussion (test/operately_web/api/mutations/post_discussion_test.exs:39) PASSED Test: subscriptions to notifications adds mentioned people to subscription list (test/operately_web/api/mutations/post_discussion_test.exs:155) PASSED Test: company permissions company member can see only their company (test/operately_web/api/mutations/post_discussion_test.exs:27) PASSED Test: space permissions company owner can create discussion (test/operately_web/api/mutations/post_discussion_test.exs:85) 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 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 company (test/operately_web/api/mutations/post_discussion_test.exs:112) 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.RemoveProjectMilestoneTest Test: security it requires authentication (test/operately_web/api/mutations/remove_project_milestone_test.exs:11) 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=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=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: 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=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=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=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 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=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=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 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.PostProjectCheckInTest 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: security it requires authentication (test/operately_web/api/mutations/post_project_check_in_test.exs:15) 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: 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=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: 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=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 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=full_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=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=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=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: 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: 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=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=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=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: subscriptions to notifications doesn't create repeated subscription (test/operately_web/api/mutations/post_project_check_in_test.exs:140) PASSED OperatelyWeb.Api.Queries.GetResourceHubFolderTest Test: security it requires authentication (test/operately_web/api/queries/get_resource_hub_folder_test.exs:10) 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: 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=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=full_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=comment_access, then expect code=200 (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=no_access and space=no_access, then expect code=404 (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 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=comment_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_folder_test.exs:39) PASSED Test: get_resource_hub_test functionality include_nodes (test/operately_web/api/queries/get_resource_hub_folder_test.exs:80) PASSED Operately.Data.Change009CreateProjectsAccessContextTest Test: creates access_context for existing projects (test/operately/data/change_009_create_projects_access_context_test.exs:25) PASSED 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 soft-deleted projects (test/operately/data/change_009_create_projects_access_context_test.exs:55) PASSED Operately.Data.Change023AddTagToReviewersAndChampionsBindingsTest 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 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 Operately.Operations.TaskDescriptionChangeTest Test: TaskDescriptionChange operation updates task (test/operately/operations/task_description_change_test.exs:29) PASSED Test: TaskDescriptionChange operation creates activity (test/operately/operations/task_description_change_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 Operately.Data.Change035AddSpaceToProjectActivitiesTest 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 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 OperatelyWeb.Api.Mutations.AddFirstCompanyTest Test: add_first_company functionality creates company and owner account (test/operately_web/api/mutations/add_first_company_test.exs:14) PASSED 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 OperatelyWeb.PageControllerTest Test: GET / (test/operately_web/controllers/page_controller_test.exs:6) 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 TurboConnect.TypesTest Test: definining objects and their fields (test/turbo_connect/types_test.exs:34) PASSED OperatelyWeb.Api.Mutations.AddCompanyMemberTest Test: security it requires authentication (test/operately_web/api/mutations/add_company_member_test.exs:13) 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 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: add_company_member functionality full_name can't be blank (test/operately_web/api/mutations/add_company_member_test.exs:50) PASSED Test: add_company_member functionality email already taken (test/operately_web/api/mutations/add_company_member_test.exs:36) 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 creates first-time-access token for new member (test/operately_web/api/mutations/add_company_member_test.exs:30) PASSED OperatelyWeb.Api.Mutations.CopyResourceHubFolderTest 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: functionality copies folder into another parent folder (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:128) 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=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=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=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: 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=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=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=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=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=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=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=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=full_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=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: functionality creates a copy of folder (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:112) 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=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: 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=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=edit_access, then expect code=200 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) 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=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=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: 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=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=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=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=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=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=view_access, then expect code=403 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED TurboConnect.MutationTest Test: defining a mutation with inputs and outputs (test/turbo_connect/mutation_test.exs:23) PASSED OperatelyWeb.Api.Mutations.ConnectGoalToProjectTest Test: security it requires authentication (test/operately_web/api/mutations/connect_goal_to_project_test.exs:13) 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 champions can connect goal to project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:137) PASSED Test: connect_goal_to_project functionality connect goal (test/operately_web/api/mutations/connect_goal_to_project_test.exs:175) PASSED 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 space members without view access can't see a project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:68) 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 members with edit access can connect goal to project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:45) PASSED Test: permissions reviewers can connect goal to project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:154) 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 space managers can connect goal to project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:97) 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 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 with edit access can connect goal to project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:125) PASSED OperatelyWeb.Api.Mutations.UnsubscribeFromNotificationsTest Test: security it requires authentication (test/operately_web/api/mutations/unsubscribe_from_notifications_test.exs:10) PASSED Test: unsubscribe_from_notifications functionality unsubscribes to notifications list (test/operately_web/api/mutations/unsubscribe_from_notifications_test.exs:26) PASSED OperatelyWeb.Api.Queries.GetResourceHubDocumentTest Test: security it requires authentication (test/operately_web/api/queries/get_resource_hub_document_test.exs:10) 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: get_resource_hub_document functionality include_author (test/operately_web/api/queries/get_resource_hub_document_test.exs:74) PASSED Test: get_resource_hub_document functionality include_parent_folder (test/operately_web/api/queries/get_resource_hub_document_test.exs:100) PASSED 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=full_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=comment_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_resource_hub (test/operately_web/api/queries/get_resource_hub_document_test.exs:87) 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: 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: 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=comment_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 get document (test/operately_web/api/queries/get_resource_hub_document_test.exs:68) PASSED Operately.Data.Change008ConvertGoalTimeframesToNewFormatTest Test: convert quarter timeframes to new format (test/operately/data/change_008_convert_goal_timeframes_to_new_format_test.exs:4) PASSED Test: convert annual timeframes to new format (test/operately/data/change_008_convert_goal_timeframes_to_new_format_test.exs:16) 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.WorkMaps.GetWorkMapQueryTest 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: 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: 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: permissions - query goals company member has access to 2 public goals (test/operately/work_maps/get_work_map_query_test.exs:486) 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: 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 nested projects space_member has access to public_project, project1, project2 (test/operately/work_maps/get_work_map_query_test.exs:436) PASSED 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 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: 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 space_id parameters returns only projects for space3 (test/operately/work_maps/get_work_map_query_test.exs:139) 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 champion has access to 6 public, internal and secret goals (test/operately/work_maps/get_work_map_query_test.exs:518) 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 root projects company_member has access to public_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 goals creator has access to 6 public, internal and secret goals (test/operately/work_maps/get_work_map_query_test.exs:518) 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 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 goals space member has access to 4 public and internal goals (test/operately/work_maps/get_work_map_query_test.exs:496) PASSED Operately.OwnershipsTest Test: ownerships list_ownerships/0 returns all ownerships (test/operately/ownerships_test.exs:9) PASSED Test: ownerships get_ownership!/1 returns the ownership with given id (test/operately/ownerships_test.exs:14) PASSED OperatelyWeb.Api.Queries.GetSpacesTest Test: security it requires authentication (test/operately_web/api/queries/get_spaces_test.exs:13) 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: get_spaces functionality get_spaces (test/operately_web/api/queries/get_spaces_test.exs:87) PASSED Test: permissions members have access to spaces they are part of (test/operately_web/api/queries/get_spaces_test.exs:53) PASSED 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 company space only (test/operately_web/api/queries/get_spaces_test.exs:40) PASSED Operately.TasksTest Test: tasks list_tasks with space_id returns tasks for that space (test/operately/tasks_test.exs:39) PASSED Test: tasks get_task!/1 returns the task with given id (test/operately/tasks_test.exs:43) PASSED Test: task_assignees list_task_assignees/0 returns all task_assignees (test/operately/tasks_test.exs:49) PASSED Operately.DemoTest 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: 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: 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: security it requires authentication (test/operately_web/api/mutations/new_invitation_token_test.exs:8) 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: new_invitation_token functionality no invitation associated with member (test/operately_web/api/mutations/new_invitation_token_test.exs:59) PASSED Test: new_invitation_token functionality new invitation token is issued (test/operately_web/api/mutations/new_invitation_token_test.exs:52) 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: 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=comment_access, then expect code=403 (test/operately_web/api/mutations/new_invitation_token_test.exs:24) 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 Operately.WorkMaps.WorkMapItemTest 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 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 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 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 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 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 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 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 on_track, its status should also be on_track (test/operately/work_maps/work_map_item_test.exs:85) 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 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 issue, its status should also be issue (test/operately/work_maps/work_map_item_test.exs:85) PASSED Operately.Operations.ProjectPermissionsEditingTest Test: ProjectPermissionsEditing operation edits bindings (test/operately/operations/project_permissions_editing_test.exs:30) PASSED Test: ProjectPermissionsEditing operation edits bindings to company space (test/operately/operations/project_permissions_editing_test.exs:50) PASSED Test: ProjectPermissionsEditing operation creates activity (test/operately/operations/project_permissions_editing_test.exs:66) PASSED OperatelyWeb.AccountOauthControllerTest Test: callback/2 creating a new account while attempting log in (test/operately_web/controllers/account_oauth_controller_test.exs:15) 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 handles empty redirect_to parameter (test/operately_web/controllers/account_oauth_controller_test.exs:124) PASSED Test: OAuth redirect stores redirect_to parameter during request phase (test/operately_web/controllers/account_oauth_controller_test.exs:95) PASSED 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: 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 OperatelyWeb.Api.Queries.GetProjectTest Test: get_project functionality include_champion (test/operately_web/api/queries/get_project_test.exs:193) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_project_test.exs:15) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_project_test.exs:54) PASSED Test: get_project functionality include_reviewer (test/operately_web/api/queries/get_project_test.exs:203) PASSED Test: get_project functionality include_space (test/operately_web/api/queries/get_project_test.exs:134) PASSED Test: get_project functionality include_goal (test/operately_web/api/queries/get_project_test.exs:177) PASSED Test: get_project functionality include_potential_subscribers (test/operately_web/api/queries/get_project_test.exs:283) PASSED Test: get_project functionality include_access_levels (test/operately_web/api/queries/get_project_test.exs:244) PASSED Test: get_project functionality include_contributors (test/operately_web/api/queries/get_project_test.exs:157) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_project_test.exs:70) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_project_test.exs:62) PASSED Test: get_project functionality returns 400 if id is not provided (test/operately_web/api/queries/get_project_test.exs:113) PASSED Test: get_project functionality include_contributors_access_levels (test/operately_web/api/queries/get_project_test.exs:263) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_project_test.exs:47) PASSED Test: get_project functionality include_retrospective (test/operately_web/api/queries/get_project_test.exs:145) PASSED Test: get_project functionality include_key_resources (test/operately_web/api/queries/get_project_test.exs:232) 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 get a project with nothing included (test/operately_web/api/queries/get_project_test.exs:106) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_project_test.exs:40) PASSED Test: get_project functionality include_permissions (test/operately_web/api/queries/get_project_test.exs:222) 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 include_unread_notifications (test/operately_web/api/queries/get_project_test.exs:117) PASSED Test: get_project functionality include_archived (test/operately_web/api/queries/get_project_test.exs:214) PASSED OperatelyWeb.Api.Queries.GetDiscussionsTest Test: security it requires authentication (test/operately_web/api/queries/get_discussions_test.exs:12) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_discussions_test.exs:55) PASSED Test: get_discussions functionality with no includes (test/operately_web/api/queries/get_discussions_test.exs:100) PASSED Test: get_discussions functionality discussions are sorted by published_at desc (test/operately_web/api/queries/get_discussions_test.exs:84) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_discussions_test.exs:45) 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_comments_count (test/operately_web/api/queries/get_discussions_test.exs:121) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_discussions_test.exs:35) PASSED Test: get_discussions functionality include_author (test/operately_web/api/queries/get_discussions_test.exs:111) PASSED Operately.Operations.ProjectContributorAdditionTest Test: ProjectContributorAddition operation creates contributor (test/operately/operations/project_contributor_addition_test.exs:23) PASSED Test: ProjectContributorAddition operation creates access binding (test/operately/operations/project_contributor_addition_test.exs:37) PASSED Test: ProjectContributorAddition operation creates activity and notification (test/operately/operations/project_contributor_addition_test.exs:54) PASSED Operately.Operations.GoalCheckInTest Test: creating goal update sets last update on the goal (test/operately/operations/goal_check_in_test.exs:20) PASSED Test: notifications person without permissions is not notified (test/operately/operations/goal_check_in_test.exs:96) PASSED Test: notifications Creating goal update notifies everyone (test/operately/operations/goal_check_in_test.exs:37) PASSED Test: notifications Creating goal update notifies selected people (test/operately/operations/goal_check_in_test.exs:68) PASSED OperatelyWeb.Api.Mutations.CloseGoalTest Test: security it requires authentication (test/operately_web/api/mutations/close_goal_test.exs:14) PASSED Test: permissions company owner can close a goal (test/operately_web/api/mutations/close_goal_test.exs:51) PASSED Test: close_goal functionality closes goal (test/operately_web/api/mutations/close_goal_test.exs:141) PASSED 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 space members without view access can't see a goal (test/operately_web/api/mutations/close_goal_test.exs:65) PASSED Test: permissions champions can close a goal (test/operately_web/api/mutations/close_goal_test.exs:105) 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 company members without view access can't see a goal (test/operately_web/api/mutations/close_goal_test.exs:28) PASSED Test: permissions space managers can close a goal (test/operately_web/api/mutations/close_goal_test.exs:91) 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 members with full access can close a goal (test/operately_web/api/mutations/close_goal_test.exs:83) PASSED Test: permissions reviewers can close a goal (test/operately_web/api/mutations/close_goal_test.exs:121) PASSED OperatelyWeb.Api.Queries.GetGoalTest Test: get_goals functionality include_projects (test/operately_web/api/queries/get_goal_test.exs:218) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_goal_test.exs:17) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_goal_test.exs:67) PASSED Test: get_goals functionality include_reviewer (test/operately_web/api/queries/get_goal_test.exs:245) PASSED Test: get_goals functionality include_champion (test/operately_web/api/queries/get_goal_test.exs:156) PASSED Test: get_goals functionality include_permissions (test/operately_web/api/queries/get_goal_test.exs:205) PASSED Test: get_goals functionality include_privacy (test/operately_web/api/queries/get_goal_test.exs:303) PASSED Test: get_goals functionality include_last_check_in (test/operately_web/api/queries/get_goal_test.exs:184) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_goal_test.exs:99) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_goal_test.exs:81) PASSED Test: get_goals functionality include_unread_notifications (test/operately_web/api/queries/get_goal_test.exs:131) PASSED Test: get_goals functionality include_potential_subscribers (test/operately_web/api/queries/get_goal_test.exs:336) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_goal_test.exs:53) PASSED Test: get_goals functionality include_closed_by (test/operately_web/api/queries/get_goal_test.exs:166) PASSED Test: get_goals functionality include_access_levels (test/operately_web/api/queries/get_goal_test.exs:282) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_goal_test.exs:31) PASSED Test: get_goals functionality when goal does not exist (test/operately_web/api/queries/get_goal_test.exs:125) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_goal_test.exs:42) PASSED Test: get_goals functionality include_targets (test/operately_web/api/queries/get_goal_test.exs:269) 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 with no includes (test/operately_web/api/queries/get_goal_test.exs:148) PASSED Test: get_goals functionality include_space (test/operately_web/api/queries/get_goal_test.exs:256) 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 OperatelyWeb.Api.Mutations.ReopenGoalTest 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=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=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=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: 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=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=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 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 OperatelyWeb.Api.Queries.GetUnreadNotificationCountTest Test: security it requires authentication (test/operately_web/api/queries/get_unread_notification_count_test.exs:8) PASSED 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 Prosemirror2HtmlTest Test: converts a a complex paragraph with various nodes and marks (test/prosemirror2html_test.exs:143) PASSED Test: multiple marks (test/prosemirror2html_test.exs:238) PASSED Test: blobs (test/prosemirror2html_test.exs:261) PASSED Test: bold mark (test/prosemirror2html_test.exs:218) PASSED Test: mulitple nodes (test/prosemirror2html_test.exs:169) PASSED Test: paragraph (test/prosemirror2html_test.exs:198) PASSED Operately.Access.BindedPeopleLoaderTest Test: load/1 returns all people bound to the context (test/operately/access/binded_people_loader_test.exs:19) 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.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.Mutations.AddProjectContributorTest Test: security it requires authentication (test/operately_web/api/mutations/add_project_contributor_test.exs:13) 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 champions can add contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:131) PASSED Test: add_project_contributor functionality adds contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:167) PASSED 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 space members without view access can't see a project (test/operately_web/api/mutations/add_project_contributor_test.exs:66) 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 members with full access can add contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:43) PASSED Test: permissions reviewers can add contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:147) 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 space managers can add contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:93) 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 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 with full access can add contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:119) PASSED Operately.People.EmailActivationCodeTest Test: creation it creates a 6 digit code (test/operately/people/email_activation_code_test.exs:5) PASSED OperatelyWeb.Api.Mutations.CreateResourceHubFolderTest 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=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=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=comment_access and space=no_access, then expect code=403 (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=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=no_access and space=no_access, then expect code=404 (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 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: 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 OperatelyWeb.Api.Mutations.EditSpaceMembersPermissionsTest Test: security it requires authentication (test/operately_web/api/mutations/edit_space_members_permissions_test.exs:11) PASSED Test: permissions company owner can edit members permissions (test/operately_web/api/mutations/edit_space_members_permissions_test.exs:59) PASSED 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 space members without full access can't edit members permissions (test/operately_web/api/mutations/edit_space_members_permissions_test.exs:81) 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 company members without view access can't see space (test/operately_web/api/mutations/edit_space_members_permissions_test.exs:24) 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 Test: edit_group functionality edits members access level (test/operately_web/api/mutations/edit_space_members_permissions_test.exs:110) PASSED OperatelyWeb.Api.Queries.GetBindedPeopleTest Test: no access to not logged in users (test/operately_web/api/queries/get_binded_people_test.exs:17) PASSED Test: loading binded people for a project (test/operately_web/api/queries/get_binded_people_test.exs:24) 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 Operately.Operations.ResourceHubCreatingTest Test: ResourceHubCreating operation creates resource hub (test/operately/operations/resource_hub_creating_test.exs:23) 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 context (test/operately/operations/resource_hub_creating_test.exs:34) PASSED Test: ResourceHubCreating operation creates bindings to company (test/operately/operations/resource_hub_creating_test.exs:40) PASSED OperatelyWeb.Api.Mutations.CloseProjectTest Test: subscriptions to notifications adds mentioned people to subscription list (test/operately_web/api/mutations/close_project_test.exs:220) PASSED Test: security it requires authentication (test/operately_web/api/mutations/close_project_test.exs:21) PASSED Test: permissions company owner can close a project (test/operately_web/api/mutations/close_project_test.exs:58) PASSED Test: subscriptions to notifications doesn't create repeated subscription (test/operately_web/api/mutations/close_project_test.exs:247) PASSED Test: permissions champions can close a project (test/operately_web/api/mutations/close_project_test.exs:135) PASSED Test: subscriptions to notifications creates subscription list for project retrospective (test/operately_web/api/mutations/close_project_test.exs:195) PASSED Test: close_project functionality closes project (test/operately_web/api/mutations/close_project_test.exs:171) PASSED 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 space members without view access can't see a project (test/operately_web/api/mutations/close_project_test.exs:72) 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 members with edit access can close a project (test/operately_web/api/mutations/close_project_test.exs:51) PASSED Test: permissions reviewers can close a project (test/operately_web/api/mutations/close_project_test.exs:151) 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: permissions space managers can close a project (test/operately_web/api/mutations/close_project_test.exs:98) 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 members with edit access can close a project (test/operately_web/api/mutations/close_project_test.exs:90) PASSED Test: permissions contributors with edit access can close a project (test/operately_web/api/mutations/close_project_test.exs:124) PASSED Operately.Operations.ResourceHubLinkDeletingTest Test: Deleting link sends notifications to everyone (test/operately/operations/resource_hub_link_deleting_test.exs:20) PASSED Test: Deleting link sends notifications to selected people (test/operately/operations/resource_hub_link_deleting_test.exs:40) PASSED Test: Person without permissions is not notified (test/operately/operations/resource_hub_link_deleting_test.exs:60) PASSED OperatelyWeb.Api.Mutations.AddKeyResourceTest Test: security it requires authentication (test/operately_web/api/mutations/add_key_resource_test.exs:13) PASSED Test: permissions company admins can add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:50) PASSED Test: permissions champions can add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:128) PASSED Test: add_key_resource functionality adds key resource (test/operately_web/api/mutations/add_key_resource_test.exs:164) PASSED 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 space members without view access can't see a project (test/operately_web/api/mutations/add_key_resource_test.exs:65) 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 members with edit access can add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:43) PASSED Test: permissions reviewers can add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:144) 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 space managers can add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:91) 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 members with edit access can add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:83) PASSED Test: permissions contributors with edit access can add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:117) PASSED Operately.ShortUuidTest Test: encode/1 encodes a UUID to a short UUID (test/operately/short_uuid_test.exs:4) PASSED Test: decode/1 returns an error for non-base62 characters (test/operately/short_uuid_test.exs:32) PASSED Test: encode! raises an error for invalid UUIDs (test/operately/short_uuid_test.exs:48) PASSED Test: encoding is performant (test/operately/short_uuid_test.exs:36) PASSED Test: decode/1 returns an error for impossibly long short uuids (test/operately/short_uuid_test.exs:28) PASSED Test: encode/1 returns invalid UUID for non-UUIDs (test/operately/short_uuid_test.exs:15) PASSED Test: decode/1 decodes a short UUID to a UUID (test/operately/short_uuid_test.exs:19) PASSED Test: decode! raises an error for invalid short UUIDs (test/operately/short_uuid_test.exs:54) PASSED Operately.Operations.ResourceHubDocumentDeletingTest Test: Deleting document sends notifications to everyone (test/operately/operations/resource_hub_document_deleting_test.exs:20) PASSED Test: Deleting document sends notifications to selected people (test/operately/operations/resource_hub_document_deleting_test.exs:42) PASSED Test: Person without permissions is not notified (test/operately/operations/resource_hub_document_deleting_test.exs:64) PASSED Finished in 91396ms 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 37ms 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 363ms 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: 5.063 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-2226989736/result-2830297660.json * Saving results to /tmp/test-results3543904960 * Pushing artifacts: $ /usr/local/bin/artifact push job /tmp/test-results3543904960 -d test-results/junit.json * starting to generate summary * Saving results to /tmp/test-results3354541778 * Pushing artifacts: $ /usr/local/bin/artifact push job /tmp/test-results3354541778 -d test-results/summary.json * Pushing artifacts: $ /usr/local/bin/artifact push workflow /tmp/test-results3543904960 -d test-results/85490b6e-560d-4207-912f-9d6a182edfbd/2ff38a22-fac6-46f6-bab7-1b7a5835ebe6.json * Pushing artifacts: $ /usr/local/bin/artifact push job app/testreports/junit.xml -d test-results/junit.xml artifact push workflow screenshots [Apr 29 14:30:44.266] Successfully pushed artifact for current workflow. [Apr 29 14:30:44.266] * Local source: screenshots. [Apr 29 14:30:44.267] * Remote destination: artifacts/workflows/a59aa193-2490-4857-8234-c2e78bde52d8/screenshots.