Skip to content

44 make process project show up for cell level #228

44 make process project show up for cell level

44 make process project show up for cell level #228

This check has been archived and is scheduled for deletion. Learn more about checks retention
GitHub Actions / jest-github-action failed Nov 7, 2023 in 0s

Jest tests failed

Failed tests: 8/439. Failed suites: 8/100.

Details

  ● test for pipeline services › Create QC pipeline works

    TypeError: Cannot read property 'select' of undefined

      17 |   async getMetadataByExperimentIds(experimentIds) {
      18 |     const result = await this.sql
    > 19 |       .select([...fields, `${tableNames.CELL_LEVEL_TO_EXPERIMENT_MAP}.experiment_id`])
         |        ^
      20 |       .from(tableNames.CELL_LEVEL_TO_EXPERIMENT_MAP)
      21 |       .leftJoin(
      22 |         tableNames.CELL_LEVEL,

      at CellLevelMeta.getMetadataByExperimentIds (src/api.v2/model/CellLevelMeta.js:19:8)
      at createQCPipeline (src/api.v2/helpers/pipeline/pipelineConstruct/index.js:122:57)
      at Object.<anonymous> (tests/api.v2/helpers/pipeline/pipelineConstruct.test.js:123:5)

  ● test for pipeline services › Parses QC processingConfig correctly

    TypeError: Cannot read property 'select' of undefined

      17 |   async getMetadataByExperimentIds(experimentIds) {
      18 |     const result = await this.sql
    > 19 |       .select([...fields, `${tableNames.CELL_LEVEL_TO_EXPERIMENT_MAP}.experiment_id`])
         |        ^
      20 |       .from(tableNames.CELL_LEVEL_TO_EXPERIMENT_MAP)
      21 |       .leftJoin(
      22 |         tableNames.CELL_LEVEL,

      at CellLevelMeta.getMetadataByExperimentIds (src/api.v2/model/CellLevelMeta.js:19:8)
      at createQCPipeline (src/api.v2/helpers/pipeline/pipelineConstruct/index.js:122:57)
      at Object.<anonymous> (tests/api.v2/helpers/pipeline/pipelineConstruct.test.js:186:5)

  ● test for pipeline services › Create Subset pipeline works

    expect(received).toMatchSnapshot(hint)

    Snapshot name: `test for pipeline services Create Subset pipeline works: createStateMachineSpy calls 1`

    - Snapshot  - 1
    + Received  + 1

    @@ -1,9 +1,9 @@
      Array [
        Array [
          Object {
    -       "definition": "{\"Comment\":\"Subset Pipeline for clusterEnv 'test'\",\"StartAt\":\"RequestPod\",\"States\":{\"RequestPod\":{\"ResultPath\":null,\"Next\":\"WaitForPod\",\"Comment\":\"Send a message through SNS so that the API assigns a pod to the pipeline\",\"Type\":\"Task\",\"Resource\":\"arn:aws:states:::sns:publish\",\"Parameters\":{\"TopicArn\":\"arn:aws:sns:eu-west-1:000000000000:work-results-test-default-v2\",\"Message\":\"{\\\"taskName\\\":\\\"assignPodToPipeline\\\",\\\"experimentId\\\":\\\"toExperimentId\\\",\\\"apiUrl\\\":\\\"test-public-api-url\\\",\\\"input\\\":{\\\"experimentId\\\":\\\"toExperimentId\\\",\\\"sandboxId\\\":\\\"default\\\",\\\"activityId\\\":\\\"pipeline-test-mock-uuid\\\",\\\"processName\\\":\\\"subset\\\"}}\",\"MessageAttributes\":{\"type\":{\"DataType\":\"String\",\"StringValue\":\"PipelineResponse\"}}}},\"WaitForPod\":{\"ResultPath\":null,\"Next\":\"SubsetSeurat\",\"Type\":\"Map\",\"ItemsPath\":\"$.retries\",\"MaxConcurrency\":1,\"Retry\":[{\"ErrorEquals\":[\"NoPodAssigned\"],\"IntervalSeconds\":1,\"MaxAttempts\":13,\"BackoffRate\":1.5}],\"Iterator\":{\"StartAt\":\"GetAssignedPod\",\"States\":{\"GetAssignedPod\":{\"Next\":\"IsPodAssigned\",\"Type\":\"Task\",\"Comment\":\"Retrieves first unassigned and running pipeline pod.\",\"Resource\":\"arn:aws:states:::eks:call\",\"Parameters\":{\"ClusterName\":\"biomage-test\",\"CertificateAuthority\":\"AAAAAAAAAAA\",\"Endpoint\":\"https://test-endpoint.me/fgh\",\"Method\":\"GET\",\"Path\":\"/api/v1/namespaces/pipeline-test-namespace/pods\",\"QueryParameters\":{\"labelSelector\":[\"type=pipeline,activityId=pipeline-test-mock-uuid\"]}}},\"IsPodAssigned\":{\"Type\":\"Choice\",\"Comment\":\"Redirects to an error state if the pipeline pod is not assigned yet.\",\"Choices\":[{\"Variable\":\"$.ResponseBody.items[0]\",\"IsPresent\":false,\"Next\":\"NoPodAssigned\"}],\"Default\":\"ReadyToRun\"},\"NoPodAssigned\":{\"Type\":\"Fail\",\"Cause\":\"No available and running pipeline pods.\",\"Error\":\"NoPodAssigned\"},\"ReadyToRun\":{\"Type\":\"Pass\",\"End\":true}}}},\"SubsetSeurat\":{\"Next\":\"PrepareExperiment\",\"Type\":\"Task\",\"Resource\":\"arn:aws:states:eu-west-1:000000000000:activity:pipeline-test-mock-uuid\",\"ResultPath\":null,\"TimeoutSeconds\":10800,\"HeartbeatSeconds\":90,\"Parameters\":{\"experimentId\":\"toExperimentId\",\"taskName\":\"subsetSeurat\",\"processName\":\"subset\",\"server\":\"remoter-server-toExperimentId.pipeline-test-namespace.svc.cluster.local\",\"ignoreSslCert\":false,\"parentExperimentId\":\"fromExperimentId\",\"subsetExperimentId\":\"toExperimentId\",\"cellSetKeys\":[\"louvain-1\",\"louvain-2\"],\"parentProcessingConfig\":{\"classifier\":{\"oneSample\":{\"auto\":true,\"enabled\":false,\"prefiltered\":true,\"filterSettings\":{\"FDR\":0.01},\"defaultFilterSettings\":{\"FDR\":0.01}},\"otherSample\":{\"auto\":true,\"enabled\":false,\"prefiltered\":true,\"filterSettings\":{\"FDR\":0.01},\"defaultFilterSettings\":{\"FDR\":0.01}}},\"doubletScores\":{\"oneSample\":{\"defaultFilterSettings\":{\"oneSetting\":1},\"filterSettings\":{\"oneSetting\":7}},\"otherSample\":{\"filterSettings\":{\"oneSetting\":15}}},\"dataIntegration\":{\"dataIntegration\":{\"method\":\"harmony\",\"methodSettings\":{\"fastmnn\":{\"numGenes\":2000,\"normalisation\":\"logNormalize\"},\"harmony\":{\"numGenes\":2000,\"normalisation\":\"logNormalize\"},\"seuratv4\":{\"numGenes\":2000,\"normalisation\":\"logNormalize\"},\"unisample\":{\"numGenes\":2000,\"normalisation\":\"logNormalize\"}}},\"dimensionalityReduction\":{\"method\":\"rpca\",\"numPCs\":30,\"excludeGeneCategories\":[]}},\"numGenesVsNumUmis\":{\"oneSample\":{\"auto\":true,\"enabled\":true,\"filterSettings\":{\"regressionType\":\"linear\",\"regressionTypeSettings\":{\"linear\":{\"p.level\":0.001},\"spline\":{\"p.level\":0.001}}},\"defaultFilterSettings\":{\"regressionType\":\"linear\",\"regressionTypeSettings\":{\"linear\":{\"p.level\":0.001},\"spline\":{\"p.level\":0.001}}}},\"otherSample\":{\"auto\":true,\"enabled\":true,\"filterSettings\":{\"regressionType\":\"linear\",\"regressionTypeSettings\":{\"linear\":{\"p.level\":0.001},\"spline\":{\"p.level\":0.001}}},\"defaultFilterSettings\":{\"regressionType\":\"linear\",\"regressionTypeSettings\":{\"linear\":{\"p.level\":0.001},\"spline\":{\"p.level\":0.001}}}}},\"configureEmbedding\":{\"embeddingSettings\":{\"method\":\"umap\",\"methodSettings\":{\"tsne\":{\"perplexity\":30,\"learningRate\":200},\"umap\":{\"distanceMetric\":\"cosine\",\"minimumDistance\":0.3}}},\"clusteringSettings\":{\"method\":\"louvain\",\"methodSettings\":{\"louvain\":{\"resolution\":0.8}}}},\"cellSizeDistribution\":{\"oneSample\":{\"auto\":true,\"enabled\":false,\"filterSettings\":{\"binStep\":200,\"minCellSize\":1044},\"defaultFilterSettings\":{\"binStep\":200,\"minCellSize\":1044}},\"otherSample\":{\"auto\":true,\"enabled\":false,\"filterSettings\":{\"binStep\":200,\"minCellSize\":1044},\"defaultFilterSettings\":{\"binStep\":200,\"minCellSize\":1044}}},\"mitochondrialContent\":{\"oneSample\":{\"auto\":true,\"enabled\":true,\"filterSettings\":{\"method\":\"absoluteThreshold\",\"methodSettings\":{\"absoluteThreshold\":{\"binStep\":0.3,\"maxFraction\":0.07181329}}},\"defaultFilterSettings\":{\"method\":\"absoluteThreshold\",\"methodSettings\":{\"absoluteThreshold\":{\"binStep\":0.3,\"maxFraction\":0.07181329}}}},\"otherSample\":{\"auto\":true,\"enabled\":true,\"filterSettings\":{\"method\":\"absoluteThreshold\",\"methodSettings\":{\"absoluteThreshold\":{\"binStep\":0.3,\"maxFraction\":0.07181329}}},\"defaultFilterSettings\":{\"method\":\"absoluteThreshold\",\"methodSettings\":{\"absoluteThreshold\":{\"binStep\":0.3,\"maxFraction\":0.07181329}}}}}}},\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.errorInfo\",\"Next\":\"HandleError\"}]},\"PrepareExperiment\":{\"Next\":\"UploadToAWS\",\"Type\":\"Task\",\"Resource\":\"arn:aws:states:eu-west-1:000000000000:activity:pipeline-test-mock-uuid\",\"ResultPath\":null,\"TimeoutSeconds\":10800,\"HeartbeatSeconds\":90,\"Parameters\":{\"experimentId\":\"toExperimentId\",\"taskName\":\"prepareExperiment\",\"processName\":\"subset\",\"server\":\"remoter-server-toExperimentId.pipeline-test-namespace.svc.cluster.local\",\"ignoreSslCert\":false,\"experimentName\":\"toExperimentName\",\"authJWT\":\"mockAuthJWT\"},\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.errorInfo\",\"Next\":\"HandleError\"}]},\"UploadToAWS\":{\"Next\":\"EndOfPipeline\",\"Type\":\"Task\",\"Resource\":\"arn:aws:states:eu-west-1:000000000000:activity:pipeline-test-mock-uuid\",\"ResultPath\":null,\"TimeoutSeconds\":10800,\"HeartbeatSeconds\":90,\"Parameters\":{\"experimentId\":\"toExperimentId\",\"taskName\":\"uploadToAWS\",\"processName\":\"subset\",\"server\":\"remoter-server-toExperimentId.pipeline-test-namespace.svc.cluster.local\",\"ignoreSslCert\":false,\"experimentName\":\"toExperimentName\",\"authJWT\":\"mockAuthJWT\"},\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.errorInfo\",\"Next\":\"HandleError\"}]},\"HandleError\":{\"Next\":\"MarkAsFailed\",\"Type\":\"Task\",\"Resource\":\"arn:aws:states:::sns:publish\",\"Parameters\":{\"TopicArn\":\"arn:aws:sns:eu-west-1:000000000000:work-results-test-default-v2\",\"Message.$\":\"States.Format('\\\\{\\\"taskName\\\":\\\"pipelineError\\\",\\\"experimentId\\\":\\\"toExperimentId\\\",\\\"apiUrl\\\":\\\"test-public-api-url\\\",\\\"input\\\":\\\\{\\\"experimentId\\\":\\\"toExperimentId\\\",\\\"error\\\":\\\"{}\\\",\\\"taskName\\\":\\\"pipelineError\\\",\\\"sandboxId\\\":\\\"default\\\",\\\"activityId\\\":\\\"pipeline-test-mock-uuid\\\",\\\"processName\\\":\\\"subset\\\"\\\\}\\\\}', $.errorInfo.Error)\",\"MessageAttributes\":{\"type\":{\"DataType\":\"String\",\"StringValue\":\"PipelineResponse\"}}}},\"MarkAsFailed\":{\"Type\":\"Fail\"},\"EndOfPipeline\":{\"Type\":\"Pass\",\"End\":true}}}",
    +       "definition": "{\"Comment\":\"Subset Pipeline for clusterEnv 'test'\",\"StartAt\":\"RequestPod\",\"States\":{\"RequestPod\":{\"ResultPath\":null,\"Next\":\"WaitForPod\",\"Comment\":\"Send a message through SNS so that the API assigns a pod to the pipeline\",\"Type\":\"Task\",\"Resource\":\"arn:aws:states:::sns:publish\",\"Parameters\":{\"TopicArn\":\"arn:aws:sns:eu-west-1:000000000000:work-results-test-default-v2\",\"Message\":\"{\\\"taskName\\\":\\\"assignPodToPipeline\\\",\\\"experimentId\\\":\\\"toExperimentId\\\",\\\"apiUrl\\\":\\\"test-public-api-url\\\",\\\"input\\\":{\\\"experimentId\\\":\\\"toExperimentId\\\",\\\"sandboxId\\\":\\\"default\\\",\\\"activityId\\\":\\\"pipeline-test-mock-uuid\\\",\\\"processName\\\":\\\"subset\\\"}}\",\"MessageAttributes\":{\"type\":{\"DataType\":\"String\",\"StringValue\":\"PipelineResponse\"}}}},\"WaitForPod\":{\"ResultPath\":null,\"Next\":\"SubsetSeurat\",\"Type\":\"Map\",\"ItemsPath\":\"$.retries\",\"MaxConcurrency\":1,\"Retry\":[{\"ErrorEquals\":[\"NoPodAssigned\"],\"IntervalSeconds\":1,\"MaxAttempts\":13,\"BackoffRate\":1.5}],\"Iterator\":{\"StartAt\":\"GetAssignedPod\",\"States\":{\"GetAssignedPod\":{\"Next\":\"IsPodAssigned\",\"Type\":\"Task\",\"Comment\":\"Retrieves first unassigned and running pipeline pod.\",\"Resource\":\"arn:aws:states:::eks:call\",\"Parameters\":{\"ClusterName\":\"biomage-test\",\"CertificateAuthority\":\"AAAAAAAAAAA\",\"Endpoint\":\"https://test-endpoint.me/fgh\",\"Method\":\"GET\",\"Path\":\"/api/v1/namespaces/pipeline-test-namespace/pods\",\"QueryParameters\":{\"labelSelector\":[\"type=pipeline,activityId=pipeline-test-mock-uuid\"]}}},\"IsPodAssigned\":{\"Type\":\"Choice\",\"Comment\":\"Redirects to an error state if the pipeline pod is not assigned yet.\",\"Choices\":[{\"Variable\":\"$.ResponseBody.items[0]\",\"IsPresent\":false,\"Next\":\"NoPodAssigned\"}],\"Default\":\"ReadyToRun\"},\"NoPodAssigned\":{\"Type\":\"Fail\",\"Cause\":\"No available and running pipeline pods.\",\"Error\":\"NoPodAssigned\"},\"ReadyToRun\":{\"Type\":\"Pass\",\"End\":true}}}},\"SubsetSeurat\":{\"Next\":\"PrepareExperiment\",\"Type\":\"Task\",\"Resource\":\"arn:aws:states:eu-west-1:000000000000:activity:pipeline-test-mock-uuid\",\"ResultPath\":null,\"TimeoutSeconds\":10800,\"HeartbeatSeconds\":90,\"Parameters\":{\"experimentId\":\"toExperimentId\",\"taskName\":\"subsetSeurat\",\"processName\":\"subset\",\"server\":\"remoter-server-toExperimentId.pipeline-test-namespace.svc.cluster.local\",\"ignoreSslCert\":false,\"parentExperimentId\":\"fromExperimentId\",\"subsetExperimentId\":\"toExperimentId\",\"cellSetKeys\":[\"louvain-1\",\"louvain-2\"],\"parentProcessingConfig\":{\"classifier\":{\"oneSample\":{\"auto\":true,\"enabled\":false,\"prefiltered\":true,\"filterSettings\":{\"FDR\":0.01},\"defaultFilterSettings\":{\"FDR\":0.01}},\"otherSample\":{\"auto\":true,\"enabled\":false,\"prefiltered\":true,\"filterSettings\":{\"FDR\":0.01},\"defaultFilterSettings\":{\"FDR\":0.01}}},\"doubletScores\":{\"oneSample\":{\"enabled\":true,\"filterSettings\":{\"oneSetting\":1},\"defaultFilterSettings\":{\"oneSetting\":1},\"recomputeDoubletScore\":true},\"otherSample\":{\"enabled\":true,\"filterSettings\":{\"oneSetting\":1},\"defaultFilterSettings\":{\"oneSetting\":1},\"recomputeDoubletScore\":true}},\"dataIntegration\":{\"dataIntegration\":{\"method\":\"harmony\",\"methodSettings\":{\"fastmnn\":{\"numGenes\":2000,\"normalisation\":\"logNormalize\"},\"harmony\":{\"numGenes\":2000,\"normalisation\":\"logNormalize\"},\"seuratv4\":{\"numGenes\":2000,\"normalisation\":\"logNormalize\"},\"unisample\":{\"numGenes\":2000,\"normalisation\":\"logNormalize\"}}},\"dimensionalityReduction\":{\"method\":\"rpca\",\"numPCs\":30,\"excludeGeneCategories\":[]}},\"numGenesVsNumUmis\":{\"oneSample\":{\"auto\":true,\"enabled\":true,\"filterSettings\":{\"regressionType\":\"linear\",\"regressionTypeSettings\":{\"linear\":{\"p.level\":0.001},\"spline\":{\"p.level\":0.001}}},\"defaultFilterSettings\":{\"regressionType\":\"linear\",\"regressionTypeSettings\":{\"linear\":{\"p.level\":0.001},\"spline\":{\"p.level\":0.001}}}},\"otherSample\":{\"auto\":true,\"enabled\":true,\"filterSettings\":{\"regressionType\":\"linear\",\"regressionTypeSettings\":{\"linear\":{\"p.level\":0.001},\"spline\":{\"p.level\":0.001}}},\"defaultFilterSettings\":{\"regressionType\":\"linear\",\"regressionTypeSettings\":{\"linear\":{\"p.level\":0.001},\"spline\":{\"p.level\":0.001}}}}},\"configureEmbedding\":{\"embeddingSettings\":{\"method\":\"umap\",\"methodSettings\":{\"tsne\":{\"perplexity\":30,\"learningRate\":200},\"umap\":{\"distanceMetric\":\"cosine\",\"minimumDistance\":0.3}}},\"clusteringSettings\":{\"method\":\"louvain\",\"methodSettings\":{\"louvain\":{\"resolution\":0.8}}}},\"cellSizeDistribution\":{\"oneSample\":{\"auto\":true,\"enabled\":false,\"filterSettings\":{\"binStep\":200,\"minCellSize\":1044},\"defaultFilterSettings\":{\"binStep\":200,\"minCellSize\":1044}},\"otherSample\":{\"auto\":true,\"enabled\":false,\"filterSettings\":{\"binStep\":200,\"minCellSize\":1044},\"defaultFilterSettings\":{\"binStep\":200,\"minCellSize\":1044}}},\"mitochondrialContent\":{\"oneSample\":{\"auto\":true,\"enabled\":true,\"filterSettings\":{\"method\":\"absoluteThreshold\",\"methodSettings\":{\"absoluteThreshold\":{\"binStep\":0.3,\"maxFraction\":0.07181329}}},\"defaultFilterSettings\":{\"method\":\"absoluteThreshold\",\"methodSettings\":{\"absoluteThreshold\":{\"binStep\":0.3,\"maxFraction\":0.07181329}}}},\"otherSample\":{\"auto\":true,\"enabled\":true,\"filterSettings\":{\"method\":\"absoluteThreshold\",\"methodSettings\":{\"absoluteThreshold\":{\"binStep\":0.3,\"maxFraction\":0.07181329}}},\"defaultFilterSettings\":{\"method\":\"absoluteThreshold\",\"methodSettings\":{\"absoluteThreshold\":{\"binStep\":0.3,\"maxFraction\":0.07181329}}}}}}},\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.errorInfo\",\"Next\":\"HandleError\"}]},\"PrepareExperiment\":{\"Next\":\"UploadToAWS\",\"Type\":\"Task\",\"Resource\":\"arn:aws:states:eu-west-1:000000000000:activity:pipeline-test-mock-uuid\",\"ResultPath\":null,\"TimeoutSeconds\":10800,\"HeartbeatSeconds\":90,\"Parameters\":{\"experimentId\":\"toExperimentId\",\"taskName\":\"prepareExperiment\",\"processName\":\"subset\",\"server\":\"remoter-server-toExperimentId.pipeline-test-namespace.svc.cluster.local\",\"ignoreSslCert\":false,\"experimentName\":\"toExperimentName\",\"authJWT\":\"mockAuthJWT\"},\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.errorInfo\",\"Next\":\"HandleError\"}]},\"UploadToAWS\":{\"Next\":\"EndOfPipeline\",\"Type\":\"Task\",\"Resource\":\"arn:aws:states:eu-west-1:000000000000:activity:pipeline-test-mock-uuid\",\"ResultPath\":null,\"TimeoutSeconds\":10800,\"HeartbeatSeconds\":90,\"Parameters\":{\"experimentId\":\"toExperimentId\",\"taskName\":\"uploadToAWS\",\"processName\":\"subset\",\"server\":\"remoter-server-toExperimentId.pipeline-test-namespace.svc.cluster.local\",\"ignoreSslCert\":false,\"experimentName\":\"toExperimentName\",\"authJWT\":\"mockAuthJWT\"},\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.errorInfo\",\"Next\":\"HandleError\"}]},\"HandleError\":{\"Next\":\"MarkAsFailed\",\"Type\":\"Task\",\"Resource\":\"arn:aws:states:::sns:publish\",\"Parameters\":{\"TopicArn\":\"arn:aws:sns:eu-west-1:000000000000:work-results-test-default-v2\",\"Message.$\":\"States.Format('\\\\{\\\"taskName\\\":\\\"pipelineError\\\",\\\"experimentId\\\":\\\"toExperimentId\\\",\\\"apiUrl\\\":\\\"test-public-api-url\\\",\\\"input\\\":\\\\{\\\"experimentId\\\":\\\"toExperimentId\\\",\\\"error\\\":\\\"{}\\\",\\\"taskName\\\":\\\"pipelineError\\\",\\\"sandboxId\\\":\\\"default\\\",\\\"activityId\\\":\\\"pipeline-test-mock-uuid\\\",\\\"processName\\\":\\\"subset\\\"\\\\}\\\\}', $.errorInfo.Error)\",\"MessageAttributes\":{\"type\":{\"DataType\":\"String\",\"StringValue\":\"PipelineResponse\"}}}},\"MarkAsFailed\":{\"Type\":\"Fail\"},\"EndOfPipeline\":{\"Type\":\"Pass\",\"End\":true}}}",
            "loggingConfiguration": Object {
              "level": "OFF",
            },
            "name": "biomage-subset-test-f3880dbb8507da8b0f158c0216a7d7189670e6ca",
            "roleArn": "arn:aws:iam::000000000000:role/state-machine-role-test",

      284 |     expect(describeClusterSpy).toMatchSnapshot();
      285 |
    > 286 |     expect(createStateMachineSpy.mock.calls).toMatchSnapshot('createStateMachineSpy calls');
          |                                              ^
      287 |     expect(createStateMachineSpy.mock.results).toMatchSnapshot('createStateMachineSpy results');
      288 |
      289 |     expect(createActivitySpy).toHaveBeenCalled();

      at Object.<anonymous> (tests/api.v2/helpers/pipeline/pipelineConstruct.test.js:286:46)

  ● gem2sResponse › Starts a QC run when gem2s finishes

    expect(received).toMatchSnapshot()

    Snapshot name: `gem2sResponse Starts a QC run when gem2s finishes 2`

    - Snapshot  -   1
    + Received  + 146

      Array [
        Array [
          "mockExperimentId",
    -     Array [],
    +     Object {
    +       "cellSizeDistribution": Object {
    +         "fc68aefc-c3ca-467f-8589-f1dbaaac1c1e": Object {
    +           "auto": true,
    +           "defaultFilterSettings": Object {
    +             "binStep": 200,
    +             "minCellSize": 1044,
    +           },
    +           "enabled": false,
    +           "filterSettings": Object {
    +             "binStep": 200,
    +             "minCellSize": 1044,
    +           },
    +         },
    +       },
    +       "classifier": Object {
    +         "fc68aefc-c3ca-467f-8589-f1dbaaac1c1e": Object {
    +           "auto": true,
    +           "defaultFilterSettings": Object {
    +             "FDR": 0.02,
    +           },
    +           "enabled": false,
    +           "filterSettings": Object {
    +             "FDR": 0.01,
    +           },
    +           "prefiltered": true,
    +         },
    +       },
    +       "configureEmbedding": Object {
    +         "clusteringSettings": Object {
    +           "method": "louvain",
    +           "methodSettings": Object {
    +             "louvain": Object {
    +               "resolution": 0.8,
    +             },
    +           },
    +         },
    +         "embeddingSettings": Object {
    +           "method": "umap",
    +           "methodSettings": Object {
    +             "tsne": Object {
    +               "learningRate": 200,
    +               "perplexity": 30,
    +             },
    +             "umap": Object {
    +               "distanceMetric": "cosine",
    +               "minimumDistance": 0.3,
    +             },
    +           },
    +         },
    +       },
    +       "dataIntegration": Object {
    +         "dataIntegration": Object {
    +           "method": "harmony",
    +           "methodSettings": Object {
    +             "fastmnn": Object {
    +               "normalisation": "logNormalize",
    +               "numGenes": 2000,
    +             },
    +             "harmony": Object {
    +               "normalisation": "logNormalize",
    +               "numGenes": 2000,
    +             },
    +             "seuratv4": Object {
    +               "normalisation": "logNormalize",
    +               "numGenes": 2000,
    +             },
    +             "unisample": Object {
    +               "normalisation": "logNormalize",
    +               "numGenes": 2000,
    +             },
    +           },
    +         },
    +         "dimensionalityReduction": Object {
    +           "excludeGeneCategories": Array [],
    +           "method": "rpca",
    +           "numPCs": 30,
    +         },
    +       },
    +       "doubletScores": Object {
    +         "fc68aefc-c3ca-467f-8589-f1dbaaac1c1e": Object {
    +           "auto": true,
    +           "defaultFilterSettings": Object {
    +             "binStep": 0.05,
    +             "probabilityThreshold": 0.6569474,
    +           },
    +           "enabled": true,
    +           "filterSettings": Object {
    +             "binStep": 0.02,
    +             "probabilityThreshold": 0.6569474,
    +           },
    +         },
    +       },
    +       "mitochondrialContent": Object {
    +         "fc68aefc-c3ca-467f-8589-f1dbaaac1c1e": Object {
    +           "auto": true,
    +           "defaultFilterSettings": Object {
    +             "method": "absoluteThreshold",
    +             "methodSettings": Object {
    +               "absoluteThreshold": Object {
    +                 "binStep": 0.6,
    +                 "maxFraction": 0.07181355,
    +               },
    +             },
    +           },
    +           "enabled": true,
    +           "filterSettings": Object {
    +             "method": "absoluteThreshold",
    +             "methodSettings": Object {
    +               "absoluteThreshold": Object {
    +                 "binStep": 0.3,
    +                 "maxFraction": 0.07181329,
    +               },
    +             },
    +           },
    +         },
    +       },
    +       "numGenesVsNumUmis": Object {
    +         "fc68aefc-c3ca-467f-8589-f1dbaaac1c1e": Object {
    +           "auto": true,
    +           "defaultFilterSettings": Object {
    +             "regressionType": "linear",
    +             "regressionTypeSettings": Object {
    +               "linear": Object {
    +                 "p.level": 0.001,
    +               },
    +               "spline": Object {
    +                 "p.level": 0.001,
    +               },
    +             },
    +           },
    +           "enabled": true,
    +           "filterSettings": Object {
    +             "regressionType": "linear",
    +             "regressionTypeSettings": Object {
    +               "linear": Object {
    +                 "p.level": 0.001,
    +               },
    +               "spline": Object {
    +                 "p.level": 0.001,
    +               },
    +             },
    +           },
    +         },
    +       },
    +     },
          "mockAuthJWT",
          "mockJobId",
        ],
      ]

      133 |
      134 |     expect(experimentInstance.updateById.mock.calls).toMatchSnapshot();
    > 135 |     expect(pipelineConstruct.createQCPipeline.mock.calls).toMatchSnapshot();
          |                                                           ^
      136 |   });
      137 |
      138 |   it('Starts a QC run when gem2s finishes and can duplicate defaultProcessingConfig ignoring entries that arent samples', async () => {

      at Object.<anonymous> (tests/api.v2/helpers/pipeline/gem2s.test.js:135:59)

  ● gem2sResponse › Starts a QC run when gem2s finishes and can duplicate defaultProcessingConfig ignoring entries that arent samples

    expect(received).toMatchSnapshot()

    Snapshot name: `gem2sResponse Starts a QC run when gem2s finishes and can duplicate defaultProcessingConfig ignoring entries that arent samples 2`

    - Snapshot  -   1
    + Received  + 147

      Array [
        Array [
          "mockExperimentId",
    -     Array [],
    +     Object {
    +       "cellSizeDistribution": Object {
    +         "fc68aefc-c3ca-467f-8589-f1dbaaac1c1e": Object {
    +           "auto": true,
    +           "defaultFilterSettings": Object {
    +             "binStep": 200,
    +             "minCellSize": 1044,
    +           },
    +           "enabled": false,
    +           "filterSettings": Object {
    +             "binStep": 200,
    +             "minCellSize": 1044,
    +           },
    +         },
    +       },
    +       "classifier": Object {
    +         "fc68aefc-c3ca-467f-8589-f1dbaaac1c1e": Object {
    +           "auto": true,
    +           "defaultFilterSettings": Object {
    +             "FDR": 0.02,
    +           },
    +           "enabled": false,
    +           "filterSettings": Object {
    +             "FDR": 0.01,
    +           },
    +           "prefiltered": true,
    +         },
    +       },
    +       "configureEmbedding": Object {
    +         "clusteringSettings": Object {
    +           "method": "louvain",
    +           "methodSettings": Object {
    +             "louvain": Object {
    +               "resolution": 0.8,
    +             },
    +           },
    +         },
    +         "embeddingSettings": Object {
    +           "method": "umap",
    +           "methodSettings": Object {
    +             "tsne": Object {
    +               "learningRate": 200,
    +               "perplexity": 30,
    +             },
    +             "umap": Object {
    +               "distanceMetric": "cosine",
    +               "minimumDistance": 0.3,
    +             },
    +           },
    +         },
    +       },
    +       "dataIntegration": Object {
    +         "dataIntegration": Object {
    +           "method": "harmony",
    +           "methodSettings": Object {
    +             "fastmnn": Object {
    +               "normalisation": "logNormalize",
    +               "numGenes": 2000,
    +             },
    +             "harmony": Object {
    +               "normalisation": "logNormalize",
    +               "numGenes": 2000,
    +             },
    +             "seuratv4": Object {
    +               "normalisation": "logNormalize",
    +               "numGenes": 2000,
    +             },
    +             "unisample": Object {
    +               "normalisation": "logNormalize",
    +               "numGenes": 2000,
    +             },
    +           },
    +         },
    +         "dimensionalityReduction": Object {
    +           "excludeGeneCategories": Array [],
    +           "method": "rpca",
    +           "numPCs": 30,
    +         },
    +       },
    +       "doubletScores": Object {
    +         "fc68aefc-c3ca-467f-8589-f1dbaaac1c1e": Object {
    +           "auto": true,
    +           "defaultFilterSettings": Object {
    +             "binStep": 0.05,
    +             "probabilityThreshold": 0.6569474,
    +           },
    +           "enabled": true,
    +           "filterSettings": Object {
    +             "binStep": 0.02,
    +             "probabilityThreshold": 0.6569474,
    +           },
    +         },
    +         "someStepFlag": true,
    +       },
    +       "mitochondrialContent": Object {
    +         "fc68aefc-c3ca-467f-8589-f1dbaaac1c1e": Object {
    +           "auto": true,
    +           "defaultFilterSettings": Object {
    +             "method": "absoluteThreshold",
    +             "methodSettings": Object {
    +               "absoluteThreshold": Object {
    +                 "binStep": 0.6,
    +                 "maxFraction": 0.07181355,
    +               },
    +             },
    +           },
    +           "enabled": true,
    +           "filterSettings": Object {
    +             "method": "absoluteThreshold",
    +             "methodSettings": Object {
    +               "absoluteThreshold": Object {
    +                 "binStep": 0.3,
    +                 "maxFraction": 0.07181329,
    +               },
    +             },
    +           },
    +         },
    +       },
    +       "numGenesVsNumUmis": Object {
    +         "fc68aefc-c3ca-467f-8589-f1dbaaac1c1e": Object {
    +           "auto": true,
    +           "defaultFilterSettings": Object {
    +             "regressionType": "linear",
    +             "regressionTypeSettings": Object {
    +               "linear": Object {
    +                 "p.level": 0.001,
    +               },
    +               "spline": Object {
    +                 "p.level": 0.001,
    +               },
    +             },
    +           },
    +           "enabled": true,
    +           "filterSettings": Object {
    +             "regressionType": "linear",
    +             "regressionTypeSettings": Object {
    +               "linear": Object {
    +                 "p.level": 0.001,
    +               },
    +               "spline": Object {
    +                 "p.level": 0.001,
    +               },
    +             },
    +           },
    +         },
    +       },
    +     },
          "mockAuthJWT",
          "mockJobId",
        ],
      ]

      178 |
      179 |     expect(experimentInstance.updateById.mock.calls).toMatchSnapshot();
    > 180 |     expect(pipelineConstruct.createQCPipeline.mock.calls).toMatchSnapshot();
          |                                                           ^
      181 |   });
      182 |
      183 |   it('Updates the subset experiment when subsetSeurat is notified to have finished', async () => {

      at Object.<anonymous> (tests/api.v2/helpers/pipeline/gem2s.test.js:180:59)

  ● qcController › runQC works correctly with processingConfig changes

    expect(jest.fn()).toHaveBeenCalledWith(...expected)

    Expected: "experimentId", [{"body": {"auto": true, "enabled": true, "f87892f0-3403-4ba9-b871-c366e3fa855e": {"auto": false, "defaultFilterSettings": {"regressionType": "linear", "regressionTypeSettings": {"linear": {"p.level": 0.001}, "spline": {"p.level": 0.001}}}, "enabled": true, "filterSettings": {"regressionType": "linear", "regressionTypeSettings": {"linear": {"p.level": 0.00095}, "spline": {"p.level": 0.001}}}}, "filterSettings": {"regressionType": "linear", "regressionTypeSettings": {"linear": {"p.level": 0.001}, "spline": {"p.level": 0.001}}}}, "name": "numGenesVsNumUmis"}], "mockAuthorization"
    Received: "experimentId", undefined, "mockAuthorization"

    Number of calls: 1

      86 |     await qcController.runQC(mockReq, mockRes);
      87 |
    > 88 |     expect(pipelineConstruct.createQCPipeline).toHaveBeenCalledWith(
         |                                                ^
      89 |       experimentId, processingConfigUpdate, authorization,
      90 |     );
      91 |

      at Object.<anonymous> (tests/api.v2/controllers/qcController.test.js:88:48)

  ● qcController › runQC works correctly without processingConfig changes

    expect(jest.fn()).toHaveBeenCalledWith(...expected)

    Expected: "experimentId", [], "mockAuthorization"
    Received: "experimentId", undefined, "mockAuthorization"

    Number of calls: 1

      109 |     await qcController.runQC(mockReq, mockRes);
      110 |
    > 111 |     expect(pipelineConstruct.createQCPipeline).toHaveBeenCalledWith(
          |                                                ^
      112 |       experimentId, [], authorization,
      113 |     );
      114 |

      at Object.<anonymous> (tests/api.v2/controllers/qcController.test.js:111:48)

  ● helper functions for skeletons › returns from first not-completed step if the config has no changes

    TypeError: Cannot read property 'select' of undefined

      17 |   async getMetadataByExperimentIds(experimentIds) {
      18 |     const result = await this.sql
    > 19 |       .select([...fields, `${tableNames.CELL_LEVEL_TO_EXPERIMENT_MAP}.experiment_id`])
         |        ^
      20 |       .from(tableNames.CELL_LEVEL_TO_EXPERIMENT_MAP)
      21 |       .leftJoin(
      22 |         tableNames.CELL_LEVEL,

      at CellLevelMeta.getMetadataByExperimentIds (src/api.v2/model/CellLevelMeta.js:19:8)
      at getCellLevelMetadataFileChanged (src/api.v2/helpers/pipeline/pipelineConstruct/qcHelpers.js:26:6)
      at getFirstQCStep (src/api.v2/helpers/pipeline/pipelineConstruct/qcHelpers.js:46:14)
      at getQcStepsToRun (src/api.v2/helpers/pipeline/pipelineConstruct/qcHelpers.js:107:27)
      at Object.<anonymous> (tests/api.v2/helpers/pipeline/pipelineConstruct/qcHelpers.test.js:131:27)

Annotations

Check failure on line 91 in tests/api.v2/helpers/pipeline/pipelineConstruct.test.js

See this annotation in the file changed.

@github-actions github-actions / jest-github-action

test for pipeline services > Create QC pipeline works

TypeError: Cannot read property 'select' of undefined
    at CellLevelMeta.getMetadataByExperimentIds (/home/runner/work/api/api/src/api.v2/model/CellLevelMeta.js:19:8)
    at createQCPipeline (/home/runner/work/api/api/src/api.v2/helpers/pipeline/pipelineConstruct/index.js:122:57)
    at Object.<anonymous> (/home/runner/work/api/api/tests/api.v2/helpers/pipeline/pipelineConstruct.test.js:123:5)

Check failure on line 141 in tests/api.v2/helpers/pipeline/pipelineConstruct.test.js

See this annotation in the file changed.

@github-actions github-actions / jest-github-action

test for pipeline services > Parses QC processingConfig correctly

TypeError: Cannot read property 'select' of undefined
    at CellLevelMeta.getMetadataByExperimentIds (/home/runner/work/api/api/src/api.v2/model/CellLevelMeta.js:19:8)
    at createQCPipeline (/home/runner/work/api/api/src/api.v2/helpers/pipeline/pipelineConstruct/index.js:122:57)
    at Object.<anonymous> (/home/runner/work/api/api/tests/api.v2/helpers/pipeline/pipelineConstruct.test.js:186:5)

Check failure on line 241 in tests/api.v2/helpers/pipeline/pipelineConstruct.test.js

See this annotation in the file changed.

@github-actions github-actions / jest-github-action

test for pipeline services > Create Subset pipeline works

Error: expect(received).toMatchSnapshot(hint)

Snapshot name: `test for pipeline services Create Subset pipeline works: createStateMachineSpy calls 1`

- Snapshot  - 1
+ Received  + 1

@@ -1,9 +1,9 @@
  Array [
    Array [
      Object {
-       "definition": "{\"Comment\":\"Subset Pipeline for clusterEnv 'test'\",\"StartAt\":\"RequestPod\",\"States\":{\"RequestPod\":{\"ResultPath\":null,\"Next\":\"WaitForPod\",\"Comment\":\"Send a message through SNS so that the API assigns a pod to the pipeline\",\"Type\":\"Task\",\"Resource\":\"arn:aws:states:::sns:publish\",\"Parameters\":{\"TopicArn\":\"arn:aws:sns:eu-west-1:000000000000:work-results-test-default-v2\",\"Message\":\"{\\\"taskName\\\":\\\"assignPodToPipeline\\\",\\\"experimentId\\\":\\\"toExperimentId\\\",\\\"apiUrl\\\":\\\"test-public-api-url\\\",\\\"input\\\":{\\\"experimentId\\\":\\\"toExperimentId\\\",\\\"sandboxId\\\":\\\"default\\\",\\\"activityId\\\":\\\"pipeline-test-mock-uuid\\\",\\\"processName\\\":\\\"subset\\\"}}\",\"MessageAttributes\":{\"type\":{\"DataType\":\"String\",\"StringValue\":\"PipelineResponse\"}}}},\"WaitForPod\":{\"ResultPath\":null,\"Next\":\"SubsetSeurat\",\"Type\":\"Map\",\"ItemsPath\":\"$.retries\",\"MaxConcurrency\":1,\"Retry\":[{\"ErrorEquals\":[\"NoPodAssigned\"],\"IntervalSeconds\":1,\"MaxAttempts\":13,\"BackoffRate\":1.5}],\"Iterator\":{\"StartAt\":\"GetAssignedPod\",\"States\":{\"GetAssignedPod\":{\"Next\":\"IsPodAssigned\",\"Type\":\"Task\",\"Comment\":\"Retrieves first unassigned and running pipeline pod.\",\"Resource\":\"arn:aws:states:::eks:call\",\"Parameters\":{\"ClusterName\":\"biomage-test\",\"CertificateAuthority\":\"AAAAAAAAAAA\",\"Endpoint\":\"https://test-endpoint.me/fgh\",\"Method\":\"GET\",\"Path\":\"/api/v1/namespaces/pipeline-test-namespace/pods\",\"QueryParameters\":{\"labelSelector\":[\"type=pipeline,activityId=pipeline-test-mock-uuid\"]}}},\"IsPodAssigned\":{\"Type\":\"Choice\",\"Comment\":\"Redirects to an error state if the pipeline pod is not assigned yet.\",\"Choices\":[{\"Variable\":\"$.ResponseBody.items[0]\",\"IsPresent\":false,\"Next\":\"NoPodAssigned\"}],\"Default\":\"ReadyToRun\"},\"NoPodAssigned\":{\"Type\":\"Fail\",\"Cause\":\"No available and running pipeline pods.\",\"Error\":\"NoPodAssigned\"},\"ReadyToRun\":{\"Type\":\"Pass\",\"End\":true}}}},\"SubsetSeurat\":{\"Next\":\"PrepareExperiment\",\"Type\":\"Task\",\"Resource\":\"arn:aws:states:eu-west-1:000000000000:activity:pipeline-test-mock-uuid\",\"ResultPath\":null,\"TimeoutSeconds\":10800,\"HeartbeatSeconds\":90,\"Parameters\":{\"experimentId\":\"toExperimentId\",\"taskName\":\"subsetSeurat\",\"processName\":\"subset\",\"server\":\"remoter-server-toExperimentId.pipeline-test-namespace.svc.cluster.local\",\"ignoreSslCert\":false,\"parentExperimentId\":\"fromExperimentId\",\"subsetExperimentId\":\"toExperimentId\",\"cellSetKeys\":[\"louvain-1\",\"louvain-2\"],\"parentProcessingConfig\":{\"classifier\":{\"oneSample\":{\"auto\":true,\"enabled\":false,\"prefiltered\":true,\"filterSettings\":{\"FDR\":0.01},\"defaultFilterSettings\":{\"FDR\":0.01}},\"otherSample\":{\"auto\":true,\"enabled\":false,\"prefiltered\":true,\"filterSettings\":{\"FDR\":0.01},\"defaultFilterSettings\":{\"FDR\":0.01}}},\"doubletScores\":{\"oneSample\":{\"defaultFilterSettings\":{\"oneSetting\":1},\"filterSettings\":{\"oneSetting\":7}},\"otherSample\":{\"filterSettings\":{\"oneSetting\":15}}},\"dataIntegration\":{\"dataIntegration\":{\"method\":\"harmony\",\"methodSettings\":{\"fastmnn\":{\"numGenes\":2000,\"normalisation\":\"logNormalize\"},\"harmony\":{\"numGenes\":2000,\"normalisation\":\"logNormalize\"},\"seuratv4\":{\"numGenes\":2000,\"normalisation\":\"logNormalize\"},\"unisample\":{\"numGenes\":2000,\"normalisation\":\"logNormalize\"}}},\"dimensionalityReduction\":{\"method\":\"rpca\",\"numPCs\":30,\"excludeGeneCategories\":[]}},\"numGenesVsNumUmis\":{\"oneSample\":{\"auto\":true,\"enabled\":true,\"filterSettings\":{\"regressionType\":\"linear\",\"regressionTypeSettings\":{\"linear\":{\"p.level\":0.001},\"spline\":{\"p.level\":0.001}}},\"defaultFilterSettings\":{\"regressionType\":\"linear\",\"regressionTypeSettings\":{\"linear\":{\"p.level\":0.001},\"spline\":{\"p.level\":0.001}}}},\"otherSample\":{\"auto\":true,\"enabled\":true,\"filterSettings\":{\"regressionType\":\"linear\",\"regressionTypeSettings\":{\"linear\":{\"p.level\":0.001},\"spline\":{\"p.level\":0.001}}},\"defaultFilterSettings\":{\"regressionType\":\"linear\",\"regressionTypeSettings\":{\"linear\":{\"p.level\":0.001},\"spline\":{\"p.level\":0.001}}}}},\"configureEmbedding\":{\"embeddingSettings\":{\"method\":\"umap\",\"methodSettings\":{\"tsne\":{\"perplexity\":30,\"learningRate\":200},\"umap\":{\"distanceMetric\":\"cosine\",\"minimumDistance\":0.3}}},\"clusteringSettings\":{\"method\":\"louvain\",\"methodSettings\":{\"louvain\":{\"resolution\":0.8}}}},\"cellSizeDistribution\":{\"oneSample\":{\"auto\":true,\"enabled\":false,\"filterSettings\":{\"binStep\":200,\"minCellSize\":1044},\"defaultFilterSettings\":{\"binStep\":200,\"minCellSize\":1044}},\"otherSample\":{\"auto\":true,\"enabled\":false,\"filterSettings\":{\"binStep\":200,\"minCellSize\":1044},\"defaultFilterSettings\":{\"binStep\":200,\"minCellSize\":1044}}},\"mitochondrialContent\":{\"oneSample\":{\"auto\":true,\"enabled\":true,\"filterSettings\":{\"method\":\"absoluteThreshold\",\"methodSettings\":{\"absoluteThreshold\":{\"binStep\":0.3,\"maxFraction\":0.07181329}}},\"defaultFilterSettings\":{\"method\":\"absoluteThreshold\",\"methodSettings\":{\"absoluteThreshold\":{\"binStep\":0.3,\"maxFraction\":0.07181329}}}},\"otherSample\":{\"auto\":true,\"enabled\":true,\"filterSettings\":{\"method\":\"absoluteThreshold\",\"methodSettings\":{\"absoluteThreshold\":{\"binStep\":0.3,\"maxFraction\":0.07181329}}},\"defaultFilterSettings\":{\"method\":\"absoluteThreshold\",\"methodSettings\":{\"absoluteThreshold\":{\"binStep\":0.3,\"maxFraction\":0.07181329}}}}}}},\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.errorInfo\",\"Next\":\"HandleError\"}]},\"PrepareExperiment\":{\"Next\":\"UploadToAWS\",\"Type\":\"Task\",\"Resource\":\"arn:aws:states:eu-west-1:000000000000:activity:pipeline-test-mock-uuid\",\"ResultPath\":null,\"TimeoutSeconds\":10800,\"HeartbeatSeconds\":90,\"Parameters\":{\"experimentId\":\"toExperimentId\",\"taskName\":\"prepareExperiment\",\"processName\":\"subset\",\"server\":\"remoter-server-toExperimentId.pipeline-test-namespace.svc.cluster.local\",\"ignoreSslCert\":false,\"experimentName\":\"toExperimentName\",\"authJWT\":\"mockAuthJWT\"},\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.errorInfo\",\"Next\":\"HandleError\"}]},\"UploadToAWS\":{\"Next\":\"EndOfPipeline\",\"Type\":\"Task\",\"Resource\":\"arn:aws:states:eu-west-1:000000000000:activity:pipeline-test-mock-uuid\",\"ResultPath\":null,\"TimeoutSeconds\":10800,\"HeartbeatSeconds\":90,\"Parameters\":{\"experimentId\":\"toExperimentId\",\"taskName\":\"uploadToAWS\",\"processName\":\"subset\",\"server\":\"remoter-server-toExperimentId.pipeline-test-namespace.svc.cluster.local\",\"ignoreSslCert\":false,\"experimentName\":\"toExperimentName\",\"authJWT\":\"mockAuthJWT\"},\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.errorInfo\",\"Next\":\"HandleError\"}]},\"HandleError\":{\"Next\":\"MarkAsFailed\",\"Type\":\"Task\",\"Resource\":\"arn:aws:states:::sns:publish\",\"Parameters\":{\"TopicArn\":\"arn:aws:sns:eu-west-1:000000000000:work-results-test-default-v2\",\"Message.$\":\"States.Format('\\\\{\\\"taskName\\\":\\\"pipelineError\\\",\\\"experimentId\\\":\\\"toExperimentId\\\",\\\"apiUrl\\\":\\\"test-public-api-url\\\",\\\"input\\\":\\\\{\\\"experimentId\\\":\\\"toExperimentId\\\",\\\"error\\\":\\\"{}\\\",\\\"taskName\\\":\\\"pipelineError\\\",\\\"sandboxId\\\":\\\"default\\\",\\\"activityId\\\":\\\"pipeline-test-mock-uuid\\\",\\\"processName\\\":\\\"subset\\\"\\\\}\\\\}', $.errorInfo.Error)\",\"MessageAttributes\":{\"type\":{\"DataType\":\"String\",\"StringValue\":\"PipelineResponse\"}}}},\"MarkAsFailed\":{\"Type\":\"Fail\"},\"EndOfPipeline\":{\"Type\":\"Pass\",\"End\":true}}}",
+       "definition": "{\"Comment\":\"Subset Pipeline for clusterEnv 'test'\",\"StartAt\":\"RequestPod\",\"States\":{\"RequestPod\":{\"ResultPath\":null,\"Next\":\"WaitForPod\",\"Comment\":\"Send a message through SNS so that the API assigns a pod to the pipeline\",\"Type\":\"Task\",\"Resource\":\"arn:aws:states:::sns:publish\",\"Parameters\":{\"TopicArn\":\"arn:aws:sns:eu-west-1:000000000000:work-results-test-default-v2\",\"Message\":\"{\\\"taskName\\\":\\\"assignPodToPipeline\\\",\\\"experimentId\\\":\\\"toExperimentId\\\",\\\"apiUrl\\\":\\\"test-public-api-url\\\",\\\"input\\\":{\\\"experimentId\\\":\\\"toExperimentId\\\",\\\"sandboxId\\\":\\\"default\\\",\\\"activityId\\\":\\\"pipeline-test-mock-uuid\\\",\\\"processName\\\":\\\"subset\\\"}}\",\"MessageAttributes\":{\"type\":{\"DataType\":\"String\",\"StringValue\":\"PipelineResponse\"}}}},\"WaitForPod\":{\"ResultPath\":null,\"Next\":\"SubsetSeurat\",\"Type\":\"Map\",\"ItemsPath\":\"$.retries\",\"MaxConcurrency\":1,\"Retry\":[{\"ErrorEquals\":[\"NoPodAssigned\"],\"IntervalSeconds\":1,\"MaxAttempts\":13,\"BackoffRate\":1.5}],\"Iterator\":{\"StartAt\":\"GetAssignedPod\",\"States\":{\"GetAssignedPod\":{\"Next\":\"IsPodAssigned\",\"Type\":\"Task\",\"Comment\":\"Retrieves first unassigned and running pipeline pod.\",\"Resource\":\"arn:aws:states:::eks:call\",\"Parameters\":{\"ClusterName\":\"biomage-test\",\"CertificateAuthority\":\"AAAAAAAAAAA\",\"Endpoint\":\"https://test-endpoint.me/fgh\",\"Method\":\"GET\",\"Path\":\"/api/v1/namespaces/pipeline-test-namespace/pods\",\"QueryParameters\":{\"labelSelector\":[\"type=pipeline,activityId=pipeline-test-mock-uuid\"]}}},\"IsPodAssigned\":{\"Type\":\"Choice\",\"Comment\":\"Redirects to an error state if the pipeline pod is not assigned yet.\",\"Choices\":[{\"Variable\":\"$.ResponseBody.items[0]\",\"IsPresent\":false,\"Next\":\"NoPodAssigned\"}],\"Default\":\"ReadyToRun\"},\"NoPodAssigned\":{\"Type\":\"Fail\",\"Cause\":\"No available and running pipeline pods.\",\"Error\":\"NoPodAssigned\"},\"ReadyToRun\":{\"Type\":\"Pass\",\"End\":true}}}},\"SubsetSeurat\":{\"Next\":\"PrepareExperiment\",\"Type\":\"Task\",\"Resource\":\"arn:aws:states:eu-west-1:000000000000:activity:pipeline-test-mock-uuid\",\"ResultPath\":null,\"TimeoutSeconds\":10800,\"HeartbeatSeconds\":90,\"Parameters\":{\"experimentId\":\"toExperimentId\",\"taskName\":\"subsetSeurat\",\"processName\":\"subset\",\"server\":\"remoter-server-toExperimentId.pipeline-test-namespace.svc.cluster.local\",\"ignoreSslCert\":false,\"parentExperimentId\":\"fromExperimentId\",\"subsetExperimentId\":\"toExperimentId\",\"cellSetKeys\":[\"louvain-1\",\"louvain-2\"],\"parentProcessingConfig\":{\"classifier\":{\"oneSample\":{\"auto\":true,\"enabled\":false,\"prefiltered\":true,\"filterSettings\":{\"FDR\":0.01},\"defaultFilterSettings\":{\"FDR\":0.01}},\"otherSample\":{\"auto\":true,\"enabled\":false,\"prefiltered\":true,\"filterSettings\":{\"FDR\":0.01},\"defaultFilterSettings\":{\"FDR\":0.01}}},\"doubletScores\":{\"oneSample\":{\"enabled\":true,\"filterSettings\":{\"oneSetting\":1},\"defaultFilterSettings\":{\"oneSetting\":1},\"recomputeDoubletScore\":true},\"otherSample\":{\"enabled\":true,\"filterSettings\":{\"oneSetting\":1},\"defaultFilterSettings\":{\"oneSetting\":1},\"recomputeDoubletScore\":true}},\"dataIntegration\":{\"dataIntegration\":{\"method\":\"harmony\",\"methodSettings\":{\"fastmnn\":{\"numGenes\":2000,\"normalisation\":\"logNormalize\"},\"harmony\":{\"numGenes\":2000,\"normalisation\":\"logNormalize\"},\"seuratv4\":{\"numGenes\":2000,\"normalisation\":\"logNormalize\"},\"unisample\":{\"numGenes\":2000,\"normalisation\":\"logNormalize\"}}},\"dimensionalityReduction\":{\"method\":\"rpca\",\"numPCs\":30,\"excludeGeneCategories\":[]}},\"numGenesVsNumUmis\":{\"oneSample\":{\"auto\":true,\"enabled\":true,\"filterSettings\":{\"regressionType\":\"linear\",\"regressionTypeSettings\":{\"linear\":{\"p.level\":0.001},\"spline\":{\"p.level\":0.001}}},\"defaultFilterSettings\":{\"regressionType\":\"linear\",\"regressionTypeSettings\":{\"linear\":{\"p.level\":0.001},\"spline\":{\"p.level\":0.001}}}},\"otherSample\":{\"auto\":true,\"enabled\":true,\"filterSettings\":{\"regressionType\":\"linear\",\"regressionTypeSettings\":{\"linear\":{\"p.level\":0.001},\"spline\":{\"p.level\":0.001}}},\"defaultFilterSettings\":{\"regressionType\":\"linear\",\"regressionTypeSettings\":{\"linear\":{\"p.level\":0.001},\"spline\":{\"p.level\":0.001}}}}},\"configureEmbedding\":{\"embeddingSettings\":{\"method\":\"umap\",\"methodSettings\":{\"tsne\":{\"perplexity\":30,\"learningRate\":200},\"umap\":{\"distanceMetric\":\"cosine\",\"minimumDistance\":0.3}}},\"clusteringSettings\":{\"method\":\"louvain\",\"methodSettings\":{\"louvain\":{\"resolution\":0.8}}}},\"cellSizeDistribution\":{\"oneSample\":{\"auto\":true,\"enabled\":false,\"filterSettings\":{\"binStep\":200,\"minCellSize\":1044},\"defaultFilterSettings\":{\"binStep\":200,\"minCellSize\":1044}},\"otherSample\":{\"auto\":true,\"enabled\":false,\"filterSettings\":{\"binStep\":200,\"minCellSize\":1044},\"defaultFilterSettings\":{\"binStep\":200,\"minCellSize\":1044}}},\"mitochondrialContent\":{\"oneSample\":{\"auto\":true,\"enabled\":true,\"filterSettings\":{\"method\":\"absoluteThreshold\",\"methodSettings\":{\"absoluteThreshold\":{\"binStep\":0.3,\"maxFraction\":0.07181329}}},\"defaultFilterSettings\":{\"method\":\"absoluteThreshold\",\"methodSettings\":{\"absoluteThreshold\":{\"binStep\":0.3,\"maxFraction\":0.07181329}}}},\"otherSample\":{\"auto\":true,\"enabled\":true,\"filterSettings\":{\"method\":\"absoluteThreshold\",\"methodSettings\":{\"absoluteThreshold\":{\"binStep\":0.3,\"maxFraction\":0.07181329}}},\"defaultFilterSettings\":{\"method\":\"absoluteThreshold\",\"methodSettings\":{\"absoluteThreshold\":{\"binStep\":0.3,\"maxFraction\":0.07181329}}}}}}},\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.errorInfo\",\"Next\":\"HandleError\"}]},\"PrepareExperiment\":{\"Next\":\"UploadToAWS\",\"Type\":\"Task\",\"Resource\":\"arn:aws:states:eu-west-1:000000000000:activity:pipeline-test-mock-uuid\",\"ResultPath\":null,\"TimeoutSeconds\":10800,\"HeartbeatSeconds\":90,\"Parameters\":{\"experimentId\":\"toExperimentId\",\"taskName\":\"prepareExperiment\",\"processName\":\"subset\",\"server\":\"remoter-server-toExperimentId.pipeline-test-namespace.svc.cluster.local\",\"ignoreSslCert\":false,\"experimentName\":\"toExperimentName\",\"authJWT\":\"mockAuthJWT\"},\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.errorInfo\",\"Next\":\"HandleError\"}]},\"UploadToAWS\":{\"Next\":\"EndOfPipeline\",\"Type\":\"Task\",\"Resource\":\"arn:aws:states:eu-west-1:000000000000:activity:pipeline-test-mock-uuid\",\"ResultPath\":null,\"TimeoutSeconds\":10800,\"HeartbeatSeconds\":90,\"Parameters\":{\"experimentId\":\"toExperimentId\",\"taskName\":\"uploadToAWS\",\"processName\":\"subset\",\"server\":\"remoter-server-toExperimentId.pipeline-test-namespace.svc.cluster.local\",\"ignoreSslCert\":false,\"experimentName\":\"toExperimentName\",\"authJWT\":\"mockAuthJWT\"},\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.errorInfo\",\"Next\":\"HandleError\"}]},\"HandleError\":{\"Next\":\"MarkAsFailed\",\"Type\":\"Task\",\"Resource\":\"arn:aws:states:::sns:publish\",\"Parameters\":{\"TopicArn\":\"arn:aws:sns:eu-west-1:000000000000:work-results-test-default-v2\",\"Message.$\":\"States.Format('\\\\{\\\"taskName\\\":\\\"pipelineError\\\",\\\"experimentId\\\":\\\"toExperimentId\\\",\\\"apiUrl\\\":\\\"test-public-api-url\\\",\\\"input\\\":\\\\{\\\"experimentId\\\":\\\"toExperimentId\\\",\\\"error\\\":\\\"{}\\\",\\\"taskName\\\":\\\"pipelineError\\\",\\\"sandboxId\\\":\\\"default\\\",\\\"activityId\\\":\\\"pipeline-test-mock-uuid\\\",\\\"processName\\\":\\\"subset\\\"\\\\}\\\\}', $.errorInfo.Error)\",\"MessageAttributes\":{\"type\":{\"DataType\":\"String\",\"StringValue\":\"PipelineResponse\"}}}},\"MarkAsFailed\":{\"Type\":\"Fail\"},\"EndOfPipeline\":{\"Type\":\"Pass\",\"End\":true}}}",
        "loggingConfiguration": Object {
          "level": "OFF",
        },
        "name": "biomage-subset-test-f3880dbb8507da8b0f158c0216a7d7189670e6ca",
        "roleArn": "arn:aws:iam::000000000000:role/state-machine-role-test",
    at Object.<anonymous> (/home/runner/work/api/api/tests/api.v2/helpers/pipeline/pipelineConstruct.test.js:286:46)
    at processTicksAndRejections (internal/process/task_queues.js:95:5)

Check failure on line 99 in tests/api.v2/helpers/pipeline/gem2s.test.js

See this annotation in the file changed.

@github-actions github-actions / jest-github-action

gem2sResponse > Starts a QC run when gem2s finishes

Error: expect(received).toMatchSnapshot()

Snapshot name: `gem2sResponse Starts a QC run when gem2s finishes 2`

- Snapshot  -   1
+ Received  + 146

  Array [
    Array [
      "mockExperimentId",
-     Array [],
+     Object {
+       "cellSizeDistribution": Object {
+         "fc68aefc-c3ca-467f-8589-f1dbaaac1c1e": Object {
+           "auto": true,
+           "defaultFilterSettings": Object {
+             "binStep": 200,
+             "minCellSize": 1044,
+           },
+           "enabled": false,
+           "filterSettings": Object {
+             "binStep": 200,
+             "minCellSize": 1044,
+           },
+         },
+       },
+       "classifier": Object {
+         "fc68aefc-c3ca-467f-8589-f1dbaaac1c1e": Object {
+           "auto": true,
+           "defaultFilterSettings": Object {
+             "FDR": 0.02,
+           },
+           "enabled": false,
+           "filterSettings": Object {
+             "FDR": 0.01,
+           },
+           "prefiltered": true,
+         },
+       },
+       "configureEmbedding": Object {
+         "clusteringSettings": Object {
+           "method": "louvain",
+           "methodSettings": Object {
+             "louvain": Object {
+               "resolution": 0.8,
+             },
+           },
+         },
+         "embeddingSettings": Object {
+           "method": "umap",
+           "methodSettings": Object {
+             "tsne": Object {
+               "learningRate": 200,
+               "perplexity": 30,
+             },
+             "umap": Object {
+               "distanceMetric": "cosine",
+               "minimumDistance": 0.3,
+             },
+           },
+         },
+       },
+       "dataIntegration": Object {
+         "dataIntegration": Object {
+           "method": "harmony",
+           "methodSettings": Object {
+             "fastmnn": Object {
+               "normalisation": "logNormalize",
+               "numGenes": 2000,
+             },
+             "harmony": Object {
+               "normalisation": "logNormalize",
+               "numGenes": 2000,
+             },
+             "seuratv4": Object {
+               "normalisation": "logNormalize",
+               "numGenes": 2000,
+             },
+             "unisample": Object {
+               "normalisation": "logNormalize",
+               "numGenes": 2000,
+             },
+           },
+         },
+         "dimensionalityReduction": Object {
+           "excludeGeneCategories": Array [],
+           "method": "rpca",
+           "numPCs": 30,
+         },
+       },
+       "doubletScores": Object {
+         "fc68aefc-c3ca-467f-8589-f1dbaaac1c1e": Object {
+           "auto": true,
+           "defaultFilterSettings": Object {
+             "binStep": 0.05,
+             "probabilityThreshold": 0.6569474,
+           },
+           "enabled": true,
+           "filterSettings": Object {
+             "binStep": 0.02,
+             "probabilityThreshold": 0.6569474,
+           },
+         },
+       },
+       "mitochondrialContent": Object {
+         "fc68aefc-c3ca-467f-8589-f1dbaaac1c1e": Object {
+           "auto": true,
+           "defaultFilterSettings": Object {
+             "method": "absoluteThreshold",
+             "methodSettings": Object {
+               "absoluteThreshold": Object {
+                 "binStep": 0.6,
+                 "maxFraction": 0.07181355,
+               },
+             },
+           },
+           "enabled": true,
+           "filterSettings": Object {
+             "method": "absoluteThreshold",
+             "methodSettings": Object {
+               "absoluteThreshold": Object {
+                 "binStep": 0.3,
+                 "maxFraction": 0.07181329,
+               },
+             },
+           },
+         },
+       },
+       "numGenesVsNumUmis": Object {
+         "fc68aefc-c3ca-467f-8589-f1dbaaac1c1e": Object {
+           "auto": true,
+           "defaultFilterSettings": Object {
+             "regressionType": "linear",
+             "regressionTypeSettings": Object {
+               "linear": Object {
+                 "p.level": 0.001,
+               },
+               "spline": Object {
+                 "p.level": 0.001,
+               },
+             },
+           },
+           "enabled": true,
+           "filterSettings": Object {
+             "regressionType": "linear",
+             "regressionTypeSettings": Object {
+               "linear": Object {
+                 "p.level": 0.001,
+               },
+               "spline": Object {
+                 "p.level": 0.001,
+               },
+             },
+           },
+         },
+       },
+     },
      "mockAuthJWT",
      "mockJobId",
    ],
  ]
    at Object.<anonymous> (/home/runner/work/api/api/tests/api.v2/helpers/pipeline/gem2s.test.js:135:59)

Check failure on line 138 in tests/api.v2/helpers/pipeline/gem2s.test.js

See this annotation in the file changed.

@github-actions github-actions / jest-github-action

gem2sResponse > Starts a QC run when gem2s finishes and can duplicate defaultProcessingConfig ignoring entries that arent samples

Error: expect(received).toMatchSnapshot()

Snapshot name: `gem2sResponse Starts a QC run when gem2s finishes and can duplicate defaultProcessingConfig ignoring entries that arent samples 2`

- Snapshot  -   1
+ Received  + 147

  Array [
    Array [
      "mockExperimentId",
-     Array [],
+     Object {
+       "cellSizeDistribution": Object {
+         "fc68aefc-c3ca-467f-8589-f1dbaaac1c1e": Object {
+           "auto": true,
+           "defaultFilterSettings": Object {
+             "binStep": 200,
+             "minCellSize": 1044,
+           },
+           "enabled": false,
+           "filterSettings": Object {
+             "binStep": 200,
+             "minCellSize": 1044,
+           },
+         },
+       },
+       "classifier": Object {
+         "fc68aefc-c3ca-467f-8589-f1dbaaac1c1e": Object {
+           "auto": true,
+           "defaultFilterSettings": Object {
+             "FDR": 0.02,
+           },
+           "enabled": false,
+           "filterSettings": Object {
+             "FDR": 0.01,
+           },
+           "prefiltered": true,
+         },
+       },
+       "configureEmbedding": Object {
+         "clusteringSettings": Object {
+           "method": "louvain",
+           "methodSettings": Object {
+             "louvain": Object {
+               "resolution": 0.8,
+             },
+           },
+         },
+         "embeddingSettings": Object {
+           "method": "umap",
+           "methodSettings": Object {
+             "tsne": Object {
+               "learningRate": 200,
+               "perplexity": 30,
+             },
+             "umap": Object {
+               "distanceMetric": "cosine",
+               "minimumDistance": 0.3,
+             },
+           },
+         },
+       },
+       "dataIntegration": Object {
+         "dataIntegration": Object {
+           "method": "harmony",
+           "methodSettings": Object {
+             "fastmnn": Object {
+               "normalisation": "logNormalize",
+               "numGenes": 2000,
+             },
+             "harmony": Object {
+               "normalisation": "logNormalize",
+               "numGenes": 2000,
+             },
+             "seuratv4": Object {
+               "normalisation": "logNormalize",
+               "numGenes": 2000,
+             },
+             "unisample": Object {
+               "normalisation": "logNormalize",
+               "numGenes": 2000,
+             },
+           },
+         },
+         "dimensionalityReduction": Object {
+           "excludeGeneCategories": Array [],
+           "method": "rpca",
+           "numPCs": 30,
+         },
+       },
+       "doubletScores": Object {
+         "fc68aefc-c3ca-467f-8589-f1dbaaac1c1e": Object {
+           "auto": true,
+           "defaultFilterSettings": Object {
+             "binStep": 0.05,
+             "probabilityThreshold": 0.6569474,
+           },
+           "enabled": true,
+           "filterSettings": Object {
+             "binStep": 0.02,
+             "probabilityThreshold": 0.6569474,
+           },
+         },
+         "someStepFlag": true,
+       },
+       "mitochondrialContent": Object {
+         "fc68aefc-c3ca-467f-8589-f1dbaaac1c1e": Object {
+           "auto": true,
+           "defaultFilterSettings": Object {
+             "method": "absoluteThreshold",
+             "methodSettings": Object {
+               "absoluteThreshold": Object {
+                 "binStep": 0.6,
+                 "maxFraction": 0.07181355,
+               },
+             },
+           },
+           "enabled": true,
+           "filterSettings": Object {
+             "method": "absoluteThreshold",
+             "methodSettings": Object {
+               "absoluteThreshold": Object {
+                 "binStep": 0.3,
+                 "maxFraction": 0.07181329,
+               },
+             },
+           },
+         },
+       },
+       "numGenesVsNumUmis": Object {
+         "fc68aefc-c3ca-467f-8589-f1dbaaac1c1e": Object {
+           "auto": true,
+           "defaultFilterSettings": Object {
+             "regressionType": "linear",
+             "regressionTypeSettings": Object {
+               "linear": Object {
+                 "p.level": 0.001,
+               },
+               "spline": Object {
+                 "p.level": 0.001,
+               },
+             },
+           },
+           "enabled": true,
+           "filterSettings": Object {
+             "regressionType": "linear",
+             "regressionTypeSettings": Object {
+               "linear": Object {
+                 "p.level": 0.001,
+               },
+               "spline": Object {
+                 "p.level": 0.001,
+               },
+             },
+           },
+         },
+       },
+     },
      "mockAuthJWT",
      "mockJobId",
    ],
  ]
    at Object.<anonymous> (/home/runner/work/api/api/tests/api.v2/helpers/pipeline/gem2s.test.js:180:59)

Check failure on line 74 in tests/api.v2/controllers/qcController.test.js

See this annotation in the file changed.

@github-actions github-actions / jest-github-action

qcController > runQC works correctly with processingConfig changes

Error: expect(jest.fn()).toHaveBeenCalledWith(...expected)

Expected: "experimentId", [{"body": {"auto": true, "enabled": true, "f87892f0-3403-4ba9-b871-c366e3fa855e": {"auto": false, "defaultFilterSettings": {"regressionType": "linear", "regressionTypeSettings": {"linear": {"p.level": 0.001}, "spline": {"p.level": 0.001}}}, "enabled": true, "filterSettings": {"regressionType": "linear", "regressionTypeSettings": {"linear": {"p.level": 0.00095}, "spline": {"p.level": 0.001}}}}, "filterSettings": {"regressionType": "linear", "regressionTypeSettings": {"linear": {"p.level": 0.001}, "spline": {"p.level": 0.001}}}}, "name": "numGenesVsNumUmis"}], "mockAuthorization"
Received: "experimentId", undefined, "mockAuthorization"

Number of calls: 1
    at Object.<anonymous> (/home/runner/work/api/api/tests/api.v2/controllers/qcController.test.js:88:48)

Check failure on line 97 in tests/api.v2/controllers/qcController.test.js

See this annotation in the file changed.

@github-actions github-actions / jest-github-action

qcController > runQC works correctly without processingConfig changes

Error: expect(jest.fn()).toHaveBeenCalledWith(...expected)

Expected: "experimentId", [], "mockAuthorization"
Received: "experimentId", undefined, "mockAuthorization"

Number of calls: 1
    at Object.<anonymous> (/home/runner/work/api/api/tests/api.v2/controllers/qcController.test.js:111:48)

Check failure on line 123 in tests/api.v2/helpers/pipeline/pipelineConstruct/qcHelpers.test.js

See this annotation in the file changed.

@github-actions github-actions / jest-github-action

helper functions for skeletons > returns from first not-completed step if the config has no changes

TypeError: Cannot read property 'select' of undefined
    at CellLevelMeta.getMetadataByExperimentIds (/home/runner/work/api/api/src/api.v2/model/CellLevelMeta.js:19:8)
    at getCellLevelMetadataFileChanged (/home/runner/work/api/api/src/api.v2/helpers/pipeline/pipelineConstruct/qcHelpers.js:26:6)
    at getFirstQCStep (/home/runner/work/api/api/src/api.v2/helpers/pipeline/pipelineConstruct/qcHelpers.js:46:14)
    at getQcStepsToRun (/home/runner/work/api/api/src/api.v2/helpers/pipeline/pipelineConstruct/qcHelpers.js:107:27)
    at Object.<anonymous> (/home/runner/work/api/api/tests/api.v2/helpers/pipeline/pipelineConstruct/qcHelpers.test.js:131:27)
    at Object.asyncJestTest (/home/runner/work/api/api/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:106:37)
    at /home/runner/work/api/api/node_modules/jest-jasmine2/build/queueRunner.js:45:12
    at new Promise (<anonymous>)
    at mapper (/home/runner/work/api/api/node_modules/jest-jasmine2/build/queueRunner.js:28:19)
    at /home/runner/work/api/api/node_modules/jest-jasmine2/build/queueRunner.js:75:41