+#!/usr/bin/env rspec
+
+require 'spec_helper'
+require File.dirname(__FILE__) + '/../../plugins/mcollective/validator/array_validator.rb'
+
+module MCollective
+ module Validator
+ describe "#load_validators" do
+ it "should not reload the plugins if the plugin cache has not expired" do
+ Validator.instance_variable_set(:@last_load, nil)
+ PluginManager.expects(:find_and_load).with("validator").once
+ Validator.load_validators
+ Validator.load_validators
+ end
+ end
+
+ describe "#[]" do
+ before do
+ Validator.load_validators
+ end
+
+ it "should return the correct class if klass is given as klass" do
+ result = Validator["array"]
+ result.should == ArrayValidator
+ end
+ it "should return the correct class if klass is given as KlassValidator" do
+ result = Validator["ArrayValidator"]
+ result.should == ArrayValidator
+ end
+ it "should return the correct class if klass is given as :klass" do
+ result = Validator[:array]
+ result.should == ArrayValidator
+ end
+ end
+
+ describe "#method_missing" do
+ it "should load a plugin if a validator method is called and the plugin exists" do
+ ArrayValidator.expects(:validate).with(2, [1,2,3])
+ result = Validator.array(2,[1,2,3])
+ end
+
+ it "should call super if a validator method is called and the plugin does not exist" do
+ expect{
+ Validator.rspec(1,2,3)
+ }.to raise_error(ValidatorError)
+ end
+ end
+
+ describe "#validator_class" do
+ it "should return the correct string for a given validator plugin name" do
+ result = Validator.validator_class("test")
+ result.should == "TestValidator"
+ end
+ end
+
+ describe "#has_validator?" do
+ it "should return true if the validator has been loaded" do
+ Validator.const_set(:TestValidator, Class)
+ Validator.has_validator?("test").should == true
+ end
+
+ it "should return false if the validator has not been loaded" do
+ Validator.has_validator?("test2").should == false
+ end
+ end
+ end
+end