public async Task CreateAsync_ShouldReturnErrorWhenExceptionInQuery1()
        {
            var mockMessageFilesQuery = new Mock <IMessageFileQuery>();

            mockMessageFilesQuery
            .Setup(m => m.Create(It.IsAny <string>(), It.IsAny <string>()))
            .ThrowsAsync(new Exception("Mock exception 1"));

            var mockFileService = new Mock <IFileService <ChatFilesConfiguration> >();

            mockFileService
            .Setup(f => f.UploadAsync(It.IsAny <IFormFile>()))
            .ReturnsAsync("Some name");

            var mockFormFile = new Mock <IFormFile>();

            mockFormFile.SetupGet(f => f.ContentType).Returns(GetTestFileTypes().First().Type);
            mockFormFile.SetupGet(f => f.FileName).Returns("Some name");

            var mockContextFactory = SetupContextFactory(null, mockMessageFilesQuery.Object, null);

            _sut = new StudentChatService(mockContextFactory.Object, mockFileService.Object, _mapper);
            var request = new MessageCreateRequest {
                Sender = 1, Recipients = new int[] { 1, 2, 3 }, Text = "NewMessageText", AppliedFile = mockFormFile.Object
            };

            // ACT
            var actual = await _sut.CreateAsync(request);

            // ASSERT
            Assert.Equal("Mock exception 1", actual.Error.Message);
        }
        public async Task GetFileByMessageAsync_ShouldReturnDto()
        {
            // ARRANGE
            var expectedFileName = GetTestMessageFiles().First().Name;
            var expectedFileType = GetTestFileTypes().First().Type;
            var expected         = new FileDto {
                FileBytes = new byte[] { 1, 0, 1, 0 }, FileName = expectedFileName, FileType = expectedFileType
            };

            var mockFileService = new Mock <IFileService <ChatFilesConfiguration> >();

            mockFileService
            .Setup(f => f.GetFileBytes(It.IsAny <string>()))
            .Returns(expected.FileBytes);

            var mockContextFactory = SetupContextFactory(null, null, null);

            _sut = new StudentChatService(mockContextFactory.Object, mockFileService.Object, _mapper);

            // ACT
            var actual = await _sut.GetFileByMessageAsync(1);

            // ASSERT
            Assert.Equal(ComparableObject.Convert(expected), ComparableObject.Convert(actual.Entity));
        }
        public async Task CreateAsync_ShouldReturnErrorWhenExceptionInQuery2()
        {
            var newMessageFile = new MessageFile {
                Id = 10, Name = "NewFileName", FileTypeId = 1
            };

            var mockMessageFilesQuery = new Mock <IMessageFileQuery>();

            mockMessageFilesQuery
            .Setup(m => m.Create(It.IsAny <string>(), It.IsAny <string>()))
            .ReturnsAsync(newMessageFile);

            var mockMessagesQuery = new Mock <IMessagesQuery>();

            mockMessagesQuery.Setup(m => m.Create(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <string>(), It.IsAny <byte>(), It.IsAny <int?>()))
            .ThrowsAsync(new Exception("Mock exception"));

            var mockFileService = new Mock <IFileService <ChatFilesConfiguration> >();

            var mockContextFactory = SetupContextFactory(mockMessagesQuery.Object, mockMessageFilesQuery.Object, null);

            _sut = new StudentChatService(mockContextFactory.Object, mockFileService.Object, _mapper);
            var request = new MessageCreateRequest {
                Sender = 1, Recipients = new int[] { 1, 2, 3 }, Text = "NewMessageText"
            };

            // ACT
            var actual = await _sut.CreateAsync(request);

            // ASSERT
            Assert.Equal("Mock exception", actual.Error.Message);
        }
        public void Constructor_ShouldThrowExceptionWhenArgumentIsNull3()
        {
            var mockDbContextFactory = new Mock <IAppDbContextFactory>();
            var mockFileService      = new Mock <IFileService <ChatFilesConfiguration> >();

            Assert.Throws <ArgumentNullException>(() => _sut = new StudentChatService(mockDbContextFactory.Object, mockFileService.Object, null));
        }
        public async Task GetFileByMessageAsync_ShouldReturnErrorWhenMessageFileNotFound()
        {
            // ARRANGE
            var mockFileService    = new Mock <IFileService <ChatFilesConfiguration> >();
            var mockContextFactory = SetupContextFactory(null, null, null);

            _sut = new StudentChatService(mockContextFactory.Object, mockFileService.Object, _mapper);

            // ACT
            var actual = await _sut.GetFileByMessageAsync(6);

            // ASSERT
            Assert.Equal("Файл отсутствует в данном сообщении", actual.Error.Message);
        }
        public async Task GetFileByMessageAsync_ShouldReturnErrorWhenExceptionInQuery()
        {
            // ARRANGE
            var mockFileService = new Mock <IFileService <ChatFilesConfiguration> >();

            mockFileService.Setup(f => f.GetFileBytes(It.IsAny <string>()))
            .Throws(new Exception("Mock exception"));

            var mockContextFactory = SetupContextFactory(null, null, null);

            _sut = new StudentChatService(mockContextFactory.Object, mockFileService.Object, _mapper);

            // ACT
            var actual = await _sut.GetFileByMessageAsync(1);

            // ASSERT
            Assert.Equal("Mock exception", actual.Error.Message);
        }
        public async Task CreateAsync_ShouldReturnErrorWhenRecipientsNumberIsLarge()
        {
            var mockMessagesQuery = new Mock <IMessagesQuery>();

            var mockFileService = new Mock <IFileService <ChatFilesConfiguration> >();

            var mockContextFactory = SetupContextFactory(mockMessagesQuery.Object, null, null);

            _sut = new StudentChatService(mockContextFactory.Object, mockFileService.Object, _mapper);
            var request = new MessageCreateRequest {
                Sender = 1, Recipients = GetTestRecipientsArray(), Text = "NewMessageText"
            };

            // ACT
            var actual = await _sut.CreateAsync(request);

            // ASSERT
            Assert.Equal("Количество получателей должно быть максимум 1000", actual.Error.Message);
        }
        public async Task CreateAsync_ShouldReturnErrorWhenRecipientsIsNull()
        {
            var mockMessagesQuery = new Mock <IMessagesQuery>();

            var mockFileService = new Mock <IFileService <ChatFilesConfiguration> >();

            var mockContextFactory = SetupContextFactory(mockMessagesQuery.Object, null, null);

            _sut = new StudentChatService(mockContextFactory.Object, mockFileService.Object, _mapper);
            var request = new MessageCreateRequest {
                Sender = 1, Recipients = null, Text = "NewMessageText"
            };

            // ACT
            var actual = await _sut.CreateAsync(request);

            // ASSERT
            Assert.Equal("Получатели не указаны", actual.Error.Message);
        }
        public async Task GetMessageContactsByUserAsync_ShouldReturnErrorWhenExceptionInQuery()
        {
            var mockMessagesQuery = new Mock <IMessagesQuery>();

            mockMessagesQuery.Setup(m => m.GetContactsByUser(It.IsAny <int>(), It.IsAny <byte>()))
            .ThrowsAsync(new Exception("Mock exception"));

            var mockFileService = new Mock <IFileService <ChatFilesConfiguration> >();

            var mockContextFactory = SetupContextFactory(mockMessagesQuery.Object, null, null);

            _sut = new StudentChatService(mockContextFactory.Object, mockFileService.Object, _mapper);

            // ACT
            var actual = await _sut.GetMessageContactsByUserAsync(1);

            // ASSERT
            Assert.Equal("Mock exception", actual.Error.Message);
        }
        public async Task CreateAsync_ShouldReturnTrueWhenAplliedFileNotNull()
        {
            var newMessageFile = new MessageFile {
                Id = 10, Name = "NewFileName", FileTypeId = 1
            };

            var mockMessageFilesQuery = new Mock <IMessageFileQuery>();

            mockMessageFilesQuery
            .Setup(m => m.Create(It.IsAny <string>(), It.IsAny <string>()))
            .ReturnsAsync(newMessageFile);

            var mockMessagesQuery = new Mock <IMessagesQuery>();

            mockMessagesQuery
            .Setup(m => m.Create(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <string>(), It.IsAny <byte>(), It.IsAny <int?>()))
            .ReturnsAsync(0);

            var mockFormFile = new Mock <IFormFile>();

            mockFormFile.SetupGet(f => f.ContentType).Returns(GetTestFileTypes().First().Type);
            mockFormFile.SetupGet(f => f.FileName).Returns(newMessageFile.Name);

            var mockFileService = new Mock <IFileService <ChatFilesConfiguration> >();

            mockFileService
            .Setup(f => f.UploadAsync(It.IsAny <IFormFile>()))
            .ReturnsAsync(newMessageFile.Name);

            var mockContextFactory = SetupContextFactory(mockMessagesQuery.Object, mockMessageFilesQuery.Object, null);

            _sut = new StudentChatService(mockContextFactory.Object, mockFileService.Object, _mapper);
            var request = new MessageCreateRequest {
                Sender = 1, Recipients = new int[] { 2, 3 }, Text = "NewMessageText", AppliedFile = mockFormFile.Object
            };

            // ACT
            var actual = await _sut.CreateAsync(request);

            // ASSERT
            Assert.True(actual.Entity);
        }
        public async Task GetMessageContactsByUserAsync_ShouldReturnList()
        {
            var mockMessagesQuery = new Mock <IMessagesQuery>();

            mockMessagesQuery.Setup(m => m.GetContactsByUser(It.IsAny <int>(), It.IsAny <byte>()))
            .ReturnsAsync(GetTestContactsByUser());

            var mockFileService = new Mock <IFileService <ChatFilesConfiguration> >();

            var mockContextFactory = SetupContextFactory(mockMessagesQuery.Object, null, null);

            _sut = new StudentChatService(mockContextFactory.Object, mockFileService.Object, _mapper);

            // ACT
            var actual = await _sut.GetMessageContactsByUserAsync(1);

            // ASSERT
            Assert.Equal(GetTestContactsByUser().Count, actual.Entity.Count);
            Assert.Equal(ComparableObject.Convert(GetTestContactsByUser().First()), ComparableObject.Convert(actual.Entity.First()));
        }
        public async Task GetRecipientsAsync_ShouldReturnErrorWhenExceptionInQuery()
        {
            // ARRANGE
            var mockTeachersQuery = new Mock <ITeachersQuery>();

            mockTeachersQuery
            .Setup(t => t.GetAll())
            .ThrowsAsync(new Exception("Mock exception"));

            var mockFileService = new Mock <IFileService <ChatFilesConfiguration> >();

            var mockContextFactory = SetupContextFactory(null, null, mockTeachersQuery.Object);

            _sut = new StudentChatService(mockContextFactory.Object, mockFileService.Object, _mapper);

            // ACT
            var actual = await _sut.GetRecipientsAsync();

            // ASSERT
            Assert.Equal("Mock exception", actual.Error.Message);
        }
        public async Task GetRecipientsAsync_ShouldReturnList()
        {
            // ARRANGE
            var mockTeachersQuery = new Mock <ITeachersQuery>();

            mockTeachersQuery
            .Setup(t => t.GetAll())
            .ReturnsAsync(GetTestTeachers());

            var mockFileService = new Mock <IFileService <ChatFilesConfiguration> >();

            var mockContextFactory = SetupContextFactory(null, null, mockTeachersQuery.Object);

            _sut = new StudentChatService(mockContextFactory.Object, mockFileService.Object, _mapper);

            // ACT
            var actual = await _sut.GetRecipientsAsync();

            // ASSERT
            Assert.Equal(GetTestTeachers().Count, actual.Entity.Count);
            Assert.Equal(ComparableObject.Convert(GetTestTeachers().First()), ComparableObject.Convert(actual.Entity.First()));
        }
        public async Task CreateAsync_ShouldReturnTrueWhenAplliedFileIsNull()
        {
            var mockMessagesQuery = new Mock <IMessagesQuery>();

            mockMessagesQuery
            .Setup(m => m.Create(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <string>(), It.IsAny <byte>(), It.IsAny <int?>()))
            .ReturnsAsync(0);

            var mockFileService = new Mock <IFileService <ChatFilesConfiguration> >();

            var mockContextFactory = SetupContextFactory(mockMessagesQuery.Object, null, null);

            _sut = new StudentChatService(mockContextFactory.Object, mockFileService.Object, _mapper);
            var request = new MessageCreateRequest {
                Sender = 1, Recipients = new int[] { 2, 3 }, Text = "NewMessageText"
            };

            // ACT
            var actual = await _sut.CreateAsync(request);

            // ASSERT
            Assert.True(actual.Entity);
        }
        public async Task CreateAsync_ShouldReturnErrorWhenAplliedFileTypeIsNotAllowed()
        {
            var mockMessagesQuery = new Mock <IMessagesQuery>();

            var mockFormFile = new Mock <IFormFile>();

            mockFormFile.SetupGet(f => f.ContentType).Returns("application/bat");
            mockFormFile.SetupGet(f => f.FileName).Returns("NewFileName.bat");

            var mockFileService = new Mock <IFileService <ChatFilesConfiguration> >();

            var mockContextFactory = SetupContextFactory(mockMessagesQuery.Object, null, null);

            _sut = new StudentChatService(mockContextFactory.Object, mockFileService.Object, _mapper);
            var request = new MessageCreateRequest {
                Sender = 1, Recipients = new int[] { 2, 3 }, Text = "NewMessageText", AppliedFile = mockFormFile.Object
            };

            // ACT
            var actual = await _sut.CreateAsync(request);

            // ASSERT
            Assert.Equal("Файл \"" + request.AppliedFile.FileName + "\" не может быть загружен", actual.Error.Message);
        }
        public void Constructor_ShouldThrowExceptionWhenArgumentIsNull1()
        {
            var mockFileService = new Mock <IFileService <ChatFilesConfiguration> >();

            Assert.Throws <ArgumentNullException>(() => _sut = new StudentChatService(null, mockFileService.Object, _mapper));
        }
        public void Constructor_ShouldThrowExceptionWhenArgumentIsNull2()
        {
            var mockDbContextFactory = new Mock <IAppDbContextFactory>();

            Assert.Throws <ArgumentNullException>(() => _sut = new StudentChatService(mockDbContextFactory.Object, null, _mapper));
        }