示例#1
0
    // 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);
    }
示例#2
0
    // 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);
    }