// MARK: Claim public void claimReward(int id) { Debug.Log("Claiming reward for objective " + id); var request = new Objectives.ClaimRequest(); request.id = id; interactor.doClaim(request); }
// MARK: Claim public void doClaim(Objectives.ClaimRequest request) { var response = new Objectives.ClaimResponse(); //invalid index if (request.id >= this.fetchedObjectives.Length) { response.isRewardGranted = false; this.presenter.presentClaim(response); return; } //max step not reached if (this.fetchedObjectives[request.id].currentStep != this.fetchedObjectives[request.id].numberOfSteps) { response.isRewardGranted = false; this.presenter.presentClaim(response); return; } var reward = this.fetchedObjectives[request.id].reward; LocalMoneyWorker.Instance.Sell(reward, delegate(int amount) { //everything is fine, we can update claim status //fetchedObjectives[request.id].isRewardClaimed = true; ObjectivesWorker.UpdateStatus(request.id, fetchedSet, true); //since we flushed data we fetch objectives again var fetchRequest = new Objectives.FetchRequest(); fetchRequest.numberOfObjectives = numberOfObjectives; fetchRequest.set = fetchedSet; doFetch(fetchRequest); //if all Game Objectives are complete and claimed, we should autoflush if (fetchedSet == Objectives.ObjectiveSet.Game) { bool shouldAutoFlush = true; foreach (var objective in fetchedObjectives) { if (false == objective.isRewardClaimed) { shouldAutoFlush = false; } } if (shouldAutoFlush) { var flushRequest = new Objectives.FlushRequest(); doFlush(flushRequest); } } response.isRewardGranted = true; this.presenter.presentClaim(response); }); }
public void test_givenDefaultParameters_when_SCENARIO_4_ClaimCalledWithoutPermission_thenErrorIsReturned() { var request = new Objectives.ClaimRequest(); request.id = 0; //objectives progress is 0 thus cannot claim buildFetchRequest(3, Objectives.ObjectiveSet.Game); sut.doClaim(request); Assert.IsTrue(spy.presentClaimCalled); Assert.IsFalse(spy.lastClaimResponse.isRewardGranted); }
public void test_givenDefaultParameters_when_SCENARIO_3_ReadStepUntilMaxStepClaim_thenAllObjectiveSetIsFlushed() { var request = new Objectives.StepRequest(); var numberOfItems = 3; //READ buildFetchRequest(numberOfItems, Objectives.ObjectiveSet.Game); Assert.AreEqual(spy.lastFetchResponse.objectives[0].id, 0); Assert.AreEqual(spy.lastFetchResponse.objectives[1].id, 1); Assert.AreEqual(spy.lastFetchResponse.objectives[2].id, 2); //STEP ALL TO MAX for (int index = 0; index < numberOfItems; index++) { request.id = index; sut.doStep(request); int MAX = spy.lastStepResponse.objective.numberOfSteps; Assert.AreEqual(Mathf.Min(1, MAX), spy.lastStepResponse.objective.currentStep); for (int i = 2; i < MAX + 5; i++) { sut.doStep(request); Assert.AreEqual(Mathf.Min(i, MAX), spy.lastStepResponse.objective.currentStep); } Assert.IsTrue(spy.presentStepCalled); Assert.IsTrue(spy.lastStepResponse.objective.numberOfSteps == spy.lastStepResponse.objective.currentStep); } //CLAIM ALL SHOULD TRIGGER FLUSH FOR GAME var claimRequest = new Objectives.ClaimRequest(); for (int index = 0; index < numberOfItems; index++) { claimRequest.id = index; sut.doClaim(claimRequest); Assert.IsTrue(spy.lastClaimResponse.isRewardGranted); } Assert.IsTrue(spy.presentFlushCalled); //READ 2 buildFetchRequest(numberOfItems, Objectives.ObjectiveSet.Game); Assert.AreEqual(spy.lastFetchResponse.objectives[0].id, 3); Assert.AreEqual(spy.lastFetchResponse.objectives[1].id, 4); Assert.AreEqual(spy.lastFetchResponse.objectives[2].id, 5); }