public void Get()
        {
            // Arrange
            long accountId = 1;

            var fakeNowProvider = new FakeNowProvider();

            fakeNowProvider.Now = new DateTime(2000, 12, 12, 12, 12, 0);

            ITimeWarpStateCalculator calc = FakeTimeCalculatorFactory.GetTimeWarpStateCalculator();
            var account      = new Account(accountId, "ashley", "*****@*****.**", "beans");
            var timeWarpUser = new TimeWarpUser(account, calc);

            var usersCache = new UsersCache(new[] { timeWarpUser });

            var controller = new UserStateController(usersCache, fakeNowProvider, new FakeTimeWarpStatePersistence());

            //act
            fakeNowProvider.Now = new DateTime(2000, 12, 12, 12, 12, 0, 5);
            var result = controller.Get(accountId);

            // Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(accountId, result.AccountId);
            Assert.AreEqual(Public.Models.v001.TimeWarpState.None, result.State);
        }
        public void TestInitialize()
        {
            this.getUserState     = new Mock <IQueryHandler <GetUserStateQuery, UserState> >();
            this.requesterContext = new Mock <IRequesterContext>();
            this.timestampCreator = new Mock <ITimestampCreator>();

            this.timestampCreator.Setup(v => v.Now()).Returns(Now);

            this.target = new UserStateController(this.getUserState.Object, this.timestampCreator.Object, this.requesterContext.Object);
        }
        protected UserControllerTestBase()
        {
            FakeNowProvider = new FakeNowProvider {
                Now = new DateTime(2000, 12, 12, 12, 12, 0)
            };
            var usersCache            = new MockUserStateRepository();
            var calc                  = FakeTimeCalculatorFactory.GetTimeWarpStateCalculator();
            var account               = new Account(AccountId, TestHelper.NameMock, TestHelper.EmailAddressMock, AccountType.Full);
            var accountRepository     = new MockAccountsRepository();
            var authenticationManager = new MockTimeWarpAuthenticationManager();
            var token                 = authenticationManager.AddUser(new AccountPassword(account, "bean"));

            accountRepository.Add(account);

            var timeWarpUser = new UserStateManager(calc, usersCache);

            Request = HttpRequestMock.MockRequest();
            Request.Headers.Add("login-token", token);

            Controller = new UserStateController(timeWarpUser, FakeNowProvider, accountRepository, authenticationManager);
        }
        public void Post()
        {
            // Arrange
            long accountId = 1;

            var fakeNowProvider = new FakeNowProvider();

            fakeNowProvider.Now = new DateTime(2000, 12, 12, 12, 12, 0);

            ITimeWarpStateCalculator calc = FakeTimeCalculatorFactory.GetTimeWarpStateCalculator();
            var account      = new Account(accountId, "ashley", "*****@*****.**", "beans");
            var timeWarpUser = new TimeWarpUser(account, calc);

            var usersCache = new UsersCache(new[] { timeWarpUser });

            var persistence = new FakeTimeWarpStatePersistence();


            var controller = new UserStateController(usersCache, fakeNowProvider, persistence);

            //act

            controller.Post(accountId, TimeWarpCommand.Rest);

            fakeNowProvider.Now = new DateTime(2000, 12, 12, 12, 12, 0, 5);
            var result = controller.Get(accountId);

            // Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(accountId, result.AccountId);
            Assert.AreEqual(Public.Models.v001.TimeWarpState.Resting, result.State);
            Assert.AreEqual(TimeSpan.FromMilliseconds(095), result.TimeLeft);

            Assert.AreEqual(0.050000000000000044d, result.Progress);
            Assert.AreEqual(new DateTime(2000, 12, 12, 12, 12, 0, 0), result.PeriodStartTime);
        }