1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
|
require "test_helper"
require "commands/validate_schema"
require "tempfile"
describe Commands::ValidateSchema do
before do
@command = Commands::ValidateSchema.new
end
it "shows usage with no arguments" do
success = @command.run([])
assert_equal [], @command.errors
assert_equal [], @command.messages
refute success
end
it "runs successfully in fail fast mode" do
temp_file(basic_schema) do |path|
@command.fail_fast = true
success = @command.run([schema_path, path])
assert_equal [], @command.errors
assert_equal ["#{path} is valid."], @command.messages
assert success
end
end
it "runs successfully in detect mode" do
temp_file(basic_schema) do |path|
@command.extra_schemas << schema_path
@command.detect = true
success = @command.run([path])
assert_equal [], @command.errors
assert_equal ["#{path} is valid."], @command.messages
assert success
end
end
it "runs successfully out of detect mode" do
temp_file(basic_schema) do |path|
@command.detect = false
success = @command.run([schema_path, path])
assert_equal [], @command.errors
assert_equal ["#{path} is valid."], @command.messages
assert success
end
end
it "takes extra schemas" do
temp_file(basic_hyper_schema) do |path|
@command.detect = false
@command.extra_schemas << schema_path
success = @command.run([hyper_schema_path, path])
assert_equal [], @command.errors
assert_equal ["#{path} is valid."], @command.messages
assert success
end
end
it "requires at least one argument in detect mode" do
@command.detect = true
success = @command.run([])
assert_equal [], @command.errors
assert_equal [], @command.messages
refute success
end
it "requires at least two arguments out of detect mode" do
@command.detect = false
success = @command.run([hyper_schema_path])
assert_equal [], @command.errors
assert_equal [], @command.messages
refute success
end
it "errors on invalid files" do
@command.detect = false
success = @command.run(["dne-1", "dne-2"])
assert_equal ["dne-1: No such file or directory."], @command.errors
assert_equal [], @command.messages
refute success
end
it "errors on empty files" do
temp_file("") do |path|
success = @command.run([hyper_schema_path, path])
assert_equal ["#{path}: File is empty."], @command.errors
refute success
end
end
def basic_hyper_schema
<<-eos
{ "$schema": "http://json-schema.org/draft-04/hyper-schema" }
eos
end
def basic_schema
<<-eos
{ "$schema": "http://json-schema.org/draft-04/schema" }
eos
end
def hyper_schema_path
File.expand_path("schema.json", "#{__FILE__}/../../../schemas")
end
def schema_path
File.expand_path("schema.json", "#{__FILE__}/../../../schemas")
end
def temp_file(contents)
file = Tempfile.new("schema")
file.write(contents)
file.size() # flush
yield(file.path)
ensure
file.close
file.unlink
end
end
|