Ejemplo n.º 1
0
            public async Task AddExistingDriver_InsertUnsuccessfull()
            {
                var mockSession = new Mock <IClientSessionHandle>();

                mockSession
                .Setup(x => x.StartTransaction(It.IsAny <TransactionOptions>()));
                mockSession
                .Setup(x => x.AbortTransaction(It.IsAny <CancellationToken>()));
                mockSession
                .Setup(x => x.CommitTransaction(It.IsAny <CancellationToken>()));

                var mockMotoristaCollection = new Mock <IMongoCollection <Motorista> >();

                mockMotoristaCollection
                .Setup(x => x.InsertOneAsync(It.IsAny <Motorista>(), It.IsAny <InsertOneOptions>(), It.IsAny <CancellationToken>()))
                .Returns(Task.CompletedTask);

                var mockDatabase = new Mock <IMongoDBService>();

                mockDatabase
                .Setup(x => x.Instance.Client.StartSession(
                           It.IsAny <ClientSessionOptions>(),
                           It.IsAny <CancellationToken>()
                           ))
                .Returns(mockSession.Object);

                mockDatabase
                .Setup(x => x.GetCollection <Motorista>())
                .Returns(mockMotoristaCollection.Object);

                var list = new Motorista[]
                {
                    new Motorista {
                        Cpf = "123.456.789-12"
                    }
                };
                var queryableList = list.AsQueryable();

                var mongoQueryableMock = new Mock <IMongoQueryable <Motorista> >();

                mongoQueryableMock.As <IQueryable <Motorista> >().Setup(x => x.Provider).Returns(queryableList.Provider);
                mongoQueryableMock.As <IQueryable <Motorista> >().Setup(x => x.Expression).Returns(queryableList.Expression);
                mongoQueryableMock.As <IQueryable <Motorista> >().Setup(x => x.ElementType).Returns(queryableList.ElementType);
                mongoQueryableMock.As <IQueryable <Motorista> >().Setup(x => x.GetEnumerator()).Returns(() => queryableList.GetEnumerator());

                mockDatabase
                .Setup(x => x.GetCollectionAsQueryable <Motorista>())
                .Returns(mongoQueryableMock.Object);

                var mockHandler = new Mock <IHandler <RegistrarPassagemPeloTerminal.Command, Task> >();

                mockHandler
                .Setup(x => x.Handle(It.IsAny <RegistrarPassagemPeloTerminal.Command>()))
                .Returns(Task.CompletedTask);

                var command = new Command
                {
                    Cpf     = "123.456.789-12",
                    Destino = new Local
                    {
                        Localizacao = new Localizacao {
                            Coordinates = new double[] { 10, 10 }
                        }
                    },
                    Origem = new Local
                    {
                        Localizacao = new Localizacao {
                            Coordinates = new double[] { 20, 20 }
                        }
                    },
                    EstaCarregado = false,
                    Idade         = 18,
                    Nome          = "Test",
                    Sexo          = Sexo.Masculino,
                    TipoCaminhao  = TipoCaminhao.CaminhaoTresQuartos,
                    TipoCnh       = TipoCnh.A
                };

                var handler  = new CommandHandler(mockDatabase.Object, mockHandler.Object);
                var resolved = await handler.Handle(command);

                mockSession.Verify(x => x.CommitTransaction(It.IsAny <CancellationToken>()), Times.Never);
                mockSession.Verify(x => x.AbortTransaction(It.IsAny <CancellationToken>()), Times.Never);
                Assert.IsTrue(resolved.IsErr);
            }