public void TransitionToCaptureOnIsPerformedOnSuccess()
        {
            // given
            httpClient.SendTimeSyncRequest().Returns(x => CreateValidTimeResponse(currentTime, 10)); // always return valid response
            context.IsCaptureOn.Returns(true);                                                       // captureOn is true

            // when
            var target = new BeaconSendingTimeSyncState();

            target.Execute(context);

            // then
            context.Received(1).NextState = Arg.Any <BeaconSendingCaptureOnState>();
        }
        public void Setup()
        {
            currentTime      = 0;
            lastTimeSyncTime = -1;

            httpClient = Substitute.For <IHTTPClient>();
            context    = Substitute.For <IBeaconSendingContext>();
            context.GetHTTPClient().Returns(httpClient);

            // return true by default
            context.IsTimeSyncSupported.Returns(true);

            // current time getter
            context.CurrentTimestamp.Returns(x => { return(++currentTime); });

            // last time sycn getter + setter
            context.LastTimeSyncTime = Arg.Do <long>(x => lastTimeSyncTime = x);
            context.LastTimeSyncTime = lastTimeSyncTime; // init with -1

            // by default return erroneous responses
            httpClient.SendTimeSyncRequest()
            .Returns(new TimeSyncResponse(Substitute.For <ILogger>(), string.Empty, Response.HttpBadRequest, new Dictionary <string, List <string> >()));
        }