public void OnOpenResponseFromServer(IOpenTimedChestResponse i_response, ITimedChestPM i_chestPM, ITimedChestData i_data)
        {
            if (i_response.IsOpeningVerified())
            {
                IDungeonReward reward = RewardSpawner.Create(i_response.GetReward());
                reward.Award();
                UpdateNextAvailableTime(i_data.GetId(), i_response.GetNextAvailableTime());

                i_chestPM.ShowOpenReward(reward);
                i_chestPM.UpdateProperties();
            }
        }
        public void WhenChestOpenResponseIsReceived_ChestPM_RewardGetsSet_And_UpdatePropertiesCalled()
        {
            ITimedChestPM           mockPM       = Substitute.For <ITimedChestPM>();
            IOpenTimedChestResponse mockResponse = Substitute.For <IOpenTimedChestResponse>();

            mockResponse.IsOpeningVerified().Returns(true);

            systemUnderTest.OnOpenResponseFromServer(mockResponse, mockPM, Substitute.For <ITimedChestData>());

            mockPM.Received().ShowOpenReward(Arg.Any <IDungeonReward>());
            mockPM.Received().UpdateProperties();
        }
        public void WhenChestOpenResponseIsReceived_SpawnerCreatesAndAwardsReward()
        {
            IOpenTimedChestResponse mockResponse = Substitute.For <IOpenTimedChestResponse>();

            mockResponse.GetReward().Returns(Substitute.For <IGameRewardData>());
            mockResponse.IsOpeningVerified().Returns(true);
            IDungeonReward mockReward = Substitute.For <IDungeonReward>();

            MockRewardSpawner.Create(Arg.Any <IGameRewardData>()).Returns(mockReward);

            systemUnderTest.OnOpenResponseFromServer(mockResponse, Substitute.For <ITimedChestPM>(), Substitute.For <ITimedChestData>());

            MockRewardSpawner.Received().Create(Arg.Any <IGameRewardData>());
            mockReward.Received().Award();
        }
        public void WhenChestOpenResponseIsReceived_ChestsNextAvailableTime_IsUpdatedInSaveData()
        {
            IOpenTimedChestResponse mockResponse = Substitute.For <IOpenTimedChestResponse>();

            mockResponse.IsOpeningVerified().Returns(true);
            mockResponse.GetNextAvailableTime().Returns(1000);

            ITimedChestData mockData = Substitute.For <ITimedChestData>();

            mockData.GetId().Returns("TestId");

            systemUnderTest.SaveData = new Dictionary <string, ITimedChestSaveDataEntry>()
            {
                { "TestId", new TimedChestSaveDataEntry()
                  {
                      NextAvailableTime = 0
                  } }
            };

            systemUnderTest.OnOpenResponseFromServer(mockResponse, Substitute.For <ITimedChestPM>(), mockData);

            Assert.AreEqual(1000, systemUnderTest.SaveData["TestId"].GetNextAvailableTime());
        }