json-schema-rspec 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 78897a15eee63f17fbe327166c1cc79a4cab7d98
4
+ data.tar.gz: 365ee5bf15d49a0d4a8c534122570babd2669613
5
+ SHA512:
6
+ metadata.gz: 7bda5f7a71289c987070eef0212c03e12915cf8b5ac318a7c96c235a4f436a004279a1371dd1653f0695fb8f30a5c4d8ff4f00f6fd68dc9c1c892440538c564e
7
+ data.tar.gz: 23f7b5a39d5c14036eb49063736cb0dc941b9097e5e0568a134411184850c439b5bfaf885beda9101e0d526b773faed99672ca7bd1464d44eb830fe3c5ca01bd
@@ -0,0 +1,13 @@
1
+ 0.0.2 / 2015-05-06
2
+ ==================
3
+
4
+ * Updated to json-schema gem version to 2.5
5
+ * Added description method on matchers
6
+ * Allow for passing in validation options
7
+ * Added tests
8
+
9
+ 0.0.1 / 2014-04-18
10
+ ==================
11
+
12
+ * Initial commit
13
+
data/README.md CHANGED
@@ -36,6 +36,16 @@ You can then write tests such as:
36
36
 
37
37
  #failing spec
38
38
  expect('[1, 2, 3]').to match_json_schema(:inline_schema)
39
+
40
+ #### Strict schema validation
41
+
42
+ If you wish to use strict schema validation you can do so by passing an additional argument to the matcher.
43
+ strict validation can be useful if you want to ensure there are no additional properties in the JSON than
44
+ those explicitly defined in your schema
45
+
46
+ ```
47
+ expect(response.body).to match_json_schema(:my_schema, strict: true)
48
+ ```
39
49
 
40
50
  ### Schema in a file
41
51
  You can also use rails path utilities such as `Rails.root.join("spec/support/schemas/my_business_object.schema.json").to_s` when defining schema locations. This gem is backed by the [json-schema](http://github.com/hoxworth/json-schema) gem, so whatever that validator accepts for paths should work.
@@ -2,8 +2,8 @@
2
2
  require File.expand_path('../lib/json-schema-rspec/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
- gem.authors = ["Michael Jensen"]
6
- gem.email = ["emjay1988@gmail.com"]
5
+ gem.authors = ["Sharethrough Engineering", "Michael Jensen"]
6
+ gem.email = ["engineers@sharethrough.com", "emjay1988@gmail.com"]
7
7
  gem.description = %q{Adds RSpec matchers for validating JSON schemas}
8
8
  gem.summary = %q{JSON Schema RSpec matchers}
9
9
  gem.homepage = ""
@@ -15,5 +15,5 @@ Gem::Specification.new do |gem|
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = Json::Schema::Rspec::VERSION
17
17
  gem.add_dependency "rspec"
18
- gem.add_dependency "json-schema", "~> 2.2.2"
18
+ gem.add_dependency "json-schema", "~> 2.5"
19
19
  end
@@ -8,8 +8,9 @@ module JSON
8
8
  end
9
9
 
10
10
  class MatchJsonSchemaMatcher
11
- def initialize(schema_name)
11
+ def initialize(schema_name, validation_opts = {})
12
12
  @schema_name = schema_name
13
+ @validation_opts = validation_opts
13
14
  end
14
15
 
15
16
  def matches?(actual)
@@ -25,7 +26,7 @@ module JSON
25
26
  " end"]
26
27
  return false
27
28
  end
28
- @errors = JSON::Validator.fully_validate(schema_for_name(@schema_name), @actual)
29
+ @errors = JSON::Validator.fully_validate(schema_for_name(@schema_name), @actual, @validation_opts)
29
30
 
30
31
  if @errors.any?
31
32
  @errors.unshift("Expected JSON object to match schema identified by #{@schema_name}, #{@errors.count} errors in validating")
@@ -43,13 +44,17 @@ module JSON
43
44
  "Expected JSON object not to match schema identified by #{@schema_name}"
44
45
  end
45
46
 
47
+ def description
48
+ "match JSON schema identified by #{@schema_name}"
49
+ end
50
+
46
51
  def schema_for_name(schema)
47
52
  RSpec.configuration.json_schemas[schema]
48
53
  end
49
54
  end
50
55
 
51
- def match_json_schema(schema_name)
52
- MatchJsonSchemaMatcher.new(schema_name)
56
+ def match_json_schema(schema_name, validation_opts = {})
57
+ MatchJsonSchemaMatcher.new(schema_name, validation_opts)
53
58
  end
54
59
  end
55
60
  end
@@ -1,7 +1,7 @@
1
1
  module Json
2
2
  module Schema
3
3
  module Rspec
4
- VERSION = "0.0.1"
4
+ VERSION = "0.0.2"
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+
3
+ describe JSON::SchemaMatchers::MatchJsonSchemaMatcher do
4
+ let(:valid_json) { '"hello world"' }
5
+ let(:invalid_json) { '{"key": "value"}' }
6
+ let(:inline_schema) { '{"type": "string"}' }
7
+
8
+ context 'without valid schema_name' do
9
+ let(:unconfigured_schema) { :unconfigured_schema }
10
+ specify 'matches fail' do
11
+ expect(valid_json).not_to match_json_schema(unconfigured_schema)
12
+ end
13
+
14
+ specify 'strict matches fail' do
15
+ expect(valid_json).not_to match_json_schema(unconfigured_schema, strict: true)
16
+ end
17
+
18
+ specify 'assigns a failure message' do
19
+ matcher = match_json_schema(unconfigured_schema)
20
+ expect(matcher.matches?(valid_json)).to eq(false)
21
+ expect(matcher.failure_message).to match(/^No schema defined for #{unconfigured_schema}/)
22
+ end
23
+ end
24
+
25
+ context 'with valid schema_name' do
26
+ before :each do
27
+ RSpec.configuration.json_schemas[:inline_schema] = inline_schema
28
+ end
29
+
30
+ specify 'calls JSON::Validator' do
31
+ schema_value = inline_schema
32
+ json_value = valid_json
33
+ validation_options = {strict: true}
34
+ no_errors = []
35
+
36
+ expect(JSON::Validator).to receive(:fully_validate) do |schema_value_arg, json_value_arg, validation_options_arg|
37
+ expect(schema_value_arg).to eq(schema_value)
38
+ expect(json_value_arg).to eq(json_value)
39
+ expect(validation_options_arg).to eq(validation_options)
40
+ no_errors
41
+ end
42
+
43
+ expect(valid_json).to match_json_schema(:inline_schema, validation_options)
44
+ end
45
+
46
+ context 'finds a match' do
47
+ specify 'when tested against valid json' do
48
+ expect(valid_json).to match_json_schema(:inline_schema)
49
+ end
50
+ end
51
+
52
+ context 'does not find a match' do
53
+ let(:validator_errors) { [:error1, :error2] }
54
+
55
+ specify 'when tested against invalid json' do
56
+ expect(invalid_json).not_to match_json_schema(:inline_schema)
57
+ end
58
+
59
+ specify 'assigns a failure message' do
60
+ expect(JSON::Validator).to receive(:fully_validate) { validator_errors.clone }
61
+ matcher = match_json_schema(:inline_schema)
62
+ expect(matcher.matches?(invalid_json)).to eq(false)
63
+ expect(matcher.failure_message).to eq(expected_failure_message)
64
+ end
65
+
66
+ def expected_failure_message
67
+ first_failure_message = "Expected JSON object to match schema identified by inline_schema, #{validator_errors.count} errors in validating"
68
+ all_failure_messages = [first_failure_message, *validator_errors]
69
+ all_failure_messages.join("\n")
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,14 @@
1
+ require 'json-schema-rspec'
2
+
3
+ Dir[File.expand_path("../../spec/support/**/*.rb",__FILE__)].each { |f| require f }
4
+
5
+ RSpec.configure do |config|
6
+
7
+ config.expect_with :rspec do |c|
8
+ c.syntax = :expect
9
+ end
10
+
11
+ config.filter_run_excluding wip: true
12
+
13
+ config.include JSON::SchemaMatchers
14
+ end
metadata CHANGED
@@ -1,56 +1,54 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json-schema-rspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 0.0.2
6
5
  platform: ruby
7
6
  authors:
7
+ - Sharethrough Engineering
8
8
  - Michael Jensen
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-04-19 00:00:00.000000000 Z
12
+ date: 2015-05-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
16
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
17
  requirements:
19
- - - ! '>='
18
+ - - ">="
20
19
  - !ruby/object:Gem::Version
21
20
  version: '0'
22
21
  type: :runtime
23
22
  prerelease: false
24
23
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
24
  requirements:
27
- - - ! '>='
25
+ - - ">="
28
26
  - !ruby/object:Gem::Version
29
27
  version: '0'
30
28
  - !ruby/object:Gem::Dependency
31
29
  name: json-schema
32
30
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
31
  requirements:
35
- - - ~>
32
+ - - "~>"
36
33
  - !ruby/object:Gem::Version
37
- version: 2.2.2
34
+ version: '2.5'
38
35
  type: :runtime
39
36
  prerelease: false
40
37
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
38
  requirements:
43
- - - ~>
39
+ - - "~>"
44
40
  - !ruby/object:Gem::Version
45
- version: 2.2.2
41
+ version: '2.5'
46
42
  description: Adds RSpec matchers for validating JSON schemas
47
43
  email:
44
+ - engineers@sharethrough.com
48
45
  - emjay1988@gmail.com
49
46
  executables: []
50
47
  extensions: []
51
48
  extra_rdoc_files: []
52
49
  files:
53
- - .gitignore
50
+ - ".gitignore"
51
+ - CHANGELOG.md
54
52
  - Gemfile
55
53
  - LICENSE
56
54
  - README.md
@@ -59,28 +57,31 @@ files:
59
57
  - lib/json-schema-rspec.rb
60
58
  - lib/json-schema-rspec/matchers/json_schema_matcher.rb
61
59
  - lib/json-schema-rspec/version.rb
60
+ - spec/json-schema-rspec/matchers/json_schema_matcher_spec.rb
61
+ - spec/spec_helper.rb
62
62
  homepage: ''
63
63
  licenses: []
64
+ metadata: {}
64
65
  post_install_message:
65
66
  rdoc_options: []
66
67
  require_paths:
67
68
  - lib
68
69
  required_ruby_version: !ruby/object:Gem::Requirement
69
- none: false
70
70
  requirements:
71
- - - ! '>='
71
+ - - ">="
72
72
  - !ruby/object:Gem::Version
73
73
  version: '0'
74
74
  required_rubygems_version: !ruby/object:Gem::Requirement
75
- none: false
76
75
  requirements:
77
- - - ! '>='
76
+ - - ">="
78
77
  - !ruby/object:Gem::Version
79
78
  version: '0'
80
79
  requirements: []
81
80
  rubyforge_project:
82
- rubygems_version: 1.8.24
81
+ rubygems_version: 2.2.2
83
82
  signing_key:
84
- specification_version: 3
83
+ specification_version: 4
85
84
  summary: JSON Schema RSpec matchers
86
- test_files: []
85
+ test_files:
86
+ - spec/json-schema-rspec/matchers/json_schema_matcher_spec.rb
87
+ - spec/spec_helper.rb