public void ShouldNotEagerLoad_WhenNavigationIsNotAllowedOnTheRootEntity() { var attribute = new EagerLoadAttribute(notOnRoot: true); var navigationHelperMock = new Mock <NavigationHelper>(); navigationHelperMock.Setup(helper => helper.GetTypeForNavigation(It.IsAny <INavigation>())) .Returns(typeof(Book)); var strategy = new EagerLoadAttributeIncludeStrategy(navigationHelperMock.Object); var context = new EagerLoadContext(Mock.Of <DbContext>(), strategy); var firstNavigationMock = SetupGenericNavigationMock(); EagerLoadAttributeIncludeStrategy.EagerLoadAttributeCache.TryAdd(firstNavigationMock.Object, attribute); context.SetCurrentNavigation(firstNavigationMock.Object); Assert.False(strategy.ShouldIncludeCurrentNavigation(context)); var secondNavigationMock = SetupGenericNavigationMock(); EagerLoadAttributeIncludeStrategy.EagerLoadAttributeCache.TryAdd(secondNavigationMock.Object, new EagerLoadAttribute()); context.SetCurrentNavigation(secondNavigationMock.Object); context.SetCurrentNavigation(firstNavigationMock.Object); Assert.True(strategy.ShouldIncludeCurrentNavigation(context)); }
public void ShouldNotEagerLoad_WhenAttributeSetToNever() { var strategy = new EagerLoadAttributeIncludeStrategy(); var context = new EagerLoadContext(Mock.Of <DbContext>(), strategy); var navigationMock = SetupGenericNavigationMock(); var navigation = navigationMock.Object; context.SetCurrentNavigation(navigation); var attribute = new EagerLoadAttribute(never: true); EagerLoadAttributeIncludeStrategy.EagerLoadAttributeCache.TryAdd(navigation, attribute); Assert.False(strategy.ShouldIncludeCurrentNavigation(context)); }
private bool DoesNavigationGoOverTheMaxTypeLimits(EagerLoadContext context, EagerLoadAttribute attribute, Type currentNavigationType) { if (context.NavigationPath.Count <= attribute.MaxRootTypeCount && context.NavigationPath.Count <= attribute.MaxTypeCount) { return(false); } var rootCount = 1; var typeCount = 0; foreach (var nav in context.NavigationPath) { var type = _navigationHelper.GetTypeForNavigation(nav); if (type == context.RootType) { rootCount++; } if (type == currentNavigationType) { typeCount++; } if (rootCount > attribute.MaxRootTypeCount) { return(true); } if (typeCount > attribute.MaxTypeCount) { return(true); } } return(false); }
public void ShouldNotEagerLoad_WhenOverTheTypeCount() { var attribute = new EagerLoadAttribute(maxTypeCount: 1); var navigationHelperMock = new Mock <NavigationHelper>(); var strategy = new EagerLoadAttributeIncludeStrategy(navigationHelperMock.Object); var context = new EagerLoadContext(Mock.Of <DbContext>(), strategy, rootType: typeof(Publisher)); var firstNavigationMock = SetupGenericNavigationMock(); EagerLoadAttributeIncludeStrategy.EagerLoadAttributeCache.TryAdd(firstNavigationMock.Object, attribute); navigationHelperMock.Setup(helper => helper.GetTypeForNavigation(It.IsAny <INavigation>())) .Returns(typeof(Book)); context.SetCurrentNavigation(firstNavigationMock.Object); Assert.True(strategy.ShouldIncludeCurrentNavigation(context)); var secondNavigationMock = SetupGenericNavigationMock(); EagerLoadAttributeIncludeStrategy.EagerLoadAttributeCache.TryAdd(secondNavigationMock.Object, new EagerLoadAttribute()); navigationHelperMock.Setup(helper => helper.GetTypeForNavigation(It.IsAny <INavigation>())) .Returns(typeof(Author)); context.SetCurrentNavigation(secondNavigationMock.Object); Assert.True(strategy.ShouldIncludeCurrentNavigation(context)); var thirdNavigationMock = SetupGenericNavigationMock(); EagerLoadAttributeIncludeStrategy.EagerLoadAttributeCache.TryAdd(thirdNavigationMock.Object, attribute); navigationHelperMock.Setup(helper => helper.GetTypeForNavigation(It.IsAny <INavigation>())) .Returns(typeof(Book)); context.SetCurrentNavigation(thirdNavigationMock.Object); Assert.False(strategy.ShouldIncludeCurrentNavigation(context)); }