Thanks David.  Simple things seem more complex with RSpec than they should 
be. 

On Tuesday, July 25, 2017 at 6:14:55 AM UTC-4, David Schmitt wrote:
>
>
>
> On 25 July 2017 at 00:21, James Perry <[email protected] <javascript:>> 
> wrote:
>
>> So I have a simple class, for now, where I am trying to write RSPEC tests 
>> to check the following: 
>>
>> 1. Smart Parameter $current_version is in catalogue.
>> 2. If $current_version = $installed_version (custom fact that will be 
>> stubbed as a :fact), that 'class foo' exits without doing anything. 
>> 3. if $current_version != $installed_version a class foo::cleanup is 
>> called. 
>>
>> I have looked all over to try to work this out and keep hitting posts 
>> about "can't check variables" but when I do a p catalogue.resources I see:
>>
>> foo
>> [Stage[main]{:name=>"main"}, Class[Settings]{:name=>"Settings"}, 
>> Class[main]{:name=>"main"}, Class[Foo]{:name=>"Foo", 
>> :mypath=>"/opt/mypath", :current_ver=>"0.1.2"}]
>>
>> In foo.pp: 
>> class foo ( $mypath="/usr/local/mypath", $current_version="0.1.2" ) {
>>   if $installed_version == $current_version { # Goodie. Nothing to do }
>>   else { include foo::cleanup }
>>   
>> }
>>
>> In the spec file .spec/classes/init_spec.rb:
>> require 'spec_helper'
>> describe 'foo' do
>>    context 'foo current version' do 
>>    let :params do { 
>>        :mypath => '/opt/mypath', 
>>       # :current_version => '1.2.3', 
>>        } 
>>     end 
>>
>>    it {p catalogue.resources}
>>    it do 
>>       is expected_to contain_class('foo').with(:current_version => 
>> "0.1.2" )
>>    end
>> end
>>
>> While this is very basic, and I have tried multiple ways, it error out 
>> with:
>>      Failure/Error: should 
>> contain_class('epops_hyperic').with_current_version("0.1.2")
>>        expected that the catalogue would contain Class[epops_hyperic] 
>> with current_version set to "0.1.2" but it is set to nil
>>
>> Yet the p catalogue.resources function shows the shows it correctly as 
>> noted in the Stage[main] above.
>>
>> If I uncomment the parameter :current_version => '1.2.3'  the catalogue 
>> print has :current_version => "1.2.3" as expected (since it is overridden) 
>> and the test fails with the expected message :current_ver set to "0.1.2" 
>> but it is set to "1.2.3". This I know how to deal with, but that then 
>> causes the problems with 2 and 3 above. 
>>
>> What I want to test in the spec is if current_ver == expected version, 
>> the module doesn't need to do anything and exits. If not it will call class 
>> foo::cleanup. I read a lot on this today and have seen various generalized 
>> suggestions about 3, but nothing about 2. 
>>
>> How do I test if the class exits after finding nothing is needed to be 
>> done or it included the class to do a cleanup accordingly? 
>>
>
> Under the assumption that $installed_version is a fact, you can provide 
> stubbed fact values in your test setup. See 
> http://rspec-puppet.com/documentation/classes/#specifying-facts for 
> details.
>
> In your case, you then can have test cases for $installed_version, and 
> $current_version set to various different values and have your expectations 
> set up to expect, or not, the cleanup class:
>
> context "when nothing to do" do
>   let(:facts) {{ installed_version: '1.2.3' }}
>   let(:params) {{ configured_version: '1.2.3' }}
>
>   it { is_expected.not_to contain_class('foo::cleanup') }
> end
>
> context "when updating" do
>   let(:facts) {{ installed_version: '1.0.0' }}
>   let(:params) {{ configured_version: '1.2.3' }}
>
>   it { is_expected.to contain_class('foo::cleanup') }
> end
>
> Cheers, David
>  
>
>>
>> All of the tutorials give basics, but I can't find anything digging more 
>> specific that seems to work. 
>>
>> Can anyone point me to the right places to look to research this?  So far 
>> the spec files seem really good for TDD, but without a good reference to 
>> these sorts of non file, package, service checks it is confusing. 
>>
>> Thanks! 
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Puppet Developers" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/puppet-dev/aa734244-5887-485a-bb77-d88648b889de%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/puppet-dev/aa734244-5887-485a-bb77-d88648b889de%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-dev/ecb83860-9dc5-4117-bb8a-a831ec92a4ab%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to