(maint) refactor validate_slength tests

This commit is contained in:
Adrien Thebo 2013-08-12 12:48:46 -07:00
parent 1950b605fb
commit 200e585ea7

View file

@ -9,52 +9,59 @@ describe "the validate_slength function" do
Puppet::Parser::Functions.function("validate_slength").should == "function_validate_slength" Puppet::Parser::Functions.function("validate_slength").should == "function_validate_slength"
end end
it "should raise a ParseError if there is less than 2 arguments" do describe "validating the input argument types" do
expect { scope.function_validate_slength([]) }.to(raise_error(Puppet::ParseError)) it "raises an error if there are less than two arguments" do
expect { scope.function_validate_slength(["asdf"]) }.to(raise_error(Puppet::ParseError)) expect { scope.function_validate_slength([]) }.to raise_error Puppet::ParseError, /Wrong number of arguments/
end end
it "should raise a ParseError if argument 2 doesn't convert to a fixnum" do it "raises an error if there are more than three arguments" do
expect { scope.function_validate_slength(["moo",["2"]]) }.to(raise_error(Puppet::ParseError, /Couldn't convert whatever you passed/)) expect { scope.function_validate_slength(['input', 1, 2, 3]) }.to raise_error Puppet::ParseError, /Wrong number of arguments/
end end
it "should raise a ParseError if argument 2 converted, but to 0, e.g. a string" do it "raises an error if the first argument is not a string" do
expect { scope.function_validate_slength(["moo","monkey"]) }.to(raise_error(Puppet::ParseError, /please pass a positive number as max_length/)) expect { scope.function_validate_slength([Object.new, 2, 1]) }.to raise_error Puppet::ParseError, /Expected first argument.*got .*Object/
end end
it "should raise a ParseError if argument 2 converted, but to 0" do it "raises an error if the second argument cannot be cast to an Integer" do
expect { scope.function_validate_slength(["moo","0"]) }.to(raise_error(Puppet::ParseError, /please pass a positive number as max_length/)) expect { scope.function_validate_slength(['input', Object.new]) }.to raise_error Puppet::ParseError, /Expected second argument.*got .*Object/
end end
it "should raise a ParseError if argument 3 doesn't convert to a fixnum" do it "raises an error if the third argument cannot be cast to an Integer" do
expect { scope.function_validate_slength(["moo",2,["3"]]) }.to(raise_error(Puppet::ParseError, /Couldn't convert whatever you passed/)) expect { scope.function_validate_slength(['input', 1, Object.new]) }.to raise_error Puppet::ParseError, /Expected third argument.*got .*Object/
end end
it "should raise a ParseError if argument 3 converted, but to 0, e.g. a string" do it "raises an error if the second argument is smaller than the third argument" do
expect { scope.function_validate_slength(["moo",2,"monkey"]) }.to(raise_error(Puppet::ParseError, /Couldn't convert whatever you passed/)) expect { scope.function_validate_slength(['input', 1, 2]) }.to raise_error Puppet::ParseError, /Expected second argument to be larger than third argument/
end
end end
it "should fail if string greater then size" do describe "validating the input string length" do
expect { scope.function_validate_slength(["test", 2]) }.to(raise_error(Puppet::ParseError, /It should have been between 0 and 2/)) describe "when the input is a string" do
it "fails validation if the string is larger than the max length" do
expect { scope.function_validate_slength(['input', 1]) }.to raise_error Puppet::ParseError, /Expected length .* between 0 and 1, was 5/
end end
it "should fail if the min length is larger than the max length" do it "fails validation if the string is less than the min length" do
expect { scope.function_validate_slength(["test", 10, 15]) }.to(raise_error(Puppet::ParseError, /pass a min length that is smaller than the max/)) expect { scope.function_validate_slength(['input', 10, 6]) }.to raise_error Puppet::ParseError, /Expected length .* between 6 and 10, was 5/
end end
it "should fail if you pass an array of something other than strings" do it "doesn't raise an error if the string is under the max length" do
expect { scope.function_validate_slength([["moo",["moo"],Hash.new["moo" => 7]], 7]) }.to(raise_error(Puppet::ParseError, /is not a string, it's a/)) scope.function_validate_slength(['input', 10])
end end
it "should fail if you pass something other than a string or array" do it "doesn't raise an error if the string is equal to the max length" do
expect { scope.function_validate_slength([Hash.new["moo" => "7"],6]) }.to(raise_error(Puppet::ParseError, /please pass a string, or an array of strings/)) scope.function_validate_slength(['input', 5])
end end
it "should not fail if string is smaller or equal to size" do it "doesn't raise an error if the string is equal to the min length" do
expect { scope.function_validate_slength(["test", 5]) }.to_not(raise_error(Puppet::ParseError)) scope.function_validate_slength(['input', 10, 5])
end
end end
it "should not fail if array of string is are all smaller or equal to size" do describe "when the input is an array" do
expect { scope.function_validate_slength([["moo","foo","bar"], 5]) }.to_not(raise_error(Puppet::ParseError)) it "fails validation if one of the array elements is not a string" do
expect { scope.function_validate_slength([["a", "b", Object.new], 2]) }.to raise_error Puppet::ParseError, /Expected element at array position 2 .*String, got .*Object/
end
end
end end
end end