summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2020-08-03 14:40:08 -0700
committerLamont Granquist <lamont@scriptkiddie.org>2020-08-03 14:41:11 -0700
commit6f93233791693b4ae193312628cb615c0fabe172 (patch)
tree3a00b711b400ef0e785f3ff4a474176861c4c839 /spec
parent71088574e7b67850612c43e0804d00baa0984506 (diff)
downloadchef-6f93233791693b4ae193312628cb615c0fabe172.tar.gz
Convert osx_profile to custom resourcelcg/osx_profile
This also does some code cleanup. The path property has been removed as a property since it was never an input to the resource, and just some state that was necessary to abuse the tempfile mechanism. Documented the abuse of the tempfile mechanism for now (I think I actually recall signing off on this awhile back because there was no better way to do it, so its all half my fault, it's still horrible) The actual shell_out calls now raise. This might cause problems? I don't know, but it seems real bad to just blindly swallow errors and continue. Feels like more of a bugfix than a breaking change, but it isn't documented clearly as to why those errors were being ignored anywhere and didn't break any tests so it appears to be a coding error. The mutation of the new_resource was removed (other than the tempfile hack) and migrated to state on the provider. Removed some weird return values on things that are called from a void context. Added some lazy initializers for stuff that made it a lot more readable Converted the cookbook_file resource to a real cookbook_file now that we're in unified_mode. Signed-off-by: Lamont Granquist <lamont@scriptkiddie.org>
Diffstat (limited to 'spec')
-rw-r--r--spec/unit/provider/osx_profile_spec.rb255
-rw-r--r--spec/unit/provider_resolver_spec.rb2
-rw-r--r--spec/unit/resource/osx_profile_spec.rb233
3 files changed, 234 insertions, 256 deletions
diff --git a/spec/unit/provider/osx_profile_spec.rb b/spec/unit/provider/osx_profile_spec.rb
deleted file mode 100644
index 9554f235f3..0000000000
--- a/spec/unit/provider/osx_profile_spec.rb
+++ /dev/null
@@ -1,255 +0,0 @@
-#
-# Author:: Nate Walck (<nate.walck@gmail.com>)
-# Copyright:: Copyright 2015-2016, Chef, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-require "spec_helper"
-
-describe Chef::Provider::OsxProfile do
- let(:shell_out_success) do
- double("shell_out", exitstatus: 0, error?: false)
- end
- describe "action_create" do
- let(:node) { Chef::Node.new }
- let(:events) { Chef::EventDispatch::Dispatcher.new }
- let(:run_context) { Chef::RunContext.new(node, {}, events) }
- let(:new_resource) { Chef::Resource::OsxProfile.new("Profile Test", run_context) }
- let(:provider) { Chef::Provider::OsxProfile.new(new_resource, run_context) }
- let(:all_profiles) do
- { "_computerlevel" => [{ "ProfileDisplayName" => "Finder Settings",
- "ProfileIdentifier" => "com.apple.finder",
- "ProfileInstallDate" => "2015-11-08 23:15:21 +0000",
- "ProfileItems" => [{ "PayloadContent" => { "PayloadContentManagedPreferences" => { "com.apple.finder" => { "Forced" => [{ "mcx_preference_settings" => { "ShowExternalHardDrivesOnDesktop" => false } }] } } },
- "PayloadDisplayName" => "Custom: (com.apple.finder)",
- "PayloadIdentifier" => "com.apple.finder",
- "PayloadType" => "com.apple.ManagedClient.preferences",
- "PayloadUUID" => "a017048f-684b-4e81-baa3-43afe316d739",
- "PayloadVersion" => 1 }],
- "ProfileOrganization" => "Chef",
- "ProfileRemovalDisallowed" => "false",
- "ProfileType" => "Configuration",
- "ProfileUUID" => "e2e09bef-e673-44a6-bcbe-ecb5f1c1b740",
- "ProfileVerificationState" => "unsigned",
- "ProfileVersion" => 1 },
- { "ProfileDisplayName" => "ScreenSaver Settings",
- "ProfileIdentifier" => "com.testprofile.screensaver",
- "ProfileInstallDate" => "2015-10-05 23:15:21 +0000",
- "ProfileItems" => [{ "PayloadContent" => { "PayloadContentManagedPreferences" => { "com.apple.screensaver" => { "Forced" => [{ "mcx_preference_settings" => { "idleTime" => 0 } }] } } },
- "PayloadDisplayName" => "Custom: (com.apple.screensaver)",
- "PayloadIdentifier" => "com.apple.screensaver",
- "PayloadType" => "com.apple.ManagedClient.preferences",
- "PayloadUUID" => "73fc30e0-1e57-0131-c32d-000c2944c110",
- "PayloadVersion" => 1 }],
- "ProfileOrganization" => "Chef",
- "ProfileRemovalDisallowed" => "false",
- "ProfileType" => "Configuration",
- "ProfileUUID" => "6e95927c-f200-54b4-85c7-52ab99b61c47",
- "ProfileVerificationState" => "unsigned",
- "ProfileVersion" => 1 }],
- }
- end
- # If anything is changed within this profile, be sure to update the
- # ProfileUUID in all_profiles to match the new config specific UUID
- let(:test_profile) do
- {
- "PayloadIdentifier" => "com.testprofile.screensaver",
- "PayloadRemovalDisallowed" => false,
- "PayloadScope" => "System",
- "PayloadType" => "Configuration",
- "PayloadUUID" => "1781fbec-3325-565f-9022-8aa28135c3cc",
- "PayloadOrganization" => "Chef",
- "PayloadVersion" => 1,
- "PayloadDisplayName" => "Screensaver Settings",
- "PayloadContent" => [
- {
- "PayloadType" => "com.apple.ManagedClient.preferences",
- "PayloadVersion" => 1,
- "PayloadIdentifier" => "com.testprofile.screensaver",
- "PayloadUUID" => "73fc30e0-1e57-0131-c32d-000c2944c108",
- "PayloadEnabled" => true,
- "PayloadDisplayName" => "com.apple.screensaver",
- "PayloadContent" => {
- "com.apple.screensaver" => {
- "Forced" => [
- {
- "mcx_preference_settings" => {
- "idleTime" => 0,
- },
- },
- ],
- },
- },
- },
- ],
- }
- end
- let(:no_profiles) do
- {}
- end
-
- before(:each) do
- allow(provider).to receive(:cookbook_file_available?).and_return(true)
- allow(provider).to receive(:cache_cookbook_profile).and_return("/tmp/test.mobileconfig.remote")
- allow(provider).to receive(:get_new_profile_hash).and_return(test_profile)
- allow(provider).to receive(:get_installed_profiles).and_return(all_profiles)
- allow(provider).to receive(:read_plist).and_return(all_profiles)
- allow(::File).to receive(:unlink).and_return(true)
- end
-
- it "should build the get all profiles shellout command correctly" do
- profile_name = "com.testprofile.screensaver.mobileconfig"
- tempfile = "/tmp/allprofiles.plist"
- new_resource.profile_name profile_name
- allow(provider).to receive(:generate_tempfile).and_return(tempfile)
- allow(provider).to receive(:get_installed_profiles).and_call_original
- allow(provider).to receive(:read_plist).and_return(all_profiles)
- expect(provider).to receive(:shell_out_compacted!).with("/usr/bin/profiles", "-P", "-o", "/tmp/allprofiles.plist")
- provider.load_current_resource
- end
-
- it "should use profile name as profile when no profile is set" do
- profile_name = "com.testprofile.screensaver.mobileconfig"
- new_resource.profile_name profile_name
- provider.load_current_resource
- expect(new_resource.profile_name).to eql(profile_name)
- end
-
- it "should use identifier from specified profile" do
- new_resource.profile test_profile
- provider.load_current_resource
- expect(
- provider.instance_variable_get(:@new_profile_identifier)
- ).to eql(test_profile["PayloadIdentifier"])
- end
-
- it "should install when not installed" do
- new_resource.profile test_profile
- allow(provider).to receive(:get_installed_profiles).and_return(no_profiles)
- provider.load_current_resource
- expect(provider).to receive(:install_profile)
- expect { provider.run_action(:install) }.to_not raise_error
- end
-
- it "does not install if the profile is already installed" do
- new_resource.profile test_profile
- allow(provider).to receive(:get_installed_profiles).and_return(all_profiles)
- provider.load_current_resource
- expect(provider).to_not receive(:install_profile)
- expect { provider.action_install }.to_not raise_error
- end
-
- it "should install when installed but uuid differs" do
- new_resource.profile test_profile
- all_profiles["_computerlevel"][1]["ProfileUUID"] = "1781fbec-3325-565f-9022-9bb39245d4dd"
- provider.load_current_resource
- expect(provider).to receive(:install_profile)
- expect { provider.run_action(:install) }.to_not raise_error
- end
-
- it "should build the shellout install command correctly" do
- profile_path = "/tmp/test.mobileconfig"
- new_resource.profile test_profile
- # Change the profile so it triggers an install
- all_profiles["_computerlevel"][1]["ProfileUUID"] = "1781fbec-3325-565f-9022-9bb39245d4dd"
- provider.load_current_resource
- allow(provider).to receive(:write_profile_to_disk).and_return(profile_path)
- expect(provider).to receive(:shell_out_compacted).with("/usr/bin/profiles", "-I", "-F", profile_path).and_return(shell_out_success)
- provider.action_install
- end
-
- it "should fail if there is no identifier inside the profile" do
- test_profile.delete("PayloadIdentifier")
- new_resource.profile test_profile
- error_message = "The specified profile does not seem to be valid"
- expect { provider.run_action(:install) }.to raise_error(RuntimeError, error_message)
- end
-
- end
-
- describe "action_remove" do
- let(:node) { Chef::Node.new }
- let(:events) { Chef::EventDispatch::Dispatcher.new }
- let(:run_context) { Chef::RunContext.new(node, {}, events) }
- let(:new_resource) { Chef::Resource::OsxProfile.new("Profile Test", run_context) }
- let(:provider) { Chef::Provider::OsxProfile.new(new_resource, run_context) }
- let(:current_resource) { Chef::Resource::OsxProfile.new("Profile Test") }
- let(:all_profiles) do
- { "_computerlevel" => [{ "ProfileDisplayName" => "ScreenSaver Settings",
- "ProfileIdentifier" => "com.apple.screensaver",
- "ProfileInstallDate" => "2015-10-05 23:15:21 +0000",
- "ProfileItems" => [{ "PayloadContent" => { "PayloadContentManagedPreferences" => { "com.apple.screensaver" => { "Forced" => [{ "mcx_preference_settings" => { "idleTime" => 0 } }] } } },
- "PayloadDisplayName" => "Custom: (com.apple.screensaver)",
- "PayloadIdentifier" => "com.apple.screensaver",
- "PayloadType" => "com.apple.ManagedClient.preferences",
- "PayloadUUID" => "73fc30e0-1e57-0131-c32d-000c2944c108",
- "PayloadVersion" => 1 }],
- "ProfileOrganization" => "Chef",
- "ProfileRemovalDisallowed" => "false",
- "ProfileType" => "Configuration",
- "ProfileUUID" => "1781fbec-3325-565f-9022-8aa28135c3cc",
- "ProfileVerificationState" => "unsigned",
- "ProfileVersion" => 1 },
- { "ProfileDisplayName" => "ScreenSaver Settings",
- "ProfileIdentifier" => "com.testprofile.screensaver",
- "ProfileInstallDate" => "2015-10-05 23:15:21 +0000",
- "ProfileItems" => [{ "PayloadContent" => { "PayloadContentManagedPreferences" => { "com.apple.screensaver" => { "Forced" => [{ "mcx_preference_settings" => { "idleTime" => 0 } }] } } },
- "PayloadDisplayName" => "Custom: (com.apple.screensaver)",
- "PayloadIdentifier" => "com.apple.screensaver",
- "PayloadType" => "com.apple.ManagedClient.preferences",
- "PayloadUUID" => "73fc30e0-1e57-0131-c32d-000c2944c110",
- "PayloadVersion" => 1 }],
- "ProfileOrganization" => "Chef",
- "ProfileRemovalDisallowed" => "false",
- "ProfileType" => "Configuration",
- "ProfileUUID" => "1781fbec-3325-565f-9022-8aa28135c3cc",
- "ProfileVerificationState" => "unsigned",
- "ProfileVersion" => 1 }],
- }
- end
- before(:each) do
- provider.current_resource = current_resource
- allow(provider).to receive(:get_installed_profiles).and_return(all_profiles)
- end
-
- it "should use resource name for identifier when not specified" do
- new_resource.profile_name "com.testprofile.screensaver"
- new_resource.action(:remove)
- provider.load_current_resource
- expect(provider.instance_variable_get(:@new_profile_identifier)).to eql(new_resource.profile_name)
- end
-
- it "should use specified identifier" do
- new_resource.identifier "com.testprofile.screensaver"
- new_resource.action(:remove)
- provider.load_current_resource
- expect(provider.instance_variable_get(:@new_profile_identifier)).to eql(new_resource.identifier)
- end
-
- it "should work with spaces in the identifier" do
- provider.action = :remove
- provider.define_resource_requirements
- expect { provider.process_resource_requirements }.not_to raise_error
- end
-
- it "should build the shellout remove command correctly" do
- new_resource.identifier "com.testprofile.screensaver"
- new_resource.action(:remove)
- provider.load_current_resource
- expect(provider).to receive(:shell_out_compacted).with("/usr/bin/profiles", "-R", "-p", new_resource.identifier).and_return(shell_out_success)
- provider.action_remove
- end
- end
-end
diff --git a/spec/unit/provider_resolver_spec.rb b/spec/unit/provider_resolver_spec.rb
index dc8619a663..f4212e3a8d 100644
--- a/spec/unit/provider_resolver_spec.rb
+++ b/spec/unit/provider_resolver_spec.rb
@@ -722,7 +722,7 @@ describe Chef::ProviderResolver do
%w{mac_os_x mac_os_x_server} => {
group: [ Chef::Resource::Group, Chef::Provider::Group::Dscl ],
package: [ Chef::Resource::HomebrewPackage, Chef::Provider::Package::Homebrew ],
- osx_profile: [ Chef::Resource::OsxProfile, Chef::Provider::OsxProfile],
+ osx_profile: [ Chef::Resource::OsxProfile],
user: [ Chef::Resource::User::DsclUser, Chef::Provider::User::Dscl ],
"mac_os_x" => {
diff --git a/spec/unit/resource/osx_profile_spec.rb b/spec/unit/resource/osx_profile_spec.rb
index 5653044358..a9acadced8 100644
--- a/spec/unit/resource/osx_profile_spec.rb
+++ b/spec/unit/resource/osx_profile_spec.rb
@@ -58,4 +58,237 @@ describe Chef::Resource::OsxProfile do
resource.profile test_profile
expect(resource.profile).to be_a(Hash)
end
+
+ let(:shell_out_success) do
+ double("shell_out", exitstatus: 0, error?: false)
+ end
+
+ describe "action_create" do
+ let(:node) { Chef::Node.new }
+ let(:events) { Chef::EventDispatch::Dispatcher.new }
+ let(:run_context) { Chef::RunContext.new(node, {}, events) }
+ let(:resource) { Chef::Resource::OsxProfile.new("Profile Test", run_context) }
+ let(:provider) { resource.provider_for_action(:create) }
+ let(:all_profiles) do
+ { "_computerlevel" => [{ "ProfileDisplayName" => "Finder Settings",
+ "ProfileIdentifier" => "com.apple.finder",
+ "ProfileInstallDate" => "2015-11-08 23:15:21 +0000",
+ "ProfileItems" => [{ "PayloadContent" => { "PayloadContentManagedPreferences" => { "com.apple.finder" => { "Forced" => [{ "mcx_preference_settings" => { "ShowExternalHardDrivesOnDesktop" => false } }] } } },
+ "PayloadDisplayName" => "Custom: (com.apple.finder)",
+ "PayloadIdentifier" => "com.apple.finder",
+ "PayloadType" => "com.apple.ManagedClient.preferences",
+ "PayloadUUID" => "a017048f-684b-4e81-baa3-43afe316d739",
+ "PayloadVersion" => 1 }],
+ "ProfileOrganization" => "Chef",
+ "ProfileRemovalDisallowed" => "false",
+ "ProfileType" => "Configuration",
+ "ProfileUUID" => "e2e09bef-e673-44a6-bcbe-ecb5f1c1b740",
+ "ProfileVerificationState" => "unsigned",
+ "ProfileVersion" => 1 },
+ { "ProfileDisplayName" => "ScreenSaver Settings",
+ "ProfileIdentifier" => "com.testprofile.screensaver",
+ "ProfileInstallDate" => "2015-10-05 23:15:21 +0000",
+ "ProfileItems" => [{ "PayloadContent" => { "PayloadContentManagedPreferences" => { "com.apple.screensaver" => { "Forced" => [{ "mcx_preference_settings" => { "idleTime" => 0 } }] } } },
+ "PayloadDisplayName" => "Custom: (com.apple.screensaver)",
+ "PayloadIdentifier" => "com.apple.screensaver",
+ "PayloadType" => "com.apple.ManagedClient.preferences",
+ "PayloadUUID" => "73fc30e0-1e57-0131-c32d-000c2944c110",
+ "PayloadVersion" => 1 }],
+ "ProfileOrganization" => "Chef",
+ "ProfileRemovalDisallowed" => "false",
+ "ProfileType" => "Configuration",
+ "ProfileUUID" => "6e95927c-f200-54b4-85c7-52ab99b61c47",
+ "ProfileVerificationState" => "unsigned",
+ "ProfileVersion" => 1 }],
+ }
+ end
+ # If anything is changed within this profile, be sure to update the
+ # ProfileUUID in all_profiles to match the new config specific UUID
+ let(:test_profile) do
+ {
+ "PayloadIdentifier" => "com.testprofile.screensaver",
+ "PayloadRemovalDisallowed" => false,
+ "PayloadScope" => "System",
+ "PayloadType" => "Configuration",
+ "PayloadUUID" => "1781fbec-3325-565f-9022-8aa28135c3cc",
+ "PayloadOrganization" => "Chef",
+ "PayloadVersion" => 1,
+ "PayloadDisplayName" => "Screensaver Settings",
+ "PayloadContent" => [
+ {
+ "PayloadType" => "com.apple.ManagedClient.preferences",
+ "PayloadVersion" => 1,
+ "PayloadIdentifier" => "com.testprofile.screensaver",
+ "PayloadUUID" => "73fc30e0-1e57-0131-c32d-000c2944c108",
+ "PayloadEnabled" => true,
+ "PayloadDisplayName" => "com.apple.screensaver",
+ "PayloadContent" => {
+ "com.apple.screensaver" => {
+ "Forced" => [
+ {
+ "mcx_preference_settings" => {
+ "idleTime" => 0,
+ },
+ },
+ ],
+ },
+ },
+ },
+ ],
+ }
+ end
+ let(:no_profiles) do
+ {}
+ end
+
+ before(:each) do
+ allow(provider).to receive(:cookbook_file_available?).and_return(true)
+ allow(provider).to receive(:cache_cookbook_profile).and_return("/tmp/test.mobileconfig.remote")
+ allow(provider).to receive(:get_new_profile_hash).and_return(test_profile)
+ allow(provider).to receive(:get_installed_profiles).and_return(all_profiles)
+ allow(provider).to receive(:read_plist).and_return(all_profiles)
+ allow(::File).to receive(:unlink).and_return(true)
+ end
+
+ it "should build the get all profiles shellout command correctly" do
+ profile_name = "com.testprofile.screensaver.mobileconfig"
+ resource.profile_name profile_name
+ allow(provider).to receive(:get_installed_profiles).and_call_original
+ allow(provider).to receive(:read_plist).and_return(all_profiles)
+ expect(provider).to receive(:shell_out_compacted!).with("/usr/bin/profiles", "-P", "-o", kind_of(String))
+ provider.load_current_resource
+ end
+
+ it "should use profile name as profile when no profile is set" do
+ profile_name = "com.testprofile.screensaver.mobileconfig"
+ resource.profile_name profile_name
+ provider.load_current_resource
+ expect(resource.profile_name).to eql(profile_name)
+ end
+
+ it "should use identifier from specified profile" do
+ resource.profile test_profile
+ provider.load_current_resource
+ expect(
+ provider.instance_variable_get(:@new_profile_identifier)
+ ).to eql(test_profile["PayloadIdentifier"])
+ end
+
+ it "should install when not installed" do
+ resource.profile test_profile
+ allow(provider).to receive(:get_installed_profiles).and_return(no_profiles)
+ provider.load_current_resource
+ expect(provider).to receive(:install_profile)
+ expect { provider.run_action(:install) }.to_not raise_error
+ end
+
+ it "does not install if the profile is already installed" do
+ resource.profile test_profile
+ allow(provider).to receive(:get_installed_profiles).and_return(all_profiles)
+ provider.load_current_resource
+ expect(provider).to_not receive(:install_profile)
+ expect { provider.action_install }.to_not raise_error
+ end
+
+ it "should install when installed but uuid differs" do
+ resource.profile test_profile
+ all_profiles["_computerlevel"][1]["ProfileUUID"] = "1781fbec-3325-565f-9022-9bb39245d4dd"
+ provider.load_current_resource
+ expect(provider).to receive(:install_profile)
+ expect { provider.run_action(:install) }.to_not raise_error
+ end
+
+ it "should build the shellout install command correctly" do
+ profile_path = "/tmp/test.mobileconfig"
+ resource.profile test_profile
+ # Change the profile so it triggers an install
+ all_profiles["_computerlevel"][1]["ProfileUUID"] = "1781fbec-3325-565f-9022-9bb39245d4dd"
+ provider.load_current_resource
+ allow(provider).to receive(:write_profile_to_disk).and_return(profile_path)
+ expect(provider).to receive(:shell_out_compacted!).with("/usr/bin/profiles", "-I", "-F", profile_path).and_return(shell_out_success)
+ provider.action_install
+ end
+
+ it "should fail if there is no identifier inside the profile" do
+ test_profile.delete("PayloadIdentifier")
+ resource.profile test_profile
+ error_message = "The specified profile does not seem to be valid"
+ expect { provider.run_action(:install) }.to raise_error(RuntimeError, error_message)
+ end
+ end
+
+ describe "action_remove" do
+ let(:node) { Chef::Node.new }
+ let(:events) { Chef::EventDispatch::Dispatcher.new }
+ let(:run_context) { Chef::RunContext.new(node, {}, events) }
+ let(:resource) { Chef::Resource::OsxProfile.new("Profile Test", run_context) }
+ let(:provider) { resource.provider_for_action(:remove) }
+ let(:current_resource) { Chef::Resource::OsxProfile.new("Profile Test") }
+ let(:all_profiles) do
+ { "_computerlevel" => [{ "ProfileDisplayName" => "ScreenSaver Settings",
+ "ProfileIdentifier" => "com.apple.screensaver",
+ "ProfileInstallDate" => "2015-10-05 23:15:21 +0000",
+ "ProfileItems" => [{ "PayloadContent" => { "PayloadContentManagedPreferences" => { "com.apple.screensaver" => { "Forced" => [{ "mcx_preference_settings" => { "idleTime" => 0 } }] } } },
+ "PayloadDisplayName" => "Custom: (com.apple.screensaver)",
+ "PayloadIdentifier" => "com.apple.screensaver",
+ "PayloadType" => "com.apple.ManagedClient.preferences",
+ "PayloadUUID" => "73fc30e0-1e57-0131-c32d-000c2944c108",
+ "PayloadVersion" => 1 }],
+ "ProfileOrganization" => "Chef",
+ "ProfileRemovalDisallowed" => "false",
+ "ProfileType" => "Configuration",
+ "ProfileUUID" => "1781fbec-3325-565f-9022-8aa28135c3cc",
+ "ProfileVerificationState" => "unsigned",
+ "ProfileVersion" => 1 },
+ { "ProfileDisplayName" => "ScreenSaver Settings",
+ "ProfileIdentifier" => "com.testprofile.screensaver",
+ "ProfileInstallDate" => "2015-10-05 23:15:21 +0000",
+ "ProfileItems" => [{ "PayloadContent" => { "PayloadContentManagedPreferences" => { "com.apple.screensaver" => { "Forced" => [{ "mcx_preference_settings" => { "idleTime" => 0 } }] } } },
+ "PayloadDisplayName" => "Custom: (com.apple.screensaver)",
+ "PayloadIdentifier" => "com.apple.screensaver",
+ "PayloadType" => "com.apple.ManagedClient.preferences",
+ "PayloadUUID" => "73fc30e0-1e57-0131-c32d-000c2944c110",
+ "PayloadVersion" => 1 }],
+ "ProfileOrganization" => "Chef",
+ "ProfileRemovalDisallowed" => "false",
+ "ProfileType" => "Configuration",
+ "ProfileUUID" => "1781fbec-3325-565f-9022-8aa28135c3cc",
+ "ProfileVerificationState" => "unsigned",
+ "ProfileVersion" => 1 }],
+ }
+ end
+
+ before(:each) do
+ provider.current_resource = current_resource
+ allow(provider).to receive(:get_installed_profiles).and_return(all_profiles)
+ end
+
+ it "should use resource name for identifier when not specified" do
+ resource.profile_name "com.testprofile.screensaver"
+ resource.action(:remove)
+ provider.load_current_resource
+ expect(provider.instance_variable_get(:@new_profile_identifier)).to eql(resource.profile_name)
+ end
+
+ it "should use specified identifier" do
+ resource.identifier "com.testprofile.screensaver"
+ resource.action(:remove)
+ provider.load_current_resource
+ expect(provider.instance_variable_get(:@new_profile_identifier)).to eql(resource.identifier)
+ end
+
+ it "should work with spaces in the identifier" do
+ provider.action = :remove
+ provider.define_resource_requirements
+ expect { provider.process_resource_requirements }.not_to raise_error
+ end
+
+ it "should build the shellout remove command correctly" do
+ resource.identifier "com.testprofile.screensaver"
+ resource.action(:remove)
+ provider.load_current_resource
+ expect(provider).to receive(:shell_out_compacted!).with("/usr/bin/profiles", "-R", "-p", resource.identifier).and_return(shell_out_success)
+ provider.action_remove
+ end
+ end
end