fix(try-it-out): reset of oas3 requestBody should use default values (#8265)
Co-authored-by: Mathias Spanhove <mathias.spanhove@katoennatie.com>
This commit is contained in:
@@ -17,6 +17,7 @@ export default class Operation extends PureComponent {
|
|||||||
|
|
||||||
toggleShown: PropTypes.func.isRequired,
|
toggleShown: PropTypes.func.isRequired,
|
||||||
onTryoutClick: PropTypes.func.isRequired,
|
onTryoutClick: PropTypes.func.isRequired,
|
||||||
|
onResetClick: PropTypes.func.isRequired,
|
||||||
onCancelClick: PropTypes.func.isRequired,
|
onCancelClick: PropTypes.func.isRequired,
|
||||||
onExecute: PropTypes.func.isRequired,
|
onExecute: PropTypes.func.isRequired,
|
||||||
|
|
||||||
@@ -48,6 +49,7 @@ export default class Operation extends PureComponent {
|
|||||||
request,
|
request,
|
||||||
toggleShown,
|
toggleShown,
|
||||||
onTryoutClick,
|
onTryoutClick,
|
||||||
|
onResetClick,
|
||||||
onCancelClick,
|
onCancelClick,
|
||||||
onExecute,
|
onExecute,
|
||||||
fn,
|
fn,
|
||||||
@@ -152,6 +154,7 @@ export default class Operation extends PureComponent {
|
|||||||
operation={operation}
|
operation={operation}
|
||||||
onChangeKey={onChangeKey}
|
onChangeKey={onChangeKey}
|
||||||
onTryoutClick = { onTryoutClick }
|
onTryoutClick = { onTryoutClick }
|
||||||
|
onResetClick = { onResetClick }
|
||||||
onCancelClick = { onCancelClick }
|
onCancelClick = { onCancelClick }
|
||||||
tryItOutEnabled = { tryItOutEnabled }
|
tryItOutEnabled = { tryItOutEnabled }
|
||||||
allowTryItOut={allowTryItOut}
|
allowTryItOut={allowTryItOut}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ export default class Parameters extends Component {
|
|||||||
tryItOutEnabled: PropTypes.bool,
|
tryItOutEnabled: PropTypes.bool,
|
||||||
allowTryItOut: PropTypes.bool,
|
allowTryItOut: PropTypes.bool,
|
||||||
onTryoutClick: PropTypes.func,
|
onTryoutClick: PropTypes.func,
|
||||||
|
onResetClick: PropTypes.func,
|
||||||
onCancelClick: PropTypes.func,
|
onCancelClick: PropTypes.func,
|
||||||
onChangeKey: PropTypes.array,
|
onChangeKey: PropTypes.array,
|
||||||
pathMethod: PropTypes.array.isRequired,
|
pathMethod: PropTypes.array.isRequired,
|
||||||
@@ -94,6 +95,7 @@ export default class Parameters extends Component {
|
|||||||
|
|
||||||
let {
|
let {
|
||||||
onTryoutClick,
|
onTryoutClick,
|
||||||
|
onResetClick,
|
||||||
parameters,
|
parameters,
|
||||||
allowTryItOut,
|
allowTryItOut,
|
||||||
tryItOutEnabled,
|
tryItOutEnabled,
|
||||||
@@ -161,7 +163,7 @@ export default class Parameters extends Component {
|
|||||||
enabled={tryItOutEnabled}
|
enabled={tryItOutEnabled}
|
||||||
onCancelClick={this.props.onCancelClick}
|
onCancelClick={this.props.onCancelClick}
|
||||||
onTryoutClick={onTryoutClick}
|
onTryoutClick={onTryoutClick}
|
||||||
onResetClick={() => oas3Actions.setRequestBodyValue({ value: undefined, pathMethod })}/>
|
onResetClick={() => onResetClick(pathMethod)}/>
|
||||||
) : null}
|
) : null}
|
||||||
</div>
|
</div>
|
||||||
{this.state.parametersVisible ? <div className="parameters-container">
|
{this.state.parametersVisible ? <div className="parameters-container">
|
||||||
|
|||||||
@@ -122,6 +122,11 @@ export default class OperationContainer extends PureComponent {
|
|||||||
this.setState({tryItOutEnabled: !this.state.tryItOutEnabled})
|
this.setState({tryItOutEnabled: !this.state.tryItOutEnabled})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onResetClick = (pathMethod) => {
|
||||||
|
const defaultRequestBodyValue = this.props.oas3Selectors.selectDefaultRequestBodyValue(...pathMethod)
|
||||||
|
this.props.oas3Actions.setRequestBodyValue({ value: defaultRequestBodyValue, pathMethod })
|
||||||
|
}
|
||||||
|
|
||||||
onExecute = () => {
|
onExecute = () => {
|
||||||
this.setState({ executeInProgress: true })
|
this.setState({ executeInProgress: true })
|
||||||
}
|
}
|
||||||
@@ -225,6 +230,7 @@ export default class OperationContainer extends PureComponent {
|
|||||||
|
|
||||||
toggleShown={this.toggleShown}
|
toggleShown={this.toggleShown}
|
||||||
onTryoutClick={this.onTryoutClick}
|
onTryoutClick={this.onTryoutClick}
|
||||||
|
onResetClick={this.onResetClick}
|
||||||
onCancelClick={this.onCancelClick}
|
onCancelClick={this.onCancelClick}
|
||||||
onExecute={this.onExecute}
|
onExecute={this.onExecute}
|
||||||
specPath={specPath}
|
specPath={specPath}
|
||||||
|
|||||||
@@ -61,6 +61,26 @@ export const shouldRetainRequestBodyValue = onlyOAS3((state, path, method) => {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
export const selectDefaultRequestBodyValue = (state, path, method) => (system) => {
|
||||||
|
const {oas3Selectors, specSelectors} = system.getSystem()
|
||||||
|
const spec = specSelectors.specJson()
|
||||||
|
if(isOAS3Helper(spec)) {
|
||||||
|
const currentMediaType = oas3Selectors.requestContentType(path, method)
|
||||||
|
if (currentMediaType) {
|
||||||
|
return getDefaultRequestBodyValue(
|
||||||
|
specSelectors.specResolvedSubtree(["paths", path, method, "requestBody"]),
|
||||||
|
currentMediaType,
|
||||||
|
oas3Selectors.activeExamplesMember(
|
||||||
|
path, method,
|
||||||
|
"requestBody",
|
||||||
|
"requestBody",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
export const hasUserEditedBody = (state, path, method) => (system) => {
|
export const hasUserEditedBody = (state, path, method) => (system) => {
|
||||||
const {oas3Selectors, specSelectors} = system.getSystem()
|
const {oas3Selectors, specSelectors} = system.getSystem()
|
||||||
const spec = specSelectors.specJson()
|
const spec = specSelectors.specJson()
|
||||||
|
|||||||
28
test/e2e-cypress/static/documents/bugs/8217.yaml
Normal file
28
test/e2e-cypress/static/documents/bugs/8217.yaml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
openapi: 3.0.1
|
||||||
|
info:
|
||||||
|
title: Example Swagger with required default body parameter
|
||||||
|
version: 1.0.0
|
||||||
|
paths:
|
||||||
|
/pet:
|
||||||
|
post:
|
||||||
|
operationId: addPet
|
||||||
|
requestBody:
|
||||||
|
content:
|
||||||
|
application/x-www-form-urlencoded:
|
||||||
|
schema:
|
||||||
|
$ref: '#/components/schemas/BodyParameter'
|
||||||
|
required: true
|
||||||
|
responses:
|
||||||
|
405:
|
||||||
|
description: Invalid input
|
||||||
|
content: {}
|
||||||
|
components:
|
||||||
|
schemas:
|
||||||
|
BodyParameter:
|
||||||
|
required:
|
||||||
|
- bodyParameter
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
bodyParameter:
|
||||||
|
type: string
|
||||||
|
default: default
|
||||||
24
test/e2e-cypress/tests/bugs/8217.js
Normal file
24
test/e2e-cypress/tests/bugs/8217.js
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
describe("#8217: Reset Request Body not using default values", () => {
|
||||||
|
it("it reset the user edited value and executes with the default value in case of try out reset. (#6517)", () => {
|
||||||
|
cy
|
||||||
|
.visit("?url=/documents/bugs/8217.yaml")
|
||||||
|
.get("#operations-default-addPet")
|
||||||
|
.click()
|
||||||
|
// Expand Try It Out
|
||||||
|
.get(".try-out__btn")
|
||||||
|
.click()
|
||||||
|
// replace default sample with bad value
|
||||||
|
.get(`.parameters[data-property-name="bodyParameter"] input`)
|
||||||
|
.type("{selectall}not the default value")
|
||||||
|
// Reset Try It Out
|
||||||
|
.get(".try-out__btn.reset")
|
||||||
|
.click()
|
||||||
|
// Submit using default value
|
||||||
|
.get(".btn.execute")
|
||||||
|
.click()
|
||||||
|
// No required validation error on body parameter
|
||||||
|
.get(`.parameters[data-property-name="bodyParameter"] input`)
|
||||||
|
.should("have.value", "default")
|
||||||
|
.and("not.have.class", "invalid")
|
||||||
|
})
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user