public function testReceivingChildrenOfDeletedFirstMemberWithDeepTree() { // NOTE: This tests what happen if my first advertising gets // deleted due to not paying fee. /* Setup ---------------------------------------------*/ DbEntityHelper::setCon(self::$propelCon); $promoter1 = DbEntityHelper::createMember(); $MYSELF = DbEntityHelper::createSignupMember($promoter1); $MYSELF_total = new TransactionTotalsAssertions($MYSELF, $this); $this->assertEquals($MYSELF->getFundsLevel(), Member::FUNDS_LEVEL1); /* Advertise 2 users ---------------------------------------------*/ $MYSELF_total->add(Transaction::REASON_ADVERTISED_LVL1); $franz = DbEntityHelper::createSignupMember($MYSELF); $WILL_NOT_PAY = DbEntityHelper::createSignupMember($MYSELF, false); /* WILL_NOT_PAY advertises 3 and these does either advertise a view ---------------------------------------------*/ $MYSELF_total->add(Transaction::REASON_ADVERTISED_LVL1); $MYSELF_total->add(Transaction::REASON_ADVERTISED_LVL2, 4); DbEntityHelper::createSignupMember($WILL_NOT_PAY); DbEntityHelper::createSignupMember($WILL_NOT_PAY); DbEntityHelper::createSignupMember($WILL_NOT_PAY); $deep1 = DbEntityHelper::createSignupMember($WILL_NOT_PAY); $deep1_lazy = DbEntityHelper::createSignupMember($WILL_NOT_PAY, false); $MYSELF_total->add(Transaction::REASON_ADVERTISED_INDIRECT, 2); $deep2 = DbEntityHelper::createSignupMember($deep1); DbEntityHelper::createSignupMember($deep1); DbEntityHelper::createSignupMember($deep1); DbEntityHelper::createSignupMember($deep1); $deep2_lazy = DbEntityHelper::createSignupMember($deep1, false); $MYSELF_total->add(Transaction::REASON_ADVERTISED_INDIRECT, 2); $deep3 = DbEntityHelper::createSignupMember($deep2, false); DbEntityHelper::createSignupMember($deep2); $WILL_NOT_PAY->deleteAndUpdateTree(self::$propelCon); DbEntityHelper::fireReceivedMemberFee($deep1_lazy, time()); DbEntityHelper::fireReceivedMemberFee($deep2_lazy, time()); DbEntityHelper::fireReceivedMemberFee($deep3, time()); // ---- assert - ME $MYSELF_total->assertTotals(); }
public function testSnowballModelLazyIncommingFeeExtensiv() { // NOTE: this is basically the exact same scenario as @see $this->testSnowballModel // with the only difference that the incomming of the member fee // happens lazy and in different order. Later advertised members does // pay earlier so that ReservedPaidEvents get created and triggered. /* Setup ---------------------------------------------*/ $now = time(); $promoter1 = DbEntityHelper::createMember(); $MYSELF = DbEntityHelper::createSignupMember($promoter1); $MYSELF_total = new TransactionTotalsAssertions($MYSELF, $this); $this->assertEquals($MYSELF->getFundsLevel(), Member::FUNDS_LEVEL1); /* Advertise 2 users ---------------------------------------------*/ $MYSELF_total->add(Transaction::REASON_ADVERTISED_LVL1, 2); $far_l1_1 = DbEntityHelper::createSignupMember($MYSELF, false); $bea_l1_2 = DbEntityHelper::createSignupMember($MYSELF, false); /* Advertise 1 more user - chris ---------------------------------------------*/ $MYSELF_total->add(Transaction::REASON_ADVERTISED_LVL2); $CHRIS_l1_3 = DbEntityHelper::createSignupMember($MYSELF, false); $CHRIS_total = new TransactionTotalsAssertions($CHRIS_l1_3, $this); /* chris advertise 1 user - dean ---------------------------------------------*/ $MYSELF_total->add(Transaction::REASON_ADVERTISED_INDIRECT); $CHRIS_total->add(Transaction::REASON_ADVERTISED_LVL1); $DEAN_l2_1 = DbEntityHelper::createSignupMember($CHRIS_l1_3, false); /* chris advertise 1 user - emi ---------------------------------------------*/ $MYSELF_total->add(Transaction::REASON_ADVERTISED_INDIRECT); $CHRIS_total->add(Transaction::REASON_ADVERTISED_LVL1); $EMI_l2_2 = DbEntityHelper::createSignupMember($CHRIS_l1_3, false); /* dean advertise 1 user - franz ---------------------------------------------*/ $MYSELF_total->add(Transaction::REASON_ADVERTISED_INDIRECT); $FRANZ_l3_1 = DbEntityHelper::createSignupMember($DEAN_l2_1, false); $MYSELF_total->add(Transaction::REASON_ADVERTISED_INDIRECT, 3); $anonym1 = DbEntityHelper::createSignupMember($DEAN_l2_1, false); $anonym2 = DbEntityHelper::createSignupMember($EMI_l2_2, false); $anonym3 = DbEntityHelper::createSignupMember($EMI_l2_2, false); $CHRIS_total->add(Transaction::REASON_ADVERTISED_LVL2); $CHRIS_total->add(Transaction::REASON_ADVERTISED_INDIRECT, 4); $ALF_l2_3 = DbEntityHelper::createSignupMember($CHRIS_l1_3, false); $GUST_l3_1 = DbEntityHelper::createSignupMember($ALF_l2_3, false); $anonym4 = DbEntityHelper::createSignupMember($ALF_l2_3, false); $anonym5 = DbEntityHelper::createSignupMember($GUST_l3_1, false); $anonym6 = DbEntityHelper::createSignupMember($GUST_l3_1, false); /* fee incomming in different order for all users ---------------------------------------------*/ DbEntityHelper::fireReceivedMemberFee($anonym6, $now); DbEntityHelper::fireReceivedMemberFee($anonym5, $now); DbEntityHelper::fireReceivedMemberFee($anonym4, $now); DbEntityHelper::fireReceivedMemberFee($GUST_l3_1, $now); DbEntityHelper::fireReceivedMemberFee($anonym3, $now); DbEntityHelper::fireReceivedMemberFee($anonym2, $now); DbEntityHelper::fireReceivedMemberFee($anonym1, $now); DbEntityHelper::fireReceivedMemberFee($FRANZ_l3_1, $now); // the following order does matter. ALF has to be the third so that // MYSELF does not receive anynthing from his advertisings DbEntityHelper::fireReceivedMemberFee($DEAN_l2_1, $now); DbEntityHelper::fireReceivedMemberFee($EMI_l2_2, $now); DbEntityHelper::fireReceivedMemberFee($ALF_l2_3, $now); DbEntityHelper::fireReceivedMemberFee($bea_l1_2, $now); DbEntityHelper::fireReceivedMemberFee($far_l1_1, $now); // ---- assert - correct reserved paid events count $this->assertEquals(ReservedPaidEventQuery::create()->count(), 11); // ---- assert - ME got 10 since chris has not paid yet $MYSELF_total_before = new TransactionTotalsAssertions($MYSELF, $this); $MYSELF_total_before->add(Transaction::REASON_ADVERTISED_LVL1, 2); $MYSELF_total_before->assertTotals(); // ---- assert - chris pais now as least. this trigger all remaining // reserved paid events DbEntityHelper::fireReceivedMemberFee($CHRIS_l1_3, $now); $this->assertEquals($MYSELF->getFundsLevel(), Member::FUNDS_LEVEL2); $this->assertEquals(ReservedPaidEventQuery::create()->count(), 0); // ---- assert - CHRIS - should be 90 euro $CHRIS_total->assertTotals(); // ---- assert - ME $MYSELF_total->assertTotals(); }