This commit is contained in:
847
Tests/UnitTests/ServiceTests/DeliveryServiceTest.cs
Normal file
847
Tests/UnitTests/ServiceTests/DeliveryServiceTest.cs
Normal file
@ -0,0 +1,847 @@
|
||||
using Elwig.Helpers;
|
||||
using Elwig.Models.Entities;
|
||||
using Elwig.Services;
|
||||
using Elwig.ViewModels;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Tests.UnitTests.ServiceTests {
|
||||
[TestFixture]
|
||||
public class DeliveryServiceTest {
|
||||
|
||||
private static async Task InitViewModel(DeliveryAdminViewModel vm) {
|
||||
using var ctx = new AppDbContext();
|
||||
vm.MemberSource = await ctx.Members.ToListAsync();
|
||||
vm.BranchSource = await ctx.Branches.ToListAsync();
|
||||
vm.WineVarSource = await ctx.WineVarieties.ToListAsync();
|
||||
List<object> attrs = (await ctx.WineAttributes.ToListAsync()).Cast<object>().ToList();
|
||||
attrs.Insert(0, new NullItem());
|
||||
vm.WineAttrSource = attrs;
|
||||
List<object> cults = (await ctx.WineCultivations.ToListAsync()).Cast<object>().ToList();
|
||||
cults.Insert(0, new NullItem());
|
||||
vm.WineCultSource = cults;
|
||||
vm.WineQualityLevelSource = await ctx.WineQualityLevels.ToListAsync();
|
||||
vm.WineOriginSource = await ctx.WineOrigins.ToListAsync();
|
||||
vm.WineKgSource = await ctx.Katastralgemeinden.ToListAsync();
|
||||
vm.ModifiersSource = await ctx.Modifiers.Where(m => m.Year == 2022).ToListAsync();
|
||||
}
|
||||
|
||||
private static async Task<Delivery?> GetDelivery(string lsnr) {
|
||||
using var ctx = new AppDbContext();
|
||||
return await ctx.Deliveries
|
||||
.Where(d => d.LsNr == lsnr)
|
||||
.Include(d => d.Parts)
|
||||
.ThenInclude(p => p.PartModifiers)
|
||||
.ThenInclude(m => m.Modifier)
|
||||
.AsSplitQuery()
|
||||
.FirstOrDefaultAsync();
|
||||
}
|
||||
|
||||
private static DeliveryPart[] GetParts(Delivery d) {
|
||||
return [.. d.Parts.OrderBy(p => p.DPNr)];
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestCreate_01_Minimal() {
|
||||
var vm = new DeliveryAdminViewModel();
|
||||
await InitViewModel(vm);
|
||||
|
||||
vm.Date = "01.10.2022";
|
||||
vm.Branch = vm.BranchSource.First();
|
||||
vm.MgNr = 101;
|
||||
vm.Member = vm.MemberSource.First(m => m.MgNr == vm.MgNr);
|
||||
vm.SortId = "GV";
|
||||
vm.WineVar = vm.WineVarSource.First(v => v.SortId == vm.SortId);
|
||||
vm.GradationKmw = 15.0;
|
||||
vm.GradationOe = 73;
|
||||
vm.Weight = 1234;
|
||||
vm.IsManualWeighing = true;
|
||||
vm.IsNetWeight = false;
|
||||
vm.WineQualityLevel = vm.WineQualityLevelSource.First(l => l.QualId == "QUW");
|
||||
vm.WineOrigin = vm.WineOriginSource.First(o => o.HkId == "WLNO");
|
||||
|
||||
var p1 = await vm.UpdateDeliveryPart(2022, null, null, false, false, true);
|
||||
Assert.That(p1.Delivery.LsNr, Is.EqualTo("20221001X001"));
|
||||
|
||||
var d = await GetDelivery("20221001X001");
|
||||
|
||||
Assert.That(d, Is.Not.Null);
|
||||
Assert.That(d.Parts, Has.Count.EqualTo(1));
|
||||
var p = d.Parts.First();
|
||||
Assert.That(p, Is.Not.Null);
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(d.LsNr, Is.EqualTo("20221001X001"));
|
||||
Assert.That(d.Date, Is.EqualTo(new DateOnly(2022, 10, 1)));
|
||||
Assert.That(d.ZwstId, Is.EqualTo("X"));
|
||||
Assert.That(d.MgNr, Is.EqualTo(101));
|
||||
Assert.That(p.SortId, Is.EqualTo("GV"));
|
||||
Assert.That(p.AttrId, Is.Null);
|
||||
Assert.That(p.CultId, Is.Null);
|
||||
Assert.That(p.Kmw, Is.EqualTo(15.0));
|
||||
Assert.That(p.Oe, Is.EqualTo(73));
|
||||
Assert.That(p.QualId, Is.EqualTo("QUW"));
|
||||
Assert.That(p.Weight, Is.EqualTo(1234));
|
||||
Assert.That(p.IsNetWeight, Is.False);
|
||||
Assert.That(p.IsManualWeighing, Is.True);
|
||||
Assert.That(p.HkId, Is.EqualTo("WLNO"));
|
||||
});
|
||||
|
||||
vm = new DeliveryAdminViewModel();
|
||||
await InitViewModel(vm);
|
||||
Assert.DoesNotThrow(() => {
|
||||
vm.FillInputs(d);
|
||||
vm.FillInputs(p);
|
||||
});
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(vm.LsNr, Is.EqualTo("20221001X001"));
|
||||
Assert.That(vm.Date, Is.EqualTo("01.10.2022"));
|
||||
Assert.That(vm.Branch?.ZwstId, Is.EqualTo("X"));
|
||||
Assert.That(vm.MgNr, Is.EqualTo(101));
|
||||
Assert.That(vm.SortId, Is.EqualTo("GV"));
|
||||
Assert.That(vm.WineAttr?.AttrId, Is.Null);
|
||||
Assert.That(vm.WineCult?.CultId, Is.Null);
|
||||
Assert.That(vm.GradationKmw, Is.EqualTo(15.0));
|
||||
Assert.That(vm.WineQualityLevel?.QualId, Is.EqualTo("QUW"));
|
||||
Assert.That(vm.Weight, Is.EqualTo(1234));
|
||||
Assert.That(vm.IsNetWeight, Is.False);
|
||||
Assert.That(vm.IsManualWeighing, Is.True);
|
||||
Assert.That(vm.WineOrigin?.HkId, Is.EqualTo("WLNO"));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestCreate_02_Advanced() {
|
||||
var vm = new DeliveryAdminViewModel();
|
||||
await InitViewModel(vm);
|
||||
|
||||
vm.Date = "02.10.2022";
|
||||
vm.Branch = vm.BranchSource.First();
|
||||
vm.MgNr = 102;
|
||||
vm.Member = vm.MemberSource.First(m => m.MgNr == vm.MgNr);
|
||||
vm.SortId = "ZW";
|
||||
vm.WineVar = vm.WineVarSource.First(v => v.SortId == vm.SortId);
|
||||
vm.WineAttr = vm.WineAttrSource.Skip(1).First() as WineAttr;
|
||||
vm.WineCult = vm.WineCultSource.Skip(1).First() as WineCult;
|
||||
vm.GradationKmw = 15.9;
|
||||
vm.GradationOe = 78;
|
||||
vm.Weight = 3456;
|
||||
vm.IsManualWeighing = false;
|
||||
vm.IsNetWeight = true;
|
||||
vm.WeighingData = "{}";
|
||||
vm.WineQualityLevel = vm.WineQualityLevelSource.First(l => l.QualId == "QUW");
|
||||
vm.WineOrigin = vm.WineOriginSource.First(o => o.HkId == "WLNO");
|
||||
vm.Modifiers.Add(vm.ModifiersSource.First());
|
||||
|
||||
var p1 = await vm.UpdateDeliveryPart(2022, null, null, false, false, true);
|
||||
Assert.That(p1.Delivery.LsNr, Is.EqualTo("20221002X001"));
|
||||
|
||||
var d = await GetDelivery("20221002X001");
|
||||
|
||||
Assert.That(d, Is.Not.Null);
|
||||
Assert.That(d.Parts, Has.Count.EqualTo(1));
|
||||
var p = d.Parts.First();
|
||||
Assert.That(p, Is.Not.Null);
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(d.LsNr, Is.EqualTo("20221002X001"));
|
||||
Assert.That(d.Date, Is.EqualTo(new DateOnly(2022, 10, 2)));
|
||||
Assert.That(d.ZwstId, Is.EqualTo("X"));
|
||||
Assert.That(d.MgNr, Is.EqualTo(102));
|
||||
Assert.That(p.SortId, Is.EqualTo("ZW"));
|
||||
Assert.That(p.AttrId, Is.Not.Null);
|
||||
Assert.That(p.CultId, Is.Not.Null);
|
||||
Assert.That(p.Kmw, Is.EqualTo(15.9));
|
||||
Assert.That(p.Oe, Is.EqualTo(78));
|
||||
Assert.That(p.QualId, Is.EqualTo("QUW"));
|
||||
Assert.That(p.Weight, Is.EqualTo(3456));
|
||||
Assert.That(p.IsNetWeight, Is.True);
|
||||
Assert.That(p.IsManualWeighing, Is.False);
|
||||
Assert.That(p.WeighingData, Is.EqualTo("{}"));
|
||||
Assert.That(p.HkId, Is.EqualTo("WLNO"));
|
||||
Assert.That(p.Modifiers.Count(), Is.EqualTo(1));
|
||||
});
|
||||
|
||||
vm = new DeliveryAdminViewModel();
|
||||
await InitViewModel(vm);
|
||||
Assert.DoesNotThrow(() => {
|
||||
vm.FillInputs(d);
|
||||
vm.FillInputs(p);
|
||||
});
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(vm.LsNr, Is.EqualTo("20221002X001"));
|
||||
Assert.That(vm.Date, Is.EqualTo("02.10.2022"));
|
||||
Assert.That(vm.Branch?.ZwstId, Is.EqualTo("X"));
|
||||
Assert.That(vm.MgNr, Is.EqualTo(102));
|
||||
Assert.That(vm.SortId, Is.EqualTo("ZW"));
|
||||
Assert.That(vm.WineAttr?.AttrId, Is.Not.Null);
|
||||
Assert.That(vm.WineCult?.CultId, Is.Not.Null);
|
||||
Assert.That(vm.GradationKmw, Is.EqualTo(15.9));
|
||||
Assert.That(vm.WineQualityLevel?.QualId, Is.EqualTo("QUW"));
|
||||
Assert.That(vm.Weight, Is.EqualTo(3456));
|
||||
Assert.That(vm.IsNetWeight, Is.True);
|
||||
Assert.That(vm.IsManualWeighing, Is.False);
|
||||
Assert.That(vm.WeighingData, Is.EqualTo("{}"));
|
||||
Assert.That(vm.WineOrigin?.HkId, Is.EqualTo("WLNO"));
|
||||
Assert.That(vm.Modifiers, Has.Count.EqualTo(1));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestCreate_03_TwoParts() {
|
||||
var vm = new DeliveryAdminViewModel();
|
||||
await InitViewModel(vm);
|
||||
|
||||
vm.Date = "03.10.2022";
|
||||
vm.Branch = vm.BranchSource.First();
|
||||
vm.MgNr = 101;
|
||||
vm.Member = vm.MemberSource.First(m => m.MgNr == vm.MgNr);
|
||||
vm.SortId = "GV";
|
||||
vm.WineVar = vm.WineVarSource.First(v => v.SortId == vm.SortId);
|
||||
vm.GradationKmw = 15.0;
|
||||
vm.GradationOe = 73;
|
||||
vm.WineQualityLevel = vm.WineQualityLevelSource.First(l => l.QualId == "QUW");
|
||||
vm.Weight = 1234;
|
||||
vm.IsManualWeighing = true;
|
||||
vm.IsNetWeight = true;
|
||||
vm.WineOrigin = vm.WineOriginSource.First(o => o.HkId == "WLNO");
|
||||
var p1 = await vm.UpdateDeliveryPart(2022, null, null, false, false, true);
|
||||
|
||||
Assert.That(p1.Delivery.LsNr, Is.EqualTo("20221003X001"));
|
||||
vm.FillInputs(p1.Delivery);
|
||||
|
||||
vm.SortId = "WR";
|
||||
vm.WineVar = vm.WineVarSource.First(v => v.SortId == vm.SortId);
|
||||
vm.GradationKmw = 18.0;
|
||||
vm.GradationOe = 89;
|
||||
vm.WineQualityLevel = vm.WineQualityLevelSource.First(l => l.QualId == "KAB");
|
||||
vm.Weight = 2345;
|
||||
var p2 = await vm.UpdateDeliveryPart(p1.Year, p1.DId, null, false, false, true);
|
||||
|
||||
Assert.That(p2.Delivery.LsNr, Is.EqualTo("20221003X001"));
|
||||
|
||||
var d = await GetDelivery("20221003X001");
|
||||
|
||||
Assert.That(d, Is.Not.Null);
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(d.Parts, Has.Count.EqualTo(2));
|
||||
Assert.That(d.MgNr, Is.EqualTo(101));
|
||||
});
|
||||
var p = d.Parts.First();
|
||||
Assert.That(p, Is.Not.Null);
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(p.DPNr, Is.EqualTo(1));
|
||||
Assert.That(p.SortId, Is.EqualTo("GV"));
|
||||
});
|
||||
p = d.Parts.Skip(1).First();
|
||||
Assert.That(p, Is.Not.Null);
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(p.DPNr, Is.EqualTo(2));
|
||||
Assert.That(p.SortId, Is.EqualTo("WR"));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestCreate_04_ChangeMember() {
|
||||
var vm = new DeliveryAdminViewModel();
|
||||
await InitViewModel(vm);
|
||||
|
||||
vm.Date = "04.10.2022";
|
||||
vm.Branch = vm.BranchSource.First();
|
||||
vm.MgNr = 101;
|
||||
vm.Member = vm.MemberSource.First(m => m.MgNr == vm.MgNr);
|
||||
vm.SortId = "GV";
|
||||
vm.WineVar = vm.WineVarSource.First(v => v.SortId == vm.SortId);
|
||||
vm.GradationKmw = 15.0;
|
||||
vm.GradationOe = 73;
|
||||
vm.WineQualityLevel = vm.WineQualityLevelSource.First(l => l.QualId == "QUW");
|
||||
vm.Weight = 1234;
|
||||
vm.IsManualWeighing = true;
|
||||
vm.IsNetWeight = true;
|
||||
vm.WineOrigin = vm.WineOriginSource.First(o => o.HkId == "WLNO");
|
||||
var p1 = await vm.UpdateDeliveryPart(2022, null, null, false, false, true);
|
||||
|
||||
Assert.That(p1.Delivery.LsNr, Is.EqualTo("20221004X001"));
|
||||
vm.FillInputs(p1.Delivery);
|
||||
|
||||
vm.MgNr = 102;
|
||||
vm.Member = vm.MemberSource.First(m => m.MgNr == vm.MgNr);
|
||||
vm.SortId = "GV";
|
||||
vm.WineVar = vm.WineVarSource.First(v => v.SortId == vm.SortId);
|
||||
vm.GradationKmw = 15.0;
|
||||
vm.GradationOe = 73;
|
||||
vm.WineQualityLevel = vm.WineQualityLevelSource.First(l => l.QualId == "QUW");
|
||||
vm.Weight = 1234;
|
||||
vm.IsManualWeighing = true;
|
||||
vm.IsNetWeight = true;
|
||||
vm.WineOrigin = vm.WineOriginSource.First(o => o.HkId == "WLNO");
|
||||
|
||||
var p2 = await vm.UpdateDeliveryPart(p1.Year, p1.DId, null, false, false, true);
|
||||
|
||||
Assert.That(p2.Delivery.LsNr, Is.EqualTo("20221004X001"));
|
||||
|
||||
var d = await GetDelivery("20221004X001");
|
||||
|
||||
Assert.That(d, Is.Not.Null);
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(d.Parts, Has.Count.EqualTo(2));
|
||||
Assert.That(d.MgNr, Is.EqualTo(102));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestCreate_05_LNrChanged() {
|
||||
var vm = new DeliveryAdminViewModel();
|
||||
await InitViewModel(vm);
|
||||
|
||||
vm.Date = "29.09.2022";
|
||||
vm.Branch = vm.BranchSource.First();
|
||||
vm.LsNr = "20220929X001"; // "old" LNr, simulated change in DB
|
||||
vm.MgNr = 101;
|
||||
vm.Member = vm.MemberSource.First(m => m.MgNr == vm.MgNr);
|
||||
vm.SortId = "GV";
|
||||
vm.WineVar = vm.WineVarSource.First(v => v.SortId == vm.SortId);
|
||||
vm.GradationKmw = 15.0;
|
||||
vm.GradationOe = 73;
|
||||
vm.WineQualityLevel = vm.WineQualityLevelSource.First(l => l.QualId == "QUW");
|
||||
vm.Weight = 1234;
|
||||
vm.IsManualWeighing = true;
|
||||
vm.IsNetWeight = true;
|
||||
vm.WineOrigin = vm.WineOriginSource.First(o => o.HkId == "WLNO");
|
||||
var p1 = await vm.UpdateDeliveryPart(2022, null, null, false, false, true);
|
||||
|
||||
Assert.That(p1.Delivery.LsNr, Is.EqualTo("20220929X002"));
|
||||
|
||||
var d = GetDelivery("20220929X002");
|
||||
Assert.That(d, Is.Not.Null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestUpdate_01_Simple() {
|
||||
var vm = new DeliveryAdminViewModel();
|
||||
await InitViewModel(vm);
|
||||
|
||||
var d = await GetDelivery("20231010X001");
|
||||
Assert.That(d, Is.Not.Null);
|
||||
var p = d.Parts.First();
|
||||
Assert.That(p, Is.Not.Null);
|
||||
Assert.DoesNotThrow(() => {
|
||||
vm.FillInputs(d);
|
||||
vm.FillInputs(p);
|
||||
});
|
||||
|
||||
vm.SortId = "WR";
|
||||
vm.WineVar = vm.WineVarSource.First(v => v.SortId == vm.SortId);
|
||||
vm.GradationKmw = 15.9;
|
||||
vm.GradationOe = 79;
|
||||
|
||||
Assert.DoesNotThrowAsync(async () => await DeliveryService.UpdateDeliveryPart(vm, p.Year, p.DId, p.DPNr, false, false, true));
|
||||
|
||||
d = await GetDelivery("20231010X001");
|
||||
Assert.That(d, Is.Not.Null);
|
||||
p = d.Parts.First();
|
||||
Assert.That(p, Is.Not.Null);
|
||||
|
||||
vm = new DeliveryAdminViewModel();
|
||||
await InitViewModel(vm);
|
||||
Assert.DoesNotThrow(() => {
|
||||
vm.FillInputs(d);
|
||||
vm.FillInputs(p);
|
||||
});
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(vm.SortId, Is.EqualTo("WR"));
|
||||
Assert.That(vm.GradationKmw, Is.EqualTo(15.9));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestUpdate_02_Member() {
|
||||
var vm = new DeliveryAdminViewModel();
|
||||
await InitViewModel(vm);
|
||||
|
||||
var d = await GetDelivery("20231010X002");
|
||||
Assert.That(d, Is.Not.Null);
|
||||
var p = d.Parts.First();
|
||||
Assert.That(p, Is.Not.Null);
|
||||
Assert.DoesNotThrow(() => {
|
||||
vm.FillInputs(d);
|
||||
vm.FillInputs(p);
|
||||
});
|
||||
Assert.That(d.MgNr, Is.EqualTo(101));
|
||||
|
||||
vm.SortId = "GV";
|
||||
vm.WineVar = vm.WineVarSource.First(v => v.SortId == vm.SortId);
|
||||
vm.MgNr = 102;
|
||||
vm.Member = vm.MemberSource.First(m => m.MgNr == vm.MgNr);
|
||||
|
||||
Assert.DoesNotThrowAsync(async () => await DeliveryService.UpdateDeliveryPart(vm, p.Year, p.DId, p.DPNr, false, false, true));
|
||||
|
||||
d = await GetDelivery("20231010X002");
|
||||
Assert.That(d, Is.Not.Null);
|
||||
Assert.That(d.MgNr, Is.EqualTo(102));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestUpdate_03_DateAndTime() {
|
||||
var vm = new DeliveryAdminViewModel();
|
||||
await InitViewModel(vm);
|
||||
|
||||
var d = await GetDelivery("20231015X001");
|
||||
Assert.That(d, Is.Null);
|
||||
d = await GetDelivery("20231010X003");
|
||||
Assert.That(d, Is.Not.Null);
|
||||
var p = d.Parts.First();
|
||||
Assert.That(p, Is.Not.Null);
|
||||
Assert.DoesNotThrow(() => {
|
||||
vm.FillInputs(d);
|
||||
vm.FillInputs(p);
|
||||
});
|
||||
Assert.That(d.MgNr, Is.EqualTo(101));
|
||||
|
||||
vm.SortId = "GV";
|
||||
vm.WineVar = vm.WineVarSource.First(v => v.SortId == vm.SortId);
|
||||
vm.Date = "15.10.2023";
|
||||
vm.Time = "12:00";
|
||||
|
||||
Assert.DoesNotThrowAsync(async () => await DeliveryService.UpdateDeliveryPart(vm, p.Year, p.DId, p.DPNr, true, true, false));
|
||||
|
||||
d = await GetDelivery("20231010X003");
|
||||
Assert.That(d, Is.Null);
|
||||
d = await GetDelivery("20231015X001");
|
||||
Assert.That(d, Is.Not.Null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestSplit_01_Depreciate_One() {
|
||||
var d = await GetDelivery("20231001X001");
|
||||
Assert.That(d, Is.Not.Null);
|
||||
Assert.Multiple(() => {
|
||||
var ps = GetParts(d);
|
||||
Assert.That(ps, Has.Length.EqualTo(3));
|
||||
Assert.That(ps[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps[0].QualId, Is.Not.EqualTo("WEI"));
|
||||
Assert.That(ps[1].QualId, Is.Not.EqualTo("WEI"));
|
||||
Assert.That(ps[2].QualId, Is.Not.EqualTo("WEI"));
|
||||
});
|
||||
|
||||
Assert.DoesNotThrowAsync(async () => await DeliveryService.DepreciateDelivery(d.Year, d.DId, [1000, 0, 0]));
|
||||
d = await GetDelivery("20231001X001");
|
||||
Assert.That(d, Is.Not.Null);
|
||||
Assert.Multiple(() => {
|
||||
var ps = GetParts(d);
|
||||
Assert.That(ps, Has.Length.EqualTo(3));
|
||||
Assert.That(ps[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps[0].QualId, Is.EqualTo("WEI"));
|
||||
Assert.That(ps[1].QualId, Is.Not.EqualTo("WEI"));
|
||||
Assert.That(ps[2].QualId, Is.Not.EqualTo("WEI"));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestSplit_02_Depreciate_Partial() {
|
||||
var d = await GetDelivery("20231001X002");
|
||||
Assert.That(d, Is.Not.Null);
|
||||
Assert.Multiple(() => {
|
||||
var ps = GetParts(d);
|
||||
Assert.That(ps, Has.Length.EqualTo(3));
|
||||
Assert.That(ps[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps[0].QualId, Is.Not.EqualTo("WEI"));
|
||||
Assert.That(ps[1].QualId, Is.Not.EqualTo("WEI"));
|
||||
Assert.That(ps[2].QualId, Is.Not.EqualTo("WEI"));
|
||||
});
|
||||
|
||||
Assert.DoesNotThrowAsync(async () => await DeliveryService.DepreciateDelivery(d.Year, d.DId, [600, 0, 0]));
|
||||
d = await GetDelivery("20231001X002");
|
||||
Assert.That(d, Is.Not.Null);
|
||||
Assert.Multiple(() => {
|
||||
var ps = GetParts(d);
|
||||
Assert.That(ps, Has.Length.EqualTo(4));
|
||||
Assert.That(ps[0].Weight, Is.EqualTo(400));
|
||||
Assert.That(ps[0].QualId, Is.Not.EqualTo("WEI"));
|
||||
Assert.That(ps[1].QualId, Is.Not.EqualTo("WEI"));
|
||||
Assert.That(ps[2].QualId, Is.Not.EqualTo("WEI"));
|
||||
Assert.That(ps[3].Weight, Is.EqualTo(600));
|
||||
Assert.That(ps[3].QualId, Is.EqualTo("WEI"));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestSplit_03_Depreciate_Mixed() {
|
||||
var d = await GetDelivery("20231001X003");
|
||||
Assert.That(d, Is.Not.Null);
|
||||
Assert.Multiple(() => {
|
||||
var ps = GetParts(d);
|
||||
Assert.That(ps, Has.Length.EqualTo(3));
|
||||
Assert.That(ps[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps[0].QualId, Is.Not.EqualTo("WEI"));
|
||||
Assert.That(ps[1].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps[1].QualId, Is.Not.EqualTo("WEI"));
|
||||
Assert.That(ps[2].QualId, Is.Not.EqualTo("WEI"));
|
||||
});
|
||||
|
||||
Assert.DoesNotThrowAsync(async () => await DeliveryService.DepreciateDelivery(d.Year, d.DId, [1000, 700, -5]));
|
||||
d = await GetDelivery("20231001X003");
|
||||
Assert.That(d, Is.Not.Null);
|
||||
Assert.Multiple(() => {
|
||||
var ps = GetParts(d);
|
||||
Assert.That(ps, Has.Length.EqualTo(4));
|
||||
Assert.That(ps[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps[0].QualId, Is.EqualTo("WEI"));
|
||||
Assert.That(ps[1].Weight, Is.EqualTo(300));
|
||||
Assert.That(ps[1].QualId, Is.Not.EqualTo("WEI"));
|
||||
Assert.That(ps[2].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps[2].QualId, Is.Not.EqualTo("WEI"));
|
||||
Assert.That(ps[3].Weight, Is.EqualTo(700));
|
||||
Assert.That(ps[3].QualId, Is.EqualTo("WEI"));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestSplit_04_Depreciate_Complete() {
|
||||
var d = await GetDelivery("20231001X004");
|
||||
Assert.That(d, Is.Not.Null);
|
||||
Assert.Multiple(() => {
|
||||
var ps = GetParts(d);
|
||||
Assert.That(ps, Has.Length.EqualTo(3));
|
||||
Assert.That(ps[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps[0].QualId, Is.Not.EqualTo("WEI"));
|
||||
Assert.That(ps[1].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps[1].QualId, Is.Not.EqualTo("WEI"));
|
||||
Assert.That(ps[2].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps[2].QualId, Is.Not.EqualTo("WEI"));
|
||||
});
|
||||
|
||||
Assert.DoesNotThrowAsync(async () => await DeliveryService.DepreciateDelivery(d.Year, d.DId, [1000, 1100, int.MaxValue]));
|
||||
d = await GetDelivery("20231001X004");
|
||||
Assert.That(d, Is.Not.Null);
|
||||
Assert.Multiple(() => {
|
||||
var ps = GetParts(d);
|
||||
Assert.That(ps, Has.Length.EqualTo(3));
|
||||
Assert.That(ps[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps[0].QualId, Is.EqualTo("WEI"));
|
||||
Assert.That(ps[1].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps[1].QualId, Is.EqualTo("WEI"));
|
||||
Assert.That(ps[2].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps[2].QualId, Is.EqualTo("WEI"));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestSplit_05_OtherMember_One() {
|
||||
var d1 = await GetDelivery("20231002X001");
|
||||
var d2 = await GetDelivery("20231002X002");
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(d1, Is.Not.Null);
|
||||
Assert.That(d2, Is.Null);
|
||||
});
|
||||
Assert.Multiple(() => {
|
||||
var ps1 = GetParts(d1);
|
||||
Assert.That(d1.MgNr, Is.EqualTo(101));
|
||||
Assert.That(ps1, Has.Length.EqualTo(3));
|
||||
Assert.That(ps1[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps1[1].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps1[2].Weight, Is.EqualTo(1000));
|
||||
});
|
||||
|
||||
Assert.DoesNotThrowAsync(async () => await DeliveryService.SplitDeliveryToMember(d1.Year, d1.DId, [1000, 0, 0], 102));
|
||||
d1 = await GetDelivery("20231002X001");
|
||||
d2 = await GetDelivery("20231002X002");
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(d1, Is.Not.Null);
|
||||
Assert.That(d2, Is.Not.Null);
|
||||
});
|
||||
Assert.Multiple(() => {
|
||||
var ps1 = GetParts(d1);
|
||||
var ps2 = GetParts(d2);
|
||||
Assert.That(d1.MgNr, Is.EqualTo(101));
|
||||
Assert.That(d2.MgNr, Is.EqualTo(102));
|
||||
Assert.That(ps1, Has.Length.EqualTo(2));
|
||||
Assert.That(ps1[0].DPNr, Is.EqualTo(2));
|
||||
Assert.That(ps1[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps1[1].DPNr, Is.EqualTo(3));
|
||||
Assert.That(ps1[1].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps2, Has.Length.EqualTo(1));
|
||||
Assert.That(ps2[0].DPNr, Is.EqualTo(1));
|
||||
Assert.That(ps2[0].Weight, Is.EqualTo(1000));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestSplit_06_OtherMember_Partial() {
|
||||
var d1 = await GetDelivery("20231003X001");
|
||||
var d2 = await GetDelivery("20231003X002");
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(d1, Is.Not.Null);
|
||||
Assert.That(d2, Is.Null);
|
||||
});
|
||||
Assert.Multiple(() => {
|
||||
var ps1 = GetParts(d1);
|
||||
Assert.That(d1.MgNr, Is.EqualTo(101));
|
||||
Assert.That(ps1, Has.Length.EqualTo(3));
|
||||
Assert.That(ps1[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps1[1].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps1[2].Weight, Is.EqualTo(1000));
|
||||
});
|
||||
|
||||
Assert.DoesNotThrowAsync(async () => await DeliveryService.SplitDeliveryToMember(d1.Year, d1.DId, [400, -1, -2], 102));
|
||||
d1 = await GetDelivery("20231003X001");
|
||||
d2 = await GetDelivery("20231003X002");
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(d1, Is.Not.Null);
|
||||
Assert.That(d2, Is.Not.Null);
|
||||
});
|
||||
Assert.Multiple(() => {
|
||||
var ps1 = GetParts(d1);
|
||||
var ps2 = GetParts(d2);
|
||||
Assert.That(d1.MgNr, Is.EqualTo(101));
|
||||
Assert.That(d2.MgNr, Is.EqualTo(102));
|
||||
Assert.That(ps1, Has.Length.EqualTo(3));
|
||||
Assert.That(ps1[0].Weight, Is.EqualTo(600));
|
||||
Assert.That(ps1[1].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps1[2].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps2, Has.Length.EqualTo(1));
|
||||
Assert.That(ps2[0].Weight, Is.EqualTo(400));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestSplit_07_OtherMember_Mixed() {
|
||||
var d1 = await GetDelivery("20231004X001");
|
||||
var d2 = await GetDelivery("20231004X002");
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(d1, Is.Not.Null);
|
||||
Assert.That(d2, Is.Null);
|
||||
});
|
||||
Assert.Multiple(() => {
|
||||
var ps1 = GetParts(d1);
|
||||
Assert.That(d1.MgNr, Is.EqualTo(101));
|
||||
Assert.That(ps1, Has.Length.EqualTo(3));
|
||||
Assert.That(ps1[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps1[1].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps1[2].Weight, Is.EqualTo(1000));
|
||||
});
|
||||
|
||||
Assert.DoesNotThrowAsync(async () => await DeliveryService.SplitDeliveryToMember(d1.Year, d1.DId, [200, 1000, int.MinValue], 102));
|
||||
d1 = await GetDelivery("20231004X001");
|
||||
d2 = await GetDelivery("20231004X002");
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(d1, Is.Not.Null);
|
||||
Assert.That(d2, Is.Not.Null);
|
||||
});
|
||||
Assert.Multiple(() => {
|
||||
var ps1 = GetParts(d1);
|
||||
var ps2 = GetParts(d2);
|
||||
Assert.That(d1.MgNr, Is.EqualTo(101));
|
||||
Assert.That(d2.MgNr, Is.EqualTo(102));
|
||||
Assert.That(ps1, Has.Length.EqualTo(2));
|
||||
Assert.That(ps1[0].DPNr, Is.EqualTo(1));
|
||||
Assert.That(ps1[0].Weight, Is.EqualTo(800));
|
||||
Assert.That(ps1[1].DPNr, Is.EqualTo(3));
|
||||
Assert.That(ps1[1].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps2, Has.Length.EqualTo(2));
|
||||
Assert.That(ps2[0].DPNr, Is.EqualTo(1));
|
||||
Assert.That(ps2[0].Weight, Is.EqualTo(200));
|
||||
Assert.That(ps2[1].DPNr, Is.EqualTo(2));
|
||||
Assert.That(ps2[1].Weight, Is.EqualTo(1000));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestSplit_08_OtherMember_Complete() {
|
||||
var d1 = await GetDelivery("20231005X001");
|
||||
var d2 = await GetDelivery("20231005X002");
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(d1, Is.Not.Null);
|
||||
Assert.That(d2, Is.Null);
|
||||
});
|
||||
Assert.Multiple(() => {
|
||||
var ps1 = GetParts(d1);
|
||||
Assert.That(d1.MgNr, Is.EqualTo(101));
|
||||
Assert.That(ps1, Has.Length.EqualTo(3));
|
||||
Assert.That(ps1[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps1[1].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps1[2].Weight, Is.EqualTo(1000));
|
||||
});
|
||||
|
||||
Assert.DoesNotThrowAsync(async () => await DeliveryService.SplitDeliveryToMember(d1.Year, d1.DId, [1000, int.MaxValue, 1100], 102));
|
||||
d1 = await GetDelivery("20231005X001");
|
||||
d2 = await GetDelivery("20231005X002");
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(d1, Is.Null);
|
||||
Assert.That(d2, Is.Not.Null);
|
||||
});
|
||||
Assert.Multiple(() => {
|
||||
var ps2 = GetParts(d2);
|
||||
Assert.That(d2.MgNr, Is.EqualTo(102));
|
||||
Assert.That(ps2, Has.Length.EqualTo(3));
|
||||
Assert.That(ps2[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps2[1].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps2[2].Weight, Is.EqualTo(1000));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestSplit_09_OtherDelivery_One() {
|
||||
var d1 = await GetDelivery("20231006X001");
|
||||
var d2 = await GetDelivery("20231006X002");
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(d1, Is.Not.Null);
|
||||
Assert.That(d2, Is.Not.Null);
|
||||
});
|
||||
Assert.Multiple(() => {
|
||||
var ps1 = GetParts(d1);
|
||||
var ps2 = GetParts(d2);
|
||||
Assert.That(ps1, Has.Length.EqualTo(3));
|
||||
Assert.That(ps1[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps1[1].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps1[2].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps2, Has.Length.EqualTo(1));
|
||||
Assert.That(ps2[0].Weight, Is.EqualTo(1000));
|
||||
});
|
||||
|
||||
Assert.DoesNotThrowAsync(async () => await DeliveryService.SplitDeliveryToLsNr(d1.Year, d1.DId, [0, 1000, -4], d2.LsNr));
|
||||
d1 = await GetDelivery("20231006X001");
|
||||
d2 = await GetDelivery("20231006X002");
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(d1, Is.Not.Null);
|
||||
Assert.That(d2, Is.Not.Null);
|
||||
});
|
||||
Assert.Multiple(() => {
|
||||
var ps1 = GetParts(d1);
|
||||
var ps2 = GetParts(d2);
|
||||
Assert.That(ps1, Has.Length.EqualTo(2));
|
||||
Assert.That(ps1[0].DPNr, Is.EqualTo(1));
|
||||
Assert.That(ps1[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps1[1].DPNr, Is.EqualTo(3));
|
||||
Assert.That(ps1[1].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps2, Has.Length.EqualTo(2));
|
||||
Assert.That(ps2[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps2[1].Weight, Is.EqualTo(1000));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestSplit_10_OtherDelivery_Partial() {
|
||||
var d1 = await GetDelivery("20231007X001");
|
||||
var d2 = await GetDelivery("20231007X002");
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(d1, Is.Not.Null);
|
||||
Assert.That(d2, Is.Not.Null);
|
||||
});
|
||||
Assert.Multiple(() => {
|
||||
var ps1 = GetParts(d1);
|
||||
var ps2 = GetParts(d2);
|
||||
Assert.That(ps1, Has.Length.EqualTo(3));
|
||||
Assert.That(ps1[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps1[1].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps1[2].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps2, Has.Length.EqualTo(1));
|
||||
Assert.That(ps2[0].Weight, Is.EqualTo(1000));
|
||||
});
|
||||
|
||||
Assert.DoesNotThrowAsync(async () => await DeliveryService.SplitDeliveryToLsNr(d1.Year, d1.DId, [0, 300, int.MinValue], d2.LsNr));
|
||||
d1 = await GetDelivery("20231007X001");
|
||||
d2 = await GetDelivery("20231007X002");
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(d1, Is.Not.Null);
|
||||
Assert.That(d2, Is.Not.Null);
|
||||
});
|
||||
Assert.Multiple(() => {
|
||||
var ps1 = GetParts(d1);
|
||||
var ps2 = GetParts(d2);
|
||||
Assert.That(ps1, Has.Length.EqualTo(3));
|
||||
Assert.That(ps1[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps1[1].Weight, Is.EqualTo(700));
|
||||
Assert.That(ps1[2].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps2, Has.Length.EqualTo(2));
|
||||
Assert.That(ps2[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps2[1].Weight, Is.EqualTo(300));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestSplit_11_OtherDelivery_Mixed() {
|
||||
var d1 = await GetDelivery("20231008X001");
|
||||
var d2 = await GetDelivery("20231008X002");
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(d1, Is.Not.Null);
|
||||
Assert.That(d2, Is.Not.Null);
|
||||
});
|
||||
Assert.Multiple(() => {
|
||||
var ps1 = GetParts(d1);
|
||||
var ps2 = GetParts(d2);
|
||||
Assert.That(ps1, Has.Length.EqualTo(3));
|
||||
Assert.That(ps1[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps1[1].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps1[2].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps2, Has.Length.EqualTo(1));
|
||||
Assert.That(ps2[0].Weight, Is.EqualTo(1000));
|
||||
});
|
||||
|
||||
Assert.DoesNotThrowAsync(async () => await DeliveryService.SplitDeliveryToLsNr(d1.Year, d1.DId, [850, 1000, -4], d2.LsNr));
|
||||
d1 = await GetDelivery("20231008X001");
|
||||
d2 = await GetDelivery("20231008X002");
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(d1, Is.Not.Null);
|
||||
Assert.That(d2, Is.Not.Null);
|
||||
});
|
||||
Assert.Multiple(() => {
|
||||
var ps1 = GetParts(d1);
|
||||
var ps2 = GetParts(d2);
|
||||
Assert.That(ps1, Has.Length.EqualTo(2));
|
||||
Assert.That(ps1[0].DPNr, Is.EqualTo(1));
|
||||
Assert.That(ps1[0].Weight, Is.EqualTo(150));
|
||||
Assert.That(ps1[1].DPNr, Is.EqualTo(3));
|
||||
Assert.That(ps1[1].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps2, Has.Length.EqualTo(3));
|
||||
Assert.That(ps2[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps2[1].Weight, Is.EqualTo(850));
|
||||
Assert.That(ps2[2].Weight, Is.EqualTo(1000));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestSplit_12_OtherDelivery_Complete() {
|
||||
var d1 = await GetDelivery("20231009X001");
|
||||
var d2 = await GetDelivery("20231009X002");
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(d1, Is.Not.Null);
|
||||
Assert.That(d2, Is.Not.Null);
|
||||
});
|
||||
Assert.Multiple(() => {
|
||||
var ps1 = GetParts(d1);
|
||||
var ps2 = GetParts(d2);
|
||||
Assert.That(ps1, Has.Length.EqualTo(3));
|
||||
Assert.That(ps1[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps1[1].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps1[2].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps2, Has.Length.EqualTo(1));
|
||||
Assert.That(ps2[0].Weight, Is.EqualTo(1000));
|
||||
});
|
||||
|
||||
Assert.DoesNotThrowAsync(async () => await DeliveryService.SplitDeliveryToLsNr(d1.Year, d1.DId, [1200, int.MaxValue, 1000], d2.LsNr));
|
||||
d1 = await GetDelivery("20231009X001");
|
||||
d2 = await GetDelivery("20231009X002");
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(d1, Is.Null);
|
||||
Assert.That(d2, Is.Not.Null);
|
||||
});
|
||||
Assert.Multiple(() => {
|
||||
var ps2 = GetParts(d2);
|
||||
Assert.That(ps2, Has.Length.EqualTo(4));
|
||||
Assert.That(ps2[0].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps2[1].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps2[2].Weight, Is.EqualTo(1000));
|
||||
Assert.That(ps2[3].Weight, Is.EqualTo(1000));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestDelete_01_Normal() {
|
||||
using (var ctx = new AppDbContext()) {
|
||||
Assert.That(await ctx.Deliveries.FindAsync(2022, 2), Is.Not.Null);
|
||||
}
|
||||
Assert.DoesNotThrowAsync(async () => await DeliveryService.DeleteDelivery("20220930X001"));
|
||||
using (var ctx = new AppDbContext()) {
|
||||
Assert.That(await ctx.Deliveries.FindAsync(2022, 2), Is.Null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
361
Tests/UnitTests/ServiceTests/MemberServiceTest.cs
Normal file
361
Tests/UnitTests/ServiceTests/MemberServiceTest.cs
Normal file
@ -0,0 +1,361 @@
|
||||
using Elwig.Helpers;
|
||||
using Elwig.Models.Entities;
|
||||
using Elwig.Services;
|
||||
using Elwig.ViewModels;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Tests.UnitTests.ServiceTests {
|
||||
[TestFixture]
|
||||
public class MemberServiceTest {
|
||||
|
||||
private static async Task InitViewModel(MemberAdminViewModel vm) {
|
||||
using var ctx = new AppDbContext();
|
||||
vm.BranchSource = await ctx.Branches.ToListAsync();
|
||||
vm.DefaultKgSource = await ctx.Katastralgemeinden.ToListAsync();
|
||||
vm.OrtSource = await ctx.PlzDestinations.Include(p => p.Ort).ToListAsync();
|
||||
vm.BillingOrtSource = await ctx.PlzDestinations.Include(p => p.Ort).ToListAsync();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestCreate_01_Minimal() {
|
||||
var vm = new MemberAdminViewModel();
|
||||
await InitViewModel(vm);
|
||||
await vm.InitInputs();
|
||||
vm.Name = "Neuling";
|
||||
vm.GivenName = "Nadine";
|
||||
vm.Address = "Neubaugasse 1";
|
||||
vm.Plz = 2120;
|
||||
vm.Ort = vm.OrtSource.First(d => d.Ort.Name == "Wolkersdorf im Weinviertel");
|
||||
vm.BusinessShares = 1;
|
||||
vm.DefaultKg = vm.DefaultKgSource.First(k => k.Name == "Wolkersdorf");
|
||||
|
||||
Assert.That(vm.MgNr, Is.EqualTo(205));
|
||||
using (var ctx = new AppDbContext()) {
|
||||
Assert.That(await ctx.Members.FindAsync(205), Is.Null);
|
||||
}
|
||||
|
||||
Assert.DoesNotThrowAsync(async () => await vm.UpdateMember(null));
|
||||
|
||||
Member? m;
|
||||
using (var ctx = new AppDbContext()) {
|
||||
m = await ctx.Members
|
||||
.Where(m => m.MgNr == vm.MgNr)
|
||||
.Include(m => m.BillingAddress!.PostalDest.AtPlz!.Ort)
|
||||
.Include(m => m.PostalDest.AtPlz!.Ort)
|
||||
.Include(m => m.DefaultWbKg!.AtKg)
|
||||
.Include(m => m.EmailAddresses)
|
||||
.Include(m => m.TelephoneNumbers)
|
||||
.AsSplitQuery()
|
||||
.FirstOrDefaultAsync();
|
||||
}
|
||||
|
||||
Assert.That(m, Is.Not.Null);
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(m.MgNr, Is.EqualTo(205));
|
||||
Assert.That(m.Name, Is.EqualTo("Neuling"));
|
||||
Assert.That(m.GivenName, Is.EqualTo("Nadine"));
|
||||
Assert.That(m.Address, Is.EqualTo("Neubaugasse 1"));
|
||||
Assert.That(m.PostalDest.AtPlz?.Plz, Is.EqualTo(2120));
|
||||
Assert.That(m.PostalDest.AtPlz?.Ort.Name, Is.EqualTo("Wolkersdorf im Weinviertel"));
|
||||
Assert.That(m.BusinessShares, Is.EqualTo(1));
|
||||
Assert.That(m.DefaultKg?.Name, Is.EqualTo("Wolkersdorf"));
|
||||
});
|
||||
|
||||
vm = new MemberAdminViewModel();
|
||||
await InitViewModel(vm);
|
||||
Assert.DoesNotThrow(() => vm.FillInputs(m));
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(vm.MgNr, Is.EqualTo(205));
|
||||
Assert.That(vm.Name, Is.EqualTo("Neuling"));
|
||||
Assert.That(vm.GivenName, Is.EqualTo("Nadine"));
|
||||
Assert.That(vm.Address, Is.EqualTo("Neubaugasse 1"));
|
||||
Assert.That(vm.Plz, Is.EqualTo(2120));
|
||||
Assert.That(vm.Ort?.Ort.Name, Is.EqualTo("Wolkersdorf im Weinviertel"));
|
||||
Assert.That(vm.BusinessShares, Is.EqualTo(1));
|
||||
Assert.That(vm.DefaultKg?.Name, Is.EqualTo("Wolkersdorf"));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestCreate_02_Full() {
|
||||
var vm = new MemberAdminViewModel();
|
||||
await InitViewModel(vm);
|
||||
await vm.InitInputs();
|
||||
|
||||
vm.MgNr = 999;
|
||||
vm.IsJuridicalPerson = true;
|
||||
vm.Name = "Neue GmbH";
|
||||
vm.ForTheAttentionOf = "Norbert Neuling";
|
||||
vm.Address = "Neuegasse 2";
|
||||
vm.Plz = 2120;
|
||||
vm.Ort = vm.OrtSource.First(d => d.Ort.Name == "Wolkersdorf im Weinviertel");
|
||||
|
||||
vm.EmailAddresses[0] = "neue.gmbh@mail.com";
|
||||
vm.EmailAddresses[1] = "norbert.neuling@mail.com";
|
||||
vm.PhoneNrs[0] = new(0, "+43 2245 9876", "Büro");
|
||||
vm.PhoneNrs[1] = new(1, "+43 664 123456789", "Hr. Neuling");
|
||||
vm.PhoneNrs[2] = new(2, "+43 2245 9876-2", null);
|
||||
|
||||
vm.Iban = "AT97 1234 5678 9012 3460";
|
||||
vm.Bic = "RLNWATWWWDF";
|
||||
|
||||
vm.UstIdNr = "ATU12345693";
|
||||
vm.LfbisNr = "0123498";
|
||||
vm.IsBuchführend = true;
|
||||
vm.IsOrganic = true;
|
||||
|
||||
vm.BillingName = "Neue Holding AG";
|
||||
vm.BillingAddress = "Neuegasse 3";
|
||||
vm.BillingPlz = 2120;
|
||||
vm.BillingOrt = vm.BillingOrtSource.First(d => d.Ort.Name == "Wolkersdorf im Weinviertel");
|
||||
|
||||
vm.BusinessShares = 10;
|
||||
vm.AccountingNr = "330999";
|
||||
vm.DefaultKg = vm.DefaultKgSource.First(k => k.Name == "Wolkersdorf");
|
||||
vm.Comment = "Ich bin eine Anmerkung";
|
||||
vm.ContactViaPost = true;
|
||||
vm.ContactViaEmail = true;
|
||||
vm.IsVollLieferant = true;
|
||||
vm.IsFunktionär = true;
|
||||
|
||||
using (var ctx = new AppDbContext()) {
|
||||
Assert.That(await ctx.Members.FindAsync(999), Is.Null);
|
||||
}
|
||||
|
||||
Assert.DoesNotThrowAsync(async () => await vm.UpdateMember(null));
|
||||
|
||||
Member? m;
|
||||
using (var ctx = new AppDbContext()) {
|
||||
m = await ctx.Members
|
||||
.Where(m => m.MgNr == vm.MgNr)
|
||||
.Include(m => m.BillingAddress!.PostalDest.AtPlz!.Ort)
|
||||
.Include(m => m.PostalDest.AtPlz!.Ort)
|
||||
.Include(m => m.DefaultWbKg!.AtKg)
|
||||
.Include(m => m.EmailAddresses)
|
||||
.Include(m => m.TelephoneNumbers)
|
||||
.AsSplitQuery()
|
||||
.FirstOrDefaultAsync();
|
||||
}
|
||||
|
||||
Assert.That(m, Is.Not.Null);
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(m.MgNr, Is.EqualTo(999));
|
||||
Assert.That(m.IsJuridicalPerson, Is.True);
|
||||
Assert.That(m.Name, Is.EqualTo("Neue GmbH"));
|
||||
Assert.That(m.ForTheAttentionOf, Is.EqualTo("Norbert Neuling"));
|
||||
Assert.That(m.Address, Is.EqualTo("Neuegasse 2"));
|
||||
Assert.That(m.PostalDest.AtPlz?.Plz, Is.EqualTo(2120));
|
||||
Assert.That(m.PostalDest.AtPlz?.Ort.Name, Is.EqualTo("Wolkersdorf im Weinviertel"));
|
||||
|
||||
Assert.That(m.EmailAddresses.Select(a => (a.Nr, a.Address)), Is.EquivalentTo(new (int, string)[] {
|
||||
(1, "neue.gmbh@mail.com"),
|
||||
(2, "norbert.neuling@mail.com"),
|
||||
}));
|
||||
Assert.That(m.TelephoneNumbers.Select(n => (n.Nr, n.Type, n.Number, n.Comment)), Is.EquivalentTo(new (int, string, string, string?)[] {
|
||||
(1, "landline", "+43 2245 9876", "Büro"),
|
||||
(2, "mobile", "+43 664 123456789", "Hr. Neuling"),
|
||||
(3, "fax", "+43 2245 9876-2", null),
|
||||
}));
|
||||
|
||||
Assert.That(m.Iban, Is.EqualTo("AT971234567890123460"));
|
||||
Assert.That(m.Bic, Is.EqualTo("RLNWATWWWDF"));
|
||||
|
||||
Assert.That(m.UstIdNr, Is.EqualTo("ATU12345693"));
|
||||
Assert.That(m.LfbisNr, Is.EqualTo("0123498"));
|
||||
Assert.That(m.IsBuchführend, Is.True);
|
||||
Assert.That(m.IsOrganic, Is.True);
|
||||
|
||||
Assert.That(m.BillingAddress, Is.Not.Null);
|
||||
Assert.That(m.BillingAddress?.FullName, Is.EqualTo("Neue Holding AG"));
|
||||
Assert.That(m.BillingAddress?.Address, Is.EqualTo("Neuegasse 3"));
|
||||
Assert.That(m.BillingAddress?.PostalDest.AtPlz?.Plz, Is.EqualTo(2120));
|
||||
Assert.That(m.BillingAddress?.PostalDest.AtPlz?.Ort.Name, Is.EqualTo("Wolkersdorf im Weinviertel"));
|
||||
|
||||
Assert.That(m.BusinessShares, Is.EqualTo(10));
|
||||
Assert.That(m.AccountingNr, Is.EqualTo("330999"));
|
||||
Assert.That(m.DefaultKg?.Name, Is.EqualTo("Wolkersdorf"));
|
||||
Assert.That(m.Comment, Is.EqualTo("Ich bin eine Anmerkung"));
|
||||
Assert.That(m.ContactViaPost, Is.True);
|
||||
Assert.That(m.ContactViaEmail, Is.True);
|
||||
Assert.That(m.IsVollLieferant, Is.True);
|
||||
Assert.That(m.IsFunktionär, Is.True);
|
||||
});
|
||||
|
||||
vm = new MemberAdminViewModel();
|
||||
await InitViewModel(vm);
|
||||
Assert.DoesNotThrow(() => vm.FillInputs(m));
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(vm.MgNr, Is.EqualTo(999));
|
||||
Assert.That(vm.IsJuridicalPerson, Is.True);
|
||||
Assert.That(vm.Name, Is.EqualTo("Neue GmbH"));
|
||||
Assert.That(vm.ForTheAttentionOf, Is.EqualTo("Norbert Neuling"));
|
||||
Assert.That(vm.Address, Is.EqualTo("Neuegasse 2"));
|
||||
Assert.That(vm.Plz, Is.EqualTo(2120));
|
||||
Assert.That(vm.Ort?.Ort.Name, Is.EqualTo("Wolkersdorf im Weinviertel"));
|
||||
|
||||
Assert.That(vm.EmailAddresses, Is.EquivalentTo(new string?[] {
|
||||
"neue.gmbh@mail.com",
|
||||
"norbert.neuling@mail.com",
|
||||
null, null, null, null, null, null, null
|
||||
}));
|
||||
Assert.That(vm.PhoneNrs, Is.EquivalentTo(new MemberAdminViewModel.PhoneNr?[] {
|
||||
new(0, "+43 2245 9876", "Büro"),
|
||||
new(1, "+43 664 123456789", "Hr. Neuling"),
|
||||
new(2, "+43 2245 9876-2", null),
|
||||
new(), new(), new(), new(), new(), new()
|
||||
}));
|
||||
|
||||
Assert.That(vm.Iban, Is.EqualTo("AT971234567890123460"));
|
||||
Assert.That(vm.Bic, Is.EqualTo("RLNWATWWWDF"));
|
||||
|
||||
Assert.That(vm.UstIdNr, Is.EqualTo("ATU12345693"));
|
||||
Assert.That(vm.LfbisNr, Is.EqualTo("0123498"));
|
||||
Assert.That(vm.IsBuchführend, Is.True);
|
||||
Assert.That(vm.IsOrganic, Is.True);
|
||||
|
||||
Assert.That(vm.BillingName, Is.EqualTo("Neue Holding AG"));
|
||||
Assert.That(vm.BillingAddress, Is.EqualTo("Neuegasse 3"));
|
||||
Assert.That(vm.BillingPlz, Is.EqualTo(2120));
|
||||
Assert.That(vm.BillingOrt?.Ort.Name, Is.EqualTo("Wolkersdorf im Weinviertel"));
|
||||
|
||||
Assert.That(vm.BusinessShares, Is.EqualTo(10));
|
||||
Assert.That(vm.AccountingNr, Is.EqualTo("330999"));
|
||||
Assert.That(vm.DefaultKg?.Name, Is.EqualTo("Wolkersdorf"));
|
||||
Assert.That(vm.Comment, Is.EqualTo("Ich bin eine Anmerkung"));
|
||||
Assert.That(vm.ContactViaPost, Is.True);
|
||||
Assert.That(vm.ContactViaEmail, Is.True);
|
||||
Assert.That(vm.IsVollLieferant, Is.True);
|
||||
Assert.That(vm.IsFunktionär, Is.True);
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestUpdate_01_Inactive() {
|
||||
var vm = new MemberAdminViewModel();
|
||||
await InitViewModel(vm);
|
||||
using (var ctx = new AppDbContext()) {
|
||||
vm.FillInputs(await ctx.Members
|
||||
.Where(m => m.MgNr == 202)
|
||||
.Include(m => m.BillingAddress!.PostalDest.AtPlz!.Ort)
|
||||
.Include(m => m.PostalDest.AtPlz!.Ort)
|
||||
.Include(m => m.DefaultWbKg!.AtKg)
|
||||
.Include(m => m.EmailAddresses)
|
||||
.Include(m => m.TelephoneNumbers)
|
||||
.AsSplitQuery()
|
||||
.FirstAsync());
|
||||
}
|
||||
|
||||
Assert.That(vm.IsActive, Is.True);
|
||||
|
||||
var exitDate = DateTime.Now;
|
||||
vm.IsActive = false;
|
||||
vm.ExitDate = $"{exitDate:dd.MM.yyyy}";
|
||||
|
||||
Assert.DoesNotThrowAsync(async () => await vm.UpdateMember(202));
|
||||
|
||||
Member? m;
|
||||
using (var ctx = new AppDbContext()) {
|
||||
m = await ctx.Members
|
||||
.Where(m => m.MgNr == 202)
|
||||
.Include(m => m.BillingAddress!.PostalDest.AtPlz!.Ort)
|
||||
.Include(m => m.PostalDest.AtPlz!.Ort)
|
||||
.Include(m => m.DefaultWbKg!.AtKg)
|
||||
.Include(m => m.EmailAddresses)
|
||||
.Include(m => m.TelephoneNumbers)
|
||||
.AsSplitQuery()
|
||||
.FirstOrDefaultAsync();
|
||||
}
|
||||
|
||||
Assert.That(m, Is.Not.Null);
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(m.IsActive, Is.False);
|
||||
Assert.That(m.ExitDateString, Is.EqualTo($"{exitDate:yyyy-MM-dd}"));
|
||||
});
|
||||
|
||||
vm = new MemberAdminViewModel();
|
||||
await InitViewModel(vm);
|
||||
Assert.DoesNotThrow(() => vm.FillInputs(m));
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(vm.IsActive, Is.False);
|
||||
Assert.That(vm.ExitDate, Is.EqualTo($"{exitDate:dd.MM.yyyy}"));
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestUpdate_02_MgNr() {
|
||||
var vm = new MemberAdminViewModel();
|
||||
await InitViewModel(vm);
|
||||
using (var ctx = new AppDbContext()) {
|
||||
vm.FillInputs(await ctx.Members
|
||||
.Where(m => m.MgNr == 203)
|
||||
.Include(m => m.BillingAddress!.PostalDest.AtPlz!.Ort)
|
||||
.Include(m => m.PostalDest.AtPlz!.Ort)
|
||||
.Include(m => m.DefaultWbKg!.AtKg)
|
||||
.Include(m => m.EmailAddresses)
|
||||
.Include(m => m.TelephoneNumbers)
|
||||
.AsSplitQuery()
|
||||
.FirstAsync());
|
||||
}
|
||||
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(vm.MgNr, Is.EqualTo(203));
|
||||
Assert.That(vm.EmailAddresses[0], Is.Not.Null);
|
||||
Assert.That(vm.PhoneNrs[0], Is.Not.Null);
|
||||
Assert.That(vm.BillingName, Is.Not.Null);
|
||||
});
|
||||
vm.MgNr = 210;
|
||||
Assert.DoesNotThrowAsync(async () => await vm.UpdateMember(203));
|
||||
|
||||
Member? m;
|
||||
using (var ctx = new AppDbContext()) {
|
||||
m = await ctx.Members
|
||||
.Where(m => m.MgNr == 210)
|
||||
.Include(m => m.BillingAddress!.PostalDest.AtPlz!.Ort)
|
||||
.Include(m => m.PostalDest.AtPlz!.Ort)
|
||||
.Include(m => m.DefaultWbKg!.AtKg)
|
||||
.Include(m => m.EmailAddresses)
|
||||
.Include(m => m.TelephoneNumbers)
|
||||
.AsSplitQuery()
|
||||
.FirstOrDefaultAsync();
|
||||
}
|
||||
|
||||
Assert.That(m, Is.Not.Null);
|
||||
vm = new MemberAdminViewModel();
|
||||
await InitViewModel(vm);
|
||||
Assert.DoesNotThrow(() => vm.FillInputs(m));
|
||||
Assert.Multiple(() => {
|
||||
Assert.That(vm.MgNr, Is.EqualTo(210));
|
||||
Assert.That(vm.EmailAddresses[0], Is.Not.Null);
|
||||
Assert.That(vm.PhoneNrs[0], Is.Not.Null);
|
||||
Assert.That(vm.BillingName, Is.Not.Null);
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestDelete_01_NoReferences() {
|
||||
using (var ctx = new AppDbContext()) {
|
||||
Assert.That(await ctx.Members.FindAsync(201), Is.Not.Null);
|
||||
}
|
||||
Assert.DoesNotThrowAsync(async () => await MemberService.DeleteMember(201, false, false, false));
|
||||
using (var ctx = new AppDbContext()) {
|
||||
Assert.That(await ctx.Members.FindAsync(201), Is.Null);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task TestDelete_02_AllReferences() {
|
||||
using (var ctx = new AppDbContext()) {
|
||||
Assert.That(await ctx.Members.FindAsync(204), Is.Not.Null);
|
||||
}
|
||||
for (int i = 0; i < 7; i++) {
|
||||
Assert.ThrowsAsync<DbUpdateException>(async () => await MemberService.DeleteMember(204, (i & 1) != 0, (i & 2) != 0, (i & 4) != 0));
|
||||
using var ctx = new AppDbContext();
|
||||
Assert.That(await ctx.Members.FindAsync(204), Is.Not.Null);
|
||||
}
|
||||
Assert.DoesNotThrowAsync(async () => await MemberService.DeleteMember(204, true, true, true));
|
||||
using (var ctx = new AppDbContext()) {
|
||||
Assert.That(await ctx.Members.FindAsync(204), Is.Null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
25
Tests/UnitTests/ServiceTests/Setup.cs
Normal file
25
Tests/UnitTests/ServiceTests/Setup.cs
Normal file
@ -0,0 +1,25 @@
|
||||
using Elwig.Helpers;
|
||||
using System.Reflection;
|
||||
using Microsoft.Data.Sqlite;
|
||||
|
||||
namespace Tests.UnitTests.ServiceTests {
|
||||
[SetUpFixture]
|
||||
public class Setup {
|
||||
|
||||
private SqliteConnection? Connection;
|
||||
|
||||
[OneTimeSetUp]
|
||||
public async Task SetupDatabase() {
|
||||
Connection = await AppDbContext.ConnectAsync();
|
||||
await AppDbContext.ExecuteEmbeddedScript(Connection, Assembly.GetExecutingAssembly(), "Tests.Resources.Sql.ServiceInsert.sql");
|
||||
}
|
||||
|
||||
[OneTimeTearDown]
|
||||
public async Task TeardownDatabase() {
|
||||
if (Connection == null) return;
|
||||
await AppDbContext.ExecuteEmbeddedScript(Connection, Assembly.GetExecutingAssembly(), "Tests.Resources.Sql.ServiceDelete.sql");
|
||||
await Connection.DisposeAsync();
|
||||
Connection = null;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user