spec/acknowledgement_spec.rb in cocoapods-acknowledgements-1.1.3 vs spec/acknowledgement_spec.rb in cocoapods-acknowledgements-1.2.0

- old
+ new

@@ -1,5 +1,155 @@ require File.expand_path('../spec_helper.rb', __FILE__) +require 'xcodeproj' describe CocoaPodsAcknowledgements do + UmbrellaTargetDescription = Pod::Installer::PostInstallHooksContext::UmbrellaTargetDescription + + before do + @project_path = SpecHelper.temporary_directory + 'project.xcodeproj' + @project = Xcodeproj::Project.new(@project_path) + @project.initialize_from_scratch + @sandbox = temporary_sandbox + @spec1 = SpecHelper.spec1 + @spec2 = SpecHelper.spec2 + + @settings_plist_content = { + 'Title' => 'Acknowledgements', + 'StringsTable' => 'Acknowledgements', + 'PreferenceSpecifiers' => [ + { + 'Title' => 'Acknowledgements', + 'Type' => 'PSGroupSpecifier', + 'FooterText' => 'This application makes use of the following third party libraries:' + }, + { + 'Title' => 'monkeylib', + 'Type' => 'PSGroupSpecifier', + 'FooterText' => 'Permission is hereby granted ...' + }, + { + 'Title' => 'BananaLib', + 'Type' => 'PSGroupSpecifier', + 'FooterText' => 'Permission is hereby granted ...' + }, + { + 'Title' => nil, + 'Type' => 'PSGroupSpecifier', + 'FooterText' => 'Generated by CocoaPods - https://cocoapods.org' + }, + ] + } + @plist_content = { + "specs" => [ + { + "name" => "monkeylib", + "version"=> Pod::Version.new(1.0), + "authors"=> { + "CocoaPods" => "email@cocoapods.org" + }, + "socialMediaURL" => "https://twitter.com/CocoaPods", + "summary" => "A lib to do monkey things", + "description" => "<h2>What is it</h2>\n\n<p>A lib to do monkey things</p>\n\n<h2>Why?</h2>\n\n<p>Why not?</p>\n", + "licenseType" => "MIT", + "licenseText" => "Permission is hereby granted ...", + "homepage" => "https://github.com/CocoaPods/monkeylib" + }, + { + "name" => "BananaLib", + "version" => Pod::Version.new(1.0), + "authors" => { + "Banana Corp" => nil, + "Monkey Boy" => "monkey@banana-corp.local" + }, + "socialMediaURL" => nil, + "summary" => "Chunky bananas!", + "description" => "<p>Full of chunky bananas.</p>\n", + "licenseType" => "MIT", + "licenseText" => "Permission is hereby granted ...", + "homepage" => "http://banana-corp.local/banana-lib.html" + } + ] + } + + @target = @project.new_target(:application, 'MyApp', :ios) + @plist_path = @sandbox.root + 'Pods-MyApp-metadata.plist' + @project.save + end + + after do + FileUtils.rm_rf(SpecHelper.temporary_directory) + end + + describe 'In general' do + it 'finds existing settings bundles' do + settings_bundle = SpecHelper.temporary_directory + 'Settings.bundle' + FileUtils.mkdir(settings_bundle) + resource_group = @project.main_group.new_group('Resources') + resource_group.new_file(settings_bundle) + + result = CocoaPodsAcknowledgements.settings_bundle_in_project(@project) + result.to_s.should == settings_bundle.to_s + FileUtils.rm_rf(settings_bundle) + end + end + + describe '#save_metadata' do + it 'saves the metadata to disk' do + Xcodeproj::Plist.expects(:write_to_path).with(@plist_content, @plist_path).once + CocoaPodsAcknowledgements.save_metadata(@plist_content, @plist_path, @project, @sandbox, @target.uuid) + end + + it 'adds the Pods group if not already existing' do + @project.main_group["Pods"].should.be.nil? + CocoaPodsAcknowledgements.save_metadata(@plist_content, @plist_path, @project, @sandbox, @target.uuid) + @project.main_group["Pods"].should.not.be.nil? + end + + it 'adds the plist to the Pods group' do + CocoaPodsAcknowledgements.save_metadata(@plist_content, @plist_path, @project, @sandbox, @target.uuid) + @project.main_group["Pods"].files.find { |f| f.path == 'Pods-MyApp-metadata.plist' }.should.not.be.nil? + end + + it 'adds the plist to user target Copy Resources build phase' do + CocoaPodsAcknowledgements.save_metadata(@plist_content, @plist_path, @project, @sandbox, @target.uuid) + file_ref = @project.main_group["Pods"].files.find { |f| f.path == 'Pods-MyApp-metadata.plist' } + file_ref.should.not.be.nil? + + @target.resources_build_phase.files.find { |f| f.file_ref == file_ref }.should.not.be.nil? + end + end + + describe 'plugin-hook' do + before do + @target_description = UmbrellaTargetDescription.new(@project, [@target], [@spec1, @spec2], :ios, '8.0', 'Pods-MyApp') + @hook_context = Pod::Installer::PostInstallHooksContext.new(@sandbox, @sandbox.root, nil, [@target_description]) + Xcodeproj::Project.stubs(:open).returns(@project) + end + + it 'generates acknowledgement plists' do + CocoaPodsAcknowledgements.expects(:save_metadata).with(@plist_content, @plist_path, @project, @sandbox, @target.uuid) + Pod::HooksManager.run(:post_install, @hook_context, { 'cocoapods-acknowledgements' => {}}) + end + + it 'generates a settings plist when specified' do + settings_bundle = SpecHelper.temporary_directory + 'Settings.bundle' + settings_plist_path = settings_bundle + 'Pods-MyApp-settings-metadata.plist' + FileUtils.mkdir(settings_bundle) + resource_group = @project.main_group.new_group('Resources') + resource_group.new_file(settings_bundle) + + CocoaPodsAcknowledgements.expects(:save_metadata).with(@plist_content, @plist_path, @project, @sandbox, @target.uuid).once + CocoaPodsAcknowledgements.expects(:save_metadata).with(@settings_plist_content, settings_plist_path.to_s, @project, @sandbox, @target.uuid).once + Pod::HooksManager.run(:post_install, @hook_context, { 'cocoapods-acknowledgements' => { :settings_bundle => true }}) + FileUtils.rm_rf(settings_bundle) + end + + it "generates acknowledgement plists to only specified targets" do + CocoaPodsAcknowledgements.expects(:save_metadata).with(@plist_content, @plist_path, @project, @sandbox, @target.uuid).once + Pod::HooksManager.run(:post_install, @hook_context, { 'cocoapods-acknowledgements' => { targets: ['MyApp'] }}) + + CocoaPodsAcknowledgements.expects(:save_metadata).never + Pod::HooksManager.run(:post_install, @hook_context, { 'cocoapods-acknowledgements' => { targets: ['TheOtherTarget'] }}) + end + end end