shouldReceive('ensureDirExists')->once()->with(VALET_HOME_PATH.'/Sites', user()); $config = Mockery::mock(Configuration::class); $config->shouldReceive('prependPath')->once()->with(VALET_HOME_PATH.'/Sites'); $files->shouldReceive('symlinkAsUser')->once()->with('target', VALET_HOME_PATH.'/Sites/link'); swap(Filesystem::class, $files); swap(Configuration::class, $config); $linkPath = resolve(Site::class)->link('target', 'link'); $this->assertSame(VALET_HOME_PATH.'/Sites/link', $linkPath); } public function test_unlink_removes_existing_symlink() { file_put_contents(__DIR__.'/output/file.out', 'test'); symlink(__DIR__.'/output/file.out', __DIR__.'/output/link'); $site = resolve(StubForRemovingLinks::class); $site->unlink('link'); $this->assertFileNotExists(__DIR__.'/output/link'); $site = resolve(StubForRemovingLinks::class); $site->unlink('link'); $this->assertFileNotExists(__DIR__.'/output/link'); } public function test_prune_links_removes_broken_symlinks_in_sites_path() { file_put_contents(__DIR__.'/output/file.out', 'test'); symlink(__DIR__.'/output/file.out', __DIR__.'/output/link'); unlink(__DIR__.'/output/file.out'); $site = resolve(StubForRemovingLinks::class); $site->pruneLinks(); $this->assertFileNotExists(__DIR__.'/output/link'); } public function test_certificates_trim_tld_for_custom_tlds() { $files = Mockery::mock(Filesystem::class); $files->shouldReceive('scandir')->once()->andReturn([ 'threeletters.dev.crt', 'fiveletters.local.crt', ]); swap(Filesystem::class, $files); $site = resolve(Site::class); $certs = $site->getCertificates('fake-cert-path')->flip(); $this->assertEquals('threeletters', $certs->first()); $this->assertEquals('fiveletters', $certs->last()); } } class StubForRemovingLinks extends Site { function sitesPath() { return __DIR__.'/output'; } }