public void EnvironmentRepositoryRemoveWithManyItemsExpectedDisconnectsAndRemovesItems()
{
// DO NOT use mock as test requires IEquatable of IEnvironmentModel
var source = new Mock<IEnvironmentModel>();
var c1 = CreateMockConnection();
var c2 = CreateMockConnection();
var c3 = CreateMockConnection();
c1.Setup(c => c.Disconnect()).Verifiable();
c2.Setup(c => c.Disconnect()).Verifiable();
c3.Setup(c => c.Disconnect()).Verifiable();
var e1 = new EnvironmentModel(Guid.NewGuid(), c1.Object, new Mock<IResourceRepository>().Object, new Mock<IStudioResourceRepository>().Object);
var e2 = new EnvironmentModel(Guid.NewGuid(), c2.Object, new Mock<IResourceRepository>().Object, new Mock<IStudioResourceRepository>().Object);
var e3 = new EnvironmentModel(Guid.NewGuid(), c3.Object, new Mock<IResourceRepository>().Object, new Mock<IStudioResourceRepository>().Object);
var repo = new TestEnvironmentRespository(source.Object, e1, e2, e3);
repo.Remove(new List<IEnvironmentModel> { e1, e3 });
var actual = repo.All().ToList();
c1.Verify(c => c.Disconnect(), Times.Once());
c2.Verify(c => c.Disconnect(), Times.Never());
c3.Verify(c => c.Disconnect(), Times.Once());
Assert.AreEqual(2, actual.Count);
Assert.AreEqual(2, repo.RemoveInternalHitCount);
Assert.AreSame(source.Object, actual[0]);
Assert.AreSame(e2, actual[1]);
}