public void Detach_WhenStateIsFailed_ThrowsError() { // Arrange Mock <IConnectionManager> manager = new Mock <IConnectionManager>(); Realtime.Channel target = new Realtime.Channel("test", "client", manager.Object); manager.Raise(c => c.MessageReceived += null, new ProtocolMessage(ProtocolMessage.MessageAction.Error)); // Act Assert.Throws <AblyException>(() => target.Detach()); }
public void Detach_IgnoresSubsequentDetaches() { // Arrange Mock <IConnectionManager> manager = new Mock <IConnectionManager>(); manager.SetupGet(c => c.IsActive).Returns(true); manager.Setup(c => c.Send(It.Is <ProtocolMessage>(m => m.Action == ProtocolMessage.MessageAction.Attach), null)) .Raises(c => c.MessageReceived += null, new ProtocolMessage(ProtocolMessage.MessageAction.Attached)); Realtime.Channel target = new Realtime.Channel("test", "client", manager.Object); List <ChannelState> states = new List <ChannelState>(); target.Attach(); target.ChannelStateChanged += (s, e) => states.Add(e.NewState); // Act target.Detach(); target.Detach(); // Assert Assert.Single <ChannelState>(states, c => c == ChannelState.Detaching); }
public void Detach_SendsDetachMessage() { // Arrange Mock <IConnectionManager> manager = new Mock <IConnectionManager>(); manager.SetupGet(c => c.IsActive).Returns(true); manager.Setup(c => c.Send(It.Is <ProtocolMessage>(m => m.Action == ProtocolMessage.MessageAction.Attach), null)) .Raises(c => c.MessageReceived += null, new ProtocolMessage(ProtocolMessage.MessageAction.Attached)); Realtime.Channel target = new Realtime.Channel("test", "client", manager.Object); target.Attach(); // Act target.Detach(); // Assert manager.Verify(c => c.Send(It.Is <ProtocolMessage>(message => message.Action == ProtocolMessage.MessageAction.Detach && message.Channel == target.Name), null), Times.Once()); }
public void Detach_DetachesSuccessfuly_WhenMessageDetachReceived() { // Arrange Mock <IConnectionManager> manager = new Mock <IConnectionManager>(); manager.SetupGet(c => c.IsActive).Returns(true); manager.Setup(c => c.Send(It.Is <ProtocolMessage>(m => m.Action == ProtocolMessage.MessageAction.Attach), null)) .Raises(c => c.MessageReceived += null, new ProtocolMessage(ProtocolMessage.MessageAction.Attached)); manager.Setup(c => c.Send(It.Is <ProtocolMessage>(m => m.Action == ProtocolMessage.MessageAction.Detach), null)) .Raises(c => c.MessageReceived += null, new ProtocolMessage(ProtocolMessage.MessageAction.Detached)); Realtime.Channel target = new Realtime.Channel("test", "client", manager.Object); target.Attach(); // Act target.Detach(); // Assert Assert.Equal(ChannelState.Detached, target.State); }
public void Detach_WhenAttaching_MovesStraightToDetaching() { // Arrange Mock <IConnectionManager> manager = new Mock <IConnectionManager>(); manager.SetupGet(c => c.IsActive).Returns(true); Task attachingTask = null; manager.Setup(c => c.Send(It.Is <ProtocolMessage>(m => m.Action == ProtocolMessage.MessageAction.Detach), null)) .Raises(c => c.MessageReceived += null, new ProtocolMessage(ProtocolMessage.MessageAction.Detached)); manager.Setup(c => c.Send(It.Is <ProtocolMessage>(m => m.Action == ProtocolMessage.MessageAction.Attach), null)) .Callback(() => attachingTask = Task.Factory.StartNew(() => Thread.Sleep(50)).ContinueWith(c => manager.Raise(cc => cc.MessageReceived += null, new ProtocolMessage(ProtocolMessage.MessageAction.Attached)))); Realtime.Channel target = new Realtime.Channel("test", "client", manager.Object); target.Attach(); // Act target.Detach(); attachingTask.Wait(); // Assert Assert.Equal(ChannelState.Detached, target.State); }