public void CreatePacketEndpointWhenFirstSubscriptionMade()
        {
            Subject.Network.Bridge.Instance subject = new Subject.Network.Bridge.Instance(_settings, _commandEndpointFactory, _packetEndpointFactory);

            using (subject.Readings.Subscribe())
            {
                A.CallTo(() => _packetEndpointFactory.CreateEndpoint(_settings)).MustHaveHappened(Repeated.Exactly.Once);
            }
        }
        public void DisposePacketEndpointWhenFirstSubscriptionDisposed()
        {
            Subject.Network.Packet.Endpoint.IInstance packetEndpoint = A.Fake<Subject.Network.Packet.Endpoint.IInstance>();
            A.CallTo(() => _packetEndpointFactory.CreateEndpoint(_settings)).Returns(packetEndpoint);

            Subject.Network.Bridge.Instance subject = new Subject.Network.Bridge.Instance(_settings, _commandEndpointFactory, _packetEndpointFactory);

            using (subject.Readings.Subscribe())
            {
                A.CallTo(() => _packetEndpointFactory.CreateEndpoint(_settings)).MustHaveHappened(Repeated.Exactly.Once);
            }

            A.CallTo(() => packetEndpoint.Dispose()).MustHaveHappened(Repeated.Exactly.Once);
        }
        public void CallSendOnCommandEndpointWhenGetDeviceRequestReceived()
        {
            Subject.Network.Command.Endpoint.IInstance commandEndpoint = A.Fake<Subject.Network.Command.Endpoint.IInstance>();
            A.CallTo(() => _commandEndpointFactory.CreateEndpoint(_settings)).Returns(commandEndpoint);
            Subject<Subject.Network.Command.IRequest> requests = new Subject<Subject.Network.Command.IRequest>();

            Subject.Network.Bridge.Instance subject = new Subject.Network.Bridge.Instance(_settings, _commandEndpointFactory, _packetEndpointFactory);
            
            Subject.Network.Command.Request.GetDevice request = new Subject.Network.Command.Request.GetDevice(0);
            subject.Send(request);
            
            A.CallTo(() => commandEndpoint.Send(request)).MustHaveHappened(Repeated.Exactly.Once);
        }
        public void CallSendOnCommandEndpointWhenSetUpdPushPortRequestReceived()
        {
            Subject.Network.Command.Endpoint.IInstance commandEndpoint = A.Fake<Subject.Network.Command.Endpoint.IInstance>();
            A.CallTo(() => _commandEndpointFactory.CreateEndpoint(_settings)).Returns(commandEndpoint);
            Subject<Subject.Network.Command.IRequest> requests = new Subject<Subject.Network.Command.IRequest>();

            Subject.Network.Bridge.Instance subject = new Subject.Network.Bridge.Instance(_settings, _commandEndpointFactory, _packetEndpointFactory);

            Subject.Network.Command.Request.SetUdpPushPort request = new Subject.Network.Command.Request.SetUdpPushPort(new IPEndPoint(IPAddress.Loopback, 1234));
            subject.Send(request);

            A.CallTo(() => commandEndpoint.Send(request)).MustHaveHappened(Repeated.Exactly.Once);
        }