public async Task NotChangedWhenNullValuesAdded()
        {
            var options = TestUtils.GetOptions(nameof(NotChangedWhenNullValuesAdded));

            using (var arrangeContext = new ManagerLogbookContext(options))
            {
                await arrangeContext.Notes.AddAsync(TestHelpersNote.TestNote1());

                await arrangeContext.SaveChangesAsync();
            }

            using (var assertContext = new ManagerLogbookContext(options))
            {
                var mockedValidator = new Mock <IBusinessValidator>();
                var sut             = new NoteService(assertContext, mockedValidator.Object);

                var noteDTO = await sut.EditNoteAsync(TestHelpersNote.TestNote1().Id,
                                                      TestHelpersNote.TestUser1().Id,
                                                      null, null, null);

                Assert.AreEqual(noteDTO.Description, TestHelpersNote.TestNote1().Description);
                Assert.AreEqual(noteDTO.Image, TestHelpersNote.TestNote1().Image);
                Assert.AreEqual(noteDTO.CategoryName, TestHelpersNote.TestNoteCategory2().Name);
            }
        }
        public async Task SuccessfullyEditNoteWithCategoryFromTypeTask()
        {
            var options = TestUtils.GetOptions(nameof(SuccessfullyEditNoteWithCategoryFromTypeTask));

            using (var arrangeContext = new ManagerLogbookContext(options))
            {
                await arrangeContext.Notes.AddAsync(TestHelpersNote.TestNote1());

                await arrangeContext.SaveChangesAsync();
            }

            using (var assertContext = new ManagerLogbookContext(options))
            {
                var mockedValidator = new Mock <IBusinessValidator>();
                var sut             = new NoteService(assertContext, mockedValidator.Object);

                var noteDTO = await sut.EditNoteAsync(TestHelpersNote.TestNote1().Id,
                                                      TestHelpersNote.TestUser1().Id,
                                                      "The room is clean", "710f8fd0-c90f-4d6a-b421-3aef173d9cf4", TestHelpersNote.TestNoteCategory2().Id);

                Assert.AreEqual(noteDTO.Description, "The room is clean");
                Assert.AreEqual(noteDTO.Image, "710f8fd0-c90f-4d6a-b421-3aef173d9cf4");
                Assert.AreEqual(noteDTO.CategoryName, TestHelpersNote.TestNoteCategory2().Name);
                Assert.IsTrue(noteDTO.IsActiveTask);
            }
        }
        public async Task SucceedCreateWhenNoteCategoryIsAdded()
        {
            var options = TestUtils.GetOptions(nameof(SucceedCreateWhenNoteCategoryIsAdded));

            using (var arrangeContext = new ManagerLogbookContext(options))
            {
                await arrangeContext.NoteCategories.AddAsync(TestHelpersNote.TestNoteCategory2());

                await arrangeContext.Users.AddAsync(TestHelpersNote.TestUser1());

                await arrangeContext.Logbooks.AddAsync(TestHelpersNote.TestLogbook1());

                await arrangeContext.UsersLogbooks.AddAsync(TestHelpersNote.TestUsersLogbooks1());

                await arrangeContext.SaveChangesAsync();
            }
            using (var assertContext = new ManagerLogbookContext(options))
            {
                var mockedValidator = new Mock <IBusinessValidator>();
                var sut             = new NoteService(assertContext, mockedValidator.Object);
                var description     = "Room 37 needs cleaning.";
                var image           = "abd22cec-9df6-43ea-b5aa-991689af55d1";
                var noteDTO         = await sut.CreateNoteAsync(TestHelpersNote.TestUser1().Id, TestHelpersNote.TestLogbook1().Id,
                                                                description, image, TestHelpersNote.TestNoteCategory2().Id);

                mockedValidator.Verify(x => x.IsDescriptionInRange(description), Times.Exactly(1));
                Assert.AreEqual(noteDTO.Id, 1);
                Assert.AreEqual(noteDTO.Description, description);
                Assert.AreEqual(noteDTO.CategoryName, TestHelpersNote.TestNoteCategory2().Name);
                Assert.IsTrue(noteDTO.IsActiveTask);
            }
        }
        public async Task Return_RightCollection()
        {
            var options = TestUtils.GetOptions(nameof(Return_RightCollection));

            using (var arrangeContext = new ManagerLogbookContext(options))
            {
                await arrangeContext.NoteCategories.AddAsync(TestHelpersNote.TestNoteCategory1());

                await arrangeContext.NoteCategories.AddAsync(TestHelpersNote.TestNoteCategory2());

                await arrangeContext.SaveChangesAsync();
            }

            using (var assertContext = new ManagerLogbookContext(options))
            {
                var mockedValidator = new Mock <IBusinessValidator>();
                var sut             = new NoteService(assertContext, mockedValidator.Object);

                var noteCategoriesDTO = await sut.GetNoteCategoriesAsync();

                Assert.AreEqual(noteCategoriesDTO.Count, 2);
            }
        }
        public async Task ThrowsExceptionWhenUserIsNotAuthorized()
        {
            var options = TestUtils.GetOptions(nameof(ThrowsExceptionWhenUserIsNotAuthorized));

            using (var arrangeContext = new ManagerLogbookContext(options))
            {
                await arrangeContext.Users.AddAsync(TestHelpersNote.TestUser1());

                await arrangeContext.Logbooks.AddAsync(TestHelpersNote.TestLogbook1());

                await arrangeContext.SaveChangesAsync();
            }
            using (var assertContext = new ManagerLogbookContext(options))
            {
                var mockedValidator = new Mock <IBusinessValidator>();
                var sut             = new NoteService(assertContext, mockedValidator.Object);
                var description     = "Room 37 needs cleaning.";
                var image           = "abd22cec-9df6-43ea-b5aa-991689af55d1";

                var ex = await Assert.ThrowsExceptionAsync <NotAuthorizedException>(() => sut.CreateNoteAsync(TestHelpersNote.TestUser1().Id, TestHelpersNote.TestLogbook1().Id,
                                                                                                              description, image, TestHelpersNote.TestNoteCategory2().Id));

                Assert.AreEqual(ex.Message, string.Format(ServicesConstants.UserNotManagerOfLogbook, TestHelpersNote.TestUser1().UserName, TestHelpersNote.TestLogbook1().Name));
            }
        }
        public async Task ThrowsExceptionWhenUserNotFound()
        {
            var options = TestUtils.GetOptions(nameof(ThrowsExceptionWhenUserNotFound));

            using (var assertContext = new ManagerLogbookContext(options))
            {
                var mockedValidator = new Mock <IBusinessValidator>();
                var sut             = new NoteService(assertContext, mockedValidator.Object);
                var description     = "Room 37 needs cleaning.";
                var image           = "abd22cec-9df6-43ea-b5aa-991689af55d1";

                var ex = await Assert.ThrowsExceptionAsync <NotFoundException>(() => sut.CreateNoteAsync(TestHelpersNote.TestUser1().Id, TestHelpersNote.TestLogbook1().Id,
                                                                                                         description, image, TestHelpersNote.TestNoteCategory2().Id));

                Assert.AreEqual(ex.Message, ServicesConstants.UserNotFound);
            }
        }