StateParserFactoryTests.cs 4.45 KB
using Microsoft.Extensions.Logging.Abstractions;
using Rcs.Domain.Models.VDA5050.SEER;
using Rcs.Infrastructure.Mqtt.ParseFactory;
using Xunit;

namespace Rcs.Infrastructure.Tests;

public class StateParserFactoryTests
{
    [Fact]
    public void ParseState_SeerPayloadWithDynamicInformation_ShouldSucceed()
    {
        var payload = """
                      {
                        "headerId": 1314,
                        "timestamp": "2024-07-10T17:25:03.176Z",
                        "version": "2.0.0",
                        "manufacturer": "SEER",
                        "serialNumber": "ROBOT-001",
                        "orderId": "5201314",
                        "orderUpdateId": 0,
                        "lastNodeId": "",
                        "lastNodeSequenceId": 0,
                        "nodeStates": [],
                        "edgeStates": [],
                        "agvPosition": {
                          "deviationRange": 0,
                          "localizationScore": 0,
                          "mapDescription": "",
                          "mapId": "",
                          "positionInitialized": false,
                          "theta": 0,
                          "x": 0,
                          "y": 0
                        },
                        "batteryState": {
                          "batteryCharge": 0,
                          "batteryHealth": 0,
                          "batteryVoltage": 0,
                          "charging": false,
                          "reach": 0
                        },
                        "driving": false,
                        "forkState": {
                          "forkHeight": 0
                        },
                        "errors": [
                          {
                            "errorType": "57300",
                            "errorLevel": "WARNING",
                            "errorReferences": [
                              { "referenceKey": "timestamp", "referenceValue": "1721196285" }
                            ],
                            "errorDescription": "script cancel"
                          }
                        ],
                        "information": [
                          {
                            "infoType": "script",
                            "infoLevel": "INFO",
                            "infoReferences": [
                              {
                                "referenceKey": "agv_speed",
                                "referenceValue": { "rotate": 0.058059, "x": 0, "y": 0 }
                              },
                              {
                                "referenceKey": "args",
                                "referenceValue": { "operation": "WashStart" }
                              }
                            ],
                            "infoDescription": "info of script"
                          },
                          {
                            "infoType": "DI",
                            "infoLevel": "INFO",
                            "infoReferences": [
                              {
                                "referenceKey": "DI",
                                "referenceValue": [
                                  { "id": 0, "status": true },
                                  { "id": 1, "status": true }
                                ]
                              }
                            ],
                            "infoDescription": "info of DI"
                          }
                        ],
                        "operatingMode": "AUTOMATIC",
                        "paused": false,
                        "safetyState": { "eStop": "NONE", "fieldViolation": false },
                        "velocity": { "omega": 0, "vx": 0, "vy": 0 },
                        "waitingForInteractionZoneRelease": false,
                        "zoneSetId": ""
                      }
                      """;

        var factory = new StateParserFactory(NullLogger<StateParserFactory>.Instance);

        var state = factory.ParseState("SEER", payload);

        var seerState = Assert.IsType<State_SEER>(state);
        Assert.Equal(1314, seerState.HeaderId);
        Assert.Equal("5201314", seerState.OrderId);
        Assert.Equal("AUTOMATIC", seerState.OperatingMode);
        Assert.Equal("WARNING", Assert.Single(seerState.Errors).ErrorLevel);
        Assert.NotNull(seerState.ForkState);
        Assert.Equal(0, seerState.ForkState!.ForkHeight);
    }
}