(PDOC-88) Add additional spec tests to increase code coverage
This commit is contained in:
		
							parent
							
								
									f72b7995fe
								
							
						
					
					
						commit
						ef6db6df41
					
				| 
						 | 
				
			
			@ -27,6 +27,34 @@ SOURCE
 | 
			
		|||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'parsing a provider with an invalid docstring assignment' do
 | 
			
		||||
    let(:source) { <<-SOURCE
 | 
			
		||||
Puppet::Type.type(:custom).provide :linux do
 | 
			
		||||
  @doc = 123
 | 
			
		||||
end
 | 
			
		||||
SOURCE
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    it 'should log an error' do
 | 
			
		||||
      expect { subject }.to output(/Failed to parse docstring/).to_stdout_from_any_process
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'parsing a provider with a valid docstring assignment' do
 | 
			
		||||
    let(:source) { <<-SOURCE
 | 
			
		||||
Puppet::Type.type(:custom).provide :linux do
 | 
			
		||||
  @doc = 'An example provider on Linux.'
 | 
			
		||||
end
 | 
			
		||||
SOURCE
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    it 'should correctly detect the docstring' do
 | 
			
		||||
      expect(subject.size).to eq(1)
 | 
			
		||||
      object = subject.first
 | 
			
		||||
      expect(object.docstring).to eq('An example provider on Linux.')
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'parsing a provider definition' do
 | 
			
		||||
    let(:source) { <<-SOURCE
 | 
			
		||||
Puppet::Type.type(:custom).provide :linux do
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,8 +27,38 @@ SOURCE
 | 
			
		|||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'parsing a type with an invalid docstring assignment' do
 | 
			
		||||
    let(:source) { <<-SOURCE
 | 
			
		||||
Puppet::Type.newtype(:database) do
 | 
			
		||||
  @doc = 123
 | 
			
		||||
end
 | 
			
		||||
SOURCE
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    it 'should log an error' do
 | 
			
		||||
      expect { subject }.to output(/Failed to parse docstring/).to_stdout_from_any_process
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'parsing a type with a valid docstring assignment' do
 | 
			
		||||
    let(:source) { <<-SOURCE
 | 
			
		||||
Puppet::Type.newtype(:database) do
 | 
			
		||||
  @doc = 'An example database server resource type.'
 | 
			
		||||
end
 | 
			
		||||
SOURCE
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    it 'should correctly detect the docstring' do
 | 
			
		||||
      expect(subject.size).to eq(1)
 | 
			
		||||
      object = subject.first
 | 
			
		||||
      expect(object.docstring).to eq('An example database server resource type.')
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'parsing a type definition' do
 | 
			
		||||
    let(:source) { <<-SOURCE
 | 
			
		||||
# @!puppet.type.param [value1, value2] dynamic_param Documentation for a dynamic parameter.
 | 
			
		||||
# @!puppet.type.property [foo, bar] dynamic_prop Documentation for a dynamic property.
 | 
			
		||||
Puppet::Type.newtype(:database) do
 | 
			
		||||
  desc 'An example database server resource type.'
 | 
			
		||||
  feature :encryption, 'The provider supports encryption.', methods: [:encrypt]
 | 
			
		||||
| 
						 | 
				
			
			@ -54,6 +84,12 @@ Puppet::Type.newtype(:database) do
 | 
			
		|||
    defaultto false
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  newparam(:backup) do
 | 
			
		||||
      desc 'How often to backup the database.'
 | 
			
		||||
      defaultto :never
 | 
			
		||||
      newvalues(:daily, :monthly, :never)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  newproperty(:file) do
 | 
			
		||||
    desc 'The database file to use.'
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			@ -80,47 +116,99 @@ SOURCE
 | 
			
		|||
      tags = object.docstring.tags(:api)
 | 
			
		||||
      expect(tags.size).to eq(1)
 | 
			
		||||
      expect(tags[0].text).to eq('public')
 | 
			
		||||
      expect(object.properties.size).to eq(3)
 | 
			
		||||
      expect(object.properties[0].name).to eq('ensure')
 | 
			
		||||
      expect(object.properties[0].docstring).to eq('What state the database should be in.')
 | 
			
		||||
      expect(object.properties.size).to eq(4)
 | 
			
		||||
      expect(object.properties[0].name).to eq('dynamic_prop')
 | 
			
		||||
      expect(object.properties[0].docstring).to eq('Documentation for a dynamic property.')
 | 
			
		||||
      expect(object.properties[0].isnamevar).to eq(false)
 | 
			
		||||
      expect(object.properties[0].default).to eq('up')
 | 
			
		||||
      expect(object.properties[0].values).to eq(%w(present absent up down))
 | 
			
		||||
      expect(object.properties[0].aliases).to eq({ 'down' => 'absent', 'up' => 'present' })
 | 
			
		||||
      expect(object.properties[1].name).to eq('file')
 | 
			
		||||
      expect(object.properties[1].docstring).to eq('The database file to use.')
 | 
			
		||||
      expect(object.properties[0].values).to eq(%w(foo bar))
 | 
			
		||||
      expect(object.properties[1].name).to eq('ensure')
 | 
			
		||||
      expect(object.properties[1].docstring).to eq('What state the database should be in.')
 | 
			
		||||
      expect(object.properties[1].isnamevar).to eq(false)
 | 
			
		||||
      expect(object.properties[1].default).to be_nil
 | 
			
		||||
      expect(object.properties[1].values).to eq([])
 | 
			
		||||
      expect(object.properties[1].aliases).to eq({})
 | 
			
		||||
      expect(object.properties[2].name).to eq('log_level')
 | 
			
		||||
      expect(object.properties[2].docstring).to eq('The log level to use.')
 | 
			
		||||
      expect(object.properties[1].default).to eq('up')
 | 
			
		||||
      expect(object.properties[1].values).to eq(%w(present absent up down))
 | 
			
		||||
      expect(object.properties[1].aliases).to eq({ 'down' => 'absent', 'up' => 'present' })
 | 
			
		||||
      expect(object.properties[2].name).to eq('file')
 | 
			
		||||
      expect(object.properties[2].docstring).to eq('The database file to use.')
 | 
			
		||||
      expect(object.properties[2].isnamevar).to eq(false)
 | 
			
		||||
      expect(object.properties[2].default).to eq('warn')
 | 
			
		||||
      expect(object.properties[2].values).to eq(%w(debug warn error))
 | 
			
		||||
      expect(object.properties[2].default).to be_nil
 | 
			
		||||
      expect(object.properties[2].values).to eq([])
 | 
			
		||||
      expect(object.properties[2].aliases).to eq({})
 | 
			
		||||
      expect(object.parameters.size).to eq(3)
 | 
			
		||||
      expect(object.parameters[0].name).to eq('address')
 | 
			
		||||
      expect(object.parameters[0].docstring).to eq('The database server name.')
 | 
			
		||||
      expect(object.parameters[0].isnamevar).to eq(true)
 | 
			
		||||
      expect(object.parameters[0].default).to be_nil
 | 
			
		||||
      expect(object.parameters[0].values).to eq([])
 | 
			
		||||
      expect(object.parameters[0].aliases).to eq({})
 | 
			
		||||
      expect(object.parameters[1].name).to eq('encryption_key')
 | 
			
		||||
      expect(object.parameters[1].docstring).to eq('The encryption key to use.')
 | 
			
		||||
      expect(object.parameters[1].isnamevar).to eq(false)
 | 
			
		||||
      expect(object.properties[3].name).to eq('log_level')
 | 
			
		||||
      expect(object.properties[3].docstring).to eq('The log level to use.')
 | 
			
		||||
      expect(object.properties[3].isnamevar).to eq(false)
 | 
			
		||||
      expect(object.properties[3].default).to eq('warn')
 | 
			
		||||
      expect(object.properties[3].values).to eq(%w(debug warn error))
 | 
			
		||||
      expect(object.properties[3].aliases).to eq({})
 | 
			
		||||
      expect(object.parameters.size).to eq(5)
 | 
			
		||||
      expect(object.parameters[0].name).to eq('dynamic_param')
 | 
			
		||||
      expect(object.parameters[0].docstring).to eq('Documentation for a dynamic parameter.')
 | 
			
		||||
      expect(object.parameters[0].isnamevar).to eq(false)
 | 
			
		||||
      expect(object.parameters[0].values).to eq(%w(value1 value2))
 | 
			
		||||
      expect(object.parameters[1].name).to eq('address')
 | 
			
		||||
      expect(object.parameters[1].docstring).to eq('The database server name.')
 | 
			
		||||
      expect(object.parameters[1].isnamevar).to eq(true)
 | 
			
		||||
      expect(object.parameters[1].default).to be_nil
 | 
			
		||||
      expect(object.parameters[1].values).to eq([])
 | 
			
		||||
      expect(object.parameters[1].aliases).to eq({})
 | 
			
		||||
      expect(object.parameters[2].name).to eq('encrypt')
 | 
			
		||||
      expect(object.parameters[2].docstring).to eq('Whether or not to encrypt the database.')
 | 
			
		||||
      expect(object.parameters[2].name).to eq('encryption_key')
 | 
			
		||||
      expect(object.parameters[2].docstring).to eq('The encryption key to use.')
 | 
			
		||||
      expect(object.parameters[2].isnamevar).to eq(false)
 | 
			
		||||
      expect(object.parameters[2].default).to eq('false')
 | 
			
		||||
      expect(object.parameters[2].values).to eq(%w(true false yes no))
 | 
			
		||||
      expect(object.parameters[2].default).to be_nil
 | 
			
		||||
      expect(object.parameters[2].values).to eq([])
 | 
			
		||||
      expect(object.parameters[2].aliases).to eq({})
 | 
			
		||||
      expect(object.parameters[3].name).to eq('encrypt')
 | 
			
		||||
      expect(object.parameters[3].docstring).to eq('Whether or not to encrypt the database.')
 | 
			
		||||
      expect(object.parameters[3].isnamevar).to eq(false)
 | 
			
		||||
      expect(object.parameters[3].default).to eq('false')
 | 
			
		||||
      expect(object.parameters[3].values).to eq(%w(true false yes no))
 | 
			
		||||
      expect(object.parameters[3].aliases).to eq({})
 | 
			
		||||
      expect(object.parameters[4].name).to eq('backup')
 | 
			
		||||
      expect(object.parameters[4].docstring).to eq('How often to backup the database.')
 | 
			
		||||
      expect(object.parameters[4].isnamevar).to eq(false)
 | 
			
		||||
      expect(object.parameters[4].default).to eq('never')
 | 
			
		||||
      expect(object.parameters[4].values).to eq(%w(daily monthly never))
 | 
			
		||||
      expect(object.features.size).to eq(1)
 | 
			
		||||
      expect(object.features[0].name).to eq('encryption')
 | 
			
		||||
      expect(object.features[0].docstring).to eq('The provider supports encryption.')
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'parsing an ensurable type with default ensure values' do
 | 
			
		||||
    let(:source) { <<-SOURCE
 | 
			
		||||
Puppet::Type.newtype(:database) do
 | 
			
		||||
  desc 'An example database server resource type.'
 | 
			
		||||
  ensurable
 | 
			
		||||
end
 | 
			
		||||
SOURCE
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    it 'should register a type object with default ensure values' do
 | 
			
		||||
      expect(subject.size).to eq(1)
 | 
			
		||||
      object = subject.first
 | 
			
		||||
      expect(object.properties[0].name).to eq('ensure')
 | 
			
		||||
      expect(object.properties[0].docstring).to eq('The basic property that the resource should be in.')
 | 
			
		||||
      expect(object.properties[0].default).to eq('present')
 | 
			
		||||
      expect(object.properties[0].values).to eq(%w(present absent))
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'parsing a type with a parameter with the name of "name"' do
 | 
			
		||||
    let(:source) { <<-SOURCE
 | 
			
		||||
Puppet::Type.newtype(:database) do
 | 
			
		||||
  desc 'An example database server resource type.'
 | 
			
		||||
  newparam(:name) do
 | 
			
		||||
    desc 'The database server name.'
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
SOURCE
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    it 'should register a type object with the "name" parameter as the namevar' do
 | 
			
		||||
      expect(subject.size).to eq(1)
 | 
			
		||||
      object = subject.first
 | 
			
		||||
      expect(object.parameters.size).to eq(1)
 | 
			
		||||
      expect(object.parameters[0].name).to eq('name')
 | 
			
		||||
      expect(object.parameters[0].isnamevar).to eq(true)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue