public void Customize(IFixture fixture) { fixture.Register(UniqueId.CreateNew); var serviceProvider = fixture.Create <IServiceProvider>(); var containerFactory = serviceProvider.GetRequiredService <IObjectRepositoryContainerFactory>(); var container = containerFactory.Create <BlobRepository>(RepositoryFixture.GetAvailableFolderPath()); fixture.Inject(container); fixture.Inject <IObjectRepositoryContainer <BlobRepository> >(container); fixture.Inject <IObjectRepositoryContainer>(container); Car CreateCar(int position) => new Car.Builder(serviceProvider) { Id = UniqueId.CreateNew(), Name = $"Car {position}", Blob = new StringBlob("Car blob") }.ToImmutable(); fixture.Register(() => new BlobRepository(serviceProvider, container, UniqueId.CreateNew(), "Some repository", new Version(1, 0, 0), ImmutableList.Create <RepositoryDependency>(), new LazyChildren <IMigration>(), new LazyChildren <IObjectRepositoryIndex>(), new StringBlob("a\nb\nc"), new LazyChildren <Car>(ImmutableList.Create(CreateCar(1))))); }
public void PullRequiringMerge(ObjectRepository sut, IObjectRepositoryContainer <ObjectRepository> container, IObjectRepositoryContainerFactory containerFactory, Signature signature, string message) { // Arrange sut = container.AddRepository(sut, signature, message); var tempPath = RepositoryFixture.GetAvailableFolderPath(); var clientContainer = containerFactory.Create <ObjectRepository>(tempPath); clientContainer.Clone(container.Repositories.Single().RepositoryDescription.Path); // Arrange - Update source repository var change = sut.With(sut.Applications[0].Pages[0], p => p.Description, "foo"); sut = container.Commit(change.Repository, signature, message); // Arrange - Update client repository var clientChange = sut.With(sut.Applications[0].Pages[0], p => p.Name, "bar"); clientContainer.Commit(clientChange.Repository, signature, message); // Act var pullResult = clientContainer.Pull(clientContainer.Repositories.Single().Id); pullResult.Apply(signature); // Assert Assert.That(pullResult.RequiresMergeCommit, Is.True); Assert.That(clientContainer.Repositories.Single().Applications[0].Pages[0].Description, Is.EqualTo("foo")); }
public void PreMergeGetsFiredWhenPulling(GitHooks sut, ObjectRepository repository, IObjectRepositoryContainer <ObjectRepository> origin, IObjectRepositoryContainerFactory containerFactory, Signature signature, string message) { // Arrange - Create origin and local repositories repository = origin.AddRepository(repository, signature, message); var tempPath = RepositoryFixture.GetAvailableFolderPath(); var clientContainer = containerFactory.Create <ObjectRepository>(tempPath); clientContainer.Clone(origin.Repositories.Single().RepositoryDescription.Path); // Arrange - Commit change on origin var change = repository.With(repository.Applications[0].Pages[0], p => p.Description, "foo"); origin.Commit(change.Repository, signature, message); // Arrange - suscribe to hook MergeStartedEventArgs lastEvent = null; sut.MergeStarted += (_, args) => lastEvent = args; // Act - Pull commit from origin var pullResult = clientContainer.Pull(clientContainer.Repositories.Single().Id); var result = pullResult.Apply(signature); // Assert Assert.That(lastEvent, Is.Not.Null); Assert.That(result, Is.Not.Null); }
public void ObjectRepositoryMergeChunkChangeResolveConflictOnlyOnce(Page page, string resolvedValue) { // Arrange var path = RepositoryFixture.GetAvailableFolderPath(); Field mergeBaseNode = page.Fields[0], branchNode = page.Fields[1], headNode = page.Fields[2]; // Act var sut = new ObjectRepositoryPropertyChange(path, _nameProperty, CreateChunk(mergeBaseNode), CreateChunk(branchNode), CreateChunk(headNode)); sut.Resolve(resolvedValue); Assert.Throws <GitObjectDbException>(() => sut.Resolve(resolvedValue)); }
static (string, ObjectRepository) PushNewRemoteImpl(ObjectRepository repository, IObjectRepositoryContainer <ObjectRepository> container, Signature signature, string message) { var tempPath = RepositoryFixture.GetAvailableFolderPath(); Repository.Init(tempPath, isBare: true); repository = container.AddRepository(repository, signature, message); repository.Execute(r => r.Network.Remotes.Add("origin", tempPath)); var change = repository.With(repository.Applications[0].Pages[0], p => p.Description, "foo"); repository = container.Commit(change.Repository, signature, message); container.Push(repository.Id, "origin"); return(tempPath, repository); }
public void ObjectRepositoryMergeChunkChangeResolveConflict(Page page, string resolvedValue) { // Arrange var path = RepositoryFixture.GetAvailableFolderPath(); Field mergeBaseNode = page.Fields[0], branchNode = page.Fields[1], headNode = page.Fields[2]; // Act var sut = new ObjectRepositoryPropertyChange(path, _nameProperty, CreateChunk(mergeBaseNode), CreateChunk(branchNode), CreateChunk(headNode)); sut.Resolve(resolvedValue); // Assert Assert.That(sut.WasInConflict, Is.True); Assert.That(sut.IsInConflict, Is.False); Assert.That(sut.MergeValue, Is.SameAs(resolvedValue)); }
public void Fetch(ObjectRepository sut, IObjectRepositoryContainer <ObjectRepository> container, IObjectRepositoryContainerFactory containerFactory, Signature signature, string message) { // Arrange sut = container.AddRepository(sut, signature, message); var tempPath = RepositoryFixture.GetAvailableFolderPath(); var clientContainer = containerFactory.Create <ObjectRepository>(tempPath); clientContainer.Clone(container.Repositories.Single().RepositoryDescription.Path); // Arrange - Update source repository var change = sut.With(sut.Applications[0].Pages[0], p => p.Description, "foo"); var commitResult = container.Commit(change.Repository, signature, message); // Act var fetchResult = clientContainer.Fetch(clientContainer.Repositories.Single().Id); // Assert Assert.That(fetchResult.CommitId, Is.EqualTo(commitResult.CommitId)); Assert.That(clientContainer.Repositories.Single().CommitId, Is.EqualTo(sut.CommitId)); }
public void ObjectRepositoryMergeChunkChangePropertiesAreMatchingEntryParameterValues(Page page) { // Arrange var path = RepositoryFixture.GetAvailableFolderPath(); Field mergeBaseNode = page.Fields[0], branchNode = page.Fields[1], headNode = page.Fields[2]; // Act var sut = new ObjectRepositoryPropertyChange(path, _nameProperty, CreateChunk(mergeBaseNode), CreateChunk(branchNode), CreateChunk(headNode)); // Assert Assert.That(sut.Path, Is.SameAs(path)); Assert.That(sut.Property, Is.SameAs(_nameProperty)); Assert.That(sut.Ancestor.Object, Is.SameAs(mergeBaseNode)); Assert.That(sut.Theirs.Object, Is.SameAs(branchNode)); Assert.That(sut.Ours.Object, Is.SameAs(headNode)); Assert.That(sut.Ancestor.Property, Is.SameAs(_nameProperty)); Assert.That(sut.Theirs.Property, Is.SameAs(_nameProperty)); Assert.That(sut.Ours.Property, Is.SameAs(_nameProperty)); Assert.That(sut.Ancestor.Value, Is.SameAs(mergeBaseNode.Name)); Assert.That(sut.Theirs.Value, Is.SameAs(branchNode.Name)); Assert.That(sut.Ours.Value, Is.SameAs(headNode.Name)); Assert.That(sut.WasInConflict, Is.True); }
public void Customize(IFixture fixture) { fixture.Register(UniqueId.CreateNew); var serviceProvider = fixture.Create <IServiceProvider>(); var containerFactory = serviceProvider.GetRequiredService <IObjectRepositoryContainerFactory>(); var path = ContainerPath ?? RepositoryFixture.GetAvailableFolderPath(); fixture.Customizations.Add(new ObjectRepositoryContainerSpecimenBuilder(path)); var container = fixture.Freeze <IObjectRepositoryContainer <ObjectRepository> >(); ObjectRepository lastRepository = default; var createdPages = new List <Page>(); Page CreatePage(int position) { var page = new Page.Builder(serviceProvider) { Id = UniqueId.CreateNew(), Name = $"Page {position}", Description = $"Description for {position}", Fields = new LazyChildren <Field>( Enumerable.Range(1, FieldPerPageCount).Select(f => CreateField(f)) .OrderBy(f => f.Id).ToImmutableList()) }.ToImmutable(); createdPages.Add(page); return(page); } Field CreateField(int position) => new Field.Builder(serviceProvider) { Id = UniqueId.CreateNew(), Name = $"Field {position}", Content = createdPages.Any() && position % 3 == 0 ? FieldContent.NewLink(new FieldLinkContent(new LazyLink <Page>(container, PickRandomPage(_ => true)))) : FieldContent.Default }.ToImmutable(); ObjectRepository CreateModule() { createdPages.Clear(); lastRepository = new ObjectRepository(serviceProvider, container, UniqueId.CreateNew(), "Some repository", new Version(1, 0, 0), ImmutableList.Create <RepositoryDependency>(), new LazyChildren <IMigration>(), new LazyChildren <IObjectRepositoryIndex>( ImmutableList.Create <IObjectRepositoryIndex>(new LinkFieldReferrerIndex(serviceProvider, UniqueId.CreateNew(), nameof(LinkFieldReferrerIndex)))), new LazyChildren <Application>( Enumerable.Range(1, ApplicationCount).Select(a => new Application(serviceProvider, UniqueId.CreateNew(), $"Application {a}", new LazyChildren <Page>( Enumerable.Range(1, PagePerApplicationCount).Select(p => CreatePage(p)) .OrderBy(p => p.Id).ToImmutableList()))) .OrderBy(a => a.Id).ToImmutableList())); return(lastRepository); } Application PickRandomApplication() => (lastRepository ?? CreateModule()).Applications.PickRandom(); Page PickRandomPage(Func <Page, bool> predicate) => !createdPages.Any() ? PickRandomApplication().Pages.Last(predicate) : createdPages.Last(predicate); Field PickRandomField() => PickRandomPage(_ => true).Fields.PickRandom(); fixture.Register(PickRandomApplication); fixture.Register(() => PickRandomPage(_ => true)); fixture.Register(PickRandomField); fixture.Register(CreateModule); }