public async void HandleAddBookCommand_WithCorrectParameters_ShouldReturnNoErrors()
        {
            //Arrange
            TestBaseArrangements baseArrangements = new TestBaseArrangements();

            #region .:: Objects build ::.
            AddBookCommand addBookCommand = new AddBookCommand("Pet Sematary", 2013, 1, "9788581050393", Guid.NewGuid().ToString());
            Author         author         = new Author(Guid.NewGuid(), "Stephen King");
            Book           book           = new Book(Guid.NewGuid(), "Pet Sematary", 2013, 1, "9788581050393", author);
            #endregion

            #region .:: Mocks ::.
            baseArrangements.Mocker.GetMock <IAuthorRepository>()
            .Setup(b => b.GetAuthorById(It.IsAny <Guid>()))
            .Returns(() => Task.FromResult <Author>(author));

            baseArrangements.Mocker.GetMock <IBookRepository>()
            .Setup(b => b.AddBook(It.IsAny <Book>()))
            .Returns(() => Task.FromResult(book));
            #endregion

            var sut = baseArrangements.Mocker.CreateInstance <AddBookCommandHandler>();

            //Act
            AddBookCommandResponseViewModel result = await sut.Handle(addBookCommand, new CancellationToken());

            //Assert
            baseArrangements.DomainNotifications.GetAll().Should().BeEmpty();
            baseArrangements.Mocker.GetMock <IAuthorRepository>().Verify(x => x.GetAuthorById(It.IsAny <Guid>()), Times.Once());
            baseArrangements.Mocker.GetMock <IBookRepository>().Verify(x => x.AddBook(It.IsAny <Book>()), Times.Once());
        }
        async Task RequestLoanCommand_WithInvalidBook_ShoudlReturnBookNotFound()
        {
            //arrage
            TestBaseArrangements baseArrangements = new TestBaseArrangements();
            RequestLoanCommand   command          = new RequestLoanCommand("12345678998", Guid.NewGuid().ToString());

            baseArrangements.Mocker.GetMock <IPersonRepository>()
            .Setup(p => p.GetByDocument(It.IsAny <string>(), It.IsAny <bool>()))
            .Returns(() => Task.FromResult(PersonFactory.ReturnPerson()));

            baseArrangements.Mocker.GetMock <IBookRepository>()
            .Setup(b => b.GetById(It.IsAny <Guid>()))
            .Returns(() => Task.FromResult <Book>(null));
            var sut = baseArrangements.Mocker.CreateInstance <RequestLoanCommandHandler>();
            //act
            await sut.Handle(command, new CancellationToken());

            //assert
            baseArrangements.Mocker.GetMock <IPersonRepository>().Verify(x => x.GetByDocument(It.IsAny <string>(), It.IsAny <bool>()), Times.Once());
            baseArrangements.Mocker.GetMock <IBookRepository>().Verify(x => x.GetById(It.IsAny <Guid>()), Times.Once());
            baseArrangements.Mocker.GetMock <IBookLoanRepository>().Verify(x => x.Add(It.IsAny <BookLoan>()), Times.Never);

            baseArrangements.DomainNotifications.GetAll().Should().NotBeEmpty()
            .And.HaveCount(1)
            .And.Contain(x => x == Messages.BookLoan_BookNotFound);
        }
        public void ValidateBookLoan_Return_ShouldReturnNoErrors()
        {
            //arrage
            TestBaseArrangements baseArrangements = new TestBaseArrangements();
            BookLoan             bookLoan         = new BookLoan(Guid.NewGuid(), BookFactory.ReturnBook().WithBookSituation(BookSituationEnum.Lent), PersonFactory.ReturnPerson());

            //act
            bookLoan.ReturnBook();
            //assert
            baseArrangements.DomainNotifications.GetAll().Should().BeEmpty();
            bookLoan.Book.BookSituation.Value.Should().Be(BookSituationEnum.Awaiting.Value);
        }
        public void ValidateAuthor_WithNullName_ShouldReturnNullNameError()
        {
            //Arrange
            TestBaseArrangements baseArrangements = new TestBaseArrangements();
            Author author = new Author(Guid.NewGuid(), null);

            //Act
            author.Validate();

            //Assert
            baseArrangements.DomainNotifications.GetAll().Should().NotBeEmpty().
            And.Contain(x => x == Domain.Resources.Messages.Author_AuthorNameIsNull);
        }
Beispiel #5
0
        public async void HandleAddAuthorCommand_WithInvalidMinimumChars_ShouldReturnError(string authorName)
        {
            //Arrange
            TestBaseArrangements baseArrangements = new TestBaseArrangements();
            AddAuthorCommand     request          = new AddAuthorCommand(authorName);
            var sut = baseArrangements.Mocker.CreateInstance <AddAuthorCommandHandler>();
            //Act
            await sut.Handle(request, new CancellationToken());

            //Assert
            baseArrangements.DomainNotifications.GetAll().Should().NotBeEmpty();
            baseArrangements.Mocker.GetMock <IAuthorRepository>().Verify(x => x.AddAuthor(It.IsAny <Author>()), Times.Never);
        }
Beispiel #6
0
        public void ValidateBook_WithReleaseDatePrior2008AndInvalidISBNLength_ShouldReturnInvalidISBNLengthForReleaseDate(string isbn)
        {
            //Arrange
            TestBaseArrangements baseArrangements = new TestBaseArrangements();
            Book book = new Book(Guid.NewGuid(), "Pet Sematary", 2007, 1, isbn, new Author(Guid.NewGuid(), "Stephen King"));

            //Act
            bool isValid = book.Validate();

            //Assert
            isValid.Should().BeFalse();
            baseArrangements.DomainNotifications.GetAll().Should().NotBeNullOrEmpty()
            .And.Contain(x => x == Messages.Book_ISBNShouldHave10Chars);
        }
Beispiel #7
0
        public void ValidateBook_WithInvalidEdition_ShouldReturnInvalidEdition(int edition)
        {
            //Arrange
            TestBaseArrangements baseArrangements = new TestBaseArrangements();
            Book book = new Book(Guid.NewGuid(), "Pet Sematary", DateTime.Now.Year, edition, "432423431", new Author(Guid.NewGuid(), "Stephen King"));

            //Act
            bool isValid = book.Validate();

            //Assert
            isValid.Should().BeFalse();
            baseArrangements.DomainNotifications.GetAll().Should().NotBeNullOrEmpty()
            .And.Contain(x => x == Messages.Book_EditionCannotBeLowerThan1);
        }
Beispiel #8
0
        public void ValidateBook_WithInvalidReleaseDate_ShouldReturnReleaseYearCanntoBeGreaterThanCurrentYear()
        {
            //Arrange
            TestBaseArrangements baseArrangements = new TestBaseArrangements();
            Book book = new Book(Guid.NewGuid(), "Pet Sematary", DateTime.Now.Year + 1, 2, "432423431", new Author(Guid.NewGuid(), "Stephen King"));

            //Act
            bool isValid = book.Validate();

            //Assert
            isValid.Should().BeFalse();
            baseArrangements.DomainNotifications.GetAll().Should().NotBeNullOrEmpty()
            .And.Contain(x => x == Messages.Book_ReleaseYearCannotBeGraterThanCurrentYear);
        }
Beispiel #9
0
        public void ValidateBook_WithInvalidAuthor_ShouldReturnInvalidAuthor()
        {
            //Arrange
            TestBaseArrangements baseArrangements = new TestBaseArrangements();
            Book book = new Book(Guid.NewGuid(), "Pet Sematary", 2009, 1, "1234567896541", null);

            //Act
            bool isValid = book.Validate();

            //Assert
            isValid.Should().BeFalse();
            baseArrangements.DomainNotifications.GetAll().Should().NotBeNullOrEmpty()
            .And.Contain(x => x == Messages.Book_AuthorShouldNotBeNull);
        }
        public void ValidateBookLoadn_Return_ShouldReturnBookNotLent()
        {
            //arrange
            TestBaseArrangements testBaseArrangements = new TestBaseArrangements();
            Book     book     = BookFactory.ReturnBook().WithBookSituation(BookSituationEnum.Awaiting);
            BookLoan bookLoan = new BookLoan(Guid.NewGuid(), book, PersonFactory.ReturnPerson());

            //act
            bookLoan.ReturnBook();

            //assert
            testBaseArrangements.DomainNotifications.GetAll().Should().HaveCount(1)
            .And.Contain(x => x == Messages.BookLoan_BookIsNotLent);
        }
Beispiel #11
0
        public void ValidateBook_WithInvalidName_ShouldReturnInvalidName(string BookTitle)
        {
            //Arrange
            TestBaseArrangements baseArrangements = new TestBaseArrangements();
            Book book = new Book(Guid.NewGuid(), BookTitle, 2020, 2, "432423431", new Author(Guid.NewGuid(), "Stephen King"));

            //Act
            bool isValid = book.Validate();

            //Assert
            isValid.Should().BeFalse();
            baseArrangements.DomainNotifications.GetAll().Should().NotBeNullOrEmpty()
            .And.Contain(x => x == Messages.Book_TitleShouldNotBeNullOrEmpty);
        }
        public void ValidateBookLoan_ShouldReturnAllErrors()
        {
            //arrange
            TestBaseArrangements baseArrangements = new TestBaseArrangements();
            BookLoan             bookLoan         = new BookLoan(Guid.NewGuid(), null, null);

            //act
            bookLoan.Validate();

            //assert
            baseArrangements.DomainNotifications.GetAll().Should().HaveCount(2)
            .And.Contain(x => x == Messages.BookLoan_BookIsNull)
            .And.Contain(x => x == Messages.BookLoan_TakerIsNull);
        }
Beispiel #13
0
        public async void HandleAddAuthorCommand_WithValidAuthor_ShouldReturnNoErrors()
        {
            //Arrange
            TestBaseArrangements baseArrangements = new TestBaseArrangements();
            AddAuthorCommand     request          = new AddAuthorCommand("Stephen King");
            var sut = baseArrangements.Mocker.CreateInstance <AddAuthorCommandHandler>();

            //Act
            await sut.Handle(request, new CancellationToken());

            //Assert
            baseArrangements.DomainNotifications.GetAll().Should().BeEmpty();
            baseArrangements.Mocker.GetMock <IAuthorRepository>().Verify(x => x.AddAuthor(It.IsAny <Author>()), Times.Once);
        }
        public void HandleAddBookCommand_WithInvalidName_ShouldReturnInvalidName()
        {
            //Arrange
            TestBaseArrangements baseArrangements = new TestBaseArrangements();
            Book book = new Book(Guid.NewGuid(), "   ", 2020, 2, "432423431", new Author(Guid.NewGuid(), "Stephen King"));

            //Act
            bool isValid = book.Validate();

            //Assert
            isValid.Should().BeFalse();
            baseArrangements.DomainNotifications.GetAll().Should().NotBeNullOrEmpty()
            .And.Contain(x => x == Messages.Book_TitleShouldNotBeNullOrEmpty);
            baseArrangements.Mocker.GetMock <IBookRepository>().Verify(x => x.AddBook(It.IsAny <Book>()), Times.Never());
        }
        async Task RequestLoanCommand_WithInvalidBookGuid_ShouldReturnError(string bookGuid, string outputError)
        {
            //arrage
            TestBaseArrangements baseArrangements = new TestBaseArrangements();
            RequestLoanCommand   command          = new RequestLoanCommand("", bookGuid);
            var sut = baseArrangements.Mocker.CreateInstance <RequestLoanCommandHandler>();
            //act
            await sut.Handle(command, new CancellationToken());

            //assert
            baseArrangements.DomainNotifications.GetAll().Should().NotBeNullOrEmpty()
            .And.HaveCount(1)
            .And.Contain(x => x == outputError);
            baseArrangements.Mocker.GetMock <IPersonRepository>().Verify(x => x.GetByDocument(It.IsAny <string>(), It.IsAny <bool>()), Times.Never());
        }
        public async void HandleAddBookCommand_WithInvalidGuid_ShouldReturnInvalidAuthorGuid(string authorId, string outputError)
        {
            //Arrange
            TestBaseArrangements baseArrangements = new TestBaseArrangements();
            AddBookCommand       addBookCommand   = new AddBookCommand("Pet Sematary", 2013, 1, "9788581050393", authorId);
            var sut = baseArrangements.Mocker.CreateInstance <AddBookCommandHandler>();

            //Act
            AddBookCommandResponseViewModel result = await sut.Handle(addBookCommand, new CancellationToken());

            //Assert

            baseArrangements.DomainNotifications.GetAll().Should().NotBeNullOrEmpty()
            .And.Contain(x => x == outputError);
            baseArrangements.Mocker.GetMock <IAuthorRepository>().Verify(x => x.GetAuthorById(It.IsAny <Guid>()), Times.Never());
        }
        public void ValidateAuthor_WithInvalidName_ShouldReturnNameLenghtMaxAndNullNameError()
        {
            //Arrange
            TestBaseArrangements baseArrangements = new TestBaseArrangements();


            Author author = new Author(Guid.NewGuid(), "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et ");

            //Act
            author.Validate();

            //Assert
            baseArrangements.DomainNotifications.GetAll().Should().NotBeEmpty()
            .And.Contain(x => x == Domain.Resources.Messages.Author_AuthorNameNoLongerThantAHundredChars)
            .And.HaveCount(1);
        }
        public async void HandleReturnBookCommand_WithInvalidGuid_ShouldReturnInvalidLoanGuid(string loanId, string outputError)
        {
            //Arrange
            TestBaseArrangements baseArrangements  = new TestBaseArrangements();
            ReturnBookCommand    returnBookCommand = new ReturnBookCommand(loanId);
            var sut = baseArrangements.Mocker.CreateInstance <ReturnBookCommandHandler>();

            //Act
            ReturnBookCommandResponseViewModel result = await sut.Handle(returnBookCommand, new CancellationToken());

            //Assert

            baseArrangements.DomainNotifications.GetAll().Should().NotBeNullOrEmpty()
            .And.Contain(x => x == outputError);
            baseArrangements.Mocker.GetMock <IBookLoanRepository>().Verify(x => x.Update(It.IsAny <BookLoan>()), Times.Never());
        }
        public void ValidateAuthor_WithEmptyGuidAndInvalidName_ShouldReturnEmptyGuidAndNameLenghtBellow()
        {
            //Arrange
            TestBaseArrangements baseArrangements = new TestBaseArrangements();


            Author author = new Author(Guid.Empty, "fdfd");

            //Act
            author.Validate();

            //Assert
            baseArrangements.DomainNotifications.GetAll().Should().NotBeEmpty()
            .And.Contain(x => x == Domain.Resources.Messages.Author_AuthorGuidIsEmpty)
            .And.Contain(x => x == Domain.Resources.Messages.Author_AuthorNameShouldHaveAtLeastFiveChars)
            .And.HaveCount(2);
        }
        public async void HandleReturnBookCommand_WithInvalidLoan_ShouldReturnInvalidLoan()
        {
            //Arrange
            TestBaseArrangements baseArrangements  = new TestBaseArrangements();
            ReturnBookCommand    returnBookCommand = new ReturnBookCommand(Guid.NewGuid().ToString());
            var sut = baseArrangements.Mocker.CreateInstance <ReturnBookCommandHandler>();

            baseArrangements.Mocker.GetMock <IBookLoanRepository>()
            .Setup(p => p.GetByLoanId(It.IsAny <Guid>(), It.IsAny <bool>()))
            .Returns(() => Task.FromResult <BookLoan>(null));

            //Act
            ReturnBookCommandResponseViewModel result = await sut.Handle(returnBookCommand, new CancellationToken());

            //Assert
            baseArrangements.DomainNotifications.GetAll().Should().NotBeNullOrEmpty()
            .And.Contain(x => x == "Book loan not found");

            baseArrangements.Mocker.GetMock <IBookLoanRepository>().Verify(x => x.Update(It.IsAny <BookLoan>()), Times.Never());
        }
        public async void HandleAddPersonCommand_WithWrongDocumentCharCount_ShouldReturnDocumentCharCountError(string document, string name, string email, string phoneNumber)
        {
            //Arrange
            TestBaseArrangements baseArrangement = new TestBaseArrangements();


            var sut = baseArrangement.Mocker.CreateInstance <AddPersonCommandHandler>();


            var request = new AddPersonCommand(document, name, email, new List <string>()
            {
                phoneNumber
            });
            //Act
            await sut.Handle(request, new System.Threading.CancellationToken());

            //Assert
            baseArrangement.DomainNotifications.GetAll().Should().NotBeEmpty();
            baseArrangement.Mocker.GetMock <IPersonRepository>().Verify(x => x.AddPerson(It.IsAny <Person>()), Times.Never());
        }
        public async void HandleAddBookCommand_WitInvalidAuthor_ShouldReturnInvalidAuthor()
        {
            //Arrange
            TestBaseArrangements baseArrangements = new TestBaseArrangements();
            AddBookCommand       addBookCommand   = new AddBookCommand("Pet Sematary", 2013, 1, "9788581050393", Guid.NewGuid().ToString());
            var sut = baseArrangements.Mocker.CreateInstance <AddBookCommandHandler>();


            baseArrangements.Mocker.GetMock <IAuthorRepository>()
            .Setup(b => b.GetAuthorById(It.IsAny <Guid>()))
            .Returns(() => Task.FromResult <Author>(null));

            //Act
            AddBookCommandResponseViewModel result = await sut.Handle(addBookCommand, new CancellationToken());

            //Assert
            baseArrangements.Mocker.GetMock <IAuthorRepository>().Verify(x => x.GetAuthorById(It.IsAny <Guid>()), Times.Once());
            baseArrangements.Mocker.GetMock <IBookRepository>().Verify(x => x.AddBook(It.IsAny <Book>()), Times.Never());
            baseArrangements.DomainNotifications.GetAll().Should().NotBeEmpty()
            .And.Contain(x => x == Messages.Book_AuthorShouldNotBeNull);
        }
        public async void ValidatePerson_WithInvalidName_ShouldReturnInvalidNameError(string document, string name, string email, string phoneNumber)
        {
            //Arrange
            TestBaseArrangements baseArrangements = new TestBaseArrangements();

            Person person = null;

            person = new Person(Guid.NewGuid(), document, name, email);
            List <PersonPhone> phones = new List <PersonPhone>();

            phones.Add(new PersonPhone(Guid.NewGuid(), phoneNumber, person));
            person.WithPhoneNumbes(phones);

            //Act
            person.Validate();

            //Assert
            baseArrangements.DomainNotifications.GetAll().Should().NotBeEmpty()
            .And.Contain(x => x == Domain.Resources.Messages.Person_NameMiniumCharError)
            .And.HaveCount(1);
        }
        public async void HandleAddPersonCommand_WithUser_ShouldReturnSuccessWithNoErrors()
        {
            //Arrange
            TestBaseArrangements baseArrangement = new TestBaseArrangements();

            #region build person
            string document    = "75115775122";
            string name        = "Andre Santarosa";
            string phoneNumber = "19999990000";
            string email       = "*****@*****.**";

            Person person = null;
            person = new Person(Guid.NewGuid(), document, name, email);
            List <PersonPhone> phones = new List <PersonPhone>();
            phones.Add(new PersonPhone(Guid.NewGuid(), phoneNumber, person));
            #endregion

            baseArrangement.Mocker.GetMock <IPersonRepository>()
            .Setup(u => u.GetByDocument(It.IsAny <string>(), It.IsAny <bool>()))
            .Returns(() => Task.FromResult <Person>(null));

            var sut           = baseArrangement.Mocker.CreateInstance <AddPersonCommandHandler>();
            var personCommand = new AddPersonCommand(document, name, email, new List <string>()
            {
                phoneNumber
            });

            //Act
            var addResponse = await sut.Handle(personCommand, new System.Threading.CancellationToken());

            //Assert
            baseArrangement.DomainNotifications.GetAll().Should().BeEmpty();
            addResponse.Should().NotBeNull();
            addResponse.PersonId.Should().NotBeEmpty().Should().NotBeNull();
            addResponse.PhoneNumbers.Should().HaveCountGreaterThan(0);
            baseArrangement.Mocker.GetMock <IPersonRepository>().Verify(x => x.GetByDocument(It.IsAny <string>(), It.IsAny <bool>()), Times.Once());
            baseArrangement.Mocker.GetMock <IPersonRepository>().Verify(x => x.AddPerson(It.IsAny <Person>()), Times.Once());
        }
        public async void HandleReturnBookCommand_WithValidInfos_ShouldReturnNoErrors()
        {
            //Arrange
            TestBaseArrangements baseArrangements  = new TestBaseArrangements();
            ReturnBookCommand    returnBookCommand = new ReturnBookCommand(Guid.NewGuid().ToString());
            var sut = baseArrangements.Mocker.CreateInstance <ReturnBookCommandHandler>();

            BookLoan bookLoan = BookLoanFactory.ReturnLoan();

            bookLoan.Book.WithBookSituation(BookSituationEnum.Lent);


            baseArrangements.Mocker.GetMock <IBookLoanRepository>()
            .Setup(p => p.GetByLoanId(It.IsAny <Guid>(), It.IsAny <bool>()))
            .Returns(() => Task.FromResult <BookLoan>(bookLoan));

            //Act
            ReturnBookCommandResponseViewModel result = await sut.Handle(returnBookCommand, new CancellationToken());

            //Assert
            baseArrangements.DomainNotifications.GetAll().Should().BeEmpty();

            baseArrangements.Mocker.GetMock <IBookLoanRepository>().Verify(x => x.Update(It.IsAny <BookLoan>()), Times.Once());
        }