# frozen_string_literal: true require 'spec_helper' describe 'apt::mark', type: :define do let :title do 'mysource' end let :facts do { os: { family: 'Debian', name: 'Debian', release: { major: '9', full: '9.0' }, distro: { codename: 'stretch', id: 'Debian' } } } end context 'with correct seting' do let :params do { 'setting' => 'manual' } end it { expect(subject).to contain_exec('apt-mark manual mysource') } end describe 'with wrong setting' do let :params do { 'setting' => 'foobar' } end it do expect(subject).to raise_error(Puppet::PreformattedError, %r{expects a match for Enum\['auto', 'hold', 'manual', 'unhold'\], got 'foobar'}) end end [ 'package', 'package1', 'package.name', 'package-name', 'package+name', 'p.ackagename', 'p+ackagename', 'p+', ].each do |value| describe 'with a valid resource title' do let :title do value end let :params do { 'setting' => 'manual' } end it do expect(subject).to contain_exec("apt-mark manual #{title}") end end end # packagenames starting with + are not valid as the title according to puppet # good thing this is also an illegal name for debian packages [ '|| ls -la ||', 'packakge with space', 'package<>|', '|| touch /tmp/foo.txt ||', 'package_name', 'PackageName', '.p', 'p', ].each do |value| describe "with an invalid resource title [#{value}]" do let :title do value end let :params do { 'setting' => 'manual' } end it do expect(subject).to raise_error(Puppet::PreformattedError, %r{Invalid package name: #{title}}) end end end end