Clone values to prevent infinite loop and fix edge case in QuayIntegrationForm#2996
Merged
pedrottimark merged 1 commit intomasterfrom Sep 7, 2022
Merged
Conversation
|
Images are ready for the commit at 4bb65cc. To use with deploy scripts, first |
|
@pedrottimark: The following test failed, say
Full PR test history. Your PR dashboard. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Nakul found that QuayIntegrationForm can get stuck in an infinite loop of rendering.
Scenario: Change only
oauthTokenvalue.Hypothesis:
if (initialValues) { … }within the component looks like a side-effect (with shallow spread instead of deep clone) which I probably changed from naughty to nasty in ROX-12450: Support robot accounts in Quay integration form #2974Solution:
computeInitialValuesfunction and call it only one time (if needed) to initializeuseIntegrationFormhook.{ ...initialValues }withcloneDeep(initialValues)becauseupdatePasswordlogic did not work correctly without the change. This strengthens my feeling that the additional imperative assignment statements changed the code from brittle to broken.cloneDeep(defaultValues)to create a new integration.I found an edge case which needed improved frontend logic.
Scenario: Edit an existing integration to clear Robot username and password causes
registryRobotCredentials: {username: "", password: ""}to fail backend validation.Solution:
onChangeRobotUsernameandonChangeRobotPasswordto setregistryRobotCredentials: nullif both values are empty.Residue
Checklist
Unit test and regression tests addedTesting Performed
Create new integration with Scanner type and OAuth token value. Save it without page crash
Create new integration with Registry + Scanner type and provide all credentials. Save it. Edit to clear Robot username field. Save it and see correct
registryRobotCredentials: nullinstead of incorrectregistryRobotCredentials: {username: "", password: ""}value.