Skip to content

Commit

Permalink
Merge pull request #213 from ustaxcourt/test
Browse files Browse the repository at this point in the history
Merge Sprint 39 into Master
  • Loading branch information
JessicaMarine authored May 28, 2020
2 parents 503677f + 642aa62 commit 5d28d3e
Show file tree
Hide file tree
Showing 765 changed files with 15,384 additions and 9,383 deletions.
123 changes: 80 additions & 43 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
version: 2
jobs:
bundle:
resource_class: large
docker:
- image: $AWS_ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/ef-cms-us-east-1:latest
aws_auth:
Expand Down Expand Up @@ -71,7 +72,7 @@ jobs:
aws_secret_access_key: $AWS_SECRET_ACCESS_KEY
environment:
_JAVA_OPTIONS: '-Xms1024m -Xmx2024m'
resource_class: 2xlarge
resource_class: xlarge
steps:
- attach_workspace:
at: ~/
Expand Down Expand Up @@ -102,7 +103,7 @@ jobs:
aws_secret_access_key: $AWS_SECRET_ACCESS_KEY
environment:
_JAVA_OPTIONS: '-Xms2048m -Xmx4096m'
resource_class: 2xlarge
resource_class: xlarge
steps:
- attach_workspace:
at: ~/
Expand All @@ -122,7 +123,7 @@ jobs:
aws_secret_access_key: $AWS_SECRET_ACCESS_KEY
environment:
_JAVA_OPTIONS: '-Xms2048m -Xmx4096m'
resource_class: 2xlarge
resource_class: xlarge
parallelism: 2
steps:
- attach_workspace:
Expand Down Expand Up @@ -177,8 +178,6 @@ jobs:
-Dproject.settings="web-client/sonar-project.properties" \
-Dsonar.login="${UI_SONAR_TOKEN}" \
-Dsonar.host.url="https://sonarcloud.io"
- store_artifacts:
path: ~/project/combined-coverage
e2e-pa11y:
docker:
Expand All @@ -188,7 +187,7 @@ jobs:
aws_secret_access_key: $AWS_SECRET_ACCESS_KEY
environment:
_JAVA_OPTIONS: '-Xms2048m -Xmx4096m'
resource_class: 2xlarge
resource_class: xlarge
steps:
- attach_workspace:
at: ~/
Expand Down Expand Up @@ -239,7 +238,7 @@ jobs:
aws_secret_access_key: $AWS_SECRET_ACCESS_KEY
environment:
_JAVA_OPTIONS: '-Xms1024m -Xmx2048m'
resource_class: 2xlarge
resource_class: xlarge
steps:
- attach_workspace:
at: ~/
Expand Down Expand Up @@ -276,21 +275,18 @@ jobs:
- run:
name: Build Docker Image
command: |
if [[ $(./web-api/deploy-diff.sh $ENV web-api/runtimes/puppeteer) = "true" ]]; then
cd web-api/runtimes/puppeteer && ./build.sh && cd ../../..
fi
if [[ $(./web-api/deploy-diff.sh $ENV web-api/runtimes/clamav) = "true" ]]; then
cd web-api/runtimes/clamav && ./build.sh && cd ../../..
fi
cd web-api/runtimes/puppeteer && ./build.sh && cd ../../..
cd web-api/runtimes/clamav && ./build.sh && cd ../../..
docker build -t efcms -f Dockerfile .
- run:
name: Setup Dynamsoft Keys
command: echo "export DYNAMSOFT_PRODUCT_KEYS='$(./get-keys.sh $CIRCLE_BRANCH)'" >> $BASH_ENV
- run:
name: Setup ES Instance Count
command: echo "export ES_INSTANCE_COUNT='$(./get-es-instance-count.sh $CIRCLE_BRANCH)'" >> $BASH_ENV
- run:
name: Setup Honeybadger Keys
command: echo "export CIRCLE_HONEYBADGER_API_KEY='$(./get-honeybadger-keys.sh $CIRCLE_BRANCH)'" >> $BASH_ENV
- run:
name: 'Deploy - Web API - Terraform'
command: docker run -e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" -e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" -e "COGNITO_SUFFIX=${COGNITO_SUFFIX}" -e "EFCMS_DOMAIN=${EFCMS_DOMAIN}" -e "SES_DMARC_EMAIL=${SES_DMARC_EMAIL}" -e "ES_INSTANCE_COUNT=${ES_INSTANCE_COUNT}" --rm efcms /bin/sh -c "cd web-api/terraform/main && ../bin/deploy-app.sh ${ENV}"
Expand All @@ -315,24 +311,18 @@ jobs:
- run:
name: Build Docker Image
command: |
if [[ $(./web-api/deploy-diff.sh $ENV web-api/runtimes/puppeteer) = "true" ]]; then
cd web-api/runtimes/puppeteer && ./build.sh && cd ../../..
fi
if [[ $(./web-api/deploy-diff.sh $ENV web-api/runtimes/clamav) = "true" ]]; then
cd web-api/runtimes/clamav && ./build.sh && cd ../../..
fi
cd web-api/runtimes/puppeteer && ./build.sh && cd ../../..
cd web-api/runtimes/clamav && ./build.sh && cd ../../..
docker build -t efcms -f Dockerfile .
- run:
name: Setup Honeybadger Keys
command: echo "export CIRCLE_HONEYBADGER_API_KEY='$(./get-honeybadger-keys.sh $CIRCLE_BRANCH)'" >> $BASH_ENV
- run:
name: 'Deploy - Web API - Layers - Puppeteer - us-east-1'
command: if [[ $(./web-api/deploy-diff.sh $ENV web-api/runtimes/puppeteer) = "true" ]]; then docker run -e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" -e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" -e "EFCMS_DOMAIN=${EFCMS_DOMAIN}" --rm efcms /bin/sh -c "./web-api/run-serverless-puppeteer.sh ${ENV} us-east-1"; fi;
command: docker run -e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" -e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" -e "EFCMS_DOMAIN=${EFCMS_DOMAIN}" --rm efcms /bin/sh -c "./web-api/run-serverless-puppeteer.sh ${ENV} us-east-1"
- run:
name: 'Deploy - Web API - Layers - ClamAV - us-east-1'
command: if [[ $(./web-api/deploy-diff.sh $ENV web-api/runtimes/clamav) = "true" ]]; then docker run -e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" -e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" -e "EFCMS_DOMAIN=${EFCMS_DOMAIN}" --rm efcms /bin/sh -c "./web-api/run-serverless-clamav.sh ${ENV} us-east-1"; fi;
command: docker run -e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" -e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" -e "EFCMS_DOMAIN=${EFCMS_DOMAIN}" --rm efcms /bin/sh -c "./web-api/run-serverless-clamav.sh ${ENV} us-east-1"
- run:
name: 'Deploy - Web API - Serverless - Public API - us-east-1'
command: docker run -e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" -e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" -e "EFCMS_DOMAIN=${EFCMS_DOMAIN}" -e "CIRCLE_HONEYBADGER_API_KEY=${CIRCLE_HONEYBADGER_API_KEY}" -v $(pwd)/.cache:/home/app/.cache --rm efcms /bin/sh -c "./web-api/run-serverless-public-api.sh ${ENV} us-east-1"
Expand Down Expand Up @@ -399,24 +389,18 @@ jobs:
- run:
name: Build Docker Image
command: |
if [[ $(./web-api/deploy-diff.sh $ENV web-api/runtimes/puppeteer) = "true" ]]; then
cd web-api/runtimes/puppeteer && ./build.sh && cd ../../..
fi
if [[ $(./web-api/deploy-diff.sh $ENV web-api/runtimes/clamav) = "true" ]]; then
cd web-api/runtimes/clamav && ./build.sh && cd ../../..
fi
cd web-api/runtimes/puppeteer && ./build.sh && cd ../../..
cd web-api/runtimes/clamav && ./build.sh && cd ../../..
docker build -t efcms -f Dockerfile .
- run:
name: Setup Honeybadger Keys
command: echo "export CIRCLE_HONEYBADGER_API_KEY='$(./get-honeybadger-keys.sh $CIRCLE_BRANCH)'" >> $BASH_ENV
- run:
name: 'Deploy - Web API - Layers - Puppeteer - us-west-1'
command: if [[ $(./web-api/deploy-diff.sh $ENV web-api/runtimes/puppeteer) = "true" ]]; then docker run -e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" -e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" -e "EFCMS_DOMAIN=${EFCMS_DOMAIN}" --rm efcms /bin/sh -c "./web-api/run-serverless-puppeteer.sh ${ENV} us-west-1"; fi;
command: docker run -e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" -e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" -e "EFCMS_DOMAIN=${EFCMS_DOMAIN}" --rm efcms /bin/sh -c "./web-api/run-serverless-puppeteer.sh ${ENV} us-west-1"
- run:
name: 'Deploy - Web API - Layers - ClamAV - us-west-1'
command: if [[ $(./web-api/deploy-diff.sh $ENV web-api/runtimes/clamav) = "true" ]]; then docker run -e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" -e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" -e "EFCMS_DOMAIN=${EFCMS_DOMAIN}" --rm efcms /bin/sh -c "./web-api/run-serverless-clamav.sh ${ENV} us-west-1"; fi;
command: docker run -e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" -e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" -e "EFCMS_DOMAIN=${EFCMS_DOMAIN}" --rm efcms /bin/sh -c "./web-api/run-serverless-clamav.sh ${ENV} us-west-1"
- run:
name: 'Deploy - Web API - Serverless - Public API - us-west-1'
command: docker run -e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" -e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" -e "EFCMS_DOMAIN=${EFCMS_DOMAIN}" -e "CIRCLE_HONEYBADGER_API_KEY=${CIRCLE_HONEYBADGER_API_KEY}" -v $(pwd)/.cache:/home/app/.cache --rm efcms /bin/sh -c "./web-api/run-serverless-public-api.sh ${ENV} us-west-1"
Expand Down Expand Up @@ -477,14 +461,8 @@ jobs:
- run:
name: Build Docker Image
command: |
if [[ $(./web-api/deploy-diff.sh $ENV web-api/runtimes/puppeteer) = "true" ]]; then
cd web-api/runtimes/puppeteer && ./build.sh && cd ../../..
fi
if [[ $(./web-api/deploy-diff.sh $ENV web-api/runtimes/clamav) = "true" ]]; then
cd web-api/runtimes/clamav && ./build.sh && cd ../../..
fi
cd web-api/runtimes/puppeteer && ./build.sh && cd ../../..
cd web-api/runtimes/clamav && ./build.sh && cd ../../..
docker build -t efcms -f Dockerfile .
- run:
name: Setup Honeybadger Keys
Expand Down Expand Up @@ -522,9 +500,68 @@ jobs:
- run:
name: 'Deploy - Web API - Cognito Customize'
command: docker run -e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" -e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" --rm efcms /bin/sh -c "cd web-api && ./setup-cognito-ui.sh ${ENV}"
- run:
name: 'Deploy - Web API - Cognito Create Users'
command: |
if [ "${CIRCLE_BRANCH}" != "migration" ] && [ "${CIRCLE_BRANCH}" != "master"]; then
docker run -e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" -e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" -e "USTC_ADMIN_PASS=${USTC_ADMIN_PASS}" --rm efcms /bin/sh -c "cd web-api && ./setup-cognito-users.sh ${ENV}"
else
echo "skipping…"
fi
- run:
name: 'Deploy - Web API - Cognito Create Court Users'
command: |
if [ "${CIRCLE_BRANCH}" != "migration" ] && [ "${CIRCLE_BRANCH}" != "master"]; then
docker run -e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" -e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" -e "USTC_ADMIN_PASS=${USTC_ADMIN_PASS}" --rm efcms /bin/sh -c "cd web-api && ./setup-court-users.sh ${ENV}"
else
echo "skipping…"
fi
- run:
name: 'Deploy - Web API - Cognito Create IRS User'
command: |
if [ "${CIRCLE_BRANCH}" != "migration" ] && [ "${CIRCLE_BRANCH}" != "master"]; then
docker run -e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" -e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" -e "USTC_ADMIN_PASS=${USTC_ADMIN_PASS}" --rm efcms /bin/sh -c "cd web-api && ./setup-irs-user.sh ${ENV}"
else
echo "skipping…"
fi
- run:
name: 'Deploy - Web API - Run Migrations'
command: docker run -e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" -e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" -e "DYNAMODB_ENDPOINT=dynamodb.us-east-1.amazonaws.com" --rm efcms /bin/sh -c "npm run build:assets && ./web-api/run-umzug.sh ${ENV}"
- run:
name: 'Deploy - Web API - Smoke Tests - us-east-1'
command: |
if [ "${CIRCLE_BRANCH}" != "migration" ] && [ "${CIRCLE_BRANCH}" != "master"]; then
docker run -e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" -e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" --rm efcms /bin/sh -c "cd web-api && node smoke-tests.js ${ENV} us-east-1"
else
echo "skipping…"
fi
- run:
name: 'Deploy - Web API - Smoke Tests - us-west-1'
command: |
if [ "${CIRCLE_BRANCH}" != "migration" ] && [ "${CIRCLE_BRANCH}" != "master"]; then
docker run -e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" -e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" --rm efcms /bin/sh -c "cd web-api && node smoke-tests.js ${ENV} us-west-1"
else
echo "skipping…"
fi
- run:
name: 'Deploy - Cypress Smoke Tests'
command: |
if [ "${CIRCLE_BRANCH}" != "migration" ] && [ "${CIRCLE_BRANCH}" != "master"]; then
docker run -e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" -e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" --rm efcms /bin/sh -c "CYPRESS_BASE_URL='https://ui-$ENV.$EFCMS_DOMAIN' ENV=${ENV} npm run cypress:smoketests"
else
echo "skipping…"
fi
- run:
name: 'Deploy - Pa11y Smoke Tests'
command: |
if [ "${CIRCLE_BRANCH}" != "migration" ] && [ "${CIRCLE_BRANCH}" != "master"]; then
docker run -e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" -e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" -e "EFCMS_DOMAIN=${EFCMS_DOMAIN}" --rm efcms /bin/sh -c "ENV=${ENV} npm run test:pa11y:smoketests"
else
echo "skipping…"
fi
- run:
name: 'Deploy - Cognito Authorizer Check'
command: docker run -e "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}" -e "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}" -e "EFCMS_DOMAIN=${EFCMS_DOMAIN}" --rm efcms /bin/sh -c "find web-api/*.yml | ENV=${ENV} xargs node web-api/verify-authorizers.js"
- store_artifacts:
path: /home/app/cypress-smoketests/videos/

Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ web-api/runtimes/clamav/clamav_lambda_layer.tar.gz
web-api/runtimes/clamav/lib
web-api/storage/s3/*
web-api/terraform/template/cognito-triggers/index.js.zip
web-api/terraform/template/cognito-authorizer/index.js.zip
web-api/terraform/template/log-forwarder/index.js.zip
web-client/.cache/
web-client/coverage-e2e
web-client/coverage-integration/*
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM cypress/base:12.13.0
FROM cypress/base:12.16.0

RUN echo "recache again"

Expand Down
4 changes: 2 additions & 2 deletions Dockerfile-CI
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM cypress/base:12.13.0
FROM cypress/base:12.16.0

WORKDIR /home/app/ef-cms

Expand All @@ -24,4 +24,4 @@ RUN apt-get install -y gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libc
git bash openssh-client python python-dev python-pip python-setuptools ca-certificates less \
unzip wget jq shellcheck clamav

RUN freshclam
RUN freshclam
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ The backlog is stored [in GitHub Issues in Flexion’s repository](https://githu

To exercise the CI/CD pipeline locally, run the following:

`./test-all.sh`
`./docker-test-all.sh`

This will run the linter, Shellcheck, audit, build, test, Cypress, Cerebral tests, Pa11y, etc. over all the components.

Expand Down
31 changes: 6 additions & 25 deletions cypress/integration/petitions-clerk-creates-a-case.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,31 +22,12 @@ describe('Create case and submit to IRS', function () {

fillInCreateCaseFromPaperForm();

cy.server();
cy.route('POST', '**/paper').as('postPaperCase');
cy.get('#submit-case').click();
});

it('should display a create case header', () => {
const banner = cy.get('.big-blue-header');
banner.contains('Create Case');
});

it('should display a tile for party information, case information, irs notice, and attachments each with edit buttons', () => {
cy.get('#parties-card').contains('Parties').find('button');

cy.get('#case-information-card')
.contains('Case Information')
.find('button');

cy.get('#irs-notice-card').contains('IRS Notice').find('button');

cy.get('#attachments-card').contains('Attachments').find('button');
});

it('should display serve to irs button', () => {
cy.get('#submit-case').should('exist');
});

it('should display save for later button', () => {
cy.get('#save-for-later').should('exist');
cy.wait('@postPaperCase');
cy.get('@postPaperCase').should(xhr => {
expect(xhr.responseBody).to.have.property('docketNumber');
});
});
});
8 changes: 4 additions & 4 deletions cypress/integration/start-a-case-practitioner.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ describe('Start a case as a practitioner ', () => {
cy.task('seed');
});

it('go to the practitioner dashboard and expect that a case list table is displayed with 2 cases', () => {
it('go to the practitioner dashboard and expect that a case list table is displayed with 3 cases', () => {
navigateToDashboard('privatePractitioner');
getCaseList().should('have.length', 2);
getCaseList().should('have.length', 3);
});

it('click the start a case button', () => {
Expand All @@ -24,8 +24,8 @@ describe('Start a case as a practitioner ', () => {
fillInAndSubmitForm();
});

it('expect the case list to be displayed with 3 items now', () => {
it('expect the case list to be displayed with 4 items now', () => {
getCaseList().should('exist');
getCaseList().should('have.length', 3);
getCaseList().should('have.length', 4);
});
});
10 changes: 9 additions & 1 deletion docker-test-all.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,23 @@

# This runs the same build steps that run in Circle, except sonar
rm -rf node_modules dist .elasticsearch .dynamodb
npm i
npm ci

docker build -t efcms -f Dockerfile .

docker run --rm efcms /bin/sh -c 'npm run lint'

docker run --rm efcms /bin/sh -c './run-shellcheck.sh'

docker run -v "$(pwd)/shared/coverage:/home/app/shared/coverage" --rm efcms /bin/sh -c 'npm run test:shared'

docker run -v "$(pwd)/web-api/coverage:/home/app/web-api/coverage" --rm efcms /bin/sh -c 'npm run test:api'

docker run -v "$(pwd)/web-client/coverage:/home/app/web-client/coverage" --rm -e SKIP_CACHE_INVALIDATION=true efcms /bin/sh -c \
'(npm run start:api &) && ./wait-until.sh http://localhost:3000/api/swagger && npm run test:client'

docker run --rm -e SKIP_CACHE_INVALIDATION=true -e AWS_ACCESS_KEY_ID=noop -e AWS_SECRET_ACCESS_KEY=noop efcms /bin/sh -c \
'(npx run-p start:api start:client:ci &) && ./wait-until.sh http://localhost:3000/api/swagger && ./wait-until.sh http://localhost:1234 && npm run test:pa11y'

docker run --rm -e SKIP_CACHE_INVALIDATION=true -e SLS_DEBUG=* -e AWS_ACCESS_KEY_ID=noop -e AWS_SECRET_ACCESS_KEY=noop efcms /bin/sh -c \
'(npx run-p start:api start:client:ci &) && ./wait-until.sh http://localhost:3000/api/swagger && ./wait-until.sh http://localhost:1234 && npm run cypress'
22 changes: 22 additions & 0 deletions docs/CASE_NAMES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Case Names

There are several values used throughout the system to identify cases by name.

`caseCaptionWithPostfix`:
* Not stored directly on the case but can be computed when needed by appending the `CASE_CAPTION_POSTFIX` constant to the `caseCaption`
* Example: `Selma Horn & Cairo Harris, Petitioners v. Commissioner of Internal Revenue, Respondent`

`caseCaption`:
* The only computed name value stored directly on the case in persistence
* Example: `Selma Horn & Cairo Harris, Petitioners`

`caseTitle`:
* Not stored directly on the case - use method `Case.getCaseTitle(caseCaption)` to retrieve value
* Displayed in tables and work queues in the UI to identify a case for internal users
* Persisted on work items to be displayed in the work queues to eliminate the need to retrieve the value from each individual case
* Example: `Selma Horn & Cairo Harris`

`caseCaptionExtension`:
* Not stored on the case, but can be computed by getting the `caseTitle` and replacing it with '' in the `caseCaption`
* Typically used in PDFs for proper case caption placement
* Example: `Petitioner(s)`
Loading

0 comments on commit 5d28d3e

Please sign in to comment.