govuk_schemas 4.3.0 → 4.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3b1010c2e3fc4d2b11f832cb7fc987d93bc31e911847ec6d18231e47a29a605f
4
- data.tar.gz: 1c7c41a441859658c3f2e53ba4399374227120611150d14ca9a0d0f850e24c15
3
+ metadata.gz: e46784ff30a78aee2321e3defb7e2b31ea6eb751c96ddec7ba2ebe695a42b29a
4
+ data.tar.gz: 3f6d24f1c5afb4f175d9157f84ced30b20e475b76958c7128872c179aa7bb62d
5
5
  SHA512:
6
- metadata.gz: 44e53cbd69991f6882e7d9a371257bef45fc100c75f945048e8700fdb9c17c9a69727219206e7ce720b5007c5412d7139472d370f856cc46fc1387453432f09b
7
- data.tar.gz: 8ad00bb818a94cb75c5ae2d0e99ab754a204655a966a11c4acbed2e937c3015794a2847c9c5b6eb8567d2f724893c03a98fe2252c14b2499cc8d9a93b7b2e26b
6
+ metadata.gz: c2d875e00eaf8440b82c7a9173dbf23a708aabb49157bd960c7c7a94e715ba6429b43864f6b168b2e8fe1c3daa8743a76e6662f02fdf0db86e59e5af585b7b1d
7
+ data.tar.gz: 166c8ecb0f9f850e682eba2181ba6187321428fcee4f9dd1e707a6791ee8b5da3d422aef3c404d5d8a175d3601c0fc6388bb8c995dd72c6353a3628886a0ea81
@@ -0,0 +1,44 @@
1
+ on: [push, pull_request]
2
+
3
+ jobs:
4
+ # This matrix job runs the test suite against multiple Ruby versions
5
+ test_matrix:
6
+ strategy:
7
+ fail-fast: false
8
+ matrix:
9
+ # Due to https://github.com/actions/runner/issues/849, we have to use quotes for '3.0'
10
+ ruby: [ 2.7, '3.0', 3.1 ]
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v2
14
+ - name: Clone govuk-content-schemas
15
+ uses: actions/checkout@v2
16
+ with:
17
+ repository: alphagov/govuk-content-schemas
18
+ ref: deployed-to-production
19
+ path: tmp/govuk-content-schemas
20
+ - uses: ruby/setup-ruby@v1
21
+ with:
22
+ ruby-version: ${{ matrix.ruby }}
23
+ bundler-cache: true
24
+ - run: bundle exec rake
25
+ env:
26
+ GOVUK_CONTENT_SCHEMAS_PATH: tmp/govuk-content-schemas
27
+
28
+ # Branch protection rules cannot directly depend on status checks from matrix jobs.
29
+ # So instead we define `test` as a dummy job which only runs after the preceding `test_matrix` checks have passed.
30
+ # Solution inspired by: https://github.community/t/status-check-for-a-matrix-jobs/127354/3
31
+ test:
32
+ needs: test_matrix
33
+ runs-on: ubuntu-latest
34
+ steps:
35
+ - run: echo "All matrix tests have passed 🚀"
36
+
37
+ publish:
38
+ needs: test
39
+ if: ${{ github.ref == 'refs/heads/main' }}
40
+ permissions:
41
+ contents: write
42
+ uses: alphagov/govuk-infrastructure/.github/workflows/publish-rubygem.yaml@main
43
+ secrets:
44
+ GEM_HOST_API_KEY: ${{ secrets.ALPHAGOV_RUBYGEMS_API_KEY }}
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.6.6
1
+ 2.7.6
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 4.4.0
2
+
3
+ * Adds support for applications that use Minitest by adding an `AssertMatchers` module ([#66](https://github.com/alphagov/govuk_schemas/pull/66))
4
+
1
5
  # 4.3.0
2
6
 
3
7
  * Generate unique items for arrays with the "uniqueItems" property. ([#63](https://github.com/alphagov/govuk_schemas/pull/63))
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "pry-byebug"
25
25
  spec.add_development_dependency "rake", "~> 13.0"
26
26
  spec.add_development_dependency "rspec", "~> 3.4"
27
- spec.add_development_dependency "rubocop-govuk", "~> 3.8"
27
+ spec.add_development_dependency "rubocop-govuk", "~> 4.0"
28
28
  spec.add_development_dependency "yard", "~> 0.8"
29
29
 
30
30
  spec.required_ruby_version = ">= 2.6"
@@ -0,0 +1,28 @@
1
+ require "govuk_schemas/validator"
2
+
3
+ module GovukSchemas
4
+ module AssertMatchers
5
+ def assert_valid_against_publisher_schema(payload, schema_name)
6
+ assert_valid_against_schema(payload, schema_name, "publisher")
7
+ end
8
+
9
+ def assert_valid_against_links_schema(payload, schema_name)
10
+ assert_valid_against_schema(payload, schema_name, "links")
11
+ end
12
+
13
+ def assert_valid_against_frontend_schema(payload, schema_name)
14
+ assert_valid_against_schema(payload, schema_name, "frontend")
15
+ end
16
+
17
+ def assert_valid_against_notification_schema(payload, schema_name)
18
+ assert_valid_against_schema(payload, schema_name, "notification")
19
+ end
20
+
21
+ private
22
+
23
+ def assert_valid_against_schema(payload, schema_name, schema_type)
24
+ validator = GovukSchemas::Validator.new(schema_name, schema_type, payload)
25
+ assert validator.valid?, validator.error_message
26
+ end
27
+ end
28
+ end
@@ -1,57 +1,20 @@
1
+ require "govuk_schemas/validator"
2
+
1
3
  module GovukSchemas
2
4
  module RSpecMatchers
5
+
3
6
  %w[links frontend publisher notification].each do |schema_type|
4
7
  RSpec::Matchers.define "be_valid_against_#{schema_type}_schema".to_sym do |schema_name|
5
8
  match do |item|
6
- schema = Schema.find(Hash["#{schema_type}_schema".to_sym, schema_name])
7
- validator = JSON::Validator.fully_validate(schema, item)
8
- validator.empty?
9
+ @validator = GovukSchemas::Validator.new(schema_name, schema_type, item)
10
+ @validator.valid?
9
11
  end
10
12
 
13
+
11
14
  failure_message do |actual|
12
- ValidationErrorMessage.new(schema_name, "schema", actual).message
15
+ @validator.error_message
13
16
  end
14
17
  end
15
18
  end
16
19
  end
17
-
18
- # @private
19
- class ValidationErrorMessage
20
- attr_reader :schema_name, :type, :payload
21
-
22
- def initialize(schema_name, type, payload)
23
- @schema_name = schema_name
24
- @type = type
25
- @payload = payload
26
- end
27
-
28
- def message
29
- <<~DOC
30
- expected the payload to be valid against the '#{schema_name}' schema:
31
-
32
- #{formatted_payload}
33
-
34
- Validation errors:
35
- #{errors}
36
- DOC
37
- end
38
-
39
- private
40
-
41
- def errors
42
- schema = Schema.find(publisher_schema: schema_name)
43
- validator = JSON::Validator.fully_validate(schema, payload)
44
- validator.map { |message| "- " + humanized_error(message) }.join("\n")
45
- end
46
-
47
- def formatted_payload
48
- return payload if payload.is_a?(String)
49
-
50
- JSON.pretty_generate(payload)
51
- end
52
-
53
- def humanized_error(message)
54
- message.gsub("The property '#/'", "The item")
55
- end
56
- end
57
20
  end
@@ -0,0 +1,46 @@
1
+ module GovukSchemas
2
+ class Validator
3
+ attr_reader :schema_name, :type, :payload
4
+
5
+ def initialize(schema_name, type, payload)
6
+ @schema_name = schema_name
7
+ @type = type
8
+ @payload = payload
9
+ end
10
+
11
+ def valid?
12
+ errors.empty?
13
+ end
14
+
15
+ def error_message
16
+ <<~DOC
17
+ expected the payload to be valid against the '#{schema_name}' schema:
18
+
19
+ #{formatted_payload}
20
+
21
+ Validation errors:
22
+ #{errors}
23
+ DOC
24
+ end
25
+
26
+ private
27
+
28
+ def errors
29
+ schema = Schema.find("#{type}_schema": schema_name)
30
+ validator = JSON::Validator.fully_validate(schema, payload.to_json)
31
+ validator.map { |message| "- " + humanized_error(message) }.join("\n")
32
+ end
33
+
34
+ def formatted_payload
35
+ return payload if payload.is_a?(String)
36
+
37
+ JSON.pretty_generate(payload)
38
+ end
39
+
40
+ def humanized_error(message)
41
+ message.gsub("The property '#/'", "The item")
42
+ .gsub(/in schema [0-9a-f\-]+/, "")
43
+ .strip
44
+ end
45
+ end
46
+ end
@@ -1,4 +1,4 @@
1
1
  module GovukSchemas
2
2
  # @private
3
- VERSION = "4.3.0".freeze
3
+ VERSION = "4.4.0".freeze
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: govuk_schemas
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.0
4
+ version: 4.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GOV.UK Dev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-10 00:00:00.000000000 Z
11
+ date: 2022-07-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json-schema
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '3.8'
75
+ version: '4.0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '3.8'
82
+ version: '4.0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: yard
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -102,6 +102,7 @@ extensions: []
102
102
  extra_rdoc_files: []
103
103
  files:
104
104
  - ".github/dependabot.yml"
105
+ - ".github/workflows/ci.yml"
105
106
  - ".gitignore"
106
107
  - ".rspec"
107
108
  - ".rubocop.yml"
@@ -109,13 +110,13 @@ files:
109
110
  - ".yardopts"
110
111
  - CHANGELOG.md
111
112
  - Gemfile
112
- - Jenkinsfile
113
113
  - LICENSE.md
114
114
  - README.md
115
115
  - Rakefile
116
116
  - bin/console
117
117
  - govuk_schemas.gemspec
118
118
  - lib/govuk_schemas.rb
119
+ - lib/govuk_schemas/assert_matchers.rb
119
120
  - lib/govuk_schemas/document_types.rb
120
121
  - lib/govuk_schemas/example.rb
121
122
  - lib/govuk_schemas/random_content_generator.rb
@@ -123,6 +124,7 @@ files:
123
124
  - lib/govuk_schemas/random_schema_generator.rb
124
125
  - lib/govuk_schemas/rspec_matchers.rb
125
126
  - lib/govuk_schemas/schema.rb
127
+ - lib/govuk_schemas/validator.rb
126
128
  - lib/govuk_schemas/version.rb
127
129
  homepage: https://github.com/alphagov/govuk_schemas_gem
128
130
  licenses:
@@ -143,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
143
145
  - !ruby/object:Gem::Version
144
146
  version: '0'
145
147
  requirements: []
146
- rubygems_version: 3.1.4
148
+ rubygems_version: 3.3.18
147
149
  signing_key:
148
150
  specification_version: 4
149
151
  summary: Gem to generate test data based on GOV.UK content schemas
data/Jenkinsfile DELETED
@@ -1,9 +0,0 @@
1
- #!/usr/bin/env groovy
2
-
3
- library("govuk")
4
-
5
- node {
6
- govuk.buildProject(
7
- rubyLintDiff: false,
8
- )
9
- }