WeighingTests: Move all scale handlers into ScaleHandlers.cs

This commit is contained in:
2024-07-18 23:46:05 +02:00
parent 34178105a7
commit ffe0ff5508
6 changed files with 195 additions and 186 deletions

View File

@ -1,7 +1,6 @@
using System.Net.Sockets; using System.Net.Sockets;
using System.Net; using System.Net;
using System.Text; using System.Text;
using System.IO;
namespace Tests.WeighingTests { namespace Tests.WeighingTests {
public abstract class MockScale : IDisposable { public abstract class MockScale : IDisposable {

View File

@ -0,0 +1,104 @@
namespace Tests.WeighingTests {
public static class ScaleHandlers {
public static (string, bool) Handle_IT3000A(string req, int weight, string? error, int identNr) {
var modes = error?.Split(';') ?? [];
var overloaded = modes.Contains("overloaded");
var moving = modes.Contains("moving");
var invalid = modes.Contains("invalid");
var crc = modes.Contains("crc");
var unit = modes.Contains("unit");
Thread.Sleep(100);
if (invalid) {
return ("abcd\r\n", false);
} else if (!req.StartsWith('<') || !req.EndsWith('>')) {
return ("<31>\r\n", false);
}
req = req[1..^1];
bool incr;
if (req.Length > 3) {
return ("<32>\r\n", false);
} else if (req.StartsWith("RN")) {
incr = true;
} else if (req.StartsWith("RM")) {
incr = false;
} else {
return ("<32>\r\n", false);
}
if (overloaded) {
return ("<12>\r\n", false);
} else if (weight == 0) {
incr = false;
}
if (moving && incr)
return ("<13>\r\n", false);
string data = $"00{(moving ? 1 : 0)}0{new DateTime(2020, 10, 15, 12, 34, 0):dd.MM.yyHH:mm}{(incr ? identNr : 0),4}1" +
$"{weight,8}{0,8}{weight,8}{(unit ? "lb" : "kg")} {"1",3}";
ushort checksum = Elwig.Helpers.Utils.CalcCrc16Modbus(data);
if (crc) checksum += 10;
return ($"<{data}{checksum,8}>\r\n", incr);
}
public static (string, bool) Handle_L246(string req, int weight, string? error, int identNr) {
var modes = error?.Split(';') ?? [];
var overloaded = modes.Contains("overloaded");
var moving = modes.Contains("moving");
var invalid = modes.Contains("invalid");
var crc = modes.Contains("crc");
var unit = modes.Contains("unit");
Thread.Sleep(100);
if (invalid) {
return ("abcd\r\n", false);
} else if (!req.StartsWith('<') || !req.EndsWith('>')) {
return ("<31>\r\n", false);
}
req = req[1..^1];
bool incr;
if (req.Length > 3) {
return ("<32>\r\n", false);
} else if (req.StartsWith("RN")) {
incr = true;
} else if (req.StartsWith("RM")) {
incr = false;
} else {
return ("<32>\r\n", false);
}
if (overloaded)
return ("<12>\r\n", false);
if (moving && incr)
return ("<13>\r\n", false);
string data = $"00{(moving ? 1 : 0)}0{new DateTime(2020, 10, 17, 14, 23, 0):dd.MM.yyHH:mm}{(incr ? identNr : 0),4}1" +
$"{weight,8}{0,8}{weight,8}{(unit ? "lb" : "kg")} {"001",3}";
ushort checksum = Elwig.Helpers.Utils.CalcCrc16Modbus(data);
if (crc) checksum += 10;
return ($"<{data}{checksum,8}>\r\n", incr);
}
public static (string, bool) Handle_L320(int weight, string? error, int identNr) {
var modes = error?.Split(';') ?? [];
var invalid = modes.Contains("invalid");
var unit = modes.Contains("unit");
Thread.Sleep(100);
if (invalid) {
return ("abcd\r\n", false);
}
bool incr = true;
return ($" {new DateTime(2020, 9, 28, 9, 8, 0):dd.MM.yy HH:mm} {identNr,4} {weight,9}{(unit ? "lb" : "kg")} \r\n", incr);
}
}
}

View File

@ -4,49 +4,36 @@ namespace Tests.WeighingTests {
[TestFixture] [TestFixture]
public class ScaleTestBadenL320 { public class ScaleTestBadenL320 {
private EventMockScale? Mock; private EventMockScale Mock;
private AveryEventScale? Scale; private AveryEventScale Scale;
private static (string, bool) ScaleHandler(int weight, string? error, int identNr) {
var modes = error?.Split(';') ?? [];
var invalid = modes.Contains("invalid");
var unit = modes.Contains("unit");
if (invalid) {
return ("abcd\r\n", false);
}
bool incr = true;
return ($" {new DateTime(2020, 9, 28, 9, 8, 0):dd.MM.yy HH:mm} {identNr,4} {weight,9}{(unit ? "lb" : "kg")} \r\n", incr);
}
[OneTimeSetUp] [OneTimeSetUp]
public void SetupScale() { public void SetupScale() {
Mock = new EventMockScale(12345, ScaleHandler); Mock = new EventMockScale(12345, ScaleHandlers.Handle_L320);
Scale = new("1", "L320", "tcp://127.0.0.1:12345"); Scale = new("1", "L320", "tcp://127.0.0.1:12345");
} }
[OneTimeTearDown] [OneTimeTearDown]
public void TeardownScale() { public void TeardownScale() {
Mock?.Dispose(); Mock.Dispose();
Scale?.Dispose(); Scale.Dispose();
} }
[SetUp] [SetUp]
public void ResetScale() { public void ResetScale() {
Mock!.IdentNr = 0; Mock.IdentNr = 0;
Mock!.Weight = 0; Mock.Weight = 0;
Mock!.Error = null; Mock.Error = null;
} }
[Test] [Test]
public async Task Test_01_Normal() { public async Task Test_01_Normal() {
WeighingResult? res = null; WeighingResult? res = null;
Scale!.WeighingEvent += (sender, evt) => { Scale.WeighingEvent += (sender, evt) => {
res = evt.Result; res = evt.Result;
}; };
await Mock!.Weigh(2345); await Mock.Weigh(2345);
await Task.Delay(100); await Task.Delay(100);
Assert.That(res, Is.Not.Null); Assert.That(res, Is.Not.Null);
Assert.That(res, Is.EqualTo(new WeighingResult { Assert.That(res, Is.EqualTo(new WeighingResult {
@ -55,7 +42,7 @@ namespace Tests.WeighingTests {
Date = new DateOnly(2020, 9, 28), Time = new TimeOnly(9, 8), Date = new DateOnly(2020, 9, 28), Time = new TimeOnly(9, 8),
})); }));
await Mock!.Weigh(4215); await Mock.Weigh(4215);
await Task.Delay(100); await Task.Delay(100);
Assert.That(res, Is.Not.Null); Assert.That(res, Is.Not.Null);
Assert.That(res, Is.EqualTo(new WeighingResult { Assert.That(res, Is.EqualTo(new WeighingResult {

View File

@ -4,78 +4,39 @@ namespace Tests.WeighingTests {
[TestFixture] [TestFixture]
class ScaleTestGrInzersdorfL246 { class ScaleTestGrInzersdorfL246 {
private MockScale? Mock; private MockScale Mock;
private SysTecITScale? Scale; private SysTecITScale Scale;
private static (string, bool) ScaleHandler(string req, int weight, string? error, int identNr) {
var modes = error?.Split(';') ?? [];
var overloaded = modes.Contains("overloaded");
var moving = modes.Contains("moving");
var invalid = modes.Contains("invalid");
var crc = modes.Contains("crc");
var unit = modes.Contains("unit");
if (invalid) {
return ("abcd\r\n", false);
} else if (!req.StartsWith('<') || !req.EndsWith('>')) {
return ("<31>\r\n", false);
}
req = req[1..^1];
bool incr;
if (req.Length > 3) {
return ("<32>\r\n", false);
} else if (req.StartsWith("RN")) {
incr = true;
} else if (req.StartsWith("RM")) {
incr = false;
} else {
return ("<32>\r\n", false);
}
if (overloaded)
return ("<12>\r\n", false);
if (moving && incr)
return ("<13>\r\n", false);
string data = $"00{(moving ? 1 : 0)}0{new DateTime(2020, 10, 17, 14, 23, 0):dd.MM.yyHH:mm}{(incr ? identNr : 0),4}1" +
$"{weight,8}{0,8}{weight,8}{(unit ? "lb" : "kg")} {"001",3}";
ushort checksum = Elwig.Helpers.Utils.CalcCrc16Modbus(data);
if (crc) checksum += 10;
return ($"<{data}{checksum,8}>\r\n", incr);
}
[OneTimeSetUp] [OneTimeSetUp]
public void SetupScale() { public void SetupScale() {
Mock = new CommandMockScale(12345, ScaleHandler); Mock = new CommandMockScale(12345, ScaleHandlers.Handle_L246);
Scale = new("1", "L246", "tcp://127.0.0.1:12345"); Scale = new("1", "L246", "tcp://127.0.0.1:12345");
} }
[OneTimeTearDown] [OneTimeTearDown]
public void TeardownScale() { public void TeardownScale() {
Mock?.Dispose(); Mock.Dispose();
Scale?.Dispose(); Scale.Dispose();
} }
[SetUp] [SetUp]
public void ResetScale() { public void ResetScale() {
Mock!.IdentNr = 0; Mock.IdentNr = 0;
Mock!.Weight = 0; Mock.Weight = 0;
Mock!.Error = null; Mock.Error = null;
} }
[Test] [Test]
public async Task Test_01_CurrentWeight() { public async Task Test_01_CurrentWeight() {
Mock!.Weight = 1235; Mock.Weight = 1235;
Assert.That(await Scale!.GetCurrentWeight(), Is.EqualTo(new WeighingResult { Assert.That(await Scale!.GetCurrentWeight(), Is.EqualTo(new WeighingResult {
Weight = 1235, Date = new DateOnly(2020, 10, 17), Time = new TimeOnly(14, 23), Weight = 1235, Date = new DateOnly(2020, 10, 17), Time = new TimeOnly(14, 23),
})); }));
Mock!.Weight = 1240; Mock.Weight = 1240;
Assert.That(await Scale!.GetCurrentWeight(), Is.EqualTo(new WeighingResult { Assert.That(await Scale!.GetCurrentWeight(), Is.EqualTo(new WeighingResult {
Weight = 1240, Date = new DateOnly(2020, 10, 17), Time = new TimeOnly(14, 23), Weight = 1240, Date = new DateOnly(2020, 10, 17), Time = new TimeOnly(14, 23),
})); }));
Mock!.Weight = 1245; Mock.Weight = 1245;
Assert.That(await Scale!.GetCurrentWeight(), Is.EqualTo(new WeighingResult { Assert.That(await Scale!.GetCurrentWeight(), Is.EqualTo(new WeighingResult {
Weight = 1245, Date = new DateOnly(2020, 10, 17), Time = new TimeOnly(14, 23), Weight = 1245, Date = new DateOnly(2020, 10, 17), Time = new TimeOnly(14, 23),
})); }));
@ -83,19 +44,19 @@ namespace Tests.WeighingTests {
[Test] [Test]
public async Task Test_02_Normal() { public async Task Test_02_Normal() {
Mock!.Weight = 1235; Mock.Weight = 1235;
Assert.That(await Scale!.Weigh(), Is.EqualTo(new WeighingResult { Assert.That(await Scale!.Weigh(), Is.EqualTo(new WeighingResult {
Weight = 1235, WeighingId = "1", Weight = 1235, WeighingId = "1",
FullWeighingId = $"2020-10-17/1", FullWeighingId = $"2020-10-17/1",
Date = new DateOnly(2020, 10, 17), Time = new TimeOnly(14, 23), Date = new DateOnly(2020, 10, 17), Time = new TimeOnly(14, 23),
})); }));
Mock!.Weight = 3335; Mock.Weight = 3335;
Assert.That(await Scale!.Weigh(), Is.EqualTo(new WeighingResult { Assert.That(await Scale!.Weigh(), Is.EqualTo(new WeighingResult {
Weight = 3335, WeighingId = "2", Weight = 3335, WeighingId = "2",
FullWeighingId = $"2020-10-17/2", FullWeighingId = $"2020-10-17/2",
Date = new DateOnly(2020, 10, 17), Time = new TimeOnly(14, 23), Date = new DateOnly(2020, 10, 17), Time = new TimeOnly(14, 23),
})); }));
Mock!.Weight = 6420; Mock.Weight = 6420;
Assert.That(await Scale!.Weigh(), Is.EqualTo(new WeighingResult { Assert.That(await Scale!.Weigh(), Is.EqualTo(new WeighingResult {
Weight = 6420, WeighingId = "3", Weight = 6420, WeighingId = "3",
FullWeighingId = $"2020-10-17/3", FullWeighingId = $"2020-10-17/3",
@ -105,39 +66,39 @@ namespace Tests.WeighingTests {
[Test] [Test]
public void Test_03_Moving() { public void Test_03_Moving() {
Mock!.Weight = 1_000; Mock.Weight = 1_000;
Mock!.Error = "moving"; Mock.Error = "moving";
IOException ex = Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh()); IOException ex = Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh());
Assert.That(ex.Message, Contains.Substring("Waage in Bewegung")); Assert.That(ex.Message, Contains.Substring("Waage in Bewegung"));
} }
[Test] [Test]
public void Test_04_Overloaded() { public void Test_04_Overloaded() {
Mock!.Weight = 10_000; Mock.Weight = 10_000;
Mock!.Error = "overloaded"; Mock.Error = "overloaded";
IOException ex = Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh()); IOException ex = Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh());
Assert.That(ex.Message, Contains.Substring("Waage in Überlast")); Assert.That(ex.Message, Contains.Substring("Waage in Überlast"));
} }
[Test] [Test]
public void Test_05_InvalidResponse() { public void Test_05_InvalidResponse() {
Mock!.Weight = 1_000; Mock.Weight = 1_000;
Mock!.Error = "invalid"; Mock.Error = "invalid";
Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh()); Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh());
} }
[Test] [Test]
public void Test_06_InvalidCrc() { public void Test_06_InvalidCrc() {
Mock!.Weight = 1_000; Mock.Weight = 1_000;
Mock!.Error = "crc"; Mock.Error = "crc";
IOException ex = Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh()); IOException ex = Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh());
Assert.That(ex.Message, Contains.Substring("Invalid CRC16 checksum")); Assert.That(ex.Message, Contains.Substring("Invalid CRC16 checksum"));
} }
[Test] [Test]
public void Test_07_InvalidUnit() { public void Test_07_InvalidUnit() {
Mock!.Weight = 1_000; Mock.Weight = 1_000;
Mock!.Error = "unit"; Mock.Error = "unit";
IOException ex = Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh()); IOException ex = Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh());
} }
} }

View File

@ -4,81 +4,39 @@ namespace Tests.WeighingTests {
[TestFixture] [TestFixture]
class ScaleTestMatzenIT3000A { class ScaleTestMatzenIT3000A {
private MockScale? Mock; private MockScale Mock;
private SysTecITScale? Scale; private SysTecITScale Scale;
private static (string, bool) ScaleHandler(string req, int weight, string? error, int identNr) {
var modes = error?.Split(';') ?? [];
var overloaded = modes.Contains("overloaded");
var moving = modes.Contains("moving");
var invalid = modes.Contains("invalid");
var crc = modes.Contains("crc");
var unit = modes.Contains("unit");
if (invalid) {
return ("abcd\r\n", false);
} else if (!req.StartsWith('<') || !req.EndsWith('>')) {
return ("<31>\r\n", false);
}
req = req[1..^1];
bool incr;
if (req.Length > 3) {
return ("<32>\r\n", false);
} else if (req.StartsWith("RN")) {
incr = true;
} else if (req.StartsWith("RM")) {
incr = false;
} else {
return ("<32>\r\n", false);
}
if (overloaded) {
return ("<12>\r\n", false);
} else if (weight == 0) {
incr = false;
}
if (moving && incr)
return ("<13>\r\n", false);
string data = $"00{(moving ? 1 : 0)}0{new DateTime(2020, 10, 15, 12, 34, 0):dd.MM.yyHH:mm}{(incr ? identNr : 0),4}1" +
$"{weight,8}{0,8}{weight,8}{(unit ? "lb" : "kg")} {"1",3}";
ushort checksum = Elwig.Helpers.Utils.CalcCrc16Modbus(data);
if (crc) checksum += 10;
return ($"<{data}{checksum,8}>\r\n", incr);
}
[OneTimeSetUp] [OneTimeSetUp]
public void SetupScale() { public void SetupScale() {
Mock = new CommandMockScale(12345, ScaleHandler); Mock = new CommandMockScale(12345, ScaleHandlers.Handle_IT3000A);
Scale = new("1", "IT3000A", "tcp://127.0.0.1:12345"); Scale = new("1", "IT3000A", "tcp://127.0.0.1:12345");
} }
[OneTimeTearDown] [OneTimeTearDown]
public void TeardownScale() { public void TeardownScale() {
Mock?.Dispose(); Mock.Dispose();
Scale?.Dispose(); Scale.Dispose();
} }
[SetUp] [SetUp]
public void ResetScale() { public void ResetScale() {
Mock!.IdentNr = 0; Mock.IdentNr = 0;
Mock!.Weight = 0; Mock.Weight = 0;
Mock!.Error = null; Mock.Error = null;
} }
[Test] [Test]
public async Task Test_01_CurrentWeight() { public async Task Test_01_CurrentWeight() {
Mock!.Weight = 1234; Mock.Weight = 1234;
Assert.That(await Scale!.GetCurrentWeight(), Is.EqualTo(new WeighingResult { Assert.That(await Scale!.GetCurrentWeight(), Is.EqualTo(new WeighingResult {
Weight = 1234, Date = new DateOnly(2020, 10, 15), Time = new TimeOnly(12, 34), Weight = 1234, Date = new DateOnly(2020, 10, 15), Time = new TimeOnly(12, 34),
})); }));
Mock!.Weight = 1235; Mock.Weight = 1235;
Assert.That(await Scale!.GetCurrentWeight(), Is.EqualTo(new WeighingResult { Assert.That(await Scale!.GetCurrentWeight(), Is.EqualTo(new WeighingResult {
Weight = 1235, Date = new DateOnly(2020, 10, 15), Time = new TimeOnly(12, 34), Weight = 1235, Date = new DateOnly(2020, 10, 15), Time = new TimeOnly(12, 34),
})); }));
Mock!.Weight = 1236; Mock.Weight = 1236;
Assert.That(await Scale!.GetCurrentWeight(), Is.EqualTo(new WeighingResult { Assert.That(await Scale!.GetCurrentWeight(), Is.EqualTo(new WeighingResult {
Weight = 1236, Date = new DateOnly(2020, 10, 15), Time = new TimeOnly(12, 34), Weight = 1236, Date = new DateOnly(2020, 10, 15), Time = new TimeOnly(12, 34),
})); }));
@ -86,19 +44,19 @@ namespace Tests.WeighingTests {
[Test] [Test]
public async Task Test_02_Normal() { public async Task Test_02_Normal() {
Mock!.Weight = 1234; Mock.Weight = 1234;
Assert.That(await Scale!.Weigh(), Is.EqualTo(new WeighingResult { Assert.That(await Scale!.Weigh(), Is.EqualTo(new WeighingResult {
Weight = 1234, WeighingId = "1", Weight = 1234, WeighingId = "1",
FullWeighingId = $"2020-10-15/1", FullWeighingId = $"2020-10-15/1",
Date = new DateOnly(2020, 10, 15), Time = new TimeOnly(12, 34), Date = new DateOnly(2020, 10, 15), Time = new TimeOnly(12, 34),
})); }));
Mock!.Weight = 3333; Mock.Weight = 3333;
Assert.That(await Scale!.Weigh(), Is.EqualTo(new WeighingResult { Assert.That(await Scale!.Weigh(), Is.EqualTo(new WeighingResult {
Weight = 3333, WeighingId = "2", Weight = 3333, WeighingId = "2",
FullWeighingId = $"2020-10-15/2", FullWeighingId = $"2020-10-15/2",
Date = new DateOnly(2020, 10, 15), Time = new TimeOnly(12, 34), Date = new DateOnly(2020, 10, 15), Time = new TimeOnly(12, 34),
})); }));
Mock!.Weight = 4321; Mock.Weight = 4321;
Assert.That(await Scale!.Weigh(), Is.EqualTo(new WeighingResult { Assert.That(await Scale!.Weigh(), Is.EqualTo(new WeighingResult {
Weight = 4321, WeighingId = "3", Weight = 4321, WeighingId = "3",
FullWeighingId = $"2020-10-15/3", FullWeighingId = $"2020-10-15/3",
@ -108,39 +66,39 @@ namespace Tests.WeighingTests {
[Test] [Test]
public void Test_03_Moving() { public void Test_03_Moving() {
Mock!.Weight = 1_000; Mock.Weight = 1_000;
Mock!.Error = "moving"; Mock.Error = "moving";
IOException ex = Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh()); IOException ex = Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh());
Assert.That(ex.Message, Contains.Substring("Waage in Bewegung")); Assert.That(ex.Message, Contains.Substring("Waage in Bewegung"));
} }
[Test] [Test]
public void Test_04_Overloaded() { public void Test_04_Overloaded() {
Mock!.Weight = 10_000; Mock.Weight = 10_000;
Mock!.Error = "overloaded"; Mock.Error = "overloaded";
IOException ex = Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh()); IOException ex = Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh());
Assert.That(ex.Message, Contains.Substring("Waage in Überlast")); Assert.That(ex.Message, Contains.Substring("Waage in Überlast"));
} }
[Test] [Test]
public void Test_05_InvalidResponse() { public void Test_05_InvalidResponse() {
Mock!.Weight = 1_000; Mock.Weight = 1_000;
Mock!.Error = "invalid"; Mock.Error = "invalid";
Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh()); Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh());
} }
[Test] [Test]
public void Test_06_InvalidCrc() { public void Test_06_InvalidCrc() {
Mock!.Weight = 1_000; Mock.Weight = 1_000;
Mock!.Error = "crc"; Mock.Error = "crc";
IOException ex = Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh()); IOException ex = Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh());
Assert.That(ex.Message, Contains.Substring("Invalid CRC16 checksum")); Assert.That(ex.Message, Contains.Substring("Invalid CRC16 checksum"));
} }
[Test] [Test]
public void Test_07_InvalidUnit() { public void Test_07_InvalidUnit() {
Mock!.Weight = 1_000; Mock.Weight = 1_000;
Mock!.Error = "unit"; Mock.Error = "unit";
IOException ex = Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh()); IOException ex = Assert.ThrowsAsync<IOException>(async () => await Scale!.Weigh());
} }
} }

View File

@ -4,10 +4,10 @@ namespace Tests.WeighingTests {
[TestFixture] [TestFixture]
class ScaleTestWolkersdorfIT6000E { class ScaleTestWolkersdorfIT6000E {
private MockScale? MockA; private MockScale MockA;
private MockScale? MockB; private MockScale MockB;
private SysTecITScale? ScaleA; private SysTecITScale ScaleA;
private SysTecITScale? ScaleB; private SysTecITScale ScaleB;
private static (string, bool) ScaleHandler(string req, int weight, string? error, int identNr, string terminalNr) { private static (string, bool) ScaleHandler(string req, int weight, string? error, int identNr, string terminalNr) {
var modes = error?.Split(';') ?? []; var modes = error?.Split(';') ?? [];
@ -58,37 +58,37 @@ namespace Tests.WeighingTests {
[OneTimeTearDown] [OneTimeTearDown]
public void TeardownScale() { public void TeardownScale() {
MockA?.Dispose(); MockA.Dispose();
MockB?.Dispose(); MockB.Dispose();
ScaleA?.Dispose(); ScaleA.Dispose();
ScaleB?.Dispose(); ScaleB.Dispose();
} }
[SetUp] [SetUp]
public void ResetScale() { public void ResetScale() {
MockA!.IdentNr = 0; MockA.IdentNr = 0;
MockA!.Weight = 0; MockA.Weight = 0;
MockA!.Error = null; MockA.Error = null;
MockB!.IdentNr = 0; MockB.IdentNr = 0;
MockB!.Weight = 0; MockB.Weight = 0;
MockB!.Error = null; MockB.Error = null;
} }
[Test] [Test]
public async Task Test_01_CurrentWeight() { public async Task Test_01_CurrentWeight() {
MockA!.Weight = 1234; MockA.Weight = 1234;
Assert.That(await ScaleA!.GetCurrentWeight(), Is.EqualTo(new WeighingResult { Assert.That(await ScaleA!.GetCurrentWeight(), Is.EqualTo(new WeighingResult {
Weight = 1234, Date = new DateOnly(2020, 10, 8), Time = new TimeOnly(8, 47), Weight = 1234, Date = new DateOnly(2020, 10, 8), Time = new TimeOnly(8, 47),
})); }));
MockB!.Weight = 3456; MockB.Weight = 3456;
Assert.That(await ScaleB!.GetCurrentWeight(), Is.EqualTo(new WeighingResult { Assert.That(await ScaleB!.GetCurrentWeight(), Is.EqualTo(new WeighingResult {
Weight = 3456, Date = new DateOnly(2020, 10, 8), Time = new TimeOnly(8, 47), Weight = 3456, Date = new DateOnly(2020, 10, 8), Time = new TimeOnly(8, 47),
})); }));
MockA!.Weight = 1236; MockA.Weight = 1236;
Assert.That(await ScaleA!.GetCurrentWeight(), Is.EqualTo(new WeighingResult { Assert.That(await ScaleA!.GetCurrentWeight(), Is.EqualTo(new WeighingResult {
Weight = 1236, Date = new DateOnly(2020, 10, 8), Time = new TimeOnly(8, 47), Weight = 1236, Date = new DateOnly(2020, 10, 8), Time = new TimeOnly(8, 47),
})); }));
MockB!.Weight = 3457; MockB.Weight = 3457;
Assert.That(await ScaleB!.GetCurrentWeight(), Is.EqualTo(new WeighingResult { Assert.That(await ScaleB!.GetCurrentWeight(), Is.EqualTo(new WeighingResult {
Weight = 3457, Date = new DateOnly(2020, 10, 8), Time = new TimeOnly(8, 47), Weight = 3457, Date = new DateOnly(2020, 10, 8), Time = new TimeOnly(8, 47),
})); }));
@ -96,25 +96,25 @@ namespace Tests.WeighingTests {
[Test] [Test]
public async Task Test_02_Normal() { public async Task Test_02_Normal() {
MockA!.Weight = 1234; MockA.Weight = 1234;
Assert.That(await ScaleA!.Weigh(), Is.EqualTo(new WeighingResult { Assert.That(await ScaleA!.Weigh(), Is.EqualTo(new WeighingResult {
Weight = 1234, WeighingId = "1", Weight = 1234, WeighingId = "1",
FullWeighingId = $"2020-10-08/1", FullWeighingId = $"2020-10-08/1",
Date = new DateOnly(2020, 10, 8), Time = new TimeOnly(8, 47), Date = new DateOnly(2020, 10, 8), Time = new TimeOnly(8, 47),
})); }));
MockB!.Weight = 3456; MockB.Weight = 3456;
Assert.That(await ScaleB!.Weigh(), Is.EqualTo(new WeighingResult { Assert.That(await ScaleB!.Weigh(), Is.EqualTo(new WeighingResult {
Weight = 3456, WeighingId = "1", Weight = 3456, WeighingId = "1",
FullWeighingId = $"2020-10-08/1", FullWeighingId = $"2020-10-08/1",
Date = new DateOnly(2020, 10, 8), Time = new TimeOnly(8, 47), Date = new DateOnly(2020, 10, 8), Time = new TimeOnly(8, 47),
})); }));
MockA!.Weight = 4321; MockA.Weight = 4321;
Assert.That(await ScaleA!.Weigh(), Is.EqualTo(new WeighingResult { Assert.That(await ScaleA!.Weigh(), Is.EqualTo(new WeighingResult {
Weight = 4321, WeighingId = "2", Weight = 4321, WeighingId = "2",
FullWeighingId = $"2020-10-08/2", FullWeighingId = $"2020-10-08/2",
Date = new DateOnly(2020, 10, 8), Time = new TimeOnly(8, 47), Date = new DateOnly(2020, 10, 8), Time = new TimeOnly(8, 47),
})); }));
MockB!.Weight = 3333; MockB.Weight = 3333;
Assert.That(await ScaleB!.Weigh(), Is.EqualTo(new WeighingResult { Assert.That(await ScaleB!.Weigh(), Is.EqualTo(new WeighingResult {
Weight = 3333, WeighingId = "2", Weight = 3333, WeighingId = "2",
FullWeighingId = $"2020-10-08/2", FullWeighingId = $"2020-10-08/2",
@ -124,39 +124,39 @@ namespace Tests.WeighingTests {
[Test] [Test]
public void Test_03_Moving() { public void Test_03_Moving() {
MockA!.Weight = 1_000; MockA.Weight = 1_000;
MockA!.Error = "moving"; MockA.Error = "moving";
IOException ex = Assert.ThrowsAsync<IOException>(async () => await ScaleA!.Weigh()); IOException ex = Assert.ThrowsAsync<IOException>(async () => await ScaleA!.Weigh());
Assert.That(ex.Message, Contains.Substring("Waage in Bewegung")); Assert.That(ex.Message, Contains.Substring("Waage in Bewegung"));
} }
[Test] [Test]
public void Test_04_Overloaded() { public void Test_04_Overloaded() {
MockA!.Weight = 10_000; MockA.Weight = 10_000;
MockA!.Error = "overloaded"; MockA.Error = "overloaded";
IOException ex = Assert.ThrowsAsync<IOException>(async () => await ScaleA!.Weigh()); IOException ex = Assert.ThrowsAsync<IOException>(async () => await ScaleA!.Weigh());
Assert.That(ex.Message, Contains.Substring("Waage in Überlast")); Assert.That(ex.Message, Contains.Substring("Waage in Überlast"));
} }
[Test] [Test]
public void Test_05_InvalidResponse() { public void Test_05_InvalidResponse() {
MockA!.Weight = 1_000; MockA.Weight = 1_000;
MockA!.Error = "invalid"; MockA.Error = "invalid";
Assert.ThrowsAsync<IOException>(async () => await ScaleA!.Weigh()); Assert.ThrowsAsync<IOException>(async () => await ScaleA!.Weigh());
} }
[Test] [Test]
public void Test_06_InvalidCrc() { public void Test_06_InvalidCrc() {
MockA!.Weight = 1_000; MockA.Weight = 1_000;
MockA!.Error = "crc"; MockA.Error = "crc";
IOException ex = Assert.ThrowsAsync<IOException>(async () => await ScaleA!.Weigh()); IOException ex = Assert.ThrowsAsync<IOException>(async () => await ScaleA!.Weigh());
Assert.That(ex.Message, Contains.Substring("Invalid CRC16 checksum")); Assert.That(ex.Message, Contains.Substring("Invalid CRC16 checksum"));
} }
[Test] [Test]
public void Test_07_InvalidUnit() { public void Test_07_InvalidUnit() {
MockA!.Weight = 1_000; MockA.Weight = 1_000;
MockA!.Error = "unit"; MockA.Error = "unit";
IOException ex = Assert.ThrowsAsync<IOException>(async () => await ScaleA!.Weigh()); IOException ex = Assert.ThrowsAsync<IOException>(async () => await ScaleA!.Weigh());
} }
} }