From b2a82fce197c5821038ff096051ba943b9f89f2f Mon Sep 17 00:00:00 2001 From: JP Date: Fri, 1 Dec 2023 12:45:05 -0700 Subject: [PATCH] initial DTR tests (#499) --- .vscode/settings.json | 2 ++ .../acceleratorkit/ANCMiniContentTest.java | 15 ++++---- .../acceleratorkit/BaseContentTest.java | 9 +++-- .../acceleratorkit/DTRContentTest.java | 32 ++++++++++++++++++ .../test/resources/acceleratorkit/DTR.xlsx | Bin 0 -> 36661 bytes 5 files changed, 46 insertions(+), 12 deletions(-) create mode 100644 tooling/src/test/java/org/opencds/cqf/tooling/acceleratorkit/DTRContentTest.java create mode 100644 tooling/src/test/resources/acceleratorkit/DTR.xlsx diff --git a/.vscode/settings.json b/.vscode/settings.json index 99a142708..94e8bd2de 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,7 +3,9 @@ "cSpell.words": [ "acceleratorkit", "ANCM", + "ASLP", "Careand", + "conceptmap", "pagecontent", "plandefinition", "testng" diff --git a/tooling/src/test/java/org/opencds/cqf/tooling/acceleratorkit/ANCMiniContentTest.java b/tooling/src/test/java/org/opencds/cqf/tooling/acceleratorkit/ANCMiniContentTest.java index 425736714..687f1508a 100644 --- a/tooling/src/test/java/org/opencds/cqf/tooling/acceleratorkit/ANCMiniContentTest.java +++ b/tooling/src/test/java/org/opencds/cqf/tooling/acceleratorkit/ANCMiniContentTest.java @@ -13,11 +13,13 @@ public class ANCMiniContentTest extends BaseContentTest { public ANCMiniContentTest() { - super(new Spreadsheet(){{ + super(new Spreadsheet() { + { path = "acceleratorkit/ANC Test Cases-mini.xlsx"; - dataDictionarySheets = "ANC.A. Registration,ANC.B5 Quick check,ANC.End End"; scope = "ANCM"; - }}); + dataElementPages = "ANC.A. Registration,ANC.B5 Quick check,ANC.End End"; + } + }); } @Test @@ -28,7 +30,7 @@ public void validateContentCount() { assertFalse(extensionsPath().toFile().exists()); assertFalse(resourcesPath().toFile().exists()); assertFalse(testsPath().toFile().exists()); - assertEquals(vocabularyPath().toFile().listFiles().length, 1); + assertEquals(vocabularyPath().resolve("codesystem").toFile().listFiles().length, 1); } @Test @@ -44,8 +46,8 @@ public void validateCQLContent() throws IOException { @Test public void validateCodeSystem() { var codeSystem = resourceAtPath( - CodeSystem.class, - vocabularyPath().resolve("codesystem/codesystem-activity-codes.json")); + CodeSystem.class, + vocabularyPath().resolve("codesystem/codesystem-activity-codes.json")); assertEquals(codeSystem.getTitle(), "ANCM Activity Codes"); } @@ -57,7 +59,6 @@ public void exampleIssue628() throws IOException { // assertEquals(cqlLines.get(20), "// @fluentFunction"); } - @Test public void validateElm() { // TODO: Helpers to compile CQL to ELM and validate diff --git a/tooling/src/test/java/org/opencds/cqf/tooling/acceleratorkit/BaseContentTest.java b/tooling/src/test/java/org/opencds/cqf/tooling/acceleratorkit/BaseContentTest.java index 0affc771f..14ea9d3ea 100644 --- a/tooling/src/test/java/org/opencds/cqf/tooling/acceleratorkit/BaseContentTest.java +++ b/tooling/src/test/java/org/opencds/cqf/tooling/acceleratorkit/BaseContentTest.java @@ -37,7 +37,7 @@ protected BaseContentTest(Spreadsheet spreadsheet) { protected BaseContentTest(Spreadsheet spreadsheet, FhirVersionEnum fhirVersion) { Objects.requireNonNull(spreadsheet, "spreadsheet is required"); Objects.requireNonNull(spreadsheet.path, "spreadsheet path is required"); - Objects.requireNonNull(spreadsheet.dataDictionarySheets, "data dictionary sheets are required"); + Objects.requireNonNull(spreadsheet.dataElementPages, "data element pages are required"); Objects.requireNonNull(spreadsheet.scope, "scope is required"); Objects.requireNonNull(fhirVersion, "fhir version is required"); @@ -68,7 +68,6 @@ protected String command() { */ protected static class Spreadsheet { String path; - String dataDictionarySheets; String encoding; String scope; String dataElementPages; @@ -79,7 +78,7 @@ protected String[] params() { return new String[] { "-s", scope(), "-pts", spreadsheetPath().toAbsolutePath().toString(), - "-dep", dataDictionarySheets(), + "-dep", dataElementPages(), "-op", outputPath().toAbsolutePath().toString(), "-e", encoding(), "-tc", testCases()}; @@ -124,8 +123,8 @@ protected Path spreadsheetPath() { return Path.of(resourcesPath, spreadsheet.path); } - protected String dataDictionarySheets() { - return spreadsheet.dataDictionarySheets; + protected String dataElementPages() { + return spreadsheet.dataElementPages; } // FHIR context accessors diff --git a/tooling/src/test/java/org/opencds/cqf/tooling/acceleratorkit/DTRContentTest.java b/tooling/src/test/java/org/opencds/cqf/tooling/acceleratorkit/DTRContentTest.java new file mode 100644 index 000000000..32e117e99 --- /dev/null +++ b/tooling/src/test/java/org/opencds/cqf/tooling/acceleratorkit/DTRContentTest.java @@ -0,0 +1,32 @@ +package org.opencds.cqf.tooling.acceleratorkit; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; + +import org.testng.annotations.Test; + +public class DTRContentTest extends BaseContentTest { + + public DTRContentTest() { + super(new Spreadsheet() { + { + path = "acceleratorkit/DTR.xlsx"; + scope = "ASLP"; + dataElementPages = "ASLP.A1 Adult Sleep Studies"; + } + }); + } + + @Test + public void validateContentCount() { + assertEquals(cqlPath().toFile().listFiles().length, 4); + assertEquals(examplesPath().toFile().listFiles().length, 8); + assertFalse(extensionsPath().toFile().exists()); + assertEquals(profilesPath().toFile().listFiles().length, 8); + assertEquals(resourcesPath().toFile().listFiles().length, 1); + assertFalse(testsPath().toFile().exists()); + assertEquals(vocabularyPath().resolve("codesystem").toFile().listFiles().length, 2); + assertEquals(vocabularyPath().resolve("conceptmap").toFile().listFiles().length, 2); + assertEquals(vocabularyPath().resolve("valueset").toFile().listFiles().length, 4); + } +} \ No newline at end of file diff --git a/tooling/src/test/resources/acceleratorkit/DTR.xlsx b/tooling/src/test/resources/acceleratorkit/DTR.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..9d35885587188ea8efd80a2c01fd268c182de7a4 GIT binary patch literal 36661 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 KBjB(