Skip to content
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

feature: JsonSchema components are now ImmutableJS compliant (#5951) #5952

Merged
merged 1 commit into from
May 6, 2020

Conversation

tim-lai
Copy link
Contributor

@tim-lai tim-lai commented Apr 7, 2020

Description

Fixes #5951

  • JsonSchema-based components are now ImmutableJS-compliant
  • JsonSchemaForm now properly defaults to JsonSchema_string for invalid or unknown types, as well as unable to getComponent cases
  • JsonSchema_array now uses a simplified JsonSchemaArrayItemText component
  • JsonSchema_array handles its own subcomponent render logic, rather than recursing from its JsonSchemaForm parent
  • Additional validation checks to confirm that "schema" keys, "schema" values, and ImmutableJS methods exist
    • schema
    • type
    • format
    • enum
  • bug (separate pre-existing): Debounce error if string value is null
  • Existing Mocha json-schema-form test now uses ImmutableJS parameters instead of plain objects
  • New Cypress tests for schema-form
  • Added new dev Cypress open scripts

Motivation and Context

  • If an API definition contained a missing schema key or if schema key was missing expected values, the SwaggerUI client could crash or appear to be stuck in an indefinite loading state
    • Expand operation, e.g. missing schema values, ImmutableJS compliance
    • Try It Out, e.g. ImmutableJS compliance
    • Execute, e.g. debounce error, ImmutableJS compliance
  • A use case would be a work-in-progress API definition using Swagger Editor, where a user might "Try It Out" before validating the work-in-progress API definition as valid
  • There were two main issues:
    1. Codebase assumed that schema key(s) would always exist
    2. JsonSchema components could mutate away from ImmutableJS. This could lead to removal of schema key(s)

How Has This Been Tested?

  • Existing Mocha json-schema-form test now uses ImmutableJS parameters instead of plain objects
  • New Cypress tests for schema-form
    • includes a section extending Arrays from multiple-examples-core.openapi.yaml

Screenshots (if appropriate):

Checklist

My PR contains...

  • No code changes (src/ is unmodified: changes to documentation, CI, metadata, etc.)
  • Dependency changes (any modification to dependencies in package.json)
  • Bug fixes (non-breaking change which fixes an issue)
  • Improvements (misc. changes to existing features)
  • Features (non-breaking change which adds functionality)

My changes...

  • are breaking changes to a public API (config options, System API, major UI change, etc).
  • are breaking changes to a private API (Redux, component props, utility functions, etc.).
  • are breaking changes to a developer API (npm script behavior changes, new dev system dependencies, etc).
  • are not breaking changes.

Documentation

  • My changes do not require a change to the project documentation.
  • My changes require a change to the project documentation.
  • If yes to above: I have updated the documentation accordingly.

Automated tests

  • My changes can not or do not need to be tested.
  • My changes can and should be tested by unit and/or integration tests.
  • If yes to above: I have added tests to cover my changes.
  • If yes to above: I have taken care to cover edge cases in my tests.
  • All new and existing tests passed.

@tim-lai tim-lai requested a review from shockey April 7, 2020 19:06
@tim-lai tim-lai changed the title ft: JsonSchema components are now ImmutableJS compliant ft: JsonSchema components are now ImmutableJS compliant (#5951) Apr 7, 2020
@tim-lai tim-lai changed the title ft: JsonSchema components are now ImmutableJS compliant (#5951) ft: JsonSchema components are now ImmutableJS compliant Apr 7, 2020
@tim-lai tim-lai changed the title ft: JsonSchema components are now ImmutableJS compliant ft: JsonSchema components are now ImmutableJS compliant (#5951) Apr 7, 2020
bug: JsonSchema components should validate schema properties exists
  - schema
  - type
  - format
  - enum
bug: fix a debounce error in JsonSchema_string if value is null
ft: new simplified JsonSchemaArrayItemText component
test: use immutableJS for `json-schema-form` test
test: add dev scripts to run `cypress open`
test: new cypress `schema-form` tests
@tim-lai tim-lai force-pushed the bug/5951-typeless-schema branch from 73219b0 to dbfda75 Compare May 6, 2020 20:50
@tim-lai tim-lai merged commit 5eb23cd into swagger-api:master May 6, 2020
@tim-lai tim-lai changed the title ft: JsonSchema components are now ImmutableJS compliant (#5951) feature: JsonSchema components are now ImmutableJS compliant (#5951) May 6, 2020
@tim-lai tim-lai changed the title feature: JsonSchema components are now ImmutableJS compliant (#5951) feature: JsonSchema components are now ImmutableJS compliant May 6, 2020
@tim-lai tim-lai changed the title feature: JsonSchema components are now ImmutableJS compliant feature: JsonSchema components are now ImmutableJS compliant (#5070) May 6, 2020
@tim-lai tim-lai changed the title feature: JsonSchema components are now ImmutableJS compliant (#5070) feature: JsonSchema components are now ImmutableJS compliant (#5951) May 6, 2020
@tim-lai tim-lai deleted the bug/5951-typeless-schema branch May 15, 2020 16:16
Pentusha added a commit to Pentusha/swagger-ui that referenced this pull request May 27, 2020
* 'master' of github.com:swagger-api/swagger-ui: (37 commits)
  release: v3.25.4
  chore(package): bump swagger-client to 3.10.4 version
  fix: entries as property name (swagger-api#6025)
  release: v3.25.3
  housekeeping: update release-it config (swagger-api#6009)
  housekeeping: bump swagger-client version with package-lock (swagger-api#6008)
  housekeeping: update dev-e2e-cypress-open script name (swagger-api#6005)
  fix: jsonSchemaComponent file/files (swagger-api#5997) (swagger-api#6000)
  fix: curl array support within multipart/form-data (swagger-api#3838) (swagger-api#5999)
  release: v3.25.2
  bug: remove clearValidation from onTryoutClick (swagger-api#5955)
  ft: JsonSchema components are now ImmutableJS compliant (swagger-api#5952)
  release: v3.25.1
  housekeeping: revert @release-it/conventional-changelog version (swagger-api#5976)
  housekeeping: add missing conventional-changelog devDeps (swagger-api#5975)
  docs: update plugin api component for failSilently (swagger-api#5953)
  housekeeping: `npm audit fix` (swagger-api#5948)
  housekeeping: prevent log warning for missing getComponent in production
  fix(docker-image): send relative HTTP 301s from within container (swagger-api#5409)
  support for supportedSubmitMethods property in react component (swagger-api#5376)
  ...
mattyb678 pushed a commit to mattyb678/swagger-ui that referenced this pull request Jun 24, 2020
…5952)

bug: JsonSchema components should validate schema properties exists
  - schema
  - type
  - format
  - enum
bug: fix a debounce error in JsonSchema_string if value is null
ft: new simplified JsonSchemaArrayItemText component
test: use immutableJS for `json-schema-form` test
test: add dev scripts to run `cypress open`
test: new cypress `schema-form` tests
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.

Typeless schemas in parameters crash SwaggerUI
1 participant