forked from ddrilling/AsbCloudServer
Степанов Дмитрий Александрович
4b2d4f1bba
1. Адаптировал EmailService под сервис транспорта отправки уведомлений по Email 2. Заменил использование EmailService на NotificationService 3. Поправил тесты 4. Создал запрос для отправки уведомлений
213 lines
9.3 KiB
C#
213 lines
9.3 KiB
C#
using AsbCloudApp.Data;
|
|
using AsbCloudApp.Services;
|
|
using AsbCloudInfrastructure.Services;
|
|
using Moq;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Xunit;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using AsbCloudApp.Repositories;
|
|
using System.Collections.Generic;
|
|
using AsbCloudApp.Data.User;
|
|
using AsbCloudApp.Services.Notifications;
|
|
|
|
namespace AsbCloudWebApi.Tests.ServicesTests
|
|
{
|
|
public class WellFinalDocumentsServiceTest
|
|
{
|
|
private const int validInsertedFileId = 555;
|
|
private const int idWellFinalDocCategory = 10_000;
|
|
private const string editPublisherPermission = "WellFinalDocuments.editPublisher";
|
|
private readonly WellFinalDocumentsService service;
|
|
private readonly Mock<IUserRepository> userRepositoryMock;
|
|
private readonly Mock<IWellService> wellServiceMock;
|
|
private readonly Mock<IFileCategoryService> fileCategoryService;
|
|
private readonly NotificationService notificationService;
|
|
private readonly Mock<ICrudRepository<NotificationCategoryDto>> notificationCategoryRepositoryMock;
|
|
private readonly Mock<INotificationTransportService> notificationTransportServiceMock;
|
|
|
|
private static readonly UserExtendedDto[] users = new[]{
|
|
new UserExtendedDto {
|
|
Id = 1,
|
|
IdCompany = 1,
|
|
Surname = "Tester 1",
|
|
Name = "Peppa",
|
|
Email = "test@test.com"
|
|
},
|
|
new UserExtendedDto {
|
|
Id = 3,
|
|
IdCompany = 1,
|
|
Surname = "Tester 3",
|
|
Name = "Jourge",
|
|
Email = "test1@test1.com"
|
|
}
|
|
};
|
|
|
|
private static readonly WellFinalDocumentDto[] wellFinalDocumentDto = new[]
|
|
{
|
|
new WellFinalDocumentDto {
|
|
IdCategory= idWellFinalDocCategory,
|
|
PermissionToUpload = true,
|
|
Publishers = new List<UserDto> {
|
|
new UserDto {
|
|
Id = 1
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
private static readonly WellCaseDto wellCaseDto = new WellCaseDto {
|
|
IdWell = 1,
|
|
PermissionToSetPubliher = true,
|
|
WellFinalDocuments = wellFinalDocumentDto
|
|
};
|
|
|
|
private static readonly WellFinalDocumentDBDto wellFinalDocumentDBDto = new WellFinalDocumentDBDto {
|
|
IdCategory = idWellFinalDocCategory,
|
|
IdUser = 1,
|
|
IdWell = 1
|
|
};
|
|
|
|
private readonly Mock<IFileRepository> fileRepositoryMock;
|
|
private readonly Mock<IFileStorageRepository> fileStorageRepositoryMock;
|
|
private readonly FileService fileService;
|
|
private readonly Mock<IWellFinalDocumentsRepository> wellFinalDocumentsRepository;
|
|
|
|
public WellFinalDocumentsServiceTest()
|
|
{
|
|
wellFinalDocumentsRepository = new Mock<IWellFinalDocumentsRepository>();
|
|
wellFinalDocumentsRepository.Setup(r => r.GetByWellIdAsync(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<CancellationToken>()))
|
|
.ReturnsAsync(wellCaseDto);
|
|
|
|
wellFinalDocumentsRepository.Setup(r => r.GetCategoryAsync(It.IsAny<int>(), It.IsAny<int>(), It.IsAny<int>(), It.IsAny<CancellationToken>()))
|
|
.ReturnsAsync(wellFinalDocumentDBDto);
|
|
|
|
fileRepositoryMock = new Mock<IFileRepository>();
|
|
fileRepositoryMock.Setup(r => r.InsertAsync(It.IsAny<FileInfoDto>(), It.IsAny<CancellationToken>()))
|
|
.ReturnsAsync(validInsertedFileId);
|
|
fileRepositoryMock.Setup(r => r.GetOrDefaultAsync(validInsertedFileId, It.IsAny<CancellationToken>()))
|
|
.ReturnsAsync(new FileInfoDto {Id = validInsertedFileId});
|
|
|
|
fileStorageRepositoryMock = new Mock<IFileStorageRepository>();
|
|
fileService = new FileService(fileRepositoryMock.Object, fileStorageRepositoryMock.Object);
|
|
|
|
userRepositoryMock = new Mock<IUserRepository>();
|
|
userRepositoryMock.Setup(x => x.GetAllAsync(It.IsAny<CancellationToken>()))
|
|
.ReturnsAsync(users);
|
|
userRepositoryMock.Setup(x => x.GetOrDefault(It.IsAny<int>()))
|
|
.Returns<int>(id => GetOrDefaultUserById(id));
|
|
|
|
userRepositoryMock.Setup(x => x.GetOrDefaultAsync(It.IsAny<int>(), It.IsAny<CancellationToken>()))
|
|
.ReturnsAsync((int id, CancellationToken token) => GetOrDefaultUserById(id));
|
|
|
|
UserExtendedDto? GetOrDefaultUserById(int id)
|
|
=> users
|
|
.Where(u => u.Id == id)
|
|
.Select(u => new UserExtendedDto {
|
|
Id = u.Id,
|
|
IdCompany = u.IdCompany,
|
|
Email = u.Email,
|
|
Name = u.Name,
|
|
Patronymic = u.Patronymic,
|
|
Surname = u.Surname,
|
|
IdState = u.IdState,
|
|
Login = u.Login,
|
|
Position = u.Position
|
|
})
|
|
.FirstOrDefault();
|
|
|
|
userRepositoryMock.Setup(x => x.HasPermission(users[0].Id, editPublisherPermission))
|
|
.Returns(true);
|
|
|
|
wellServiceMock = new Mock<IWellService>();
|
|
wellServiceMock.Setup(s => s.GetOrDefaultAsync(It.IsAny<int>(), It.IsAny<CancellationToken>()))
|
|
.ReturnsAsync((int id, CancellationToken _) => new WellDto {
|
|
Id = id,
|
|
Caption = "well 1",
|
|
Cluster = "cluster 1",
|
|
Deposit = "deposit 1" });
|
|
var configuration = new Microsoft.Extensions.Configuration.ConfigurationBuilder().Build();
|
|
|
|
notificationCategoryRepositoryMock = new Mock<ICrudRepository<NotificationCategoryDto>>();
|
|
|
|
notificationCategoryRepositoryMock.Setup(r => r.GetOrDefaultAsync(It.IsAny<int>(),
|
|
It.IsAny<CancellationToken>()))
|
|
.ReturnsAsync(new NotificationCategoryDto
|
|
{
|
|
Id = 20000,
|
|
Name = "Системные уведомления"
|
|
});
|
|
|
|
notificationTransportServiceMock = new Mock<INotificationTransportService>();
|
|
|
|
notificationTransportServiceMock.SetupGet(x => x.IdTransportType)
|
|
.Returns(1);
|
|
|
|
notificationService = new NotificationService(notificationCategoryRepositoryMock.Object,
|
|
new Mock<INotificationRepository>().Object,
|
|
new [] { notificationTransportServiceMock.Object });
|
|
|
|
fileCategoryService = new Mock<IFileCategoryService>();
|
|
fileCategoryService.Setup(s => s.GetOrDefaultAsync(idWellFinalDocCategory, It.IsAny<CancellationToken>()))
|
|
.ReturnsAsync((int id, CancellationToken _) => new FileCategoryDto
|
|
{
|
|
Id = idWellFinalDocCategory,
|
|
Name = "Проект на бурение транспортного и горизонтального участков скважины"
|
|
});
|
|
|
|
service = new WellFinalDocumentsService(
|
|
fileService: fileService,
|
|
userRepository: userRepositoryMock.Object,
|
|
wellService: wellServiceMock.Object,
|
|
configuration: configuration,
|
|
notificationService: notificationService,
|
|
fileCategoryService: fileCategoryService.Object,
|
|
wellFinalDocumentsRepository: wellFinalDocumentsRepository.Object);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task GetHistoryFileByIdCategory_return_empty_hitory()
|
|
{
|
|
var data = await service.GetFilesHistoryByIdCategoryAsync(1, 13 * idWellFinalDocCategory, CancellationToken.None);
|
|
Assert.NotNull(data);
|
|
Assert.Empty(data.Files);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task SaveCategoryFile_throws_wrong_user()
|
|
{
|
|
var content = new byte[] {0xAA, 0xBB};
|
|
var stream = new MemoryStream(content);
|
|
var data = await service.SaveCategoryFileAsync(1, idWellFinalDocCategory, users[0].Id, stream, "test.txt", CancellationToken.None);
|
|
Assert.Equal(555, data);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task SaveCategoryFile_returns_file_id()
|
|
{
|
|
var content = new byte[] { 0xAA, 0xBB };
|
|
var stream = new MemoryStream(content);
|
|
var token = CancellationToken.None;
|
|
var idFile = await service.SaveCategoryFileAsync(1, idWellFinalDocCategory, users[0].Id, stream, "test.txt", CancellationToken.None);
|
|
Assert.Equal(validInsertedFileId, idFile);
|
|
fileRepositoryMock.Verify(m => m.InsertAsync(It.IsAny<FileInfoDto>(), token));
|
|
fileStorageRepositoryMock.Verify(m=>m.SaveFileAsync(It.IsAny<string>(), stream, token));
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ReNotifyPublishersAsync_deny_to_non_editors()
|
|
{
|
|
var data = await service.ReNotifyPublishersAsync(1, users[1].Id, idWellFinalDocCategory, CancellationToken.None);
|
|
Assert.Equal(1, data);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ReNotifyPublishersAsync_deny_to_non_wrong_category()
|
|
{
|
|
var data = await service.ReNotifyPublishersAsync(1, users[0].Id, idWellFinalDocCategory, CancellationToken.None);
|
|
Assert.Equal(1, data);
|
|
}
|
|
}
|
|
}
|