| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-03 10:49:58 +02:00
										 |  |  | require_relative "shared_examples/requires_cask_token" | 
					
						
							|  |  |  | require_relative "shared_examples/invalid_option" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  | describe Cask::Cmd::Install, :cask do | 
					
						
							| 
									
										
										
										
											2017-10-03 10:49:58 +02:00
										 |  |  |   it_behaves_like "a command that requires a Cask token" | 
					
						
							|  |  |  |   it_behaves_like "a command that handles invalid options" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-18 18:57:04 -05:00
										 |  |  |   it "displays the installation progress" do | 
					
						
							| 
									
										
										
										
											2017-10-15 02:28:32 +02:00
										 |  |  |     output = Regexp.new <<~EOS | 
					
						
							| 
									
										
										
										
											2017-03-19 19:56:41 -05:00
										 |  |  |       ==> Downloading file:.*caffeine.zip | 
					
						
							| 
									
										
										
										
											2018-04-29 05:34:32 +02:00
										 |  |  |       ==> Verifying SHA-256 checksum for Cask 'local-caffeine'. | 
					
						
							| 
									
										
										
										
											2017-03-18 18:57:04 -05:00
										 |  |  |       ==> Installing Cask local-caffeine | 
					
						
							| 
									
										
										
										
											2017-03-19 19:56:41 -05:00
										 |  |  |       ==> Moving App 'Caffeine.app' to '.*Caffeine.app'. | 
					
						
							|  |  |  |       .*local-caffeine was successfully installed! | 
					
						
							| 
									
										
										
										
											2017-03-18 18:57:04 -05:00
										 |  |  |     EOS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     expect { | 
					
						
							| 
									
										
										
										
											2017-10-03 10:49:58 +02:00
										 |  |  |       described_class.run("local-caffeine") | 
					
						
							| 
									
										
										
										
											2017-03-18 18:57:04 -05:00
										 |  |  |     }.to output(output).to_stdout | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |   it "allows staging and activation of multiple Casks at once" do | 
					
						
							| 
									
										
										
										
											2017-10-03 10:49:58 +02:00
										 |  |  |     described_class.run("local-transmission", "local-caffeine") | 
					
						
							| 
									
										
										
										
											2019-02-02 17:11:37 +01:00
										 |  |  |     transmission = Cask::CaskLoader.load(cask_path("local-transmission")) | 
					
						
							|  |  |  |     caffeine = Cask::CaskLoader.load(cask_path("local-caffeine")) | 
					
						
							|  |  |  |     expect(transmission).to be_installed | 
					
						
							|  |  |  |     expect(transmission.config.appdir.join("Transmission.app")).to be_a_directory | 
					
						
							|  |  |  |     expect(caffeine).to be_installed | 
					
						
							|  |  |  |     expect(caffeine.config.appdir.join("Caffeine.app")).to be_a_directory | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it "skips double install (without nuking existing installation)" do | 
					
						
							| 
									
										
										
										
											2017-10-03 10:49:58 +02:00
										 |  |  |     described_class.run("local-transmission") | 
					
						
							|  |  |  |     described_class.run("local-transmission") | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  |     expect(Cask::CaskLoader.load(cask_path("local-transmission"))).to be_installed | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it "prints a warning message on double install" do | 
					
						
							| 
									
										
										
										
											2017-10-03 10:49:58 +02:00
										 |  |  |     described_class.run("local-transmission") | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-08 12:29:33 +01:00
										 |  |  |     expect { | 
					
						
							| 
									
										
										
										
											2017-10-03 10:49:58 +02:00
										 |  |  |       described_class.run("local-transmission") | 
					
						
							| 
									
										
										
										
											2017-06-11 02:00:59 +02:00
										 |  |  |     }.to output(/Warning: Cask 'local-transmission' is already installed./).to_stderr | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it "allows double install with --force" do | 
					
						
							| 
									
										
										
										
											2017-10-03 10:49:58 +02:00
										 |  |  |     described_class.run("local-transmission") | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-08 12:29:33 +01:00
										 |  |  |     expect { | 
					
						
							|  |  |  |       expect { | 
					
						
							| 
									
										
										
										
											2017-10-03 10:49:58 +02:00
										 |  |  |         described_class.run("local-transmission", "--force") | 
					
						
							| 
									
										
										
										
											2017-02-08 12:29:33 +01:00
										 |  |  |       }.to output(/It seems there is already an App at.*overwriting\./).to_stderr | 
					
						
							|  |  |  |     }.to output(/local-transmission was successfully installed!/).to_stdout | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it "skips dependencies with --skip-cask-deps" do | 
					
						
							| 
									
										
										
										
											2017-10-03 10:49:58 +02:00
										 |  |  |     described_class.run("with-depends-on-cask-multiple", "--skip-cask-deps") | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  |     expect(Cask::CaskLoader.load(cask_path("with-depends-on-cask-multiple"))).to be_installed | 
					
						
							|  |  |  |     expect(Cask::CaskLoader.load(cask_path("local-caffeine"))).not_to be_installed | 
					
						
							|  |  |  |     expect(Cask::CaskLoader.load(cask_path("local-transmission"))).not_to be_installed | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it "properly handles Casks that are not present" do | 
					
						
							| 
									
										
										
										
											2017-02-08 12:29:33 +01:00
										 |  |  |     expect { | 
					
						
							| 
									
										
										
										
											2017-10-03 10:49:58 +02:00
										 |  |  |       described_class.run("notacask") | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  |     }.to raise_error(Cask::CaskUnavailableError) | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it "returns a suggestion for a misspelled Cask" do | 
					
						
							| 
									
										
										
										
											2017-02-08 12:29:33 +01:00
										 |  |  |     expect { | 
					
						
							| 
									
										
										
										
											2017-10-03 10:49:58 +02:00
										 |  |  |       described_class.run("localcaffeine") | 
					
						
							| 
									
										
										
										
											2018-09-02 16:15:09 +01:00
										 |  |  |     }.to raise_error( | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  |       Cask::CaskUnavailableError, | 
					
						
							| 
									
										
										
										
											2018-09-02 16:15:09 +01:00
										 |  |  |       "Cask 'localcaffeine' is unavailable: No Cask with this name exists. "\ | 
					
						
							|  |  |  |       "Did you mean “local-caffeine”?", | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   it "returns multiple suggestions for a Cask fragment" do | 
					
						
							| 
									
										
										
										
											2017-02-08 12:29:33 +01:00
										 |  |  |     expect { | 
					
						
							| 
									
										
										
										
											2017-10-03 10:49:58 +02:00
										 |  |  |       described_class.run("local") | 
					
						
							| 
									
										
										
										
											2018-09-02 16:15:09 +01:00
										 |  |  |     }.to raise_error( | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  |       Cask::CaskUnavailableError, | 
					
						
							| 
									
										
										
										
											2018-09-02 16:15:09 +01:00
										 |  |  |       "Cask 'local' is unavailable: No Cask with this name exists. " \ | 
					
						
							|  |  |  |       "Did you mean one of these?\nlocal-caffeine\nlocal-transmission\n", | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |   end | 
					
						
							|  |  |  | end |