Exporting environment variables Exporting CI 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_BLOCK_NAME 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_PR_BRANCH Exporting SEMAPHORE_GIT_PR_NAME Exporting SEMAPHORE_GIT_PR_NUMBER Exporting SEMAPHORE_GIT_PR_SHA Exporting SEMAPHORE_GIT_PR_SLUG 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 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.26.0/linux.tar Tar file: linux.tar Attempt 5 toolbox/ toolbox/sem-service toolbox/when_otp_25 toolbox/libchecksum toolbox/install-toolbox toolbox/sem-install toolbox/install-package toolbox/when_otp_26 toolbox/test-results toolbox/system-metrics-collector toolbox/sem-version toolbox/README.md toolbox/artifact toolbox/sem-context toolbox/sem-dockerize toolbox/spc toolbox/cache toolbox/when_otp_24 toolbox/toolbox toolbox/enetwork toolbox/Dockerfile.dev toolbox/sem-service-check-params toolbox/retry toolbox/libcheckout toolbox/sem-semantic-release toolbox/ssh-session-cli 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 Erlang version: 25 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 2325 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 Cloning into 'operately'... Warning: Permanently added 'github.com,140.82.121.3' (ECDSA) to the list of known hosts. remote: Enumerating objects: 4423, done. remote: Counting objects: 0% (1/4423) remote: Counting objects: 1% (45/4423) remote: Counting objects: 2% (89/4423) remote: Counting objects: 3% (133/4423) remote: Counting objects: 4% (177/4423) remote: Counting objects: 5% (222/4423) remote: Counting objects: 6% (266/4423) remote: Counting objects: 7% (310/4423) remote: Counting objects: 8% (354/4423) remote: Counting objects: 9% (399/4423) remote: Counting objects: 10% (443/4423) remote: Counting objects: 11% (487/4423) remote: Counting objects: 12% (531/4423) remote: Counting objects: 13% (575/4423) remote: Counting objects: 14% (620/4423) remote: Counting objects: 15% (664/4423) remote: Counting objects: 16% (708/4423) remote: Counting objects: 17% (752/4423) remote: Counting objects: 18% (797/4423) remote: Counting objects: 19% (841/4423) remote: Counting objects: 20% (885/4423) remote: Counting objects: 21% (929/4423) remote: Counting objects: 22% (974/4423) remote: Counting objects: 23% (1018/4423) remote: Counting objects: 24% (1062/4423) remote: Counting objects: 25% (1106/4423) remote: Counting objects: 26% (1150/4423) remote: Counting objects: 27% (1195/4423) remote: Counting objects: 28% (1239/4423) remote: Counting objects: 29% (1283/4423) remote: Counting objects: 30% (1327/4423) remote: Counting objects: 31% (1372/4423) remote: Counting objects: 32% (1416/4423) remote: Counting objects: 33% (1460/4423) remote: Counting objects: 34% (1504/4423) remote: Counting objects: 35% (1549/4423) remote: Counting objects: 36% (1593/4423) remote: Counting objects: 37% (1637/4423) remote: Counting objects: 38% (1681/4423) remote: Counting objects: 39% (1725/4423) remote: Counting objects: 40% (1770/4423) remote: Counting objects: 41% (1814/4423) remote: Counting objects: 42% (1858/4423) remote: Counting objects: 43% (1902/4423) remote: Counting objects: 44% (1947/4423) remote: Counting objects: 45% (1991/4423) remote: Counting objects: 46% (2035/4423) remote: Counting objects: 47% (2079/4423) remote: Counting objects: 48% (2124/4423) remote: Counting objects: 49% (2168/4423) remote: Counting objects: 50% (2212/4423) remote: Counting objects: 51% (2256/4423) remote: Counting objects: 52% (2300/4423) remote: Counting objects: 53% (2345/4423) remote: Counting objects: 54% (2389/4423) remote: Counting objects: 55% (2433/4423) remote: Counting objects: 56% (2477/4423) remote: Counting objects: 57% (2522/4423) remote: Counting objects: 58% (2566/4423) remote: Counting objects: 59% (2610/4423) remote: Counting objects: 60% (2654/4423) remote: Counting objects: 61% (2699/4423) remote: Counting objects: 62% (2743/4423) remote: Counting objects: 63% (2787/4423) remote: Counting objects: 64% (2831/4423) remote: Counting objects: 65% (2875/4423) remote: Counting objects: 66% (2920/4423) remote: Counting objects: 67% (2964/4423) remote: Counting objects: 68% (3008/4423) remote: Counting objects: 69% (3052/4423) remote: Counting objects: 70% (3097/4423) remote: Counting objects: 71% (3141/4423) remote: Counting objects: 72% (3185/4423) remote: Counting objects: 73% (3229/4423) remote: Counting objects: 74% (3274/4423) remote: Counting objects: 75% (3318/4423) remote: Counting objects: 76% (3362/4423) remote: Counting objects: 77% (3406/4423) remote: Counting objects: 78% (3450/4423) remote: Counting objects: 79% (3495/4423) remote: Counting objects: 80% (3539/4423) remote: Counting objects: 81% (3583/4423) remote: Counting objects: 82% (3627/4423) remote: Counting objects: 83% (3672/4423) remote: Counting objects: 84% (3716/4423) remote: Counting objects: 85% (3760/4423) remote: Counting objects: 86% (3804/4423) remote: Counting objects: 87% (3849/4423) remote: Counting objects: 88% (3893/4423) remote: Counting objects: 89% (3937/4423) remote: Counting objects: 90% (3981/4423) remote: Counting objects: 91% (4025/4423) remote: Counting objects: 92% (4070/4423) remote: Counting objects: 93% (4114/4423) remote: Counting objects: 94% (4158/4423) remote: Counting objects: 95% (4202/4423) remote: Counting objects: 96% (4247/4423) remote: Counting objects: 97% (4291/4423) remote: Counting objects: 98% (4335/4423) remote: Counting objects: 99% (4379/4423) remote: Counting objects: 100% (4423/4423) remote: Counting objects: 100% (4423/4423), done. remote: Compressing objects: 0% (1/3129) remote: Compressing objects: 1% (32/3129) remote: Compressing objects: 2% (63/3129) remote: Compressing objects: 3% (94/3129) remote: Compressing objects: 4% (126/3129) remote: Compressing objects: 5% (157/3129) remote: Compressing objects: 6% (188/3129) remote: Compressing objects: 7% (220/3129) remote: Compressing objects: 8% (251/3129) remote: Compressing objects: 9% (282/3129) remote: Compressing objects: 10% (313/3129) remote: Compressing objects: 11% (345/3129) remote: Compressing objects: 12% (376/3129) remote: Compressing objects: 13% (407/3129) remote: Compressing objects: 14% (439/3129) remote: Compressing objects: 15% (470/3129) remote: Compressing objects: 16% (501/3129) remote: Compressing objects: 17% (532/3129) remote: Compressing objects: 18% (564/3129) remote: Compressing objects: 19% (595/3129) remote: Compressing objects: 20% (626/3129) remote: Compressing objects: 21% (658/3129) remote: Compressing objects: 22% (689/3129) remote: Compressing objects: 23% (720/3129) remote: Compressing objects: 24% (751/3129) remote: Compressing objects: 25% (783/3129) remote: Compressing objects: 26% (814/3129) remote: Compressing objects: 27% (845/3129) remote: Compressing objects: 28% (877/3129) remote: Compressing objects: 29% (908/3129) remote: Compressing objects: 30% (939/3129) remote: Compressing objects: 31% (970/3129) remote: Compressing objects: 32% (1002/3129) remote: Compressing objects: 33% (1033/3129) remote: Compressing objects: 34% (1064/3129) remote: Compressing objects: 35% (1096/3129) remote: Compressing objects: 36% (1127/3129) remote: Compressing objects: 37% (1158/3129) remote: Compressing objects: 38% (1190/3129) remote: Compressing objects: 39% (1221/3129) remote: Compressing objects: 40% (1252/3129) remote: Compressing objects: 41% (1283/3129) remote: Compressing objects: 42% (1315/3129) remote: Compressing objects: 43% (1346/3129) remote: Compressing objects: 44% (1377/3129) remote: Compressing objects: 45% (1409/3129) remote: Compressing objects: 46% (1440/3129) remote: Compressing objects: 47% (1471/3129) remote: Compressing objects: 48% (1502/3129) remote: Compressing objects: 49% (1534/3129) remote: Compressing objects: 50% (1565/3129) remote: Compressing objects: 51% (1596/3129) remote: Compressing objects: 52% (1628/3129) remote: Compressing objects: 53% (1659/3129) remote: Compressing objects: 54% (1690/3129) remote: Compressing objects: 55% (1721/3129) remote: Compressing objects: 56% (1753/3129) remote: Compressing objects: 57% (1784/3129) remote: Compressing objects: 58% (1815/3129) remote: Compressing objects: 59% (1847/3129) remote: Compressing objects: 60% (1878/3129) remote: Compressing objects: 61% (1909/3129) remote: Compressing objects: 62% (1940/3129) remote: Compressing objects: 63% (1972/3129) remote: Compressing objects: 64% (2003/3129) remote: Compressing objects: 65% (2034/3129) remote: Compressing objects: 66% (2066/3129) remote: Compressing objects: 67% (2097/3129) remote: Compressing objects: 68% (2128/3129) remote: Compressing objects: 69% (2160/3129) remote: Compressing objects: 70% (2191/3129) remote: Compressing objects: 71% (2222/3129) remote: Compressing objects: 72% (2253/3129) remote: Compressing objects: 73% (2285/3129) remote: Compressing objects: 74% (2316/3129) remote: Compressing objects: 75% (2347/3129) remote: Compressing objects: 76% (2379/3129) remote: Compressing objects: 77% (2410/3129) remote: Compressing objects: 78% (2441/3129) remote: Compressing objects: 79% (2472/3129) remote: Compressing objects: 80% (2504/3129) remote: Compressing objects: 81% (2535/3129) remote: Compressing objects: 82% (2566/3129) remote: Compressing objects: 83% (2598/3129) remote: Compressing objects: 84% (2629/3129) remote: Compressing objects: 85% (2660/3129) remote: Compressing objects: 86% (2691/3129) remote: Compressing objects: 87% (2723/3129) remote: Compressing objects: 88% (2754/3129) remote: Compressing objects: 89% (2785/3129) remote: Compressing objects: 90% (2817/3129) remote: Compressing objects: 91% (2848/3129) remote: Compressing objects: 92% (2879/3129) remote: Compressing objects: 93% (2910/3129) remote: Compressing objects: 94% (2942/3129) remote: Compressing objects: 95% (2973/3129) remote: Compressing objects: 96% (3004/3129) remote: Compressing objects: 97% (3036/3129) remote: Compressing objects: 98% (3067/3129) remote: Compressing objects: 99% (3098/3129) remote: Compressing objects: 100% (3129/3129) remote: Compressing objects: 100% (3129/3129), done. Receiving objects: 0% (1/4423) Receiving objects: 1% (45/4423) Receiving objects: 2% (89/4423) Receiving objects: 3% (133/4423) Receiving objects: 4% (177/4423) Receiving objects: 5% (222/4423) Receiving objects: 6% (266/4423) Receiving objects: 7% (310/4423) Receiving objects: 8% (354/4423) Receiving objects: 9% (399/4423) Receiving objects: 10% (443/4423) Receiving objects: 11% (487/4423) Receiving objects: 12% (531/4423) Receiving objects: 13% (575/4423) Receiving objects: 14% (620/4423) Receiving objects: 15% (664/4423) Receiving objects: 16% (708/4423) Receiving objects: 17% (752/4423) Receiving objects: 18% (797/4423) Receiving objects: 19% (841/4423) Receiving objects: 20% (885/4423) Receiving objects: 21% (929/4423) Receiving objects: 22% (974/4423) Receiving objects: 23% (1018/4423) Receiving objects: 24% (1062/4423) Receiving objects: 25% (1106/4423) Receiving objects: 26% (1150/4423) Receiving objects: 27% (1195/4423) Receiving objects: 28% (1239/4423) Receiving objects: 29% (1283/4423) Receiving objects: 30% (1327/4423) Receiving objects: 31% (1372/4423) Receiving objects: 32% (1416/4423) Receiving objects: 33% (1460/4423) Receiving objects: 34% (1504/4423) Receiving objects: 35% (1549/4423) Receiving objects: 36% (1593/4423) Receiving objects: 37% (1637/4423) Receiving objects: 38% (1681/4423) Receiving objects: 39% (1725/4423) Receiving objects: 40% (1770/4423) Receiving objects: 41% (1814/4423) Receiving objects: 42% (1858/4423) Receiving objects: 43% (1902/4423) Receiving objects: 44% (1947/4423) Receiving objects: 45% (1991/4423) Receiving objects: 46% (2035/4423) Receiving objects: 47% (2079/4423) Receiving objects: 48% (2124/4423) Receiving objects: 49% (2168/4423) Receiving objects: 50% (2212/4423) Receiving objects: 51% (2256/4423) Receiving objects: 52% (2300/4423) Receiving objects: 53% (2345/4423) Receiving objects: 54% (2389/4423) Receiving objects: 55% (2433/4423), 2.56 MiB | 4.88 MiB/s Receiving objects: 55% (2433/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 56% (2477/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 57% (2522/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 58% (2566/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 59% (2610/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 60% (2654/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 61% (2699/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 62% (2743/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 63% (2787/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 64% (2831/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 65% (2875/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 66% (2920/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 67% (2964/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 68% (3008/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 69% (3052/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 70% (3097/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 71% (3141/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 72% (3185/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 73% (3229/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 74% (3274/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 75% (3318/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 76% (3362/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 77% (3406/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 78% (3450/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 79% (3495/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 80% (3539/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 81% (3583/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 82% (3627/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 83% (3672/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 84% (3716/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 85% (3760/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 86% (3804/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 87% (3849/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 88% (3893/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 89% (3937/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 90% (3981/4423), 12.83 MiB | 12.54 MiB/s remote: Total 4423 (delta 1683), reused 2706 (delta 1039), pack-reused 0 (from 0) Receiving objects: 91% (4025/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 92% (4070/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 93% (4114/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 94% (4158/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 95% (4202/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 96% (4247/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 97% (4291/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 98% (4335/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 99% (4379/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 100% (4423/4423), 12.83 MiB | 12.54 MiB/s Receiving objects: 100% (4423/4423), 20.81 MiB | 14.74 MiB/s, done. Resolving deltas: 0% (0/1683) Resolving deltas: 1% (17/1683) Resolving deltas: 2% (34/1683) Resolving deltas: 3% (51/1683) Resolving deltas: 4% (68/1683) Resolving deltas: 5% (85/1683) Resolving deltas: 6% (101/1683) Resolving deltas: 7% (118/1683) Resolving deltas: 8% (135/1683) Resolving deltas: 9% (152/1683) Resolving deltas: 10% (169/1683) Resolving deltas: 11% (186/1683) Resolving deltas: 12% (202/1683) Resolving deltas: 13% (219/1683) Resolving deltas: 14% (236/1683) Resolving deltas: 15% (253/1683) Resolving deltas: 16% (270/1683) Resolving deltas: 17% (287/1683) Resolving deltas: 18% (303/1683) Resolving deltas: 19% (320/1683) Resolving deltas: 20% (337/1683) Resolving deltas: 21% (354/1683) Resolving deltas: 22% (371/1683) Resolving deltas: 23% (388/1683) Resolving deltas: 24% (404/1683) Resolving deltas: 25% (421/1683) Resolving deltas: 26% (438/1683) Resolving deltas: 27% (455/1683) Resolving deltas: 28% (472/1683) Resolving deltas: 29% (489/1683) Resolving deltas: 30% (505/1683) Resolving deltas: 31% (522/1683) Resolving deltas: 32% (539/1683) Resolving deltas: 33% (556/1683) Resolving deltas: 34% (573/1683) Resolving deltas: 35% (590/1683) Resolving deltas: 36% (606/1683) Resolving deltas: 37% (623/1683) Resolving deltas: 38% (640/1683) Resolving deltas: 39% (657/1683) Resolving deltas: 40% (674/1683) Resolving deltas: 41% (691/1683) Resolving deltas: 42% (707/1683) Resolving deltas: 43% (724/1683) Resolving deltas: 44% (741/1683) Resolving deltas: 45% (758/1683) Resolving deltas: 46% (775/1683) Resolving deltas: 47% (792/1683) Resolving deltas: 48% (808/1683) Resolving deltas: 49% (825/1683) Resolving deltas: 50% (842/1683) Resolving deltas: 51% (859/1683) Resolving deltas: 52% (876/1683) Resolving deltas: 53% (892/1683) Resolving deltas: 54% (909/1683) Resolving deltas: 55% (926/1683) Resolving deltas: 56% (943/1683) Resolving deltas: 57% (960/1683) Resolving deltas: 58% (977/1683) Resolving deltas: 59% (993/1683) Resolving deltas: 60% (1010/1683) Resolving deltas: 61% (1027/1683) Resolving deltas: 62% (1044/1683) Resolving deltas: 63% (1061/1683) Resolving deltas: 64% (1078/1683) Resolving deltas: 65% (1094/1683) Resolving deltas: 66% (1111/1683) Resolving deltas: 67% (1128/1683) Resolving deltas: 68% (1145/1683) Resolving deltas: 69% (1162/1683) Resolving deltas: 70% (1179/1683) Resolving deltas: 71% (1195/1683) Resolving deltas: 72% (1212/1683) Resolving deltas: 73% (1229/1683) Resolving deltas: 74% (1246/1683) Resolving deltas: 75% (1263/1683) Resolving deltas: 76% (1280/1683) Resolving deltas: 77% (1296/1683) Resolving deltas: 78% (1313/1683) Resolving deltas: 79% (1330/1683) Resolving deltas: 80% (1347/1683) Resolving deltas: 81% (1364/1683) Resolving deltas: 82% (1381/1683) Resolving deltas: 83% (1397/1683) Resolving deltas: 84% (1414/1683) Resolving deltas: 85% (1431/1683) Resolving deltas: 86% (1448/1683) Resolving deltas: 87% (1465/1683) Resolving deltas: 88% (1482/1683) Resolving deltas: 89% (1498/1683) Resolving deltas: 90% (1515/1683) Resolving deltas: 91% (1532/1683) Resolving deltas: 92% (1549/1683) Resolving deltas: 93% (1566/1683) Resolving deltas: 94% (1583/1683) Resolving deltas: 95% (1599/1683) Resolving deltas: 96% (1616/1683) Resolving deltas: 97% (1633/1683) Resolving deltas: 98% (1650/1683) Resolving deltas: 99% (1667/1683) Resolving deltas: 100% (1683/1683) Resolving deltas: 100% (1683/1683), done. HEAD is now at fd68028c6dca3a2c4d52004baf3453baab52762a cache restore app-deps HIT: 'app-deps', using key 'app-deps'. Downloading key 'app-deps'... Download complete. Duration: 48.931995ms. Size: 4.4M bytes. Unpacking '/tmp/app-deps-2568192114'... Unpack complete. Duration: 62.438414ms. Restored: app/deps/. cache restore app-build HIT: 'app-build', using key 'app-build'. Downloading key 'app-build'... Download complete. Duration: 329.888755ms. Size: 36.0M bytes. Unpacking '/tmp/app-build-3890886562'... Unpack complete. Duration: 257.311387ms. 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: 405.97216ms. Size: 45.2M bytes. Unpacking '/tmp/app-node-modules-1688424048'... Unpack complete. Duration: 1.025312843s. 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: 522.284267ms. Size: 58.2M bytes. Unpacking '/tmp/turboui-node-modules-673685413'... Unpack complete. Duration: 1.434108855s. Restored: turboui/node_modules/. cache restore turboui-dist HIT: 'turboui-dist', using key 'turboui-dist'. Downloading key 'turboui-dist'... Download complete. Duration: 4.904391ms. Size: 225.1K bytes. Unpacking '/tmp/turboui-dist-3317078609'... Unpack complete. Duration: 10.626099ms. Restored: turboui/dist/. ./scripts/cache-fix-for-erlang make test.build [?25l[+] Running 0/4 ⠙ chartdb Pulling 0.1s  ⠙ s3mock Pulling 0.1s  ⠋ app Pulling 0.1s  ⠋ db Pulling 0.1s  [?25h[?25l[+] Running 0/4 ⠹ chartdb Pulling 0.2s  ⠹ s3mock Pulling 0.2s  ⠙ app Pulling 0.2s  ⠙ db Pulling 0.2s  [?25h[?25l[+] Running 0/4 ⠸ chartdb Pulling 0.3s  ⠸ s3mock Pulling 0.3s  ⠹ app Pulling 0.3s  ⠹ db Pulling 0.3s  [?25h[?25l[+] Running 0/4 ⠼ chartdb Pulling 0.4s  ⠼ s3mock Pulling 0.4s  ⠸ app Pulling 0.4s  ⠸ db Pulling 0.4s  [?25h[?25l[+] Running 0/4 ⠴ chartdb Pulling 0.5s  ⠴ s3mock Pulling 0.5s  ⠼ app Pulling 0.5s  ⠼ db Pulling 0.5s  [?25h[?25l[+] Running 0/4 ⠦ chartdb Pulling 0.6s  ⠦ s3mock Pulling 0.6s  ⠴ app Pulling 0.6s  ⠴ db Pulling 0.6s  [?25h[?25l[+] Running 0/4 ⠧ chartdb Pulling 0.7s  ⠧ s3mock Pulling 0.7s  ⠦ app Pulling 0.7s  ⠦ db Pulling 0.7s  [?25h[?25l[+] Running 0/16 ⠇ chartdb [⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 0.8s  ⠇ s3mock Pulling 0.8s  ⠧ app Pulling 0.8s  ⠧ db Pulling 0.8s  [?25h[?25l[+] Running 0/16 ⠏ chartdb [⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 0.9s  ⠏ s3mock Pulling 0.9s  ⠇ app Pulling 0.9s  ⠇ db Pulling 0.9s  [?25h[?25l[+] Running 2/16 ⠋ chartdb [⠀⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 1.0s  ⠋ s3mock Pulling 1.0s  ⠏ app Pulling 1.0s  ⠏ db Pulling 1.0s  [?25h[?25l[+] Running 2/16 ⠙ chartdb [⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 1.1s  ⠙ s3mock Pulling 1.1s  ⠋ app Pulling 1.1s  ⠋ db Pulling 1.1s  [?25h[?25l[+] Running 6/16 ⠹ chartdb [⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀] Pulling 1.2s  ⠹ s3mock Pulling 1.2s  ⠙ app Pulling 1.2s  ⠙ db Pulling 1.2s  [?25h[?25l[+] Running 6/16 ⠸ chartdb [⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀] Pulling 1.3s  ⠸ s3mock Pulling 1.3s  ⠹ app Pulling 1.3s  ⠹ db Pulling 1.3s  [?25h[?25l[+] Running 7/16 ⠼ chartdb [⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀] Pulling 1.4s  ⠼ s3mock Pulling 1.4s  ⠸ app Pulling 1.4s  ⠸ db Pulling 1.4s  [?25h[?25l[+] Running 7/16 ⠴ chartdb [⣿⣿⣿⣿⣿⣿⣿⡀⡀⠀⠀⠀] Pulling 1.5s  ⠴ s3mock Pulling 1.5s  ⠼ app Pulling 1.5s  ⠼ db Pulling 1.5s  [?25h[?25l[+] Running 8/16 ⠦ chartdb [⣿⣿⣿⣿⣿⣿⣿⣄⣀⣿⠀⠀] Pulling 1.6s  ⠦ s3mock Pulling 1.6s  ⠴ app Pulling 1.6s  ⠴ db Pulling 1.6s  [?25h[?25l[+] Running 9/16 ⠧ chartdb [⣿⣿⣿⣿⣿⣿⣿⣦⣄⣿⣿⠀] Pulling 1.7s  ⠧ s3mock Pulling 1.7s  ⠦ app Pulling 1.7s  ⠦ db Pulling 1.7s  [?25h[?25l[+] Running 9/36 ⠇ chartdb [⣿⣿⣿⣿⣿⣿⣿⣷⣤⣿⣿⠀] Pulling 1.8s  ⠇ s3mock [⠀⠀⠀] Pulling 1.8s  ⠧ app [⠀⠀⠀⠀] Pulling 1.8s  ⠧ db [⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 1.8s  [?25h[?25l[+] Running 9/36 ⠏ chartdb [⣿⣿⣿⣿⣿⣿⣿⣿⣶⣿⣿⠀] Pulling 1.9s  ⠏ s3mock [⠀⠀⠀] Pulling 1.9s  ⠇ app [⠀⠀⠀⠀] Pulling 1.9s  ⠇ db [⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 1.9s  [?25h[?25l[+] Running 10/36 ⠋ chartdb [⣿⣿⣿⣿⣿⣿⣿⣿⣶⣿⣿⣿] 63.77MB / 77.85MB Pulling 2.0s  ⠋ s3mock [⠀⠀⠀] Pulling 2.0s  ⠏ app [⠀⠀⠀⠀] Pulling 2.0s  ⠏ db [⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.0s  [?25h[?25l[+] Running 11/36 ⠙ chartdb [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 63.77MB / 77.85MB Pulling 2.1s  ⠙ s3mock [⠀⠀⠀] Pulling 2.1s  ⠋ app [⠀⠀⠀⠀] Pulling 2.1s  ⠋ db [⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.1s  [?25h[?25l[+] Running 11/36 ⠹ chartdb [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 65.46MB / 77.85MB Pulling 2.2s  ⠹ s3mock [⠀⠀⠀] Pulling 2.2s  ⠙ app [⠀⠀⠀⠀] Pulling 2.2s  ⠙ db [⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.2s  [?25h[?25l[+] Running 11/36 ⠸ chartdb [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 65.46MB / 77.85MB Pulling 2.3s  ⠸ s3mock [⠀⠀⠀] Pulling 2.3s  ⠹ app [⠀⠀⠀⠀] Pulling 2.3s  ⠹ db [⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.3s  [?25h[?25l[+] Running 11/36 ⠼ chartdb [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 65.46MB / 77.85MB Pulling 2.4s  ⠼ s3mock [⠀⠀⠀] Pulling 2.4s  ⠸ app [⠀⠀⠀⠀] Pulling 2.4s  ⠸ db [⣀⣶⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.4s  [?25h[?25l[+] Running 13/36 ⠴ chartdb [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 65.46MB / 77.85MB Pulling 2.5s  ⠴ s3mock [⠀⠀⠀] Pulling 2.5s  ⠼ app [⠀⠀⠀⠀] Pulling 2.5s  ⠼ db [⣤⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.5s  [?25h[?25l[+] Running 13/36 ⠦ chartdb [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 65.46MB / 77.85MB Pulling 2.6s  ⠦ s3mock [⠀⠀⠀] Pulling 2.6s  ⠴ app [⠀⠀⠀⠀] Pulling 2.6s  ⠴ db [⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.6s  [?25h[?25l[+] Running 13/36 ⠧ chartdb [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 67.2MB / 77.85MB Pulling 2.7s  ⠧ s3mock [⠀⠀⠀] Pulling 2.7s  ⠦ app [⠀⠀⠀⠀] Pulling 2.7s  ⠦ db [⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.7s  [?25h[?25l[+] Running 13/36 ⠇ chartdb [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 75MB / 77.85MB Pulling 2.8s  ⠇ s3mock [⠀⠀⠀] Pulling 2.8s  ⠧ app [⠀⠀⠀⠀] Pulling 2.8s  ⠧ db [⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.8s  [?25h[?25l[+] Running 17/36 ✔ chartdb Pulled 2.9s  ⠏ s3mock [⠀⠀⠀] Pulling 2.9s  ⠇ app [⠀⠀⠀⠀] Pulling 2.9s  ⠇ db [⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 2.9s  [?25h[?25l[+] Running 17/36 ✔ chartdb Pulled 2.9s  ⠋ s3mock [⠀⠀⠀] Pulling 3.0s  ⠏ app [⠀⠀⠀⠀] Pulling 3.0s  ⠏ db [⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀] Pulling 3.0s  [?25h[?25l[+] Running 18/36 ✔ chartdb Pulled 2.9s  ⠙ s3mock [⠀⠀⠀] Pulling 3.1s  ⠋ app [⠀⠀⠀⠀] Pulling 3.1s  ⠋ db [⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀] Pulling 3.1s  [?25h[?25l[+] Running 18/36 ✔ chartdb Pulled 2.9s  ⠹ s3mock [⠀⠀⠀] Pulling 3.2s  ⠙ app [⠀⠀⠀⠀] Pulling 3.2s  ⠙ db [⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀] Pulling 3.2s  [?25h[?25l[+] Running 20/36 ✔ chartdb Pulled 2.9s  ⠸ s3mock [⠀⠀⠀] Pulling 3.3s  ⠹ app [⠀⠀⠀⠀] Pulling 3.3s  ⠹ db [⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀] Pulling 3.3s  [?25h[?25l[+] Running 20/36 ✔ chartdb Pulled 2.9s  ⠼ s3mock [⠀⠀⠀] Pulling 3.4s  ⠸ app [⠀⠀⠀⠀] Pulling 3.4s  ⠸ db [⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀] Pulling 3.4s  [?25h[?25l[+] Running 20/36 ✔ chartdb Pulled 2.9s  ⠴ s3mock [⠀⠀⠀] Pulling 3.5s  ⠼ app [⠀⠀⠀⠀] Pulling 3.5s  ⠼ db [⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀] Pulling 3.5s  [?25h[?25l[+] Running 20/36 ✔ chartdb Pulled 2.9s  ⠦ s3mock [⠀⠀⠀] Pulling 3.6s  ⠴ app [⠀⠀⠀⠀] Pulling 3.6s  ⠴ db [⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀] Pulling 3.6s  [?25h[?25l[+] Running 21/36 ✔ chartdb Pulled 2.9s  ⠧ s3mock [⠀⠀⠀] Pulling 3.7s  ⠦ app [⠀⠀⠀⠀] Pulling 3.7s  ⠦ db [⣿⣿⣿⣿⣿⣿⣿⣿⣀⠀⣿⠀⠀] Pulling 3.7s  [?25h[?25l[+] Running 21/36 ✔ chartdb Pulled 2.9s  ⠇ s3mock [⠀⠀⠀] Pulling 3.8s  ⠧ app [⠀⠀⠀⠀] Pulling 3.8s  ⠧ db [⣿⣿⣿⣿⣿⣿⣿⣿⣀⠀⣿⠀⠀] Pulling 3.8s  [?25h[?25l[+] Running 22/36 ✔ chartdb Pulled 2.9s  ⠏ s3mock [⠀⠀⠀] Pulling 3.9s  ⠇ app [⠀⠀⠀⠀] Pulling 3.9s  ⠇ db [⣿⣿⣿⣿⣿⣿⣿⣿⣀⠀⣿⠀⠀] Pulling 3.9s  [?25h[?25l[+] Running 22/36 ✔ chartdb Pulled 2.9s  ⠋ s3mock [⠀⠀⠀] Pulling 4.0s  ⠏ app [⠀⠀⠀⠀] Pulling 4.0s  ⠏ db [⣿⣿⣿⣿⣿⣿⣿⣿⣄⠀⣿⠀⠀] Pulling 4.0s  [?25h[?25l[+] Running 23/36 ✔ chartdb Pulled 2.9s  ⠙ s3mock [⠀⠀⠀] Pulling 4.1s  ⠋ app [⠀⠀⠀⠀] Pulling 4.1s  ⠋ db [⣿⣿⣿⣿⣿⣿⣿⣿⣤⠀⣿⣿⠀] Pulling 4.1s  [?25h[?25l[+] Running 23/36 ✔ chartdb Pulled 2.9s  ⠹ s3mock [⠀⠀⠀] Pulling 4.2s  ⠙ app [⠀⠀⠀⠀] Pulling 4.2s  ⠙ db [⣿⣿⣿⣿⣿⣿⣿⣿⣦⠀⣿⣿⠀] Pulling 4.2s  [?25h[?25l[+] Running 23/36 ✔ chartdb Pulled 2.9s  ⠸ s3mock [⠀⠀⠀] Pulling 4.3s  ⠹ app [⠀⠀⠀⠀] Pulling 4.3s  ⠹ db [⣿⣿⣿⣿⣿⣿⣿⣿⣶⠀⣿⣿⠀] Pulling 4.3s  [?25h[?25l[+] Running 23/36 ✔ chartdb Pulled 2.9s  ⠼ s3mock [⠀⠀⠀] Pulling 4.4s  ⠸ app [⠀⠀⠀⠀] Pulling 4.4s  ⠸ db [⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀⣿⣿⠀] Pulling 4.4s  [?25h[?25l[+] Running 24/36 ✔ chartdb Pulled 2.9s  ⠴ s3mock [⠀⠀⠀] Pulling 4.5s  ⠼ app [⠀⠀⠀⠀] Pulling 4.5s  ⠼ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⣿⣿⣿] Pulling 4.5s  [?25h[?25l[+] Running 24/36 ✔ chartdb Pulled 2.9s  ⠦ s3mock [⠀⠀⠀] Pulling 4.6s  ⠴ app [⠀⠀⠀⠀] Pulling 4.6s  ⠴ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⣿⣿⣿] Pulling 4.6s  [?25h[?25l[+] Running 25/36 ✔ chartdb Pulled 2.9s  ⠧ s3mock [⠀⠀⠀] Pulling 4.7s  ⠦ app [⠀⠀⠀⠀] Pulling 4.7s  ⠦ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 4.7s  [?25h[?25l[+] Running 25/36 ✔ chartdb Pulled 2.9s  ⠇ s3mock [⠀⠀⠀] Pulling 4.8s  ⠧ app [⠀⠀⠀⠀] Pulling 4.8s  ⠧ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 4.8s  [?25h[?25l[+] Running 25/36 ✔ chartdb Pulled 2.9s  ⠏ s3mock [⠀⠀⠀] Pulling 4.9s  ⠇ app [⣿⠀⠀⠀] Pulling 4.9s  ⠇ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 4.9s  [?25h[?25l[+] Running 26/36 ✔ chartdb Pulled 2.9s  ⠋ s3mock [⠀⠀⠀] Pulling 5.0s  ⠏ app [⣿⡀⠀⠀] Pulling 5.0s  ⠏ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 5.0s  [?25h[?25l[+] Running 26/36 ✔ chartdb Pulled 2.9s  ⠙ s3mock [⠀⠀⠀] Pulling 5.1s  ⠋ app [⣿⣄⠀⠀] Pulling 5.1s  ⠋ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 5.1s  [?25h[?25l[+] Running 26/36 ✔ chartdb Pulled 2.9s  ⠹ s3mock [⠀⠀⠀] Pulling 5.2s  ⠙ app [⣿⣦⠀⠀] Pulling 5.2s  ⠙ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 5.2s  [?25h[?25l[+] Running 26/36 ✔ chartdb Pulled 2.9s  ⠸ s3mock [⠀⠀⠀] Pulling 5.3s  ⠹ app [⣿⣶⠀⠀] 45.09MB / 419.9MB Pulling 5.3s  ⠹ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 5.3s  [?25h[?25l[+] Running 26/36 ✔ chartdb Pulled 2.9s  ⠼ s3mock [⠀⠀⠀] Pulling 5.4s  ⠸ app [⣿⣷⡀⠀] 52.47MB / 419.9MB Pulling 5.4s  ⠸ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 5.4s  [?25h[?25l[+] Running 27/36 ✔ chartdb Pulled 2.9s  ⠴ s3mock [⠀⠀⠀] Pulling 5.5s  ⠼ app [⣿⣿⣶⠀] 65.15MB / 419.9MB Pulling 5.5s  ⠼ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 5.5s  [?25h[?25l[+] Running 27/36 ✔ chartdb Pulled 2.9s  ⠦ s3mock [⠀⠀⠀] Pulling 5.6s  ⠴ app [⣿⣿⣿⠀] 76.41MB / 419.9MB Pulling 5.6s  ⠴ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 5.6s  [?25h[?25l[+] Running 27/36 ✔ chartdb Pulled 2.9s  ⠧ s3mock [⠀⠀⠀] Pulling 5.7s  ⠦ app [⣿⣿⣿⠀] 86.65MB / 419.9MB Pulling 5.7s  ⠦ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 5.7s  [?25h[?25l[+] Running 27/36 ✔ chartdb Pulled 2.9s  ⠇ s3mock [⠀⠀⠀] Pulling 5.8s  ⠧ app [⣿⣿⣿⠀] 97.93MB / 419.9MB Pulling 5.8s  ⠧ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 5.8s  [?25h[?25l[+] Running 27/36 ✔ chartdb Pulled 2.9s  ⠏ s3mock [⠀⠀⠀] Pulling 5.9s  ⠇ app [⣿⣿⣿⠀] 97.93MB / 419.9MB Pulling 5.9s  ⠇ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 5.9s  [?25h[?25l[+] Running 27/36 ✔ chartdb Pulled 2.9s  ⠋ s3mock [⣄⠀⠀] Pulling 6.0s  ⠏ app [⣿⣿⣿⡀] 107.6MB / 419.9MB Pulling 6.0s  ⠏ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 6.0s  [?25h[?25l[+] Running 27/36 ✔ chartdb Pulled 2.9s  ⠙ s3mock [⣿⠀⠀] Pulling 6.1s  ⠋ app [⣿⣿⣿⡀] 117.3MB / 419.9MB Pulling 6.1s  ⠋ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 6.1s  [?25h[?25l[+] Running 27/36 ✔ chartdb Pulled 2.9s  ⠹ s3mock [⣿⠀⠀] Pulling 6.2s  ⠙ app [⣿⣿⣿⡀] 129.7MB / 419.9MB Pulling 6.2s  ⠙ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 6.2s  [?25h[?25l[+] Running 27/36 ✔ chartdb Pulled 2.9s  ⠸ s3mock [⣿⠀⠀] Pulling 6.3s  ⠹ app [⣿⣿⣿⡀] 141.5MB / 419.9MB Pulling 6.3s  ⠹ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 6.3s  [?25h[?25l[+] Running 28/36 ✔ chartdb Pulled 2.9s  ⠼ s3mock [⣿⠀⠀] Pulling 6.4s  ⠸ app [⣿⣿⣿⣀] 151.7MB / 419.9MB Pulling 6.4s  ⠸ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 6.4s  [?25h[?25l[+] Running 28/36 ✔ chartdb Pulled 2.9s  ⠴ s3mock [⣿⠀⠀] 7.531MB / 77.95MB Pulling 6.5s  ⠼ app [⣿⣿⣿⣀] 162.5MB / 419.9MB Pulling 6.5s  ⠼ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 6.5s  [?25h[?25l[+] Running 28/36 ✔ chartdb Pulled 2.9s  ⠦ s3mock [⣿⠀⠀] 12.46MB / 77.95MB Pulling 6.6s  ⠴ app [⣿⣿⣿⣀] 171.1MB / 419.9MB Pulling 6.6s  ⠴ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 6.6s  [?25h[?25l[+] Running 28/36 ✔ chartdb Pulled 2.9s  ⠧ s3mock [⣿⡀⣀] 20.01MB / 77.95MB Pulling 6.7s  ⠦ app [⣿⣿⣿⣀] 176.5MB / 419.9MB Pulling 6.7s  ⠦ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 6.7s  [?25h[?25l[+] Running 28/36 ✔ chartdb Pulled 2.9s  ⠇ s3mock [⣿⡀⣄] 26.09MB / 77.95MB Pulling 6.8s  ⠧ app [⣿⣿⣿⣀] 183MB / 419.9MB Pulling 6.8s  ⠧ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 6.8s  [?25h[?25l[+] Running 28/36 ✔ chartdb Pulled 2.9s  ⠏ s3mock [⣿⣀⣤] 33.32MB / 77.95MB Pulling 6.9s  ⠇ app [⣿⣿⣿⣀] 188.4MB / 419.9MB Pulling 6.9s  ⠇ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 6.9s  [?25h[?25l[+] Running 28/36 ✔ chartdb Pulled 2.9s  ⠋ s3mock [⣿⣀⣦] 40.52MB / 77.95MB Pulling 7.0s  ⠏ app [⣿⣿⣿⣄] 193.2MB / 419.9MB Pulling 7.0s  ⠏ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 7.0s  [?25h[?25l[+] Running 28/36 ✔ chartdb Pulled 2.9s  ⠙ s3mock [⣿⣀⣦] 42.48MB / 77.95MB Pulling 7.1s  ⠋ app [⣿⣿⣿⣄] 193.2MB / 419.9MB Pulling 7.1s  ⠋ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 7.1s  [?25h[?25l[+] Running 28/36 ✔ chartdb Pulled 2.9s  ⠹ s3mock [⣿⣄⣶] 50.1MB / 77.95MB Pulling 7.2s  ⠙ app [⣿⣿⣿⣄] 197.8MB / 419.9MB Pulling 7.2s  ⠙ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 7.2s  [?25h[?25l[+] Running 29/36 ✔ chartdb Pulled 2.9s  ⠸ s3mock [⣿⣄⣿] 56.11MB / 77.95MB Pulling 7.3s  ⠹ app [⣿⣿⣿⣄] 208.2MB / 419.9MB Pulling 7.3s  ⠹ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 7.3s  [?25h[?25l[+] Running 29/36 ✔ chartdb Pulled 2.9s  ⠼ s3mock [⣿⣄⣿] 58.04MB / 77.95MB Pulling 7.4s  ⠸ app [⣿⣿⣿⣄] 216.1MB / 419.9MB Pulling 7.4s  ⠸ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 7.4s  [?25h[?25l[+] Running 29/36 ✔ chartdb Pulled 2.9s  ⠴ s3mock [⣿⣤⣿] 62.36MB / 77.95MB Pulling 7.5s  ⠼ app [⣿⣿⣿⣄] 222.6MB / 419.9MB Pulling 7.5s  ⠼ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 7.5s  [?25h[?25l[+] Running 29/36 ✔ chartdb Pulled 2.9s  ⠦ s3mock [⣿⣦⣿] 67.83MB / 77.95MB Pulling 7.6s  ⠴ app [⣿⣿⣿⣄] 230.1MB / 419.9MB Pulling 7.6s  ⠴ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 7.6s  [?25h[?25l[+] Running 29/36 ✔ chartdb Pulled 2.9s  ⠧ s3mock [⣿⣶⣿] 72.92MB / 77.95MB Pulling 7.7s  ⠦ app [⣿⣿⣿⣄] 236.6MB / 419.9MB Pulling 7.7s  ⠦ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 7.7s  [?25h[?25l[+] Running 30/36 ✔ chartdb Pulled 2.9s  ⠇ s3mock [⣿⣿⣿] 72.92MB / 77.95MB Pulling 7.8s  ⠧ app [⣿⣿⣿⣤] 246.2MB / 419.9MB Pulling 7.8s  ⠧ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.1MB / 137.9MB Pulling 7.8s  [?25h[?25l[+] Running 30/36 ✔ chartdb Pulled 2.9s  ⠏ s3mock [⣿⣿⣿] 72.92MB / 77.95MB Pulling 7.9s  ⠇ app [⣿⣿⣿⣤] 258.1MB / 419.9MB Pulling 7.9s  ⠇ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 135.2MB / 137.9MB Pulling 7.9s  [?25h[?25l[+] Running 30/36 ✔ chartdb Pulled 2.9s  ⠋ s3mock [⣿⣿⣿] 72.92MB / 77.95MB Pulling 8.0s  ⠏ app [⣿⣿⣿⣤] 269.9MB / 419.9MB Pulling 8.0s  ⠏ db [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 136.3MB / 137.9MB Pulling 8.0s  [?25h[?25l[+] Running 32/36 ✔ chartdb Pulled 2.9s  ⠙ s3mock [⣿⣿⣿] 72.92MB / 77.95MB Pulling 8.1s  ⠋ app [⣿⣿⣿⣤] 282.3MB / 419.9MB Pulling 8.1s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 32/36 ✔ chartdb Pulled 2.9s  ⠹ s3mock [⣿⣿⣿] 72.92MB / 77.95MB Pulling 8.2s  ⠙ app [⣿⣿⣿⣦] 292.5MB / 419.9MB Pulling 8.2s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 32/36 ✔ chartdb Pulled 2.9s  ⠸ s3mock [⣿⣿⣿] 72.92MB / 77.95MB Pulling 8.3s  ⠹ app [⣿⣿⣿⣦] 303.9MB / 419.9MB Pulling 8.3s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 32/36 ✔ chartdb Pulled 2.9s  ⠼ s3mock [⣿⣿⣿] 72.92MB / 77.95MB Pulling 8.4s  ⠸ app [⣿⣿⣿⣦] 314.1MB / 419.9MB Pulling 8.4s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 32/36 ✔ chartdb Pulled 2.9s  ⠴ s3mock [⣿⣿⣿] 72.92MB / 77.95MB Pulling 8.5s  ⠼ app [⣿⣿⣿⣦] 329.7MB / 419.9MB Pulling 8.5s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 32/36 ✔ chartdb Pulled 2.9s  ⠦ s3mock [⣿⣿⣿] 73.89MB / 77.95MB Pulling 8.6s  ⠴ app [⣿⣿⣿⣶] 341MB / 419.9MB Pulling 8.6s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 33/36 ✔ chartdb Pulled 2.9s  ⠧ s3mock [⣿⣿⣿] 77.72MB / 77.95MB Pulling 8.7s  ⠦ app [⣿⣿⣿⣶] 353.4MB / 419.9MB Pulling 8.7s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 32/36 ✔ chartdb Pulled 2.9s  ⠇ s3mock [⣿⣿⣿] 77.72MB / 77.95MB Pulling 8.8s  ⠧ app [⣿⣿⣿⣶] 365.3MB / 419.9MB Pulling 8.8s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 32/36 ✔ chartdb Pulled 2.9s  ⠏ s3mock [⣿⣿⣿] 77.72MB / 77.95MB Pulling 8.9s  ⠇ app [⣿⣿⣿⣷] 377.1MB / 419.9MB Pulling 8.9s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 32/36 ✔ chartdb Pulled 2.9s  ⠋ s3mock [⣿⣿⣿] 77.72MB / 77.95MB Pulling 9.0s  ⠏ app [⣿⣿⣿⣷] 388.4MB / 419.9MB Pulling 9.0s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 32/36 ✔ chartdb Pulled 2.9s  ⠙ s3mock [⣿⣿⣿] 77.72MB / 77.95MB Pulling 9.1s  ⠋ app [⣿⣿⣿⣷] 401.9MB / 419.9MB Pulling 9.1s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 32/36 ✔ chartdb Pulled 2.9s  ⠹ s3mock [⣿⣿⣿] 77.72MB / 77.95MB Pulling 9.2s  ⠙ app [⣿⣿⣿⣷] 412.6MB / 419.9MB Pulling 9.2s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 32/36 ✔ chartdb Pulled 2.9s  ⠸ s3mock [⣿⣿⣿] 77.72MB / 77.95MB Pulling 9.3s  ⠹ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 9.3s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠸ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 9.4s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠼ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 9.5s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠴ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 9.6s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠦ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 9.7s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠧ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 9.8s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠇ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 9.9s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠏ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 10.0s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠋ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 10.1s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠙ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 10.2s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠹ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 10.3s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠸ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 10.4s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠼ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 10.5s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠴ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 10.6s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠦ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 10.7s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠧ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 10.8s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠇ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 10.9s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠏ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 11.0s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠋ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 11.1s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠙ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 11.2s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠹ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 11.3s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠸ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 11.4s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠼ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 11.5s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠴ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 11.6s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠦ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 11.7s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠧ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 11.8s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠇ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 11.9s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠏ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 12.0s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠋ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 12.1s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠙ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 12.2s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠹ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 12.3s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠸ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 12.4s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠼ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 12.5s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠴ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 12.6s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠦ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 12.7s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠧ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 12.8s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠇ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 12.9s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠏ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 13.0s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠋ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 13.1s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠙ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 13.2s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠹ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 13.3s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠸ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 13.4s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠼ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 13.5s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠴ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 13.6s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠦ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 13.7s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠧ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 13.8s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠇ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 13.9s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠏ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 14.0s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠋ app [⣿⣿⣿⣿] 412.6MB / 419.9MB Pulling 14.1s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠙ app [⣿⣿⣿⣿] 416.5MB / 419.9MB Pulling 14.2s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 34/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ⠹ app [⣿⣿⣿⣿] 418.2MB / 419.9MB Pulling 14.3s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 36/36 ✔ chartdb Pulled 2.9s  ✔ s3mock Pulled 9.4s  ✔ app Pulled 14.3s  ✔ db Pulled 8.1s  [?25h[?25l[+] Running 2/5 ✔ Network operately_default Created0.0s  ✔ Volume "operately_postgres-data" Created0.0s  ⠋ Container operately-chartdb-1 Creating0.0s  ⠋ Container operately-db-1 Creating0.0s  ⠋ Container operately-s3mock-1 Creating0.0s  [?25h[?25l[+] Running 3/6 ✔ Network operately_default Created0.0s  ✔ Volume "operately_postgres-data" Created0.0s  ⠙ Container operately-chartdb-1 Starting0.1s  ⠙ Container operately-db-1 Starting0.1s  ⠙ Container operately-s3mock-1 Starting0.1s  ✔ Container operately-app-1 Created0.0s  [?25h[?25l[+] Running 3/6 ✔ Network operately_default Created0.0s  ✔ Volume "operately_postgres-data" Created0.0s  ⠹ Container operately-chartdb-1 Starting0.2s  ⠹ Container operately-db-1 Starting0.2s  ⠹ Container operately-s3mock-1 Starting0.2s  ✔ Container operately-app-1 Created0.0s  [?25h[?25l[+] Running 4/6 ✔ Network operately_default Created0.0s  ✔ Volume "operately_postgres-data" Created0.0s  ✔ Container operately-chartdb-1 Started0.3s  ⠸ Container operately-db-1 Starting0.3s  ⠸ Container operately-s3mock-1 Starting0.3s  ✔ Container operately-app-1 Created0.0s  [?25h[?25l[+] Running 5/6 ✔ Network operately_default Created0.0s  ✔ Volume "operately_postgres-data" Created0.0s  ✔ Container operately-chartdb-1 Started0.3s  ✔ Container operately-db-1 Started0.4s  ✔ Container operately-s3mock-1 Started0.4s  ⠙ Container operately-app-1 Starting0.3s  [?25h[?25l[+] Running 5/6 ✔ Network operately_default Created0.0s  ✔ Volume "operately_postgres-data" Created0.0s  ✔ Container operately-chartdb-1 Started0.3s  ✔ Container operately-db-1 Started0.4s  ✔ Container operately-s3mock-1 Started0.4s  ⠹ Container operately-app-1 Starting0.4s  [?25h[?25l[+] Running 6/6 ✔ Network operately_default Created0.0s  ✔ Volume "operately_postgres-data" Created0.0s  ✔ Container operately-chartdb-1 Started0.3s  ✔ Container operately-db-1 Started0.4s  ✔ Container operately-s3mock-1 Started0.4s  ✔ Container operately-app-1 Started0.4s  [?25hexport export added 2 packages, changed 33 packages, and audited 858 packages in 3s 167 packages are looking for funding run `npm fund` for details found 0 vulnerabilities > build > tsc * creating /home/dev/.mix/archives/hex-2.2.1 Resolving Hex dependencies... Resolution completed in 0.245s 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 dialyxir 1.4.5 ecto 3.12.3 ecto_sql 3.12.0 elixir_make 0.8.4 erlex 0.2.7 ex_aws 2.5.4 expo 1.1.0 file_system 1.0.1 finch 0.19.0 floki 0.36.2 gettext 0.26.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 langchain 0.4.0-rc.0 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 216 files (.ex) Compiling 7 files (.ex) Generated operately app up to date, audited 715 packages in 2s 87 packages are looking for funding run `npm fund` for details 7 vulnerabilities (5 moderate, 2 high) To address all issues, run: npm audit fix Run `npm audit` for details. > build > NODE_ENV=test vite build vite v6.2.5 building for production... transforming... ✓ 17151 modules transformed. rendering chunks... computing gzip size... priv/static/.vite/manifest.json  0.29 kB │ gzip: 0.16 kB priv/static/assets/app-BtzdUApl.js 2,740.59 kB │ gzip: 361.18 kB │ map: 3,778.49 kB priv/static/assets/vendor-Dp-gzLpW.js 5,326.52 kB │ gzip: 1,112.03 kB │ map: 10,861.90 kB ✓ built in 19.71s Rebuilding... Done in 1886ms. Check your digested files at "priv/static" The database for Operately.Repo has been created  13:11:11.462 [info] == Running 20230306115717 Operately.Repo.Migrations.CreateGroups.change/0 forward  13:11:11.464 [info] create table groups  13:11:11.466 [info] == Migrated 20230306115717 in 0.0s  13:11:11.485 [info] == Running 20230307123238 Operately.Repo.Migrations.CreateObjectives.change/0 forward  13:11:11.485 [info] create table objectives  13:11:11.486 [info] == Migrated 20230307123238 in 0.0s  13:11:11.487 [info] == Running 20230307135121 Operately.Repo.Migrations.CreateKeyResults.change/0 forward  13:11:11.487 [info] create table key_results  13:11:11.489 [info] create index key_results_objective_id_index  13:11:11.489 [info] == Migrated 20230307135121 in 0.0s  13:11:11.490 [info] == Running 20230307154049 Operately.Repo.Migrations.AddDirectionToKeyResultsTable.change/0 forward  13:11:11.490 [info] alter table key_results  13:11:11.490 [info] == Migrated 20230307154049 in 0.0s  13:11:11.491 [info] == Running 20230308141139 Operately.Repo.Migrations.CreateTenets.change/0 forward  13:11:11.491 [info] create table tenets  13:11:11.492 [info] == Migrated 20230308141139 in 0.0s  13:11:11.493 [info] == Running 20230309131630 Operately.Repo.Migrations.CreateKpis.change/0 forward  13:11:11.493 [info] create table kpis  13:11:11.494 [info] == Migrated 20230309131630 in 0.0s  13:11:11.494 [info] == Running 20230309160755 Operately.Repo.Migrations.CreateProjects.change/0 forward  13:11:11.495 [info] create table projects  13:11:11.496 [info] == Migrated 20230309160755 in 0.0s  13:11:11.496 [info] == Running 20230314122433 Operately.Repo.Migrations.CreatePeople.change/0 forward  13:11:11.496 [info] create table people  13:11:11.497 [info] create index people_handle_index  13:11:11.498 [info] == Migrated 20230314122433 in 0.0s  13:11:11.498 [info] == Running 20230314123005 Operately.Repo.Migrations.CreateAccountsAuthTables.change/0 forward  13:11:11.500 [info] execute "CREATE EXTENSION IF NOT EXISTS citext"  13:11:11.505 [info] create table accounts  13:11:11.506 [info] create index accounts_email_index  13:11:11.506 [info] create table accounts_tokens  13:11:11.507 [info] create index accounts_tokens_account_id_index  13:11:11.508 [info] create index accounts_tokens_context_token_index  13:11:11.509 [info] == Migrated 20230314123005 in 0.0s  13:11:11.510 [info] == Running 20230317152250 Operately.Repo.Migrations.CreateAlignments.change/0 forward  13:11:11.510 [info] create table alignments  13:11:11.511 [info] == Migrated 20230317152250 in 0.0s  13:11:11.512 [info] == Running 20230319194352 Operately.Repo.Migrations.CreateOwnerships.change/0 forward  13:11:11.512 [info] create table ownerships  13:11:11.512 [info] == Migrated 20230319194352 in 0.0s  13:11:11.513 [info] == Running 20230323173550 Operately.Repo.Migrations.CreateMembers.change/0 forward  13:11:11.513 [info] create table members  13:11:11.514 [info] create index members_group_id_index  13:11:11.515 [info] create index members_person_id_index  13:11:11.515 [info] == Migrated 20230323173550 in 0.0s  13:11:11.516 [info] == Running 20230413142030 Operately.Repo.Migrations.AddStatusFieldToKeyResults.change/0 forward  13:11:11.516 [info] alter table key_results  13:11:11.516 [info] == Migrated 20230413142030 in 0.0s  13:11:11.517 [info] == Running 20230416071114 Operately.Repo.Migrations.CreateUpdates.change/0 forward  13:11:11.517 [info] create table updates  13:11:11.518 [info] create index updates_author_id_index  13:11:11.518 [info] == Migrated 20230416071114 in 0.0s  13:11:11.519 [info] == Running 20230417173349 Operately.Repo.Migrations.CreateComments.change/0 forward  13:11:11.519 [info] create table comments  13:11:11.520 [info] create index comments_update_id_index  13:11:11.521 [info] create index comments_author_id_index  13:11:11.521 [info] == Migrated 20230417173349 in 0.0s  13:11:11.522 [info] == Running 20230420073647 Operately.Repo.Migrations.ConnectPeopleWithAccounts.change/0 forward  13:11:11.522 [info] alter table people  13:11:11.523 [info] == Migrated 20230420073647 in 0.0s  13:11:11.524 [info] == Running 20230424111700 Operately.Repo.Migrations.AddMissionToGroups.change/0 forward  13:11:11.524 [info] alter table groups  13:11:11.524 [info] == Migrated 20230424111700 in 0.0s  13:11:11.525 [info] == Running 20230424144020 Operately.Repo.Migrations.AddGroupContactsTable.change/0 forward  13:11:11.525 [info] create table contacts  13:11:11.526 [info] create index contacts_group_id_index  13:11:11.527 [info] == Migrated 20230424144020 in 0.0s  13:11:11.527 [info] == Running 20230425114123 Operately.Repo.Migrations.AddGroupIdToProjects.change/0 forward  13:11:11.527 [info] alter table projects  13:11:11.528 [info] create index projects_group_id_index  13:11:11.529 [info] == Migrated 20230425114123 in 0.0s  13:11:11.529 [info] == Running 20230425161330 Operately.Repo.Migrations.AddGroupIdToObjectives.change/0 forward  13:11:11.529 [info] alter table objectives  13:11:11.530 [info] create index objectives_group_id_index  13:11:11.530 [info] == Migrated 20230425161330 in 0.0s  13:11:11.531 [info] == Running 20230426065811 :"Elixir.Operately.Repo.Migrations.Add-steps-to-key-results".change/0 forward  13:11:11.531 [info] alter table key_results  13:11:11.532 [info] == Migrated 20230426065811 in 0.0s  13:11:11.532 [info] == Running 20230427073231 Operately.Repo.Migrations.AddOwnerToObjectives.change/0 forward  13:11:11.532 [info] alter table objectives  13:11:11.533 [info] create index objectives_owner_id_index  13:11:11.533 [info] == Migrated 20230427073231 in 0.0s  13:11:11.534 [info] == Running 20230501204731 Operately.Repo.Migrations.AddOwnerIdToKeyResults.change/0 forward  13:11:11.534 [info] alter table key_results  13:11:11.535 [info] create index key_results_owner_id_index  13:11:11.535 [info] == Migrated 20230501204731 in 0.0s  13:11:11.536 [info] == Running 20230503165843 Operately.Repo.Migrations.AddGroupIdToKeyResults.change/0 forward  13:11:11.536 [info] alter table key_results  13:11:11.537 [info] create index key_results_group_id_index  13:11:11.537 [info] == Migrated 20230503165843 in 0.0s  13:11:11.538 [info] == Running 20230505081629 Operately.Repo.Migrations.CreateCompanies.change/0 forward  13:11:11.538 [info] create table companies  13:11:11.539 [info] == Migrated 20230505081629 in 0.0s  13:11:11.540 [info] == Running 20230505084350 Operately.Repo.Migrations.ConnectTenetsWithCompany.change/0 forward  13:11:11.540 [info] alter table tenets  13:11:11.541 [info] create index tenets_company_id_index  13:11:11.541 [info] == Migrated 20230505084350 in 0.0s  13:11:11.542 [info] == Running 20230505091631 Operately.Repo.Migrations.ConnectKpisWithTenets.change/0 forward  13:11:11.542 [info] alter table kpis  13:11:11.542 [info] create index kpis_tenet_id_index  13:11:11.543 [info] == Migrated 20230505091631 in 0.0s  13:11:11.543 [info] == Running 20230505101413 Operately.Repo.Migrations.CreateKpiMetrics.change/0 forward  13:11:11.544 [info] create table kpi_metrics  13:11:11.544 [info] create index kpi_metrics_kpi_id_index  13:11:11.545 [info] == Migrated 20230505101413 in 0.0s  13:11:11.545 [info] == Running 20230505144357 Operately.Repo.Migrations.ConnectTenetsWithObjectives.change/0 forward  13:11:11.546 [info] alter table objectives  13:11:11.546 [info] create index objectives_tenet_id_index  13:11:11.547 [info] == Migrated 20230505144357 in 0.0s  13:11:11.547 [info] == Running 20230508072606 Operately.Repo.Migrations.AddStartedAtAndDeadlineToProjects.change/0 forward  13:11:11.547 [info] alter table projects  13:11:11.548 [info] == Migrated 20230508072606 in 0.0s  13:11:11.549 [info] == Running 20230509105957 Operately.Repo.Migrations.ConvertProjectDescriptionToLongString.change/0 forward  13:11:11.550 [info] alter table projects  13:11:11.550 [info] == Migrated 20230509105957 in 0.0s  13:11:11.551 [info] == Running 20230509112631 Operately.Repo.Migrations.AddOwnerIdToProjects.change/0 forward  13:11:11.551 [info] alter table projects  13:11:11.551 [info] create index projects_owner_id_index  13:11:11.552 [info] == Migrated 20230509112631 in 0.0s  13:11:11.552 [info] == Running 20230511081625 Operately.Repo.Migrations.CreateProjectMilestones.change/0 forward  13:11:11.553 [info] create table project_milestones  13:11:11.553 [info] create index project_milestones_project_id_index  13:11:11.554 [info] == Migrated 20230511081625 in 0.0s  13:11:11.554 [info] == Running 20230511123715 Operately.Repo.Migrations.AddStatusToProjectMilestones.change/0 forward  13:11:11.555 [info] alter table project_milestones  13:11:11.555 [info] == Migrated 20230511123715 in 0.0s  13:11:11.556 [info] == Running 20230511130648 Operately.Repo.Migrations.ConnectProjectsWithObjectives.change/0 forward  13:11:11.556 [info] alter table projects  13:11:11.557 [info] create index projects_objective_id_index  13:11:11.557 [info] == Migrated 20230511130648 in 0.0s  13:11:11.558 [info] == Running 20230511143354 Operately.Repo.Migrations.CreateProjectContributors.change/0 forward  13:11:11.558 [info] create table project_contributors  13:11:11.559 [info] create index project_contributors_project_id_index  13:11:11.559 [info] create index project_contributors_person_id_index  13:11:11.560 [info] == Migrated 20230511143354 in 0.0s  13:11:11.560 [info] == Running 20230514143822 Operately.Repo.Migrations.AddNextUpdateScheduledAtToProjects.change/0 forward  13:11:11.560 [info] alter table projects  13:11:11.561 [info] == Migrated 20230514143822 in 0.0s  13:11:11.561 [info] == Running 20230514150838 Operately.Repo.Migrations.AddPhasesToProjects.change/0 forward  13:11:11.561 [info] alter table projects  13:11:11.562 [info] == Migrated 20230514150838 in 0.0s  13:11:11.562 [info] == Running 20230516165829 Operately.Repo.Migrations.AddTypeToUpdates.change/0 forward  13:11:11.562 [info] alter table updates  13:11:11.563 [info] == Migrated 20230516165829 in 0.0s  13:11:11.563 [info] == Running 20230516165859 Operately.Repo.Migrations.ChangeContentToJsonbInUpdates.change/0 forward  13:11:11.564 [info] alter table updates  13:11:11.564 [info] == Migrated 20230516165859 in 0.0s  13:11:11.564 [info] == Running 20230518085735 :"Elixir.Operately.Repo.Migrations.Connect-people-with-the-company".change/0 forward  13:11:11.565 [info] alter table people  13:11:11.565 [info] create index people_company_id_index  13:11:11.566 [info] == Migrated 20230518085735 in 0.0s  13:11:11.566 [info] == Running 20230522145215 Operately.Repo.Migrations.ConvertProjectDescriptionToRichText.change/0 forward  13:11:11.567 [info] alter table projects  13:11:11.567 [info] == Migrated 20230522145215 in 0.0s  13:11:11.568 [info] == Running 20230524112942 Operately.Repo.Migrations.ChangeCommentContentTypeToJsonb.change/0 forward  13:11:11.568 [info] alter table comments  13:11:11.568 [info] == Migrated 20230524112942 in 0.0s  13:11:11.568 [info] == Running 20230525072607 Operately.Repo.Migrations.AddAcknowledgementsToUpdates.change/0 forward  13:11:11.569 [info] alter table updates  13:11:11.570 [info] create index updates_acknowledging_person_id_index  13:11:11.570 [info] == Migrated 20230525072607 in 0.0s  13:11:11.571 [info] == Running 20230525094352 Operately.Repo.Migrations.CreateReactions.change/0 forward  13:11:11.572 [info] create table reactions  13:11:11.573 [info] create index reactions_person_id_index  13:11:11.573 [info] == Migrated 20230525094352 in 0.0s  13:11:11.574 [info] == Running 20230531125654 Operately.Repo.Migrations.ChangeObjectiveDescriptionToRichText.change/0 forward  13:11:11.575 [info] alter table objectives  13:11:11.575 [info] == Migrated 20230531125654 in 0.0s  13:11:11.576 [info] == Running 20230613093854 Operately.Repo.Migrations.AddReviwerToProjects.change/0 forward  13:11:11.576 [info] alter table projects  13:11:11.577 [info] create index projects_reviewer_id_index  13:11:11.578 [info] == Migrated 20230613093854 in 0.0s  13:11:11.579 [info] == Running 20230616104714 Operately.Repo.Migrations.RemoveOwnerAndReviewerFromProjects.change/0 forward  13:11:11.579 [info] alter table projects  13:11:11.580 [info] == Migrated 20230616104714 in 0.0s  13:11:11.581 [info] == Running 20230616104947 Operately.Repo.Migrations.AddContributorRole.change/0 forward  13:11:11.581 [info] alter table project_contributors  13:11:11.582 [info] == Migrated 20230616104947 in 0.0s  13:11:11.582 [info] == Running 20230619081500 Operately.Repo.Migrations.CascadeDeletionFromUpdatesToComments.change/0 forward  13:11:11.582 [info] drop constraint comments_update_id_fkey from table comments  13:11:11.583 [info] alter table comments  13:11:11.583 [info] == Migrated 20230619081500 in 0.0s  13:11:11.584 [info] == Running 20230622091228 Operately.Repo.Migrations.CreateProjectDocuments.change/0 forward  13:11:11.584 [info] create table project_documents  13:11:11.585 [info] == Migrated 20230622091228 in 0.0s  13:11:11.586 [info] == Running 20230622091416 Operately.Repo.Migrations.AddDocumentLinksToProjects.change/0 forward  13:11:11.586 [info] alter table projects  13:11:11.587 [info] create index projects_pitch_document_id_index  13:11:11.588 [info] create index projects_plan_document_id_index  13:11:11.588 [info] create index projects_execution_review_document_id_index  13:11:11.589 [info] create index projects_control_review_document_id_index  13:11:11.589 [info] create index projects_retrospective_document_id_index  13:11:11.590 [info] == Migrated 20230622091416 in 0.0s  13:11:11.591 [info] == Running 20230622123346 Operately.Repo.Migrations.ChangeFkContraintOnProjectDocuments.change/0 forward  13:11:11.591 [info] drop constraint projects_pitch_document_id_fkey from table projects  13:11:11.591 [info] drop constraint projects_plan_document_id_fkey from table projects  13:11:11.591 [info] drop constraint projects_execution_review_document_id_fkey from table projects  13:11:11.592 [info] drop constraint projects_control_review_document_id_fkey from table projects  13:11:11.592 [info] drop constraint projects_retrospective_document_id_fkey from table projects  13:11:11.592 [info] alter table projects  13:11:11.594 [info] == Migrated 20230622123346 in 0.0s  13:11:11.595 [info] == Running 20230622124736 Operately.Repo.Migrations.AddAuthorIdToProjectDocuments.change/0 forward  13:11:11.595 [info] alter table project_documents  13:11:11.596 [info] == Migrated 20230622124736 in 0.0s  13:11:11.597 [info] == Running 20230627111445 Operately.Repo.Migrations.AddCompanyAndCreatorIdToProjects.change/0 forward  13:11:11.597 [info] alter table projects  13:11:11.598 [info] create index projects_company_id_index  13:11:11.598 [info] == Migrated 20230627111445 in 0.0s  13:11:11.599 [info] == Running 20230628075117 Operately.Repo.Migrations.CreateActivities.change/0 forward  13:11:11.599 [info] create table activities  13:11:11.600 [info] == Migrated 20230628075117 in 0.0s  13:11:11.600 [info] == Running 20230628083813 Operately.Repo.Migrations.AddPersonIdToActivities.change/0 forward  13:11:11.601 [info] alter table activities  13:11:11.601 [info] create index activities_person_id_index  13:11:11.602 [info] == Migrated 20230628083813 in 0.0s  13:11:11.602 [info] == Running 20230628091302 Operately.Repo.Migrations.AddScopeTypeAndScopeIdToActivities.change/0 forward  13:11:11.602 [info] alter table activities  13:11:11.603 [info] == Migrated 20230628091302 in 0.0s  13:11:11.603 [info] == Running 20230628111810 Operately.Repo.Migrations.AddEventDataToActivities.change/0 forward  13:11:11.603 [info] alter table activities  13:11:11.604 [info] == Migrated 20230628111810 in 0.0s  13:11:11.604 [info] == Running 20230703132310 Operately.Repo.Migrations.AddPhaseToProjectMilestones.change/0 forward  13:11:11.604 [info] alter table project_milestones  13:11:11.605 [info] == Migrated 20230703132310 in 0.0s  13:11:11.605 [info] == Running 20230704093525 Operately.Repo.Migrations.CascadeDeletionFromProjectToMilestones.change/0 forward  13:11:11.605 [info] drop constraint project_milestones_project_id_fkey from table project_milestones  13:11:11.606 [info] alter table project_milestones  13:11:11.607 [info] == Migrated 20230704093525 in 0.0s  13:11:11.607 [info] == Running 20230706114152 Operately.Repo.Migrations.CascadeDeleteFromProjectToContributors.change/0 forward  13:11:11.607 [info] drop constraint project_contributors_project_id_fkey from table project_contributors  13:11:11.608 [info] alter table project_contributors  13:11:11.608 [info] == Migrated 20230706114152 in 0.0s  13:11:11.609 [info] == Running 20230707132916 Operately.Repo.Migrations.CreatePeoplePins.change/0 forward  13:11:11.609 [info] create table people_pins  13:11:11.610 [info] create index people_pins_person_id_index  13:11:11.611 [info] == Migrated 20230707132916 in 0.0s  13:11:11.611 [info] == Running 20230707134247 Operately.Repo.Migrations.ChangePinedToPinnedInPeoplePins.change/0 forward  13:11:11.611 [info] rename column pined_id to pinned_id on table people_pins  13:11:11.612 [info] rename column pened_type to pinned_type on table people_pins  13:11:11.612 [info] == Migrated 20230707134247 in 0.0s  13:11:11.612 [info] == Running 20230707134647 Operately.Repo.Migrations.ChangeTypeOfPinnedTypeFromUuidToString.change/0 forward  13:11:11.613 [info] alter table people_pins  13:11:11.613 [info] == Migrated 20230707134647 in 0.0s  13:11:11.614 [info] == Running 20230711113953 Operately.Repo.Migrations.CreateDashboards.change/0 forward  13:11:11.614 [info] create table dashboards  13:11:11.615 [info] create index dashboards_company_id_index  13:11:11.616 [info] == Migrated 20230711113953 in 0.0s  13:11:11.616 [info] == Running 20230711114252 Operately.Repo.Migrations.CreateDashboardPanels.change/0 forward  13:11:11.616 [info] create table dashboard_panels  13:11:11.617 [info] create index dashboard_panels_dashboard_id_index  13:11:11.618 [info] == Migrated 20230711114252 in 0.0s  13:11:11.618 [info] == Running 20230711115223 Operately.Repo.Migrations.LinkHomeDashboardToPerson.change/0 forward  13:11:11.619 [info] alter table people  13:11:11.619 [info] == Migrated 20230711115223 in 0.0s  13:11:11.620 [info] == Running 20230711115703 Operately.Repo.Migrations.RemovePinsTable.change/0 forward  13:11:11.620 [info] drop table people_pins  13:11:11.620 [info] == Migrated 20230711115703 in 0.0s  13:11:11.621 [info] == Running 20230711122712 Operately.Repo.Migrations.AddTypeToPanels.change/0 forward  13:11:11.621 [info] alter table dashboard_panels  13:11:11.622 [info] == Migrated 20230711122712 in 0.0s  13:11:11.622 [info] == Running 20230712120056 Operately.Repo.Migrations.AddNotificationFieldsToPeople.change/0 forward  13:11:11.623 [info] alter table people  13:11:11.623 [info] == Migrated 20230712120056 in 0.0s  13:11:11.624 [info] == Running 20230713075537 Operately.Repo.Migrations.AddObanJobsTable.up/0 forward  13:11:11.642 [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"  13:11:11.644 [info] create table if not exists public.oban_jobs  13:11:11.645 [info] create index if not exists public.oban_jobs_queue_index  13:11:11.646 [info] create index if not exists public.oban_jobs_state_index  13:11:11.646 [info] create index if not exists public.oban_jobs_scheduled_at_index  13:11:11.647 [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"  13:11:11.647 [info] execute "DROP TRIGGER IF EXISTS oban_notify ON \"public\".oban_jobs"  13:11:11.647 [info] trigger "oban_notify" for relation "public.oban_jobs" does not exist, skipping  13:11:11.647 [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"  13:11:11.648 [info] drop index if exists public.oban_jobs_scheduled_at_index  13:11:11.648 [info] create index public.oban_jobs_scheduled_at_index  13:11:11.649 [info] create check constraint worker_length on table public.oban_jobs  13:11:11.649 [info] create check constraint queue_length on table public.oban_jobs  13:11:11.649 [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"  13:11:11.650 [info] alter table public.oban_jobs  13:11:11.650 [info] execute "DROP FUNCTION IF EXISTS \"public\".oban_wrap_id(value bigint)"  13:11:11.650 [info] drop index if exists public.oban_jobs_scheduled_at_index  13:11:11.650 [info] drop index if exists public.oban_jobs_queue_index  13:11:11.650 [info] drop index if exists public.oban_jobs_state_index  13:11:11.650 [info] create index if not exists public.oban_jobs_queue_state_scheduled_at_id_index  13:11:11.651 [info] create index if not exists public.oban_jobs_attempted_at_id_index  13:11:11.652 [info] alter table public.oban_jobs  13:11:11.652 [info] alter table public.oban_jobs  13:11:11.652 [info] drop index if exists public.oban_jobs_queue_state_scheduled_at_id_index  13:11:11.653 [info] create index if not exists public.oban_jobs_state_queue_priority_scheduled_at_id_index  13:11:11.653 [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"  13:11:11.654 [info] execute "DROP TRIGGER IF EXISTS oban_notify ON \"public\".oban_jobs"  13:11:11.654 [info] execute "CREATE TRIGGER oban_notify\nAFTER INSERT ON \"public\".oban_jobs\nFOR EACH ROW EXECUTE PROCEDURE \"public\".oban_jobs_notify();\n"  13:11:11.654 [info] alter table public.oban_jobs  13:11:11.658 [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"  13:11:11.658 [info] create index if not exists public.oban_jobs_state_queue_priority_scheduled_at_id_index  13:11:11.659 [info] relation "oban_jobs_state_queue_priority_scheduled_at_id_index" already exists, skipping  13:11:11.659 [info] alter table public.oban_jobs  13:11:11.660 [info] create check constraint priority_range on table public.oban_jobs  13:11:11.660 [info] create check constraint positive_max_attempts on table public.oban_jobs  13:11:11.660 [info] create check constraint attempt_range on table public.oban_jobs  13:11:11.660 [info] drop index if exists public.oban_jobs_args_vector  13:11:11.661 [info] index "oban_jobs_args_vector" does not exist, skipping  13:11:11.661 [info] drop index if exists public.oban_jobs_worker_gist  13:11:11.661 [info] index "oban_jobs_worker_gist" does not exist, skipping  13:11:11.661 [info] drop index if exists public.oban_jobs_attempted_at_id_index  13:11:11.661 [info] create index if not exists public.oban_jobs_args_index  13:11:11.662 [info] create index if not exists public.oban_jobs_meta_index  13:11:11.662 [info] create table if not exists public.oban_peers  13:11:11.663 [info] execute "ALTER TABLE \"public\".oban_peers SET UNLOGGED"  13:11:11.664 [info] execute "COMMENT ON TABLE \"public\".oban_jobs IS '11'"  13:11:11.664 [info] == Migrated 20230713075537 in 0.0s  13:11:11.665 [info] == Running 20230727123601 :"Elixir.Operately.Repo.Migrations.Add-health-to-projects".change/0 forward  13:11:11.665 [info] alter table projects  13:11:11.666 [info] == Migrated 20230727123601 in 0.0s  13:11:11.666 [info] == Running 20230727150528 Operately.Repo.Migrations.AddPreviousAndNewPhases.change/0 forward  13:11:11.667 [info] alter table updates  13:11:11.667 [info] == Migrated 20230727150528 in 0.0s  13:11:11.667 [info] == Running 20230727152311 Operately.Repo.Migrations.AddPreviousAndNewHealthToUpdates.change/0 forward  13:11:11.668 [info] alter table updates  13:11:11.668 [info] == Migrated 20230727152311 in 0.0s  13:11:11.669 [info] == Running 20230728094435 :"Elixir.Operately.Repo.Migrations.Add-title-to-updates".change/0 forward  13:11:11.669 [info] alter table updates  13:11:11.669 [info] == Migrated 20230728094435 in 0.0s  13:11:11.670 [info] == Running 20230814102152 Operately.Repo.Migrations.CreateProjectKeyResources.change/0 forward  13:11:11.670 [info] create table project_key_resources  13:11:11.671 [info] create index project_key_resources_project_id_index  13:11:11.672 [info] == Migrated 20230814102152 in 0.0s  13:11:11.672 [info] == Running 20230815092629 Operately.Repo.Migrations.RemoveProjectKeyResourceTypeColumn.change/0 forward  13:11:11.672 [info] alter table project_key_resources  13:11:11.673 [info] == Migrated 20230815092629 in 0.0s  13:11:11.673 [info] == Running 20230825093602 Operately.Repo.Migrations.CreateProjectPhaseHistory.change/0 forward  13:11:11.673 [info] create table project_phase_history  13:11:11.674 [info] create index project_phase_history_project_id_index  13:11:11.675 [info] == Migrated 20230825093602 in 0.0s  13:11:11.676 [info] == Running 20230825131508 Operately.Repo.Migrations.CascadeDeleteFromProjectsToPhaseHistory.change/0 forward  13:11:11.676 [info] drop constraint project_phase_history_project_id_fkey from table project_phase_history  13:11:11.676 [info] alter table project_phase_history  13:11:11.677 [info] == Migrated 20230825131508 in 0.0s  13:11:11.677 [info] == Running 20230829111211 Operately.Repo.Migrations.AddCompletedAtToMilestones.change/0 forward  13:11:11.678 [info] alter table project_milestones  13:11:11.678 [info] == Migrated 20230829111211 in 0.0s  13:11:11.679 [info] == Running 20230830144428 Operately.Repo.Migrations.AddPrivateFieldToProjects.change/0 forward  13:11:11.679 [info] alter table projects  13:11:11.679 [info] == Migrated 20230830144428 in 0.0s  13:11:11.680 [info] == Running 20230902090224 Operately.Repo.Migrations.AllowSoftDeletionOfMilestones.change/0 forward  13:11:11.680 [info] alter table project_milestones  13:11:11.680 [info] == Migrated 20230902090224 in 0.0s  13:11:11.681 [info] == Running 20230906134049 Operately.Repo.Migrations.AddDueDateToPhaseHistory.change/0 forward  13:11:11.681 [info] alter table project_phase_history  13:11:11.681 [info] == Migrated 20230906134049 in 0.0s  13:11:11.682 [info] == Running 20230906144914 Operately.Repo.Migrations.RenameDueDateToDueTime.change/0 forward  13:11:11.682 [info] rename column due_date to due_time on table project_phase_history  13:11:11.682 [info] == Migrated 20230906144914 in 0.0s  13:11:11.683 [info] == Running 20230912141827 Operately.Repo.Migrations.AllowSoftDeletionOfProjects.change/0 forward  13:11:11.683 [info] alter table projects  13:11:11.683 [info] == Migrated 20230912141827 in 0.0s  13:11:11.684 [info] == Running 20230918105247 Operately.Repo.Migrations.CreateBlobs.change/0 forward  13:11:11.684 [info] create table blobs  13:11:11.685 [info] create index blobs_author_id_index  13:11:11.686 [info] == Migrated 20230918105247 in 0.0s  13:11:11.686 [info] == Running 20230918112716 Operately.Repo.Migrations.AddCompanyIdToBlobs.change/0 forward  13:11:11.686 [info] alter table blobs  13:11:11.687 [info] == Migrated 20230918112716 in 0.0s  13:11:11.688 [info] == Running 20230921124542 Operately.Repo.Migrations.AddMilestoneDescription.change/0 forward  13:11:11.688 [info] alter table project_milestones  13:11:11.688 [info] == Migrated 20230921124542 in 0.0s  13:11:11.689 [info] == Running 20230922120254 Operately.Repo.Migrations.CreateMilestoneComments.change/0 forward  13:11:11.689 [info] create table milestone_comments  13:11:11.690 [info] create index milestone_comments_comment_id_index  13:11:11.690 [info] create index milestone_comments_milestone_id_index  13:11:11.691 [info] == Migrated 20230922120254 in 0.0s  13:11:11.691 [info] == Running 20231002141938 Operately.Repo.Migrations.CreateProjectReviewRequests.change/0 forward  13:11:11.692 [info] create table project_review_requests  13:11:11.693 [info] create index project_review_requests_project_id_index  13:11:11.693 [info] create index project_review_requests_author_id_index  13:11:11.694 [info] == Migrated 20231002141938 in 0.0s  13:11:11.694 [info] == Running 20231006094542 Operately.Repo.Migrations.AddStatusToReviewRequests.change/0 forward  13:11:11.695 [info] alter table project_review_requests  13:11:11.695 [info] == Migrated 20231006094542 in 0.0s  13:11:11.696 [info] == Running 20231018133434 Operately.Repo.Migrations.CreateNotifications.change/0 forward  13:11:11.696 [info] create table notifications  13:11:11.697 [info] create index notifications_activity_id_index  13:11:11.698 [info] create index notifications_person_id_index  13:11:11.698 [info] == Migrated 20231018133434 in 0.0s  13:11:11.699 [info] == Running 20231020102017 Operately.Repo.Migrations.AddAuthorIdToActivities.change/0 forward  13:11:11.699 [info] alter table activities  13:11:11.699 [info] == Migrated 20231020102017 in 0.0s  13:11:11.700 [info] == Running 20231020110351 Operately.Repo.Migrations.AddActionToActivity.change/0 forward  13:11:11.700 [info] alter table activities  13:11:11.700 [info] == Migrated 20231020110351 in 0.0s  13:11:11.701 [info] == Running 20231020110437 Operately.Repo.Migrations.AddContentToActivity.change/0 forward  13:11:11.701 [info] alter table activities  13:11:11.701 [info] == Migrated 20231020110437 in 0.0s  13:11:11.702 [info] == Running 20231030105143 Operately.Repo.Migrations.RemovePersonHandle.change/0 forward  13:11:11.702 [info] alter table people  13:11:11.702 [info] == Migrated 20231030105143 in 0.0s  13:11:11.703 [info] == Running 20231108141211 Operately.Repo.Migrations.AddThemeToPeople.change/0 forward  13:11:11.703 [info] alter table people  13:11:11.704 [info] == Migrated 20231108141211 in 0.0s  13:11:11.704 [info] == Running 20231112102057 Operately.Repo.Migrations.AddIconAndColorToGroups.change/0 forward  13:11:11.704 [info] alter table groups  13:11:11.705 [info] == Migrated 20231112102057 in 0.0s  13:11:11.705 [info] == Running 20231121141905 Operately.Repo.Migrations.AddResourceTypeToProjectKeyResources.change/0 forward  13:11:11.705 [info] alter table project_key_resources  13:11:11.706 [info] == Migrated 20231121141905 in 0.0s  13:11:11.706 [info] == Running 20231124145333 Operately.Repo.Migrations.AddStatusToProjects.change/0 forward  13:11:11.706 [info] alter table projects  13:11:11.707 [info] == Migrated 20231124145333 in 0.0s  13:11:11.707 [info] == Running 20231126103410 Operately.Repo.Migrations.AddCompanyRoleToPeople.change/0 forward  13:11:11.707 [info] alter table people  13:11:11.708 [info] == Migrated 20231126103410 in 0.0s  13:11:11.708 [info] == Running 20231129135524 Operately.Repo.Migrations.AddTrustedEmailDomainsToCompany.change/0 forward  13:11:11.709 [info] alter table companies  13:11:11.709 [info] == Migrated 20231129135524 in 0.0s  13:11:11.709 [info] == Running 20231204133503 Operately.Repo.Migrations.AddEnabledExperimentalFeaturesToCompanies.change/0 forward  13:11:11.710 [info] alter table companies  13:11:11.710 [info] == Migrated 20231204133503 in 0.0s  13:11:11.710 [info] == Running 20231205124721 Operately.Repo.Migrations.CreateGoals.change/0 forward  13:11:11.711 [info] create table goals  13:11:11.711 [info] create index goals_group_id_index  13:11:11.712 [info] == Migrated 20231205124721 in 0.0s  13:11:11.713 [info] == Running 20231205173143 Operately.Repo.Migrations.AddPeopleToGoals.change/0 forward  13:11:11.713 [info] alter table goals  13:11:11.714 [info] == Migrated 20231205173143 in 0.0s  13:11:11.715 [info] == Running 20231205174631 Operately.Repo.Migrations.AddCompanyIdToGroups.change/0 forward  13:11:11.715 [info] alter table groups  13:11:11.715 [info] == Migrated 20231205174631 in 0.0s  13:11:11.716 [info] == Running 20231205175319 Operately.Repo.Migrations.AddTimeframeToGoals.change/0 forward  13:11:11.716 [info] alter table goals  13:11:11.717 [info] == Migrated 20231205175319 in 0.0s  13:11:11.717 [info] == Running 20231213151653 Operately.Repo.Migrations.CreateTargets.change/0 forward  13:11:11.718 [info] create table targets  13:11:11.719 [info] create index targets_goal_id_index  13:11:11.719 [info] == Migrated 20231213151653 in 0.0s  13:11:11.720 [info] == Running 20231213205153 Operately.Repo.Migrations.AddIndexToGoals.change/0 forward  13:11:11.720 [info] alter table targets  13:11:11.720 [info] == Migrated 20231213205153 in 0.0s  13:11:11.721 [info] == Running 20231221132148 Operately.Repo.Migrations.AddGoalIdToProjects.change/0 forward  13:11:11.721 [info] alter table projects  13:11:11.722 [info] == Migrated 20231221132148 in 0.0s  13:11:11.722 [info] == Running 20231221192557 Operately.Repo.Migrations.AddNextUpdateScheduledAtToGoals.change/0 forward  13:11:11.722 [info] alter table goals  13:11:11.723 [info] == Migrated 20231221192557 in 0.0s  13:11:11.723 [info] == Running 20231221192826 Operately.Repo.Migrations.AddValueToTargets.change/0 forward  13:11:11.723 [info] alter table targets  13:11:11.725 [info] == Migrated 20231221192826 in 0.0s  13:11:11.726 [info] == Running 20240110150435 Operately.Repo.Migrations.AddManagerIdToPeople.change/0 forward  13:11:11.726 [info] alter table people  13:11:11.727 [info] == Migrated 20240110150435 in 0.0s  13:11:11.727 [info] == Running 20240115155515 Operately.Repo.Migrations.AddCompanySpaceIdToCompanies.change/0 forward  13:11:11.727 [info] alter table companies  13:11:11.728 [info] == Migrated 20240115155515 in 0.0s  13:11:11.729 [info] == Running 20240124110949 Operately.Repo.Migrations.AddDeletedAtToGroups.change/0 forward  13:11:11.729 [info] alter table groups  13:11:11.729 [info] == Migrated 20240124110949 in 0.0s  13:11:11.730 [info] == Running 20240207091524 Operately.Repo.Migrations.AddDescriptionToGoals.change/0 forward  13:11:11.730 [info] alter table goals  13:11:11.730 [info] == Migrated 20240207091524 in 0.0s  13:11:11.731 [info] == Running 20240212132752 Operately.Repo.Migrations.CreateTasks.change/0 forward  13:11:11.731 [info] create table tasks  13:11:11.732 [info] create index tasks_assignee_id_index  13:11:11.733 [info] create index tasks_space_id_index  13:11:11.733 [info] == Migrated 20240212132752 in 0.0s  13:11:11.734 [info] == Running 20240212133903 Operately.Repo.Migrations.AddCreatorIdToTasks.change/0 forward  13:11:11.734 [info] alter table tasks  13:11:11.735 [info] == Migrated 20240212133903 in 0.0s  13:11:11.735 [info] == Running 20240213125012 Operately.Repo.Migrations.AddStatusToTasks.change/0 forward  13:11:11.735 [info] alter table tasks  13:11:11.736 [info] == Migrated 20240213125012 in 0.0s  13:11:11.736 [info] == Running 20240213132735 Operately.Repo.Migrations.AddClosedAtToTasks.change/0 forward  13:11:11.736 [info] alter table tasks  13:11:11.737 [info] == Migrated 20240213132735 in 0.0s  13:11:11.737 [info] == Running 20240213134551 Operately.Repo.Migrations.AddReopenedAtToTasks.change/0 forward  13:11:11.737 [info] alter table tasks  13:11:11.738 [info] == Migrated 20240213134551 in 0.0s  13:11:11.738 [info] == Running 20240213163203 Operately.Repo.Migrations.CreateTaskAssignees.change/0 forward  13:11:11.739 [info] create table task_assignees  13:11:11.739 [info] create index task_assignees_task_id_index  13:11:11.740 [info] create index task_assignees_person_id_index  13:11:11.740 [info] == Migrated 20240213163203 in 0.0s  13:11:11.741 [info] == Running 20240215132532 Operately.Repo.Migrations.AddMilestoneIdToTasks.change/0 forward  13:11:11.741 [info] alter table tasks  13:11:11.742 [info] == Migrated 20240215132532 in 0.0s  13:11:11.742 [info] == Running 20240219162003 Operately.Repo.Migrations.AddIndexToTasks.change/0 forward  13:11:11.743 [info] alter table tasks  13:11:11.743 [info] == Migrated 20240219162003 in 0.0s  13:11:11.743 [info] == Running 20240220083809 Operately.Repo.Migrations.DropIndexFromTasks.change/0 forward  13:11:11.744 [info] alter table tasks  13:11:11.744 [info] == Migrated 20240220083809 in 0.0s  13:11:11.744 [info] == Running 20240220084034 Operately.Repo.Migrations.AddTasksKanbanStateToMilestones.change/0 forward  13:11:11.745 [info] alter table project_milestones  13:11:11.745 [info] == Migrated 20240220084034 in 0.0s  13:11:11.746 [info] == Running 20240222124908 Operately.Repo.Migrations.IntroduceProjectCheckInsTable.change/0 forward  13:11:11.746 [info] create table project_check_ins  13:11:11.747 [info] == Migrated 20240222124908 in 0.0s  13:11:11.748 [info] == Running 20240222142200 Operately.Repo.Migrations.AddLastCheckInIdToProjects.change/0 forward  13:11:11.748 [info] alter table projects  13:11:11.748 [info] == Migrated 20240222142200 in 0.0s  13:11:11.749 [info] == Running 20240222142828 Operately.Repo.Migrations.AddLastCheckInStatusToProjects.change/0 forward  13:11:11.749 [info] alter table projects  13:11:11.749 [info] == Migrated 20240222142828 in 0.0s  13:11:11.750 [info] == Running 20240222143005 Operately.Repo.Migrations.AddNextCheckInScheduledAtToProjects.change/0 forward  13:11:11.750 [info] alter table projects  13:11:11.750 [info] == Migrated 20240222143005 in 0.0s  13:11:11.751 [info] == Running 20240222152957 Operately.Repo.Migrations.AddAuthorIdToProjectCheckIns.change/0 forward  13:11:11.751 [info] alter table project_check_ins  13:11:11.752 [info] == Migrated 20240222152957 in 0.0s  13:11:11.753 [info] == Running 20240222160352 Operately.Repo.Migrations.AddAcknowledgedByAndAcknowledgedAtToProjectCheckIns.change/0 forward  13:11:11.753 [info] alter table project_check_ins  13:11:11.753 [info] == Migrated 20240222160352 in 0.0s  13:11:11.754 [info] == Running 20240223094246 Operately.Repo.Migrations.AddEmojiToReactions.change/0 forward  13:11:11.754 [info] alter table reactions  13:11:11.754 [info] == Migrated 20240223094246 in 0.0s  13:11:11.755 [info] == Running 20240223102632 Operately.Repo.Migrations.AddEntityIdAndEntityTypeToComments.change/0 forward  13:11:11.755 [info] alter table comments  13:11:11.756 [info] == Migrated 20240223102632 in 0.0s  13:11:11.756 [info] == Running 20240308145459 Operately.Repo.Migrations.AddParentGoalIdToGoals.change/0 forward  13:11:11.756 [info] alter table goals  13:11:11.757 [info] == Migrated 20240308145459 in 0.0s  13:11:11.758 [info] == Running 20240312101625 Operately.Repo.Migrations.AddClosedByToProjects.change/0 forward  13:11:11.758 [info] alter table projects  13:11:11.758 [info] == Migrated 20240312101625 in 0.0s  13:11:11.759 [info] == Running 20240329083952 Operately.Repo.Migrations.AddClosedAtAndClosedByIdToGoals.change/0 forward  13:11:11.759 [info] alter table goals  13:11:11.760 [info] == Migrated 20240329083952 in 0.0s  13:11:11.761 [info] == Running 20240429090347 Operately.Repo.Migrations.RenameGoalTimeframeToDeprecatedTimeframe.change/0 forward  13:11:11.761 [info] rename column timeframe to deprecated_timeframe on table goals  13:11:11.761 [info] == Migrated 20240429090347 in 0.0s  13:11:11.762 [info] == Running 20240429090939 Operately.Repo.Migrations.AddTimeframeJsonbToGoals.change/0 forward  13:11:11.762 [info] alter table goals  13:11:11.762 [info] == Migrated 20240429090939 in 0.0s  13:11:11.763 [info] == Running 20240430151122 Operately.Repo.Migrations.AddSuspendedFieldToPeople.change/0 forward  13:11:11.763 [info] alter table people  13:11:11.763 [info] == Migrated 20240430151122 in 0.0s  13:11:11.764 [info] == Running 20240430151356 Operately.Repo.Migrations.AddSuspendedAtToPeople.change/0 forward  13:11:11.764 [info] alter table people  13:11:11.764 [info] == Migrated 20240430151356 in 0.0s  13:11:11.765 [info] == Running 20240502134600 Operately.Repo.Migrations.AddCommentThreadsTable.change/0 forward  13:11:11.765 [info] create table comment_threads  13:11:11.766 [info] == Migrated 20240502134600 in 0.0s  13:11:11.767 [info] == Running 20240502140047 Operately.Repo.Migrations.AddCommentThreadIdToActivities.change/0 forward  13:11:11.767 [info] alter table activities  13:11:11.767 [info] == Migrated 20240502140047 in 0.0s  13:11:11.768 [info] == Running 20240503140142 Operately.Repo.Migrations.AddParentToThreads.change/0 forward  13:11:11.768 [info] alter table comment_threads  13:11:11.768 [info] == Migrated 20240503140142 in 0.0s  13:11:11.769 [info] == Running 20240509115125 Operately.Repo.Migrations.AddSuccessToGoals.change/0 forward  13:11:11.769 [info] alter table goals  13:11:11.769 [info] == Migrated 20240509115125 in 0.0s  13:11:11.770 [info] == Running 20240516142551 Operately.Repo.Migrations.AddTitlesToCommentThreads.change/0 forward  13:11:11.770 [info] alter table comment_threads  13:11:11.770 [info] == Migrated 20240516142551 in 0.0s  13:11:11.771 [info] == Running 20240522152329 Operately.Repo.Migrations.AddTimezoneToPeople.change/0 forward  13:11:11.771 [info] alter table people  13:11:11.772 [info] == Migrated 20240522152329 in 0.0s  13:11:11.772 [info] == Running 20240529105412 Operately.Repo.Migrations.CreateInvitations.change/0 forward  13:11:11.772 [info] create table invitations  13:11:11.773 [info] create index invitations_admin_id_index  13:11:11.774 [info] create index invitations_member_id_index  13:11:11.774 [info] == Migrated 20240529105412 in 0.0s  13:11:11.775 [info] == Running 20240529124732 Operately.Repo.Migrations.CreateInvitationTokens.change/0 forward  13:11:11.775 [info] create table invitation_tokens  13:11:11.776 [info] create index invitation_tokens_invitation_id_index  13:11:11.776 [info] == Migrated 20240529124732 in 0.0s  13:11:11.777 [info] == Running 20240531140759 Operately.Repo.Migrations.RemoveAdminNameFromInvitation.change/0 forward  13:11:11.777 [info] alter table invitations  13:11:11.777 [info] == Migrated 20240531140759 in 0.0s  13:11:11.778 [info] == Running 20240606221834 Operately.Repo.Migrations.CreateAccessContexts.change/0 forward  13:11:11.778 [info] create table access_contexts  13:11:11.779 [info] == Migrated 20240606221834 in 0.0s  13:11:11.780 [info] == Running 20240606222242 Operately.Repo.Migrations.CreateAccessGroups.change/0 forward  13:11:11.780 [info] create table access_groups  13:11:11.781 [info] == Migrated 20240606222242 in 0.0s  13:11:11.781 [info] == Running 20240606222753 Operately.Repo.Migrations.CreateAccessBindings.change/0 forward  13:11:11.782 [info] create table access_bindings  13:11:11.782 [info] create index access_bindings_group_id_index  13:11:11.783 [info] create index access_bindings_context_id_index  13:11:11.783 [info] == Migrated 20240606222753 in 0.0s  13:11:11.784 [info] == Running 20240606224931 Operately.Repo.Migrations.CreateAccessGroupMemberships.change/0 forward  13:11:11.784 [info] create table access_group_memberships  13:11:11.785 [info] create index access_group_memberships_person_id_index  13:11:11.786 [info] create index access_group_memberships_group_id_index  13:11:11.786 [info] == Migrated 20240606224931 in 0.0s  13:11:11.787 [info] == Running 20240609153530 Operately.Repo.Migrations.AddStorageType.change/0 forward  13:11:11.787 [info] alter table blobs  13:11:11.788 [info] == Migrated 20240609153530 in 0.0s  13:11:11.788 [info] == Running 20240610091322 Operately.Repo.Migrations.AddProjectAccessContext.change/0 forward  13:11:11.788 [info] alter table access_contexts  13:11:11.789 [info] create index access_contexts_project_id_index  13:11:11.790 [info] == Migrated 20240610091322 in 0.0s  13:11:11.790 [info] == Running 20240610184000 Operately.Repo.Migrations.AddGroupAccessContext.change/0 forward  13:11:11.791 [info] alter table access_contexts  13:11:11.791 [info] create index access_contexts_group_id_index  13:11:11.792 [info] == Migrated 20240610184000 in 0.0s  13:11:11.792 [info] == Running 20240610194000 Operately.Repo.Migrations.AddActivityAccessContext.change/0 forward  13:11:11.793 [info] alter table activities  13:11:11.793 [info] create index activities_context_id_index  13:11:11.794 [info] == Migrated 20240610194000 in 0.0s  13:11:11.795 [info] == Running 20240610204000 Operately.Repo.Migrations.AddCompanyAccessContext.change/0 forward  13:11:11.795 [info] alter table access_contexts  13:11:11.795 [info] create index access_contexts_company_id_index  13:11:11.796 [info] == Migrated 20240610204000 in 0.0s  13:11:11.797 [info] == Running 20240612151600 Operately.Repo.Migrations.AddGoalAccessContext.change/0 forward  13:11:11.797 [info] alter table access_contexts  13:11:11.797 [info] create index access_contexts_goal_id_index  13:11:11.798 [info] == Migrated 20240612151600 in 0.0s  13:11:11.798 [info] == Running 20240613093658 Operately.Repo.Migrations.AddBlobIdToPeopleTable.change/0 forward  13:11:11.799 [info] alter table people  13:11:11.799 [info] == Migrated 20240613093658 in 0.0s  13:11:11.800 [info] == Running 20240625115345 Operately.Repo.Migrations.AddGroupIdFieldToAccessGroupsTable.change/0 forward  13:11:11.800 [info] alter table access_groups  13:11:11.801 [info] create index access_groups_group_id_index  13:11:11.801 [info] == Migrated 20240625115345 in 0.0s  13:11:11.802 [info] == Running 20240627084024 Operately.Repo.Migrations.AddPersonIdFieldToAccessGroupsSchema.change/0 forward  13:11:11.802 [info] alter table access_groups  13:11:11.803 [info] create index access_groups_person_id_index  13:11:11.803 [info] == Migrated 20240627084024 in 0.0s  13:11:11.804 [info] == Running 20240627143843 Operately.Repo.Migrations.AddSizeToBlobs.change/0 forward  13:11:11.804 [info] alter table blobs  13:11:11.805 [info] == Migrated 20240627143843 in 0.0s  13:11:11.805 [info] == Running 20240627144248 Operately.Repo.Migrations.AddContentTypeToBlobs.change/0 forward  13:11:11.805 [info] alter table blobs  13:11:11.806 [info] == Migrated 20240627144248 in 0.0s  13:11:11.806 [info] == Running 20240628081627 Operately.Repo.Migrations.AddCompanyIdFieldToAccessGroupsSchema.change/0 forward  13:11:11.807 [info] alter table access_groups  13:11:11.807 [info] create index access_groups_company_id_index  13:11:11.808 [info] == Migrated 20240628081627 in 0.0s  13:11:11.808 [info] == Running 20240628084820 Operately.Repo.Migrations.AddTagFieldToAccessGroupSchema.change/0 forward  13:11:11.808 [info] alter table access_groups  13:11:11.809 [info] == Migrated 20240628084820 in 0.0s  13:11:11.810 [info] == Running 20240701134437 Operately.Repo.Migrations.AddShortIdToCompanies.change/0 forward  13:11:11.810 [info] alter table companies  13:11:11.810 [info] == Migrated 20240701134437 in 0.0s  13:11:11.811 [info] == Running 20240701150412 Operately.Repo.Migrations.AddUniqueConstraintToCompanyShortId.change/0 forward  13:11:11.811 [info] create index companies_short_id_index  13:11:11.812 [info] == Migrated 20240701150412 in 0.0s  13:11:11.813 [info] == Running 20240712101332 Operately.Repo.Migrations.AddTagPropertyToBindingsTable.change/0 forward  13:11:11.813 [info] alter table access_bindings  13:11:11.813 [info] == Migrated 20240712101332 in 0.0s  13:11:11.814 [info] == Running 20240725091444 Operately.Repo.Migrations.AddHasOpenInvitationFieldToPeople.change/0 forward  13:11:11.814 [info] alter table people  13:11:11.814 [info] == Migrated 20240725091444 in 0.0s  13:11:11.815 [info] == Running 20240730162256 Operately.Repo.Migrations.RenameActivityContextIdToActivityAccessContextId.change/0 forward  13:11:11.815 [info] rename column context_id to access_context_id on table activities  13:11:11.816 [info] == Migrated 20240730162256 in 0.0s  13:11:11.817 [info] == Running 20240801153306 Operately.Repo.Migrations.AddFullNameToAccounts.change/0 forward  13:11:11.817 [info] alter table accounts  13:11:11.818 [info] == Migrated 20240801153306 in 0.0s  13:11:11.819 [info] == Running 20240827092026 Operately.Repo.Migrations.CreateSubscriptionLists.change/0 forward  13:11:11.819 [info] create table subscription_lists  13:11:11.820 [info] == Migrated 20240827092026 in 0.0s  13:11:11.821 [info] == Running 20240827092208 Operately.Repo.Migrations.CreateSubscriptions.change/0 forward  13:11:11.821 [info] create table subscriptions  13:11:11.823 [info] create index subscriptions_subscription_list_id_index  13:11:11.823 [info] create index subscriptions_person_id_index  13:11:11.824 [info] == Migrated 20240827092208 in 0.0s  13:11:11.825 [info] == Running 20240828132022 Operately.Repo.Migrations.AddSubscriptionListRelationshipWithProjectCheckInTable.change/0 forward  13:11:11.825 [info] alter table project_check_ins  13:11:11.827 [info] create index project_check_ins_subscription_list_id_index  13:11:11.828 [info] == Migrated 20240828132022 in 0.0s  13:11:11.829 [info] == Running 20240909112047 Operately.Repo.Migrations.AddCanceledFieldToSubscriptionsSchema.change/0 forward  13:11:11.829 [info] alter table subscriptions  13:11:11.829 [info] == Migrated 20240909112047 in 0.0s  13:11:11.830 [info] == Running 20240911170712 Operately.Repo.Migrations.CopyGoalCheckInsFromUpdatesToNewTable.up/0 forward  13:11:11.831 [info] execute "CREATE TABLE goal_updates AS SELECT * FROM updates WHERE updates.type = 'goal_check_in';"  13:11:11.832 [info] execute "ALTER TABLE goal_updates ADD CONSTRAINT goal_updates_pkey PRIMARY KEY (id);"  13:11:11.833 [info] alter table goal_updates  13:11:11.833 [info] create index goal_updates_goal_id_index  13:11:11.839 [debug] QUERY OK source="goal_updates" db=0.1ms SELECT g0."id", g0."updatable_id", g0."content" FROM "goal_updates" AS g0 [] ↳ Operately.Repo.Migrations.CopyGoalCheckInsFromUpdatesToNewTable.update_fields/0, at: priv/repo/migrations/20240911170712_copy_goal_check_ins_from_updates_to_new_table.exs:47  13:11:11.839 [info] alter table goal_updates  13:11:11.840 [info] rename column acknowledging_person_id to acknowledged_by_id on table goal_updates  13:11:11.840 [info] == Migrated 20240911170712 in 0.0s  13:11:11.841 [info] == Running 20240912132541 Operately.Repo.Migrations.UpdateCommentsEntityTypeValueToGoalCheckIn.up/0 forward  13:11:11.845 [debug] QUERY OK source="comments" db=0.2ms UPDATE "comments" AS c0 SET "entity_type" = $1 WHERE (c0."entity_id" IN (SELECT sg0."id" FROM "goal_updates" AS sg0)) [:goal_update] ↳ Ecto.Migration.Runner.perform_operation/3, at: lib/ecto/migration/runner.ex:310  13:11:11.845 [info] == Migrated 20240912132541 in 0.0s  13:11:11.846 [info] == Running 20240912145520 Operately.Repo.Migrations.UpdateReactionsEntityTypeToGoalUpdate.up/0 forward  13:11:11.848 [debug] QUERY OK source="reactions" db=0.2ms UPDATE "reactions" AS r0 SET "entity_type" = $1 WHERE (r0."entity_id" IN (SELECT sg0."id" FROM "goal_updates" AS sg0)) [:goal_update] ↳ Ecto.Migration.Runner.perform_operation/3, at: lib/ecto/migration/runner.ex:310  13:11:11.849 [info] == Migrated 20240912145520 in 0.0s  13:11:11.850 [info] == Running 20240914202720 Operately.Repo.Migrations.AddSubscriptionListRelationshipWithGoalUpdateTable.change/0 forward  13:11:11.850 [info] alter table goal_updates  13:11:11.850 [info] create index goal_updates_subscription_list_id_index  13:11:11.851 [info] == Migrated 20240914202720 in 0.0s  13:11:11.852 [info] == Running 20240916140730 Operately.Repo.Migrations.CreateSubscriptionsListForExistingGoalUpdates.up/0 forward  13:11:11.854 [debug] QUERY OK source="goal_updates" db=0.1ms SELECT g0."id", g0."subscription_list_id" FROM "goal_updates" AS g0 [] ↳ anonymous fn/0 in Operately.Data.Change028CreateSubscriptionsListForGoalUpdates.run/0, at: lib/operately/data/change_028_create_subscriptions_list_for_goal_updates.ex:10  13:11:11.854 [info] == Migrated 20240916140730 in 0.0s  13:11:11.855 [info] == Running 20240916184443 Operately.Repo.Migrations.CreateSubcriptionsListForExistingProjectCheckIns.up/0 forward  13:11:11.857 [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  13:11:11.857 [info] == Migrated 20240916184443 in 0.0s  13:11:11.858 [info] == Running 20240917173757 Operately.Repo.Migrations.CopyDiscussionsFromUpdatesToMessagesTable.up/0 forward  13:11:11.858 [info] execute "CREATE TABLE messages AS SELECT * FROM updates WHERE updates.type = 'project_discussion';"  13:11:11.859 [info] execute "ALTER TABLE messages ADD CONSTRAINT messages_pkey PRIMARY KEY (id);"  13:11:11.860 [info] alter table messages  13:11:11.860 [info] create index messages_space_id_index  13:11:11.861 [info] create index messages_author_id_index  13:11:11.862 [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  13:11:11.862 [info] alter table messages  13:11:11.862 [info] == Migrated 20240917173757 in 0.0s  13:11:11.863 [info] == Running 20240918101843 Operately.Repo.Migrations.UpdateCommentEntityTypeValueToMessage.up/0 forward  13:11:11.865 [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  13:11:11.865 [info] == Migrated 20240918101843 in 0.0s  13:11:11.866 [info] == Running 20240918102916 Operately.Repo.Migrations.UpdateReactionEntityTypeValueToMessage.up/0 forward  13:11:11.867 [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  13:11:11.867 [info] == Migrated 20240918102916 in 0.0s  13:11:11.867 [info] == Running 20240918182641 Operately.Repo.Migrations.AddSubscriptionListRelationshipWithMessagesTable.change/0 forward  13:11:11.868 [info] alter table messages  13:11:11.868 [info] create index messages_subscription_list_id_index  13:11:11.869 [info] == Migrated 20240918182641 in 0.0s  13:11:11.869 [info] == Running 20240919103804 Operately.Repo.Migrations.CreateSubscriptionsListForExistingMessages.up/0 forward  13:11:11.871 [debug] QUERY OK source="messages" db=0.1ms SELECT m0."id", m0."subscription_list_id" FROM "messages" AS m0 [] ↳ anonymous fn/0 in Operately.Data.Change029CreateSubscriptionsListForMessages.run/0, at: lib/operately/data/change_029_create_subscriptions_list_for_messages.ex:10  13:11:11.871 [info] == Migrated 20240919103804 in 0.0s  13:11:11.872 [info] == Running 20240923095718 Operately.Repo.Migrations.CreateTableForProjectRetrospective.up/0 forward  13:11:11.872 [info] create table project_retrospectives  13:11:11.874 [info] create index project_retrospectives_subscription_list_id_index  13:11:11.874 [info] create index project_retrospectives_author_id_index  13:11:11.875 [info] create index project_retrospectives_project_id_index  13:11:11.875 [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  13:11:11.876 [info] == Migrated 20240923095718 in 0.0s  13:11:11.877 [info] == Running 20241002151620 Operately.Repo.Migrations.CreateSubscriptionsListForExistingProjectRetrospective.up/0 forward  13:11:11.880 [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  13:11:11.880 [info] == Migrated 20241002151620 in 0.0s  13:11:11.881 [info] == Running 20241003135919 Operately.Repo.Migrations.AddRetrospectiveToProjectClosedActivity.up/0 forward  13:11:11.883 [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  13:11:11.884 [info] == Migrated 20241003135919 in 0.0s  13:11:11.884 [info] == Running 20241010142306 Operately.Repo.Migrations.AddSpaceFieldToProjectCreatedActivity.up/0 forward  13:11:11.886 [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  13:11:11.886 [info] == Migrated 20241010142306 in 0.0s  13:11:11.887 [info] == Running 20241010162832 Operately.Repo.Migrations.AddSpaceFieldToProjectResumingActivity.up/0 forward  13:11:11.888 [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  13:11:11.888 [info] == Migrated 20241010162832 in 0.0s  13:11:11.889 [info] == Running 20241010172454 Operately.Repo.Migrations.AddSpaceKeyToProjectPausingActivity.up/0 forward  13:11:11.890 [debug] QUERY OK source="activities" db=0.0ms SELECT a0."id", a0."author_id", a0."comment_thread_id", a0."access_context_id", a0."action", a0."content", a0."resource_id", a0."resource_type", a0."inserted_at", a0."updated_at" FROM "activities" AS a0 WHERE (a0."action" IN ('project_pausing','project_renamed','project_milestone_commented')) [] ↳ anonymous fn/0 in Operately.Data.Change034AddSpaceProjectPausingToActivity.run/0, at: lib/operately/data/change_034_add_space_project_pausing_to_activity.ex:17  13:11:11.890 [info] == Migrated 20241010172454 in 0.0s  13:11:11.891 [info] == Running 20241010185006 Operately.Repo.Migrations.AddSpaceToProjectCheckInActivities.up/0 forward  13:11:11.892 [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  13:11:11.892 [info] == Migrated 20241010185006 in 0.0s  13:11:11.893 [info] == Running 20241011101759 Operately.Repo.Migrations.AddSpaceKeyToProjectActivities.up/0 forward  13:11:11.895 [debug] QUERY OK source="activities" db=0.0ms SELECT a0."id", a0."author_id", a0."comment_thread_id", a0."access_context_id", a0."action", a0."content", a0."resource_id", a0."resource_type", a0."inserted_at", a0."updated_at" FROM "activities" AS a0 WHERE (a0."action" IN ('project_archived','project_goal_connection','project_goal_disconnection')) [] ↳ anonymous fn/0 in Operately.Data.Change036AddSpaceToProjectActivities.run/0, at: lib/operately/data/change_036_add_space_to_project_activities.ex:17  13:11:11.895 [info] == Migrated 20241011101759 in 0.0s  13:11:11.895 [info] == Running 20241011111805 Operately.Repo.Migrations.AddSpaceKeyToGoalUpdateActivities.up/0 forward  13:11:11.897 [debug] QUERY OK source="activities" db=0.0ms SELECT a0."id", a0."author_id", a0."comment_thread_id", a0."access_context_id", a0."action", a0."content", a0."resource_id", a0."resource_type", a0."inserted_at", a0."updated_at" FROM "activities" AS a0 WHERE (a0."action" IN ('goal_check_in','goal_check_in_acknowledgement','goal_check_in_commented')) [] ↳ anonymous fn/0 in Operately.Data.Change037AddSpaceToGoalUpdateActivities.run/0, at: lib/operately/data/change_037_add_space_to_goal_update_activities.ex:17  13:11:11.897 [info] == Migrated 20241011111805 in 0.0s  13:11:11.898 [info] == Running 20241011142317 Operately.Repo.Migrations.AddSpaceToGoalEditingActivity.up/0 forward  13:11:11.899 [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  13:11:11.899 [info] == Migrated 20241011142317 in 0.0s  13:11:11.900 [info] == Running 20241014102321 Operately.Repo.Migrations.AddSpaceToProjectTimelineEditedActivity.up/0 forward  13:11:11.901 [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  13:11:11.901 [info] == Migrated 20241014102321 in 0.0s  13:11:11.902 [info] == Running 20241024114823 Operately.Repo.Migrations.AddClosedAtToExistingClosedProjects.up/0 forward  13:11:11.903 [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  13:11:11.903 [info] == Migrated 20241024114823 in 0.0s  13:11:11.903 [info] == Running 20241029095032 Operately.Repo.Migrations.AddStatusFieldToGoalUpdates.change/0 forward  13:11:11.903 [info] alter table goal_updates  13:11:11.904 [info] == Migrated 20241029095032 in 0.0s  13:11:11.904 [info] == Running 20241030164401 Operately.Repo.Migrations.PupulateGoalUpdatesStatusFieldWithDefaultValue.up/0 forward  13:11:11.906 [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  13:11:11.906 [info] == Migrated 20241030164401 in 0.0s  13:11:11.907 [info] == Running 20241107124746 Operately.Repo.Migrations.DropSupportForIconsInSpaces.change/0 forward  13:11:11.907 [info] alter table groups  13:11:11.907 [info] == Migrated 20241107124746 in 0.0s  13:11:11.908 [info] == Running 20241107152926 Operately.Repo.Migrations.AddResourceHubResourceNodeAndFolder.change/0 forward  13:11:11.908 [info] create table resource_hubs  13:11:11.910 [info] create index resource_hubs_space_id_index  13:11:11.910 [info] alter table access_contexts  13:11:11.911 [info] create index access_contexts_resource_hub_id_index  13:11:11.911 [info] create table resource_nodes  13:11:11.912 [info] create index resource_nodes_resource_hub_id_index  13:11:11.913 [info] create table resource_folders  13:11:11.914 [info] create index resource_folders_node_id_index  13:11:11.914 [info] alter table resource_nodes  13:11:11.915 [info] create index resource_nodes_folder_id_index  13:11:11.915 [info] == Migrated 20241107152926 in 0.0s  13:11:11.916 [info] == Running 20241107172651 Operately.Repo.Migrations.CreateOneResourceHubForEveryExistingSpace.up/0 forward  13:11:11.919 [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  13:11:11.919 [info] == Migrated 20241107172651 in 0.0s  13:11:11.920 [info] == Running 20241111124913 Operately.Repo.Migrations.AddTimestampsToResourceNodesAndFolders.change/0 forward  13:11:11.920 [info] alter table resource_nodes  13:11:11.920 [info] alter table resource_folders  13:11:11.920 [info] == Migrated 20241111124913 in 0.0s  13:11:11.921 [info] == Running 20241111151040 Operately.Repo.Migrations.AddStateToMessages.change/0 forward  13:11:11.921 [info] alter table messages  13:11:11.922 [info] == Migrated 20241111151040 in 0.0s  13:11:11.922 [info] == Running 20241112130317 Operately.Repo.Migrations.RenameNodeFolderFieldToParentField.change/0 forward  13:11:11.922 [info] rename column folder_id to parent_folder_id on table resource_nodes  13:11:11.923 [info] drop index resource_nodes_folder_id_index  13:11:11.923 [info] create index resource_nodes_parent_folder_id_index  13:11:11.923 [info] == Migrated 20241112130317 in 0.0s  13:11:11.924 [info] == Running 20241113112605 Operately.Repo.Migrations.CreateMessagesBoardsSchemaAndAddRelationshipToMessages.change/0 forward  13:11:11.924 [info] create table messages_boards  13:11:11.926 [info] alter table messages  13:11:11.926 [info] create index messages_boards_space_id_index  13:11:11.927 [info] create index messages_messages_board_id_index  13:11:11.927 [info] == Migrated 20241113112605 in 0.0s  13:11:11.928 [info] == Running 20241113125136 Operately.Repo.Migrations.PopulateMessagesBoardIdFieldInMessages.change/0 forward  13:11:11.929 [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  13:11:11.930 [info] == Migrated 20241113125136 in 0.0s  13:11:11.930 [info] == Running 20241115093941 Operately.Repo.Migrations.CreateAccessBindingsBetweenResourceHubsAndCompanyMembers.up/0 forward  13:11:11.933 [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  13:11:11.933 [info] == Migrated 20241115093941 in 0.0s  13:11:11.934 [info] == Running 20241115105023 Operately.Repo.Migrations.AddPublishedAtDateForMessages.change/0 forward  13:11:11.934 [info] alter table messages  13:11:11.934 [info] == Migrated 20241115105023 in 0.0s  13:11:11.935 [info] == Running 20241115105054 Operately.Repo.Migrations.PopulatePublishedAtDateForMessages.up/0 forward  13:11:11.935 [info] execute "UPDATE messages SET published_at = inserted_at"  13:11:11.935 [info] == Migrated 20241115105054 in 0.0s  13:11:11.936 [info] == Running 20241117192821 Operately.Repo.Migrations.AddDeletedAtToMessages.change/0 forward  13:11:11.936 [info] alter table messages  13:11:11.936 [info] == Migrated 20241117192821 in 0.0s  13:11:11.937 [info] == Running 20241118100459 Operately.Repo.Migrations.AddResourceHubDocumentsSchema.change/0 forward  13:11:11.937 [info] create table resource_documents  13:11:11.938 [info] create index resource_documents_node_id_index  13:11:11.939 [info] create index resource_documents_subscription_list_id_index  13:11:11.939 [info] == Migrated 20241118100459 in 0.0s  13:11:11.940 [info] == Running 20241120145441 Operately.Repo.Migrations.AddSiteAdminFieldToAccounts.change/0 forward  13:11:11.940 [info] alter table accounts  13:11:11.940 [info] == Migrated 20241120145441 in 0.0s  13:11:11.941 [info] == Running 20241120165930 Operately.Repo.Migrations.AddAuthorFieldToResourceHubDocument.change/0 forward  13:11:11.941 [info] alter table resource_documents  13:11:11.942 [info] create index resource_documents_author_id_index  13:11:11.942 [info] == Migrated 20241120165930 in 0.0s  13:11:11.943 [info] == Running 20241121140809 Operately.Repo.Migrations.AddResourceHubFilesSchema.change/0 forward  13:11:11.943 [info] create table resource_files  13:11:11.945 [info] create index resource_files_node_id_index  13:11:11.945 [info] create index resource_files_author_id_index  13:11:11.946 [info] create index resource_files_blob_id_index  13:11:11.946 [info] == Migrated 20241121140809 in 0.0s  13:11:11.947 [info] == Running 20241126115317 Operately.Repo.Migrations.AddSoftDeletedToDocuments.change/0 forward  13:11:11.947 [info] alter table resource_nodes  13:11:11.947 [info] alter table resource_documents  13:11:11.948 [info] == Migrated 20241126115317 in 0.0s  13:11:11.948 [info] == Running 20241127142637 Operately.Repo.Migrations.RemoveDescriptionFieldFromFolder.change/0 forward  13:11:11.948 [info] alter table resource_folders  13:11:11.949 [info] == Migrated 20241127142637 in 0.0s  13:11:11.949 [info] == Running 20241201132900 Operately.Repo.Migrations.ConfirmAllPreviousAccounts.change/0 forward  13:11:11.958 [debug] QUERY OK source="accounts" db=0.1ms UPDATE "accounts" AS a0 SET "confirmed_at" = $1 [~N[2025-05-30 13:11:11]] ↳ Ecto.Migration.Runner.perform_operation/3, at: lib/ecto/migration/runner.ex:310  13:11:11.958 [info] == Migrated 20241201132900 in 0.0s  13:11:11.959 [info] == Running 20241201133659 Operately.Repo.Migrations.AddEmailActivationCodes.change/0 forward  13:11:11.959 [info] create table email_activation_codes  13:11:11.960 [info] create index email_activation_codes_code_index  13:11:11.960 [info] == Migrated 20241201133659 in 0.0s  13:11:11.961 [info] == Running 20241202194057 Operately.Repo.Migrations.AddSubscriptionsListFieldToResourceHubFile.change/0 forward  13:11:11.961 [info] alter table resource_files  13:11:11.962 [info] create index resource_files_subscription_list_id_index  13:11:11.963 [info] == Migrated 20241202194057 in 0.0s  13:11:11.963 [info] == Running 20241204102735 Operately.Repo.Migrations.AddSoftDeletedToResourceHubFile.change/0 forward  13:11:11.964 [info] alter table resource_files  13:11:11.964 [info] == Migrated 20241204102735 in 0.0s  13:11:11.964 [info] == Running 20241205122925 Operately.Repo.Migrations.AddHeightAndWidthFieldsToBlobsSchema.change/0 forward  13:11:11.965 [info] alter table blobs  13:11:11.965 [info] == Migrated 20241205122925 in 0.0s  13:11:11.966 [info] == Running 20241206102636 Operately.Repo.Migrations.AddSoftDeletedToFolders.change/0 forward  13:11:11.966 [info] alter table resource_folders  13:11:11.966 [info] == Migrated 20241206102636 in 0.0s  13:11:11.967 [info] == Running 20241209142058 Operately.Repo.Migrations.AddPreviewBlobRelationshipBetweenFilesAndBlobs.change/0 forward  13:11:11.967 [info] alter table resource_files  13:11:11.967 [info] create index resource_files_preview_blob_id_index  13:11:11.968 [info] == Migrated 20241209142058 in 0.0s  13:11:11.969 [info] == Running 20241219153512 Operately.Repo.Migrations.RenameExistingResourceHubsToDocumentsAndFiles.up/0 forward  13:11:11.970 [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  13:11:11.970 [info] == Migrated 20241219153512 in 0.0s  13:11:11.971 [info] == Running 20241220130517 Operately.Repo.Migrations.AddResourceHubLinkSchema.change/0 forward  13:11:11.971 [info] create table resource_links  13:11:11.973 [info] create index resource_links_node_id_index  13:11:11.973 [info] create index resource_links_author_id_index  13:11:11.974 [info] create index resource_links_subscription_list_id_index  13:11:11.974 [info] == Migrated 20241220130517 in 0.0s  13:11:11.975 [info] == Running 20250103164752 Operately.Repo.Migrations.UpdateResourceHubActivitiesAccessContext.up/0 forward  13:11:11.977 [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  13:11:11.977 [info] == Migrated 20250103164752 in 0.0s  13:11:11.978 [info] == Running 20250103173929 Operately.Repo.Migrations.UpdateBlobSizeFieldFromIntToBigint.change/0 forward  13:11:11.978 [info] alter table blobs  13:11:11.980 [info] == Migrated 20250103173929 in 0.0s  13:11:11.981 [info] == Running 20250108125221 Operately.Repo.Migrations.UpdateFileCreatedActivityFormat.up/0 forward  13:11:11.982 [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  13:11:11.982 [info] == Migrated 20250108125221 in 0.0s  13:11:11.983 [info] == Running 20250120100306 Operately.Repo.Migrations.AddStatusAndPublishedAtFieldsToDocumentSchema.change/0 forward  13:11:11.983 [info] alter table resource_documents  13:11:11.984 [info] == Migrated 20250120100306 in 0.0s  13:11:11.985 [info] == Running 20250121095446 Operately.Repo.Migrations.PopulatePublishedAtFieldInExistingPublishedDocuments.up/0 forward  13:11:11.987 [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  13:11:11.987 [info] == Migrated 20250121095446 in 0.0s  13:11:11.988 [info] == Running 20250124144013 Operately.Repo.Migrations.DeleteGoalReparentActivitiesWithMissingData.up/0 forward  13:11:11.990 [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  13:11:11.990 [debug] QUERY OK source="activities" db=0.0ms DELETE FROM "activities" AS a0 WHERE (a0."id" = ANY($1)) [[]] ↳ Operately.Data.Change048DeleteGoalReparentActivitiesWithMissingData.delete_activities/1, at: lib/operately/data/change_048_delete_goal_reparent_activities_with_missing_data.ex:24  13:11:11.990 [info] == Migrated 20250124144013 in 0.0s  13:11:11.991 [info] == Running 20250129180403 Operately.Repo.Migrations.PopulateCommentEntityIdWithMilestoneId.up/0 forward  13:11:11.994 [debug] QUERY OK source="comments" db=0.2ms UPDATE "comments" AS c0 SET "entity_id" = m1."milestone_id", "entity_type" = 'project_milestone' FROM "milestone_comments" AS m1 WHERE (m1."comment_id" = c0."id") AND ((c0."entity_id" IS NULL) OR (c0."entity_type" IS NULL)) [] ↳ anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4, at: lib/ecto/adapters/sql.ex:1382  13:11:11.994 [info] == Migrated 20250129180403 in 0.0s  13:11:11.995 [info] == Running 20250217140410 Operately.Repo.Migrations.CreateBindingsBetweenPeopleAndCompanySpace.up/0 forward  13:11:11.998 [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  13:11:11.998 [info] == Migrated 20250217140410 in 0.0s  13:11:11.998 [info] == Running 20250317102620 Operately.Repo.Migrations.AddCyclePreventionFunctionToGoals.up/0 forward  13:11:11.999 [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"  13:11:11.999 [info] execute "CREATE TRIGGER prevent_goal_cycle\nBEFORE INSERT OR UPDATE ON goals\nFOR EACH ROW EXECUTE FUNCTION check_goal_cycle();\n"  13:11:11.999 [info] create index goals_parent_goal_id_index  13:11:12.000 [info] == Migrated 20250317102620 in 0.0s  13:11:12.001 [info] == Running 20250325115924 Operately.Repo.Migrations.AddLastCheckInIdToGoals.change/0 forward  13:11:12.001 [info] alter table goals  13:11:12.002 [info] == Migrated 20250325115924 in 0.0s  13:11:12.002 [info] == Running 20250325131944 Operately.Repo.Migrations.PopulateLastCheckInOnGoals.up/0 forward  13:11:12.004 [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 []  13:11:12.004 [info] == Migrated 20250325131944 in 0.0s  13:11:12.005 [info] == Running 20250328094455 Operately.Repo.Migrations.AddGoalUpdatesTimeframe.change/0 forward  13:11:12.005 [info] alter table goal_updates  13:11:12.005 [info] == Migrated 20250328094455 in 0.0s  13:11:12.006 [info] == Running 20250328094716 Operately.Repo.Migrations.PopulateGoalUpdatesTimeframes.up/0 forward  13:11:12.007 [debug] QUERY OK db=0.1ms UPDATE goal_updates SET timeframe = goals.timeframe FROM goals WHERE goal_updates.goal_id = goals.id; []  13:11:12.007 [info] == Migrated 20250328094716 in 0.0s  13:11:12.008 [info] == Running 20250331193957 Operately.Repo.Migrations.AddCascadeDeleteToGoalTargets.up/0 forward  13:11:12.009 [info] drop constraint targets_goal_id_fkey from table targets  13:11:12.009 [info] alter table targets  13:11:12.010 [info] == Migrated 20250331193957 in 0.0s  13:11:12.011 [info] == Running 20250331194510 Operately.Repo.Migrations.AddCascadeDeleteToGoalAccessContexts.up/0 forward  13:11:12.011 [info] drop constraint access_contexts_goal_id_fkey from table access_contexts  13:11:12.011 [info] alter table access_contexts  13:11:12.012 [info] == Migrated 20250331194510 in 0.0s  13:11:12.013 [info] == Running 20250331194727 Operately.Repo.Migrations.AddCascadeDeleteToAccessBindings.up/0 forward  13:11:12.013 [info] drop constraint access_bindings_context_id_fkey from table access_bindings  13:11:12.013 [info] alter table access_bindings  13:11:12.014 [info] == Migrated 20250331194727 in 0.0s  13:11:12.015 [info] == Running 20250331195524 Operately.Repo.Migrations.AddCascadeDeleteToContextActivities.up/0 forward  13:11:12.015 [info] drop constraint activities_context_id_fkey from table activities  13:11:12.015 [info] alter table activities  13:11:12.017 [info] == Migrated 20250331195524 in 0.0s  13:11:12.025 [info] == Running 20250331200245 Operately.Repo.Migrations.AddCascadeDeleteToProjectAccessContexts.up/0 forward  13:11:12.025 [info] drop constraint access_contexts_project_id_fkey from table access_contexts  13:11:12.026 [info] alter table access_contexts  13:11:12.027 [info] == Migrated 20250331200245 in 0.0s  13:11:12.027 [info] == Running 20250331202813 Operately.Repo.Migrations.AddCascadeDeleteToGoalCheckIns.up/0 forward  13:11:12.028 [info] drop constraint goal_updates_goal_id_fkey from table goal_updates  13:11:12.028 [info] alter table goal_updates  13:11:12.029 [info] == Migrated 20250331202813 in 0.0s  13:11:12.030 [info] == Running 20250401104505 Operately.Repo.Migrations.AddCascadeDeleteToActivityNotifications.up/0 forward  13:11:12.030 [info] drop constraint notifications_activity_id_fkey from table notifications  13:11:12.030 [info] alter table notifications  13:11:12.031 [info] == Migrated 20250401104505 in 0.0s  13:11:12.032 [info] == Running 20250403112800 Operately.Repo.Migrations.AddUniqueAccountPlusCompanyConstraintToPeople.change/0 forward  13:11:12.032 [info] create index people_company_id_account_id_index  13:11:12.033 [info] == Migrated 20250403112800 in 0.0s  13:11:12.033 [info] == Running 20250505212802 Operately.Repo.Migrations.AddCascadeDeleteToPersonAndSpaceMembers.up/0 forward  13:11:12.034 [info] drop constraint members_person_id_fkey from table members  13:11:12.034 [info] alter table members  13:11:12.035 [info] == Migrated 20250505212802 in 0.0s  13:11:12.036 [info] == Running 20250505213128 Operately.Repo.Migrations.AddCascadeDeleteToPersonAndNotifications.up/0 forward  13:11:12.036 [info] drop constraint notifications_person_id_fkey from table notifications  13:11:12.036 [info] alter table notifications  13:11:12.037 [info] == Migrated 20250505213128 in 0.0s  13:11:12.038 [info] == Running 20250505213420 Operately.Repo.Migrations.AddCascadeDeleteToPersonAndInvitations.up/0 forward  13:11:12.038 [info] drop constraint invitations_member_id_fkey from table invitations  13:11:12.038 [info] alter table invitations  13:11:12.039 [info] == Migrated 20250505213420 in 0.0s  13:11:12.040 [info] == Running 20250505213630 Operately.Repo.Migrations.AddCascadeDeleteToPersonAndAccessGroupMemberships.up/0 forward  13:11:12.040 [info] drop constraint access_group_memberships_person_id_fkey from table access_group_memberships  13:11:12.040 [info] alter table access_group_memberships  13:11:12.041 [info] == Migrated 20250505213630 in 0.0s  13:11:12.042 [info] == Running 20250505213841 Operately.Repo.Migrations.AddCascadeDeleteToPersonAndAccessGroups.up/0 forward  13:11:12.042 [info] drop constraint access_groups_person_id_fkey from table access_groups  13:11:12.042 [info] alter table access_groups  13:11:12.043 [info] == Migrated 20250505213841 in 0.0s  13:11:12.044 [info] == Running 20250505214047 Operately.Repo.Migrations.AddCascadeDeleteToInvitationAndInvitationTokens.up/0 forward  13:11:12.044 [info] drop constraint invitation_tokens_invitation_id_fkey from table invitation_tokens  13:11:12.044 [info] alter table invitation_tokens  13:11:12.045 [info] == Migrated 20250505214047 in 0.0s  13:11:12.046 [info] == Running 20250505214231 Operately.Repo.Migrations.AddCascadeDeleteToAccessGroupAndAccessBindings.up/0 forward  13:11:12.046 [info] drop constraint access_bindings_group_id_fkey from table access_bindings  13:11:12.046 [info] alter table access_bindings  13:11:12.047 [info] == Migrated 20250505214231 in 0.0s  13:11:12.048 [info] == Running 20250514080920 Operately.Repo.Migrations.AddLastUpdateStatusToGoals.change/0 forward  13:11:12.048 [info] alter table goals  13:11:12.048 [info] == Migrated 20250514080920 in 0.0s  13:11:12.049 [info] == Running 20250514121122 Operately.Repo.Migrations.PopulateLastUpdateStatus.up/0 forward  13:11:12.051 [debug] QUERY OK db=0.1ms UPDATE goals SET last_update_status = ( SELECT status FROM goal_updates WHERE goal_updates.id = goals.last_check_in_id ) WHERE goals.last_update_status IS NULL AND goals.last_check_in_id IS NOT NULL; []  13:11:12.051 [info] == Migrated 20250514121122 in 0.0s  13:11:12.051 [info] == Running 20250515203918 Operately.Repo.Migrations.AddSubscriptionListToCommentThreadSchema.change/0 forward  13:11:12.052 [info] alter table comment_threads  13:11:12.052 [info] create index comment_threads_subscription_list_id_index  13:11:12.053 [info] == Migrated 20250515203918 in 0.0s  13:11:12.054 [info] == Running 20250519132749 Operately.Repo.Migrations.AddMissingIndexesForGoalsAndProjectsAndOtherResources.change/0 forward  13:11:12.054 [info] create index goals_company_id_index  13:11:12.054 [info] create index goals_champion_id_index  13:11:12.055 [info] create index goals_reviewer_id_index  13:11:12.055 [info] create index goals_creator_id_index  13:11:12.056 [info] create index projects_creator_id_index  13:11:12.056 [info] create index project_contributors_project_id_role_idx  13:11:12.056 [info] create index groups_company_id_index  13:11:12.057 [info] create index blobs_company_id_index  13:11:12.057 [info] create index access_bindings_group_id_access_level_idx  13:11:12.058 [info] == Migrated 20250519132749 in 0.0s  13:11:12.059 [info] == Running 20250522172448 Operately.Repo.Migrations.CreateSubscriptionsForExistingGoalDiscussions.up/0 forward  13:11:12.064 [debug] QUERY OK source="comment_threads" db=0.2ms SELECT c0."id", c0."subscription_list_id", c0."parent_id", c0."parent_type", c0."title", c0."has_title", c0."message", c0."inserted_at", c0."updated_at", a1."id", a1."author_id", a1."comment_thread_id", a1."access_context_id", a1."action", a1."content", a1."resource_id", a1."resource_type", a1."inserted_at", a1."updated_at" FROM "comment_threads" AS c0 INNER JOIN "activities" AS a1 ON a1."comment_thread_id" = c0."id" WHERE (c0."subscription_list_id" IS NULL) AND (a1."action" IN ('goal_discussion_creation','goal_closing','goal_reopening','goal_timeframe_editing')) [] ↳ anonymous fn/0 in Operately.Data.Change054CreateSubscriptionsForExistingGoalDiscussions.run/0, at: lib/operately/data/change_054_create_subscriptions_for_existing_goal_discussions.ex:16  13:11:12.064 [info] == Migrated 20250522172448 in 0.0s  13:11:12.065 [info] == Running 20250522215134 Operately.Repo.Migrations.RenameCompanySpaceToGeneral.up/0 forward  13:11:12.066 [debug] QUERY OK db=0.1ms UPDATE groups SET name = 'General' FROM companies WHERE groups.id = companies.company_space_id; []  13:11:12.066 [info] == Migrated 20250522215134 in 0.0s  13:11:12.067 [info] == Running 20250526092723 Operately.Repo.Migrations.CascadeDeleteFromCompanyToPeople.up/0 forward  13:11:12.068 [info] drop constraint people_company_id_fkey from table people  13:11:12.068 [info] alter table people  13:11:12.069 [info] == Migrated 20250526092723 in 0.0s  13:11:12.070 [info] == Running 20250526093130 Operately.Repo.Migrations.CascadeDeleteFromCompaniesToProjects.up/0 forward  13:11:12.070 [info] drop constraint projects_company_id_fkey from table projects  13:11:12.070 [info] alter table projects  13:11:12.071 [info] == Migrated 20250526093130 in 0.0s make test.mix.unit warning: redefining module Operately.Data.Change051PopulateGoalLastCheckInsTest (current version defined in memory) │ 1 │ defmodule Operately.Data.Change051PopulateGoalLastCheckInsTest do │ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ │ └─ test/operately/data/change_051_populate_goal_last_check_ins_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.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 Operately.TimeTest 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 significantly late -> schedule next check-in for first of next month (test/operately/time_test.exs:55) PASSED Test: calculate_next_montly_check_in check in on significantly before due date, more than a week -> don't change the next check-in (test/operately/time_test.exs:47) PASSED Test: calculate_next_weekly_check_in check in late -> schedule next check-in for next Friday (test/operately/time_test.exs:25) PASSED Test: calculate_next_weekly_check_in had no previous due date -> schedule next check-in for next Friday (test/operately/time_test.exs:9) PASSED Test: calculate_next_montly_check_in check in late -> schedule next check-in for first of next month (test/operately/time_test.exs:51) PASSED Test: calculate_next_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_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_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_montly_check_in check in on time -> schedule first of next month (test/operately/time_test.exs:39) PASSED Test: calculate_next_weekly_check_in check in significantly late -> schedule next check-in for next Friday (test/operately/time_test.exs:29) PASSED Test: calculate_next_weekly_check_in check in on time -> schedule next check-in for next Friday (test/operately/time_test.exs:13) PASSED OperatelyWeb.AccountAuthTest Test: log_in_account/3 writes a cookie if remember_me is configured (test/operately_web/account_auth_test.exs:32) PASSED Test: require_authenticated_account/2 stores the path to redirect to on GET (test/operately_web/account_auth_test.exs:124) PASSED Test: redirect_if_account_is_authenticated/2 does not redirect if account is not authenticated (test/operately_web/account_auth_test.exs:109) PASSED Test: logout_account/1 works even if account is already logged out (test/operately_web/account_auth_test.exs:60) PASSED Test: log_in_account/3 stores the account token in the session (test/operately_web/account_auth_test.exs:20) PASSED Test: require_authenticated_account/2 redirects if account is not authenticated (test/operately_web/account_auth_test.exs:117) PASSED Test: logout_account/1 erases session and cookies (test/operately_web/account_auth_test.exs:43) PASSED Test: redirect_if_account_is_authenticated/2 redirects if account is authenticated (test/operately_web/account_auth_test.exs:103) PASSED Test: fetch_current_account/2 authenticates account from cookies (test/operately_web/account_auth_test.exs:75) 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 does not redirect if account is authenticated (test/operately_web/account_auth_test.exs:150) PASSED Test: fetch_current_account/2 authenticates account from session (test/operately_web/account_auth_test.exs:69) PASSED Test: log_in_account/3 clears everything previously stored in the session (test/operately_web/account_auth_test.exs:27) PASSED OperatelyWeb.AccountSessionControllerTest 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 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 Operately.Tasks.KanbanStateTest Test: add_todo (test/operately/tasks/kanban_state_test.exs:17) PASSED Test: remove (test/operately/tasks/kanban_state_test.exs:36) PASSED Test: load (test/operately/tasks/kanban_state_test.exs:8) PASSED Test: add (test/operately/tasks/kanban_state_test.exs:23) PASSED Test: initialize (test/operately/tasks/kanban_state_test.exs:13) PASSED Operately.AccessGroupMembershipsTest Test: access_group_memberships create_group_membership/1 with invalid data returns error changeset (test/operately/access/group_memberships_test.exs:40) 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 get_group_membership!/1 returns the group_membership with given id (test/operately/access/group_memberships_test.exs:22) PASSED Test: access_group_memberships update_group_membership/2 with valid data updates the group_membership (test/operately/access/group_memberships_test.exs:44) PASSED Test: access_group_memberships change_group_membership/1 returns a group_membership changeset (test/operately/access/group_memberships_test.exs:66) PASSED Test: access_group_memberships create_group_membership/1 with valid data creates a group_membership (test/operately/access/group_memberships_test.exs:31) PASSED OperatelyWeb.Api.Mutations.AddCompanyOwnersTest Test: security admins can't add owners (test/operately_web/api/mutations/add_company_owners_test.exs:24) PASSED 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 Operately.Data.Change017CreateAccessGroupForAnonymousUsersTest Test: creates access groups for anonymous users (test/operately/data/change_017_create_access_group_for_anonymous_users_test.exs:7) PASSED OperatelyWeb.Api.Queries.ListGoalContributorsTest 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=full_access, space=no_access and goal=no_access, then expect code=allowed (test/operately_web/api/queries/list_goal_contributors_test.exs:43) PASSED Test: permissions if caller has levels company=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: 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=view_access and goal=no_access, then expect code=allowed (test/operately_web/api/queries/list_goal_contributors_test.exs:43) PASSED Test: security it requires authentication (test/operately_web/api/queries/list_goal_contributors_test.exs:11) PASSED Test: permissions if caller has levels company=edit_access, space=no_access and goal=no_access, then expect code=allowed (test/operately_web/api/queries/list_goal_contributors_test.exs:43) PASSED Test: permissions if caller has levels company=no_access, space=no_access and goal=reviewer, then expect code=allowed (test/operately_web/api/queries/list_goal_contributors_test.exs:43) PASSED Test: permissions if caller has levels company=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=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=full_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 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=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=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 OperatelyWeb.Api.Queries.GetDiscussionTest Test: permissions company members have no access (test/operately_web/api/queries/get_discussion_test.exs:34) PASSED Test: get_discussion functionality include_potential_subscribers (test/operately_web/api/queries/get_discussion_test.exs:124) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_discussion_test.exs:50) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_discussion_test.exs:14) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_discussion_test.exs:42) PASSED Test: get_discussion functionality include_reactions (test/operately_web/api/queries/get_discussion_test.exs:102) PASSED Test: get_discussion functionality include_space (test/operately_web/api/queries/get_discussion_test.exs:80) PASSED Test: get_discussion functionality include_author (test/operately_web/api/queries/get_discussion_test.exs:92) PASSED Test: get_discussion functionality include_unread_notifications (test/operately_web/api/queries/get_discussion_test.exs:63) PASSED Test: permissions (company space) - company members have access (test/operately_web/api/queries/get_discussion_test.exs:27) PASSED Operately.Operations.ProjectContributorAdditionTest Test: ProjectContributorAddition operation creates activity and notification (test/operately/operations/project_contributor_addition_test.exs:54) PASSED 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 OperatelyWeb.Api.Queries.GetResourceHubFileTest 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: get_resource_hub_file functionality include_author (test/operately_web/api/queries/get_resource_hub_file_test.exs:78) PASSED Test: permissions if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_file_test.exs:40) PASSED Test: get_resource_hub_file functionality include_potential_subscribers (test/operately_web/api/queries/get_resource_hub_file_test.exs:106) PASSED 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: security it requires authentication (test/operately_web/api/queries/get_resource_hub_file_test.exs:11) PASSED Test: get_resource_hub_file functionality get file (test/operately_web/api/queries/get_resource_hub_file_test.exs:70) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_file_test.exs:40) PASSED Test: permissions if caller has levels company=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=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=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 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=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=no_access and space=no_access, then expect code=404 (test/operately_web/api/queries/get_resource_hub_file_test.exs:40) PASSED Operately.Data.Change009CreateProjectsAccessContextTest Test: creates access_context for soft-deleted projects (test/operately/data/change_009_create_projects_access_context_test.exs:55) PASSED Test: creates access_context for existing projects (test/operately/data/change_009_create_projects_access_context_test.exs:25) PASSED Test: creates access_context successfully when a project already has access context (test/operately/data/change_009_create_projects_access_context_test.exs:44) PASSED OperatelyWeb.Api.Mutations.EditGoalDiscussionTest 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: edit_goal_discussion functionality edits a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:142) PASSED Test: permissions champions can edit a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:106) PASSED Test: permissions company owner can edit a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:51) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_goal_discussion_test.exs:12) PASSED Test: permissions reviewers can edit a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:122) PASSED Test: permissions company members with edit access can edit a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:43) PASSED Test: permissions space managers can edit a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:92) 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 with edit access can edit a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:83) 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 company members without view access can't see a goal discussion (test/operately_web/api/mutations/edit_goal_discussion_test.exs:27) PASSED Operately.TasksTest Test: task_assignees list_task_assignees/0 returns all task_assignees (test/operately/tasks_test.exs:49) PASSED 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 OperatelyWeb.Api.Mutations.CreateTaskTest Test: permissions company members without edit access can't create task (test/operately_web/api/mutations/create_task_test.exs:35) PASSED Test: permissions champions can create task (test/operately_web/api/mutations/create_task_test.exs:127) PASSED Test: permissions contributors without edit access can't create task (test/operately_web/api/mutations/create_task_test.exs:104) PASSED Test: create_task functionality creates task (test/operately_web/api/mutations/create_task_test.exs:163) PASSED Test: permissions company owners can create task (test/operately_web/api/mutations/create_task_test.exs:50) PASSED Test: security it requires authentication (test/operately_web/api/mutations/create_task_test.exs:13) PASSED Test: permissions contributors with edit access can create task (test/operately_web/api/mutations/create_task_test.exs:116) PASSED Test: permissions company members with edit access can create task (test/operately_web/api/mutations/create_task_test.exs:43) PASSED Test: permissions space managers can create task (test/operately_web/api/mutations/create_task_test.exs:90) 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 with edit access can create task (test/operately_web/api/mutations/create_task_test.exs:82) PASSED Test: permissions reviewers can create task (test/operately_web/api/mutations/create_task_test.exs:143) 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 company members without view access can't see a project (test/operately_web/api/mutations/create_task_test.exs:27) PASSED Test: create_task functionality creates task without assignee (test/operately_web/api/mutations/create_task_test.exs:173) 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.GetGoalProgressUpdateTest Test: permissions company members have access (test/operately_web/api/queries/get_goal_progress_update_test.exs:36) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_goal_progress_update_test.exs:49) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_goal_progress_update_test.exs:15) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_goal_progress_update_test.exs:42) 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 reviewers have access (test/operately_web/api/queries/get_goal_progress_update_test.exs:70) PASSED Test: get_goal_progress_update functionality include_potential_subscribers (test/operately_web/api/queries/get_goal_progress_update_test.exs:98) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_goal_progress_update_test.exs:56) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_goal_progress_update_test.exs:30) 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 Operately.Data.Change044RenameResourceHubsTest Test: renames existing resource hubs to Documents & Files (test/operately/data/change_044_rename_resource_hubs_test.exs:13) 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.ActionTest 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 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: new/0 returns an empty context (test/operately_web/api/action_test.exs:8) PASSED Test: run/3 if the key already exists, it raises an ArgumentError (test/operately_web/api/action_test.exs:28) PASSED Test: run/3 if one of the functions returns an error, it stops the chain (test/operately_web/api/action_test.exs:42) PASSED Test: run/3 runs the function and adds the result to the context (test/operately_web/api/action_test.exs:14) PASSED OperatelyWeb.Api.Queries.GetInvitationTest Test: get_invitation functionality returns the invitation (test/operately_web/api/queries/get_invitation_test.exs:9) PASSED Operately.Goals.CycleDetectionTest 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 a goal from being its own parent (test/operately/goals/cycle_detection_test.exs:48) PASSED Test: goal hierarchy cycle detection allows creating a goal without a parent (test/operately/goals/cycle_detection_test.exs:13) PASSED Test: goal hierarchy cycle detection allows removing a goal's parent (test/operately/goals/cycle_detection_test.exs:38) 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 cycle when updating a goal in a complex hierarchy (test/operately/goals/cycle_detection_test.exs:78) PASSED Test: goal hierarchy cycle detection prevents direct cycles between two goals (test/operately/goals/cycle_detection_test.exs:56) PASSED Test: goal hierarchy cycle detection allows creating a goal with a valid parent (test/operately/goals/cycle_detection_test.exs:18) PASSED OperatelyWeb.Api.Mutations.UpdateProjectContributorTest 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=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/update_project_contributor_test.exs:43) PASSED Test: permissions if caller has levels company=no_access, space=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=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=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: security it requires authentication (test/operately_web/api/mutations/update_project_contributor_test.exs:12) PASSED Test: permissions if caller has levels company=view_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/update_project_contributor_test.exs:43) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/update_project_contributor_test.exs:43) PASSED Test: permissions if caller has levels company=no_access, space=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=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=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=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=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=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: update_project_contributor functionality updates project contributor (test/operately_web/api/mutations/update_project_contributor_test.exs:71) PASSED OperatelyWeb.Api.Queries.GetMeTest Test: get_me functionality includes manager information when requested (test/operately_web/api/queries/get_me_test.exs:35) PASSED 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 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.DiscussionPostingTest Test: Person without permissions is not notified (test/operately/operations/discussion_posting_test.exs:77) PASSED 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 Operately.Api.Queries.GetProjectContributorTest Test: permissions space members (test/operately_web/api/queries/get_project_contributor_test.exs:37) PASSED 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 OperatelyWeb.Api.Mutations.EditGoalProgressUpdateTest 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 Test: permissions author/champion can edit goal update (test/operately_web/api/mutations/edit_goal_progress_update_test.exs:53) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_goal_progress_update_test.exs:14) PASSED Test: permissions member without edit access can't edit goal update (test/operately_web/api/mutations/edit_goal_progress_update_test.exs:43) PASSED Test: edit_goal_progress_update functionality 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 company members without view access can't see goal update (test/operately_web/api/mutations/edit_goal_progress_update_test.exs:28) PASSED Operately.TenetsTest Test: tenets create_tenet/1 with valid data creates a tenet (test/operately/tenets_test.exs:23) PASSED Test: tenets update_tenet/2 with valid data updates the tenet (test/operately/tenets_test.exs:35) PASSED Test: tenets list_tenets/0 returns all tenets (test/operately/tenets_test.exs:13) PASSED Test: tenets create_tenet/1 with invalid data returns error changeset (test/operately/tenets_test.exs:31) PASSED Test: tenets delete_tenet/1 deletes the tenet (test/operately/tenets_test.exs:50) PASSED Test: tenets change_tenet/1 returns a tenet changeset (test/operately/tenets_test.exs:56) PASSED Test: tenets update_tenet/2 with invalid data returns error changeset (test/operately/tenets_test.exs:44) PASSED Test: tenets get_tenet!/1 returns the tenet with given id (test/operately/tenets_test.exs:18) PASSED OperatelyWeb.PageControllerTest Test: GET / (test/operately_web/controllers/page_controller_test.exs:6) PASSED Operately.WorkMaps.GetWorkMapQueryTest Test: functionality - execute/1 with include_assignees parameter does not include assignees when include_assignees is false (test/operately/work_maps/get_work_map_query_test.exs:76) 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:681) PASSED Test: functionality - execute/1 with company_id and champion_id parameters given parent and greatgrandchild have the same champion, but child and grandchild have another champion, returns full hierarchy with parent, child, grandchild and greatgrandchild (test/operately/work_maps/get_work_map_query_test.exs:267) PASSED Test: permissions - query nested projects champion has access to public_project, project1, project2, secret_project (test/operately/work_maps/get_work_map_query_test.exs:601) PASSED Test: permissions - query nested projects company_member has access to public_project (test/operately/work_maps/get_work_map_query_test.exs:601) 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:601) 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:681) 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:551) PASSED Test: functionality - execute/1 with company_id and reviewer_id parameters given parent and child have different reviewer, returns full hierarchy including parent (test/operately/work_maps/get_work_map_query_test.exs:355) 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:601) 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:662) 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:226) PASSED Test: functionality - execute/1 with company_id and reviewer_id parameters returns only goals and projects with the specified reviewer (test/operately/work_maps/get_work_map_query_test.exs:323) 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:132) 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 deeply nested structure returns complete hierarchy with all nested children (test/operately/work_maps/get_work_map_query_test.exs:453) PASSED Test: functionality - execute/1 with company_id and champion_id parameters returns only goals and projects championed by the specified person (test/operately/work_maps/get_work_map_query_test.exs:258) PASSED Test: functionality - execute/1 with include_assignees parameter does not include assignees by default (test/operately/work_maps/get_work_map_query_test.exs:92) PASSED Test: functionality - execute/1 with company_id and space_id parameters given parent and child have different spaces, returns full hierarchy including parent (test/operately/work_maps/get_work_map_query_test.exs:191) 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:158) PASSED Test: permissions - query goals company member has access to 2 public goals (test/operately/work_maps/get_work_map_query_test.exs:652) PASSED Test: functionality - execute/1 with company_id and space_id parameters given parent and greatgrandchild have the same space, but child and grandchild have another space, returns full hierarchy with parent, child, grandchild and greatgrandchild (test/operately/work_maps/get_work_map_query_test.exs:168) PASSED Test: functionality - execute/1 with company_id and contributor_id parameters with nested hierarchy, maintains parent path to matching items (test/operately/work_maps/get_work_map_query_test.exs:412) PASSED Test: functionality - execute/1 with company_id and champion_id parameters given parent and child have different champion, returns full hierarchy including parent (test/operately/work_maps/get_work_map_query_test.exs:290) 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:551) 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:141) 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:551) PASSED Test: permissions - query root projects company_member has access to public_project (test/operately/work_maps/get_work_map_query_test.exs:551) PASSED Test: functionality - execute/1 with include_assignees parameter includes assignees when include_assignees is true (test/operately/work_maps/get_work_map_query_test.exs:58) PASSED Test: functionality - execute/1 with company_id and reviewer_id parameters given parent and greatgrandchild have the same reviewer, but child and grandchild have another reviewer, returns full hierarchy (test/operately/work_maps/get_work_map_query_test.exs:332) PASSED Test: functionality - execute/1 with all parameters combined filters correctly with all parameters (test/operately/work_maps/get_work_map_query_test.exs:500) PASSED Test: functionality - execute/1 with company_id and contributor_id parameters given parent goal with child projects having different contributors, returns full hierarchy (test/operately/work_maps/get_work_map_query_test.exs:394) PASSED Test: functionality - execute/1 with company_id and contributor_id parameters returns only projects with the specified contributor (test/operately/work_maps/get_work_map_query_test.exs:386) PASSED OperatelyWeb.Api.Queries.GetBindedPeopleTest 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 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 OperatelyWeb.Api.Mutations.EditGoalTimeframeTest Test: permissions company members without edit access can't edit a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:34) PASSED Test: edit_goal_timeframe functionality edits a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:132) PASSED Test: permissions champions can edit a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:98) PASSED Test: subscriptions to notifications adds mentioned people to subscription list (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:171) PASSED Test: permissions company owner can edit a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:48) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:13) PASSED Test: permissions reviewers can edit a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:113) PASSED Test: permissions company members with edit access can edit a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:41) PASSED Test: permissions space managers can edit a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:85) PASSED Test: permissions space members without edit access can't edit a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:69) PASSED Test: permissions space members with edit access can edit a goal timeframe (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:77) PASSED Test: subscriptions to notifications creates subscription list for goal timeframe editing (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:152) PASSED Test: permissions space members without view access can't see a goal (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:61) PASSED Test: permissions company members without view access can't see a goal (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:27) PASSED Test: subscriptions to notifications doesn't create repeated subscription (test/operately_web/api/mutations/edit_goal_timeframe_test.exs:197) PASSED OperatelyWeb.Api.Mutations.CreateBlobTest Test: create_blob functionality it creates multiple blob records in the database (test/operately_web/api/mutations/create_blob_test.exs:31) PASSED 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 OperatelyEmail.ProjectCreatedEmailTest Test: sends an email to the project contributors (test/operately_email/project_created_email_test.exs:38) PASSED OperatelyWeb.Api.Mutations.UpdateTaskTest 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=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_task_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/update_task_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/mutations/update_task_test.exs:12) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_task_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=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=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=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=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=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=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 OperatelyWeb.Api.Mutations.EditResourceHubLinkTest 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=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/edit_resource_hub_link_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_resource_hub_link_test.exs:15) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (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=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=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/edit_resource_hub_link_test.exs:40) PASSED Test: permissions if caller has levels company=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=no_access, then expect code=404 (test/operately_web/api/mutations/edit_resource_hub_link_test.exs:40) PASSED Operately.Data.Change013CreateActivitiesAccessContextTest Test: assigns access_context to project activities project_contributor_addition action (test/operately/data/change_013_create_activities_access_context_test.exs:581) PASSED Test: assigns access_context to company activities company_invitation_token_created action (test/operately/data/change_013_create_activities_access_context_test.exs:55) 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_name_editing action (test/operately/data/change_013_create_activities_access_context_test.exs:199) 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 goal activities goal_editing action (test/operately/data/change_013_create_activities_access_context_test.exs:421) 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_moved action (test/operately/data/change_013_create_activities_access_context_test.exs:656) PASSED Test: assigns access_context to project activities project_pausing action (test/operately/data/change_013_create_activities_access_context_test.exs:671) PASSED Test: assigns access_context to project activities project_resuming action (test/operately/data/change_013_create_activities_access_context_test.exs:701) 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 goal activities goal_discussion_editing action (test/operately/data/change_013_create_activities_access_context_test.exs:406) PASSED Test: assigns access_context to space activities group_edited action (test/operately/data/change_013_create_activities_access_context_test.exs:259) 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_reopening action (test/operately/data/change_013_create_activities_access_context_test.exs:436) 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 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_milestone_commented action (test/operately/data/change_013_create_activities_access_context_test.exs:641) 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 space_joining action (test/operately/data/change_013_create_activities_access_context_test.exs:94) PASSED Test: assigns access_context to company activities company_member_removed action (test/operately/data/change_013_create_activities_access_context_test.exs:25) 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 comment_added activity entity_type is :project_check_in (test/operately/data/change_013_create_activities_access_context_test.exs:816) PASSED Test: assigns access_context to project activities project_discussion_submitted action (test/operately/data/change_013_create_activities_access_context_test.exs:596) 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 space activities task_description_change action (test/operately/data/change_013_create_activities_access_context_test.exs:184) 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 discussion_comment_submitted action (test/operately/data/change_013_create_activities_access_context_test.exs:154) 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 project activities project_archived action (test/operately/data/change_013_create_activities_access_context_test.exs:491) 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_check_in_acknowledgement action (test/operately/data/change_013_create_activities_access_context_test.exs:316) 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_discussion_creation action (test/operately/data/change_013_create_activities_access_context_test.exs:391) 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_renamed action (test/operately/data/change_013_create_activities_access_context_test.exs:686) 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_closing action (test/operately/data/change_013_create_activities_access_context_test.exs:361) PASSED Test: assigns access_context to project activities project_check_in_submitted action (test/operately/data/change_013_create_activities_access_context_test.exs:551) PASSED Test: assigns access_context to company activities password_first_time_changed action (test/operately/data/change_013_create_activities_access_context_test.exs:40) PASSED Test: assigns access_context to space activities task_size_change action (test/operately/data/change_013_create_activities_access_context_test.exs:244) PASSED Test: assigns access_context to comment_added activity entity_type is :update (test/operately/data/change_013_create_activities_access_context_test.exs:833) PASSED Test: assigns access_context to project activities project_goal_connection action (test/operately/data/change_013_create_activities_access_context_test.exs:611) PASSED Test: assigns access_context to task activities task_status_change action (test/operately/data/change_013_create_activities_access_context_test.exs:775) PASSED Test: assigns access_context to project activities project_goal_disconnection action (test/operately/data/change_013_create_activities_access_context_test.exs:626) 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 goal activities goal_check_in_edit action (test/operately/data/change_013_create_activities_access_context_test.exs:346) PASSED Test: assigns access_context to goal activities goal_check_in action (test/operately/data/change_013_create_activities_access_context_test.exs:301) 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_reparent action (test/operately/data/change_013_create_activities_access_context_test.exs:285) 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 comment_added activity entity_type is nil (test/operately/data/change_013_create_activities_access_context_test.exs:883) 13:11:46.422 [error] Unhandled activity: %Operately.Activities.Activity{__meta__: #Ecto.Schema.Metadata<:loaded, "activities">, id: "47d49449-5102-4eee-839f-3cc3c5db4890", author_id: "0c308d44-df6e-4d9f-905a-c95f5acb5d18", 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: "0f0e942c-9230-405d-b0e0-771c798efc05", 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-05-30 13:11:46], updated_at: ~N[2025-05-30 13:11:46], requester_access_level: nil, request_info: nil} 13:11:46.423 [error] Comment associated with activity: %Operately.Updates.Comment{__meta__: #Ecto.Schema.Metadata<:loaded, "comments">, id: "0f0e942c-9230-405d-b0e0-771c798efc05", update_id: nil, update: #Ecto.Association.NotLoaded, author_id: "0c308d44-df6e-4d9f-905a-c95f5acb5d18", author: #Ecto.Association.NotLoaded, entity_id: nil, entity_type: nil, content: %{"message" => "some comment"}, reactions: #Ecto.Association.NotLoaded, notification: nil, inserted_at: ~N[2025-05-30 13:11:46], updated_at: ~N[2025-05-30 13:11:46], requester_access_level: nil} PASSED Test: assigns access_context to project activities project_closed action (test/operately/data/change_013_create_activities_access_context_test.exs:566) PASSED OperatelyWeb.Api.Queries.ListSpaceToolsTest 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 Resource Hubs - if caller has levels company=no_access and space=no_access, then expect code=forbidden (test/operately_web/api/queries/list_space_tools_test.exs:73) PASSED Test: permissions Projects - if caller has levels company=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 Messages Boards - if caller has levels company=no_access and space=no_access, then expect code=forbidden (test/operately_web/api/queries/list_space_tools_test.exs:90) PASSED Test: permissions Projects - if caller has levels company=no_access, space=full_access, project=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:108) PASSED Test: permissions 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=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=edit_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=full_access, space=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:125) PASSED Test: list_space_tools functionality list goals (test/operately_web/api/queries/list_space_tools_test.exs:179) PASSED Test: permissions Projects - if caller has levels company=edit_access, space=no_access, project=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:108) PASSED Test: permissions Projects - if caller has levels company=no_access, space=no_access, project=full_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:108) PASSED Test: permissions Messages Boards - if caller has levels company=no_access and space=full_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:90) PASSED Test: list_space_tools functionality list resource hubs (test/operately_web/api/queries/list_space_tools_test.exs:202) PASSED Test: permissions Projects - if caller has levels company=no_access, space=comment_access, project=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:108) PASSED Test: permissions Projects - if caller has levels company=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 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 Goals - if caller has levels company=comment_access, space=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:125) PASSED Test: permissions Messages Boards - if caller has levels company=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=comment_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:73) PASSED Test: security it requires authentication (test/operately_web/api/queries/list_space_tools_test.exs:13) PASSED Test: permissions 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=edit_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:125) PASSED Test: permissions Resource Hubs - if caller has levels company=full_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=view_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=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=full_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:73) PASSED Test: permissions Projects - if caller has levels company=view_access, space=no_access, project=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:108) PASSED Test: permissions 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 Messages Boards - if caller has levels company=edit_access and space=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:90) PASSED Test: permissions 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=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=no_access and space=edit_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:73) PASSED Test: list_space_tools functionality list projects (test/operately_web/api/queries/list_space_tools_test.exs:171) 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=view_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: invalid space it returns 422 invalid id (test/operately_web/api/queries/list_space_tools_test.exs:26) PASSED Test: permissions Messages Boards - if caller has levels company=no_access and space=edit_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=full_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 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 Messages Boards - if caller has levels company=comment_access and space=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:90) PASSED Test: permissions Messages Boards - if caller has levels company=view_access and space=no_access, then expect code=allowed (test/operately_web/api/queries/list_space_tools_test.exs:90) PASSED Test: list_space_tools functionality list messages boards (test/operately_web/api/queries/list_space_tools_test.exs:187) 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 OperatelyWeb.Api.Mutations.EditResourceHubFileTest 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=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/edit_resource_hub_file_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_resource_hub_file_test.exs:15) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (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=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=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/edit_resource_hub_file_test.exs:40) PASSED Test: permissions if caller has levels company=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=no_access, then expect code=404 (test/operately_web/api/mutations/edit_resource_hub_file_test.exs:40) PASSED Operately.Operations.ResourceHubLinkDeletingTest Test: Person without permissions is not notified (test/operately/operations/resource_hub_link_deleting_test.exs:60) PASSED 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 Operately.Assignments.LoaderTest Test: project check-ins returns all late check-ins (test/operately/assignments/loader_test.exs:50) PASSED Test: late project notifies managers more than 5 days late (test/operately/assignments/loader_test.exs:157) PASSED Test: late project check-in acknowledgement notifies managers more than 10 days late (test/operately/assignments/loader_test.exs:202) PASSED Test: late project notifies reviewer only more than 3 days late (test/operately/assignments/loader_test.exs:131) PASSED Test: late project notifies managers more than 15 days late (test/operately/assignments/loader_test.exs:178) PASSED Test: goals returns all late goals (test/operately/assignments/loader_test.exs:81) PASSED Test: projects returns all late projects (test/operately/assignments/loader_test.exs:25) PASSED Test: late goal notifies managers more than 15 days late (test/operately/assignments/loader_test.exs:246) PASSED Test: late goal notifies reviewer only more than 3 days late (test/operately/assignments/loader_test.exs:144) PASSED Test: project check-ins doesn't return late check-ins to non-reviewers (test/operately/assignments/loader_test.exs:59) PASSED Test: goal updates doesn't return late updates to non-reviewer (test/operately/assignments/loader_test.exs:123) PASSED Test: goals doesn't return goals not yet started (test/operately/assignments/loader_test.exs:94) PASSED Test: goal updates returns all late updates (test/operately/assignments/loader_test.exs:114) PASSED Test: late goal notifies managers more than 10 days late (test/operately/assignments/loader_test.exs:236) PASSED Test: late project notifies managers more than 10 days late (test/operately/assignments/loader_test.exs:168) PASSED Test: management hierarchy includes management hierarchy (test/operately/assignments/loader_test.exs:299) PASSED Test: goals doesn't return late goals to non-champions (test/operately/assignments/loader_test.exs:90) PASSED Test: late goal update acknowledgement notifies managers more than 15 days late (test/operately/assignments/loader_test.exs:280) PASSED Test: late goal update acknowledgement notifies managers more than 10 days late (test/operately/assignments/loader_test.exs:270) PASSED Test: projects doesn't return late projects to non-champions (test/operately/assignments/loader_test.exs:34) PASSED Test: late project check-in acknowledgement notifies managers more than 5 days late (test/operately/assignments/loader_test.exs:191) PASSED Test: late goal update acknowledgement notifies managers more than 5 days late (test/operately/assignments/loader_test.exs:259) PASSED Test: late goal notifies managers more than 5 days late (test/operately/assignments/loader_test.exs:225) PASSED Test: late project check-in acknowledgement notifies managers more than 15 days late (test/operately/assignments/loader_test.exs:212) 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.RemoveProjectMilestoneTest 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=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/remove_project_milestone_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/remove_project_milestone_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/mutations/remove_project_milestone_test.exs:11) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/remove_project_milestone_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=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=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=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=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=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=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 Operately.Operations.ResourceHubDocumentDeletingTest Test: Person without permissions is not notified (test/operately/operations/resource_hub_document_deleting_test.exs:64) PASSED 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 Operately.Data.Change012CreateGoalsAccessContextTest Test: creates access_context for soft-deleted goals (test/operately/data/change_012_create_goals_access_context_test.exs:52) PASSED Test: creates access_context for existing goals (test/operately/data/change_012_create_goals_access_context_test.exs:25) PASSED Test: creates access_context successfully when a goal already has access context (test/operately/data/change_012_create_goals_access_context_test.exs:41) PASSED Operately.Operations.ProjectRetrospectiveEditingTest Test: ProjectRetrospectiveEditing operation creates activity (test/operately/operations/project_retrospective_editing_test.exs:48) PASSED 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 Operately.Operations.GoalTimeframeEditingTest Test: notifications person without permissions is not notified (test/operately/operations/goal_timeframe_editing_test.exs:61) PASSED Test: notifications Editing timeframe notifies everyone (test/operately/operations/goal_timeframe_editing_test.exs:23) PASSED Test: GoalTimeframeEditing operation updates goal (test/operately/operations/goal_timeframe_editing_test.exs:77) PASSED Test: notifications Editing timeframe notifies selected people (test/operately/operations/goal_timeframe_editing_test.exs:43) 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.Queries.GetProjectRetrospectiveTest Test: permissions space members (test/operately_web/api/queries/get_project_retrospective_test.exs:43) PASSED Test: get_project_retrospective functionality include_potential_subscribers (test/operately_web/api/queries/get_project_retrospective_test.exs:142) PASSED Test: get_project_retrospective functionality get a project retrospective with nothing included (test/operately_web/api/queries/get_project_retrospective_test.exs:83) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_project_retrospective_test.exs:10) PASSED Test: permissions project contributors (test/operately_web/api/queries/get_project_retrospective_test.exs:61) PASSED Test: get_project_retrospective functionality include_permissions (test/operately_web/api/queries/get_project_retrospective_test.exs:127) 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_project (test/operately_web/api/queries/get_project_retrospective_test.exs:117) PASSED Test: get_project_retrospective functionality include_unread_notifications (test/operately_web/api/queries/get_project_retrospective_test.exs:91) PASSED Test: permissions company members (test/operately_web/api/queries/get_project_retrospective_test.exs:27) PASSED Operately.Assignments.FilterLateAssignmentsTest Test: business_days_between/2 spanning weekend - Fri -> Mon (test/operately/assignments/filter_late_assignments_test.exs:16) 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 same date returns 0 (test/operately/assignments/filter_late_assignments_test.exs:7) PASSED Test: business_days_between/2 2 full weeks (test/operately/assignments/filter_late_assignments_test.exs:20) 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 longer month boundary - Dec -> Jan (test/operately/assignments/filter_late_assignments_test.exs:36) 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 consecutive business days - Mon -> Tue (test/operately/assignments/filter_late_assignments_test.exs:12) PASSED Operately.Operations.PasswordFirstTimeChangingTest Test: PasswordFirstTimeChanging operation creates activity (test/operately/operations/password_first_time_changing_test.exs:44) PASSED 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 Operately.Operations.ProjectSpaceMovingTest Test: ProjectSpaceMoving operation creates new binding when it's to the company's space (test/operately/operations/project_space_moving_test.exs:58) PASSED Test: ProjectSpaceMoving operation creates activity and notification (test/operately/operations/project_space_moving_test.exs:90) PASSED Test: ProjectSpaceMoving operation changes project's space (test/operately/operations/project_space_moving_test.exs:33) 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 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 Operately.Goals.GoalTest Test: .status given a goal's last update is pending, its status should also be pending (test/operately/goals/goal_test.exs:34) PASSED Test: .status given a goal's last update is concern, its status should also be concern (test/operately/goals/goal_test.exs:34) PASSED Test: .status a closed goal with success 'yes' should have status 'achieved' (test/operately/goals/goal_test.exs:12) PASSED Test: .status given a goal's last update is on_track, its status should also be on_track (test/operately/goals/goal_test.exs:34) PASSED Test: .status a goal without update should be 'on_track' (test/operately/goals/goal_test.exs:45) PASSED Test: .status given a goal's last update is issue, its status should also be issue (test/operately/goals/goal_test.exs:34) PASSED Test: .status a closed goal with success 'no' should have status 'missed' (test/operately/goals/goal_test.exs:22) PASSED Operately.Operations.ResourceHubLinkEditingTest Test: Person without permissions is not notified (test/operately/operations/resource_hub_link_editing_test.exs:60) PASSED 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 Operately.Data.Change038AddSpaceToGoalEditingActivityTest Test: migration doesn't delete existing data in activity content (test/operately/data/change_038_add_space_to_goal_editing_activity_test.exs:15) PASSED Operately.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 OperatelyWeb.Api.Mutations.RemoveCompanyMemberTest 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 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: security it requires authentication (test/operately_web/api/mutations/remove_company_member_test.exs:7) PASSED Test: permissions if caller has levels company=edit_access, then expect code=403 (test/operately_web/api/mutations/remove_company_member_test.exs:23) PASSED Test: remove_company_member functionality admin can remove members (test/operately_web/api/mutations/remove_company_member_test.exs:45) PASSED Test: permissions if caller has levels company=view_access, then expect code=403 (test/operately_web/api/mutations/remove_company_member_test.exs:23) PASSED OperatelyWeb.Api.Queries.GetProjectCheckInTest 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_subscriptions_list (test/operately_web/api/queries/get_project_check_in_test.exs:172) PASSED Test: get_project_check_in functionality include_reactions (test/operately_web/api/queries/get_project_check_in_test.exs:133) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_project_check_in_test.exs:51) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_project_check_in_test.exs:15) PASSED Test: get_project_check_in functionality include_project (test/operately_web/api/queries/get_project_check_in_test.exs:156) PASSED Test: 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_author (test/operately_web/api/queries/get_project_check_in_test.exs:118) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_project_check_in_test.exs:75) 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_potential_subscribers (test/operately_web/api/queries/get_project_check_in_test.exs:185) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_project_check_in_test.exs:59) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_project_check_in_test.exs:29) PASSED Operately.Data.Change015CreateCompaniesAccessGroupTest Test: creates access groups, bindings and memberships (test/operately/data/change_015_create_companies_access_group_test.exs:9) PASSED OperatelyWeb.Api.Mutations.CloseGoalTest Test: permissions company members without edit access can't close a goal (test/operately_web/api/mutations/close_goal_test.exs:38) PASSED Test: close_goal functionality closes goal (test/operately_web/api/mutations/close_goal_test.exs:143) PASSED Test: permissions champions can close a goal (test/operately_web/api/mutations/close_goal_test.exs:107) PASSED Test: subscriptions to notifications adds mentioned people to subscription list (test/operately_web/api/mutations/close_goal_test.exs:189) PASSED Test: permissions company owner can close a goal (test/operately_web/api/mutations/close_goal_test.exs:53) PASSED Test: security it requires authentication (test/operately_web/api/mutations/close_goal_test.exs:16) PASSED Test: permissions reviewers can close a goal (test/operately_web/api/mutations/close_goal_test.exs:123) PASSED Test: permissions company members with full access can close a goal (test/operately_web/api/mutations/close_goal_test.exs:46) PASSED Test: permissions space managers can close a goal (test/operately_web/api/mutations/close_goal_test.exs:93) PASSED Test: permissions space members without full access can't close a goal (test/operately_web/api/mutations/close_goal_test.exs:76) PASSED Test: permissions space members with full access can close a goal (test/operately_web/api/mutations/close_goal_test.exs:85) PASSED Test: subscriptions to notifications creates subscription list for goal closing (test/operately_web/api/mutations/close_goal_test.exs:167) PASSED Test: permissions space members without view access can't see a goal (test/operately_web/api/mutations/close_goal_test.exs:67) PASSED Test: permissions company members without view access can't see a goal (test/operately_web/api/mutations/close_goal_test.exs:30) PASSED Test: subscriptions to notifications doesn't create repeated subscription (test/operately_web/api/mutations/close_goal_test.exs:211) PASSED OperatelyWeb.Api.HelpersTest Test: id_with_comments/2 takes at most 25 characters (test/operately_web/api/helpers_test.exs:18) PASSED Test: id_with_comments/2 returns the id with comments (test/operately_web/api/helpers_test.exs:10) PASSED Test: id_with_comments/2 doesn't create multiple dashes (test/operately_web/api/helpers_test.exs:14) PASSED OperatelyWeb.Api.Mutations.CreateResourceHubDocumentTest 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: subscriptions to notifications creates subscription list for document (test/operately_web/api/mutations/create_resource_hub_document_test.exs:139) PASSED Test: functionality creates document within folder (test/operately_web/api/mutations/create_resource_hub_document_test.exs:95) 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=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_document_test.exs:43) PASSED Test: security it requires authentication (test/operately_web/api/mutations/create_resource_hub_document_test.exs:18) PASSED Test: functionality creates draft document (test/operately_web/api/mutations/create_resource_hub_document_test.exs:113) PASSED Test: 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: 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=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=full_access and space=no_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=comment_access and space=no_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=no_access and space=no_access, then expect code=404 (test/operately_web/api/mutations/create_resource_hub_document_test.exs:43) PASSED OperatelyWeb.Api.Mutations.EditParentFolderInResourceHubTest Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=403 (test/operately_web/api/mutations/edit_parent_folder_in_resource_hub_test.exs:39) PASSED Test: functionality change file parent folder (test/operately_web/api/mutations/edit_parent_folder_in_resource_hub_test.exs:95) PASSED Test: permissions if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/edit_parent_folder_in_resource_hub_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_parent_folder_in_resource_hub_test.exs:14) PASSED Test: functionality change folder parent folder (test/operately_web/api/mutations/edit_parent_folder_in_resource_hub_test.exs:111) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (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=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=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: 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: 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 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.AddProjectContributorTest 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 champions can add contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:131) 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: add_project_contributor functionality adds contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:167) PASSED Test: permissions company admins can add contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:51) PASSED Test: security it requires authentication (test/operately_web/api/mutations/add_project_contributor_test.exs:13) PASSED Test: permissions contributors with full access can add contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:119) PASSED Test: permissions company members with full access can add contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:43) PASSED Test: permissions space managers can add contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:93) 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 with full access can add contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:84) PASSED Test: permissions reviewers can add contributor to a project (test/operately_web/api/mutations/add_project_contributor_test.exs:147) PASSED Test: permissions space members without view access can't see a project (test/operately_web/api/mutations/add_project_contributor_test.exs:66) 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 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.BlobsTest Test: blobs create_blob/1 with valid data creates a blob (test/operately/blobs_test.exs:33) PASSED Test: blobs update_blob/2 with valid data updates the blob (test/operately/blobs_test.exs:53) PASSED Test: blobs list_blobs/0 returns all blobs (test/operately/blobs_test.exs:23) PASSED Test: blobs create_blob/1 with invalid data returns error changeset (test/operately/blobs_test.exs:49) PASSED Test: blobs delete_blob/1 deletes the blob (test/operately/blobs_test.exs:68) PASSED Test: blobs change_blob/1 returns a blob changeset (test/operately/blobs_test.exs:74) PASSED Test: blobs update_blob/2 with invalid data returns error changeset (test/operately/blobs_test.exs:62) PASSED Test: blobs get_blob!/1 returns the blob with given id (test/operately/blobs_test.exs:28) PASSED OperatelyWeb.Api.Mutations.EditKeyResourceTest 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: 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=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_key_resource_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_key_resource_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_key_resource_test.exs:11) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_key_resource_test.exs:39) PASSED Test: 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=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=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=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=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=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 Operately.AccessContextsTest 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 project (test/operately/access/contexts_test.exs:83) PASSED Test: access_contexts delete_context/1 deletes the context (test/operately/access/contexts_test.exs:44) PASSED Test: access_contexts list_contexts/0 returns all contexts (test/operately/access/contexts_test.exs:22) PASSED Test: access_contexts relationships with projects, groups, activities and companies access_context cannot be attached to more than one entity (test/operately/access/contexts_test.exs:89) PASSED Test: access_contexts update_context/2 with valid data updates the context (test/operately/access/contexts_test.exs:37) 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 relationships with projects, groups, activities and companies create access_context for a company (test/operately/access/contexts_test.exs:65) 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 change_context/1 returns a context changeset (test/operately/access/contexts_test.exs:49) PASSED Test: access_contexts get_context!/1 returns the context with given id (test/operately/access/contexts_test.exs:26) 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.GoalsTest Test: update name it requires a name (test/operately_web/api/goals_test.exs:24) PASSED Test: update target index it returns 404 if target does not exist (test/operately_web/api/goals_test.exs:349) PASSED Test: update due date it can update the due date to nil (test/operately_web/api/goals_test.exs:96) PASSED Test: update target it returns 404 if the goal does not exist (test/operately_web/api/goals_test.exs:290) PASSED Test: update target it requires authentication (test/operately_web/api/goals_test.exs:263) PASSED Test: update target it returns 404 if target does not exist (test/operately_web/api/goals_test.exs:274) PASSED Test: update target index it fails if required fields are missing (test/operately_web/api/goals_test.exs:342) PASSED Test: update target value it updates the target value (test/operately_web/api/goals_test.exs:241) PASSED Test: delete target it requires authentication (test/operately_web/api/goals_test.exs:149) PASSED Test: update target it fails if required fields are missing (test/operately_web/api/goals_test.exs:267) PASSED Test: update target index it requires authentication (test/operately_web/api/goals_test.exs:338) PASSED Test: update due date it requires a goal_id (test/operately_web/api/goals_test.exs:79) PASSED Test: add target it fails if required fields are missing (test/operately_web/api/goals_test.exs:112) PASSED Test: update description it requires authentication (test/operately_web/api/goals_test.exs:45) PASSED Test: update name it requires authentication (test/operately_web/api/goals_test.exs:13) PASSED Test: delete target it returns 404 if the goal does not exist (test/operately_web/api/goals_test.exs:186) PASSED Test: update due date it updates the due date (test/operately_web/api/goals_test.exs:86) PASSED Test: update name it updates the name (test/operately_web/api/goals_test.exs:31) PASSED Test: update due date it requires authentication (test/operately_web/api/goals_test.exs:75) PASSED Test: update description it requires a description (test/operately_web/api/goals_test.exs:56) PASSED Test: update target it updates the target (test/operately_web/api/goals_test.exs:306) PASSED Test: update description it updates the description (test/operately_web/api/goals_test.exs:63) PASSED Test: delete target it returns 404 if target does not exist (test/operately_web/api/goals_test.exs:174) PASSED Test: add target it requires authentication (test/operately_web/api/goals_test.exs:108) PASSED Test: update target value it returns 404 if the goal does not exist (test/operately_web/api/goals_test.exs:228) PASSED Test: update description it requires a goal_id (test/operately_web/api/goals_test.exs:49) PASSED Test: update target value it returns 404 if target does not exist (test/operately_web/api/goals_test.exs:215) PASSED Test: update target value it fails if required fields are missing (test/operately_web/api/goals_test.exs:208) PASSED Test: update target index it returns 404 if the goal does not exist (test/operately_web/api/goals_test.exs:362) PASSED Test: update name it requires a goal_id (test/operately_web/api/goals_test.exs:17) PASSED Test: add target it adds a target to the goal (test/operately_web/api/goals_test.exs:119) PASSED Test: update target value it requires authentication (test/operately_web/api/goals_test.exs:204) PASSED Test: delete target it deletes the target (test/operately_web/api/goals_test.exs:160) PASSED Test: delete target it fails if required fields are missing (test/operately_web/api/goals_test.exs:153) PASSED Test: update target index it updates the target index (test/operately_web/api/goals_test.exs:375) PASSED OperatelyWeb.Api.Mutations.PublishResourceHubDocumentTest Test: permissions User has view access (test/operately_web/api/mutations/publish_resource_hub_document_test.exs:36) PASSED Test: publish_resource_hub_document functionality published draft document (test/operately_web/api/mutations/publish_resource_hub_document_test.exs:71) PASSED Test: security it requires authentication (test/operately_web/api/mutations/publish_resource_hub_document_test.exs:8) PASSED Test: permissions User has permissions (test/operately_web/api/mutations/publish_resource_hub_document_test.exs:47) PASSED Test: publish_resource_hub_document functionality activity is created (test/operately_web/api/mutations/publish_resource_hub_document_test.exs:85) PASSED Test: permissions User has no permissions (test/operately_web/api/mutations/publish_resource_hub_document_test.exs:25) PASSED OperatelyWeb.Api.Mutations.AddSpaceMembersTest 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: permissions company admins can add members to space (test/operately_web/api/mutations/add_space_members_test.exs:60) PASSED Test: security it requires authentication (test/operately_web/api/mutations/add_space_members_test.exs:12) 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: add_space_members functionality adds multiple members (test/operately_web/api/mutations/add_space_members_test.exs:136) PASSED Test: permissions space managers can add members to space (test/operately_web/api/mutations/add_space_members_test.exs:94) PASSED Test: add_space_members functionality adds one member (test/operately_web/api/mutations/add_space_members_test.exs:124) 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 without view access can't see space (test/operately_web/api/mutations/add_space_members_test.exs:25) PASSED OperatelyWeb.Api.Queries.GetNotificationsTest OperatelyWeb.Api.Mutations.ArchiveGoalTest Test: permissions company members without full access can't archive a goal (test/operately_web/api/mutations/archive_goal_test.exs:35) PASSED Test: archive_goal functionality archives goal (test/operately_web/api/mutations/archive_goal_test.exs:141) PASSED Test: permissions champions can archive a goal (test/operately_web/api/mutations/archive_goal_test.exs:105) PASSED Test: permissions company admins can archive a goal (test/operately_web/api/mutations/archive_goal_test.exs:50) PASSED Test: security it requires authentication (test/operately_web/api/mutations/archive_goal_test.exs:13) PASSED Test: permissions reviewers can archive a goal (test/operately_web/api/mutations/archive_goal_test.exs:121) PASSED Test: permissions company members with full access can archive a goal (test/operately_web/api/mutations/archive_goal_test.exs:43) PASSED Test: permissions space managers can archive a goal (test/operately_web/api/mutations/archive_goal_test.exs:91) 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 with full access can archive a goal (test/operately_web/api/mutations/archive_goal_test.exs:83) 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 company members without view access can't see a goal (test/operately_web/api/mutations/archive_goal_test.exs:27) PASSED OperatelyWeb.Api.Mutations.EditProjectNameTest 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 champions can edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:118) 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: edit_project_name functionality edits project name (test/operately_web/api/mutations/edit_project_name_test.exs:152) PASSED Test: permissions company owners can edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:46) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_project_name_test.exs:11) PASSED Test: permissions contributors with edit access can edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:107) PASSED Test: permissions company members with edit access can edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:39) PASSED Test: permissions space managers can edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:83) 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 with edit access can edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:75) PASSED Test: permissions reviewers can edit project name (test/operately_web/api/mutations/edit_project_name_test.exs:133) 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 company members without view access can't see a project (test/operately_web/api/mutations/edit_project_name_test.exs:25) PASSED OperatelyWeb.Api.Mutations.SubscribeToNotificationsTest 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=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 updates canceled subscription (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:93) 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=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=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: security it requires authentication (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:13) PASSED Test: permissions if caller has levels company=view_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:44) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=200 (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:44) PASSED Test: permissions if caller has levels company=no_access, space=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=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=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=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=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=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:44) PASSED Test: subscribe_to_notifications functionality subscribes to check-in notifications (test/operately_web/api/mutations/subscribe_to_notifications_test.exs:82) PASSED OperatelyWeb.Api.Mutations.PostMilestoneCommentTest Test: permissions if action=reopen and caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=none and caller has levels company=no_access, space=no_access, project=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=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=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=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=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=no_access on the project, then expect code=404 (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: post_milestone_comment functionality post comment with action: reopen (test/operately_web/api/mutations/post_milestone_comment_test.exs:108) PASSED Test: permissions if action=reopen and caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=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=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=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=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=none and caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=reopen and caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=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=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: security it requires authentication (test/operately_web/api/mutations/post_milestone_comment_test.exs:13) 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=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=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=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=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=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=none and caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=complete and caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=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=view_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=none and caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: post_milestone_comment functionality post comment with action: none (test/operately_web/api/mutations/post_milestone_comment_test.exs:108) PASSED Test: permissions if action=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=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=reopen and caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=none and caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=complete and caller has levels company=no_access, space=no_access, project=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=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=reopen and caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=complete and caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/post_milestone_comment_test.exs:76) PASSED Test: permissions if action=complete and caller has levels company=no_access, space=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=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 OperatelyWeb.Api.Mutations.JoinCompanyText Test: join_company functionality change password successfully (test/operately_web/api/mutations/join_company_test.exs:43) PASSED Test: join_company functionality it fails if passwords don't match (test/operately_web/api/mutations/join_company_test.exs:21) PASSED Test: join_company functionality if fails if token is invalid (test/operately_web/api/mutations/join_company_test.exs:32) PASSED OperatelyWeb.Api.Mutations.EditResourceHubDocumentTest 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=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/edit_resource_hub_document_test.exs:41) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_resource_hub_document_test.exs:16) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (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=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=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/edit_resource_hub_document_test.exs:41) PASSED Test: permissions if caller has levels company=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=no_access, then expect code=404 (test/operately_web/api/mutations/edit_resource_hub_document_test.exs:41) PASSED Operately.Goals.TargetTest Test: format_value/1 formats percentage values correctly (test/operately/goals/target_test.exs:17) PASSED Test: format_value/1 handles negative values (test/operately/goals/target_test.exs:27) PASSED Test: format_value/1 formats integer values with units (test/operately/goals/target_test.exs:7) PASSED Test: format_value/1 handles zero values (test/operately/goals/target_test.exs:22) PASSED Test: format_value/1 formats float values without decimal places as integers (test/operately/goals/target_test.exs:32) PASSED Test: format_value/1 formats float values with two decimal places (test/operately/goals/target_test.exs:12) PASSED Operately.Data.Change022CreateGoalBindingsTest Test: creates access bindings between goals and champions and reviewers (test/operately/data/change_022_create_goal_bindings_test.exs:68) PASSED Test: creates access bindings between goals and companies (test/operately/data/change_022_create_goal_bindings_test.exs:32) PASSED Test: creates access bindings between goals and spaces (test/operately/data/change_022_create_goal_bindings_test.exs:50) 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.Mutations.ArchiveMessageTest Test: functionality it archives a draft message (test/operately_web/api/mutations/archive_message_test.exs:31) PASSED 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 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.Queries.GetProjectTest Test: permissions company members have no access (test/operately_web/api/queries/get_project_test.exs:40) PASSED Test: get_project functionality include_space (test/operately_web/api/queries/get_project_test.exs:134) PASSED Test: get_project functionality include_champion (test/operately_web/api/queries/get_project_test.exs:193) 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 (test/operately_web/api/queries/get_project_test.exs:157) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_project_test.exs:54) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_project_test.exs:15) PASSED Test: get_project functionality include_key_resources (test/operately_web/api/queries/get_project_test.exs:232) PASSED Test: get_project functionality include_unread_notifications (test/operately_web/api/queries/get_project_test.exs:117) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_project_test.exs:47) PASSED Test: get_project functionality get a project with nothing included (test/operately_web/api/queries/get_project_test.exs:106) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_project_test.exs:70) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_project_test.exs:86) PASSED Test: get_project functionality include_permissions (test/operately_web/api/queries/get_project_test.exs:222) PASSED Test: get_project functionality include_retrospective (test/operately_web/api/queries/get_project_test.exs:145) PASSED Test: get_project functionality include_milestones (test/operately_web/api/queries/get_project_test.exs:313) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_project_test.exs:62) PASSED Test: get_project functionality include_potential_subscribers (test/operately_web/api/queries/get_project_test.exs:283) PASSED Test: get_project functionality include_contributors_access_levels (test/operately_web/api/queries/get_project_test.exs:263) PASSED Test: security it is not possible to get a project from another company (test/operately_web/api/queries/get_project_test.exs:19) PASSED Test: get_project functionality include_goal (test/operately_web/api/queries/get_project_test.exs:177) PASSED Test: get_project functionality include_access_levels (test/operately_web/api/queries/get_project_test.exs:244) PASSED Test: get_project functionality include_archived (test/operately_web/api/queries/get_project_test.exs:214) PASSED Test: get_project functionality include_reviewer (test/operately_web/api/queries/get_project_test.exs:203) PASSED OperatelyWeb.Api.Mutations.DeleteResourceHubFileTest 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=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_file_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/mutations/delete_resource_hub_file_test.exs:15) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (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=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=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_file_test.exs:40) PASSED Test: permissions if caller has levels company=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=no_access, then expect code=404 (test/operately_web/api/mutations/delete_resource_hub_file_test.exs:40) PASSED Operately.Operations.ProjectContributorRemovedTest Test: ProjectContributorRemoved operation creates activity (test/operately/operations/project_contributor_removed_test.exs:54) PASSED 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 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 OperatelyWeb.Api.Queries.GetProjectCheckInsTest Test: permissions company members have access (test/operately_web/api/queries/get_project_check_ins_test.exs:34) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_project_check_ins_test.exs:49) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_project_check_ins_test.exs:12) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_project_check_ins_test.exs:41) 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 company members have no access (test/operately_web/api/queries/get_project_check_ins_test.exs:27) PASSED OperatelyWeb.Api.Queries.GetActivityTest Test: permissions company members have access (test/operately_web/api/queries/get_activity_test.exs:38) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_activity_test.exs:63) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_activity_test.exs:14) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_activity_test.exs:48) PASSED Test: get_activity functionality include_unread_goal_notifications (test/operately_web/api/queries/get_activity_test.exs:139) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_activity_test.exs:94) PASSED Test: get_activity functionality with no includes (test/operately_web/api/queries/get_activity_test.exs:121) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_activity_test.exs:78) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_activity_test.exs:28) PASSED Operately.Operations.GroupMemberRemovingTest Test: GroupMemberRemoving operation creates activity (test/operately/operations/group_member_removing_test.exs:50) PASSED 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 OperatelyWeb.Api.Queries.ListResourceHubNodesTest 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: list_resource_hub_nodes functionality list only nodes within folder (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:94) PASSED Test: permissions Resource Hubs - if caller has levels company=full_access and space=no_access, then expect code=allowed (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:38) PASSED Test: list_resource_hub_nodes functionality include_children_count (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:146) PASSED 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: security it requires authentication (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:10) PASSED Test: list_resource_hub_nodes functionality fetches all nodes (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:78) PASSED Test: permissions Resource Hubs - if caller has levels company=no_access and space=comment_access, then expect code=allowed (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:38) PASSED Test: permissions Resource Hubs - if caller has levels company=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=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=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 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=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=no_access and space=no_access, then expect code=forbidden (test/operately_web/api/queries/list_resource_hub_nodes_test.exs:38) PASSED Operately.Operations.ResourceHubLinkCreatingTest Test: Person without permissions is not notified (test/operately/operations/resource_hub_link_creating_test.exs:61) PASSED 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 Operately.Operations.ResourceHubFileDeletingTest Test: Person without permissions is not notified (test/operately/operations/resource_hub_file_deleting_test.exs:65) PASSED 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 Operately.Data.Change021CreateProjectBindingsToCompanyAndSpaceTest 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 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 OperatelyWeb.Api.Queries.GetGoalTest Test: permissions company members have access (test/operately_web/api/queries/get_goal_test.exs:42) PASSED Test: get_goals functionality include_champion (test/operately_web/api/queries/get_goal_test.exs:156) PASSED Test: get_goals functionality include_projects (test/operately_web/api/queries/get_goal_test.exs:224) PASSED Test: get_goals functionality include_unread_notifications (test/operately_web/api/queries/get_goal_test.exs:131) PASSED Test: get_goals functionality include_last_check_in (test/operately_web/api/queries/get_goal_test.exs:190) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_goal_test.exs:67) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_goal_test.exs:17) PASSED Test: get_goals functionality include_access_levels (test/operately_web/api/queries/get_goal_test.exs:284) PASSED Test: get_goals functionality with no includes (test/operately_web/api/queries/get_goal_test.exs:148) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_goal_test.exs:53) PASSED Test: get_goals functionality when goal does not exist (test/operately_web/api/queries/get_goal_test.exs:125) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_goal_test.exs:99) PASSED Test: get_goals functionality when id is not provided (test/operately_web/api/queries/get_goal_test.exs:121) PASSED Test: get_goals functionality include_targets (test/operately_web/api/queries/get_goal_test.exs:275) PASSED Test: get_goals functionality include_closed_by (test/operately_web/api/queries/get_goal_test.exs:166) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_goal_test.exs:81) PASSED Test: get_goals functionality include_potential_subscribers (test/operately_web/api/queries/get_goal_test.exs:338) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_goal_test.exs:31) PASSED Test: get_goals functionality include_permissions (test/operately_web/api/queries/get_goal_test.exs:211) PASSED Test: get_goals functionality include_privacy (test/operately_web/api/queries/get_goal_test.exs:305) PASSED Test: get_goals functionality include_space (test/operately_web/api/queries/get_goal_test.exs:262) PASSED Test: get_goals functionality include_reviewer (test/operately_web/api/queries/get_goal_test.exs:251) PASSED OperatelyWeb.Api.Mutations.EditCompanyTest Test: authorization company admin can edit (test/operately_web/api/mutations/edit_company_test.exs:24) PASSED Test: functionality it changes the company name (test/operately_web/api/mutations/edit_company_test.exs:43) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_company_test.exs:5) 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 OperatelyWeb.Api.Mutations.CopyResourceHubFolderTest 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: 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=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=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=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=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 copies folder into another parent folder (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:128) PASSED Test: permissions if caller has levels company=no_access, origin_space=full_access and dest_space=edit_access, then expect code=200 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=comment_access and dest_space=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=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: 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=view_access and dest_space=edit_access, then expect code=403 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=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=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: 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=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: 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=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=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=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=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=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=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=comment_access and dest_space=view_access, then expect code=403 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=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=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: 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=no_access, then expect code=404 (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=no_access and dest_space=no_access, then expect code=404 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=comment_access and dest_space=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=edit_access and dest_space=full_access, then expect code=200 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=edit_access and dest_space=view_access, then expect code=403 (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:65) PASSED Test: permissions if caller has levels company=no_access, origin_space=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: functionality folder is copied and copy has the same name (test/operately_web/api/mutations/copy_resource_hub_folder_test.exs:200) PASSED Operately.Operations.GoalEditingTest Test: GoalEditing operation updates goal's bindings to company (test/operately/operations/goal_editing_test.exs:93) PASSED Test: GoalEditing operation updates goal's bindings to champion and reviewer with tags (test/operately/operations/goal_editing_test.exs:122) PASSED Test: GoalEditing operation updates goal (test/operately/operations/goal_editing_test.exs:54) PASSED Test: GoalEditing operation updates goal's bindings to space (test/operately/operations/goal_editing_test.exs:110) PASSED Test: GoalEditing operation creates activity and notification (test/operately/operations/goal_editing_test.exs:160) PASSED Test: GoalEditing operation updates company space goal (test/operately/operations/goal_editing_test.exs:78) PASSED OperatelyWeb.Api.Queries.SearchPotentialSpaceMembersTest 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 suspended people excluded from result (test/operately_web/api/queries/search_potential_space_members_test.exs:183) PASSED Test: search_potential_space_members functionality exlude_ids excludes members from result (test/operately_web/api/queries/search_potential_space_members_test.exs:151) PASSED Test: permissions space member has no access (test/operately_web/api/queries/search_potential_space_members_test.exs:78) PASSED Test: security it requires authentication (test/operately_web/api/queries/search_potential_space_members_test.exs:12) PASSED Test: search_potential_space_members functionality existing members excluded from result (test/operately_web/api/queries/search_potential_space_members_test.exs:167) PASSED Test: permissions company member has no access (test/operately_web/api/queries/search_potential_space_members_test.exs:68) 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: search_potential_space_members functionality returns all petential members (test/operately_web/api/queries/search_potential_space_members_test.exs:123) 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: permissions suspended people don't have access (test/operately_web/api/queries/search_potential_space_members_test.exs:94) PASSED Test: security it doesn't return people from other companies (test/operately_web/api/queries/search_potential_space_members_test.exs:16) PASSED OperatelyWeb.TelemetryTest Test: it records the database query times (test/operately_web/telemetry_test.exs:62) operately.repo.query.total_time:0|ms operately.repo.query.query_time:0|ms operately.repo.query.queue_time:0|ms PASSED Test: it records the duration of API requests (test/operately_web/telemetry_test.exs:52) operately.api.request.status.401:1|c operately.api.request.duration:0|ms PASSED Test: it records the api response codes (test/operately_web/telemetry_test.exs:57) operately.api.request.status.401:1|c operately.api.request.duration:0|ms PASSED OperatelyWeb.Api.Mutations.AddReactionTest Test: permissions resource hub document - if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:126) PASSED Test: permissions project 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=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 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 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=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 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 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 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 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 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 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 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 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 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 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 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=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 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 project retrospective - if caller has levels company=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:102) PASSED Test: permissions project check-in comment - if caller has levels company=no_access, space=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 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 - if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:149) PASSED Test: permissions if caller has levels company=no_access, space=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 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 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) 13:12:02.384 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/mutations/add_reaction_test.exs:617: OperatelyWeb.Api.Mutations.AddReactionTest.create_comment/3 test/operately_web/api/mutations/add_reaction_test.exs:349: OperatelyWeb.Api.Mutations.AddReactionTest."test permissions goal discussion comment - if caller has levels company=no_access, space=no_access, goal=champion on the goal, then expect code=200"/1 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 message comment - if caller has levels company=full_access, space=no_access on the space, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:397) PASSED Test: permissions project 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 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 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 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 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 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 resource hub document - if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:126) PASSED Test: permissions project retrospective - if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:102) PASSED Test: permissions resource hub 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 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 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 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=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=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 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 if caller has levels company=no_access, space=full_access, goal=no_access on the comment thread, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:195) PASSED Test: permissions resource hub link comment - if caller has levels company=no_access and space=comment_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:473) PASSED Test: permissions project check-in comment - if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:267) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:78) PASSED Test: permissions project 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 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 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 project retrospective comment - if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:293) PASSED Test: permissions resource hub document 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 project milestone comment - if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:319) PASSED Test: permissions resource hub 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 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 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=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 comment - if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/add_reaction_test.exs:293) PASSED Test: permissions project milestone comment - if caller has levels company=no_access, space=view_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:319) PASSED Test: permissions project retrospective comment - if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:293) PASSED Test: security it requires authentication (test/operately_web/api/mutations/add_reaction_test.exs:18) PASSED Test: permissions 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: add_reaction functionality add reaction to a discussion (test/operately_web/api/mutations/add_reaction_test.exs:509) 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 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 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 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 project retrospective - if caller has levels company=no_access, space=view_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:102) PASSED Test: permissions resource hub document comment - if caller has levels company=no_access and space=comment_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:423) PASSED Test: permissions if caller has levels company=no_access, space=full_access on the space, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:243) 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 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 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 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 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 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 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 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 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 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) 13:12:03.667 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/mutations/add_reaction_test.exs:617: OperatelyWeb.Api.Mutations.AddReactionTest.create_comment/3 test/operately_web/api/mutations/add_reaction_test.exs:349: OperatelyWeb.Api.Mutations.AddReactionTest."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"/1 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 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 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 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 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 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=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 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 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 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 if caller has levels company=no_access, space=edit_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:219) PASSED Test: permissions project 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 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 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 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) 13:12:04.027 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/mutations/add_reaction_test.exs:617: OperatelyWeb.Api.Mutations.AddReactionTest.create_comment/3 test/operately_web/api/mutations/add_reaction_test.exs:349: OperatelyWeb.Api.Mutations.AddReactionTest."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"/1 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=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 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) 13:12:04.100 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/mutations/add_reaction_test.exs:617: OperatelyWeb.Api.Mutations.AddReactionTest.create_comment/3 test/operately_web/api/mutations/add_reaction_test.exs:349: OperatelyWeb.Api.Mutations.AddReactionTest."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"/1 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 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 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 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) 13:12:04.194 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/mutations/add_reaction_test.exs:617: OperatelyWeb.Api.Mutations.AddReactionTest.create_comment/3 test/operately_web/api/mutations/add_reaction_test.exs:349: OperatelyWeb.Api.Mutations.AddReactionTest."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"/1 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=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 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 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 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 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 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=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:473) PASSED Test: permissions resource hub link comment - if caller has levels company=no_access and space=view_access, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:473) 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 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 update comment - if caller has levels company=no_access, space=no_access, goal=champion on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:371) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:78) PASSED Test: permissions resource hub file comment - if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:448) PASSED Test: permissions goal discussion comment - if caller has levels company=no_access, space=full_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:345) 13:12:04.564 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/mutations/add_reaction_test.exs:617: OperatelyWeb.Api.Mutations.AddReactionTest.create_comment/3 test/operately_web/api/mutations/add_reaction_test.exs:349: OperatelyWeb.Api.Mutations.AddReactionTest."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"/1 PASSED Test: permissions resource hub file - if caller has levels company=comment_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:149) PASSED Test: permissions project 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 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 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 project retrospective comment - if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:293) PASSED Test: permissions if caller has levels company=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 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) 13:12:04.724 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/mutations/add_reaction_test.exs:617: OperatelyWeb.Api.Mutations.AddReactionTest.create_comment/3 test/operately_web/api/mutations/add_reaction_test.exs:349: OperatelyWeb.Api.Mutations.AddReactionTest."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"/1 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) 13:12:04.753 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/mutations/add_reaction_test.exs:617: OperatelyWeb.Api.Mutations.AddReactionTest.create_comment/3 test/operately_web/api/mutations/add_reaction_test.exs:349: OperatelyWeb.Api.Mutations.AddReactionTest."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"/1 PASSED Test: permissions project retrospective comment - if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:293) PASSED Test: permissions if caller has levels company=no_access, space=view_access on the space, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:243) 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 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 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 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 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 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 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 message comment - if caller has levels company=no_access, space=comment_access on the space, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:397) PASSED Test: permissions resource hub 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 - 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 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 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 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 - 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 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 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 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 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 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 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 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) 13:12:05.280 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/mutations/add_reaction_test.exs:617: OperatelyWeb.Api.Mutations.AddReactionTest.create_comment/3 test/operately_web/api/mutations/add_reaction_test.exs:349: OperatelyWeb.Api.Mutations.AddReactionTest."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"/1 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 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 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 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 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=no_access and space=view_access, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:149) 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 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 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 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 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 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 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) 13:12:05.599 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/mutations/add_reaction_test.exs:617: OperatelyWeb.Api.Mutations.AddReactionTest.create_comment/3 test/operately_web/api/mutations/add_reaction_test.exs:349: OperatelyWeb.Api.Mutations.AddReactionTest."test permissions goal discussion comment - if caller has levels company=no_access, space=no_access, goal=reviewer on the goal, then expect code=200"/1 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 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) 13:12:05.641 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/mutations/add_reaction_test.exs:617: OperatelyWeb.Api.Mutations.AddReactionTest.create_comment/3 test/operately_web/api/mutations/add_reaction_test.exs:349: OperatelyWeb.Api.Mutations.AddReactionTest."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"/1 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 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 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 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 link comment - if caller has levels company=edit_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:473) PASSED Test: permissions resource hub document comment - if caller has levels company=no_access and space=view_access, then expect code=403 (test/operately_web/api/mutations/add_reaction_test.exs:423) PASSED Test: permissions project retrospective - if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:102) PASSED Test: permissions project 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 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 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 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 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 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=no_access, goal=reviewer on the goal, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:219) PASSED Test: permissions project retrospective - if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:102) PASSED Test: permissions resource hub file - if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/add_reaction_test.exs:149) PASSED Test: permissions project milestone comment - if caller has levels company=no_access, space=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 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 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 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 Operately.Messages.MessageTest Test: creating a draft message published_at is nil (test/operately/messages/message_test.exs:57) PASSED Test: updating state to published published_at is set (test/operately/messages/message_test.exs:89) PASSED Test: creating a message published_at is set (test/operately/messages/message_test.exs:30) 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 OperatelyWeb.Api.Mutations.JoinSpaceTest Test: permissions company members with view access can join space (test/operately_web/api/mutations/join_space_test.exs:32) PASSED Test: permissions company owners can join space (test/operately_web/api/mutations/join_space_test.exs:46) PASSED Test: security it requires authentication (test/operately_web/api/mutations/join_space_test.exs:11) PASSED Test: permissions company members with full access can join space (test/operately_web/api/mutations/join_space_test.exs:39) PASSED Test: join_space functionality person joins space (test/operately_web/api/mutations/join_space_test.exs:70) PASSED Test: permissions company members without view access can't see space (test/operately_web/api/mutations/join_space_test.exs:24) 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 Operately.Operations.ResourceHubFolderCopyingTest Test: Copy content document within folder is copied (test/operately/operations/resource_hub_folder_copying_test.exs:70) PASSED Test: Copy content link within folder is copied (test/operately/operations/resource_hub_folder_copying_test.exs:128) PASSED Test: Copy content folder and its nested content are copied (test/operately/operations/resource_hub_folder_copying_test.exs:20) PASSED Test: Copy content file within folder is copied (test/operately/operations/resource_hub_folder_copying_test.exs:99) PASSED Test: Subscriptions subscriptions list and active subscriptions are copied (test/operately/operations/resource_hub_folder_copying_test.exs:252) 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 another Resource Hub (test/operately/operations/resource_hub_folder_copying_test.exs:209) 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 empty folder is copied (test/operately/operations/resource_hub_folder_copying_test.exs:52) PASSED OperatelyWeb.Api.Mutations.EditProjectTimelineTest 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: edit_project_timeline functionality edits project start date and deadline (test/operately_web/api/mutations/edit_project_timeline_test.exs:72) PASSED Test: permissions if caller has levels company=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: 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=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: security it requires authentication (test/operately_web/api/mutations/edit_project_timeline_test.exs:13) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_timeline_test.exs:41) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_timeline_test.exs:41) PASSED Test: permissions if caller has levels company=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=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=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: 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=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=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 OperatelyWeb.Api.Queries.GetSpacesTest Test: permissions members have access to company space only (test/operately_web/api/queries/get_spaces_test.exs:40) 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: security it requires authentication (test/operately_web/api/queries/get_spaces_test.exs:13) PASSED Test: permissions members have access to spaces they are part of (test/operately_web/api/queries/get_spaces_test.exs:53) PASSED Test: get_spaces functionality get_spaces (test/operately_web/api/queries/get_spaces_test.exs:87) PASSED Test: security it returns only spaces from the user's company (test/operately_web/api/queries/get_spaces_test.exs:17) PASSED OperatelyWeb.Api.Mutations.ArchiveProjectTest 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 champions can archive a project (test/operately_web/api/mutations/archive_project_test.exs:128) 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: archive_project functionality archives project (test/operately_web/api/mutations/archive_project_test.exs:164) PASSED Test: permissions company admins can archive a project (test/operately_web/api/mutations/archive_project_test.exs:50) PASSED Test: security it requires authentication (test/operately_web/api/mutations/archive_project_test.exs:13) PASSED Test: permissions contributors who have full access can archive a project (test/operately_web/api/mutations/archive_project_test.exs:117) PASSED Test: permissions company members who have full access can archive a project (test/operately_web/api/mutations/archive_project_test.exs:43) PASSED Test: permissions space managers can archive a project (test/operately_web/api/mutations/archive_project_test.exs:91) 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 have full access can archive a project (test/operately_web/api/mutations/archive_project_test.exs:83) PASSED Test: permissions reviewers can archive a project (test/operately_web/api/mutations/archive_project_test.exs:144) 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 company members who don't have view access can't see a project (test/operately_web/api/mutations/archive_project_test.exs:27) PASSED Operately.GoalsTest Test: goals create_goal/2 with valid data creates a goal (test/operately/goals_test.exs:31) PASSED Test: goal deletion when goal is deleted, its check-ins are also deleted (test/operately/goals_test.exs:129) PASSED Test: goal deletion given child goal and project are deleted first, goal can be deleted (test/operately/goals_test.exs:104) 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 update_goal/2 with valid data updates the goal (test/operately/goals_test.exs:62) PASSED Test: goals list_goals/0 returns all goals (test/operately/goals_test.exs:23) PASSED Test: goal deletion when goal is deleted, its targets are also deleted (test/operately/goals_test.exs:120) PASSED Test: goals create_goal/2 with invalid data returns error changeset (test/operately/goals_test.exs:51) PASSED Test: goal deletion given goal has child project, it cannot be deleted (test/operately/goals_test.exs:96) PASSED Test: goals change_goal/1 returns a goal changeset (test/operately/goals_test.exs:77) 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 discussions are also deleted (test/operately/goals_test.exs:138) PASSED Test: goals update_goal/2 with invalid data returns error changeset (test/operately/goals_test.exs:69) PASSED Test: goals get_goal!/1 returns the goal with given id (test/operately/goals_test.exs:27) PASSED Test: goal deletion when goal is deleted, its discussions', check-ins', comments' and reactions are also deleted (test/operately/goals_test.exs:172) 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.Operations.GoalCheckInTest Test: notifications Creating goal update notifies selected people (test/operately/operations/goal_check_in_test.exs:71) PASSED 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:100) PASSED Test: notifications Creating goal update notifies everyone (test/operately/operations/goal_check_in_test.exs:39) PASSED TurboConnect.ApiTest Test: __mutations__ returns the mutations defined in the module (test/turbo_connect/api_test.exs:143) PASSED Test: required field validation return 400 for missing required fields in mutations (test/turbo_connect/api_test.exs:243) PASSED Test: routing mutations return 404 for unknown mutations (test/turbo_connect/api_test.exs:227) PASSED Test: routing queries route namespaced queries to the correct handler (test/turbo_connect/api_test.exs:190) PASSED Test: __types__ returns the types defined in the module (test/turbo_connect/api_test.exs:80) PASSED Test: routing mutations return 400 for invalid mutations (test/turbo_connect/api_test.exs:234) PASSED Test: routing queries route queries to the correct handler (test/turbo_connect/api_test.exs:183) PASSED Test: routing mutations route namespaced queries to the correct handler (test/turbo_connect/api_test.exs:220) PASSED Test: routing queries return 400 for invalid queries (test/turbo_connect/api_test.exs:204) PASSED Test: routing mutations route mutations to the correct handler (test/turbo_connect/api_test.exs:213) PASSED Test: routing queries return 404 for unknown queries (test/turbo_connect/api_test.exs:197) PASSED Test: __queries__ returns the queries defined in the module (test/turbo_connect/api_test.exs:106) PASSED OperatelyWeb.Api.Mutations.ChangePasswordTest Test: security it fails with empty params (test/operately_web/api/mutations/change_password_test.exs:27) PASSED Test: security it requires a valid password confirmation (test/operately_web/api/mutations/change_password_test.exs:42) PASSED Test: if changes the password (test/operately_web/api/mutations/change_password_test.exs:9) 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 OperatelyWeb.Api.Mutations.CreateCommentTest 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 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=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 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 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=comment_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:80) PASSED Test: permissions if caller has levels company=no_access, space=edit_access, goal=no_access on the comment thread, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:190) 13:12:08.087 request_id=GERQMVHXEgn4v1cAAL2y [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 (operately 0.1.0) lib/operately_web/api/action.ex:8: OperatelyWeb.Api.Action.run/3 (operately 0.1.0) lib/operately_web/api/mutations/create_comment.ex:38: OperatelyWeb.Api.Mutations.CreateComment.call/2 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=view_access, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:124) PASSED Test: permissions project retrospective - if caller has levels company=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: create_comment functionality creates comment (test/operately_web/api/mutations/create_comment_test.exs:265) 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 file - if caller has levels company=no_access, space=full_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:146) PASSED Test: permissions if caller has levels company=no_access, space=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 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) 13:12:08.276 request_id=GERQMV0UMU8ey3kAAL5C [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 (operately 0.1.0) lib/operately_web/api/action.ex:8: OperatelyWeb.Api.Action.run/3 (operately 0.1.0) lib/operately_web/api/mutations/create_comment.ex:38: OperatelyWeb.Api.Mutations.CreateComment.call/2 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) 13:12:08.298 request_id=GERQMV5vo-8ase8AAL5y [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 (operately 0.1.0) lib/operately_web/api/action.ex:8: OperatelyWeb.Api.Action.run/3 (operately 0.1.0) lib/operately_web/api/mutations/create_comment.ex:38: OperatelyWeb.Api.Mutations.CreateComment.call/2 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 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 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) 13:12:08.373 request_id=GERQMWLYxuHw4usAAOGh [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 (operately 0.1.0) lib/operately_web/api/action.ex:8: OperatelyWeb.Api.Action.run/3 (operately 0.1.0) lib/operately_web/api/mutations/create_comment.ex:38: OperatelyWeb.Api.Mutations.CreateComment.call/2 PASSED Test: permissions resource hub document - if caller has levels company=no_access, space=full_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:124) PASSED Test: permissions project retrospective - if caller has levels company=comment_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:102) PASSED Test: permissions project 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=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=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 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 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) 13:12:08.532 request_id=GERQMWxiDn8n5owAAL9y [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 (operately 0.1.0) lib/operately_web/api/action.ex:8: OperatelyWeb.Api.Action.run/3 (operately 0.1.0) lib/operately_web/api/mutations/create_comment.ex:38: OperatelyWeb.Api.Mutations.CreateComment.call/2 PASSED Test: create_comment functionality doesn't create repeated subscriptions (test/operately_web/api/mutations/create_comment_test.exs:308) 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 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 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 resource hub link - if caller has levels company=full_access, space=no_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:168) PASSED Test: permissions project 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: 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=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=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 project retrospective - if caller has levels company=no_access, space=view_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:102) PASSED Test: permissions if caller has levels company=no_access, space=full_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 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 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 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 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 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=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=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=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=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 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: create_comment functionality updates subscriptions list (test/operately_web/api/mutations/create_comment_test.exs:280) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=view_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:80) PASSED Test: permissions resource hub 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 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 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=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=comment_access, goal=no_access on the comment thread, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:190) 13:12:09.199 request_id=GERQMZQXfi3ASsQAAOWh [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 (operately 0.1.0) lib/operately_web/api/action.ex:8: OperatelyWeb.Api.Action.run/3 (operately 0.1.0) lib/operately_web/api/mutations/create_comment.ex:38: OperatelyWeb.Api.Mutations.CreateComment.call/2 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=view_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:102) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=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 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 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=no_access, goal=champion on the comment thread, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:190) 13:12:09.342 request_id=GERQMZyflOAcVsgAAMFy [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 (operately 0.1.0) lib/operately_web/api/action.ex:8: OperatelyWeb.Api.Action.run/3 (operately 0.1.0) lib/operately_web/api/mutations/create_comment.ex:38: OperatelyWeb.Api.Mutations.CreateComment.call/2 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 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=no_access, goal=reviewer on the comment thread, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:190) 13:12:09.407 request_id=GERQMaCGVYn5S8wAAMHS [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 (operately 0.1.0) lib/operately_web/api/action.ex:8: OperatelyWeb.Api.Action.run/3 (operately 0.1.0) lib/operately_web/api/mutations/create_comment.ex:38: OperatelyWeb.Api.Mutations.CreateComment.call/2 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 if caller has levels company=no_access, space=no_access, goal=no_access on the comment thread, then expect code=404 (test/operately_web/api/mutations/create_comment_test.exs:190) PASSED Test: permissions resource hub document - if caller has levels company=comment_access, space=no_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:124) PASSED Test: permissions project check-in - if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (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 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 resource hub link - if caller has levels company=view_access, space=no_access, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:168) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=no_access on the 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=full_access, goal=no_access on the goal, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:212) PASSED Test: permissions if caller has levels company=no_access, space=view_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/create_comment_test.exs:212) PASSED Test: permissions resource hub 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 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 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 if caller has levels company=no_access, space=comment_access on the space, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:234) PASSED Test: permissions resource hub link - if caller has levels company=no_access, space=edit_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:168) PASSED Test: permissions project retrospective - if caller has levels company=no_access, space=comment_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:102) PASSED Test: permissions project retrospective - if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:102) PASSED Test: permissions 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=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=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 retrospective - if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:102) PASSED Test: permissions resource hub file - if caller has levels company=full_access, space=no_access, then expect code=200 (test/operately_web/api/mutations/create_comment_test.exs:146) 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 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 Operately.Operations.GroupCreationTest Test: GroupCreation operation creates access context, groups and bindings (test/operately/operations/group_creation_test.exs:42) PASSED Test: GroupCreation operation creates default resource hub (test/operately/operations/group_creation_test.exs:131) PASSED Test: GroupCreation operation can create no_access binding to company members (test/operately/operations/group_creation_test.exs:70) PASSED Test: GroupCreation operation creates group (test/operately/operations/group_creation_test.exs:27) PASSED Test: GroupCreation operation creates full_access binding with creator (test/operately/operations/group_creation_test.exs:61) PASSED Test: GroupCreation operation creates default messages group (test/operately/operations/group_creation_test.exs:125) PASSED Test: GroupCreation operation adds creator to managers group (test/operately/operations/group_creation_test.exs:108) PASSED Test: GroupCreation operation creates activity (test/operately/operations/group_creation_test.exs:116) PASSED Test: GroupCreation operation creates only view_access for anonymours users (test/operately/operations/group_creation_test.exs:86) PASSED Test: GroupCreation operation adds creator as member of group (test/operately/operations/group_creation_test.exs:33) PASSED Operately.PeopleTest Test: generate_account_session_token/1 generates a token (test/operately/people_test.exs:369) PASSED Test: people create_person/1 with invalid data returns error changeset (test/operately/people_test.exs:81) PASSED Test: update_account_password/3 validates current password (test/operately/people_test.exs:335) 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: change_account_password/2 returns a account changeset (test/operately/people_test.exs:291) PASSED Test: apply_account_email/3 validates email uniqueness (test/operately/people_test.exs:266) PASSED Test: apply_account_email/3 applies the email without persisting it (test/operately/people_test.exs:282) PASSED Test: reset_account_password/2 validates maximum values for password for security (test/operately/people_test.exs:421) PASSED Test: reset_account_password/2 updates the password (test/operately/people_test.exs:427) PASSED Test: inspect/2 for the Account module does not include password (test/operately/people_test.exs:441) PASSED Test: update_account_password/3 validates maximum values for password for security (test/operately/people_test.exs:326) PASSED Test: apply_account_email/3 validates maximum value for email for security (test/operately/people_test.exs:257) PASSED Test: register_account/1 validates email and password when given (test/operately/people_test.exs:174) PASSED Test: apply_account_email/3 validates current password (test/operately/people_test.exs:275) PASSED Test: update_account_password/3 validates password (test/operately/people_test.exs:313) 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: delete_account_session_token/1 deletes the token (test/operately/people_test.exs:408) PASSED Test: get_account!/1 returns the account with the given id (test/operately/people_test.exs:158) PASSED Test: people update_person/2 with invalid data returns error changeset (test/operately/people_test.exs:96) PASSED Test: people get_person!/1 returns the person with given id (test/operately/people_test.exs:22) PASSED Test: change_account_registration/2 returns a changeset (test/operately/people_test.exs:211) PASSED Test: get_account_by_session_token/1 returns account by token (test/operately/people_test.exs:392) 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: people update_person/2 with valid data updates the person (test/operately/people_test.exs:85) PASSED Test: get_account_by_email/1 returns the account if the email exists (test/operately/people_test.exs:127) PASSED Test: people change_person/1 returns a person changeset (test/operately/people_test.exs:114) PASSED Test: change_account_password/2 allows fields to be set (test/operately/people_test.exs:296) 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: register_account/1 registers accounts with a hashed password (test/operately/people_test.exs:200) PASSED Test: get_account!/1 raises if id is invalid (test/operately/people_test.exs:152) PASSED Test: apply_account_email/3 validates email (test/operately/people_test.exs:250) PASSED Test: people update_person/3 with valid avatar_blob_id updates the person (test/operately/people_test.exs:101) PASSED Test: reset_account_password/2 deletes all tokens for the given account (test/operately/people_test.exs:433) PASSED Test: apply_account_email/3 requires email to change (test/operately/people_test.exs:245) PASSED Test: change_account_email/2 returns a account changeset (test/operately/people_test.exs:234) PASSED Test: update_account_password/3 updates the password (test/operately/people_test.exs:342) PASSED Test: people create_person/1 with valid data creates a person (test/operately/people_test.exs:68) PASSED Test: register_account/1 requires email and password to be set (test/operately/people_test.exs:165) PASSED Test: get_account_by_session_token/1 does not return account for invalid token (test/operately/people_test.exs:397) PASSED Test: get_account_by_session_token/1 does not return account for expired token (test/operately/people_test.exs:401) PASSED Test: change_account_registration/2 allows fields to be set (test/operately/people_test.exs:216) PASSED Test: register_account/1 validates email uniqueness (test/operately/people_test.exs:190) PASSED Test: register_account/1 validates maximum values for email and password for security (test/operately/people_test.exs:183) PASSED Test: update_account_password/3 deletes all tokens for the given account (test/operately/people_test.exs:352) PASSED Operately.Data.Change024RemovePrivateProjectsBindingsTest Test: removes private projects bindings (test/operately/data/change_024_remove_private_projects_bindings_test.exs:20) PASSED Operately.Operations.GroupPermissionsEditingTest Test: GroupPermissionsEditing operation creates activity (test/operately/operations/group_permissions_editing_test.exs:52) PASSED 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 OperatelyWeb.Api.Mutations.ConnectGoalToProjectTest 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 champions can connect goal to project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:137) 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: connect_goal_to_project functionality connect goal (test/operately_web/api/mutations/connect_goal_to_project_test.exs:175) PASSED Test: permissions company owners can connect goal to project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:53) PASSED Test: security it requires authentication (test/operately_web/api/mutations/connect_goal_to_project_test.exs:13) PASSED Test: permissions contributors with edit access can connect goal to project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:125) PASSED Test: permissions company members with edit access can connect goal to project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:45) PASSED Test: permissions space managers can connect goal to project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:97) 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 with edit access can connect goal to project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:88) PASSED Test: permissions reviewers can connect goal to project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:154) PASSED Test: permissions space members without view access can't see a project (test/operately_web/api/mutations/connect_goal_to_project_test.exs:68) 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 Operately.InvitationsTest Test: invitations get_invitation_by_token!/1 returns the invitation (test/operately/invitations_test.exs:27) PASSED Test: invitation_tokens create_invitation_token!/1 deletes previous invitation_token (test/operately/invitations_test.exs:102) 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: invalid invitation_tokens tokens already expired (test/operately/invitations_test.exs:131) PASSED Test: invitations create_invitation/1 with valid data creates a invitation (test/operately/invitations_test.exs:48) PASSED Test: invitations list_invitations/0 returns all invitations (test/operately/invitations_test.exs:17) PASSED Test: invitation_tokens create_invitation_token!/1 with valid data creates a invitation_token (test/operately/invitations_test.exs:91) PASSED Test: invitations get_invitation_by_member/1 returns the invitation (test/operately/invitations_test.exs:36) PASSED Test: invitation_tokens get_invitation_token!/1 returns the invitation_token with given id (test/operately/invitations_test.exs:77) PASSED Test: invitations delete_invitation/1 deletes the invitation (test/operately/invitations_test.exs:64) PASSED Test: invitation_tokens list_invitation_tokens/0 returns all invitation_tokens (test/operately/invitations_test.exs:72) PASSED Test: invitation_tokens delete_invitation_token/1 deletes the invitation_token (test/operately/invitations_test.exs:123) PASSED Test: invitations create_invitation/1 with invalid data returns error changeset (test/operately/invitations_test.exs:60) PASSED Test: invitations get_invitation!/1 returns the invitation with given id (test/operately/invitations_test.exs:22) PASSED Test: invalid invitation_tokens valid_token_time?/2 returns correct value (test/operately/invitations_test.exs:143) PASSED Operately.Operations.ResourceHubCreatingTest Test: ResourceHubCreating operation creates bindings to company (test/operately/operations/resource_hub_creating_test.exs:40) PASSED Test: ResourceHubCreating operation creates activity (test/operately/operations/resource_hub_creating_test.exs:65) PASSED Test: ResourceHubCreating operation creates resource hub (test/operately/operations/resource_hub_creating_test.exs:23) 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 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 OperatelyWeb.Api.Mutations.MarkNotificationAsReadTest 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 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 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 ===================================== alias OperatelyWeb.Api.Mutations, as: M alias OperatelyWeb.Api.Subscriptions, as: S namespace(:goals) do mutation :edit_project, M.EditProject mutation(:update_name, OperatelyWeb.Api.Goals.UpdateName) mutation(:update_description, OperatelyWeb.Api.Goals.UpdateDescription) mutation(:update_due_date, OperatelyWeb.Api.Goals.UpdateDueDate) mutation(:add_target, OperatelyWeb.Api.Goals.AddTarget) ===================================== 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 Operately.GroupsTest Test: groups create_group/1 with valid data creates a group (test/operately/groups_test.exs:38) PASSED Test: groups update_group/2 with valid data updates the group (test/operately/groups_test.exs:49) PASSED Test: groups list_potential_members returns members that are not in the group (test/operately/groups_test.exs:23) PASSED Test: groups create_group/1 with invalid data returns error changeset (test/operately/groups_test.exs:45) 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 get_group!/1 returns the group with given id (test/operately/groups_test.exs:34) PASSED Operately.Operations.ResourceHubDocumentEditingTest Test: Editing document doens't send notifications to anyone (test/operately/operations/resource_hub_document_editing_test.exs:24) PASSED Operately.Operations.CompanyAddingTest Test: CompanyAdding operation creates company group (test/operately/operations/company_adding_test.exs:59) 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 for an existing account (test/operately/operations/company_adding_test.exs:23) 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 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 company with owner (test/operately/operations/company_adding_test.exs:39) PASSED Operately.Goals.TimeframeTest Test: changeset/1 validates year dates (test/operately/goals/timeframe_test.exs:24) PASSED Test: changeset/1 validates month dates (test/operately/goals/timeframe_test.exs:42) PASSED 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:30) PASSED Test: convert_old_timeframe (test/operately/goals/timeframe_test.exs:71) PASSED Test: can be constructed from a Timeframe struct (test/operately/goals/timeframe_test.exs:61) PASSED Test: changeset/1 validates type (test/operately/goals/timeframe_test.exs:20) PASSED Operately.Operations.ResourceHubFileCreatingTest Test: notifications Creating file sends notifications to everyone (test/operately/operations/resource_hub_file_creating_test.exs:60) PASSED Test: notifications Person without permissions is not notified (test/operately/operations/resource_hub_file_creating_test.exs:100) PASSED Test: functionality creates subscriptions (test/operately/operations/resource_hub_file_creating_test.exs:24) 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 Operately.WorkMaps.WorkMapItemTest 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 projects a project without check-in should be 'on_track' (test/operately/work_maps/work_map_item_test.exs:41) PASSED Test: build_item/2 for projects a closed project should have status 'completed' (test/operately/work_maps/work_map_item_test.exs:13) 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 OperatelyWeb.Api.Mutations.EditSubscriptionsListTest Test: permissions if caller has levels company=no_access, space=no_access, project=view_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:45) PASSED Test: permissions if caller has levels company=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 adds new subscriptions (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:110) 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=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=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: security it requires authentication (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:14) 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=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: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:45) PASSED Test: permissions if caller has levels company=no_access, space=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=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=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: 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=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: 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=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:45) PASSED Test: edit_subscriptions_list functionality edits send_to_everyone field (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:85) PASSED Test: edit_subscriptions_list functionality adds and cancels subscriptions (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:145) PASSED Test: edit_subscriptions_list functionality cancels subscriptions (test/operately_web/api/mutations/edit_subscriptions_list_test.exs:125) PASSED Operately.Data.Change054CreateSubscriptionsForExistingGoalDiscussionsTest Test: creates subscriptions list for existing goal discussions (test/operately/data/change_054_create_subscriptions_for_existing_goal_discussions_test.exs:25) PASSED OperatelyWeb.Api.Mutations.EditSpaceMembersPermissionsTest 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: permissions company owner can edit members permissions (test/operately_web/api/mutations/edit_space_members_permissions_test.exs:59) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_space_members_permissions_test.exs:11) PASSED Test: permissions company members with full access can edit members permissions (test/operately_web/api/mutations/edit_space_members_permissions_test.exs:48) PASSED Test: permissions space members with full access can edit members permissions (test/operately_web/api/mutations/edit_space_members_permissions_test.exs:94) PASSED Test: edit_group functionality edits members access level (test/operately_web/api/mutations/edit_space_members_permissions_test.exs:110) 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 without view access can't see space (test/operately_web/api/mutations/edit_space_members_permissions_test.exs:24) 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 OperatelyWeb.Api.Queries.GetActivitiesTest Test: permissions company members have access (test/operately_web/api/queries/get_activities_test.exs:47) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_activities_test.exs:72) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_activities_test.exs:14) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_activities_test.exs:59) 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 company members have no access (test/operately_web/api/queries/get_activities_test.exs:36) PASSED Operately.People.EmailActivationCodeTest Test: creation it creates a 6 digit code (test/operately/people/email_activation_code_test.exs:5) 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 OperatelyWeb.Api.Queries.GetWorkMapTest 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 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 parent_goal_id (test/operately_web/api/queries/get_work_map_test.exs:274) 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: functionality returns empty list when no matching items exist (test/operately_web/api/queries/get_work_map_test.exs:246) 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: security it requires authentication (test/operately_web/api/queries/get_work_map_test.exs:8) PASSED Test: permissions - query goals space member has access to 4 public and internal goals (test/operately_web/api/queries/get_work_map_test.exs:167) PASSED Test: permissions - query root items creator has access to public_project, project1, project2, secret_project (test/operately_web/api/queries/get_work_map_test.exs:45) PASSED Test: permissions - query nested items 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 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 creator has access to public_project, project1, project2, secret_project (test/operately_web/api/queries/get_work_map_test.exs:96) PASSED Test: functionality successfully returns item without owner (test/operately_web/api/queries/get_work_map_test.exs:323) 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 nested items company_member has access to public_project (test/operately_web/api/queries/get_work_map_test.exs:96) PASSED Test: permissions - query root items company_member has access to public_project (test/operately_web/api/queries/get_work_map_test.exs:45) PASSED Test: functionality filters by space_id (test/operately_web/api/queries/get_work_map_test.exs:254) PASSED Test: functionality returns hierarchical structure (test/operately_web/api/queries/get_work_map_test.exs:303) PASSED Test: functionality filters by owner_id (test/operately_web/api/queries/get_work_map_test.exs:288) PASSED Operately.Operations.GroupMembersAddingTest Test: GroupMembersAdding operation adds access bindings (test/operately/operations/group_members_adding_test.exs:71) PASSED Test: GroupMembersAdding operation creates notification (test/operately/operations/group_members_adding_test.exs:113) PASSED Test: GroupMembersAdding operation adds members to group (test/operately/operations/group_members_adding_test.exs:34) 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 OperatelyWeb.Api.Mutations.CreateResourceHubFolderTest Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=403 (test/operately_web/api/mutations/create_resource_hub_folder_test.exs:40) PASSED Test: functionality creates folder within folder (test/operately_web/api/mutations/create_resource_hub_folder_test.exs:88) PASSED Test: permissions if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_folder_test.exs:40) PASSED Test: 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=edit_access, then expect code=200 (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=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=full_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: 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 Operately.Operations.CommentAddingTest Test: Commenting on goal update Commenting on update notifies everyone (test/operately/operations/comment_adding_test.exs:140) 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 selected people (test/operately/operations/comment_adding_test.exs:601) PASSED Test: Commenting on project retrospective Commenting on retrospective notifies selected people (test/operately/operations/comment_adding_test.exs:392) PASSED Test: Commenting on resource hub document Mentioned person is notified (test/operately/operations/comment_adding_test.exs:525) PASSED Test: Commenting on goal update Mentioned person is notified (test/operately/operations/comment_adding_test.exs:205) PASSED Test: Commenting on check-in Commenting on check-in notifies everyone (test/operately/operations/comment_adding_test.exs:52) PASSED Test: Commenting on resource hub link Mentioned person is notified (test/operately/operations/comment_adding_test.exs:705) PASSED Test: Commenting on project retrospective Mentioned person is notified (test/operately/operations/comment_adding_test.exs:422) PASSED Test: Commenting on goal update Commenting on update notifies selected people (test/operately/operations/comment_adding_test.exs:173) PASSED Test: Commenting on project retrospective Commenting on retrospective notifies everyone (test/operately/operations/comment_adding_test.exs:361) PASSED Test: Commenting on message Commenting on message notifies selected people (test/operately/operations/comment_adding_test.exs:281) PASSED Test: Commenting on message Mentioned person is notified (test/operately/operations/comment_adding_test.exs:310) PASSED Test: Commenting on resource hub link Commenting on link notifies selected people (test/operately/operations/comment_adding_test.exs:686) PASSED Test: Commenting on resource hub document Commenting on document notifies selected people (test/operately/operations/comment_adding_test.exs:498) PASSED Test: Commenting on message Commenting on message notifies everyone (test/operately/operations/comment_adding_test.exs:255) PASSED Test: Commenting on check-in Mentioned person is notified (test/operately/operations/comment_adding_test.exs:82) PASSED Test: Commenting on resource hub file Commenting on file notifies everyone (test/operately/operations/comment_adding_test.exs:579) PASSED Test: Commenting on resource hub link Commenting on link notifies everyone (test/operately/operations/comment_adding_test.exs:664) PASSED Test: Commenting on resource hub file Mentioned person is notified (test/operately/operations/comment_adding_test.exs:620) PASSED OperatelyWeb.Api.Mutations.CreateProjectTest Test: company permissions company members without edit access can't create project (test/operately_web/api/mutations/create_project_test.exs:32) PASSED Test: create_project functionality creates project within space (test/operately_web/api/mutations/create_project_test.exs:107) PASSED Test: company permissions company admins can create project (test/operately_web/api/mutations/create_project_test.exs:44) PASSED Test: security it requires authentication (test/operately_web/api/mutations/create_project_test.exs:11) PASSED Test: create_project functionality creates project within company (test/operately_web/api/mutations/create_project_test.exs:112) PASSED Test: company permissions company members with edit access can create project (test/operately_web/api/mutations/create_project_test.exs:37) PASSED Test: space permissions company admins can create project (test/operately_web/api/mutations/create_project_test.exs:84) 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 space members with edit access can create project (test/operately_web/api/mutations/create_project_test.exs:77) 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: company permissions company member can see only their company (test/operately_web/api/mutations/create_project_test.exs:25) 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 Operately.KpisTest Test: kpis create_kpi/1 with valid data creates a kpi (test/operately/kpis_test.exs:23) PASSED Test: kpi_metrics create_metric/1 with invalid data returns error changeset (test/operately/kpis_test.exs:99) PASSED Test: kpi_metrics change_metric/1 returns a metric changeset (test/operately/kpis_test.exs:124) PASSED Test: kpi_metrics get_metric!/1 returns the metric with given id (test/operately/kpis_test.exs:86) PASSED Test: kpi_metrics update_metric/2 with invalid data returns error changeset (test/operately/kpis_test.exs:112) PASSED Test: kpis update_kpi/2 with valid data updates the kpi (test/operately/kpis_test.exs:41) PASSED Test: kpis list_kpis/0 returns all kpis (test/operately/kpis_test.exs:13) PASSED Test: kpi_metrics create_metric/1 with valid data creates a metric (test/operately/kpis_test.exs:91) PASSED Test: kpis create_kpi/1 with invalid data returns error changeset (test/operately/kpis_test.exs:37) PASSED Test: kpi_metrics list_kpi_metrics/0 returns all kpi_metrics (test/operately/kpis_test.exs:81) PASSED Test: kpis delete_kpi/1 deletes the kpi (test/operately/kpis_test.exs:62) PASSED Test: kpis change_kpi/1 returns a kpi changeset (test/operately/kpis_test.exs:68) PASSED Test: kpi_metrics update_metric/2 with valid data updates the metric (test/operately/kpis_test.exs:103) PASSED Test: kpis update_kpi/2 with invalid data returns error changeset (test/operately/kpis_test.exs:56) PASSED Test: kpis get_kpi!/1 returns the kpi with given id (test/operately/kpis_test.exs:18) PASSED Test: kpi_metrics delete_metric/1 deletes the metric (test/operately/kpis_test.exs:118) PASSED OperatelyWeb.Api.Queries.GetKeyResourceTest Test: permissions company members have access (test/operately_web/api/queries/get_key_resource_test.exs:32) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_key_resource_test.exs:47) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_key_resource_test.exs:12) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_key_resource_test.exs:39) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_key_resource_test.exs:71) PASSED Test: permissions suspended people don't have access (test/operately_web/api/queries/get_key_resource_test.exs:87) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_key_resource_test.exs:55) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_key_resource_test.exs:25) PASSED OperatelyWeb.Api.Mutations.DeleteResourceHubLinkTest 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=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_link_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/mutations/delete_resource_hub_link_test.exs:15) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (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=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=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_link_test.exs:40) PASSED Test: permissions if caller has levels company=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=no_access, then expect code=404 (test/operately_web/api/mutations/delete_resource_hub_link_test.exs:40) PASSED OperatelyWeb.Api.Mutations.EditProjectRetrospectiveTest 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: edit_project_retrospective functionality edits project retrospective (test/operately_web/api/mutations/edit_project_retrospective_test.exs:85) PASSED Test: permissions if caller has levels company=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: 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=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: security it requires authentication (test/operately_web/api/mutations/edit_project_retrospective_test.exs:19) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_retrospective_test.exs:48) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_retrospective_test.exs:48) PASSED Test: permissions if caller has levels company=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=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=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: 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=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=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 OperatelyWeb.Api.Queries.GetAssignmentsTest 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 exclude soft-deleted project check-ins (test/operately_web/api/queries/get_assignments_test.exs:264) PASSED Test: get_due_assignments exclude soft-deleted projects (test/operately_web/api/queries/get_assignments_test.exs:238) PASSED Test: get_due_assignments get_due_goals ignores closed goals (test/operately_web/api/queries/get_assignments_test.exs:94) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_assignments_test.exs:14) PASSED Test: get_due_assignments exclude soft-deleted goals (test/operately_web/api/queries/get_assignments_test.exs:251) PASSED Test: get_due_assignments get_due_goals (test/operately_web/api/queries/get_assignments_test.exs:67) 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_goal_updates (test/operately_web/api/queries/get_assignments_test.exs:149) 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 goal updates (test/operately_web/api/queries/get_assignments_test.exs:286) 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 get_due_projects (test/operately_web/api/queries/get_assignments_test.exs:22) PASSED OperatelyWeb.Api.Mutations.RemoveCompanyTrustedEmailDomainTest 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 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 OperatelyWeb.Api.Plugs.RequireAuthenticatedAccountTest 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 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 OperatelyWeb.Api.Mutations.RenameResourceHubFolderTest 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=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/rename_resource_hub_folder_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/mutations/rename_resource_hub_folder_test.exs:14) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (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=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=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/rename_resource_hub_folder_test.exs:39) PASSED Test: permissions if caller has levels company=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=no_access, then expect code=404 (test/operately_web/api/mutations/rename_resource_hub_folder_test.exs:39) PASSED Operately.Data.Change043CreateAccessBindingsBetweenResourceHubsAndPeopleTest Test: creates bindings to exising resource hubs contexts (test/operately/data/change_043_create_access_bindings_between_resource_hubs_and_people_test.exs:15) PASSED OperatelyWeb.Api.Mutations.RemoveGroupMemberTest 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=0 and space=100 on the space, then expect code=200 (test/operately_web/api/mutations/remove_group_member_test.exs:36) PASSED Test: security it requires authentication (test/operately_web/api/mutations/remove_group_member_test.exs:12) PASSED Test: permissions if caller has levels company=0 and space=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=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=100 and space=0 on the space, then expect code=200 (test/operately_web/api/mutations/remove_group_member_test.exs:36) PASSED Test: permissions if caller has levels company=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=0 on the space, then expect code=404 (test/operately_web/api/mutations/remove_group_member_test.exs:36) PASSED OperatelyWeb.Api.Queries.GetTasksTest Test: permissions company members have access (test/operately_web/api/queries/get_tasks_test.exs:36) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_tasks_test.exs:51) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_tasks_test.exs:15) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_tasks_test.exs:43) PASSED Test: get_tasks functionality include_assignees (test/operately_web/api/queries/get_tasks_test.exs:108) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_tasks_test.exs:75) PASSED Test: get_tasks functionality get tasks with nothing included (test/operately_web/api/queries/get_tasks_test.exs:101) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_tasks_test.exs:59) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_tasks_test.exs:29) PASSED Operately.CompaniesTest Test: companies create_company/1 with valid data creates a company (test/operately/companies_test.exs:27) PASSED Test: companies update_company/2 with valid data updates the company (test/operately/companies_test.exs:40) PASSED Test: companies list_companies/0 returns all companies (test/operately/companies_test.exs:17) PASSED Test: companies create_company/1 with invalid data returns error changeset (test/operately/companies_test.exs:34) 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 get_company!/1 returns the company with given id (test/operately/companies_test.exs:22) PASSED OperatelyWeb.Api.Mutations.ReopenGoalTest 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:38) PASSED Test: subscriptions to notifications adds mentioned people to subscription list (test/operately_web/api/mutations/reopen_goal_test.exs:88) 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:38) PASSED Test: security it requires authentication (test/operately_web/api/mutations/reopen_goal_test.exs:13) PASSED Test: subscriptions to notifications doesn't create repeated subscription (test/operately_web/api/mutations/reopen_goal_test.exs:108) 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:38) PASSED Test: subscriptions to notifications creates subscription list for goal reopening (test/operately_web/api/mutations/reopen_goal_test.exs:69) 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:38) 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:38) 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:38) 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:38) PASSED OperatelyWeb.Api.Mutations.CreateResourceHubFileTest Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=403 (test/operately_web/api/mutations/create_resource_hub_file_test.exs:42) PASSED Test: functionality creates multiple files (test/operately_web/api/mutations/create_resource_hub_file_test.exs:111) PASSED Test: permissions if caller has levels company=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_file_test.exs:42) PASSED Test: 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=edit_access, then expect code=200 (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=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=full_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: 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 OperatelyWeb.Api.Mutations.ResetPasswordTest Test: security it fails if password confirmation is invalid (test/operately_web/api/mutations/reset_password_test.exs:32) PASSED 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 OperatelyWeb.Api.Queries.GetProjectsTest Test: permissions company members have access (test/operately_web/api/queries/get_projects_test.exs:43) PASSED Test: get_projects functionality include_goal (test/operately_web/api/queries/get_projects_test.exs:159) PASSED Test: get_projects functionality include_reviewer (test/operately_web/api/queries/get_projects_test.exs:134) 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 space members have access (test/operately_web/api/queries/get_projects_test.exs:69) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_projects_test.exs:14) PASSED Test: get_projects functionality include_space (test/operately_web/api/queries/get_projects_test.exs:148) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_projects_test.exs:53) PASSED Test: get_projects functionality include_champion (test/operately_web/api/queries/get_projects_test.exs:125) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_projects_test.exs:96) 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 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 champions have access (test/operately_web/api/queries/get_projects_test.exs:80) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_projects_test.exs:29) PASSED Test: get_projects functionality scope by space_id (test/operately_web/api/queries/get_projects_test.exs:183) PASSED OperatelyWeb.Api.Queries.GetTaskTest Test: permissions company members have access (test/operately_web/api/queries/get_task_test.exs:36) PASSED Test: get_task functionality include_milestone (test/operately_web/api/queries/get_task_test.exs:119) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_task_test.exs:51) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_task_test.exs:15) PASSED Test: get_task functionality include_project (test/operately_web/api/queries/get_task_test.exs:131) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_task_test.exs:43) PASSED Test: get_task functionality include_assignees (test/operately_web/api/queries/get_task_test.exs:108) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_task_test.exs:75) PASSED Test: get_task functionality get a task with nothing included (test/operately_web/api/queries/get_task_test.exs:101) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_task_test.exs:59) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_task_test.exs:29) PASSED Operately.OkrsTest Test: objectives create_objective/1 with valid data creates a objective (test/operately/okrs_test.exs:34) 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 create_key_result/1 with valid data creates a key_result (test/operately/okrs_test.exs:105) PASSED Test: key_results delete_key_result/1 deletes the key_result (test/operately/okrs_test.exs:145) PASSED Test: objectives update_objective/2 with valid data updates the objective (test/operately/okrs_test.exs:52) PASSED Test: objectives list_objectives/0 returns all objectives (test/operately/okrs_test.exs:22) PASSED Test: key_results create_key_result/1 with invalid data returns error changeset (test/operately/okrs_test.exs:123) PASSED Test: objectives create_objective/1 with invalid data returns error changeset (test/operately/okrs_test.exs:48) PASSED Test: key_results get_key_result!/1 returns the key_result with given id (test/operately/okrs_test.exs:99) PASSED Test: objectives delete_objective/1 deletes the objective (test/operately/okrs_test.exs:72) PASSED Test: objectives change_objective/1 returns a objective changeset (test/operately/okrs_test.exs:79) PASSED Test: key_results update_key_result/2 with invalid data returns error changeset (test/operately/okrs_test.exs:138) PASSED Test: objectives update_objective/2 with invalid data returns error changeset (test/operately/okrs_test.exs:64) PASSED Test: objectives get_objective!/1 returns the objective with given id (test/operately/okrs_test.exs:28) PASSED Test: key_results change_key_result/1 returns a key_result changeset (test/operately/okrs_test.exs:152) PASSED Operately.Operations.SpaceJoiningTest Test: SpaceJoining operation adds access binding (test/operately/operations/space_joining_test.exs:39) PASSED 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 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 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 OperatelyWeb.Api.Queries.SearchProjectContributorCandidatesTest Test: permissions company members have no access (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:60) PASSED Test: search_project_contributor_candidates functionality returns people based on query (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:168) PASSED Test: permissions space members have no access (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:80) PASSED Test: security it requires authentication (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:12) PASSED Test: search_project_contributor_candidates functionality doesn't return suspended people (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:192) PASSED Test: permissions company members have access (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:70) PASSED Test: permissions suspended people don't have access (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:146) PASSED Test: permissions champions have access (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:102) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:124) PASSED Test: permissions space members have access (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:91) PASSED Test: security doesn't show people from other companies (test/operately_web/api/queries/search_project_contributor_candidates_test.exs:16) 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 Operately.Projects.ListOperationTest Test: visibility filters non_colaborator can only see public projects (test/operately/projects/list_operation_test.exs:54) PASSED 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 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.AddCompanyMemberTest 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 Test: add_company_member functionality email can't be blank (test/operately_web/api/mutations/add_company_member_test.exs:43) PASSED Test: security it requires authentication (test/operately_web/api/mutations/add_company_member_test.exs:13) PASSED Test: add_company_member functionality email already taken (test/operately_web/api/mutations/add_company_member_test.exs:36) PASSED Test: add_company_member functionality 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: security member account without full access can't invite other members (test/operately_web/api/mutations/add_company_member_test.exs:17) PASSED OperatelyWeb.Api.Queries.GetAssignmentsCountTest Test: get_assignments_count ignores closed projects (test/operately_web/api/queries/get_assignments_count_test.exs:39) PASSED Test: get_assignments_count ignores closed goals (test/operately_web/api/queries/get_assignments_count_test.exs:69) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_assignments_count_test.exs:12) 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 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 projects (test/operately_web/api/queries/get_assignments_count_test.exs:20) PASSED OperatelyWeb.Api.Queries.GetCommentsTest Test: permissions - project check-in company members have access (test/operately_web/api/queries/get_comments_test.exs:46) 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 access (test/operately_web/api/queries/get_comments_test.exs:287) PASSED Test: permissions - goal update space members have no access (test/operately_web/api/queries/get_comments_test.exs:173) 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 space members have access (test/operately_web/api/queries/get_comments_test.exs:73) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_comments_test.exs:19) PASSED Test: permissions - comment-thread space members have no access (test/operately_web/api/queries/get_comments_test.exs:361) 13:12:19.136 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/queries/get_comments_test.exs:505: OperatelyWeb.Api.Queries.GetCommentsTest.add_comment/4 (elixir 1.17.2) lib/enum.ex:992: anonymous fn/3 in Enum.each/2 13:12:19.140 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/queries/get_comments_test.exs:505: OperatelyWeb.Api.Queries.GetCommentsTest.add_comment/4 (elixir 1.17.2) lib/enum.ex:992: anonymous fn/3 in Enum.each/2 13:12:19.144 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/queries/get_comments_test.exs:505: OperatelyWeb.Api.Queries.GetCommentsTest.add_comment/4 (elixir 1.17.2) lib/enum.ex:992: anonymous fn/3 in Enum.each/2 PASSED Test: permissions - goal update space members have access (test/operately_web/api/queries/get_comments_test.exs:187) 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 company members have access (test/operately_web/api/queries/get_comments_test.exs:160) PASSED Test: permissions - project check-in reviewers have access (test/operately_web/api/queries/get_comments_test.exs:112) PASSED Test: permissions - goal update company members have no access (test/operately_web/api/queries/get_comments_test.exs:147) PASSED Test: permissions - comment-thread company members have access (test/operately_web/api/queries/get_comments_test.exs:348) 13:12:19.337 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/queries/get_comments_test.exs:505: OperatelyWeb.Api.Queries.GetCommentsTest.add_comment/4 (elixir 1.17.2) lib/enum.ex:4392: Enum.map/2 13:12:19.341 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/queries/get_comments_test.exs:505: OperatelyWeb.Api.Queries.GetCommentsTest.add_comment/4 (elixir 1.17.2) lib/enum.ex:4392: Enum.map_range/4 13:12:19.345 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/queries/get_comments_test.exs:505: OperatelyWeb.Api.Queries.GetCommentsTest.add_comment/4 (elixir 1.17.2) lib/enum.ex:4392: Enum.map_range/4 PASSED Test: permissions - goal update reviewers have access (test/operately_web/api/queries/get_comments_test.exs:226) PASSED Test: permissions - project check-in champions have access (test/operately_web/api/queries/get_comments_test.exs:87) PASSED Test: permissions - comment-thread reviewers have access (test/operately_web/api/queries/get_comments_test.exs:414) 13:12:19.454 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/queries/get_comments_test.exs:505: OperatelyWeb.Api.Queries.GetCommentsTest.add_comment/4 (elixir 1.17.2) lib/enum.ex:4392: Enum.map/2 13:12:19.458 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/queries/get_comments_test.exs:505: OperatelyWeb.Api.Queries.GetCommentsTest.add_comment/4 (elixir 1.17.2) lib/enum.ex:4392: Enum.map_range/4 13:12:19.462 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/queries/get_comments_test.exs:505: OperatelyWeb.Api.Queries.GetCommentsTest.add_comment/4 (elixir 1.17.2) lib/enum.ex:4392: Enum.map_range/4 PASSED Test: permissions - comment-thread champions have access (test/operately_web/api/queries/get_comments_test.exs:389) 13:12:19.491 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/queries/get_comments_test.exs:505: OperatelyWeb.Api.Queries.GetCommentsTest.add_comment/4 (elixir 1.17.2) lib/enum.ex:4392: Enum.map/2 13:12:19.495 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/queries/get_comments_test.exs:505: OperatelyWeb.Api.Queries.GetCommentsTest.add_comment/4 (elixir 1.17.2) lib/enum.ex:4392: Enum.map_range/4 13:12:19.498 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/queries/get_comments_test.exs:505: OperatelyWeb.Api.Queries.GetCommentsTest.add_comment/4 (elixir 1.17.2) lib/enum.ex:4392: Enum.map_range/4 PASSED Test: permissions - project check-in company members have no access (test/operately_web/api/queries/get_comments_test.exs:33) PASSED Test: permissions - discussions company members have no access (test/operately_web/api/queries/get_comments_test.exs:273) PASSED Test: permissions - comment-thread space members have access (test/operately_web/api/queries/get_comments_test.exs:375) 13:12:19.593 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/queries/get_comments_test.exs:505: OperatelyWeb.Api.Queries.GetCommentsTest.add_comment/4 (elixir 1.17.2) lib/enum.ex:4392: Enum.map/2 13:12:19.600 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/queries/get_comments_test.exs:505: OperatelyWeb.Api.Queries.GetCommentsTest.add_comment/4 (elixir 1.17.2) lib/enum.ex:4392: Enum.map_range/4 13:12:19.604 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/queries/get_comments_test.exs:505: OperatelyWeb.Api.Queries.GetCommentsTest.add_comment/4 (elixir 1.17.2) lib/enum.ex:4392: Enum.map_range/4 PASSED Test: permissions - comment-thread company members have no access (test/operately_web/api/queries/get_comments_test.exs:335) 13:12:19.632 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/queries/get_comments_test.exs:505: OperatelyWeb.Api.Queries.GetCommentsTest.add_comment/4 (elixir 1.17.2) lib/enum.ex:992: anonymous fn/3 in Enum.each/2 13:12:19.638 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/queries/get_comments_test.exs:505: OperatelyWeb.Api.Queries.GetCommentsTest.add_comment/4 (elixir 1.17.2) lib/enum.ex:992: anonymous fn/3 in Enum.each/2 13:12:19.643 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/queries/get_comments_test.exs:505: OperatelyWeb.Api.Queries.GetCommentsTest.add_comment/4 (elixir 1.17.2) lib/enum.ex:992: anonymous fn/3 in Enum.each/2 PASSED Test: permissions - discussions space members have access (test/operately_web/api/queries/get_comments_test.exs:301) PASSED OperatelyWeb.Api.Mutations.AddProjectContributorsTest 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 champions can add contributor to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:116) 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: add_project_contributors functionality adds multiple contributors to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:148) PASSED Test: permissions company admins can add contributor to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:47) PASSED Test: security it requires authentication (test/operately_web/api/mutations/add_project_contributors_test.exs:13) PASSED Test: permissions contributors with full access can add contributor to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:106) PASSED Test: permissions company members with full access can add contributor to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:41) PASSED Test: permissions space managers can add contributor to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:83) 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 with full access can add contributor to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:76) PASSED Test: permissions reviewers can add contributor to a project (test/operately_web/api/mutations/add_project_contributors_test.exs:130) PASSED Test: permissions space members without view access can't see a project (test/operately_web/api/mutations/add_project_contributors_test.exs:60) 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 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.Projects.ContributorTest Test: getter get (test/operately/projects/contributor_test.exs:46) 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 OperatelyWeb.Api.Mutations.AcknowledgeGoalProgressUpdateTest Test: permissions company members can't acknowledge an update (test/operately_web/api/mutations/acknowledge_goal_progress_update_test.exs:34) PASSED Test: permissions space members can't acknowledge an update (test/operately_web/api/mutations/acknowledge_goal_progress_update_test.exs:49) PASSED Test: security it requires authentication (test/operately_web/api/mutations/acknowledge_goal_progress_update_test.exs:13) 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: 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 company members without view access can't see an update (test/operately_web/api/mutations/acknowledge_goal_progress_update_test.exs:27) PASSED Operately.UpdatesTest Test: updates create_update/1 with invalid data returns error changeset (test/operately/updates_test.exs:35) PASSED Test: comments update_comment/2 with valid data updates the comment (test/operately/updates_test.exs:93) PASSED Test: reactions list_reactions/2 returns all reactions (test/operately/updates_test.exs:124) PASSED Test: comments create_comment/1 with valid data creates a comment (test/operately/updates_test.exs:78) PASSED Test: comments delete_comment/1 deletes the comment (test/operately/updates_test.exs:107) PASSED Test: updates update_update/2 with invalid data returns error changeset (test/operately/updates_test.exs:47) PASSED Test: updates list_updates/0 returns all updates (test/operately/updates_test.exs:27) PASSED Test: reactions update_reaction/2 with valid data updates the reaction (test/operately/updates_test.exs:147) PASSED Test: comments create_comment/1 with invalid data returns error changeset (test/operately/updates_test.exs:89) PASSED Test: updates update_update/2 with valid data updates the update (test/operately/updates_test.exs:39) PASSED Test: comments get_comment!/1 returns the comment with given id (test/operately/updates_test.exs:74) PASSED Test: updates change_update/1 returns a update changeset (test/operately/updates_test.exs:56) PASSED Test: comments list_comments/0 returns all comments (test/operately/updates_test.exs:70) PASSED Test: reactions create_reaction/1 with invalid data returns error changeset (test/operately/updates_test.exs:143) PASSED Test: comments update_comment/2 with invalid data returns error changeset (test/operately/updates_test.exs:102) PASSED Test: updates delete_update/1 deletes the update (test/operately/updates_test.exs:51) PASSED Test: reactions change_reaction/1 returns a reaction changeset (test/operately/updates_test.exs:173) PASSED Test: reactions delete_reaction/1 deletes the reaction (test/operately/updates_test.exs:167) PASSED Test: updates get_update!/1 returns the update with given id (test/operately/updates_test.exs:31) PASSED Test: comments change_comment/1 returns a comment changeset (test/operately/updates_test.exs:112) PASSED Test: reactions update_reaction/2 with invalid data returns error changeset (test/operately/updates_test.exs:161) PASSED Test: reactions create_reaction/1 with valid data creates a reaction (test/operately/updates_test.exs:134) PASSED Test: reactions get_reaction!/1 returns the reaction with given id (test/operately/updates_test.exs:129) PASSED OperatelyWeb.Api.Mutations.AddKeyResourceTest 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 champions can add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:128) 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: add_key_resource functionality adds key resource (test/operately_web/api/mutations/add_key_resource_test.exs:164) PASSED Test: permissions company admins can add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:50) PASSED Test: security it requires authentication (test/operately_web/api/mutations/add_key_resource_test.exs:13) PASSED Test: permissions contributors with edit access can add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:117) PASSED Test: permissions company members with edit access can add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:43) PASSED Test: permissions space managers can add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:91) 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 with edit access can add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:83) PASSED Test: permissions reviewers can add a key resource (test/operately_web/api/mutations/add_key_resource_test.exs:144) PASSED Test: permissions space members without view access can't see a project (test/operately_web/api/mutations/add_key_resource_test.exs:65) 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 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 OperatelyWeb.Api.Mutations.NewInvitationTokenTest 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 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: security it requires authentication (test/operately_web/api/mutations/new_invitation_token_test.exs:8) PASSED Test: permissions if caller has levels company=edit_access, then expect code=403 (test/operately_web/api/mutations/new_invitation_token_test.exs:24) PASSED Test: new_invitation_token functionality 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=view_access, then expect code=403 (test/operately_web/api/mutations/new_invitation_token_test.exs:24) PASSED Operately.WorkMaps.WorkMapTest Test: build_hierarchy/1 with parent-child relationship builds simple parent-child hierarchy (test/operately/work_maps/work_map_test.exs:44) PASSED Test: build_hierarchy/1 with deep nesting handles deep nesting with multiple levels (test/operately/work_maps/work_map_test.exs:124) PASSED Test: build_hierarchy/1 with empty input returns empty list for empty input (test/operately/work_maps/work_map_test.exs:9) PASSED Test: build_hierarchy/1 with mixed goals and projects builds hierarchy with goals and projects (test/operately/work_maps/work_map_test.exs:77) PASSED Test: build_hierarchy/1 with multiple root items handles multiple root items (test/operately/work_maps/work_map_test.exs:191) PASSED Test: build_hierarchy/1 with orphaned items handles orphaned items (parent not in list) (test/operately/work_maps/work_map_test.exs:160) PASSED Test: build_hierarchy/1 with single item returns single root item unchanged (test/operately/work_maps/work_map_test.exs:23) PASSED OperatelyWeb.Api.Mutations.CloseProjectTest 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 champions can close a project (test/operately_web/api/mutations/close_project_test.exs:135) PASSED Test: subscriptions to notifications adds mentioned people to subscription list (test/operately_web/api/mutations/close_project_test.exs:220) PASSED Test: permissions contributors without edit access can't close a project (test/operately_web/api/mutations/close_project_test.exs:112) PASSED Test: close_project functionality closes project (test/operately_web/api/mutations/close_project_test.exs:171) PASSED Test: permissions company owner can close a project (test/operately_web/api/mutations/close_project_test.exs:58) PASSED Test: security it requires authentication (test/operately_web/api/mutations/close_project_test.exs:21) PASSED Test: permissions contributors with edit access can close a project (test/operately_web/api/mutations/close_project_test.exs:124) PASSED Test: permissions company members with edit access can close a project (test/operately_web/api/mutations/close_project_test.exs:51) PASSED Test: permissions space managers can close a project (test/operately_web/api/mutations/close_project_test.exs:98) 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 with edit access can close a project (test/operately_web/api/mutations/close_project_test.exs:90) PASSED Test: permissions reviewers can close a project (test/operately_web/api/mutations/close_project_test.exs:151) 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 company members without view access can't see a project (test/operately_web/api/mutations/close_project_test.exs:35) PASSED Test: subscriptions to notifications creates subscription list for project retrospective (test/operately_web/api/mutations/close_project_test.exs:195) PASSED Test: subscriptions to notifications doesn't create repeated subscription (test/operately_web/api/mutations/close_project_test.exs:247) PASSED OperatelyWeb.Api.Mutations.CreateGoalDiscussionTest Test: permissions company members without edit access can't create a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:37) PASSED Test: create_goal_discussion functionality it creates a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:135) PASSED Test: subscriptions to notifications doesn't create repeated subscription (test/operately_web/api/mutations/create_goal_discussion_test.exs:203) PASSED Test: permissions champions can create a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:101) PASSED Test: subscriptions to notifications creates subscription list for goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:163) PASSED Test: permissions company owners can create a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:51) PASSED Test: security it requires authentication (test/operately_web/api/mutations/create_goal_discussion_test.exs:16) PASSED Test: permissions reviewers can create a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:116) PASSED Test: permissions company members with edit access can create a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:44) PASSED Test: permissions space managers can create a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:88) PASSED Test: permissions space members without edit access can't create a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:72) PASSED Test: permissions space members with edit access can create a goal discussion (test/operately_web/api/mutations/create_goal_discussion_test.exs:80) 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:143) PASSED Test: permissions space members without view access can't see a goal (test/operately_web/api/mutations/create_goal_discussion_test.exs:64) PASSED Test: permissions company members without view access can't see a goal (test/operately_web/api/mutations/create_goal_discussion_test.exs:30) PASSED Test: subscriptions to notifications adds mentioned people to subscription list (test/operately_web/api/mutations/create_goal_discussion_test.exs:183) PASSED OperatelyWeb.Api.Mutations.EditSpaceTest Test: permissions company members without edit access can't edit a space (test/operately_web/api/mutations/edit_space_test.exs:30) PASSED Test: permissions company owners can edit a space (test/operately_web/api/mutations/edit_space_test.exs:44) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_space_test.exs:10) PASSED Test: permissions company members with edit access can edit a space (test/operately_web/api/mutations/edit_space_test.exs:37) PASSED Test: edit_group functionality edits space mission (test/operately_web/api/mutations/edit_space_test.exs:88) PASSED Test: permissions space members with edit access can edit a space (test/operately_web/api/mutations/edit_space_test.exs:65) PASSED Test: edit_group functionality edits space name (test/operately_web/api/mutations/edit_space_test.exs:77) 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 without view access can't see a space (test/operately_web/api/mutations/edit_space_test.exs:23) PASSED OperatelyWeb.Api.Mutations.RemoveCompanyAdminTest Test: permissions company admins can't remove other admins (test/operately_web/api/mutations/remove_company_admin_test.exs:34) PASSED Test: remove_company_admin functionality removes admin (test/operately_web/api/mutations/remove_company_admin_test.exs:60) PASSED Test: security it requires authentication (test/operately_web/api/mutations/remove_company_admin_test.exs:11) 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 OperatelyWeb.Api.Queries.GetPeopleTest Test: permissions company member can query people from the same company (test/operately_web/api/queries/get_people_test.exs:32) PASSED Test: permissions suspended people don't have access (test/operately_web/api/queries/get_people_test.exs:64) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_people_test.exs:10) PASSED Test: permissions company member can't query people from another company (test/operately_web/api/queries/get_people_test.exs:48) PASSED Test: get_people functionality include_manager (test/operately_web/api/queries/get_people_test.exs:109) PASSED Test: get_people functionality include_suspeded (test/operately_web/api/queries/get_people_test.exs:91) PASSED Test: get_people functionality only_suspended (test/operately_web/api/queries/get_people_test.exs:100) PASSED Test: get_people functionality returns all people from the company (test/operately_web/api/queries/get_people_test.exs:78) PASSED Test: security it doesn't return people from other companies (test/operately_web/api/queries/get_people_test.exs:14) 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 OperatelyWeb.Api.Mutations.RemoveProjectContributorTest 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=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/remove_project_contributor_test.exs:44) PASSED Test: permissions if caller has levels company=no_access, space=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=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=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: security it requires authentication (test/operately_web/api/mutations/remove_project_contributor_test.exs:13) PASSED Test: permissions if caller has levels company=view_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/remove_project_contributor_test.exs:44) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/remove_project_contributor_test.exs:44) PASSED Test: permissions if caller has levels company=no_access, space=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=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=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=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=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=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: remove_project_contributor functionality removes project contributor (test/operately_web/api/mutations/remove_project_contributor_test.exs:65) PASSED OperatelyWeb.Api.Queries.GetPersonTest 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 returns the person (test/operately_web/api/queries/get_person_test.exs:50) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_person_test.exs:10) PASSED Test: permissions suspended people don't have access (test/operately_web/api/queries/get_person_test.exs:39) PASSED Test: get_person functionality includes_reports (test/operately_web/api/queries/get_person_test.exs:68) PASSED Test: get_person functionality includes_peers (test/operately_web/api/queries/get_person_test.exs:79) PASSED Test: get_person functionality include_manager (test/operately_web/api/queries/get_person_test.exs:56) PASSED Test: security it doesn't return people from other companies (test/operately_web/api/queries/get_person_test.exs:14) PASSED Prosemirror2HtmlTest Test: paragraph (test/prosemirror2html_test.exs:198) PASSED Test: multiple marks (test/prosemirror2html_test.exs:238) PASSED Test: converts a a complex paragraph with various nodes and marks (test/prosemirror2html_test.exs:143) PASSED Test: bold mark (test/prosemirror2html_test.exs:218) PASSED Test: blobs (test/prosemirror2html_test.exs:261) PASSED Test: mulitple nodes (test/prosemirror2html_test.exs:169) PASSED Operately.Operations.GoalReopeningTest Test: notifications person without permissions is not notified (test/operately/operations/goal_reopening_test.exs:74) PASSED Test: notifications Reopening goal notifies everyone (test/operately/operations/goal_reopening_test.exs:36) PASSED Test: GoalReopening operation updates goal (test/operately/operations/goal_reopening_test.exs:90) PASSED Test: notifications Reopening goal notifies selected people (test/operately/operations/goal_reopening_test.exs:56) PASSED OperatelyWeb.Api.Queries.GetGoalsTest Test: permissions company members have access (test/operately_web/api/queries/get_goals_test.exs:48) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_goals_test.exs:89) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_goals_test.exs:13) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_goals_test.exs:65) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_goals_test.exs:122) PASSED Test: get_goals functionality include_last_check_in (test/operately_web/api/queries/get_goals_test.exs:143) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_goals_test.exs:105) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_goals_test.exs:28) PASSED Operately.Operations.ProjectContributorEditedTest Test: converting a champion to a contributor (test/operately/operations/project_contributor_edited_test.exs:37) PASSED Test: choosing a new champion that is not already a contributor (test/operately/operations/project_contributor_edited_test.exs:60) PASSED Test: updating responsibility (test/operately/operations/project_contributor_edited_test.exs:25) PASSED Test: converting a reviewer to a contributor (test/operately/operations/project_contributor_edited_test.exs:49) PASSED Test: choosing a new champion from the contributors (test/operately/operations/project_contributor_edited_test.exs:78) PASSED Test: updating access level (test/operately/operations/project_contributor_edited_test.exs:31) PASSED OperatelyWeb.Api.Mutations.EditDiscussionTest Test: company permissions company members without edit access can't edit discussion (test/operately_web/api/mutations/edit_discussion_test.exs:36) PASSED Test: edit_discussion functionality edits discussion (test/operately_web/api/mutations/edit_discussion_test.exs:119) PASSED Test: company permissions company owners can edit discussion (test/operately_web/api/mutations/edit_discussion_test.exs:51) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_discussion_test.exs:15) PASSED Test: edit_discussion functionality mentioned people are added to subscriptions list (test/operately_web/api/mutations/edit_discussion_test.exs:126) PASSED Test: company permissions company members with edit access can edit discussion (test/operately_web/api/mutations/edit_discussion_test.exs:43) PASSED Test: space permissions company owner can edit discussion (test/operately_web/api/mutations/edit_discussion_test.exs:97) 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 space members with edit access can edit discussion (test/operately_web/api/mutations/edit_discussion_test.exs:89) 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: company permissions company member can see only their company (test/operately_web/api/mutations/edit_discussion_test.exs:28) PASSED Operately.Operations.CompanyMemberAddingTest Test: CompanyMemberAdding operation creates invitation for person (test/operately/operations/company_member_adding_test.exs:60) PASSED Test: CompanyMemberAdding operation creates activity (test/operately/operations/company_member_adding_test.exs:79) PASSED Test: CompanyMemberAdding operation creates person (test/operately/operations/company_member_adding_test.exs:32) 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 OperatelyWeb.Api.Mutations.EditProjectCheckInTest 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: 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=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_check_in_test.exs:41) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_check_in_test.exs:41) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_project_check_in_test.exs:13) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_check_in_test.exs:41) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=edit_access on the project, then expect code=200 (test/operately_web/api/mutations/edit_project_check_in_test.exs:41) PASSED Test: permissions if caller has levels company=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=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=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: 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=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=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 OperatelyWeb.Api.Mutations.MoveProjectToSpaceTest Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/move_project_to_space_test.exs:52) PASSED Test: permissions if caller has levels company=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=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: 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=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=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: security it requires authentication (test/operately_web/api/mutations/move_project_to_space_test.exs:11) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/move_project_to_space_test.exs:52) PASSED Test: permissions if caller has levels company=no_access, space=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=comment_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/move_project_to_space_test.exs:52) PASSED Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/move_project_to_space_test.exs:52) PASSED Test: permissions if caller has levels company=no_access, space=full_access, project=no_access on the project, then expect code=200 (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=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=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=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=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=full_access, space=no_access on the new space, then expect code=200 (test/operately_web/api/mutations/move_project_to_space_test.exs:72) PASSED Test: permissions if caller has levels company=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 Operately.DemoTest 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 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 OperatelyWeb.Api.Mutations.EditSpacePermissionsTest 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: permissions company owner can edit space permissions (test/operately_web/api/mutations/edit_space_permissions_test.exs:45) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_space_permissions_test.exs:11) PASSED Test: permissions company members with full access can edit space permissions (test/operately_web/api/mutations/edit_space_permissions_test.exs:38) PASSED Test: permissions space managers can edit space permissions (test/operately_web/api/mutations/edit_space_permissions_test.exs:66) PASSED Test: edit_space_permissions functionality edits space permissions (test/operately_web/api/mutations/edit_space_permissions_test.exs:78) 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 without view access can't see space permissions (test/operately_web/api/mutations/edit_space_permissions_test.exs:24) PASSED OperatelyWeb.Api.Mutations.ChangeGoalParentTest 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: change_goal_parent functionality archives goal (test/operately_web/api/mutations/change_goal_parent_test.exs:157) PASSED Test: permissions champions can change goal parent (test/operately_web/api/mutations/change_goal_parent_test.exs:114) PASSED Test: permissions company admins can change goal parent (test/operately_web/api/mutations/change_goal_parent_test.exs:54) PASSED Test: security it requires authentication (test/operately_web/api/mutations/change_goal_parent_test.exs:13) PASSED Test: permissions reviewers can change goal parent (test/operately_web/api/mutations/change_goal_parent_test.exs:131) PASSED Test: permissions company members with edit access can change goal parent (test/operately_web/api/mutations/change_goal_parent_test.exs:46) PASSED Test: permissions space managers can change goal parent (test/operately_web/api/mutations/change_goal_parent_test.exs:99) 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 with edit access can change goal parent (test/operately_web/api/mutations/change_goal_parent_test.exs:90) 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 company members without view access can't see a goal (test/operately_web/api/mutations/change_goal_parent_test.exs:28) PASSED OperatelyWeb.Api.Mutations.PostGoalProgressUpdateTest 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: subscriptions to notifications creates subscription list for goal update (test/operately_web/api/mutations/post_goal_progress_update_test.exs:103) PASSED Test: permissions if caller has levels company=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: 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=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: security it requires authentication (test/operately_web/api/mutations/post_goal_progress_update_test.exs:16) PASSED Test: post_goal_progress_update functionality posts goal progress update (test/operately_web/api/mutations/post_goal_progress_update_test.exs:74) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=reviewer on the goal, then expect code=200 (test/operately_web/api/mutations/post_goal_progress_update_test.exs:43) PASSED Test: permissions if caller has levels company=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=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=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: 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=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=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 Operately.Operations.CompanyAdminAddingTest Test: CompanyAdminAdding operation creates notification (test/operately/operations/company_admin_adding_test.exs:43) PASSED 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 OperatelyWeb.Api.Queries.GetResourceHubFolderTest 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: 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=full_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_folder_test.exs:39) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_folder_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_resource_hub_folder_test.exs:10) PASSED Test: get_resource_hub_test functionality include_nodes (test/operately_web/api/queries/get_resource_hub_folder_test.exs:80) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_folder_test.exs:39) PASSED Test: permissions if caller has levels company=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=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=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_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=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=no_access and space=no_access, then expect code=404 (test/operately_web/api/queries/get_resource_hub_folder_test.exs:39) PASSED Operately.Data.Change019CreateAccessGroupsForSpacesTest Test: creates access group membership for existing people (test/operately/data/change_019_create_access_groups_for_spaces_test.exs:31) PASSED Operately.Operations.ProjectClosedTest Test: Closing project notifies all contributors if send_to_everyone is true (test/operately/operations/project_closed_test.exs:81) PASSED Test: Closing project notifies mentioned person (test/operately/operations/project_closed_test.exs:125) PASSED Test: Closing project notifies only reviewer (test/operately/operations/project_closed_test.exs:29) PASSED Test: Closing project does not notify creator (test/operately/operations/project_closed_test.exs:108) PASSED Test: Doesn't notify person without view access (test/operately/operations/project_closed_test.exs:164) PASSED Test: Closing project notifies contributors (test/operately/operations/project_closed_test.exs:52) PASSED OperatelyWeb.Api.Queries.GetCompaniesTest Test: get_companies functionality include_member_count doesn't include suspended members (test/operately_web/api/queries/get_companies_test.exs:36) PASSED 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 OperatelyWeb.Api.Mutations.AssCompanyTrustedEmailDomainTest 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 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 Operately.ProjectsTest Test: project_key_resources update_key_resource/2 with valid data updates the key_resource (test/operately/projects_test.exs:322) PASSED Test: projects create_project/2 with valid data creates a project (test/operately/projects_test.exs:44) 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 create_milestone/1 with valid data creates a milestone (test/operately/projects_test.exs:135) PASSED Test: project_documents update_document/2 with invalid data returns error changeset (test/operately/projects_test.exs:272) 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 valid data updates the document (test/operately/projects_test.exs:264) PASSED Test: project_key_resources list_key_resources/0 returns all project_key_resources (test/operately/projects_test.exs:300) PASSED Test: project_documents get_document!/1 returns the document with given id (test/operately/projects_test.exs:243) PASSED Test: project_milestones delete_milestone/1 deletes the milestone (test/operately/projects_test.exs:164) PASSED Test: project_documents create_document/1 with invalid data returns error changeset (test/operately/projects_test.exs:260) PASSED Test: project_documents change_document/1 returns a document changeset (test/operately/projects_test.exs:282) PASSED Test: project_milestones get_milestone!/1 returns the milestone with given id (test/operately/projects_test.exs:123) PASSED Test: project_milestones update_milestone/2 with valid data updates the milestone (test/operately/projects_test.exs:151) PASSED Test: projects update_project/2 with invalid data returns error changeset (test/operately/projects_test.exs:69) PASSED Test: projects list_projects/0 returns all projects (test/operately/projects_test.exs:36) PASSED Test: project_contributors create_contributor/2 with valid data creates a contributor (test/operately/projects_test.exs:194) PASSED Test: project_key_resources update_key_resource/2 with invalid data returns error changeset (test/operately/projects_test.exs:331) PASSED Test: project_milestones get_next_milestone/1 returns the first upcoming milestone (test/operately/projects_test.exs:127) PASSED Test: projects update_project/2 with valid data updates the project (test/operately/projects_test.exs:62) PASSED Test: project_milestones list_project_milestones/1 returns all project_milestones (test/operately/projects_test.exs:119) PASSED Test: projects change_project/1 returns a project changeset (test/operately/projects_test.exs:79) PASSED Test: project_documents delete_document/1 deletes the document (test/operately/projects_test.exs:277) PASSED Test: projects outdated?/1 returns true if the project is outdated (test/operately/projects_test.exs:83) PASSED Test: project_contributors get_contributor!/1 returns the contributor with given id (test/operately/projects_test.exs:190) PASSED Test: project_milestones create_milestone/1 with invalid data returns error changeset (test/operately/projects_test.exs:147) PASSED Test: project_documents list_project_documents/0 returns all project_documents (test/operately/projects_test.exs:239) PASSED Test: projects archive_project/1 archives the project (test/operately/projects_test.exs:74) PASSED Test: project_contributors change_contributor/1 returns a contributor changeset (test/operately/projects_test.exs:218) PASSED Test: project_contributors delete_contributor/1 deletes the contributor (test/operately/projects_test.exs:213) PASSED Test: project_key_resources create_key_resource/1 with valid data creates a key_resource (test/operately/projects_test.exs:308) PASSED Test: projects get_project!/1 returns the project with given id (test/operately/projects_test.exs:40) PASSED Test: project_milestones update_milestone/2 with invalid data returns error changeset (test/operately/projects_test.exs:159) PASSED Test: project_key_resources delete_key_resource/1 deletes the key_resource (test/operately/projects_test.exs:336) PASSED Test: project_key_resources change_key_resource/1 returns a key_resource changeset (test/operately/projects_test.exs:341) PASSED Test: project_contributors update_contributor/2 with valid data updates the contributor (test/operately/projects_test.exs:206) PASSED Test: project_contributors list_project_contributors/0 returns all project_contributors (test/operately/projects_test.exs:186) PASSED Test: project_milestones change_milestone/1 returns a milestone changeset (test/operately/projects_test.exs:169) PASSED Test: project_key_resources create_key_resource/1 with invalid data returns error changeset (test/operately/projects_test.exs:318) 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 Operately.Operations.GoalClosingTest Test: notifications person without permissions is not notified (test/operately/operations/goal_closing_test.exs:61) PASSED Test: notifications Closing goal notifies everyone (test/operately/operations/goal_closing_test.exs:23) PASSED Test: GoalClosing operation updates goal (test/operately/operations/goal_closing_test.exs:77) PASSED Test: notifications Closing goal notifies selected people (test/operately/operations/goal_closing_test.exs:43) PASSED OperatelyWeb.Api.Mutations.DeleteResourceHubFolderTest 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=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_folder_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/mutations/delete_resource_hub_folder_test.exs:15) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (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=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=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_folder_test.exs:40) PASSED Test: permissions if caller has levels company=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=no_access, then expect code=404 (test/operately_web/api/mutations/delete_resource_hub_folder_test.exs:40) PASSED OperatelyWeb.Api.Queries.GetSpaceTest Test: permissions member doesn't have access to space they are not part of (test/operately_web/api/queries/get_space_test.exs:35) PASSED Test: get_space functionality include_potential_subscribers (test/operately_web/api/queries/get_space_test.exs:167) PASSED Test: get_space functionality include_members (test/operately_web/api/queries/get_space_test.exs:132) PASSED Test: permissions member has access to space they are NOT part of (test/operately_web/api/queries/get_space_test.exs:51) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_space_test.exs:13) PASSED Test: get_space functionality include_access_levels (test/operately_web/api/queries/get_space_test.exs:154) PASSED Test: permissions members has access to space they are part of (test/operately_web/api/queries/get_space_test.exs:42) PASSED Test: get_space functionality include_unread_notifications (test/operately_web/api/queries/get_space_test.exs:115) PASSED Test: get_space functionality get_space (test/operately_web/api/queries/get_space_test.exs:75) 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 space does not exist (test/operately_web/api/queries/get_space_test.exs:70) PASSED Test: permissions member has access to company space (test/operately_web/api/queries/get_space_test.exs:26) PASSED Operately.Blobs.EncryptionTest Test: raises error if the secret key is not provided (test/operately/blobs/encryption_test.exs:20) PASSED 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 Operately.Operations.ProjectPermissionsEditingTest Test: ProjectPermissionsEditing operation creates activity (test/operately/operations/project_permissions_editing_test.exs:66) PASSED 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 OperatelyWeb.Api.Queries.GetMilestoneTest Test: permissions company members have access (test/operately_web/api/queries/get_milestone_test.exs:34) PASSED Test: get_milestone functionality include_comments (test/operately_web/api/queries/get_milestone_test.exs:127) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_milestone_test.exs:49) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_milestone_test.exs:13) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_milestone_test.exs:41) PASSED Test: get_milestone functionality include_permissions (test/operately_web/api/queries/get_milestone_test.exs:114) PASSED Test: permissions reviewers have access (test/operately_web/api/queries/get_milestone_test.exs:73) PASSED Test: get_milestone functionality include_project (test/operately_web/api/queries/get_milestone_test.exs:101) PASSED Test: permissions champions have access (test/operately_web/api/queries/get_milestone_test.exs:57) PASSED Test: permissions company members have no access (test/operately_web/api/queries/get_milestone_test.exs:27) 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 OperatelyWeb.Api.Mutations.ChangeTaskDescriptionTest 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 champions can change task description (test/operately_web/api/mutations/change_task_description_test.exs:129) 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: change_task_description functionality changes task description (test/operately_web/api/mutations/change_task_description_test.exs:165) PASSED Test: permissions company owner can change task description (test/operately_web/api/mutations/change_task_description_test.exs:52) PASSED Test: security it requires authentication (test/operately_web/api/mutations/change_task_description_test.exs:15) PASSED Test: permissions contributors with edit access can change task description (test/operately_web/api/mutations/change_task_description_test.exs:118) PASSED Test: permissions company members with edit access can change task description (test/operately_web/api/mutations/change_task_description_test.exs:45) PASSED Test: permissions space managers can change task description (test/operately_web/api/mutations/change_task_description_test.exs:92) 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 with edit access can change task description (test/operately_web/api/mutations/change_task_description_test.exs:84) PASSED Test: permissions reviewers can change task description (test/operately_web/api/mutations/change_task_description_test.exs:145) 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 company members without view access can't see a project (test/operately_web/api/mutations/change_task_description_test.exs:29) PASSED Operately.Data.Change055RenameCompanySpaceToGeneralTest Test: renames company space to General (test/operately/data/change_055_rename_company_space_to_general_test.exs:9) PASSED OperatelyWeb.Api.Queries.GetDiscussionsTest Test: permissions company members have no access (test/operately_web/api/queries/get_discussions_test.exs:35) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_discussions_test.exs:55) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_discussions_test.exs:12) PASSED Test: permissions company members have access (test/operately_web/api/queries/get_discussions_test.exs:45) PASSED Test: get_discussions functionality include_comments_count (test/operately_web/api/queries/get_discussions_test.exs:121) PASSED Test: get_discussions functionality with no includes (test/operately_web/api/queries/get_discussions_test.exs:100) PASSED Test: get_discussions functionality include_author (test/operately_web/api/queries/get_discussions_test.exs:111) 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 space - company members have access (test/operately_web/api/queries/get_discussions_test.exs:25) PASSED OperatelyWeb.Api.Mutations.EditCommentTest Test: permissions if caller has levels company=full_access, space=no_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:129) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=view_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:79) PASSED Test: permissions if caller has levels company=view_access, space=no_access, goal=no_access on the 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, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:79) PASSED Test: Updates subscriptions project_check_in (test/operately_web/api/mutations/edit_comment_test.exs:254) PASSED Test: permissions if caller has levels company=no_access, space=view_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:129) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=no_access on the goal, then expect code=404 (test/operately_web/api/mutations/edit_comment_test.exs:129) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=reviewer on the goal, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:129) PASSED Test: permissions if caller has levels company=no_access, space=full_access on the space, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:154) PASSED Test: permissions if caller has levels company=view_access, space=no_access on the space, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:154) PASSED Test: permissions if caller has levels company=edit_access, space=no_access on the space, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:154) PASSED Test: Updates subscriptions message (test/operately_web/api/mutations/edit_comment_test.exs:254) PASSED Test: permissions if caller has levels company=no_access, space=full_access, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:129) PASSED Test: permissions if caller has levels company=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) 13:12:36.388 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/mutations/edit_comment_test.exs:284: OperatelyWeb.Api.Mutations.EditCommentTest.create_comment/3 test/operately_web/api/mutations/edit_comment_test.exs:108: OperatelyWeb.Api.Mutations.EditCommentTest."test permissions if caller has levels company=full_access, space=no_access, goal=no_access on the thread, then expect code=403"/1 PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=champion on the thread, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:104) 13:12:36.426 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/mutations/edit_comment_test.exs:284: OperatelyWeb.Api.Mutations.EditCommentTest.create_comment/3 test/operately_web/api/mutations/edit_comment_test.exs:108: 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"/1 PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the milestone comment, then expect code=404 (test/operately_web/api/mutations/edit_comment_test.exs:179) PASSED Test: permissions if caller has levels company=no_access, space=no_access, 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=edit_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 project_retrospective (test/operately_web/api/mutations/edit_comment_test.exs:254) 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 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=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=no_access, project=edit_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:79) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_comment_test.exs:19) PASSED Test: permissions if caller has levels company=no_access, space=edit_access, goal=no_access on the thread, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:104) 13:12:36.742 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/mutations/edit_comment_test.exs:284: OperatelyWeb.Api.Mutations.EditCommentTest.create_comment/3 test/operately_web/api/mutations/edit_comment_test.exs:108: OperatelyWeb.Api.Mutations.EditCommentTest."test permissions if caller has levels company=no_access, space=edit_access, goal=no_access on the thread, then expect code=403"/1 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 on the space, then expect code=404 (test/operately_web/api/mutations/edit_comment_test.exs:154) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=view_access on the milestone comment, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:179) PASSED Test: permissions if caller has levels company=view_access, space=no_access, 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=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:79) PASSED Test: permissions if caller has levels company=no_access, space=edit_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:79) PASSED Test: permissions if caller has levels company=full_access, space=no_access, 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=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=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=comment_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:79) PASSED Test: permissions if caller has levels company=no_access, space=comment_access, goal=no_access on the thread, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:104) 13:12:37.055 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/mutations/edit_comment_test.exs:284: OperatelyWeb.Api.Mutations.EditCommentTest.create_comment/3 test/operately_web/api/mutations/edit_comment_test.exs:108: OperatelyWeb.Api.Mutations.EditCommentTest."test permissions if caller has levels company=no_access, space=comment_access, goal=no_access on the thread, then expect code=403"/1 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=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=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) 13:12:37.137 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/mutations/edit_comment_test.exs:284: OperatelyWeb.Api.Mutations.EditCommentTest.create_comment/3 test/operately_web/api/mutations/edit_comment_test.exs:108: OperatelyWeb.Api.Mutations.EditCommentTest."test permissions if caller has levels company=edit_access, space=no_access, goal=no_access on the thread, then expect code=403"/1 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: 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=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) 13:12:37.215 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/mutations/edit_comment_test.exs:284: OperatelyWeb.Api.Mutations.EditCommentTest.create_comment/3 test/operately_web/api/mutations/edit_comment_test.exs:108: OperatelyWeb.Api.Mutations.EditCommentTest."test permissions if caller has levels company=comment_access, space=no_access, goal=no_access on the thread, then expect code=403"/1 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=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=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) 13:12:37.290 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/mutations/edit_comment_test.exs:284: OperatelyWeb.Api.Mutations.EditCommentTest.create_comment/3 test/operately_web/api/mutations/edit_comment_test.exs:108: OperatelyWeb.Api.Mutations.EditCommentTest."test permissions if caller has levels company=view_access, space=no_access, goal=no_access on the thread, then expect code=403"/1 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, goal=no_access on the goal, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:129) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=no_access on the project, then expect code=404 (test/operately_web/api/mutations/edit_comment_test.exs:79) PASSED Test: Updates subscriptions goal_update (test/operately_web/api/mutations/edit_comment_test.exs:254) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=no_access on the thread, then expect code=404 (test/operately_web/api/mutations/edit_comment_test.exs:104) 13:12:37.417 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/mutations/edit_comment_test.exs:284: OperatelyWeb.Api.Mutations.EditCommentTest.create_comment/3 test/operately_web/api/mutations/edit_comment_test.exs:108: OperatelyWeb.Api.Mutations.EditCommentTest."test permissions if caller has levels company=no_access, space=no_access, goal=no_access on the thread, then expect code=404"/1 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=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=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=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=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=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) 13:12:37.581 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/mutations/edit_comment_test.exs:284: OperatelyWeb.Api.Mutations.EditCommentTest.create_comment/3 test/operately_web/api/mutations/edit_comment_test.exs:108: OperatelyWeb.Api.Mutations.EditCommentTest."test permissions if caller has levels company=no_access, space=full_access, goal=no_access on the thread, then expect code=403"/1 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) 13:12:37.615 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/mutations/edit_comment_test.exs:284: OperatelyWeb.Api.Mutations.EditCommentTest.create_comment/3 test/operately_web/api/mutations/edit_comment_test.exs:108: OperatelyWeb.Api.Mutations.EditCommentTest."test permissions if caller has levels company=no_access, space=view_access, goal=no_access on the thread, then expect code=403"/1 PASSED Test: permissions if caller has levels company=no_access, space=comment_access, project=no_access on the milestone comment, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:179) PASSED Test: permissions if caller has levels company=no_access, space=no_access, goal=reviewer on the thread, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:104) 13:12:37.670 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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 (operately 0.1.0) lib/operately/operations/comment_adding.ex:20: Operately.Operations.CommentAdding.run/4 test/operately_web/api/mutations/edit_comment_test.exs:284: OperatelyWeb.Api.Mutations.EditCommentTest.create_comment/3 test/operately_web/api/mutations/edit_comment_test.exs:108: OperatelyWeb.Api.Mutations.EditCommentTest."test permissions if caller has levels company=no_access, space=no_access, goal=reviewer on the thread, then expect code=403"/1 PASSED Test: permissions if caller has levels company=full_access, space=no_access on the space, then expect code=403 (test/operately_web/api/mutations/edit_comment_test.exs:154) PASSED Test: permissions if caller has levels company=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=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 OperatelyWeb.Api.Queries.GetCompanyTest Test: get_company functionality only company (test/operately_web/api/queries/get_company_test.exs:35) PASSED Test: get_company functionality include_admins (test/operately_web/api/queries/get_company_test.exs:52) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_company_test.exs:5) PASSED Test: get_company functionality include_people (test/operately_web/api/queries/get_company_test.exs:44) PASSED Test: get_company functionality include_owners (test/operately_web/api/queries/get_company_test.exs:60) PASSED Test: security suspended people don't have access (test/operately_web/api/queries/get_company_test.exs:11) 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 Operately.AccessActivityContextAssignerTest Test: assigns access_context to project activities project_contributor_addition action (test/operately/access/activity_context_assigner_test.exs:462) 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 project activities project_check_in_edit action (test/operately/access/activity_context_assigner_test.exs:423) 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_created action (test/operately/access/activity_context_assigner_test.exs:379) PASSED Test: assigns access_context to goal activities goal_editing action (test/operately/access/activity_context_assigner_test.exs:325) PASSED Test: assigns access_context to goal activities goal_timeframe_editing action (test/operately/access/activity_context_assigner_test.exs:352) PASSED Test: assigns access_context to project activities project_moved action (test/operately/access/activity_context_assigner_test.exs:519) PASSED Test: assigns access_context to project activities project_pausing action (test/operately/access/activity_context_assigner_test.exs:530) PASSED Test: assigns access_context to project activities project_resuming action (test/operately/access/activity_context_assigner_test.exs:552) PASSED Test: assigns access_context to project activities project_check_in_commented action (test/operately/access/activity_context_assigner_test.exs:412) PASSED Test: assigns access_context to goal activities goal_discussion_editing action (test/operately/access/activity_context_assigner_test.exs:314) PASSED Test: assigns access_context to space activities group_edited action (test/operately/access/activity_context_assigner_test.exs:207) PASSED Test: assigns access_context to task activities task_adding action (test/operately/access/activity_context_assigner_test.exs:583) PASSED Test: assigns access_context to goal activities goal_reopening action (test/operately/access/activity_context_assigner_test.exs:336) PASSED Test: assigns access_context to project activities project_check_in_acknowledged action (test/operately/access/activity_context_assigner_test.exs:401) 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_milestone_commented action (test/operately/access/activity_context_assigner_test.exs:508) 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 space_joining action (test/operately/access/activity_context_assigner_test.exs:86) 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 goal activities goal_check_in_commented action (test/operately/access/activity_context_assigner_test.exs:253) 13:12:38.484 [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:694: 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 comment_added activity entity_type is :project_check_in (test/operately/access/activity_context_assigner_test.exs:645) 13:12:38.513 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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:694: Operately.AccessActivityContextAssignerTest.create_activity/1 test/operately/access/activity_context_assigner_test.exs:654: Operately.AccessActivityContextAssignerTest."test assigns access_context to comment_added activity entity_type is :project_check_in"/1 (ex_unit 1.17.2) lib/ex_unit/runner.ex:485: ExUnit.Runner.exec_test/2 PASSED Test: assigns access_context to project activities project_discussion_submitted action (test/operately/access/activity_context_assigner_test.exs:475) PASSED Test: assigns access_context to task activities task_closing action (test/operately/access/activity_context_assigner_test.exs:594) 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 company activities company_member_added action (test/operately/access/activity_context_assigner_test.exs:73) PASSED Test: assigns access_context to space activities discussion_comment_submitted action (test/operately/access/activity_context_assigner_test.exs:130) 13:12:38.634 [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:694: 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 space activities discussion_posting action (test/operately/access/activity_context_assigner_test.exs:108) 13:12:38.667 [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:694: 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 project activities project_archived action (test/operately/access/activity_context_assigner_test.exs:390) 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_check_in_acknowledgement action (test/operately/access/activity_context_assigner_test.exs:242) 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_discussion_creation action (test/operately/access/activity_context_assigner_test.exs:300) 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_renamed action (test/operately/access/activity_context_assigner_test.exs:541) 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_closing action (test/operately/access/activity_context_assigner_test.exs:275) 13:12:38.897 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/goal_closing.ex:7: Operately.Activities.Notifications.GoalClosing.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:694: Operately.AccessActivityContextAssignerTest.create_activity/1 test/operately/access/activity_context_assigner_test.exs:282: Operately.AccessActivityContextAssignerTest."test assigns access_context to goal activities goal_closing action"/1 (ex_unit 1.17.2) lib/ex_unit/runner.ex:485: ExUnit.Runner.exec_test/2 PASSED Test: assigns access_context to project activities project_check_in_submitted action (test/operately/access/activity_context_assigner_test.exs:434) PASSED Test: assigns access_context to company activities password_first_time_changed action (test/operately/access/activity_context_assigner_test.exs:51) PASSED Test: assigns access_context to space activities task_size_change action (test/operately/access/activity_context_assigner_test.exs:196) PASSED Test: assigns access_context to comment_added activity entity_type is :update (test/operately/access/activity_context_assigner_test.exs:658) 13:12:38.998 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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:694: Operately.AccessActivityContextAssignerTest.create_activity/1 test/operately/access/activity_context_assigner_test.exs:667: Operately.AccessActivityContextAssignerTest."test assigns access_context to comment_added activity entity_type is :update"/1 (ex_unit 1.17.2) lib/ex_unit/runner.ex:485: ExUnit.Runner.exec_test/2 PASSED Test: assigns access_context to project activities project_goal_connection action (test/operately/access/activity_context_assigner_test.exs:486) PASSED Test: assigns access_context to task activities task_status_change action (test/operately/access/activity_context_assigner_test.exs:605) PASSED Test: assigns access_context to project activities project_goal_disconnection action (test/operately/access/activity_context_assigner_test.exs:497) PASSED Test: assigns access_context to task activities task_update action (test/operately/access/activity_context_assigner_test.exs:616) PASSED Test: assigns access_context to goal activities goal_check_in_edit action (test/operately/access/activity_context_assigner_test.exs:264) PASSED Test: assigns access_context to goal activities goal_check_in action (test/operately/access/activity_context_assigner_test.exs:231) 13:12:39.153 [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:694: Operately.AccessActivityContextAssignerTest.create_activity/1 test/operately/access/activity_context_assigner_test.exs:238: Operately.AccessActivityContextAssignerTest."test assigns access_context to goal activities goal_check_in action"/1 (ex_unit 1.17.2) lib/ex_unit/runner.ex:485: ExUnit.Runner.exec_test/2 (stdlib 6.0.1) timer.erl:590: :timer.tc/2 PASSED Test: assigns access_context to comment_added activity entity_type is :comment_thread (test/operately/access/activity_context_assigner_test.exs:671) 13:12:39.182 [error] ** (KeyError) key :access_context 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/notifications/subscribers_loader.ex:38: Operately.Notifications.SubscribersLoader.preload_subscriptions/1 (operately 0.1.0) lib/operately/notifications/subscribers_loader.ex:20: Operately.Notifications.SubscribersLoader.load_for_notifications/3 (operately 0.1.0) lib/operately/activities/notifications/comment_added.ex:8: Operately.Activities.Notifications.CommentAdded.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:694: Operately.AccessActivityContextAssignerTest.create_activity/1 test/operately/access/activity_context_assigner_test.exs:680: Operately.AccessActivityContextAssignerTest."test assigns access_context to comment_added activity entity_type is :comment_thread"/1 (ex_unit 1.17.2) lib/ex_unit/runner.ex:485: ExUnit.Runner.exec_test/2 PASSED Test: assigns access_context to goal activities goal_reparent action (test/operately/access/activity_context_assigner_test.exs:220) PASSED Test: assigns access_context to project activities project_timeline_edited action (test/operately/access/activity_context_assigner_test.exs:563) PASSED Test: assigns access_context to project activities project_closed action (test/operately/access/activity_context_assigner_test.exs:445) PASSED OperatelyWeb.Api.Mutations.CreateResourceHubLinkTest 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=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_link_test.exs:42) PASSED Test: security it requires authentication (test/operately_web/api/mutations/create_resource_hub_link_test.exs:17) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (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=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=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_link_test.exs:42) PASSED Test: permissions if caller has levels company=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=no_access, then expect code=404 (test/operately_web/api/mutations/create_resource_hub_link_test.exs:42) PASSED TurboConnect.QueryTest Test: defining a query with inputs and outputs (test/turbo_connect/query_test.exs:24) PASSED OperatelyWeb.Api.Mutations.RestoreCompanyMemberTest Test: permissions company admins can restore people (test/operately_web/api/mutations/restore_company_member_test.exs:26) PASSED Test: permissions can't restore people from other companies (test/operately_web/api/mutations/restore_company_member_test.exs:36) PASSED Test: security it requires authentication (test/operately_web/api/mutations/restore_company_member_test.exs:15) PASSED Test: permissions company owners can restore people (test/operately_web/api/mutations/restore_company_member_test.exs:31) PASSED Test: functionality it restores a suspended person (test/operately_web/api/mutations/restore_company_member_test.exs:46) PASSED Test: permissions company members can't restore people (test/operately_web/api/mutations/restore_company_member_test.exs:21) PASSED Operately.Data.Change010CreateGroupsAccessContextTest Test: creates access_context for soft-deleted groups (test/operately/data/change_010_create_groups_access_context_test.exs:51) PASSED Test: creates access_context for existing groups (test/operately/data/change_010_create_groups_access_context_test.exs:23) PASSED Test: creates access_context successfully when a group already has access context (test/operately/data/change_010_create_groups_access_context_test.exs:40) PASSED Operately.Operations.ProjectCheckInTest Test: Creating project check-in notifies all contributors if send_to_everyone is true (test/operately/operations/project_check_in_test.exs:93) PASSED Test: Creating project check-in notifies mentioned person (test/operately/operations/project_check_in_test.exs:137) PASSED Test: Creating project check-in notifies only reviewer (test/operately/operations/project_check_in_test.exs:41) 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 OperatelyWeb.Api.Queries.ListResourceHubContentTest 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: 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=full_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_test.exs:39) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_resource_hub_test.exs:10) PASSED Test: get_resource_hub functionality include_nodes (test/operately_web/api/queries/get_resource_hub_test.exs:73) PASSED Test: 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=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=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=comment_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_test.exs:39) PASSED Test: permissions if caller has levels company=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=no_access and space=no_access, then expect code=404 (test/operately_web/api/queries/get_resource_hub_test.exs:39) PASSED OperatelyWeb.Api.Mutations.PostProjectCheckInTest 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=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: subscriptions to notifications creates subscription list for project check-in (test/operately_web/api/mutations/post_project_check_in_test.exs:99) 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=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=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: security it requires authentication (test/operately_web/api/mutations/post_project_check_in_test.exs:15) PASSED Test: permissions if caller has levels company=view_access, space=no_access, project=no_access on the project, then expect code=403 (test/operately_web/api/mutations/post_project_check_in_test.exs:46) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=comment_access on the project, then expect code=403 (test/operately_web/api/mutations/post_project_check_in_test.exs:46) PASSED Test: permissions if caller has levels company=no_access, space=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=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=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=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=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=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: post_project_check_in functionality creates project check-in (test/operately_web/api/mutations/post_project_check_in_test.exs:72) PASSED Test: subscriptions to notifications doesn't create repeated subscription (test/operately_web/api/mutations/post_project_check_in_test.exs:140) PASSED Test: subscriptions to notifications adds mentioned people to subscription list (test/operately_web/api/mutations/post_project_check_in_test.exs:119) PASSED OperatelyWeb.Api.Mutations.CreateSpaceTest Test: permissions company members with full access can create space (test/operately_web/api/mutations/create_space_test.exs:21) PASSED Test: create_space functionality creates space (test/operately_web/api/mutations/create_space_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/mutations/create_space_test.exs:8) 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 OperatelyWeb.Api.Mutations.AcknowledgeProjectCheckInTest Test: permissions company members can't acknowledge a check-in (test/operately_web/api/mutations/acknowledge_project_check_in_test.exs:34) 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: security it requires authentication (test/operately_web/api/mutations/acknowledge_project_check_in_test.exs:13) 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: acknowledge_project_check_in functionality idempontency: acknowledging the same check-in multiple times does not change the state (test/operately_web/api/mutations/acknowledge_project_check_in_test.exs:90) PASSED Test: permissions reviewers can acknowledge a check-in (test/operately_web/api/mutations/acknowledge_project_check_in_test.exs:64) PASSED Test: acknowledge_project_check_in functionality acknowledges check-in (test/operately_web/api/mutations/acknowledge_project_check_in_test.exs:80) PASSED Test: permissions contributors can't acknowledge a check-in (test/operately_web/api/mutations/acknowledge_project_check_in_test.exs:57) 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 Operately.ShortUuidTest Test: decode/1 decodes a short UUID to a UUID (test/operately/short_uuid_test.exs:19) PASSED Test: decode/1 returns an error for non-base62 characters (test/operately/short_uuid_test.exs:32) PASSED 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 impossibly long short uuids (test/operately/short_uuid_test.exs:28) PASSED Test: encode! raises an error for invalid UUIDs (test/operately/short_uuid_test.exs:48) PASSED Test: decode! raises an error for invalid short UUIDs (test/operately/short_uuid_test.exs:54) PASSED Test: encoding is performant (test/operately/short_uuid_test.exs:36) PASSED Test: encode/1 returns invalid UUID for non-UUIDs (test/operately/short_uuid_test.exs:15) PASSED OperatelyWeb.Api.Mutations.AddCompanyAdminsTest Test: permissions company members with edit access can add new admins (test/operately_web/api/mutations/add_company_admins_test.exs:27) PASSED Test: add_company_admins functionality adds one admin (test/operately_web/api/mutations/add_company_admins_test.exs:54) PASSED Test: security it requires authentication (test/operately_web/api/mutations/add_company_admins_test.exs:10) PASSED Test: permissions company members with non-admin roles can't add new admins (test/operately_web/api/mutations/add_company_admins_test.exs:36) PASSED Test: add_company_admins functionality adds multiple members (test/operately_web/api/mutations/add_company_admins_test.exs:60) PASSED Test: permissions company members with full access can add new admins (test/operately_web/api/mutations/add_company_admins_test.exs:18) PASSED TurboConnect.FieldsTest Test: defining fields (test/turbo_connect/fields_test.exs:17) 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.Change029CreateSubscriptionsListForMessagesTest Test: creates subscriptions list for existing messages (test/operately/data/change_029_create_subscriptions_list_for_messages_test.exs:19) PASSED Operately.Data.Change008ConvertGoalTimeframesToNewFormatTest Test: doesn't touch goals without deprecated timeframes (test/operately/data/change_008_convert_goal_timeframes_to_new_format_test.exs:28) PASSED 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 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 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.UpdateMilestoneDescriptionTest 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=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_milestone_description_test.exs:41) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/update_milestone_description_test.exs:41) PASSED Test: security it requires authentication (test/operately_web/api/mutations/update_milestone_description_test.exs:13) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_milestone_description_test.exs:41) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=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=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=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=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=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=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 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.UpdateProfileTest 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 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: security it requires authentication (test/operately_web/api/mutations/update_profile_test.exs:7) PASSED Test: updating someone else's profile when I'm not an admin, it doesn't update the profile (test/operately_web/api/mutations/update_profile_test.exs:48) PASSED Test: updating my own profile update the theme (test/operately_web/api/mutations/update_profile_test.exs:90) PASSED Test: updating my own profile inputs that are not provided are not updated (test/operately_web/api/mutations/update_profile_test.exs:100) PASSED Test: updating my own profile it updates the profile (test/operately_web/api/mutations/update_profile_test.exs:75) 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 Operately.Operations.GoalDiscussionCreationTest Test: notifications person without permissions is not notified (test/operately/operations/goal_discussion_creation_test.exs:61) PASSED Test: notifications Creating goal discussion notifies everyone (test/operately/operations/goal_discussion_creation_test.exs:23) PASSED Test: notifications Creating goal discussion notifies selected people (test/operately/operations/goal_discussion_creation_test.exs:43) 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.RemoveKeyResourceTest 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: 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=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/remove_key_resource_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/remove_key_resource_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/mutations/remove_key_resource_test.exs:11) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/remove_key_resource_test.exs:39) PASSED Test: 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=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=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=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=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=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 Operately.Operations.ResourceHubDocumentCreatingTest Test: Person without permissions is not notified (test/operately/operations/resource_hub_document_creating_test.exs:74) PASSED 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 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.12929.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.12932.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)  |  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.Mutations.UpdateTaskStatusTest 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=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_task_status_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/update_task_status_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/mutations/update_task_status_test.exs:12) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_task_status_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=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=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=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=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=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=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 OperatelyWeb.Api.Mutations.RemoveCompanyOwnerTest Test: security admins can't remove owners (test/operately_web/api/mutations/remove_company_owner_test.exs:24) PASSED 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 Operately.Data.Change036AddSpaceToProjectActivitiesTest 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 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 OperatelyWeb.Api.Mutations.MarkAllNotificationsAsReadTest 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 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 OperatelyWeb.Api.Mutations.EditGoalTest Test: permissions company members without edit access can't edit a goal (test/operately_web/api/mutations/edit_goal_test.exs:34) 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 goal targets (test/operately_web/api/mutations/edit_goal_test.exs:182) PASSED Test: permissions champions can edit a goal (test/operately_web/api/mutations/edit_goal_test.exs:98) PASSED Test: edit_goal functionality edits a goal champion and reviewer (test/operately_web/api/mutations/edit_goal_test.exs:154) PASSED Test: permissions company owners can edit a goal (test/operately_web/api/mutations/edit_goal_test.exs:48) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_goal_test.exs:13) PASSED Test: permissions reviewers can edit a goal (test/operately_web/api/mutations/edit_goal_test.exs:113) PASSED Test: permissions company members with edit access can edit a goal (test/operately_web/api/mutations/edit_goal_test.exs:41) PASSED Test: permissions space managers can edit a goal (test/operately_web/api/mutations/edit_goal_test.exs:85) 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 with edit access can edit a goal (test/operately_web/api/mutations/edit_goal_test.exs:77) PASSED Test: edit_goal functionality edits a goal description (test/operately_web/api/mutations/edit_goal_test.exs:144) 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 company members without view access can't see a goal (test/operately_web/api/mutations/edit_goal_test.exs:27) PASSED Test: edit_goal functionality edits a goal timeframe (test/operately_web/api/mutations/edit_goal_test.exs:163) PASSED Test: edit_goal functionality edits goal parent (test/operately_web/api/mutations/edit_goal_test.exs:235) PASSED Test: edit_goal functionality edits goal permissions (test/operately_web/api/mutations/edit_goal_test.exs:205) PASSED Operately.Blobs.TokensTest Test: returns error even for base64 valid garbage (test/operately/blobs/tokens_test.exs:18) PASSED 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 OperatelyWeb.Api.Queries.SearchPeopleTest Test: security suspended people don't have access (test/operately_web/api/queries/search_people_test.exs:26) PASSED Test: search_people functionality searches people by title (test/operately_web/api/queries/search_people_test.exs:52) PASSED Test: security it requires authentication (test/operately_web/api/queries/search_people_test.exs:11) PASSED Test: search_people functionality searches people by name (test/operately_web/api/queries/search_people_test.exs:43) PASSED Test: search_people functionality excludes suspended people (test/operately_web/api/queries/search_people_test.exs:85) 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 ignoring people by id (test/operately_web/api/queries/search_people_test.exs:77) PASSED Test: search_people functionality returns up to 10 matches (test/operately_web/api/queries/search_people_test.exs:61) PASSED Test: security returns people only from the company (test/operately_web/api/queries/search_people_test.exs:15) PASSED TurboConnect.TsGenTest Test: generating TypeScript namespaces (test/turbo_connect/ts_gen_test.exs:315) PASSED Test: generating TypeScript default exports (test/turbo_connect/ts_gen_test.exs:323) PASSED Test: generating TypeScript imports (test/turbo_connect/ts_gen_test.exs:307) PASSED Test: generating TypeScript api client class (test/turbo_connect/ts_gen_test.exs:319) PASSED Test: generating everything together (test/turbo_connect/ts_gen_test.exs:327) PASSED Test: generating TypeScript types (test/turbo_connect/ts_gen_test.exs:311) PASSED Operately.Data.Change053PopulateGoalLastUpdateStatusTest Test: updates goals with their latest updates (test/operately/data/change_053_populate_goal_last_update_status_test.exs:16) PASSED OperatelyWeb.Api.Mutations.DisconnectGoalFromProjectTest 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 champions can disconnect goal from project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:137) 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: disconnect_goal_from_project functionality disconnects goal (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:175) PASSED Test: permissions company owner can disconnect goal from project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:53) PASSED Test: security it requires authentication (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:13) PASSED Test: permissions contributors with edit access can disconnect goal from project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:125) PASSED Test: permissions company members with edit access can disconnect goal from project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:45) PASSED Test: permissions space managers can disconnect goal from project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:97) 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 with edit access can disconnect goal from project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:88) PASSED Test: permissions reviewers can disconnect goal from project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:154) PASSED Test: permissions space members without view access can't see a project (test/operately_web/api/mutations/disconnect_goal_from_project_test.exs:68) 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 OperatelyWeb.Api.Mutations.MarkNotificationsAsReadTest Test: mark_as_read functionality it marks notifications as read (test/operately_web/api/mutations/mark_notifications_as_read_test.exs:29) PASSED 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 TurboConnect.MutationTest Test: defining a mutation with inputs and outputs (test/turbo_connect/mutation_test.exs:23) PASSED TurboConnect.TypesTest Test: definining objects and their fields (test/turbo_connect/types_test.exs:34) 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 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 Operately.Operations.ProjectKeyResourceAddingTest Test: ProjectCreation operation creates activity and notification (test/operately/operations/project_key_resource_adding_test.exs:19) PASSED OperatelyWeb.HealthControllerTest Test: GET /health (test/operately_web/controllers/health_controller_test.exs:4) PASSED OperatelyWeb.Api.Mutations.UpdateProjectDescriptionTest 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=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_project_description_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/update_project_description_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/mutations/update_project_description_test.exs:12) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_project_description_test.exs:40) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=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=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=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=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=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=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 OperatelyWeb.Api.Mutations.UpdateMilestoneTest 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=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_milestone_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/update_milestone_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/mutations/update_milestone_test.exs:11) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/update_milestone_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=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=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=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=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=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=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 Operately.Operations.CompanyDeletingTest Test: it deletes a company (test/operately/operations/company_deleting_test.exs:16) "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 OperatelyWeb.Api.Queries.GetResourceHubLinkTest 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: 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_permissions (test/operately_web/api/queries/get_resource_hub_link_test.exs:140) 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: 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=no_access and space=edit_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_link_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_resource_hub_link_test.exs:10) PASSED Test: get_resource_hub_link functionality get link (test/operately_web/api/queries/get_resource_hub_link_test.exs:70) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_link_test.exs:39) PASSED Test: permissions if caller has levels company=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=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=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 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=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=no_access and space=no_access, then expect code=404 (test/operately_web/api/queries/get_resource_hub_link_test.exs:39) PASSED Test: get_resource_hub_link functionality include_reactions (test/operately_web/api/queries/get_resource_hub_link_test.exs:115) PASSED Test: get_resource_hub_link functionality include_potential_subscribers (test/operately_web/api/queries/get_resource_hub_link_test.exs:162) PASSED Test: get_resource_hub_link functionality include_subscriptions_list (test/operately_web/api/queries/get_resource_hub_link_test.exs:151) PASSED OperatelyWeb.Api.Mutations.CreateResourceHubTest 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=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/mutations/create_resource_hub_test.exs:15) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (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=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=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/create_resource_hub_test.exs:40) PASSED Test: permissions if caller has levels company=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=no_access, then expect code=404 (test/operately_web/api/mutations/create_resource_hub_test.exs:40) PASSED OperatelyWeb.Api.Mutations.ResumeProjectTest 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=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/resume_project_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/resume_project_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/mutations/resume_project_test.exs:11) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/resume_project_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=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=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=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=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=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=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 Operately.Data.Change051PopulateGoalLastCheckInsTest Test: updates goals with their latest updates (test/operately/data/change_051_populate_goal_last_check_ins_test.exs:17) PASSED OperatelyWeb.Api.Mutations.PauseProjectTest 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=edit_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/pause_project_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=full_access on the project, then expect code=200 (test/operately_web/api/mutations/pause_project_test.exs:39) PASSED Test: security it requires authentication (test/operately_web/api/mutations/pause_project_test.exs:11) PASSED Test: permissions if caller has levels company=full_access, space=no_access, project=no_access on the project, then expect code=200 (test/operately_web/api/mutations/pause_project_test.exs:39) PASSED Test: permissions if caller has levels company=no_access, space=no_access, project=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=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=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=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=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=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 OperatelyWeb.Api.Mutations.CreateGoalTest Test: company permissions company members without edit access can't create goal (test/operately_web/api/mutations/create_goal_test.exs:30) 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: 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: create_goal functionality creates goal within space (test/operately_web/api/mutations/create_goal_test.exs:151) PASSED Test: company permissions company owners can create goal (test/operately_web/api/mutations/create_goal_test.exs:42) PASSED Test: security it requires authentication (test/operately_web/api/mutations/create_goal_test.exs:10) PASSED Test: goal's reviewer and chamption permissions Goal successfully created when champion has access to the space (test/operately_web/api/mutations/create_goal_test.exs:113) PASSED Test: company permissions company members with edit access can create goal (test/operately_web/api/mutations/create_goal_test.exs:35) PASSED Test: space permissions company owners can create goal (test/operately_web/api/mutations/create_goal_test.exs:81) 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 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 reviewer has access to the space (test/operately_web/api/mutations/create_goal_test.exs:131) 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: company permissions company member can see only their company (test/operately_web/api/mutations/create_goal_test.exs:23) PASSED Test: create_goal functionality creates goal within company (test/operately_web/api/mutations/create_goal_test.exs:156) PASSED OperatelyWeb.Api.Mutations.PostDiscussionTest Test: company permissions company members without edit access can't create discussion (test/operately_web/api/mutations/post_discussion_test.exs:34) PASSED Test: subscriptions to notifications creates subscription list for message (test/operately_web/api/mutations/post_discussion_test.exs:131) PASSED Test: post_discussion functionality creates discussion within space (test/operately_web/api/mutations/post_discussion_test.exs:105) PASSED Test: subscriptions to notifications doesn't create repeated subscription (test/operately_web/api/mutations/post_discussion_test.exs:176) PASSED Test: company permissions company owners can create discussion (test/operately_web/api/mutations/post_discussion_test.exs:46) PASSED Test: security it requires authentication (test/operately_web/api/mutations/post_discussion_test.exs:14) PASSED Test: post_discussion functionality creates discussion within company (test/operately_web/api/mutations/post_discussion_test.exs:112) PASSED Test: company permissions company members with edit access can create discussion (test/operately_web/api/mutations/post_discussion_test.exs:39) PASSED Test: space permissions company owner can create discussion (test/operately_web/api/mutations/post_discussion_test.exs:85) 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 space members with edit access can create discussion (test/operately_web/api/mutations/post_discussion_test.exs:78) PASSED Test: subscriptions to notifications adds mentioned people to subscription list (test/operately_web/api/mutations/post_discussion_test.exs:155) PASSED Test: space permissions company member without view access can't see space (test/operately_web/api/mutations/post_discussion_test.exs:66) PASSED Test: company permissions company member can see only their company (test/operately_web/api/mutations/post_discussion_test.exs:27) PASSED OperatelyWeb.Api.Queries.GetGoalProgressUpdatesTest Test: permissions company members have access (test/operately_web/api/queries/get_goal_progress_updates_test.exs:35) PASSED Test: permissions space members have access (test/operately_web/api/queries/get_goal_progress_updates_test.exs:54) PASSED Test: security it requires authentication (test/operately_web/api/queries/get_goal_progress_updates_test.exs:13) PASSED Test: permissions space members have no access (test/operately_web/api/queries/get_goal_progress_updates_test.exs:45) 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 company members have no access (test/operately_web/api/queries/get_goal_progress_updates_test.exs:28) PASSED OperatelyWeb.Api.Mutations.DeleteGoalTest 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=full_access, space=no_access and goal=no_access, then expect code=200 (test/operately_web/api/mutations/delete_goal_test.exs:42) PASSED Test: permissions if caller has levels company=no_access, space=comment_access and goal=no_access, then expect code=403 (test/operately_web/api/mutations/delete_goal_test.exs:42) PASSED Test: security it requires authentication (test/operately_web/api/mutations/delete_goal_test.exs:15) PASSED Test: permissions if caller has levels company=no_access, space=no_access and goal=reviewer, then expect code=200 (test/operately_web/api/mutations/delete_goal_test.exs:42) PASSED Test: permissions if caller has levels company=edit_access, space=no_access and goal=no_access, then expect code=200 (test/operately_web/api/mutations/delete_goal_test.exs:42) PASSED 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=comment_access, space=no_access and goal=no_access, then expect code=403 (test/operately_web/api/mutations/delete_goal_test.exs:42) PASSED Test: permissions if caller has levels company=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=no_access, space=no_access and goal=no_access, then expect code=404 (test/operately_web/api/mutations/delete_goal_test.exs:42) 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.Operations.GoalCreationTest Test: GoalCreation operation creates bindings to company (test/operately/operations/goal_creation_test.exs:63) PASSED Test: GoalCreation operation creates bindings to space when it's company space (test/operately/operations/goal_creation_test.exs:87) PASSED Test: GoalCreation operation creates goal and context (test/operately/operations/goal_creation_test.exs:38) PASSED Test: GoalCreation operation creates bindings to space (test/operately/operations/goal_creation_test.exs:76) 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 activity and notification (test/operately/operations/goal_creation_test.exs:126) PASSED Test: GoalCreation operation creates bindings to reviewer and champion (test/operately/operations/goal_creation_test.exs:101) PASSED Test: GoalCreation operation creates targets (test/operately/operations/goal_creation_test.exs:47) PASSED OperatelyWeb.AccountOauthControllerTest 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 Test: OAuth redirect uses redirect_to parameter from session during callback phase (test/operately_web/controllers/account_oauth_controller_test.exs:101) PASSED 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 stores redirect_to parameter during request phase (test/operately_web/controllers/account_oauth_controller_test.exs:95) PASSED Test: OAuth redirect handles empty redirect_to parameter (test/operately_web/controllers/account_oauth_controller_test.exs:124) PASSED Test: callback/2 when a person with the given email exists in the company (test/operately_web/controllers/account_oauth_controller_test.exs:30) 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 Operately.AccessBindingsTest Test: access_bindings create_binding/1 with valid data creates a binding (test/operately/access/bindings_test.exs:43) PASSED Test: access_bindings update_binding/2 with valid data updates the binding (test/operately/access/bindings_test.exs:58) PASSED Test: access_bindings list_bindings/0 returns all bindings (test/operately/access/bindings_test.exs:22) PASSED Test: access_bindings create_binding/1 with invalid data returns error changeset (test/operately/access/bindings_test.exs:54) PASSED Test: access_bindings delete_binding/1 deletes the binding (test/operately/access/bindings_test.exs:78) PASSED Test: access_bindings change_binding/1 returns a binding changeset (test/operately/access/bindings_test.exs:87) PASSED Test: access_bindings update_binding/2 with invalid data returns error changeset (test/operately/access/bindings_test.exs:69) PASSED Test: access_bindings get_binding!/1 returns the binding with given id (test/operately/access/bindings_test.exs:34) 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 Operately.Operations.ProjectCreationTest Test: ProjectCreation operation creates bindings to space (test/operately/operations/project_creation_test.exs:73) PASSED Test: ProjectCreation operation doesn't add creator as contributor (test/operately/operations/project_creation_test.exs:97) PASSED Test: ProjectCreation operation creates project (test/operately/operations/project_creation_test.exs:45) PASSED Test: ProjectCreation operation creates bindings to contributors (test/operately/operations/project_creation_test.exs:84) PASSED Test: ProjectCreation operation creates activity and notification (test/operately/operations/project_creation_test.exs:154) PASSED Test: ProjectCreation operation doesn't create without champion or reviewer (test/operately/operations/project_creation_test.exs:126) PASSED Test: ProjectCreation operation adds tags to reviewer's and champion's bindings (test/operately/operations/project_creation_test.exs:140) PASSED Test: ProjectCreation operation doesn't create bindings to space (test/operately/operations/project_creation_test.exs:113) PASSED Test: ProjectCreation operation creates bindings to company (test/operately/operations/project_creation_test.exs:59) 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 OperatelyWeb.Api.Queries.GetResourceHubDocumentTest 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: get_resource_hub_document functionality include_author (test/operately_web/api/queries/get_resource_hub_document_test.exs:74) PASSED Test: permissions if caller has levels company=full_access and space=no_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_document_test.exs:38) PASSED Test: get_resource_hub_document functionality include_parent_folder (test/operately_web/api/queries/get_resource_hub_document_test.exs:100) PASSED 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: security it requires authentication (test/operately_web/api/queries/get_resource_hub_document_test.exs:10) PASSED Test: get_resource_hub_document functionality get document (test/operately_web/api/queries/get_resource_hub_document_test.exs:68) PASSED Test: permissions if caller has levels company=no_access and space=comment_access, then expect code=200 (test/operately_web/api/queries/get_resource_hub_document_test.exs:38) PASSED Test: permissions if caller has levels company=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=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=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 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=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=no_access and space=no_access, then expect code=404 (test/operately_web/api/queries/get_resource_hub_document_test.exs:38) 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 Operately.Data.Change051PopulateGoalLastCheckInsTest Test: updates goals with their latest updates (test/operately/data/change_051_populate_goal_last_check_ins_test.exs:17) PASSED Operately.CommentsTest Test: milestone_comments update_milestone_comment/2 with valid data updates the milestone_comment (test/operately/comments_test.exs:48) PASSED Test: milestone_comments delete_milestone_comment/1 deletes the milestone_comment (test/operately/comments_test.exs:63) PASSED Test: milestone_comments list_milestone_comments/0 returns all milestone_comments (test/operately/comments_test.exs:38) PASSED Test: milestone_comments update_milestone_comment/2 with invalid data returns error changeset (test/operately/comments_test.exs:54) PASSED Test: milestone_comments change_milestone_comment/1 returns a milestone_comment changeset (test/operately/comments_test.exs:68) PASSED Test: milestone_comments get_milestone_comment!/1 returns the milestone_comment with given id (test/operately/comments_test.exs:43) PASSED Operately.AccessGroupsTest Test: access_groups create_group/1 with valid data creates a group (test/operately/access/groups_test.exs:20) PASSED Test: access_groups delete_group/1 deletes the group (test/operately/access/groups_test.exs:33) PASSED Test: access_groups list_groups/0 returns all groups (test/operately/access/groups_test.exs:10) PASSED Test: access_groups update_group/2 with valid data updates the group (test/operately/access/groups_test.exs:26) PASSED Test: access_groups change_group/1 returns a group changeset (test/operately/access/groups_test.exs:39) PASSED Test: access_groups get_group!/1 returns the group with given id (test/operately/access/groups_test.exs:15) PASSED OperatelyWeb.Api.Mutations.EditProjectPermissionsTest 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 champions can edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:119) 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: edit_project_permissions functionality edits project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:153) PASSED Test: permissions company owners can edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:47) PASSED Test: security it requires authentication (test/operately_web/api/mutations/edit_project_permissions_test.exs:12) PASSED Test: permissions contributors with full access can edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:108) PASSED Test: permissions company members with full access can edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:40) PASSED Test: permissions space managers can edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:84) 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 with full access can edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:76) PASSED Test: permissions reviewers can edit project permissions (test/operately_web/api/mutations/edit_project_permissions_test.exs:134) 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 company members without view access can't see a project (test/operately_web/api/mutations/edit_project_permissions_test.exs:26) PASSED OperatelyWeb.Api.Mutations.DeleteResourceHubDocumentTest 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=no_access and space=full_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_document_test.exs:40) PASSED Test: security it requires authentication (test/operately_web/api/mutations/delete_resource_hub_document_test.exs:15) PASSED Test: permissions if caller has levels company=no_access and space=edit_access, then expect code=200 (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=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=full_access and space=no_access, then expect code=200 (test/operately_web/api/mutations/delete_resource_hub_document_test.exs:40) PASSED Test: permissions if caller has levels company=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=no_access, then expect code=404 (test/operately_web/api/mutations/delete_resource_hub_document_test.exs:40) PASSED Finished in 96646ms 2 failed, 0 excluded, 2694 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 44ms 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 384ms 0 failed, 0 excluded, 2 passed make test.npm PASS assets/js/features/goals/GoalTree/tree/__tests__/buildTree.test.tsx PASS assets/js/components/RichContent/contentOps.test.tsx PASS assets/js/utils/timeframes.test.tsx PASS assets/js/components/RichContent/Summary.test.tsx PASS assets/js/utils/time.test.tsx PASS assets/js/utils/strings.test.tsx PASS assets/js/utils/numbers.test.tsx PASS assets/js/models/goals/__tests__/index.test.tsx PASS assets/js/features/Permissions/AccessFields.test.tsx PASS assets/js/utils/validators.test.tsx PASS assets/js/models/projects/index.test.tsx PASS assets/js/utils/quarters.test.tsx PASS assets/js/models/goals/filterPossibleParentGoals.test.tsx PASS assets/js/models/goals/index.test.tsx PASS assets/js/models/people/index.test.tsx  Test Suites: 15 passed, 15 total Tests: 125 passed, 125 total Snapshots: 0 total Time: 6.321 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-2610934454/result-261651962.json * Saving results to /tmp/test-results2191147681 * Pushing artifacts: $ /usr/local/bin/artifact push job /tmp/test-results2191147681 -d test-results/junit.json * starting to generate summary * Saving results to /tmp/test-results3074366285 * Pushing artifacts: $ /usr/local/bin/artifact push job /tmp/test-results3074366285 -d test-results/summary.json * Pushing artifacts: $ /usr/local/bin/artifact push workflow /tmp/test-results2191147681 -d test-results/7b90de61-d052-4219-a22c-f1f367ccc5c2/1f2b7e0b-f0d8-4e33-ad55-586e1a24463c.json * Pushing artifacts: $ /usr/local/bin/artifact push job app/testreports/junit.xml -d test-results/junit.xml artifact push workflow screenshots [May 30 13:13:02.692] Successfully pushed artifact for current workflow. [May 30 13:13:02.692] * Local source: screenshots. [May 30 13:13:02.692] * Remote destination: artifacts/workflows/327c3112-8dcc-44e9-a63c-bb8de3332f38/screenshots.