protected TestObjectsC <TPrimary, TFirstSecondary, TSecondSecondary> CreateTestObjectsC <TPrimary, TFirstSecondary, TSecondSecondary>( IHooksDiscovery <TPrimary> primaryDiscovery = null, IHooksDiscovery <TFirstSecondary> firstSecondaryDiscovery = null, IHooksDiscovery <TSecondSecondary> secondSecondaryDiscovery = null, DbContextOptions <HooksDbContext> repoDbContextOptions = null) where TPrimary : class, IIdentifiable <int> where TFirstSecondary : class, IIdentifiable <int> where TSecondSecondary : class, IIdentifiable <int> { // creates the resource definition mock and corresponding for a given set of discoverable hooks Mock <IResourceHookContainer <TPrimary> > primaryResource = CreateResourceDefinition <TPrimary>(); Mock <IResourceHookContainer <TFirstSecondary> > firstSecondaryResource = CreateResourceDefinition <TFirstSecondary>(); Mock <IResourceHookContainer <TSecondSecondary> > secondSecondaryResource = CreateResourceDefinition <TSecondSecondary>(); // mocking the genericServiceFactory and JsonApiContext and wiring them up. (Mock <ITargetedFields> ufMock, Mock <IEnumerable <IQueryConstraintProvider> > constraintsMock, Mock <IGenericServiceFactory> gpfMock, IJsonApiOptions options) = CreateMocks(); HooksDbContext dbContext = repoDbContextOptions != null ? new HooksDbContext(repoDbContextOptions) : null; IResourceGraph resourceGraph = new ResourceGraphBuilder(new JsonApiOptions(), NullLoggerFactory.Instance).Add <TPrimary>().Add <TFirstSecondary>() .Add <TSecondSecondary>().Build(); SetupProcessorFactoryForResourceDefinition(gpfMock, primaryResource.Object, primaryDiscovery, dbContext, resourceGraph); SetupProcessorFactoryForResourceDefinition(gpfMock, firstSecondaryResource.Object, firstSecondaryDiscovery, dbContext, resourceGraph); SetupProcessorFactoryForResourceDefinition(gpfMock, secondSecondaryResource.Object, secondSecondaryDiscovery, dbContext, resourceGraph); var execHelper = new HookContainerProvider(gpfMock.Object, ResourceGraph, options); var traversalHelper = new NodeNavigator(ResourceGraph, ufMock.Object); var hookExecutor = new ResourceHookExecutor(execHelper, traversalHelper, ufMock.Object, constraintsMock.Object, ResourceGraph); return(new TestObjectsC <TPrimary, TFirstSecondary, TSecondSecondary>(constraintsMock, hookExecutor, primaryResource, firstSecondaryResource, secondSecondaryResource)); }
public void BeforeCreate() { // Arrange IHooksDiscovery <TodoItem> todoDiscovery = SetDiscoverableHooks <TodoItem>(_targetHooks, EnableDbValues); IHooksDiscovery <Person> personDiscovery = SetDiscoverableHooks <Person>(_targetHooks, EnableDbValues); (_, _, IResourceHookExecutor hookExecutor, Mock <IResourceHookContainer <TodoItem> > todoResourceMock, Mock <IResourceHookContainer <Person> > ownerResourceMock) = CreateTestObjects(todoDiscovery, personDiscovery, _options); // Act hookExecutor.BeforeCreate(_todoList, ResourcePipeline.Post); // Assert todoResourceMock.Verify( rd => rd.BeforeCreate(It.Is <IResourceHashSet <TodoItem> >(resources => TodoCheck(resources, Description)), ResourcePipeline.Post), Times.Once()); ownerResourceMock.Verify( rd => rd.BeforeUpdateRelationship(It.Is <HashSet <string> >(ids => PersonIdCheck(ids, _personId)), It.IsAny <IRelationshipsDictionary <Person> >(), ResourcePipeline.Post), Times.Once()); todoResourceMock.Verify( rd => rd.BeforeImplicitUpdateRelationship( It.Is <IRelationshipsDictionary <TodoItem> >(rh => TodoCheckRelationships(rh, Description + Description)), ResourcePipeline.Post), Times.Once()); VerifyNoOtherCalls(todoResourceMock, ownerResourceMock); }
public void AfterRead_Without_Parent_Hook_Implemented() { // Arrange IHooksDiscovery <Article> articleDiscovery = SetDiscoverableHooks <Article>(NoHooks, DisableDbValues); IHooksDiscovery <IdentifiableArticleTag> joinDiscovery = SetDiscoverableHooks <IdentifiableArticleTag>(_targetHooks, DisableDbValues); IHooksDiscovery <Tag> tagDiscovery = SetDiscoverableHooks <Tag>(_targetHooks, DisableDbValues); (_, IResourceHookExecutor hookExecutor, Mock <IResourceHookContainer <Article> > articleResourceMock, Mock <IResourceHookContainer <IdentifiableArticleTag> > joinResourceMock, Mock <IResourceHookContainer <Tag> > tagResourceMock) = CreateTestObjectsC(articleDiscovery, joinDiscovery, tagDiscovery); (List <Article> articles, List <IdentifiableArticleTag> joins, List <Tag> tags) = CreateIdentifiableManyToManyData(); // Act hookExecutor.AfterRead(articles, ResourcePipeline.Get); // Assert joinResourceMock.Verify( rd => rd.AfterRead(It.Is <HashSet <IdentifiableArticleTag> >(collection => !collection.Except(joins).Any()), ResourcePipeline.Get, true), Times.Once()); tagResourceMock.Verify(rd => rd.AfterRead(It.Is <HashSet <Tag> >(collection => !collection.Except(tags).Any()), ResourcePipeline.Get, true), Times.Once()); VerifyNoOtherCalls(articleResourceMock, joinResourceMock, tagResourceMock); }
public void AfterDelete_Without_Any_Hook_Implemented() { // Arrange IHooksDiscovery <TodoItem> discovery = SetDiscoverableHooks <TodoItem>(NoHooks, DisableDbValues); (IResourceHookExecutor hookExecutor, Mock <IResourceHookContainer <TodoItem> > resourceDefinitionMock) = CreateTestObjects(discovery); IEnumerable <TodoItem> todoList = CreateTodoWithOwner(); // Act hookExecutor.AfterDelete(todoList, ResourcePipeline.Delete, It.IsAny <bool>()); // Assert VerifyNoOtherCalls(resourceDefinitionMock); }
public void BeforeRead() { // Arrange IHooksDiscovery <TodoItem> todoDiscovery = SetDiscoverableHooks <TodoItem>(_targetHooks, DisableDbValues); (IResourceHookExecutor hookExecutor, Mock <IResourceHookContainer <TodoItem> > todoResourceMock) = CreateTestObjects(todoDiscovery); // Act hookExecutor.BeforeRead <TodoItem>(ResourcePipeline.Get); // Assert todoResourceMock.Verify(rd => rd.BeforeRead(ResourcePipeline.Get, false, null), Times.Once()); VerifyNoOtherCalls(todoResourceMock); }
public void AfterDelete() { // Arrange IHooksDiscovery <TodoItem> discovery = SetDiscoverableHooks <TodoItem>(_targetHooks, DisableDbValues); (IResourceHookExecutor hookExecutor, Mock <IResourceHookContainer <TodoItem> > resourceDefinitionMock) = CreateTestObjects(discovery); IEnumerable <TodoItem> todoList = CreateTodoWithOwner(); // Act hookExecutor.AfterDelete(todoList, ResourcePipeline.Delete, It.IsAny <bool>()); // Assert resourceDefinitionMock.Verify(rd => rd.AfterDelete(It.IsAny <HashSet <TodoItem> >(), ResourcePipeline.Delete, It.IsAny <bool>()), Times.Once()); VerifyNoOtherCalls(resourceDefinitionMock); }
public bool ShouldLoadDbValues(LeftType resourceType, ResourceHook hook) { IHooksDiscovery discovery = GetHookDiscovery(resourceType); if (discovery.DatabaseValuesDisabledHooks.Contains(hook)) { return(false); } if (discovery.DatabaseValuesEnabledHooks.Contains(hook)) { return(true); } return(_options.LoadDatabaseValues); }
public void BeforeCreate_Without_Any_Hook_Implemented() { // Arrange IHooksDiscovery <TodoItem> todoDiscovery = SetDiscoverableHooks <TodoItem>(NoHooks, DisableDbValues); IHooksDiscovery <Person> personDiscovery = SetDiscoverableHooks <Person>(NoHooks, DisableDbValues); (_, _, IResourceHookExecutor hookExecutor, Mock <IResourceHookContainer <TodoItem> > todoResourceMock, Mock <IResourceHookContainer <Person> > ownerResourceMock) = CreateTestObjects(todoDiscovery, personDiscovery); IEnumerable <TodoItem> todoList = CreateTodoWithOwner(); // Act hookExecutor.BeforeCreate(todoList, ResourcePipeline.Post); // Assert VerifyNoOtherCalls(todoResourceMock, ownerResourceMock); }
public void Resource_Has_Multiple_Relations_To_Same_Type() { // Arrange IHooksDiscovery <TodoItem> todoDiscovery = SetDiscoverableHooks <TodoItem>(_targetHooks, DisableDbValues); IHooksDiscovery <Person> personDiscovery = SetDiscoverableHooks <Person>(_targetHooks, DisableDbValues); (_, _, IResourceHookExecutor hookExecutor, Mock <IResourceHookContainer <TodoItem> > todoResourceMock, Mock <IResourceHookContainer <Person> > ownerResourceMock) = CreateTestObjects(todoDiscovery, personDiscovery); var person1 = new Person(); var todo = new TodoItem { Owner = person1 }; var person2 = new Person { AssignedTodoItems = new HashSet <TodoItem> { todo } }; todo.Assignee = person2; var person3 = new Person { StakeHolderTodoItem = todo }; todo.StakeHolders = new HashSet <Person> { person3 }; List <TodoItem> todoList = todo.AsList(); // Act hookExecutor.OnReturn(todoList, ResourcePipeline.Post); // Assert todoResourceMock.Verify(rd => rd.OnReturn(It.IsAny <HashSet <TodoItem> >(), ResourcePipeline.Post), Times.Once()); ownerResourceMock.Verify(rd => rd.OnReturn(It.IsAny <HashSet <Person> >(), ResourcePipeline.Post), Times.Once()); VerifyNoOtherCalls(todoResourceMock, ownerResourceMock); }
public void AfterRead_Without_Any_Hook_Implemented() { // Arrange IHooksDiscovery <Article> articleDiscovery = SetDiscoverableHooks <Article>(NoHooks, DisableDbValues); IHooksDiscovery <Tag> tagDiscovery = SetDiscoverableHooks <Tag>(NoHooks, DisableDbValues); (_, _, IResourceHookExecutor hookExecutor, Mock <IResourceHookContainer <Article> > articleResourceMock, Mock <IResourceHookContainer <Tag> > tagResourceMock) = CreateTestObjects(articleDiscovery, tagDiscovery); (List <Article> articles, _) = CreateManyToManyData(); // Act hookExecutor.AfterRead(articles, ResourcePipeline.Get); // Assert VerifyNoOtherCalls(articleResourceMock, tagResourceMock); }
public void Resource_Has_Nested_Cyclic_Relations() { // Arrange IHooksDiscovery <TodoItem> todoDiscovery = SetDiscoverableHooks <TodoItem>(_targetHooks, DisableDbValues); (IResourceHookExecutor hookExecutor, Mock <IResourceHookContainer <TodoItem> > todoResourceMock) = CreateTestObjects(todoDiscovery); var rootTodo = new TodoItem { Id = 1 }; var child = new TodoItem { ParentTodo = rootTodo, Id = 2 }; rootTodo.ChildTodoItems = child.AsList(); var grandChild = new TodoItem { ParentTodo = child, Id = 3 }; child.ChildTodoItems = grandChild.AsList(); var greatGrandChild = new TodoItem { ParentTodo = grandChild, Id = 4 }; grandChild.ChildTodoItems = greatGrandChild.AsList(); greatGrandChild.ChildTodoItems = rootTodo.AsList(); List <TodoItem> todoList = rootTodo.AsList(); // Act hookExecutor.OnReturn(todoList, ResourcePipeline.Post); // Assert todoResourceMock.Verify(rd => rd.OnReturn(It.IsAny <HashSet <TodoItem> >(), ResourcePipeline.Post), Times.Exactly(4)); VerifyNoOtherCalls(todoResourceMock); }
public void OnReturn_Without_Parent_Hook_Implemented() { // Arrange IHooksDiscovery <Article> articleDiscovery = SetDiscoverableHooks <Article>(NoHooks, DisableDbValues); IHooksDiscovery <Tag> tagDiscovery = SetDiscoverableHooks <Tag>(_targetHooks, DisableDbValues); (_, _, IResourceHookExecutor hookExecutor, Mock <IResourceHookContainer <Article> > articleResourceMock, Mock <IResourceHookContainer <Tag> > tagResourceMock) = CreateTestObjects(articleDiscovery, tagDiscovery); (List <Article> articles, List <Tag> tags) = CreateDummyData(); // Act hookExecutor.OnReturn(articles, ResourcePipeline.Get); // Assert tagResourceMock.Verify(rd => rd.OnReturn(It.Is <HashSet <Tag> >(collection => !collection.Except(tags).Any()), ResourcePipeline.Get), Times.Once()); VerifyNoOtherCalls(articleResourceMock, tagResourceMock); }
protected TestObjectsA <TPrimary> CreateTestObjects <TPrimary>(IHooksDiscovery <TPrimary> primaryDiscovery = null) where TPrimary : class, IIdentifiable <int> { // creates the resource definition mock and corresponding ImplementedHooks discovery instance Mock <IResourceHookContainer <TPrimary> > primaryResource = CreateResourceDefinition <TPrimary>(); // mocking the genericServiceFactory and JsonApiContext and wiring them up. (Mock <ITargetedFields> ufMock, Mock <IEnumerable <IQueryConstraintProvider> > constraintsMock, Mock <IGenericServiceFactory> gpfMock, IJsonApiOptions options) = CreateMocks(); SetupProcessorFactoryForResourceDefinition(gpfMock, primaryResource.Object, primaryDiscovery); var execHelper = new HookContainerProvider(gpfMock.Object, ResourceGraph, options); var traversalHelper = new NodeNavigator(ResourceGraph, ufMock.Object); var hookExecutor = new ResourceHookExecutor(execHelper, traversalHelper, ufMock.Object, constraintsMock.Object, ResourceGraph); return(new TestObjectsA <TPrimary>(hookExecutor, primaryResource)); }
public void BeforeDelete_No_Children_Hooks() { // Arrange IHooksDiscovery <Person> personDiscovery = SetDiscoverableHooks <Person>(_targetHooks, EnableDbValues); IHooksDiscovery <TodoItem> todoDiscovery = SetDiscoverableHooks <TodoItem>(NoHooks, DisableDbValues); IHooksDiscovery <Passport> passportDiscovery = SetDiscoverableHooks <Passport>(NoHooks, DisableDbValues); (_, IResourceHookExecutor hookExecutor, Mock <IResourceHookContainer <Person> > personResourceMock, Mock <IResourceHookContainer <TodoItem> > todoResourceMock, Mock <IResourceHookContainer <Passport> > passportResourceMock) = CreateTestObjectsC(personDiscovery, todoDiscovery, passportDiscovery, _options); // Act hookExecutor.BeforeDelete(_person.AsList(), ResourcePipeline.Delete); // Assert personResourceMock.Verify(rd => rd.BeforeDelete(It.IsAny <IResourceHashSet <Person> >(), It.IsAny <ResourcePipeline>()), Times.Once()); VerifyNoOtherCalls(personResourceMock, todoResourceMock, passportResourceMock); }
public void BeforeCreate_NoImplicit_Without_Child_Hook_Implemented() { // Arrange IHooksDiscovery <TodoItem> todoDiscovery = SetDiscoverableHooks <TodoItem>(_targetHooksNoImplicit, ResourceHook.BeforeUpdate); IHooksDiscovery <Person> personDiscovery = SetDiscoverableHooks <Person>(NoHooks, DisableDbValues); (_, _, IResourceHookExecutor hookExecutor, Mock <IResourceHookContainer <TodoItem> > todoResourceMock, Mock <IResourceHookContainer <Person> > ownerResourceMock) = CreateTestObjects(todoDiscovery, personDiscovery, _options); // Act hookExecutor.BeforeCreate(_todoList, ResourcePipeline.Post); // Assert todoResourceMock.Verify( rd => rd.BeforeCreate(It.Is <IResourceHashSet <TodoItem> >(resources => TodoCheck(resources, Description)), ResourcePipeline.Post), Times.Once()); VerifyNoOtherCalls(todoResourceMock, ownerResourceMock); }
public void AfterUpdate_Without_Child_Hook_Implemented() { // Arrange IHooksDiscovery <TodoItem> todoDiscovery = SetDiscoverableHooks <TodoItem>(_targetHooks, DisableDbValues); IHooksDiscovery <Person> personDiscovery = SetDiscoverableHooks <Person>(NoHooks, DisableDbValues); (_, _, IResourceHookExecutor hookExecutor, Mock <IResourceHookContainer <TodoItem> > todoResourceMock, Mock <IResourceHookContainer <Person> > ownerResourceMock) = CreateTestObjects(todoDiscovery, personDiscovery); IEnumerable <TodoItem> todoList = CreateTodoWithOwner(); // Act hookExecutor.AfterUpdate(todoList, ResourcePipeline.Patch); // Assert todoResourceMock.Verify(rd => rd.AfterUpdate(It.IsAny <HashSet <TodoItem> >(), ResourcePipeline.Patch), Times.Once()); VerifyNoOtherCalls(todoResourceMock, ownerResourceMock); }
public void AfterRead_Without_Children_Hooks_Implemented() { // Arrange IHooksDiscovery <Article> articleDiscovery = SetDiscoverableHooks <Article>(_targetHooks, DisableDbValues); IHooksDiscovery <Tag> tagDiscovery = SetDiscoverableHooks <Tag>(NoHooks, DisableDbValues); (_, _, IResourceHookExecutor hookExecutor, Mock <IResourceHookContainer <Article> > articleResourceMock, Mock <IResourceHookContainer <Tag> > tagResourceMock) = CreateTestObjects(articleDiscovery, tagDiscovery); (List <Article> articles, _) = CreateManyToManyData(); // Act hookExecutor.AfterRead(articles, ResourcePipeline.Get); // Assert articleResourceMock.Verify(rd => rd.AfterRead(It.IsAny <HashSet <Article> >(), ResourcePipeline.Get, false), Times.Once()); VerifyNoOtherCalls(articleResourceMock, tagResourceMock); }
public void BeforeUpdate_NoImplicit_Without_Parent_Hook_Implemented() { // Arrange IHooksDiscovery <TodoItem> todoDiscovery = SetDiscoverableHooks <TodoItem>(NoHooks, DisableDbValues); IHooksDiscovery <Person> personDiscovery = SetDiscoverableHooks <Person>(_targetHooksNoImplicit, ResourceHook.BeforeUpdateRelationship); (_, _, IResourceHookExecutor hookExecutor, Mock <IResourceHookContainer <TodoItem> > todoResourceMock, Mock <IResourceHookContainer <Person> > ownerResourceMock) = CreateTestObjects(todoDiscovery, personDiscovery, _options); // Act hookExecutor.BeforeUpdate(_todoList, ResourcePipeline.Patch); // Assert ownerResourceMock.Verify( rd => rd.BeforeUpdateRelationship(It.Is <HashSet <string> >(ids => PersonIdCheck(ids, _personId)), It.Is <IRelationshipsDictionary <Person> >(rh => PersonCheck(LastName, rh)), ResourcePipeline.Patch), Times.Once()); VerifyNoOtherCalls(todoResourceMock, ownerResourceMock); }
public void Resource_Has_Cyclic_Relations() { // Arrange IHooksDiscovery <TodoItem> todoDiscovery = SetDiscoverableHooks <TodoItem>(_targetHooks, DisableDbValues); (IResourceHookExecutor hookExecutor, Mock <IResourceHookContainer <TodoItem> > todoResourceMock) = CreateTestObjects(todoDiscovery); var todo = new TodoItem(); todo.ParentTodo = todo; todo.ChildTodoItems = todo.AsList(); List <TodoItem> todoList = todo.AsList(); // Act hookExecutor.OnReturn(todoList, ResourcePipeline.Post); // Assert todoResourceMock.Verify(rd => rd.OnReturn(It.IsAny <HashSet <TodoItem> >(), ResourcePipeline.Post), Times.Once()); VerifyNoOtherCalls(todoResourceMock); }
public void OnReturn_Without_Any_Descendant_Hooks_Implemented() { // Arrange IHooksDiscovery <Article> articleDiscovery = SetDiscoverableHooks <Article>(_targetHooks, DisableDbValues); IHooksDiscovery <IdentifiableArticleTag> joinDiscovery = SetDiscoverableHooks <IdentifiableArticleTag>(NoHooks, DisableDbValues); IHooksDiscovery <Tag> tagDiscovery = SetDiscoverableHooks <Tag>(NoHooks, DisableDbValues); (_, IResourceHookExecutor hookExecutor, Mock <IResourceHookContainer <Article> > articleResourceMock, Mock <IResourceHookContainer <IdentifiableArticleTag> > joinResourceMock, Mock <IResourceHookContainer <Tag> > tagResourceMock) = CreateTestObjectsC(articleDiscovery, joinDiscovery, tagDiscovery); (List <Article> articles, _, _) = CreateIdentifiableManyToManyData(); // Act hookExecutor.OnReturn(articles, ResourcePipeline.Get); // Assert articleResourceMock.Verify(rd => rd.OnReturn(It.IsAny <HashSet <Article> >(), ResourcePipeline.Get), Times.Once()); VerifyNoOtherCalls(articleResourceMock, joinResourceMock, tagResourceMock); }
public void BeforeReadWithNestedInclusion_Without_Any_Hook_Implemented() { // Arrange IHooksDiscovery <TodoItem> todoDiscovery = SetDiscoverableHooks <TodoItem>(NoHooks, DisableDbValues); IHooksDiscovery <Person> personDiscovery = SetDiscoverableHooks <Person>(NoHooks, DisableDbValues); IHooksDiscovery <Passport> passportDiscovery = SetDiscoverableHooks <Passport>(NoHooks, DisableDbValues); (Mock <IEnumerable <IQueryConstraintProvider> > constraintsMock, IResourceHookExecutor hookExecutor, Mock <IResourceHookContainer <TodoItem> > todoResourceMock, Mock <IResourceHookContainer <Person> > ownerResourceMock, Mock <IResourceHookContainer <Passport> > passportResourceMock) = CreateTestObjectsC(todoDiscovery, personDiscovery, passportDiscovery); IEnumerable <IQueryConstraintProvider> constraintProviders = Wrap(ToIncludeExpression("owner.passport", "assignee", "stakeHolders")); constraintsMock.Setup(providers => providers.GetEnumerator()).Returns(constraintProviders.GetEnumerator()); // Act hookExecutor.BeforeRead <TodoItem>(ResourcePipeline.Get); // Assert VerifyNoOtherCalls(todoResourceMock, ownerResourceMock, passportResourceMock); }
public void BeforeCreate_Without_Parent_Hook_Implemented() { // Arrange IHooksDiscovery <TodoItem> todoDiscovery = SetDiscoverableHooks <TodoItem>(NoHooks, DisableDbValues); IHooksDiscovery <Person> personDiscovery = SetDiscoverableHooks <Person>(_targetHooks, DisableDbValues); (_, _, IResourceHookExecutor hookExecutor, Mock <IResourceHookContainer <TodoItem> > todoResourceMock, Mock <IResourceHookContainer <Person> > ownerResourceMock) = CreateTestObjects(todoDiscovery, personDiscovery); IEnumerable <TodoItem> todoList = CreateTodoWithOwner(); // Act hookExecutor.BeforeCreate(todoList, ResourcePipeline.Post); // Assert todoResourceMock.Verify(rd => rd.BeforeCreate(It.IsAny <IResourceHashSet <TodoItem> >(), ResourcePipeline.Post), Times.Never()); ownerResourceMock.Verify( rd => rd.BeforeUpdateRelationship(It.IsAny <HashSet <string> >(), It.IsAny <IRelationshipsDictionary <Person> >(), ResourcePipeline.Post), Times.Once()); VerifyNoOtherCalls(todoResourceMock, ownerResourceMock); }
public void AfterRead() { // Arrange IHooksDiscovery <Article> articleDiscovery = SetDiscoverableHooks <Article>(_targetHooks, DisableDbValues); IHooksDiscovery <Tag> tagDiscovery = SetDiscoverableHooks <Tag>(_targetHooks, DisableDbValues); (_, _, IResourceHookExecutor hookExecutor, Mock <IResourceHookContainer <Article> > articleResourceMock, Mock <IResourceHookContainer <Tag> > tagResourceMock) = CreateTestObjects(articleDiscovery, tagDiscovery); (List <Article> articles, List <Tag> tags) = CreateManyToManyData(); // Act hookExecutor.AfterRead(articles, ResourcePipeline.Get); // Assert articleResourceMock.Verify(rd => rd.AfterRead(It.IsAny <HashSet <Article> >(), ResourcePipeline.Get, false), Times.Once()); tagResourceMock.Verify(rd => rd.AfterRead(It.Is <HashSet <Tag> >(collection => !collection.Except(tags).Any()), ResourcePipeline.Get, true), Times.Once()); VerifyNoOtherCalls(articleResourceMock, tagResourceMock); }
public void BeforeReadWithInclusion() { // Arrange IHooksDiscovery <TodoItem> todoDiscovery = SetDiscoverableHooks <TodoItem>(_targetHooks, DisableDbValues); IHooksDiscovery <Person> personDiscovery = SetDiscoverableHooks <Person>(_targetHooks, DisableDbValues); (Mock <IEnumerable <IQueryConstraintProvider> > constraintsMock, _, IResourceHookExecutor hookExecutor, Mock <IResourceHookContainer <TodoItem> > todoResourceMock, Mock <IResourceHookContainer <Person> > ownerResourceMock) = CreateTestObjects(todoDiscovery, personDiscovery); IEnumerable <IQueryConstraintProvider> constraintProviders = Wrap(ToIncludeExpression("owner", "assignee", "stakeHolders")); constraintsMock.Setup(providers => providers.GetEnumerator()).Returns(constraintProviders.GetEnumerator()); // Act hookExecutor.BeforeRead <TodoItem>(ResourcePipeline.Get); // Assert todoResourceMock.Verify(rd => rd.BeforeRead(ResourcePipeline.Get, false, null), Times.Once()); ownerResourceMock.Verify(rd => rd.BeforeRead(ResourcePipeline.Get, true, null), Times.Once()); VerifyNoOtherCalls(todoResourceMock, ownerResourceMock); }
CreateTestObjects <TPrimary, TFirstSecondary, TSecondSecondary>( IHooksDiscovery <TPrimary> primaryDiscovery = null, IHooksDiscovery <TFirstSecondary> firstSecondaryDiscovery = null, IHooksDiscovery <TSecondSecondary> secondSecondaryDiscovery = null, DbContextOptions <AppDbContext> repoDbContextOptions = null ) where TPrimary : class, IIdentifiable <int> where TFirstSecondary : class, IIdentifiable <int> where TSecondSecondary : class, IIdentifiable <int> { // creates the resource definition mock and corresponding for a given set of discoverable hooks var primaryResource = CreateResourceDefinition <TPrimary>(); var firstSecondaryResource = CreateResourceDefinition <TFirstSecondary>(); var secondSecondaryResource = CreateResourceDefinition <TSecondSecondary>(); // mocking the genericServiceFactory and JsonApiContext and wiring them up. var(ufMock, constraintsMock, gpfMock, options) = CreateMocks(); var dbContext = repoDbContextOptions != null ? new AppDbContext(repoDbContextOptions) : null; var resourceGraph = new ResourceGraphBuilder(new JsonApiOptions(), NullLoggerFactory.Instance) .Add <TPrimary>() .Add <TFirstSecondary>() .Add <TSecondSecondary>() .Build(); SetupProcessorFactoryForResourceDefinition(gpfMock, primaryResource.Object, primaryDiscovery, dbContext, resourceGraph); SetupProcessorFactoryForResourceDefinition(gpfMock, firstSecondaryResource.Object, firstSecondaryDiscovery, dbContext, resourceGraph); SetupProcessorFactoryForResourceDefinition(gpfMock, secondSecondaryResource.Object, secondSecondaryDiscovery, dbContext, resourceGraph); var execHelper = new HookExecutorHelper(gpfMock.Object, ResourceGraph, options); var traversalHelper = new TraversalHelper(ResourceGraph, ufMock.Object); var hookExecutor = new ResourceHookExecutor(execHelper, traversalHelper, ufMock.Object, constraintsMock.Object, ResourceGraph); return(constraintsMock, hookExecutor, primaryResource, firstSecondaryResource, secondSecondaryResource); }
private bool ShouldExecuteHook(RightType resourceType, ResourceHook hook) { IHooksDiscovery discovery = GetHookDiscovery(resourceType); return(discovery.ImplementedHooks.Contains(hook)); }
internal (ResourceHookExecutor, Mock <IResourceHookContainer <TPrimary> >) CreateTestObjects <TPrimary>(IHooksDiscovery <TPrimary> primaryDiscovery = null) where TPrimary : class, IIdentifiable <int> { // creates the resource definition mock and corresponding ImplementedHooks discovery instance var primaryResource = CreateResourceDefinition <TPrimary>(); // mocking the genericServiceFactory and JsonApiContext and wiring them up. var(ufMock, constraintsMock, gpfMock, options) = CreateMocks(); SetupProcessorFactoryForResourceDefinition(gpfMock, primaryResource.Object, primaryDiscovery); var execHelper = new HookExecutorHelper(gpfMock.Object, ResourceGraph, options); var traversalHelper = new TraversalHelper(ResourceGraph, ufMock.Object); var hookExecutor = new ResourceHookExecutor(execHelper, traversalHelper, ufMock.Object, constraintsMock.Object, ResourceGraph); return(hookExecutor, primaryResource); }
private void SetupProcessorFactoryForResourceDefinition <TModel>(Mock <IGenericServiceFactory> processorFactory, IResourceHookContainer <TModel> modelResource, IHooksDiscovery <TModel> discovery, AppDbContext dbContext = null, IResourceGraph resourceGraph = null) where TModel : class, IIdentifiable <int> { processorFactory.Setup(factory => factory.Get <IResourceHookContainer>(typeof(ResourceHooksDefinition <>), typeof(TModel))).Returns(modelResource); processorFactory.Setup(factory => factory.Get <IHooksDiscovery>(typeof(IHooksDiscovery <>), typeof(TModel))).Returns(discovery); if (dbContext != null) { Type idType = ObjectFactory.GetIdType(typeof(TModel)); if (idType == typeof(int)) { IResourceReadRepository <TModel, int> repo = CreateTestRepository <TModel>(dbContext, resourceGraph); processorFactory.Setup(factory => factory.Get <IResourceReadRepository <TModel, int> >(typeof(IResourceReadRepository <,>), typeof(TModel), typeof(int))).Returns(repo); } else { throw new TypeLoadException("Test not set up properly"); } } }