Skip to content

Commit

Permalink
Fix PR comments and added more uint test
Browse files Browse the repository at this point in the history
  • Loading branch information
rekhadevieviden committed Jan 30, 2025
1 parent 234643d commit 9db9f56
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 37 deletions.
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
using AutoFixture;
using EPR.Calculator.API.Builder.CommsCost;
using EPR.Calculator.API.Constants;
using EPR.Calculator.API.Data;
using EPR.Calculator.API.Data.DataModels;
using EPR.Calculator.API.Dtos;
using EPR.Calculator.API.Enums;
using EPR.Calculator.API.Models;
using Microsoft.AspNetCore.Routing;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.VisualStudio.TestTools.UnitTesting;
Expand Down Expand Up @@ -168,6 +170,60 @@ public void ConstructTest()
Assert.IsTrue(string.IsNullOrEmpty(totalMaterialCost.CommsCostByMaterialPricePerTonne));
}

[TestMethod]
public async Task GetProducerReportedMaterials_ShouldReturnValidMaterials()
{
// Arrange
SeedDatabase(dbContext);
var runId = 1;

// Act
var result = await builder.GetProducerReportedMaterials(dbContext, runId);

// Assert
Assert.IsNotNull(result);
Assert.AreEqual(3, result.Count);
Assert.IsTrue(result.Any(r => r.PackagingType == PackagingTypes.Household));
Assert.IsTrue(result.Any(r => r.PackagingType == PackagingTypes.PublicBin));
Assert.IsTrue(result.Any(r => r.PackagingType == PackagingTypes.HouseholdDrinksContainers && r.MaterialId == 3));
Assert.IsTrue(result.Any(r => r.MaterialId == 1));
Assert.IsTrue(result.Any(r => r.MaterialId == 2));
Assert.IsTrue(result.Any(r => r.MaterialId == 3));
Assert.IsTrue(result.Any(r => r.PackagingTonnage == 100));
Assert.IsTrue(result.Any(r => r.PackagingTonnage == 200));
Assert.IsTrue(result.Any(r => r.PackagingTonnage == 300));
Assert.IsTrue(result.Any(r => r.PackagingType == PackagingTypes.Household));
Assert.IsTrue(result.Any(r => r.PackagingType == PackagingTypes.PublicBin));
Assert.IsTrue(result.Any(r => r.PackagingType == PackagingTypes.HouseholdDrinksContainers && r.MaterialId == 3));
}

private void SeedDatabase(ApplicationDBContext context)
{
var run = new CalculatorRun { Id = 1 , Financial_Year ="2024-25" , Name ="CalculatorRunTest1" };
context.CalculatorRuns.Add(run);

var producerDetail = new ProducerDetail { Id = 1, CalculatorRunId = 1 };
context.ProducerDetail.Add(producerDetail);

var materials = new List<Material>
{
new Material { Id = 1, Name ="Plastic", Code = MaterialCodes.Plastic },
new Material { Id = 2, Name ="Steel",Code = MaterialCodes.Steel },
new Material { Id = 3, Name ="Glass",Code = MaterialCodes.Glass }
};
context.Material.AddRange(materials);

var producerReportedMaterials = new List<ProducerReportedMaterial>
{
new ProducerReportedMaterial { Id = 1, ProducerDetailId = 1, MaterialId = 1, PackagingType = PackagingTypes.Household, PackagingTonnage = 100 },
new ProducerReportedMaterial { Id = 2, ProducerDetailId = 1, MaterialId = 2, PackagingType = PackagingTypes.PublicBin, PackagingTonnage = 200 },
new ProducerReportedMaterial { Id = 3, ProducerDetailId = 1, MaterialId = 3, PackagingType = PackagingTypes.HouseholdDrinksContainers, PackagingTonnage = 300 }
};
context.ProducerReportedMaterial.AddRange(producerReportedMaterials);

context.SaveChanges();
}

private void CreateProducerDetail()
{
var producerNames = new string[]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
using EPR.Calculator.API.Models;
using Microsoft.EntityFrameworkCore;
using System.Globalization;
using static EPR.Calculator.API.Builder.LaDisposalCost.CalcRunLaDisposalCostBuilder;

namespace EPR.Calculator.API.Builder.CommsCost
{
Expand Down Expand Up @@ -42,43 +41,23 @@ public async Task<CalcResultCommsCost> Construct(CalcResultsRequestDto resultsRe
var materialNames = materials.Select(x => x.Name).ToList();

var allDefaultResults = await (from run in context.CalculatorRuns
join defaultMaster in context.DefaultParameterSettings on run.DefaultParameterSettingMasterId equals
defaultMaster.Id
join defaultDetail in context.DefaultParameterSettingDetail on defaultMaster.Id equals defaultDetail
.DefaultParameterSettingMasterId
join defaultTemplate in context.DefaultParameterTemplateMasterList on defaultDetail
.ParameterUniqueReferenceId equals defaultTemplate.ParameterUniqueReferenceId
where run.Id == runId
select new CalcCommsBuilderResult
{
ParameterValue = defaultDetail.ParameterValue,
ParameterType = defaultTemplate.ParameterType,
ParameterCategory = defaultTemplate.ParameterCategory
}).ToListAsync();
join defaultMaster in context.DefaultParameterSettings on run.DefaultParameterSettingMasterId equals
defaultMaster.Id
join defaultDetail in context.DefaultParameterSettingDetail on defaultMaster.Id equals defaultDetail
.DefaultParameterSettingMasterId
join defaultTemplate in context.DefaultParameterTemplateMasterList on defaultDetail
.ParameterUniqueReferenceId equals defaultTemplate.ParameterUniqueReferenceId
where run.Id == runId
select new CalcCommsBuilderResult
{
ParameterValue = defaultDetail.ParameterValue,
ParameterType = defaultTemplate.ParameterType,
ParameterCategory = defaultTemplate.ParameterCategory
}).ToListAsync();
var materialDefaults = allDefaultResults.Where(x =>
x.ParameterType == CommunicationCostByMaterial && materialNames.Contains(x.ParameterCategory));

var producerReportedMaterials = await (from run in context.CalculatorRuns
join pd in context.ProducerDetail on run.Id equals pd.CalculatorRunId
join mat in context.ProducerReportedMaterial on pd.Id equals mat.ProducerDetailId
join material in context.Material on mat.MaterialId equals material.Id
where run.Id == runId &&
mat.PackagingType != null &&
(
mat.PackagingType == PackagingTypes.Household ||
mat.PackagingType == PackagingTypes.PublicBin ||
(
mat.PackagingType == PackagingTypes.HouseholdDrinksContainers &&
material.Code == MaterialCodes.Glass
)
)
select new
{
mat.Id,
mat.MaterialId,
mat.PackagingTonnage,
mat.PackagingType,
}).Distinct().ToListAsync();
var producerReportedMaterials = await GetProducerReportedMaterials(context, runId);

var list = new List<CalcResultCommsCostCommsCostByMaterial>();

Expand Down Expand Up @@ -175,6 +154,27 @@ join material in context.Material on mat.MaterialId equals material.Id
return result;
}

public async Task<List<ProducerReportedMaterial>> GetProducerReportedMaterials(ApplicationDBContext context, int runId)
{
return await (from run in context.CalculatorRuns
join pd in context.ProducerDetail on run.Id equals pd.CalculatorRunId
join mat in context.ProducerReportedMaterial on pd.Id equals mat.ProducerDetailId
join material in context.Material on mat.MaterialId equals material.Id
where run.Id == runId &&
mat.PackagingType != null &&
(mat.PackagingType == PackagingTypes.Household ||
mat.PackagingType == PackagingTypes.PublicBin ||
(mat.PackagingType == PackagingTypes.HouseholdDrinksContainers &&
material.Code == MaterialCodes.Glass))
select new ProducerReportedMaterial
{
Id = mat.Id,
MaterialId = mat.MaterialId,
PackagingTonnage = mat.PackagingTonnage,
PackagingType = mat.PackagingType
}).Distinct().ToListAsync();
}

private static CalcResultCommsCostCommsCostByMaterial GetTotalRow(IEnumerable<CalcResultCommsCostCommsCostByMaterial> list,
CultureInfo culture)
{
Expand Down
2 changes: 1 addition & 1 deletion src/EPR.Calculator.API/Constants/MaterialCodes.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace EPR.Calculator.API.Constants
{
public class MaterialCodes
public static class MaterialCodes
{
public const string Aluminium = "AL";
public const string FibreComposite = "FC";
Expand Down
2 changes: 1 addition & 1 deletion src/EPR.Calculator.API/Constants/PackagingTypes.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace EPR.Calculator.API.Constants
{
public class PackagingTypes
public static class PackagingTypes
{
public const string Household = "HH";
public const string ConsumerWaste = "CW";
Expand Down

0 comments on commit 9db9f56

Please sign in to comment.