public void DropCollection__DelegatedToRepository()
        {
            MockedTestInstance.Setup(_ => _.GetRepository <IData>()).Returns(DataRepository);

            TestInstance.DropCollection(Collection);

            MockedDataRepository.Verify(_ => _.DropCollection(Collection));
        }
        public async Task RetrieveAsync__DelegatedToRepository()
        {
            MockedTestInstance.Setup(_ => _.GetRepository <IData>()).Returns(DataRepository);
            MockedDataRepository.Setup(_ => _.RetrieveAsync(It.IsAny <ITerminalDescriptor>()))
            .Returns(Task.FromResult(Data));

            var result = await TestInstance.RetrieveAsync <IData>(TerminalDescriptor);

            Assert.AreSame(Data, result);
            MockedDataRepository.Verify(_ => _.RetrieveAsync(TerminalDescriptor));
        }
        public async Task ChangeBuilderAsync__DelegatedToRepository()
        {
            var awaited = false;

            MockedDataRepository.Setup(_ =>
                                       _.ChangeBuilderAsync(It.IsAny <ICollection <IData> >(), It.IsAny <IDataBuilder <IData> >()))
            .Returns(Task.Delay(10).ContinueWith(_ => awaited = true));

            await TestInstance.ChangeBuilderAsync(Collection, DataBuilder);

            MockedDataRepository.Verify(_ => _.ChangeBuilderAsync(Collection, DataBuilder));
            Assert.IsTrue(awaited);
        }
        public async Task FillCollectionAsync__Builder_AlreadyRegisteredWithDescriptor_CollectionNotEmpty__ChangeBuilderDelegatedToRepository()
        {
            MockedCollection.Setup(_ => _.Count).Returns(RandomizationHelper.Instance.GetInt());
            MockedTestInstance.Setup(_ =>
                                     _.IsCollectionRegisteredWithDescriptor(It.IsAny <ICollection <IData> >(),
                                                                            It.IsAny <INonTerminalDescriptor>())).Returns(true);
            MockedDataRepository.Setup(_ => _.FillCollectionAsync(It.IsAny <IFillCollectionArgs <IData> >()))
            .Returns(Task.FromResult(0));

            await TestInstance.FillCollectionAsync(Collection, Descriptor, DataBuilder);

            MockedDataRepository.Verify(_ => _.ChangeBuilderAsync(Collection, DataBuilder), Times.Once);
        }
        public async Task FillCollectionAsync__NoBuilder_AlreadyRegisteredWithDescriptor_CollectionEmpty__DelegatedToRepository()
        {
            MockedCollection.Setup(_ => _.Count).Returns(0);
            MockedTestInstance.Setup(_ =>
                                     _.IsCollectionRegisteredWithDescriptor(It.IsAny <ICollection <IData> >(),
                                                                            It.IsAny <INonTerminalDescriptor>())).Returns(true);
            MockedDataRepository.Setup(_ => _.FillCollectionAsync(It.IsAny <IFillCollectionArgs <IData> >()))
            .Returns(Task.FromResult(0));

            await TestInstance.FillCollectionAsync(Collection, Descriptor);

            MockedDataRepository.Verify(_ => _.FillCollectionAsync(It.IsAny <IFillCollectionArgs <IData> >()));
        }
        public void IsCollectionRegistered__DelegatedToRepository()
        {
            var expectedResult = RandomizationHelper.Instance.GetBool();

            MockedTestInstance.Setup(_ => _.GetRepository <IData>()).Returns(DataRepository);
            MockedDataRepository.Setup(_ => _.IsCollectionRegistered(It.IsAny <ICollection <IData> >()))
            .Returns(expectedResult);

            var result = TestInstance.IsCollectionRegistered(Collection);

            Assert.AreEqual(expectedResult, result);
            MockedDataRepository.Verify(_ => _.IsCollectionRegistered(Collection));
        }
        public async Task FillCollectionAsync__Builder_NotAlreadyRegisteredWithDescriptor__ChangeBuilderNotDelegatedToRepository()
        {
            MockedTestInstance.Setup(_ =>
                                     _.IsCollectionRegisteredWithDescriptor(It.IsAny <ICollection <IData> >(),
                                                                            It.IsAny <INonTerminalDescriptor>())).Returns(false);
            MockedDataRepository.Setup(_ => _.FillCollectionAsync(It.IsAny <IFillCollectionArgs <IData> >()))
            .Returns(Task.FromResult(0));

            await TestInstance.FillCollectionAsync(Collection, Descriptor, DataBuilder);

            MockedDataRepository.Verify(
                _ => _.ChangeBuilderAsync(It.IsAny <ICollection <IData> >(), It.IsAny <IDataBuilder <IData> >()),
                Times.Never);
        }
        public async Task FillCollectionAsync__Builder_NotAlreadyRegisteredWithDescriptor__FillDelegatedToRepository()
        {
            var awaited = false;

            MockedTestInstance.Setup(_ =>
                                     _.IsCollectionRegisteredWithDescriptor(It.IsAny <ICollection <IData> >(),
                                                                            It.IsAny <INonTerminalDescriptor>())).Returns(false);
            MockedDataRepository.Setup(_ =>
                                       _.FillCollectionAsync(It.IsAny <IFillCollectionArgs <IData> >()))
            .Returns(Task.Delay(10).ContinueWith(_ => awaited = true));

            await TestInstance.FillCollectionAsync(Collection, Descriptor, DataBuilder);

            MockedDataRepository.Verify(_ =>
                                        _.FillCollectionAsync(It.Is <IFillCollectionArgs <IData> >(args =>
                                                                                                   Equals(args.Collection, Collection) && args.Descriptor == Descriptor && args.Builder == DataBuilder)));
            Assert.IsTrue(awaited);
            MockedTestInstance.Verify(_ => _.IsCollectionRegisteredWithDescriptor(Collection, Descriptor));
        }