spec/sparkle_spec.rb in motion-sparkle-sandbox-2.0.0 vs spec/sparkle_spec.rb in motion-sparkle-sandbox-2.0.1
- old
+ new
@@ -1,90 +1,138 @@
-require File.expand_path('../spec_helper', __FILE__)
+# frozen_string_literal: true
-module Motion; module Project;
- class Config
- attr_writer :project_dir
+require File.expand_path('spec_utils', __dir__)
+
+module Motion
+ module Project
+ class Config
+ attr_writer :project_dir
+ end
end
-end; end
+end
-describe "motion-sparkle-sandbox" do
- extend SpecHelper::TemporaryDirectory
+# rubocop:disable Metrics/BlockLength
+describe 'motion-sparkle-sandbox' do
+ before(:all) do
+ SpecUtils::TemporaryDirectory.teardown
+ SpecUtils::TemporaryDirectory.setup
- before do
- unless @completed_setup
- teardown_temporary_directory
- setup_temporary_directory
+ FileUtils.mkdir_p("#{SpecUtils::TemporaryDirectory.directory}resources")
+ FileUtils.mkdir_p("#{SpecUtils::TemporaryDirectory.directory}vendor")
+ FileUtils.touch("#{SpecUtils::TemporaryDirectory.directory}.gitignore")
+ end
- FileUtils.mkdir_p(temporary_directory + 'resources')
- FileUtils.mkdir_p(temporary_directory + 'vendor')
- FileUtils.touch(temporary_directory + '.gitignore')
-
+ context 'configuration' do
+ before do
@config = App.config
- @config.project_dir = temporary_directory.to_s
+ @config.sparkle = nil
+ @config.project_dir = SpecUtils::TemporaryDirectory.directory.to_s
@config.instance_eval do
sparkle do
- release :base_url, 'http://example.com'
- release :public_key, 'public_key.pem'
- release :version, '1.0'
- # Optional config options
- release :feed_base_url, 'http://rss.example.com'
- release :feed_filename, 'example.xml'
- release :notes_base_url, 'http://www.example.com'
- release :notes_filename, 'example.html'
- release :package_base_url, 'http://download.example.com'
- release :package_filename, 'example.zip'
+ release :base_url, 'http://example.com/'
end
end
- Rake::Task['sparkle:setup'].invoke
- Rake::Task['sparkle:setup_certificates'].invoke
- @completed_setup = true
end
- end
- it "Sparkle's release base url should be set correctly" do
- @config.sparkle.appcast.base_url.should.equal 'http://example.com'
- end
+ describe 'base url' do
+ it 'base url should be set correctly' do
+ expect(@config.sparkle.appcast.base_url).to eq 'http://example.com/'
+ end
+ end
- it "Sparkle's feed url should be set correctly" do
- @config.info_plist['SUFeedURL'].should.equal 'http://rss.example.com/example.xml'
- end
+ describe 'feed url' do
+ it 'uses default value' do
+ expect(@config.info_plist['SUFeedURL']).to eq 'http://example.com/releases.xml'
+ end
- it "Sparkle's release notes url should be set correctly" do
- @config.sparkle.appcast.notes_url.should.equal 'http://www.example.com/example.html'
- end
+ it 'uses feed_base_url' do
+ @config.sparkle.publish(:feed_base_url, 'http://rss.example.com/')
- it "Sparkle's appcast package url should be set correctly" do
- @config.sparkle.appcast.package_url.should.equal 'http://download.example.com/example.zip'
- end
+ expect(@config.info_plist['SUFeedURL']).to eq 'http://rss.example.com/releases.xml'
+ end
- it "Sparkle's public key should have custom name" do
- @config.info_plist['SUPublicDSAKeyFile'].should.equal 'public_key.pem'
- end
+ it 'uses feed_filename' do
+ @config.sparkle.publish(:feed_base_url, 'http://rss.example.com/')
+ @config.sparkle.publish(:feed_filename, 'example.xml')
- it "Version and short version should be set correctly" do
- @config.version.should.equal '1.0'
- @config.short_version.should.equal '1.0'
- end
+ expect(@config.info_plist['SUFeedURL']).to eq 'http://rss.example.com/example.xml'
+ end
+ end
- it "Version should be same for short_version and version" do
- @config.version.should.equal @config.short_version
- end
+ describe 'appcast package base url' do
+ it 'uses default value' do
+ expect(@config.sparkle.appcast.package_base_url).to eq 'http://example.com/'
+ end
- it "Sparkle framework should be embedded" do
- sparkle_framework_path = ROOT + "tmp/vendor/Sparkle/Sparkle.framework"
- @config.embedded_frameworks.include?(sparkle_framework_path).should.equal true
- end
+ it 'uses package_base_url' do
+ @config.sparkle.publish(:package_base_url, 'http://download.example.com/')
- it "should create private certificate" do
- File.exist?(@config.sparkle.private_key_path.to_s).should.equal true
- end
+ expect(@config.sparkle.appcast.package_base_url).to eq 'http://download.example.com/'
+ end
+ end
- it "should create public certificate" do
- File.exist?(@config.sparkle.public_key_path.to_s).should.equal true
- end
+ describe 'appcast package filename' do
+ it 'has no default value' do
+ expect(@config.sparkle.appcast.package_filename).to be_nil
+ end
- it "should add files to gitignore" do
- a = `cat .gitignore`
- a.strip.should.not.equal ''
+ it 'uses package_filename' do
+ @config.sparkle.publish(:package_filename, 'example.zip')
+
+ expect(@config.sparkle.appcast.package_filename).to eq 'example.zip'
+ end
+ end
+
+ describe 'appcast releases notes base url' do
+ it 'uses default value' do
+ expect(@config.sparkle.appcast.notes_base_url).to eq 'http://example.com/'
+ end
+
+ it 'uses notes_base_url' do
+ @config.sparkle.publish(:notes_base_url, 'http://download.example.com/')
+
+ expect(@config.sparkle.appcast.notes_base_url).to eq 'http://download.example.com/'
+ end
+ end
+
+ describe 'appcast release notes filename' do
+ it 'has no default value' do
+ expect(@config.sparkle.appcast.notes_filename).to be_nil
+ end
+
+ it 'uses package_filename' do
+ @config.sparkle.publish(:notes_filename, 'release_notes.html')
+
+ expect(@config.sparkle.appcast.notes_filename).to eq 'release_notes.html'
+ end
+ end
+
+ it 'version and short version should be set correctly' do
+ @config.sparkle.publish(:version, '1.0')
+
+ expect(@config.version).to eq '1.0'
+ expect(@config.short_version).to eq '1.0'
+ end
end
+ context 'cocoapod' do
+ before do
+ @config = App.config
+ @config.project_dir = SpecUtils::TemporaryDirectory.directory.to_s
+ @config.instance_eval do
+ pods do
+ pod 'Sparkle', POD_VERSION
+ end
+ end
+
+ Rake::Task['pod:install'].invoke
+ end
+
+ it 'Sparkle framework pod should be embedded' do
+ sparkle_framework_path = 'vendor/Pods/Sparkle/Sparkle.framework'
+ @config.pods.pods_libraries
+
+ expect(@config.embedded_frameworks.first.end_with?(sparkle_framework_path)).to be_truthy
+ end
+ end
end
+# rubocop:enable Metrics/BlockLength