mirror of
https://github.com/MichaelMure/git-bug.git
synced 2024-12-15 02:01:43 +03:00
159 lines
3.3 KiB
Go
159 lines
3.3 KiB
Go
package identity
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/MichaelMure/git-bug/repository"
|
|
)
|
|
|
|
func TestIdentityPushPull(t *testing.T) {
|
|
repoA, repoB, remote := repository.SetupGoGitReposAndRemote()
|
|
defer repository.CleanupTestRepos(repoA, repoB, remote)
|
|
|
|
identity1, err := NewIdentity(repoA, "name1", "email1")
|
|
require.NoError(t, err)
|
|
err = identity1.Commit(repoA)
|
|
require.NoError(t, err)
|
|
|
|
// A --> remote --> B
|
|
_, err = Push(repoA, "origin")
|
|
require.NoError(t, err)
|
|
|
|
err = Pull(repoB, "origin")
|
|
require.NoError(t, err)
|
|
|
|
identities := allIdentities(t, ReadAllLocal(repoB))
|
|
|
|
if len(identities) != 1 {
|
|
t.Fatal("Unexpected number of bugs")
|
|
}
|
|
|
|
// B --> remote --> A
|
|
identity2, err := NewIdentity(repoB, "name2", "email2")
|
|
require.NoError(t, err)
|
|
err = identity2.Commit(repoB)
|
|
require.NoError(t, err)
|
|
|
|
_, err = Push(repoB, "origin")
|
|
require.NoError(t, err)
|
|
|
|
err = Pull(repoA, "origin")
|
|
require.NoError(t, err)
|
|
|
|
identities = allIdentities(t, ReadAllLocal(repoA))
|
|
|
|
if len(identities) != 2 {
|
|
t.Fatal("Unexpected number of bugs")
|
|
}
|
|
|
|
// Update both
|
|
|
|
err = identity1.Mutate(repoA, func(orig *Mutator) {
|
|
orig.Name = "name1b"
|
|
orig.Email = "email1b"
|
|
})
|
|
require.NoError(t, err)
|
|
err = identity1.Commit(repoA)
|
|
require.NoError(t, err)
|
|
|
|
err = identity2.Mutate(repoB, func(orig *Mutator) {
|
|
orig.Name = "name2b"
|
|
orig.Email = "email2b"
|
|
})
|
|
require.NoError(t, err)
|
|
err = identity2.Commit(repoB)
|
|
require.NoError(t, err)
|
|
|
|
// A --> remote --> B
|
|
|
|
_, err = Push(repoA, "origin")
|
|
require.NoError(t, err)
|
|
|
|
err = Pull(repoB, "origin")
|
|
require.NoError(t, err)
|
|
|
|
identities = allIdentities(t, ReadAllLocal(repoB))
|
|
|
|
if len(identities) != 2 {
|
|
t.Fatal("Unexpected number of bugs")
|
|
}
|
|
|
|
// B --> remote --> A
|
|
|
|
_, err = Push(repoB, "origin")
|
|
require.NoError(t, err)
|
|
|
|
err = Pull(repoA, "origin")
|
|
require.NoError(t, err)
|
|
|
|
identities = allIdentities(t, ReadAllLocal(repoA))
|
|
|
|
if len(identities) != 2 {
|
|
t.Fatal("Unexpected number of bugs")
|
|
}
|
|
|
|
// Concurrent update
|
|
|
|
err = identity1.Mutate(repoA, func(orig *Mutator) {
|
|
orig.Name = "name1c"
|
|
orig.Email = "email1c"
|
|
})
|
|
require.NoError(t, err)
|
|
err = identity1.Commit(repoA)
|
|
require.NoError(t, err)
|
|
|
|
identity1B, err := ReadLocal(repoB, identity1.Id())
|
|
require.NoError(t, err)
|
|
|
|
err = identity1B.Mutate(repoB, func(orig *Mutator) {
|
|
orig.Name = "name1concurrent"
|
|
orig.Email = "name1concurrent"
|
|
})
|
|
require.NoError(t, err)
|
|
err = identity1B.Commit(repoB)
|
|
require.NoError(t, err)
|
|
|
|
// A --> remote --> B
|
|
|
|
_, err = Push(repoA, "origin")
|
|
require.NoError(t, err)
|
|
|
|
// Pulling a non-fast-forward update should fail
|
|
err = Pull(repoB, "origin")
|
|
require.Error(t, err)
|
|
|
|
identities = allIdentities(t, ReadAllLocal(repoB))
|
|
|
|
if len(identities) != 2 {
|
|
t.Fatal("Unexpected number of bugs")
|
|
}
|
|
|
|
// B --> remote --> A
|
|
|
|
// Pushing a non-fast-forward update should fail
|
|
_, err = Push(repoB, "origin")
|
|
require.Error(t, err)
|
|
|
|
err = Pull(repoA, "origin")
|
|
require.NoError(t, err)
|
|
|
|
identities = allIdentities(t, ReadAllLocal(repoA))
|
|
|
|
if len(identities) != 2 {
|
|
t.Fatal("Unexpected number of bugs")
|
|
}
|
|
}
|
|
|
|
func allIdentities(t testing.TB, identities <-chan StreamedIdentity) []*Identity {
|
|
var result []*Identity
|
|
for streamed := range identities {
|
|
if streamed.Err != nil {
|
|
t.Fatal(streamed.Err)
|
|
}
|
|
result = append(result, streamed.Identity)
|
|
}
|
|
return result
|
|
}
|