Skip to content

Sprint 23 #790

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

Merged
merged 14 commits into from
May 9, 2025
Merged

Sprint 23 #790

merged 14 commits into from
May 9, 2025

Conversation

jlkravitz
Copy link
Collaborator

@jlkravitz jlkravitz commented May 5, 2025

  • stand up the site locally
    • test all functionality in all major browsers, emphasizing the functionality that this pull request addresses
      • for public-facing functionality, test in browsers consistent with public browser use data
      • test in Mobile Safari and Mobile Chrome
    • use an automated audit tool for code quality and practices (recommended: Chrome DevTools, aka Lighthouse)
      • look at efficiency of page loads, asset sizes, HTTP connection management, etc.
    • review for accessibility
      • use an automated audit tool, such as Chrome Audit or aXe
      • navigate site only with the keyboard
      • use VoiceOver or Narrator to navigate the site with audio only, with the display turned off
      • manually test anything that pa11y cannot test automatically (e.g., contrast of text over images)
  • review static code analysis results, if available
  • run a security audit of dependencies (e.g. npm audit and pip audit) to ensure that there are no vulnerabilities that will be deployed to production (as opposed to vulnerabilities that only have an impact on the development environment)
  • examine OWASP ZAP output to ensure that any errors are known to be false positives or have been previously declared to be acceptable
  • for each feature-level bug (i.e., it’s working as designed, but designed wrong), open a new issue and put it in the backlog

landonshumway-ia and others added 11 commits April 23, 2025 13:08
The Docker image that is used to build the project uses Node version 18
by default, which will reach end-of-life support on 2025-04-30.

```
b'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n'
--
106 | b'!!                                                                                                                  !!\n'
107 | b'!!  Node 18 is approaching end-of-life and will no longer be supported in new releases after 2025-04-30.            !!\n'
108 | b'!!  Please upgrade to a supported node version as soon as possible.                                                 !!\n'
109 | b'!!                                                                                                                  !!\n'
110 | b'!!  This software is currently running on node v18.20.6.                                                            !!\n'
111 | b'!!  As of the current release of this software, supported node releases are:                                        !!\n'
112 | b'!!  - ^22.0.0 (Planned end-of-life: 2027-04-30)                                                                     !!\n'
113 | b'!!  - ^20.0.0 (Planned end-of-life: 2026-04-30)                                                                     !!\n'
114 | b'!!  - ^18.0.0 (Planned end-of-life: 2025-04-30) [DEPRECATED]                                                        !!\n'
115 | b'!!                                                                                                                  !!\n'
116 | b'!!  This warning can be silenced by setting the JSII_SILENCE_WARNING_DEPRECATED_NODE_VERSION environment variable.  !!\n'
117 | b'!!                                                                                                                  !!\n'
118 | b'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n'
```

This updates the CodeBuild buildspec configuration to install Node
version 22

### Testing List
- Verified pipeline synth in test environment

Closes #750 


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **Chores**
- Updated build environment to include both Python 3.12 and Node.js 22.x
during the build process.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
several jurisdictions have reported that they set different
privilege fees based on the type of license for which the
privilege record is being purchased. This deprecates the old
jurisdictionFee field in place of a 'privilegeFees' field, which
is a list of objects defining the amount for every license type
supported by the compact.

### Testing List
- tests/test data updated to reference new schema

Closes #635 


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Introduced support for jurisdiction-specific privilege fees, allowing
multiple license types with distinct fee amounts per jurisdiction.
- Added new configuration fields for privilege fees across various
jurisdictions and compacts.
- Updated API responses and schemas to include detailed privilege fee
information for each license type.

- **Bug Fixes**
- Improved validation to ensure all required license types have
corresponding privilege fees and to detect duplicates or unknown license
types.

- **Refactor**
- Deprecated the single jurisdiction fee field in favor of the new
privilege fees structure.
- Enhanced fee calculation logic to apply discounts and determine fees
by license type.
- Renamed license type properties for clarity and improved configuration
validation.

- **Tests**
- Updated test data and assertions to validate the new privilege fees
structure and deprecation of the old fee field.
- Improved test coverage for multiple license types and privilege fee
scenarios.

- **Chores**
  - Added new environment variable to smoke test configuration.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
### Requirements List
- _None_

### Description List
- Create a common style mixin for the purchase-flow button UI
- Update the purchase-flow HTML templates to support the desired tab
order of buttons
- Various HTML / style cleanup in the purchase-flow button UI
- Minor style updates to match the latest designs

### Testing List
- `yarn test:unit:all` should run without errors or warnings
- `yarn serve` should run without errors or warnings
- `yarn build` should run without errors or warnings
- Code review
- Testing
- As a practitioner who is able to purchase privileges, begin the
purchase process
- Go through the purchase forms on both mobile and desktop, making sure
the buttons at the bottom of each form still look & work as expected
from the designs (e.g. Cancel, Back, Next)
- Confirm keyboard tab navigation on each purchase form has the order of
the tab selection of the buttons at the bottom of each form order as
follows: 1) Next / Continue, 2) Back, 3) Cancel

Closes #549 


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **Style**
- Unified and improved button row styling across all purchase-related
forms for a more consistent and responsive layout.
- Primary navigation buttons (submit, back) are now grouped together and
visually separated from the cancel button in all purchase flows.
- Enhanced button alignment and spacing for better usability on both
desktop and mobile devices.
- **New Features**
- Introduced a reusable style for purchase flow buttons, ensuring
consistent appearance and behavior throughout the application.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
We have received a request to add Arkansas as an selectable state for
the Counseling Compact in the beta environment. This adds the needed
configuration file and adds the Counseling compact to the beta
environment as well.


Closes #767 


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Added a new configuration for Arkansas, enabling licensee registration
and specifying jurisdiction details.
- Introduced new access scopes related to the Counseling compact for
Arkansas.
- **Chores**
- Included placeholder data for Arkansas to support test and beta
environment setups.
- **Tests**
- Updated tests to cover the beta environment alongside the test
environment.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
### Requirements List
-

### Description List
- Updated text in front end as described by ticket
- Updated text in backend yml as described by ticket and tests

### Testing List
- `yarn test:unit:all` should run without errors or warnings
- `yarn serve` should run without errors or warnings
- `yarn build` should run without errors or warnings
- Run backend tests
- Code review
- look at the `PrivilegePurchaseSelection` screen and confirm it looks
good

Closes #621 


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **New Features**
- Updated attestation text to clarify that violations may result in
revocation of both Compact Privileges and licenses.
- **Style**
- Improved English and Spanish attestation labels to prompt users to
actively read and affirm the scope of practice.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: Dana Stiefel <[email protected]>
### Requirements List
- _None_

### Description List
- Update button labels on the public dashboard
- Update registration page form
    - Re-order inputs
    - Update labels
    - Add descriptive text
    - Remove some input placeholders
- Add return-to-dashboard link to registration success UI
- Toggle off html warning in i18n (translations are not user generated;
and we need to access to sub elements)
- Update CSS reset to support basic emphasis element styling

### Testing List
- `yarn test:unit:all` should run without errors or warnings
- `yarn serve` should run without errors or warnings
- `yarn build` should run without errors or warnings
- Code review
- Public Dashboard page
- Applicable buttons should now say "Practitioner" (rather than
"Provider")
- Staff login should now be labeled "Login as Compact or State Staff"
- Registration page
    - Added helpful subtext above form
- Changed name fields to be labeled "First name" / "Last name" (rather
than "given" / "family")
    - Removed input placeholder text from:
        - First name & Last name
        - Last 4 of SSN
        - Email
    - Changed email label to "Email" (rather than "Email address")
    - Added helpful subtext below email input
    - On registration success, added a "Go to dashboard" button link

Closes #646 
Closes #740 


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **New Features**
- Added new explanatory subtext elements to the licensee registration
form, providing clearer guidance for users.
- Introduced a navigation link to the public dashboard on the
registration success screen.

- **Enhancements**
- Improved consistency and clarity of English and Spanish localization
strings, including updated labels and additional instructions.
- Updated select dropdowns to use disabled placeholder options for
better usability.
- Improved visual hierarchy and spacing on the registration form with
new and updated styles.
  - Made emphasized text display in bold for better readability.

- **Bug Fixes**
  - Added pointer cursor to login links, indicating clickability.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
### Requirements List
- `yarn install --ignore-engines`

### Description List
- Updated License model to account for new backend props:
   - `licenseStatus`
- _same as previous License `status` field; only on License responses;
Privilege responses still have `status`_
   - `licenseStatusName`
   - `compactEligibility`
- Updated License model tests for new fields + some clean up some gaps &
consistency items
- Updated the Licensee model to move to new server-calculated
eligibility status
- Updated License card UI to match updated designs
- Updated Privilege card UI to match updated designs
- Updated the purchase multi-license-select step 1 to be based off of
eligible licenses
- Updated the mock data to add another licensee license so we still have
all scenarios available
- Fixed minor type related to active military affiliations
- Updated transitive dependency `http-proxy-middleware` #760 

### Testing List
- `yarn test:unit:all` should run without errors or warnings
- `yarn serve` should run without errors or warnings
- `yarn build` should run without errors or warnings
- Code review
- Testing
- _Use both mock API and live API (mock API makes it easy to test all
cases)_
    - Active License cards match the updated designs
    - Inactive License cards match the updated designs
    - Active Privilege cards match the updated designs
    - Inactive Privilege cards match the updated designs

Closes #682 
Closes #760 


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

## Summary by CodeRabbit

- **New Features**
- Added a new LicenseHome icon component with SVG rendering for use in
license displays.
- License cards now display eligibility status with visual indicators
and tooltips for status descriptions.
- License and privilege cards feature updated layouts, icons, and
clearer status/eligibility displays.

- **Enhancements**
- Improved styling for license and privilege cards, including new color
schemes, typography, and responsive design adjustments.
- Home state and eligibility information are now passed and displayed
more consistently across dashboard and detail views.
  - Tooltip support added for overflowing status descriptions.

- **Localization**
- Added English and Spanish translations for "Compact Eligible" and "Not
Compact Eligible" status labels.

- **Bug Fixes**
- Corrected typos in method names affecting military affiliation logic.

- **Tests**
- Expanded and updated test coverage for new eligibility and status
features in license and licensee models, and added tests for the new
LicenseHome icon component.

- **Chores**
- Updated mock data to include detailed license status and eligibility
fields.
  - Adjusted font weight variable for extra bold text.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This adds a document that is to be sent to State IT staff instructing
them how to authenticate with the compact connect system. It includes an
overview of the compact connect system and some example curl commands
they can use to upload license data into the beta system.

While testing the curl commands for this, I discovered that the 'ssn'
field was accidentally removed from the POST license schema validation
in CDK several commit back when we made the license status field
updates. This adds the fix to put the field back in, along with CDK
tests to catch this issue in the future should it happen again.

Closes #774 


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Added onboarding instructions for state IT departments to integrate
with the CompactConnect API, including authentication, data upload,
schema requirements, and troubleshooting guidance.

- **Bug Fixes**
- Corrected environment names and clarified documentation regarding API
scopes and credential sharing.

- **Documentation**
- Updated credential transmission instructions for app clients,
emphasizing secure sharing methods.
- Added explicit Cognito token URLs for beta and production
environments.
- Introduced a new section on attaching onboarding instructions in
communications.

- **Tests**
- Introduced tests to validate the POST licenses API endpoint
configuration and schema.
  - Added JSON schema files for license request and response validation.

- **Refactor**
- Improved API implementation by assigning handlers and endpoints to
instance variables for better accessibility and maintainability.

- **Style**
  - Minor formatting improvements in schema definitions.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
In the event that a request is malformed JSON, we want to handle this
issue gracefully and return a 400

This also sets the registration endpoint request schema to strict, to
avoid allowing the user to specify any unrecognized fields.


Closes #761

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **Bug Fixes**
- Improved validation of provider registration requests by strictly
enforcing accepted fields.
- Enhanced API request handling to reject unsupported media types and
malformed JSON payloads, returning clear error responses for each case.
- **New Features**
- Introduced specific error messaging for unsupported media types in API
requests.
- **Tests**
- Added unit tests to verify error handling for unsupported media types
and malformed JSON in API requests.
- **Style**
- Reformatted code for improved readability without affecting
functionality.
- **Chores**
- Updated test resources to include the "Content-Type: application/json"
header for consistency.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Justin Frahm <[email protected]>
### Requirements List
-

### Description List
- Updated `PrivilegePurchaseOption` model to incorporate fees per
license type change
- Update references in UI
- Updated mockAPI
- Fixed bug where `SelectedStatePurchaseData` could refer to the wrong
licenses expirationdate
- updated tests

### Testing List
- `yarn test:unit:all` should run without errors or warnings
- `yarn serve` should run without errors or warnings
- `yarn build` should run without errors or warnings
- Code review
- run through the app on the mock and real APIs and confirm that we are
now referring to the licensetype relevant fees and looking at the right
expiration date in `SelectedStatePurchaseData`

Closes #636 


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Fee calculations and displays now support multiple license types,
allowing different fees per license type to be shown and totaled during
the purchase process.

- **Bug Fixes**
- The expiration date shown now accurately reflects the selected license
rather than the previously active license.

- **Refactor**
- Internal logic updated to use a structured fees object instead of a
single fee value, improving flexibility and maintainability.
- UI text labels and messages in the purchase finalization component are
now fully localized using direct translation calls.

- **Tests**
- Test cases updated to validate the new multi-fee structure and ensure
correct fee handling for all license types.

- **Chores**
- Mock data revised to provide differentiated fees per license type for
more realistic testing.
- Deprecated jurisdiction fee fields removed from configuration files,
API schemas, test data, and documentation to streamline fee management.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Dana Stiefel <[email protected]>
Co-authored-by: Landon Shumway <[email protected]>
…vileges (#769)

State Admins need the ability to upload adverse actions against a
practitioner to denote they are not able to practice with a specific
license or privilege in a state.

As part of this change, we've started hitting pain points with using
static json files for checking our expected responses from the API. This
adds a TestDataGenerator class which can be used to create any number of
variations in our tests to test specific use cases. We have also added
data classes for abstracting the database layer from our application
logic, which should greatly simplify how we are reading/writing data to
our tables. This change is not a complete refactor, rather just a
starting point for us to work with as we continue to develop the
project.

### Requirements List
- This adds a new field to the provider detailed response body, which
should be a backwards compatible change

### Description List
- Added endpoints for uploading adverse actions against licenses and
privileges
- Added adverse action schema with needed fields according to the data
model design
- Returning list of adverse actions for any privilege/license that has
them in the provider detailed response
- Added data classes for each record schema type for abstracting
database layer from application logic.
- Added TestDataGenerator util class to make it easier to generate tests
with variable data.

### Testing List
- Added test cases for adverse action related changes
- For API configuration changes: CDK tests added/updated in
`backend/compact-connect/tests/unit/test_api.py`

Closes #672 


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Added API endpoints to encumber provider privileges and licenses with
adverse actions, enabling administrative control to restrict privileges.
- Introduced adverse action data models and validation schemas for
detailed recording of encumbrances.
- Included adverse actions in provider, license, and privilege response
data.
- Added a new authorization decorator enforcing state-level permission
scopes.
- Added utility to retrieve license type information by abbreviation
within compacts.
- **Bug Fixes**
  - Made deactivation note mandatory when deactivating privileges.
- **Refactor**
- Renamed and restructured provider management API classes and resources
for clearer privilege and license operations.
- Consolidated and updated data models for licenses, privileges, adverse
actions, military affiliations, and related entities.
  - Centralized timezone handling for expiration dates.
  - Updated schema imports and validation logic for consistency.
- **Tests**
- Added thorough unit and integration tests for encumbrance endpoints,
adverse action schemas, and provider responses.
- Enhanced test data generators and standardized test constants for
consistent testing.
- **Documentation**
- Improved API schema definitions and comments to specify required
fields and clarify request/response formats.
- Updated OpenAPI specification with new encumbrance endpoints and
request schemas.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Justin Frahm <[email protected]>
Copy link
Contributor

coderabbitai bot commented May 5, 2025

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

### Requirements List
- Add georga

### Description List
- Added GA and UT to counseling compact in test

Closes #781 


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **New Features**
- Added initial configuration files for the Georgia and Utah
jurisdictions, including placeholder data for license types, privilege
fees, and environment-specific settings.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Copy link
Collaborator Author

@jlkravitz jlkravitz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jusdino @jsandoval81 @landonshumway-ia @ChiefStief

Two items related to military affiliation might involve backend work.

Several other items relate to keyboard navigation (space vs enter), so it may be worth discussing our broader strategy / philosophy on that before proceeding so we can take a uniform approach in future sprints. Let me know what you think.

My preference would be to hotfix (1) and (2), and (7) if it's not too much work.

@jlkravitz
Copy link
Collaborator Author

@isabeleliassen This is good to merge after merging #806. This is a Sprint PR, so should be merged using a merge commit.

@jlkravitz jlkravitz mentioned this pull request May 9, 2025
@jlkravitz jlkravitz requested a review from isabeleliassen May 9, 2025 00:08
jsandoval81 and others added 2 commits May 9, 2025 04:07
I made these edits to support bootstrapping users on a sandbox
environment for sprint reviews. I'm treating this as a starting point
for further development, as necessary (e.g., uploading mock data,
creating provider accounts, etc.).
@isabeleliassen isabeleliassen merged commit 590321a into main May 9, 2025
12 of 13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants