изменил всё под историчность сущности

This commit is contained in:
2025-04-22 18:33:27 +04:00
parent 9968b6d69e
commit eff45b4815
13 changed files with 181 additions and 165 deletions

View File

@@ -14,33 +14,49 @@ internal class ReportContract(ISoftwareStorageContract softwareStorageContract,
private readonly ISoftwareStorageContract _softwareStorageContract = softwareStorageContract;
private readonly IRequestStorageContract _requestStorageContract = requestStorageContract;
private readonly BaseWordBuilder _baseWordBuilder = baseWordBuilder;
private readonly ILogger _logger = logger;
public Task<List<ManufacturerSoftwareDataModel>> GetDataSoftwaresByManufacturerAsync(CancellationToken ct)
internal static readonly string[] tableHeader = ["Дата", "Сумма", "Товар", "Кол-во"];
internal static readonly string[] documentHeader = ["Название ПО", "Старая цена", "Дата"];
public Task<List<HistoryOfSoftwareDataModel>> GetDataSoftwaresByHistoryAsync(CancellationToken ct)
{
_logger.LogInformation("Get data SoftwaresByManufacturer");
return GetDataBySoftwaresAsync(ct);
}
private async Task<List<ManufacturerSoftwareDataModel>> GetDataBySoftwaresAsync(CancellationToken ct)
=> [.. (await _softwareStorageContract.GetListAsync(ct))
.GroupBy(x => x.ManufacturerName)
.Select(x => new ManufacturerSoftwareDataModel
{
ManufacturerName = x.Key, Softwares = [.. x.Select(y => y.SoftwareName)]
})];
private async Task<List<HistoryOfSoftwareDataModel>> GetDataBySoftwaresAsync(CancellationToken ct)
=> [.. (await _softwareStorageContract.GetListAsync(ct)).GroupBy(x => x.SoftwareName).Select(x => new HistoryOfSoftwareDataModel {
SoftwareName = x.Key, Histories = [.. x.Select(y => y.OldPrice.ToString())], Data = [.. x.Select(y => y.ChangeDate.ToString())] })];
public async Task<Stream> CreateDocumentSoftwaresByManufacturerAsync(CancellationToken ct)
public async Task<Stream> CreateDocumentSoftwaresByHistoryAsync(CancellationToken ct)
{
_logger.LogInformation("Create report SoftwaresByManufacturer");
var data = await GetDataBySoftwaresAsync(ct) ?? throw new
InvalidOperationException("No found data");
_logger.LogInformation("Create report HistoryBySoftware");
var data = await GetDataBySoftwaresAsync(ct) ?? throw new InvalidOperationException("No found data");
var tableData = new List<string[]>
{
documentHeader
};
foreach (var software in data)
{
tableData.Add(new string[] { software.SoftwareName, "", "" });
var pairs = software.Histories.Zip(software.Data,
(price, date) => new string[] { "", price, date });
tableData.AddRange(pairs);
}
return _baseWordBuilder
.AddHeader("Software по производителям")
.AddParagraph($"Сформировано на дату {DateTime.Now}")
.AddTable([10, 20], [.. data.SelectMany(x => (new List<string[]>() { new string[] { x.ManufacturerName, "" }}).Union(x.Softwares.Select(y => new string[] { "", y }))).ToList()])
.Build();
.AddHeader("Истории ПО")
.AddParagraph($"Сформировано на дату {DateTime.Now}")
.AddTable(
widths: new[] { 3000, 3000, 3000 },
data: tableData
)
.Build();
}
public Task<List<RequestDataModel>> GetDataRequestByPeriodAsync(DateTime dateStart, DateTime dateFinish, CancellationToken ct)
@@ -55,8 +71,7 @@ internal class ReportContract(ISoftwareStorageContract softwareStorageContract,
{
throw new IncorrectDatesException(dateStart, dateFinish);
}
return [.. (await _requestStorageContract.GetListAsync(dateStart,
dateFinish, ct)).OrderBy(x => x.RequestDate)];
return [.. (await _requestStorageContract.GetListAsync(dateStart, dateFinish, ct)).OrderBy(x => x.RequestDate)];
}

View File

@@ -6,7 +6,7 @@ namespace SmallSoftwareContracts.AdapterContracts.OperationResponses;
public class ReportOperationResponse : OperationResponse
{
public static ReportOperationResponse OK(List<ManufacturerSoftwareViewModel> data) => OK<ReportOperationResponse, List<ManufacturerSoftwareViewModel>>(data);
public static ReportOperationResponse OK(List<HistoryOfSoftwareViewModel> data) => OK<ReportOperationResponse, List<HistoryOfSoftwareViewModel>>(data);
public static ReportOperationResponse OK(List<RequestViewModel> data) => OK<ReportOperationResponse, List<RequestViewModel>>(data);
public static ReportOperationResponse OK(Stream data, string filename) => OK<ReportOperationResponse, Stream>(data, filename);
public static ReportOperationResponse BadRequest(string message) => BadRequest<ReportOperationResponse>(message);

View File

@@ -4,9 +4,9 @@ namespace SmallSoftwareContracts.BusinessLogicsContracts;
public interface IReportContract
{
Task<List<ManufacturerSoftwareDataModel>> GetDataSoftwaresByManufacturerAsync(CancellationToken ct);
Task<List<HistoryOfSoftwareDataModel>> GetDataSoftwaresByHistoryAsync(CancellationToken ct);
Task<List<RequestDataModel>> GetDataRequestByPeriodAsync(DateTime dateStart, DateTime dateFinish, CancellationToken ct);
Task<Stream> CreateDocumentSoftwaresByManufacturerAsync(CancellationToken ct);
Task<Stream> CreateDocumentSoftwaresByHistoryAsync(CancellationToken ct);
}

View File

@@ -0,0 +1,8 @@
namespace SmallSoftwareContracts.DataModels;
public class HistoryOfSoftwareDataModel
{
public required string SoftwareName { get; set; }
public required List<string> Histories { get; set; }
public required List<string> Data { get; set; }
}

View File

@@ -1,13 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SmallSoftwareContracts.DataModels;
public class ManufacturerSoftwareDataModel
{
public required string ManufacturerName { get; set; }
public required List<string> Softwares { get; set; }
}

View File

@@ -9,7 +9,7 @@ namespace SmallSoftwareContracts.StoragesContracts;
public interface ISoftwareStorageContract
{
Task<List<SoftwareDataModel>> GetListAsync(CancellationToken ct);
Task<List<SoftwareHistoryDataModel>> GetListAsync(CancellationToken ct);
List<SoftwareDataModel> GetList(bool onlyActive = true, string? manufacturerId = null);
List<SoftwareHistoryDataModel> GetHistoryBySoftwareId(string softwareId);
SoftwareDataModel? GetElementById(string id);

View File

@@ -0,0 +1,8 @@
namespace SmallSoftwareContracts.ViewModels;
public class HistoryOfSoftwareViewModel
{
public required string SoftwareName { get; set; }
public required List<string> Histories { get; set; }
public required List<string> Data { get; set; }
}

View File

@@ -1,13 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SmallSoftwareContracts.ViewModels;
public class ManufacturerSoftwareViewModel
{
public required string ManufacturerName { get; set; }
public required List<string> Softwares { get; set; }
}

View File

@@ -26,12 +26,12 @@ internal class SoftwareStorageContract : ISoftwareStorageContract
_mapper = new Mapper(config);
}
public async Task<List<SoftwareDataModel>> GetListAsync(CancellationToken ct)
public async Task<List<SoftwareHistoryDataModel>> GetListAsync(CancellationToken ct)
{
try
{
return [.. await _dbContext.Softwares.Include(x => x.Manufacturer).Select(x => _mapper.Map<SoftwareDataModel>(x)).ToListAsync(ct)];
return [.. await _dbContext.SoftwareHistories.Include(x => x.Software).Select(x => _mapper.Map<SoftwareHistoryDataModel>(x)).ToListAsync(ct)];
}
catch (Exception ex)
{

View File

@@ -1,4 +1,5 @@
using Microsoft.Extensions.Logging;
using DocumentFormat.OpenXml.Wordprocessing;
using Microsoft.Extensions.Logging;
using Moq;
using SmallSoftwareBusinessLogic.Implementations;
using SmallSoftwareBusinessLogic.OfficePackage;
@@ -34,51 +35,46 @@ internal class ReportContractTests
public async Task GetDataSoftwaresByManufacturer_ShouldSuccess_Test()
{
//Arrange
var manufacturer1 = new
ManufacturerDataModel(Guid.NewGuid().ToString(), "name1");
var manufacturer2 = new
ManufacturerDataModel(Guid.NewGuid().ToString(), "name2");
_softwareStorageContract.Setup(x =>
x.GetListAsync(It.IsAny<CancellationToken>())).Returns(Task.FromResult(new
List<SoftwareDataModel>()
{
new(Guid.NewGuid().ToString(), "name 1.1",
SoftwareType.AudioDriver, manufacturer1.Id, 10, false, manufacturer1),
new(Guid.NewGuid().ToString(), "name 2.1",
SoftwareType.AudioDriver, manufacturer2.Id, 10, false, manufacturer2),
new(Guid.NewGuid().ToString(), "name 1.2",
SoftwareType.AudioDriver, manufacturer1.Id, 10, false, manufacturer1),
new(Guid.NewGuid().ToString(), "name 1.3",
SoftwareType.AudioDriver, manufacturer1.Id, 10, false, manufacturer1),
new(Guid.NewGuid().ToString(), "name 2.2",
SoftwareType.AudioDriver, manufacturer2.Id, 10, false, manufacturer2)
}));
var manufacturer1 = new ManufacturerDataModel(Guid.NewGuid().ToString(), "name1");
var manufacturer2 = new ManufacturerDataModel(Guid.NewGuid().ToString(), "name2");
var softwareId1 = Guid.NewGuid().ToString();
var softwareId2 = Guid.NewGuid().ToString();
var software1 = new SoftwareDataModel(softwareId1, "name1", SoftwareType.AudioDriver, manufacturer1.Id, 10, false);
var software2 = new SoftwareDataModel(softwareId2, "name2", SoftwareType.AudioDriver, manufacturer2.Id, 10, false);
_softwareStorageContract.Setup(x => x.GetListAsync(It.IsAny<CancellationToken>()))
.Returns(Task.FromResult(new List<SoftwareHistoryDataModel>()
{
new(softwareId1, 22, DateTime.UtcNow, software1),
new(softwareId2, 21, DateTime.UtcNow, software2),
new(softwareId1, 33, DateTime.UtcNow, software1),
new(softwareId1, 32, DateTime.UtcNow, software1),
new(softwareId2, 65, DateTime.UtcNow, software2)
}));
//Act
var data = await
_reportContract.GetDataSoftwaresByManufacturerAsync(CancellationToken.None);
var data = await _reportContract.GetDataSoftwaresByHistoryAsync(CancellationToken.None);
//Assert
Assert.That(data, Is.Not.Null);
Assert.That(data, Is.Not.Null);
Assert.That(data, Has.Count.EqualTo(2));
Assert.Multiple(() =>
{
Assert.That(data.First(x => x.ManufacturerName ==
manufacturer1.ManufacturerName).Softwares, Has.Count.EqualTo(3));
Assert.That(data.First(x => x.ManufacturerName ==
manufacturer2.ManufacturerName).Softwares, Has.Count.EqualTo(2));
Assert.That(data.First(x => x.SoftwareName == software1.SoftwareName).Histories, Has.Count.EqualTo(3));
Assert.That(data.First(x => x.SoftwareName == software2.SoftwareName).Histories, Has.Count.EqualTo(2));
});
_softwareStorageContract.Verify(x =>
x.GetListAsync(It.IsAny<CancellationToken>()), Times.Once);
_softwareStorageContract.Verify(x => x.GetListAsync(It.IsAny<CancellationToken>()), Times.Once);
}
[Test]
public async Task GetDataSoftwaresByManufacturer_WhenNoRecords_ShouldSuccess_Test()
public async Task GetDataSoftwaresByHistory_WhenNoRecords_ShouldSuccess_Test()
{
//Arrange
_softwareStorageContract.Setup(x =>
x.GetListAsync(It.IsAny<CancellationToken>())).Returns(Task.FromResult(new
List<SoftwareDataModel>()));
x.GetListAsync(It.IsAny<CancellationToken>()))
.Returns(Task.FromResult(new List<SoftwareHistoryDataModel>()));
//Act
var data = await
_reportContract.GetDataSoftwaresByManufacturerAsync(CancellationToken.None);
var data = await _reportContract.GetDataSoftwaresByHistoryAsync(CancellationToken.None);
//Assert
Assert.That(data, Is.Not.Null);
Assert.That(data, Has.Count.EqualTo(0));
@@ -86,80 +82,80 @@ internal class ReportContractTests
x.GetListAsync(It.IsAny<CancellationToken>()), Times.Once);
}
[Test]
public void GetDataSoftwaresByManufacturer_WhenStorageThrowError_ShouldFail_Test()
public void GetDataSoftwaresByHistory_WhenStorageThrowError_ShouldFail_Test()
{
//Arrange
_softwareStorageContract.Setup(x => x.GetListAsync(It.IsAny<CancellationToken>())).Throws(new StorageException(new InvalidOperationException()));
//Act&Assert
Assert.That(async () => await _reportContract.GetDataSoftwaresByManufacturerAsync(CancellationToken.None), Throws.TypeOf<StorageException>());
Assert.That(async () => await _reportContract.GetDataSoftwaresByHistoryAsync(CancellationToken.None), Throws.TypeOf<StorageException>());
_softwareStorageContract.Verify(x => x.GetListAsync(It.IsAny<CancellationToken>()), Times.Once);
}
[Test]
public async Task CreateDocumentSoftwaresByManufacturer_ShouldeSuccess_Test()
public async Task CreateDocumentSoftwaresByHistory_ShouldeSuccess_Test()
{
//Arrange
var manufacturer1 = new
ManufacturerDataModel(Guid.NewGuid().ToString(), "name1");
var manufacturer2 = new
ManufacturerDataModel(Guid.NewGuid().ToString(), "name2");
_softwareStorageContract.Setup(x =>
x.GetListAsync(It.IsAny<CancellationToken>())).Returns(Task.FromResult(new List<SoftwareDataModel>()
{
new(Guid.NewGuid().ToString(), "name 1.1",
SoftwareType.AudioDriver, manufacturer1.Id, 10, false, manufacturer1),
new(Guid.NewGuid().ToString(), "name 2.1",
SoftwareType.AudioDriver, manufacturer2.Id, 10, false, manufacturer2),
new(Guid.NewGuid().ToString(), "name 1.2",
SoftwareType.AudioDriver, manufacturer1.Id, 10, false, manufacturer1),
new(Guid.NewGuid().ToString(), "name 1.3",
SoftwareType.AudioDriver, manufacturer1.Id, 10, false, manufacturer1),
new(Guid.NewGuid().ToString(), "name 2.2",
SoftwareType.AudioDriver, manufacturer2.Id, 10, false, manufacturer2)
}));
_baseWordBuilder.Setup(x =>
x.AddHeader(It.IsAny<string>())).Returns(_baseWordBuilder.Object);
_baseWordBuilder.Setup(x =>
x.AddParagraph(It.IsAny<string>())).Returns(_baseWordBuilder.Object);
var softwareId1 = Guid.NewGuid().ToString();
var softwareId2 = Guid.NewGuid().ToString();
var software1 = new SoftwareDataModel(softwareId1, "name1", SoftwareType.AudioDriver, manufacturer1.Id, 10, false);
var software2 = new SoftwareDataModel(softwareId2, "name2", SoftwareType.AudioDriver, manufacturer2.Id, 10, false);
var histories = new List<SoftwareHistoryDataModel>()
{
new(softwareId1, 22, DateTime.UtcNow, software1),
new(softwareId1, 33, DateTime.UtcNow, software1),
new(softwareId1, 32, DateTime.UtcNow, software1),
new(softwareId2, 21, DateTime.UtcNow, software2),
new(softwareId2, 65, DateTime.UtcNow, software2)
};
_softwareStorageContract.Setup(x => x.GetListAsync(It.IsAny<CancellationToken>()))
.Returns(Task.FromResult(histories));
_baseWordBuilder.Setup(x => x.AddHeader(It.IsAny<string>())).Returns(_baseWordBuilder.Object);
_baseWordBuilder.Setup(x => x.AddParagraph(It.IsAny<string>())).Returns(_baseWordBuilder.Object);
var countRows = 0;
string[] firstRow = [];
string[] secondRow = [];
_baseWordBuilder.Setup(x => x.AddTable(It.IsAny<int[]>(),
It.IsAny<List<string[]>>()))
.Callback((int[] widths, List<string[]> data) =>
{
countRows = data.Count;
firstRow = data[0];
secondRow = data[1];
})
.Returns(_baseWordBuilder.Object);
//Act
var data = await
_reportContract.CreateDocumentSoftwaresByManufacturerAsync(CancellationToken.None)
;
//Assert
_softwareStorageContract.Verify(x =>
x.GetListAsync(It.IsAny<CancellationToken>()), Times.Once);
_baseWordBuilder.Verify(x => x.AddHeader(It.IsAny<string>()),
Times.Once);
_baseWordBuilder.Verify(x => x.AddParagraph(It.IsAny<string>()),
Times.Once);
_baseWordBuilder.Verify(x => x.AddTable(It.IsAny<int[]>(),
It.IsAny<List<string[]>>()), Times.Once);
It.IsAny<List<string[]>>()))
.Callback((int[] widths, List<string[]> data) =>
{
countRows = data.Count;
if (data.Count > 0) firstRow = data[0];
if (data.Count > 1) secondRow = data[1];
})
.Returns(_baseWordBuilder.Object);
// Act
var data = await _reportContract.CreateDocumentSoftwaresByHistoryAsync(CancellationToken.None);
// Assert
_softwareStorageContract.Verify(x => x.GetListAsync(It.IsAny<CancellationToken>()), Times.Once);
_baseWordBuilder.Verify(x => x.AddHeader(It.IsAny<string>()), Times.Once);
_baseWordBuilder.Verify(x => x.AddParagraph(It.IsAny<string>()), Times.Once);
_baseWordBuilder.Verify(x => x.AddTable(It.IsAny<int[]>(), It.IsAny<List<string[]>>()), Times.Once);
_baseWordBuilder.Verify(x => x.Build(), Times.Once);
Assert.Multiple(() =>
{
Assert.That(countRows, Is.EqualTo(7));
Assert.That(firstRow, Has.Length.EqualTo(2));
Assert.That(secondRow, Has.Length.EqualTo(2));
});
Assert.Multiple(() =>
{
Assert.That(firstRow[0],
Is.EqualTo(manufacturer1.ManufacturerName));
Assert.That(firstRow[1], Is.Empty);
Assert.That(secondRow[0], Is.Empty);
Assert.That(secondRow[1], Is.EqualTo("name 1.1"));
Assert.That(countRows, Is.EqualTo(8));
Assert.That(firstRow, Has.Length.EqualTo(3));
Assert.That(secondRow, Has.Length.EqualTo(3));
Assert.That(firstRow[0], Is.EqualTo("Название ПО"));
Assert.That(firstRow[1], Is.EqualTo("Старая цена"));
Assert.That(secondRow[0], Is.EqualTo("name1"));
Assert.That(secondRow[1], Is.EqualTo(""));
});
}

View File

@@ -32,14 +32,18 @@ internal class SoftwareStorageContractTests : BaseStorageContractTest
[Test]
public async Task Try_GetListAsync_WhenHaveRecords_Test()
{
var software =
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, softwareName: "name 1");
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, softwareName: "name 2");
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, softwareName: "name 3");
var manufacturer1 = new ManufacturerDataModel(Guid.NewGuid().ToString(), "name1");
var software1 = new SoftwareDataModel(Guid.NewGuid().ToString(), "name1", SoftwareType.AudioDriver, manufacturer1.Id, 10, false);
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(_manufacturer.Id, software1.Id, softwareName: "name 1");
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software1.Id, 11);
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software1.Id, 12);
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software1.Id, 13);
var list = await _softwareStorageContract.GetListAsync(CancellationToken.None);
Assert.That(list, Is.Not.Null);
Assert.That(list, Has.Count.EqualTo(3));
AssertElement(list.First(x => x.Id == software.Id), software);
}
[Test]

View File

@@ -1,4 +1,6 @@
using SmallSoftwareContracts.ViewModels;
using SmallSoftwareContracts.DataModels;
using SmallSoftwareContracts.Enums;
using SmallSoftwareContracts.ViewModels;
using SmallSoftwareDatabase.Models;
using SmallSoftwareTests.Infrastructure;
using System.Net;
@@ -21,30 +23,39 @@ internal class ReportControllerTests : BaseWebApiControllerTest
[Test]
public async Task GetSoftwares_WhenHaveRecords_ShouldSuccess_Test()
{
//Arrange
var manufacturer1 =
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturerName: "name 1");
var manufacturer2 =
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturerName: "name 2");
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacturer1.Id, softwareName: "name 1.1");
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacturer1.Id, softwareName: "name 1.2");
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacturer1.Id, softwareName: "name 1.3");
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacturer2.Id, softwareName: "name 2.1");
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacturer2.Id, softwareName: "name 2.2");
//Act
// Arrange
var manufacturer1 = new ManufacturerDataModel(Guid.NewGuid().ToString(), "name1");
var manufacturer2 = new ManufacturerDataModel(Guid.NewGuid().ToString(), "name2");
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturer1.Id, manufacturerName: manufacturer1.ManufacturerName);
SmallSoftwareDbContext.InsertManufacturerToDatabaseAndReturn(manufacturer2.Id, manufacturerName: manufacturer2.ManufacturerName);
var software1 = new SoftwareDataModel(Guid.NewGuid().ToString(), "soft1", SoftwareType.AudioDriver, manufacturer1.Id, 10, false);
var software2 = new SoftwareDataModel(Guid.NewGuid().ToString(), "soft2", SoftwareType.AudioDriver, manufacturer2.Id, 10, false);
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacturer1.Id, software1.Id, softwareName: software1.SoftwareName);
SmallSoftwareDbContext.InsertSoftwareToDatabaseAndReturn(manufacturer2.Id, software2.Id, softwareName: software2.SoftwareName);
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software1.Id, 11);
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software1.Id, 12);
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software1.Id, 13);
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software2.Id, 11);
SmallSoftwareDbContext.InsertSoftwareHistoryToDatabaseAndReturn(software2.Id, 12);
// Act
var response = await HttpClient.GetAsync("/api/report/getsoftwares");
//Assert
// Assert
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));
var data = await
GetModelFromResponseAsync<List<ManufacturerSoftwareViewModel>>(response);
var data = await GetModelFromResponseAsync<List<HistoryOfSoftwareViewModel>>(response);
Assert.That(data, Is.Not.Null);
Assert.Multiple(() =>
{
Assert.That(data, Has.Count.EqualTo(2));
Assert.That(data.First(x => x.ManufacturerName ==
manufacturer1.ManufacturerName).Softwares, Has.Count.EqualTo(3));
Assert.That(data.First(x => x.ManufacturerName ==
manufacturer2.ManufacturerName).Softwares, Has.Count.EqualTo(2));
Assert.That(data.First(x => x.SoftwareName == software1.SoftwareName).Histories, Has.Count.EqualTo(3));
Assert.That(data.First(x => x.SoftwareName == software2.SoftwareName).Histories, Has.Count.EqualTo(2));
});
}

View File

@@ -20,7 +20,7 @@ public class ReportAdapter : IReportAdapter
_logger = logger;
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<ManufacturerSoftwareDataModel, ManufacturerSoftwareViewModel>();
cfg.CreateMap<HistoryOfSoftwareDataModel, HistoryOfSoftwareViewModel>();
cfg.CreateMap<RequestDataModel, RequestViewModel>();
cfg.CreateMap<InstallationRequestDataModel, InstallationRequestViewModel>();
});
@@ -32,7 +32,7 @@ public class ReportAdapter : IReportAdapter
try
{
return ReportOperationResponse.OK([.. (await _reportContract
.GetDataSoftwaresByManufacturerAsync(ct)).Select(x => _mapper.Map<ManufacturerSoftwareViewModel>(x))]);
.GetDataSoftwaresByHistoryAsync(ct)).Select(x => _mapper.Map<HistoryOfSoftwareViewModel>(x))]);
}
catch (InvalidOperationException ex)
{
@@ -56,7 +56,7 @@ public class ReportAdapter : IReportAdapter
{
try
{
var stream = await _reportContract.CreateDocumentSoftwaresByManufacturerAsync(ct);
var stream = await _reportContract.CreateDocumentSoftwaresByHistoryAsync(ct);
stream.Position = 0;
return ReportOperationResponse.OK(stream, "products.docx");
}