I'm still in the process of learning Ruby myself.  My understanding is that while `do`/`end` and `{}` have different precedence that in general usage `{}` are used for one liners and `do`/`end` are used for multt-line blocks for stylistic reasons. 

I believe that this block:

      it { should contain_package('smartmontools').with(
        :ensure => 'present'
      )} 

Should be writen as either:

      it { should contain_package('smartmontools').with( :ensure => 'present' ) } 

Or:

      it do
        should contain_package('smartmontools').with( :ensure => 'present')
      end 

Let me see if someone on #puppet is willing to comment.