public void WithFullPayload() { // Arrange var expected = new AlarmActionRequestWrapper { AlarmActionRequest = new AlarmActionRequest { AlarmActionFilter = new AlarmActionFilter { AlarmGuid = new MultipleCVAlarmGuidFilter { CurrentValues = new[] { "E95A9F3E-A107-4277-AB2E-2A9C6E5525C8" } } }, Command = "2", Parameters = new Parameters { ConditionSequenceNumber = "5", AlarmResponseText = "response" } } }; // Act var actual = _replySerializer.Deserialize(FullXmlMessage); // Assert DtoAssert.AreEqual(expected, actual); }
public void WithEmptyReply() { // Arrange const string message = "<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<P2000Request />"; var expected = new AlarmActionRequestWrapper(); // Act var actual = _replySerializer.Deserialize(message); // Assert DtoAssert.AreEqual(expected, actual); }
/// <summary> /// Used to ack, respond, or complete an alarm. /// </summary> /// <param name="userName">Name of the user.</param> /// <param name="sessionGuid">The session GUID.</param> /// <param name="alarmGuids">An IEnumerable of Tuples that contain the alarm guid and the /// associated Condition Sequence Number</param> /// <param name="alarmState">State of the alarm.</param> /// <param name="response">The response.</param> /// <returns></returns> /// <exception cref="ArgumentOutOfRangeException">Thrown if <paramref name="alarmState"/> is not one /// of the following: 1 = completed, 2 = responding, 3 = acknowledged.</exception> public AlarmActionReply AlarmAction(string userName, string sessionGuid, IEnumerable<AlarmIdSequenceTuple> alarmGuids, int alarmState, string response) { AlarmIdSequenceTuple[] alarmIdSequenceNumberTuples = alarmGuids.ToArray(); if (userName == null) throw new ArgumentNullException("userName"); if (sessionGuid == null) throw new ArgumentNullException("sessionGuid"); if (alarmGuids == null) throw new ArgumentNullException("alarmGuids"); if (alarmState < 0 || alarmState > 3) throw new ArgumentOutOfRangeException("alarmState"); if (response == null) throw new ArgumentNullException("response"); var request = new AlarmActionRequestWrapper { AlarmActionRequest = new AlarmActionRequest { AlarmActionFilter = new AlarmActionFilter { AlarmGuid = new MultipleCVAlarmGuidFilter { CurrentValues = alarmIdSequenceNumberTuples.Select(x => x.Item1.ToString()) .ToArray() } }, Command = alarmState.ToString(CultureInfo.InvariantCulture), Parameters = new Parameters() } }; // If the Guid/SequenceNumber array only contains 1 value, then the sequence number // must be passed to the P2000. if (alarmIdSequenceNumberTuples.Count() == 1) { request.AlarmActionRequest.Parameters.ConditionSequenceNumber = alarmIdSequenceNumberTuples[0].Item2.ToString(CultureInfo.InvariantCulture); } if (alarmState == RespondingState) { request.AlarmActionRequest.Parameters.AlarmResponseText = response; } string serializedRequest = XmlSerializer<AlarmActionRequestWrapper>.Instance.Serialize(request); P2000ReturnStructure responseStructure = _alarmServiceProxy.Invoke(proxy => proxy.AlarmAction(userName, sessionGuid, serializedRequest)); return XmlSerializer<AlarmActionReplyWrapper>.Instance.Deserialize(responseStructure.XmlDoc).AlarmActionReply; }