Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deployment of 2024-09-10 #15835

Closed
wants to merge 46 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
ccd0344
fix copy
etanb Sep 3, 2024
a72f8cc
update PDF
etanb Sep 4, 2024
0f3185a
update timestamp
etanb Sep 5, 2024
a12be52
testing re enabling file download
etanb Sep 5, 2024
7f374d4
add some logging to e2e test run
etanb Sep 5, 2024
5baf50c
increase timeout
etanb Sep 5, 2024
06460f4
15607 remove non catchall hl7 to fhir mappings (#15733)
jack-h-wang Sep 5, 2024
560115f
test uploading trace
etanb Sep 5, 2024
ed70cc5
Generating a version.json file with the current short commit id and p…
adegolier Sep 5, 2024
5c9a2d5
Update up-receiver-migration-validate-test-data.md (#15604)
chris-kuryak Sep 5, 2024
7f93cf9
Oo/oslynn/15664/update rest transport for oracle rln etor nbs results…
oslynn Sep 6, 2024
a318ff9
Wasn't working in Staging or on Arnej's machine, so changed to be gen…
adegolier Sep 6, 2024
1220903
Engagement/jessica/15406 cli download report (#15675)
JessicaWNava Sep 6, 2024
ca42465
slightly cleaner tracing
etanb Sep 6, 2024
89bb6c5
console added
etanb Sep 6, 2024
2cd29b3
needed to ignore console
etanb Sep 6, 2024
c8f9556
test sort method
etanb Sep 6, 2024
626c5f8
simply skip test if mocked
etanb Sep 7, 2024
22ae906
invert truthiness
etanb Sep 7, 2024
7b2aefe
Bump actions/setup-java in /.github/actions/build-backend (#15817)
dependabot[bot] Sep 9, 2024
be2655a
Bump actions/setup-java from 4.2.2 to 4.3.0 (#15818)
dependabot[bot] Sep 9, 2024
b0796f1
Bump actions/setup-java in /.github/actions/build-submissions (#15816)
dependabot[bot] Sep 9, 2024
9f27b0d
Bump bridgecrewio/checkov-action from 12.2864.0 to 12.2867.0 (#15819)
dependabot[bot] Sep 9, 2024
805c0ee
Merge branch 'master' into experience/15612/re-re-reenable-file-download
etanb Sep 9, 2024
becb550
Merge pull request #15793 from CDCgov/experience/15612/re-re-reenable…
etanb Sep 9, 2024
0d88de0
Merge branch 'master' into experience/15734/remove-okta-requirement
etanb Sep 9, 2024
f95df06
update dates
etanb Sep 9, 2024
937a6f2
Merge pull request #15767 from CDCgov/experience/15734/remove-okta-re…
etanb Sep 9, 2024
c660ea7
15262 - Receiver Status smoke tests (#15785)
penny-lischer Sep 9, 2024
d79aad2
Add Receive step to UP (#15621)
brick-green Sep 9, 2024
91e3cf7
Engagement/nj prework (#15529)
victor-chaparro Sep 9, 2024
1d2707b
create documentation for hl7-fhir transforms (#15670)
GilmoreA6 Sep 9, 2024
74d4607
Bump the react-router group across 1 directory with 2 updates (#15627)
dependabot[bot] Sep 10, 2024
677d063
Bump lint-staged from 15.2.9 to 15.2.10 in /frontend-react (#15780)
dependabot[bot] Sep 10, 2024
0a8dea5
Bump the applicationinsights group in /frontend-react with 2 updates …
dependabot[bot] Sep 10, 2024
cbd989c
Bump @types/sanitize-html from 2.11.0 to 2.13.0 in /frontend-react (#…
dependabot[bot] Sep 10, 2024
eb73e5d
Bump the testing-library group across 1 directory with 2 updates (#15…
dependabot[bot] Sep 10, 2024
d3ec406
Bump axios from 1.7.5 to 1.7.7 in /frontend-react (#15741)
dependabot[bot] Sep 10, 2024
7da1ff2
Bump jsdom from 24.1.1 to 25.0.0 in /frontend-react (#15744)
dependabot[bot] Sep 10, 2024
0146955
Bump @trussworks/react-uswds from 9.0.0 to 9.1.0 in /frontend-react (…
dependabot[bot] Sep 10, 2024
ba713ff
Bump tsx from 4.17.0 to 4.19.0 in /frontend-react (#15746)
dependabot[bot] Sep 10, 2024
58647ba
Experience/15262/receiver status smoke (#15824)
penny-lischer Sep 10, 2024
3a55f0b
Bump @types/react from 18.3.3 to 18.3.5 in /frontend-react (#15747)
dependabot[bot] Sep 10, 2024
1f84695
Bump sass from 1.77.8 to 1.78.0 in /frontend-react (#15779)
dependabot[bot] Sep 10, 2024
67637d0
Bump postcss from 8.4.41 to 8.4.45 in /frontend-react (#15782)
dependabot[bot] Sep 10, 2024
42e271b
Bump the vite group across 1 directory with 2 updates (#15799)
dependabot[bot] Sep 10, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .environment/gitleaks/gitleaks-config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,8 @@ title = "PRIME ReportStream Gitleaks Configuration"
'authority\", \"extension\"', # FHIR extension URL also shows up in normal FHIR test data
'ApiKeyCredential\(\"flexion\"',
'authType: \"two-legged\"',
'\"apiKey\"',
'api-key\" to \"oracle123\"',
'Authorization-Type: \"username/password\"',
'cdctiautomated_sa'
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@
name: UP Migrating Receiver - Validate Test Data
about: This is the fourth step in migrating a STLT to the UP
title: "[name of STLT] - UP Migration - Validate Test Data"
labels: onboarding-ops, receiver
labels: onboarding-ops, receiver, engineering, needs-refinement
assignees: ''

---
[STLT] = name of STLT

### User Story:
As a developer, I want the [STLT] to validate test messages in staging, so that they can receive data in the format they expect.
Expand All @@ -27,4 +28,16 @@ As a developer, I want the [STLT] to validate test messages in staging, so that

### Acceptance Criteria
- [ ] Created and sent data using Simple Report
- [ ] Confirmed with STLT that data passes validation
- [ ] Confirmed with STLT that data passes validation
- [ ] When finished, tag Mikaelah, Chris, and Glenn in a slack post stating:
> [STLT] "Testing in Staging" is complete and will be moving on to "Monitor in Production"
>
> Connection Type: [REST, SFTP, SOAP, etc]
>
> Conditions tested: [List of Conditions]
>
> Positives set up to receive: [List of Conditions]
>
> Negatives set up to receive: [List of Conditions]
>
> Format receiving: [HL7 or FHIR]
2 changes: 1 addition & 1 deletion .github/actions/build-backend/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ runs:
sudo rm -rf /usr/local/lib/android

- name: Set up JDK 17
uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018
uses: actions/setup-java@2dfa2011c5b2a0f1489bf9e433881c92c1631f88
with:
java-version: "17"
distribution: "temurin"
Expand Down
2 changes: 1 addition & 1 deletion .github/actions/build-submissions/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ runs:
sudo rm -rf /usr/local/lib/android

- name: Set up JDK 17
uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018
uses: actions/setup-java@2dfa2011c5b2a0f1489bf9e433881c92c1631f88
with:
java-version: "17"
distribution: "temurin"
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/build_hub.yml
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,8 @@ jobs:
./gradlew :prime-router:primeCLI --args='validate-yaml --type Organizations --file settings/organizations.yml --dir settings/STLTs'
./gradlew :prime-router:primeCLI --args='validate-yaml --type FhirToFhirTransform --dir src/main/resources/metadata/fhir_transforms'
./gradlew :prime-router:primeCLI --args='validate-yaml --type FhirToHL7Mapping --dir src/main/resources/metadata/hl7_mapping'
./gradlew :prime-router:primeCLI --args='validate-yaml --type HL7ToFhirMappingMessageTemplate --dir metadata/HL7/catchall/hl7/message metadata/HL7/v251-elr/hl7/message'
./gradlew :prime-router:primeCLI --args='validate-yaml --type HL7ToFhirMappingResourceTemplate --dir metadata/HL7 --exclude-dir metadata/HL7/catchall/hl7/message metadata/HL7/v251-elr/hl7/message metadata/HL7/v251-elr/hl7/codesystem metadata/HL7/catchall/hl7/codesystem --exclude-file metadata/HL7/catchall/fhir/resourcemapping.yml metadata/HL7/v251-elr/fhir/resourcemapping.yml metadata/HL7/catchall/hl7/resource/Common.yml metadata/HL7/v251-elr/hl7/resource/Common.yml'
./gradlew :prime-router:primeCLI --args='validate-yaml --type HL7ToFhirMappingMessageTemplate --dir metadata/HL7/catchall/hl7/message'
./gradlew :prime-router:primeCLI --args='validate-yaml --type HL7ToFhirMappingResourceTemplate --dir metadata/HL7 --exclude-dir metadata/HL7/catchall/hl7/message metadata/HL7/catchall/hl7/codesystem --exclude-file metadata/HL7/catchall/fhir/resourcemapping.yml metadata/HL7/catchall/hl7/resource/Common.yml'

- name: Check for Uncommited Schema Docs
id: check_changes
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/snyk.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ jobs:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
- uses: snyk/actions/setup@b98d498629f1c368650224d6d212bf7dfa89e4bf
- name: Set up JDK 17 to generate backend coverage stats
uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018
uses: actions/setup-java@2dfa2011c5b2a0f1489bf9e433881c92c1631f88
with:
java-version: "17"
distribution: "temurin"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/sonarcloud.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ jobs:

- name: Set up JDK 17
if: steps.changed-files-yaml.outputs.backend_any_changed == 'true' || steps.branch-name.outputs.is_default == 'true'
uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018
uses: actions/setup-java@2dfa2011c5b2a0f1489bf9e433881c92c1631f88
with:
java-version: "17"
distribution: "temurin"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/validate_terraform.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ jobs:
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332

- name: Run Checkov action
uses: bridgecrewio/checkov-action@c9421864e014ef6b8acfa35d0bf3c7e52c13ab10
uses: bridgecrewio/checkov-action@64296236994261f657e33a40ddbeb06a4b8e9747
with:
directory: operations/app/terraform
skip_check: CKV_AZURE_139,CKV_AZURE_137,CKV_AZURE_103,CKV_AZURE_104,CKV_AZURE_102,CKV_AZURE_130,CKV_AZURE_121,CKV_AZURE_67,CKV_AZURE_56,CKV_AZURE_17,CKV_AZURE_63,CKV_AZURE_18,CKV_AZURE_88,CKV_AZURE_65,CKV_AZURE_13,CKV_AZURE_66,CKV_AZURE_33,CKV_AZURE_35,CKV_AZURE_36,CKV_AZURE_98,CKV2_AZURE_1,CKV2_AZURE_15,CKV2_AZURE_21,CKV_AZURE_213,CKV_AZURE_59,CKV2_AZURE_33,CKV2_AZURE_32,CKV2_AZURE_28,CKV_AZURE_206,CKV_AZURE_42,CKV_AZURE_110,CKV_AZURE_109,CKV_AZURE_166,CKV2_AZURE_38,CKV2_AZURE_40,CKV2_AZURE_41,CKV_AZURE_235
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ hs_err_pid*
**/build/**
**/log/**
**/dependency-reduced-pom.xml
**/version.json

# Frontend build output
**/node_modules/**
Expand Down
196 changes: 192 additions & 4 deletions frontend-react/e2e/pages/authenticated/admin/receiver-status.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
import { expect, Locator } from "@playwright/test";
import { endOfDay, format, startOfDay, subDays } from "date-fns";
import type { RSOrganizationSettings } from "../../../../src/config/endpoints/settings";
import { RSReceiverStatus } from "../../../../src/hooks/api/UseReceiversConnectionStatus/UseReceiversConnectionStatus";
import {
createStatusTimePeriodData,
SUCCESS_RATE_CLASSNAME_MAP,
SuccessRate,
} from "../../../../src/pages/admin/receiver-dashboard/utils";
import { DatePair, dateShortFormat } from "../../../../src/utils/DateTimeUtils";
import { DatePair, dateShortFormat, durationFormatShort } from "../../../../src/utils/DateTimeUtils";
import { formatDate } from "../../../../src/utils/misc";
import { createMockGetReceiverStatus } from "../../../mocks/receiverStatus";
import { BasePage, BasePageTestArgs, type ResponseHandlerEntry, type RouteHandlerFulfillEntry } from "../../BasePage";

Expand Down Expand Up @@ -310,8 +313,7 @@ export class AdminReceiverStatusPage extends BasePage {
if (!isRequestAwaitedBool) return undefined as void;

const req = await p;
const reqUrl = req ? new URL(req.url()) : undefined;
return reqUrl;
return req ? new URL(req.url()) : undefined;
}

async updateFilterDateRange(start: Date, end: Date, inputMethod: "textbox" | "calendar" = "textbox") {
Expand Down Expand Up @@ -400,7 +402,7 @@ export class AdminReceiverStatusPage extends BasePage {
return a[0] !== b[0] && a[1] !== b[1];
}

async testReceiverStatusDisplay() {
async testReceiverStatusDisplay(isSmoke = false) {
const [startDate, endDate] = this.filterFormInputs.dateRange.value;
const statusRows = this.receiverStatusRowsLocator;
await expect(statusRows).toHaveCount(new Set(this.receiverStatus?.map((r) => r.receiverId)).size);
Expand Down Expand Up @@ -444,6 +446,192 @@ export class AdminReceiverStatusPage extends BasePage {
await expect(sliceEle).toHaveClass(expectedClass);
}
}

if (isSmoke && i === 0) {
break;
}
}

return true;
}

async testReceiverName() {
const { organizationName, receiverName, successRate } =
this.timePeriodData[1];

const receiversStatusRows = this.receiverStatusRowsLocator;
const expectedReceiverStatusRow = receiversStatusRows.nthCustom(0);
const expectedReceiverStatusRowTitle =
this.getExpectedReceiverStatusRowTitle(
organizationName,
receiverName,
successRate,
);

await expect(receiversStatusRows).toHaveCount(this.timePeriodData.length);

await this.updateFilters({
receiverName,
});

await expect(receiversStatusRows).toHaveCount(1);
await expect(expectedReceiverStatusRow).toBeVisible();
await expect(expectedReceiverStatusRow.title).toHaveText(expectedReceiverStatusRowTitle);

await this.resetFilters();

await expect(receiversStatusRows).toHaveCount(this.timePeriodData.length);

return true;
}

async testReceiverMessage() {
// get first entry's result from all-fail receiver's first day -> third time period
const receiverI = 0;
const dayI = 0;
const timePeriodI = 2;
const entryI = 0;
const {days} = this.timePeriodData[receiverI];
const {connectionCheckResult} = days[dayI].timePeriods[timePeriodI].entries[entryI];

const receiversStatusRows = this.receiverStatusRowsLocator;

await this.updateFilters({
resultMessage: connectionCheckResult,
});

for (const [i, {days}] of this.timePeriodData.entries()) {
const isRowExpected = i === receiverI;
const row = receiversStatusRows.nthCustom(i);

for (const [i, {timePeriods}] of days.entries()) {
const isDayExpected = isRowExpected && i === dayI;
const rowDay = row.days.nthCustom(i);

for (const [i] of timePeriods.entries()) {
const isTimePeriodExpected = isDayExpected && i === timePeriodI;
const expectedClass = !isTimePeriodExpected
? /success-result-hidden/
: /^((?!success-result-hidden).)*$/;
const rowDayTimePeriod = rowDay.timePeriods.nth(i);

await expect(rowDayTimePeriod).toBeVisible();
await expect(rowDayTimePeriod).toHaveClass(expectedClass);
}
}
}

await this.resetFilters();

await this.testReceiverStatusDisplay();

return true;
}

async testReceiverOrgLinks(isSmoke = false) {
const rows = this.receiverStatusRowsLocator;

for (const [i, { organizationName }] of this.timePeriodData.entries()) {
const row = rows.nthCustom(i);

const link = row.title.getByRole("link", { name: organizationName, exact: true }).first();
const expectedUrl = this.getExpectedStatusOrganizationUrl(i);
await expect(link).toBeVisible();
const p = this.page.route(
`/api/settings/organizations/${organizationName}`,
(route) =>
route.fulfill({
json: {
description: "fake",
filters: [],
name: organizationName,
jurisdiction: "fake",
version: 0,
createdAt: "",
createdBy: "",
} satisfies RSOrganizationSettings,
}),
);
await link.click();
await expect(this.page).toHaveURL(expectedUrl);
await p;
await this.page.goBack();

if (isSmoke && i === 0) {
break;
}
}

return true;
}

async testReceiverTimePeriodModals(isSmoke = false) {
const overlay = this.filterFormInputs.dateRange.modalOverlay;

for (const [i, { days }] of this.timePeriodData.entries()) {
const { days: daysLoc } = this.receiverStatusRowsLocator.nthCustom(i);

for (const [dayI, day] of days.entries()) {
for (const [i, { successRateType, entries }] of day.timePeriods.entries()) {
// only first entry in time period is currently displayed
const {
organizationName,
organizationId,
receiverId,
receiverName,
connectionCheckSuccessful,
connectionCheckStartedAt,
connectionCheckCompletedAt,
connectionCheckResult,
} = entries[0] ?? {};
const sliceEle = daysLoc.nthCustom(dayI).timePeriods.nth(i);

const isModalExpectedVisible = successRateType !== SuccessRate.UNDEFINED;

await sliceEle.click({ force: true });
await expect(overlay).toBeAttached({
attached: isModalExpectedVisible,
});

if (isModalExpectedVisible) {
const expectedResultText = connectionCheckSuccessful ? "success" : "failed";
const expectedModalText = `Results for connection verification checkOrg:${organizationName} (id: ${organizationId})Receiver:${receiverName} (id: ${receiverId})Result:${expectedResultText}Started At:${formatDate(connectionCheckStartedAt)}${connectionCheckStartedAt.toISOString()}Time to complete:${durationFormatShort(connectionCheckCompletedAt, connectionCheckStartedAt)}Result message:${connectionCheckResult}`;

await expect(overlay).toBeVisible();
await expect(overlay).toHaveText(expectedModalText);

await overlay.press("Escape");
}
}
}

if (isSmoke && i === 0) {
break;
}
}

return true;
}

async testReceiverLinks(isSmoke = false) {
const rows = this.receiverStatusRowsLocator;

for (const [i, { receiverName }] of this.timePeriodData.entries()) {
const row = rows.nthCustom(i);

const link = row.title.getByRole("link", {
name: receiverName,
});
await expect(link).toBeVisible();
await link.click();
await expect(this.page).toHaveURL(
this.getExpectedStatusReceiverUrl(i),
);
await this.page.goBack();

if (isSmoke && i === 0) {
break;
}
}

return true;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { tableRows } from "../../../helpers/utils";
import { LastMileFailuresPage } from "../../../pages/authenticated/last-mile-failures";
import { test as baseTest, expect } from "../../../test";
import { tableRows } from "../../../../helpers/utils";
import { LastMileFailuresPage } from "../../../../pages/authenticated/last-mile-failures";
import { test as baseTest, expect } from "../../../../test";

export interface LastMileFailuresPageFixtures {
lastMileFailuresPage: LastMileFailuresPage;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import fs from "node:fs";
import { parseFileLocation } from "../../../../src/utils/misc";
import { tableRows } from "../../../helpers/utils";
import { MOCK_GET_MESSAGE } from "../../../mocks/messages";
import { MessageDetailsPage } from "../../../pages/authenticated/message-details";
import { MessageIDSearchPage } from "../../../pages/authenticated/message-id-search";
import { mockGetHistoryReportResponse } from "../../../pages/authenticated/report-details";

import { test as baseTest, expect } from "../../../test";
import { parseFileLocation } from "../../../../../src/utils/misc";
import { tableRows } from "../../../../helpers/utils";
import { MOCK_GET_MESSAGE } from "../../../../mocks/messages";
import { MessageDetailsPage } from "../../../../pages/authenticated/message-details";
import { MessageIDSearchPage } from "../../../../pages/authenticated/message-id-search";
import { mockGetHistoryReportResponse } from "../../../../pages/authenticated/report-details";

import { test as baseTest, expect } from "../../../../test";

export interface MessageDetailsPageFixtures {
messageDetailsPage: MessageDetailsPage;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { noData, tableRows } from "../../../helpers/utils";
import { MOCK_GET_MESSAGES } from "../../../mocks/messages";
import { MessageIDSearchPage } from "../../../pages/authenticated/message-id-search";
import { openReportIdDetailPage } from "../../../pages/authenticated/submission-history";
import { noData, tableRows } from "../../../../helpers/utils";
import { MOCK_GET_MESSAGES } from "../../../../mocks/messages";
import { MessageIDSearchPage } from "../../../../pages/authenticated/message-id-search";
import { openReportIdDetailPage } from "../../../../pages/authenticated/submission-history";

import { test as baseTest, expect } from "../../../test";
import { test as baseTest, expect } from "../../../../test";

export interface MessageIDSearchPageFixtures {
messageIDSearchPage: MessageIDSearchPage;
Expand Down
Loading
Loading