mirror of
https://github.com/MichaelMure/git-bug.git
synced 2024-12-15 02:01:43 +03:00
152 lines
3.0 KiB
Go
152 lines
3.0 KiB
Go
package identity
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/MichaelMure/git-bug/util/test"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestPushPull(t *testing.T) {
|
|
repoA, repoB, remote := test.SetupReposAndRemote(t)
|
|
defer test.CleanupRepos(repoA, repoB, remote)
|
|
|
|
identity1 := NewIdentity("name1", "email1")
|
|
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, ReadAllLocalIdentities(repoB))
|
|
|
|
if len(identities) != 1 {
|
|
t.Fatal("Unexpected number of bugs")
|
|
}
|
|
|
|
// B --> remote --> A
|
|
identity2 := NewIdentity("name2", "email2")
|
|
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, ReadAllLocalIdentities(repoA))
|
|
|
|
if len(identities) != 2 {
|
|
t.Fatal("Unexpected number of bugs")
|
|
}
|
|
|
|
// Update both
|
|
|
|
identity1.AddVersion(&Version{
|
|
name: "name1b",
|
|
email: "email1b",
|
|
})
|
|
err = identity1.Commit(repoA)
|
|
require.NoError(t, err)
|
|
|
|
identity2.AddVersion(&Version{
|
|
name: "name2b",
|
|
email: "email2b",
|
|
})
|
|
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, ReadAllLocalIdentities(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, ReadAllLocalIdentities(repoA))
|
|
|
|
if len(identities) != 2 {
|
|
t.Fatal("Unexpected number of bugs")
|
|
}
|
|
|
|
// Concurrent update
|
|
|
|
identity1.AddVersion(&Version{
|
|
name: "name1c",
|
|
email: "email1c",
|
|
})
|
|
err = identity1.Commit(repoA)
|
|
require.NoError(t, err)
|
|
|
|
identity1B, err := ReadLocal(repoB, identity1.Id())
|
|
require.NoError(t, err)
|
|
|
|
identity1B.AddVersion(&Version{
|
|
name: "name1concurrent",
|
|
email: "email1concurrent",
|
|
})
|
|
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, ReadAllLocalIdentities(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, ReadAllLocalIdentities(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
|
|
}
|