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

Generate unique items for arrays with the "uniqueItems" property #63

Merged
merged 2 commits into from
Mar 10, 2021

Conversation

kevindew
Copy link
Member

@kevindew kevindew commented Mar 8, 2021

This re-calculates the values of an array if the "uniqueItems" property
is set and a non-unique item has been generated. This has been to help
resolve flaky tests that expect a random array and occasionally fail due
to the generation of an array with collisions.

As there is a risk that this can produce an eternal loop I've put in a
check that if there are very number of attempts to generate the unique
value then it should abort. This does produce a risk of failure if there
is a low amount of variance in the allowed variables.

This is to resolve issues such as:

GovukSchemas::InvalidContentGenerated: An invalid content item was generated.

This probably means there's a bug in the generator that causes it to output
invalid values. Below you'll find the generated payload, the validation errors
and the schema that was used.

...

Validation errors:
--------------------------

[
  {
    "schema": "869a7d30-f94e-5044-84e7-dc3c01c8f1ba#",
    "fragment": "#/details/featured_attachments",
    "message": "The property '#/details/featured_attachments' contained duplicated array values in schema 869a7d30-f94e-5044-84e7-dc3c01c8f1ba#",
    "failed_attribute": "UniqueItems"
  },
  {
    "schema": "869a7d30-f94e-5044-84e7-dc3c01c8f1ba",
    "fragment": "#/details/featured_attachments",
    "message": "The property '#/details/featured_attachments' contained duplicated array values in schema 869a7d30-f94e-5044-84e7-dc3c01c8f1ba",
    "failed_attribute": "UniqueItems"
  }
]

kevindew added 2 commits March 8, 2021 14:36
This re-calculates the values of an array if the "uniqueItems" property
is set and a non-unique item has been generated. This has been to help
resolve flaky tests that expect a random array and occasionally fail due
to the generation of an array with collisions.

As there is a risk that this can produce an eternal loop I've put in a
check that if there are very number of attempts to generate the unique
value then it should abort. This does produce a risk of failure if there
is a low amount of variance in the allowed variables.

This is to resolve issues such as:

```
GovukSchemas::InvalidContentGenerated: An invalid content item was generated.

This probably means there's a bug in the generator that causes it to output
invalid values. Below you'll find the generated payload, the validation errors
and the schema that was used.

...

Validation errors:
--------------------------

[
  {
    "schema": "869a7d30-f94e-5044-84e7-dc3c01c8f1ba#",
    "fragment": "#/details/featured_attachments",
    "message": "The property '#/details/featured_attachments' contained duplicated array values in schema 869a7d30-f94e-5044-84e7-dc3c01c8f1ba#",
    "failed_attribute": "UniqueItems"
  },
  {
    "schema": "869a7d30-f94e-5044-84e7-dc3c01c8f1ba",
    "fragment": "#/details/featured_attachments",
    "message": "The property '#/details/featured_attachments' contained duplicated array values in schema 869a7d30-f94e-5044-84e7-dc3c01c8f1ba",
    "failed_attribute": "UniqueItems"
  }
]
```
Copy link

@gclssvglx gclssvglx left a comment

Choose a reason for hiding this comment

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

This is looking great - thanks. Just a quick question...

lib/govuk_schemas/random_schema_generator.rb Show resolved Hide resolved
Copy link

@gclssvglx gclssvglx left a comment

Choose a reason for hiding this comment

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

Great stuff - thanks @kevindew

lib/govuk_schemas/random_schema_generator.rb Show resolved Hide resolved
@kevindew kevindew merged commit 31b688c into master Mar 10, 2021
@kevindew kevindew deleted the allow-unique-arrays branch March 10, 2021 11:27
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.

2 participants