Skip to content

Commit

Permalink
Merge branch 'main' into nickclyde/keycloak-terraform
Browse files Browse the repository at this point in the history
  • Loading branch information
nickclyde authored Jan 30, 2025
2 parents 8a034fc + d71aa45 commit 6df0f46
Show file tree
Hide file tree
Showing 19 changed files with 364 additions and 277 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ALTER TABLE query
ADD COLUMN immunization BOOLEAN DEFAULT FALSE;
2 changes: 1 addition & 1 deletion query-connector/integration.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ set -e # Exit immediately if a command exits with a non-zero status
docker compose -f docker-compose-integration.yaml up -d

# wait for flyway to finish running before...
docker compose -f docker-compose-integration.yaml logs -f flyway | grep -q "Successfully applied"
docker compose -f docker-compose-integration.yaml logs -f flyway | grep -q "Successfully applied\|No migration necessary"

# running our integration tests
DATABASE_URL=postgresql://postgres:pw@localhost:5432/tefca_db TEST_TYPE=integration jest --testPathPattern=tests/integration
Expand Down
1 change: 1 addition & 0 deletions query-connector/jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ const createJestConfig = nextJest({
const customJestConfig = {
setupFilesAfterEnv: ["<rootDir>/jest.setup.ts"],
testEnvironment: "jest-fixed-jsdom",
modulePathIgnorePatterns: ["<rootDir>/.next/"],
};

// createJestConfig is exported this way to ensure that next/jest can load the Next.js config which is async
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,14 @@ type SetStateCallback<T> = React.Dispatch<React.SetStateAction<T>>;
*/
export async function fetchQueryValueSets(queryName: string) {
const queryResults = await getSavedQueryByName(queryName);
const valueSets = unnestValueSetsFromQuery(queryResults);
if (queryResults === undefined) {
console.error(
`Query by name ${queryName} not found. Returning no value sets`,
);
return [];
}

const valueSets = unnestValueSetsFromQuery(queryResults);
return valueSets;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
import { screen, waitFor } from "@testing-library/react";
import BuildFromTemplates from "@/app/(pages)/queryBuilding/buildFromTemplates/BuildFromTemplates";
import {
DEFAULT_QUERIES,
conditionIdToNameMap,
categoryToConditionNameArrayMap,
gonorreheaValueSets,
gonorreheaSavedQuery,
cancerValueSets,
} from "@/app/(pages)/queryBuilding/fixtures";
import { formatDiseaseDisplay } from "@/app/(pages)/queryBuilding/utils";
import { getSavedQueryById } from "@/app/backend/query-building";
import { DataContext } from "@/app/shared/DataProvider";
import { USE_CASE_DETAILS } from "@/app/shared/constants";
import {
getConditionsData,
getValueSetsAndConceptsByConditionIDs,
} from "../../../shared/database-service";
import {
cancerValueSets,
categoryToConditionNameArrayMap,
conditionIdToNameMap,
DEFAULT_QUERIES,
gonorreheaSavedQuery,
gonorreheaValueSets,
} from "../fixtures";
import BuildFromTemplates from "./BuildFromTemplates";
import { formatDiseaseDisplay } from "../utils";
} from "@/app/shared/database-service";
import { renderWithUser } from "@/app/tests/unit/setup";
import { USE_CASE_DETAILS } from "@/app/shared/constants";
import { getSavedQueryById } from "@/app/backend/query-building";
import { screen, waitFor } from "@testing-library/dom";
import { CONDITION_DRAWER_SEARCH_PLACEHOLDER } from "../components/constants";

jest.mock("../../../shared/database-service", () => ({
Expand Down Expand Up @@ -255,7 +255,7 @@ describe("tests the valueset selection page interactions", () => {

it("filters search on the valueset selection drawer appropriately", async () => {
const GONORREHEA_VALUESET_MAP = Object.values(
gonorreheaSavedQuery[0].query_data,
gonorreheaSavedQuery.query_data,
)[0];
const GONORREHEA_VALUESET_IDS = Object.keys(GONORREHEA_VALUESET_MAP);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,12 +122,11 @@ const BuildFromTemplates: React.FC<BuildFromTemplatesProps> = ({
if (selectedQuery.queryId === undefined) {
return;
}
const result = await getSavedQueryById(selectedQuery.queryId);
if (result === undefined) {
return; // todo: error???
const savedQuery = await getSavedQueryById(selectedQuery.queryId);
if (savedQuery === undefined) {
return;
}
const initialState: NestedQuery = {};
const savedQuery = result[0];

Object.entries(savedQuery.query_data).forEach(
([conditionId, valueSetMap]) => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import React from "react";
import styles from "../buildFromTemplates/conditionTemplateSelection.module.scss";
import { ConceptDisplay } from "./SelectionViewAccordionBody";
import { showToastConfirmation } from "@/app/ui/designSystem/toast/Toast";
import Checkbox from "@/app/ui/designSystem/checkbox/Checkbox";
import { ConceptDisplay } from "./SelectionViewAccordionBody";

type ConceptSelectionProps = {
concepts: ConceptDisplay[];
Expand Down
248 changes: 121 additions & 127 deletions query-connector/src/app/(pages)/queryBuilding/fixtures.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { QueryDetailsResult } from "./utils";
import { QueryTableResult } from "./utils";

// Fixture shortened significantly for maintenance purposes
export const DEFAULT_QUERIES = [
Expand Down Expand Up @@ -605,132 +605,126 @@ export const cancerValueSets = [
},
];

export const gonorreheaSavedQuery: QueryDetailsResult[] = [
{
query_id: "73e1a777-49cb-4e19-bc71-8c3fd3ffda64",
query_name: "Gonorrhea case investigation",
conditions_list: ["15628003"],
query_data: {
"15628003": {
"2.16.840.1.113762.1.4.1146.1036_20190605": {
valueSetId: "2.16.840.1.113762.1.4.1146.1036_20190605",
valueSetVersion: "20190605",
valueSetName:
"Gonorrhea [Neisseria species Unspecified] (Organism or Substance in Lab Results)",
valueSetExternalId: "2.16.840.1.113762.1.4.1146.1036",
author: "CSTE Steward",
system: "http://snomed.info/sct",
ersdConceptType: "labs",
dibbsConceptType: "labs",
includeValueSet: true,
concepts: [
{
code: "715869002",
display:
"Neisseria species, not Neisseria meningitidis (organism)",
include: true,
},
{
code: "414811005",
display: "Neisseria species not Neisseria gonococci (organism)",
include: true,
},
{
code: "59083001",
display: "Genus Neisseria (organism)",
include: true,
},
{
code: "715872009",
display:
"Neisseria species, not Neisseria gonorrhoeae and not Neisseria meningitidis (organism)",
include: true,
},
],
},
"2.16.840.1.113762.1.4.1146.169_20230602": {
valueSetId: "2.16.840.1.113762.1.4.1146.169_20230602",
valueSetVersion: "20230602",
valueSetName:
"Gonorrhea [Neisseria gonorrhoeae] (Organism or Substance in Lab Results)",
valueSetExternalId: "2.16.840.1.113762.1.4.1146.169",
author: "CSTE Steward",
system: "http://snomed.info/sct",
ersdConceptType: "labs",
dibbsConceptType: "labs",
includeValueSet: true,
concepts: [
{
code: "277504006",
display:
"Spectinomycin-resistant Neisseria gonorrhoeae (organism)",
include: true,
},
{
code: "120977006",
display: "Antigen of Neisseria gonorrhoeae (substance)",
include: true,
},
{
code: "703483000",
display:
"Deoxyribonucleic acid of Neisseria gonorrhoeae (substance)",
include: true,
},
{
code: "277501003",
display:
"Penicillinase-producing Neisseria gonorrhoeae (organism)",
include: true,
},
{
code: "409805000",
display:
"Fluoroquinolone-resistant Neisseria gonorrhoeae (organism)",
include: true,
},
{
code: "277502005",
display:
"Tetracycline-resistant Neisseria gonorrhoeae (organism)",
include: true,
},
{
code: "469831000124106",
display: "Neisseria gonorrhoeae subspecies kochii (organism)",
include: true,
},
{
code: "454421000124100",
display: "Neisseria gonorrhoeae nucleic acid detected (finding)",
include: true,
},
{
code: "121172006",
display:
"Ribosomal ribonucleic acid of Neisseria gonorrhoeae (substance)",
include: true,
},
{
code: "68704007",
display: "Neisseria gonorrhoeae (organism)",
include: true,
},
{
code: "277503000",
display:
"Cephalosporin-resistant Neisseria gonorrhoeae (organism)",
include: true,
},
{
code: "414809001",
display:
"Neisseria gonorrhoeae, beta lactamase negative (organism)",
include: true,
},
],
},
export const gonorreheaSavedQuery: QueryTableResult = {
query_id: "73e1a777-49cb-4e19-bc71-8c3fd3ffda64",
query_name: "Gonorrhea case investigation",
conditions_list: ["15628003"],
query_data: {
"15628003": {
"2.16.840.1.113762.1.4.1146.1036_20190605": {
valueSetId: "2.16.840.1.113762.1.4.1146.1036_20190605",
valueSetVersion: "20190605",
valueSetName:
"Gonorrhea [Neisseria species Unspecified] (Organism or Substance in Lab Results)",
valueSetExternalId: "2.16.840.1.113762.1.4.1146.1036",
author: "CSTE Steward",
system: "http://snomed.info/sct",
ersdConceptType: "labs",
dibbsConceptType: "labs",
includeValueSet: true,
concepts: [
{
code: "715869002",
display: "Neisseria species, not Neisseria meningitidis (organism)",
include: true,
},
{
code: "414811005",
display: "Neisseria species not Neisseria gonococci (organism)",
include: true,
},
{
code: "59083001",
display: "Genus Neisseria (organism)",
include: true,
},
{
code: "715872009",
display:
"Neisseria species, not Neisseria gonorrhoeae and not Neisseria meningitidis (organism)",
include: true,
},
],
},
"2.16.840.1.113762.1.4.1146.169_20230602": {
valueSetId: "2.16.840.1.113762.1.4.1146.169_20230602",
valueSetVersion: "20230602",
valueSetName:
"Gonorrhea [Neisseria gonorrhoeae] (Organism or Substance in Lab Results)",
valueSetExternalId: "2.16.840.1.113762.1.4.1146.169",
author: "CSTE Steward",
system: "http://snomed.info/sct",
ersdConceptType: "labs",
dibbsConceptType: "labs",
includeValueSet: true,
concepts: [
{
code: "277504006",
display: "Spectinomycin-resistant Neisseria gonorrhoeae (organism)",
include: true,
},
{
code: "120977006",
display: "Antigen of Neisseria gonorrhoeae (substance)",
include: true,
},
{
code: "703483000",
display:
"Deoxyribonucleic acid of Neisseria gonorrhoeae (substance)",
include: true,
},
{
code: "277501003",
display: "Penicillinase-producing Neisseria gonorrhoeae (organism)",
include: true,
},
{
code: "409805000",
display:
"Fluoroquinolone-resistant Neisseria gonorrhoeae (organism)",
include: true,
},
{
code: "277502005",
display: "Tetracycline-resistant Neisseria gonorrhoeae (organism)",
include: true,
},
{
code: "469831000124106",
display: "Neisseria gonorrhoeae subspecies kochii (organism)",
include: true,
},
{
code: "454421000124100",
display: "Neisseria gonorrhoeae nucleic acid detected (finding)",
include: true,
},
{
code: "121172006",
display:
"Ribosomal ribonucleic acid of Neisseria gonorrhoeae (substance)",
include: true,
},
{
code: "68704007",
display: "Neisseria gonorrhoeae (organism)",
include: true,
},
{
code: "277503000",
display: "Cephalosporin-resistant Neisseria gonorrhoeae (organism)",
include: true,
},
{
code: "414809001",
display:
"Neisseria gonorrhoeae, beta lactamase negative (organism)",
include: true,
},
],
},
},
},
];
immunization: false,
};
3 changes: 2 additions & 1 deletion query-connector/src/app/(pages)/queryBuilding/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,12 @@ export type QueryUpdateResult = {
export type QueryDataColumn = {
[conditionId: string]: { [valueSetId: string]: DibbsValueSet };
};
export type QueryDetailsResult = {
export type QueryTableResult = {
query_name: string;
query_id: string;
query_data: QueryDataColumn;
conditions_list: string[];
immunization: boolean;
};

export const EMPTY_QUERY_SELECTION = {
Expand Down
4 changes: 2 additions & 2 deletions query-connector/src/app/api/query/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,14 +90,14 @@ export async function POST(request: NextRequest) {

const queryResults = await getSavedQueryById(id);

if (queryResults.length === 0) {
if (queryResults === undefined) {
const OperationOutcome = await handleRequestError(INVALID_QUERY);
return NextResponse.json(OperationOutcome);
}

// Add params & patient identifiers to QueryName
const QueryRequest: QueryRequest = {
query_name: queryResults[0].query_name,
query_name: queryResults.query_name,
fhir_server: fhir_server,
...(PatientIdentifiers.first_name && {
first_name: PatientIdentifiers.first_name,
Expand Down
Loading

0 comments on commit 6df0f46

Please sign in to comment.