public void Dispose_calls_EntityConnection_dispose_before_InternalConnection_dispose()
{
var results = new List <string>();
var underlyingConnection = new Mock <DbConnection>();
var lazyInternalConnectionMock = new Mock <LazyInternalConnection>("fake");
lazyInternalConnectionMock.SetupGet(ic => ic.Connection).Returns(underlyingConnection.Object);
lazyInternalConnectionMock.Setup(ic => ic.Dispose()).Callback(() => results.Add("LazyInternalConnection Dispose() called"));
var metadataWorkspaceMock = new Mock <MetadataWorkspace>();
metadataWorkspaceMock.Setup(mw => mw.GetItemCollection(DataSpace.CSSpace)).Returns(() => null);
var dbContext = new TestDbContext();
var entityConnectionMock = new Mock <EntityConnection>();
entityConnectionMock.SetupGet(ec => ec.ConnectionString).Returns("fake");
entityConnectionMock.Setup(ec => ec.GetMetadataWorkspace()).Returns(metadataWorkspaceMock.Object);
entityConnectionMock.Protected().Setup("Dispose", ItExpr.IsAny <bool>()).
Callback <bool>(b => results.Add("EntityConnection Dispose() called"));
var objectContextMock = new Mock <ObjectContext>(entityConnectionMock.Object, true)
{
CallBase = true
};
objectContextMock.SetupGet(oc => oc.MetadataWorkspace).Returns(metadataWorkspaceMock.Object);
var lazyInternalContext = new LazyInternalContext(
dbContext, lazyInternalConnectionMock.Object, null, null, null, null, objectContextMock.Object);
lazyInternalContext.DisposeContext(true);
Assert.Equal(2, results.Count);
Assert.Same("EntityConnection Dispose() called", results[0]);
Assert.Same("LazyInternalConnection Dispose() called", results[1]);
}