2015-02-12 10:27:59 +03:00
|
|
|
path = require 'path'
|
2015-02-18 20:11:48 +03:00
|
|
|
fs = require 'fs-plus'
|
|
|
|
temp = require 'temp'
|
2015-02-12 10:27:59 +03:00
|
|
|
{Directory} = require 'pathwatcher'
|
|
|
|
GitRepository = require '../src/git-repository'
|
|
|
|
GitRepositoryProvider = require '../src/git-repository-provider'
|
|
|
|
|
|
|
|
describe "GitRepositoryProvider", ->
|
|
|
|
describe ".repositoryForDirectory(directory)", ->
|
|
|
|
describe "when specified a Directory with a Git repository", ->
|
|
|
|
it "returns a Promise that resolves to a GitRepository", ->
|
|
|
|
waitsForPromise ->
|
2015-02-12 20:49:40 +03:00
|
|
|
provider = new GitRepositoryProvider atom.project
|
2015-10-01 16:41:24 +03:00
|
|
|
directory = new Directory path.join(__dirname, 'fixtures', 'git', 'master.git')
|
2015-02-12 20:49:40 +03:00
|
|
|
provider.repositoryForDirectory(directory).then (result) ->
|
|
|
|
expect(result).toBeInstanceOf GitRepository
|
|
|
|
expect(provider.pathToRepository[result.getPath()]).toBeTruthy()
|
|
|
|
expect(result.statusTask).toBeTruthy()
|
2015-03-24 01:38:38 +03:00
|
|
|
expect(result.getType()).toBe 'git'
|
2015-02-12 10:27:59 +03:00
|
|
|
|
2015-02-12 20:43:17 +03:00
|
|
|
it "returns the same GitRepository for different Directory objects in the same repo", ->
|
|
|
|
provider = new GitRepositoryProvider atom.project
|
|
|
|
firstRepo = null
|
|
|
|
secondRepo = null
|
|
|
|
|
|
|
|
waitsForPromise ->
|
2015-10-01 16:41:24 +03:00
|
|
|
directory = new Directory path.join(__dirname, 'fixtures', 'git', 'master.git')
|
2015-02-12 20:43:17 +03:00
|
|
|
provider.repositoryForDirectory(directory).then (result) -> firstRepo = result
|
|
|
|
|
2015-02-12 10:27:59 +03:00
|
|
|
waitsForPromise ->
|
2015-10-01 16:41:24 +03:00
|
|
|
directory = new Directory path.join(__dirname, 'fixtures', 'git', 'master.git', 'objects')
|
2015-02-12 20:43:17 +03:00
|
|
|
provider.repositoryForDirectory(directory).then (result) -> secondRepo = result
|
2015-02-12 10:27:59 +03:00
|
|
|
|
|
|
|
runs ->
|
2015-02-12 20:43:17 +03:00
|
|
|
expect(firstRepo).toBeInstanceOf GitRepository
|
|
|
|
expect(firstRepo).toBe secondRepo
|
2015-02-12 10:27:59 +03:00
|
|
|
|
|
|
|
describe "when specified a Directory without a Git repository", ->
|
|
|
|
it "returns a Promise that resolves to null", ->
|
|
|
|
waitsForPromise ->
|
2015-02-12 20:49:40 +03:00
|
|
|
provider = new GitRepositoryProvider atom.project
|
2015-02-18 20:11:48 +03:00
|
|
|
directory = new Directory temp.mkdirSync('dir')
|
|
|
|
provider.repositoryForDirectory(directory).then (result) ->
|
|
|
|
expect(result).toBe null
|
|
|
|
|
|
|
|
describe "when specified a Directory with an invalid Git repository", ->
|
|
|
|
it "returns a Promise that resolves to null", ->
|
|
|
|
waitsForPromise ->
|
|
|
|
provider = new GitRepositoryProvider atom.project
|
|
|
|
dirPath = temp.mkdirSync('dir')
|
|
|
|
fs.writeFileSync(path.join(dirPath, '.git', 'objects'), '')
|
|
|
|
fs.writeFileSync(path.join(dirPath, '.git', 'HEAD'), '')
|
|
|
|
fs.writeFileSync(path.join(dirPath, '.git', 'refs'), '')
|
|
|
|
|
|
|
|
directory = new Directory dirPath
|
2015-02-12 20:49:40 +03:00
|
|
|
provider.repositoryForDirectory(directory).then (result) ->
|
|
|
|
expect(result).toBe null
|
2015-02-21 04:53:14 +03:00
|
|
|
|
2015-09-22 00:16:45 +03:00
|
|
|
describe "when specified a Directory with a valid gitfile-linked repository", ->
|
|
|
|
it "returns a Promise that resolves to a GitRepository", ->
|
|
|
|
waitsForPromise ->
|
|
|
|
provider = new GitRepositoryProvider atom.project
|
2015-10-01 16:41:24 +03:00
|
|
|
gitDirPath = path.join(__dirname, 'fixtures', 'git', 'master.git')
|
2015-09-22 00:16:45 +03:00
|
|
|
workDirPath = temp.mkdirSync('git-workdir')
|
|
|
|
fs.writeFileSync(path.join(workDirPath, '.git'), 'gitdir: ' + gitDirPath+'\n')
|
|
|
|
|
|
|
|
directory = new Directory workDirPath
|
|
|
|
provider.repositoryForDirectory(directory).then (result) ->
|
|
|
|
expect(result).toBeInstanceOf GitRepository
|
|
|
|
expect(provider.pathToRepository[result.getPath()]).toBeTruthy()
|
|
|
|
expect(result.statusTask).toBeTruthy()
|
|
|
|
expect(result.getType()).toBe 'git'
|
|
|
|
|
2015-02-23 20:30:43 +03:00
|
|
|
describe "when specified a Directory without existsSync()", ->
|
2015-02-23 20:59:16 +03:00
|
|
|
directory = null
|
|
|
|
provider = null
|
|
|
|
beforeEach ->
|
2015-02-21 04:53:14 +03:00
|
|
|
provider = new GitRepositoryProvider atom.project
|
|
|
|
|
2015-02-23 21:10:37 +03:00
|
|
|
# An implementation of Directory that does not implement existsSync().
|
2015-02-23 20:30:43 +03:00
|
|
|
subdirectory = {}
|
|
|
|
directory =
|
|
|
|
getSubdirectory: ->
|
|
|
|
isRoot: -> true
|
2015-02-21 04:53:14 +03:00
|
|
|
spyOn(directory, "getSubdirectory").andReturn(subdirectory)
|
|
|
|
|
2015-02-23 20:59:16 +03:00
|
|
|
it "returns null", ->
|
2015-02-21 04:53:14 +03:00
|
|
|
repo = provider.repositoryForDirectorySync(directory)
|
|
|
|
expect(repo).toBe null
|
|
|
|
expect(directory.getSubdirectory).toHaveBeenCalledWith(".git")
|
|
|
|
|
2015-02-23 20:30:43 +03:00
|
|
|
it "returns a Promise that resolves to null for the async implementation", ->
|
2015-02-21 04:53:14 +03:00
|
|
|
waitsForPromise ->
|
|
|
|
provider.repositoryForDirectory(directory).then (repo) ->
|
|
|
|
expect(repo).toBe null
|
|
|
|
expect(directory.getSubdirectory).toHaveBeenCalledWith(".git")
|