identity_actions_test.go

  1package identity
  2
  3import (
  4	"testing"
  5
  6	"github.com/MichaelMure/git-bug/util/test"
  7	"github.com/stretchr/testify/require"
  8)
  9
 10func TestPushPull(t *testing.T) {
 11	repoA, repoB, remote := test.SetupReposAndRemote(t)
 12	defer test.CleanupRepos(repoA, repoB, remote)
 13
 14	identity1 := NewIdentity("name1", "email1")
 15	err := identity1.Commit(repoA)
 16	require.NoError(t, err)
 17
 18	// A --> remote --> B
 19	_, err = Push(repoA, "origin")
 20	require.NoError(t, err)
 21
 22	err = Pull(repoB, "origin")
 23	require.NoError(t, err)
 24
 25	identities := allIdentities(t, ReadAllLocalIdentities(repoB))
 26
 27	if len(identities) != 1 {
 28		t.Fatal("Unexpected number of bugs")
 29	}
 30
 31	// B --> remote --> A
 32	identity2 := NewIdentity("name2", "email2")
 33	err = identity2.Commit(repoB)
 34	require.NoError(t, err)
 35
 36	_, err = Push(repoB, "origin")
 37	require.NoError(t, err)
 38
 39	err = Pull(repoA, "origin")
 40	require.NoError(t, err)
 41
 42	identities = allIdentities(t, ReadAllLocalIdentities(repoA))
 43
 44	if len(identities) != 2 {
 45		t.Fatal("Unexpected number of bugs")
 46	}
 47
 48	// Update both
 49
 50	identity1.AddVersion(&Version{
 51		name:  "name1b",
 52		email: "email1b",
 53	})
 54	err = identity1.Commit(repoA)
 55	require.NoError(t, err)
 56
 57	identity2.AddVersion(&Version{
 58		name:  "name2b",
 59		email: "email2b",
 60	})
 61	err = identity2.Commit(repoB)
 62	require.NoError(t, err)
 63
 64	//  A --> remote --> B
 65
 66	_, err = Push(repoA, "origin")
 67	require.NoError(t, err)
 68
 69	err = Pull(repoB, "origin")
 70	require.NoError(t, err)
 71
 72	identities = allIdentities(t, ReadAllLocalIdentities(repoB))
 73
 74	if len(identities) != 2 {
 75		t.Fatal("Unexpected number of bugs")
 76	}
 77
 78	// B --> remote --> A
 79
 80	_, err = Push(repoB, "origin")
 81	require.NoError(t, err)
 82
 83	err = Pull(repoA, "origin")
 84	require.NoError(t, err)
 85
 86	identities = allIdentities(t, ReadAllLocalIdentities(repoA))
 87
 88	if len(identities) != 2 {
 89		t.Fatal("Unexpected number of bugs")
 90	}
 91
 92	// Concurrent update
 93
 94	identity1.AddVersion(&Version{
 95		name:  "name1c",
 96		email: "email1c",
 97	})
 98	err = identity1.Commit(repoA)
 99	require.NoError(t, err)
100
101	identity1B, err := ReadLocal(repoB, identity1.Id())
102	require.NoError(t, err)
103
104	identity1B.AddVersion(&Version{
105		name:  "name1concurrent",
106		email: "email1concurrent",
107	})
108	err = identity1B.Commit(repoB)
109	require.NoError(t, err)
110
111	//  A --> remote --> B
112
113	_, err = Push(repoA, "origin")
114	require.NoError(t, err)
115
116	// Pulling a non-fast-forward update should fail
117	err = Pull(repoB, "origin")
118	require.Error(t, err)
119
120	identities = allIdentities(t, ReadAllLocalIdentities(repoB))
121
122	if len(identities) != 2 {
123		t.Fatal("Unexpected number of bugs")
124	}
125
126	// B --> remote --> A
127
128	// Pushing a non-fast-forward update should fail
129	_, err = Push(repoB, "origin")
130	require.Error(t, err)
131
132	err = Pull(repoA, "origin")
133	require.NoError(t, err)
134
135	identities = allIdentities(t, ReadAllLocalIdentities(repoA))
136
137	if len(identities) != 2 {
138		t.Fatal("Unexpected number of bugs")
139	}
140}
141
142func allIdentities(t testing.TB, identities <-chan StreamedIdentity) []*Identity {
143	var result []*Identity
144	for streamed := range identities {
145		if streamed.Err != nil {
146			t.Fatal(streamed.Err)
147		}
148		result = append(result, streamed.Identity)
149	}
150	return result
151}