diff --git a/.circleci/config.yml b/.circleci/config.yml index 8744b04c2ac..c19ae164ca7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -53,7 +53,7 @@ references: # set integration-mtls-ignore-branch to the branch if you want to # IGNORE mtls integration tests, or `placeholder_branch_name` if you # do want to run them - integration-mtls-ignore-branch: &integration-mtls-ignore-branch placeholder_branch_name + integration-mtls-ignore-branch: &integration-mtls-ignore-branch integrationTesting # set client-ignore-branch to the branch if you want to IGNORE # client tests, or `placeholder_branch_name` if you do want to run @@ -897,8 +897,8 @@ commands: export FEATURE_FLAG_MANAGE_SUPPORTING_DOCS=false export FEATURE_FLAG_THIRD_ADDRESS_AVAILABLE=false export FEATURE_FLAG_QUEUE_MANAGEMENT=false - export FEATURE_FLAG_UNACCOMPANIED_BAGGAGE=false export FEATURE_FLAG_ENABLE_ALASKA=false + export FEATURE_FLAG_UNACCOMPANIED_BAGGAGE=false export FEATURE_FLAG_ENABLE_HAWAII=false export FEATURE_FLAG_BULK_ASSIGNMENT=false @@ -945,6 +945,7 @@ commands: FEATURE_FLAG_UNACCOMPANIED_BAGGAGE: 'false' FEATURE_FLAG_ENABLE_ALASKA: 'false' FEATURE_FLAG_BULK_ASSIGNMENT: 'false' + command: | SHARD=$((${CIRCLE_NODE_INDEX}+1)) PLAYWRIGHT_JUNIT_OUTPUT_NAME=playwright-results.xml \ @@ -1546,7 +1547,7 @@ jobs: # # The trailing hyphen in restore_cache seems important # according to the page linked above - - v11-server-tests-coverage- + - v1-server-tests-coverage-integration - run: name: Ensure Test Coverage Increasing command: | @@ -1585,7 +1586,7 @@ jobs: - when: condition: and: - - equal: [main, << pipeline.git.branch >>] + - equal: [integrationTesting, << pipeline.git.branch >>] - when: always steps: - run: @@ -1602,7 +1603,7 @@ jobs: # Use the BuildNum to update the cache key so that the # coverage cache is always updated - save_cache: - key: v11-server-tests-coverage-{{ .BuildNum }} + key: v1-server-tests-coverage-integration{{ .BuildNum }} paths: - ~/transcom/mymove/tmp/baseline-go-coverage when: always @@ -1664,8 +1665,12 @@ jobs: - checkout - attach_workspace: at: . - - restore_cache: - # + - when: + condition: + equal: [integrationTesting, << pipeline.git.branch >>] + steps: + - restore_cache: + # # https://circleci.com/docs/caching/#restoring-cache # # restore the latest version of the test coverage in the @@ -1682,8 +1687,8 @@ jobs: # # The trailing hyphen in restore_cache seems important # according to the page linked above - keys: - - v8-client-tests-coverage- + keys: + - v1-client-tests-coverage-integration - run: name: Ensure Test Coverage Increasing command: | @@ -1720,7 +1725,7 @@ jobs: - when: condition: and: - - equal: [main, << pipeline.git.branch >>] + - equal: [integrationTesting, << pipeline.git.branch >>] steps: - run: name: 'Copy coverage to baseline' @@ -1735,7 +1740,7 @@ jobs: # Use the BuildNum to update the cache key so that the # coverage cache is always updated - save_cache: - key: v8-client-tests-coverage-{{ .BuildNum }} + key: v1-client-tests-coverage-integration{{ .BuildNum }} paths: - ~/transcom/mymove/tmp/baseline-jest-coverage when: always @@ -1752,7 +1757,6 @@ jobs: --value "${coverage}" \ --timestamp "${timestamp}" when: always - # Compile the server side of the app once and persist the relevant # build artifacts to the workspace. # This way we don't have to re-run the build and since all necessary @@ -2780,4 +2784,4 @@ experimental: notify: branches: only: - - main + - main \ No newline at end of file diff --git a/.envrc b/.envrc index 32fd448864a..d833ec770e4 100644 --- a/.envrc +++ b/.envrc @@ -220,9 +220,9 @@ export DEVLOCAL_AUTH=true export DOD_CA_PACKAGE="${MYMOVE_DIR}/config/tls/milmove-cert-bundle.p7b" # MyMove client certificate -# All of our DoD-signed certs are currently signed by DOD SW CA-75 +# All of our DoD-signed certs are currently signed by DOD SW CA-66 # This cannot be changed unless our certs are all resigned -MOVE_MIL_DOD_CA_CERT=$(cat "${MYMOVE_DIR}"/config/tls/dod-sw-ca-75.pem) +MOVE_MIL_DOD_CA_CERT=$(cat "${MYMOVE_DIR}"/config/tls/dod-sw-ca-66.pem) require MOVE_MIL_DOD_TLS_CERT "See 'DISABLE_AWS_VAULT_WRAPPER=1 AWS_REGION=us-gov-west-1 aws-vault exec transcom-gov-dev -- chamber read app-devlocal move_mil_dod_tls_cert'" require MOVE_MIL_DOD_TLS_KEY "See 'DISABLE_AWS_VAULT_WRAPPER=1 AWS_REGION=us-gov-west-1 aws-vault exec transcom-gov-dev -- chamber read app-devlocal move_mil_dod_tls_key'" export MOVE_MIL_DOD_CA_CERT @@ -232,19 +232,22 @@ export TZ="UTC" # AWS development access # -# To use S3/SES for local builds, you'll need to uncomment the following. +# To use S3/SES or SNS & SQS for local builds, you'll need to uncomment the following. # Do not commit the change: # # export STORAGE_BACKEND=s3 # export EMAIL_BACKEND=ses +# export RECEIVER_BACKEND=sns_sqs # # Instructions for using S3 storage backend here: https://dp3.atlassian.net/wiki/spaces/MT/pages/1470955567/How+to+test+storing+data+in+S3+locally # Instructions for using SES email backend here: https://dp3.atlassian.net/wiki/spaces/MT/pages/1467973894/How+to+test+sending+email+locally +# Instructions for using SNS&SQS backend here: https://dp3.atlassian.net/wiki/spaces/MT/pages/2793242625/How+to+test+notifications+receiver+locally # # The default and equivalent to not being set is: # # export STORAGE_BACKEND=local # export EMAIL_BACKEND=local +# export RECEIVER_BACKEND=local # # Setting region and profile conditionally while we migrate from com to govcloud. if [ "$STORAGE_BACKEND" == "s3" ]; then @@ -258,6 +261,13 @@ export AWS_S3_KEY_NAMESPACE=$USER export AWS_SES_DOMAIN="devlocal.dp3.us" export AWS_SES_REGION="us-gov-west-1" +if [ "$RECEIVER_BACKEND" == "sns_sqs" ]; then + export SNS_TAGS_UPDATED_TOPIC="app_s3_tag_events" + export SNS_REGION="us-gov-west-1" +# cleanup flag false by default, only used at server startup to wipe receiver artifacts from previous runs +# export RECEIVER_CLEANUP_ON_START=false +fi + # To use s3 links aws-bucketname/xx/user/ for local builds, # you'll need to add the following to your .envrc.local: # @@ -444,4 +454,4 @@ then fi # Check that all required environment variables are set -check_required_variables \ No newline at end of file +check_required_variables diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c0be88a7dfa..3554334587e 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -6,4 +6,39 @@ # owners will be requested for a review. # Add language specific code owners if it becomes relevant -* @transcom/codeowners +# database team +/migrations/ @transcom/cacidatabaseteam +/pkg/assets/sql_scripts/ @transcom/cacidatabaseteam + +# backend team +/pkg/ @transcom/cacibackendteam +/swagger-def/ @transcom/cacibackendteam +*.go @transcom/cacibackendteam + + +# frontend team +/src/ @transcom/cacifrontendteam +/playwright/tests/ @transcom/cacifrontendteam + + +## not required for team specific review as prime UI is not deployed to production app +src/components/PrimeUI/ +src/pages/PrimeUI/ + + +# Require tech lead review for changes to the following files +.golangci.yml @transcom/codeowners +.pre-commit-config.yaml @transcom/codeowners +.eslintrc.js @transcom/codeowners +/eslint-plugin-ato/ @transcom/codeowners +/pkg/ato-linter/ @transcom/codeowners +/scripts/ @transcom/codeowners +/.circleci/config.yml @transcom/codeowners +/config/ @transcom/codeowners +Dockerfile* @transcom/codeowners +Brewfile* @transcom/codeowners +/Makefile @transcom/codeowners +package.json @transcom/codeowners +go.mod @transcom/codeowners +/github/ @transcom/codeowners +docker-compose* @transcom/codeowners \ No newline at end of file diff --git a/.github/workflows/happo-tests.yml b/.github/workflows/happo-tests.yml index 574ce9ba248..434dafcf738 100644 --- a/.github/workflows/happo-tests.yml +++ b/.github/workflows/happo-tests.yml @@ -2,7 +2,7 @@ name: Happo CI on: pull_request: - branches: [main] + branches: [main,integrationTesting] jobs: changes: diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f83d084326b..0154965696a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,7 +8,7 @@ variables: #Docker config DOCKER_AUTH_CONFIG: "{\"auths\":{\"https://index.docker.io/v1/\":{\"auth\":\"$CI_REGISTRY_USER:$CI_REGISTRY_PASSWORD\"}}}" - #hard code sha as newer version of debian is needed for pre-test + DOCKER_APP_IMAGE: milmove01/transcom-docker:milmove-app DOCKER_BASE_IMAGE: milmove01/transcom-docker:base DOCKERHUB_USERNAME: DOCKERHUB_USERNAME @@ -30,16 +30,16 @@ variables: GOLANGCI_LINT_VERBOSE: "-v" # Specify the environment: loadtest, demo, exp - DP3_ENV: &dp3_env placeholder_env + DP3_ENV: &dp3_env loadtest # Specify the branch to deploy TODO: this might be not needed. So far useless - DP3_BRANCH: &dp3_branch placeholder_branch_name + DP3_BRANCH: &dp3_branch integrationTesting # Ignore branches for integration tests - INTEGRATION_IGNORE_BRANCH: &integration_ignore_branch placeholder_branch_name - INTEGRATION_MTLS_IGNORE_BRANCH: &integration_mtls_ignore_branch placeholder_branch_name - CLIENT_IGNORE_BRANCH: &client_ignore_branch placeholder_branch_name - SERVER_IGNORE_BRANCH: &server_ignore_branch placeholder_branch_name + INTEGRATION_IGNORE_BRANCH: &integration_ignore_branch integrationTesting + INTEGRATION_MTLS_IGNORE_BRANCH: &integration_mtls_ignore_branch integrationTesting + CLIENT_IGNORE_BRANCH: &client_ignore_branch integrationTesting + SERVER_IGNORE_BRANCH: &server_ignore_branch integrationTesting OTEL_IMAGE_TAG: &otel_image_tag "git-$OTEL_VERSION-$CI_COMMIT_SHORT_SHA" @@ -2043,4 +2043,4 @@ deploy_app_prd: after_script: - *announce_failure rules: - - *check_main \ No newline at end of file + - *check_main diff --git a/Dockerfile b/Dockerfile index 293ea88db39..a786a03f4db 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,4 +30,4 @@ ENTRYPOINT ["/bin/milmove"] CMD ["serve", "--logging-level=debug"] -EXPOSE 8080 +EXPOSE 8080 \ No newline at end of file diff --git a/Dockerfile.local b/Dockerfile.local index 225bb958ab1..b63c28920d1 100644 --- a/Dockerfile.local +++ b/Dockerfile.local @@ -27,7 +27,8 @@ COPY --from=builder --chown=root:root /home/circleci/project/bin/rds-ca-2019-roo COPY --from=builder --chown=root:root /home/circleci/project/bin/milmove /bin/milmove COPY config/tls/milmove-cert-bundle.p7b /config/tls/milmove-cert-bundle.p7b -COPY config/tls/dod-sw-ca-66.pem /config/tls/dod-sw-ca-75.pem +COPY config/tls/dod-sw-ca-75.pem /config/tls/dod-sw-ca-75.pem +COPY config/tls/dod-sw-ca-66.pem /config/tls/dod-sw-ca-66.pem # While it's ok to have these certs copied locally, they should never be copied into Dockerfile. COPY config/tls/devlocal-ca.key /config/tls/devlocal-ca.key diff --git a/artifacts/accessibilityReport.html b/artifacts/accessibilityReport.html index e924f8add49..ad29b4c03da 100644 --- a/artifacts/accessibilityReport.html +++ b/artifacts/accessibilityReport.html @@ -87,7 +87,7 @@
duplicate-id | WCAG 2 Level A, WCAG 4.1.1 | minor | -1 | +8 | |
2 | +Heading levels should only increase by one | +heading-order | +Best practice | +moderate | +1 | +
---|---|---|---|---|---|
3 | +Links must be distinguishable without relying on color | +link-in-text-block | +WCAG 2 Level A, WCAG 1.4.1 | +serious | +1 | +
4 | +Page should contain a level-one heading | +page-has-heading-one | +Best practice | +moderate | +1 | +
5 | All page content should be contained by landmarks | region | Best practice | @@ -172,7 +196,7 @@
@@ -185,6 +209,360 @@
#app-root > .TitleAnnouncer_HiddenTitleAnnouncer__IxWhC[aria-live="polite"] |
|
2 | +
+ Element location +
+ Element source +
+ |
+
+
+
+ Fix any of the following: +
Related node: +
+
+
+ |
+ |||
3 | +
+ Element location +
+ Element source +
+ |
+
+
+
+ Fix any of the following: +
Related node: +
+
+
+ |
+ |||
4 | +
+ Element location +
+ Element source +
+ |
+
+
+
+ Fix any of the following: +
Related node: +
+
+
+ |
+ |||
5 | +
+ Element location +
+ Element source +
+ |
+
+
+
+ Fix any of the following: +
Related node: +
+
+
+ |
+ |||
6 | +
+ Element location +
+ Element source +
+ |
+
+
+
+ Fix any of the following: +
Related node: +
+
+
+ |
+ |||
7 | +
+ Element location +
+ Element source +
+ |
+
+
+
+ Fix any of the following: +
Related node: +
+
+
+ |
+ |||
8 | +
+ Element location +
+ Element source +
+ |
+
+
+
+ Fix any of the following: +
Related node: +
+
+
+ |
+
Ensures the order of headings is semantically correct
+# | +Issue Description | ++ To solve this violation, you need to... + | +
---|---|---|
1 | +
+ Element location +
+ Element source +
+ |
+
+
+
+ Fix any of the following: +
|
+
Ensure links are distinguished from surrounding text in a way that does not rely on color
+# | +Issue Description | ++ To solve this violation, you need to... + | +
---|---|---|
1 | +
+ Element location +
+ Element source +
+ |
+
+
+
+ Fix any of the following: +
Related node: +
+
+ |
+
Ensure that the page, or at least one of its frames contains a level-one heading
+# | +Issue Description | ++ To solve this violation, you need to... + | +
---|---|---|
1 | +
+ Element location +
+ Element source +
+ |
+
+
+
+ Fix all of the following: +
|
+
*** DO NOT REPLY directly to this email ***
+This is a confirmation that your counselor has approved move details for the assigned move code abc123 from origDutyLocation to destDutyLocation in the MilMove system.
+What this means to you: If you are doing a Personally Procured Move (PPM), you can start moving your personal property.
+Next steps for a PPM:
Next steps for government arranged shipments:
Thank you,
USTRANSCOM MilMove Team
The information contained in this email may contain Privacy Act information and is therefore protected under the Privacy Act of 1974. Failure to protect Privacy Act information could result in a $5,000 fine.
` htmlContent, err := notification.RenderHTML(suite.AppContextWithSessionForTest(&auth.Session{ @@ -99,9 +104,12 @@ func (suite *NotificationSuite) TestMoveCounseledTextTemplateRender() { } expectedTextContent := `*** DO NOT REPLY directly to this email *** + This is a confirmation that your counselor has approved move details for the assigned move code abc123 from origDutyLocation to destDutyLocation in the MilMove system. + What this means to you: If you are doing a Personally Procured Move (PPM), you can start moving your personal property. + Next steps for a PPM: * Remember to get legible certified weight tickets for both the empty and full weights for every trip you perform. If you do not upload legible certified weight tickets, your PPM incentive (or Actual Expense Reimbursement for Civilians) could be affected. Failure to obtain weight tickets will result in losing eligibility to receive your incentive. Note: To receive allowance for Pro-Gear, you must identify allowable items and provide weight tickets separately for Pro-Gear. @@ -110,12 +118,15 @@ Note: To receive allowance for Pro-Gear, you must identify allowable items and p * Storage costs cannot be paid in advance. * If your counselor approved an Advance Operating Allowance (AOA, or cash advance) for a PPM, log into MilMove{content}
-User | +Workload | +Assignment | +
---|---|---|
+ {userName(user)} + |
+
+ {user.workload || 0} + |
+ + + | +
Do you want movers to pick up any belongings from a third address?
@@ -414,9 +415,15 @@ class MtoShipmentForm extends Component { data-testid="has-tertiary-pickup" label="Yes" name="hasTertiaryPickup" - value="yes" + value="true" title="Yes, I have a third pickup address" - checked={hasTertiaryPickup === 'yes'} + checked={hasTertiaryPickup === 'true'} + disabled={ + !isPreceedingAddressComplete( + hasSecondaryPickup, + values.secondaryPickup.address, + ) + } />Do you want movers to deliver any belongings to a third address?
@@ -569,9 +584,15 @@ class MtoShipmentForm extends Component { data-testid="has-tertiary-delivery" label="Yes" name="hasTertiaryDelivery" - value="yes" + value="true" title="Yes, I have a third delivery address" - checked={hasTertiaryDelivery === 'yes'} + checked={hasTertiaryDelivery === 'true'} + disabled={ + !isPreceedingAddressComplete( + hasSecondaryDelivery, + values.secondaryDelivery.address, + ) + } />
We can use the zip of your new duty location.
@@ -616,7 +643,7 @@ class MtoShipmentForm extends Component {
You can add the specific delivery address later, once you know it.
We can use the zip of the HOR, PLEAD or HOS you entered with your orders.
diff --git a/src/components/Customer/MtoShipmentForm/MtoShipmentForm.test.jsx b/src/components/Customer/MtoShipmentForm/MtoShipmentForm.test.jsx
index 424bbe04d55..4205d3e9155 100644
--- a/src/components/Customer/MtoShipmentForm/MtoShipmentForm.test.jsx
+++ b/src/components/Customer/MtoShipmentForm/MtoShipmentForm.test.jsx
@@ -388,24 +388,24 @@ describe('MtoShipmentForm component', () => {
await userEvent.click(screen.getByTitle('Yes, I have a second delivery address'));
const streetAddress1 = await screen.findAllByLabelText(/Address 1/);
- expect(streetAddress1.length).toBe(3);
- expect(streetAddress1[2]).toHaveAttribute('name', 'secondaryDelivery.address.streetAddress1');
+ expect(streetAddress1[0]).toHaveAttribute('name', 'pickup.address.streetAddress1');
+ expect(streetAddress1[1]).toHaveAttribute('name', 'delivery.address.streetAddress1');
const streetAddress2 = await screen.findAllByLabelText(/Address 2/);
- expect(streetAddress2.length).toBe(3);
- expect(streetAddress2[2]).toHaveAttribute('name', 'secondaryDelivery.address.streetAddress2');
+ expect(streetAddress2[0]).toHaveAttribute('name', 'pickup.address.streetAddress2');
+ expect(streetAddress2[1]).toHaveAttribute('name', 'delivery.address.streetAddress2');
const city = screen.getAllByTestId('City');
- expect(city.length).toBe(3);
- expect(city[2]).toHaveAttribute('aria-label', 'secondaryDelivery.address.city');
+ expect(city[0]).toHaveAttribute('aria-label', 'pickup.address.city');
+ expect(city[1]).toHaveAttribute('aria-label', 'delivery.address.city');
const state = await screen.getAllByTestId(/State/);
- expect(state.length).toBe(3);
- expect(state[2]).toHaveAttribute('aria-label', 'secondaryDelivery.address.state');
+ expect(state[0]).toHaveAttribute('aria-label', 'pickup.address.state');
+ expect(state[1]).toHaveAttribute('aria-label', 'delivery.address.state');
const zip = await screen.getAllByTestId(/ZIP/);
- expect(zip.length).toBe(3);
- expect(zip[2]).toHaveAttribute('aria-label', 'secondaryDelivery.address.postalCode');
+ expect(zip[0]).toHaveAttribute('aria-label', 'pickup.address.postalCode');
+ expect(zip[1]).toHaveAttribute('aria-label', 'delivery.address.postalCode');
});
it('goes back when the back button is clicked', async () => {
diff --git a/src/components/Customer/OrdersInfoForm/OrdersInfoForm.jsx b/src/components/Customer/OrdersInfoForm/OrdersInfoForm.jsx
index 51ca8552b27..e4ab0bf904c 100644
--- a/src/components/Customer/OrdersInfoForm/OrdersInfoForm.jsx
+++ b/src/components/Customer/OrdersInfoForm/OrdersInfoForm.jsx
@@ -36,7 +36,6 @@ const OrdersInfoForm = ({ ordersTypeOptions, initialValues, onSubmit, onBack })
const [hasDependents, setHasDependents] = useState(false);
const [isOconusMove, setIsOconusMove] = useState(false);
const [enableUB, setEnableUB] = useState(false);
-
const [isHasDependentsDisabled, setHasDependentsDisabled] = useState(false);
const [prevOrderType, setPrevOrderType] = useState('');
const [filteredOrderTypeOptions, setFilteredOrderTypeOptions] = useState(ordersTypeOptions);
diff --git a/src/components/Customer/PPM/Booking/DateAndLocationForm/DateAndLocationForm.jsx b/src/components/Customer/PPM/Booking/DateAndLocationForm/DateAndLocationForm.jsx
index ca158d027cd..f4df895c05a 100644
--- a/src/components/Customer/PPM/Booking/DateAndLocationForm/DateAndLocationForm.jsx
+++ b/src/components/Customer/PPM/Booking/DateAndLocationForm/DateAndLocationForm.jsx
@@ -21,6 +21,7 @@ import { OptionalAddressSchema } from 'components/Customer/MtoShipmentForm/valid
import { requiredAddressSchema, partialRequiredAddressSchema } from 'utils/validation';
import { isBooleanFlagEnabled } from 'utils/featureFlags';
import RequiredTag from 'components/form/RequiredTag';
+import { isSecondaryAddressCompletePPM } from 'shared/utils';
let meta = '';
@@ -276,6 +277,12 @@ const DateAndLocationForm = ({ mtoShipment, destinationDutyLocation, serviceMemb
value="true"
title="Yes, I have a third delivery address"
checked={values.hasTertiaryPickupAddress === 'true'}
+ disabled={
+ !isSecondaryAddressCompletePPM(
+ values.hasSecondaryPickupAddress,
+ values.secondaryPickupAddress.address,
+ )
+ }
/>
Download service item documentation:
+ {serviceRequestDocUploads.map((file) => ( + + ))} +Download service item documentation:
+ {serviceRequestDocUploads.map((file) => ( + + ))} +Download service item documentation:
- {serviceRequestDocUploads.map((file) => ( - - ))} -Download service item documentation:
+ {serviceRequestDocUploads.map((file) => ( + + ))} +