Using existing test database for alias 'default'... EEFEEE..E.EFDependency R001 not completed for 2025-12-19. Skipping D001. ./home/cursorai/projects/telegram-earn/backend/venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1612: RuntimeWarning: DateTimeField Investment.start_date received a naive datetime (2025-12-18 00:00:00) while time zone support is active. warnings.warn( /home/cursorai/projects/telegram-earn/backend/venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1612: RuntimeWarning: DateTimeField Investment.end_date received a naive datetime (2025-12-19 00:00:00) while time zone support is active. warnings.warn( F..............E.......F........................................ ====================================================================== ERROR: test_creates_reward_commissions_and_transactions (apps.investments.tests.test_calculate_rewards.CalculateRewardsCommandTests.test_creates_reward_commissions_and_transactions) Command credits reward to investor and commissions up the chain. ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/cursorai/projects/telegram-earn/backend/apps/investments/tests/test_calculate_rewards.py", line 66, in test_creates_reward_commissions_and_transactions reward = Reward.objects.get(investment=self.investment, reward_date=target_date) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/cursorai/projects/telegram-earn/backend/venv/lib/python3.12/site-packages/django/db/models/manager.py", line 87, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/cursorai/projects/telegram-earn/backend/venv/lib/python3.12/site-packages/django/db/models/query.py", line 635, in get raise self.model.DoesNotExist( apps.investments.models.Reward.DoesNotExist: Reward matching query does not exist. ====================================================================== ERROR: test_creates_reward_without_commissions_when_no_upline (apps.investments.tests.test_calculate_rewards.CalculateRewardsCommandTests.test_creates_reward_without_commissions_when_no_upline) Rewards still post when the investor has no referrer; no commissions. ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/cursorai/projects/telegram-earn/backend/apps/investments/tests/test_calculate_rewards.py", line 199, in test_creates_reward_without_commissions_when_no_upline reward = Reward.objects.get(investment=solo_investment, reward_date=target_date) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/cursorai/projects/telegram-earn/backend/venv/lib/python3.12/site-packages/django/db/models/manager.py", line 87, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/cursorai/projects/telegram-earn/backend/venv/lib/python3.12/site-packages/django/db/models/query.py", line 635, in get raise self.model.DoesNotExist( apps.investments.models.Reward.DoesNotExist: Reward matching query does not exist. ====================================================================== ERROR: test_marks_investment_completed_on_end_date (apps.investments.tests.test_calculate_rewards.CalculateRewardsCommandTests.test_marks_investment_completed_on_end_date) Status flips to completed when target_date reaches end_date. ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/cursorai/projects/telegram-earn/backend/apps/investments/tests/test_calculate_rewards.py", line 156, in test_marks_investment_completed_on_end_date reward = Reward.objects.get(investment=self.investment, reward_date=target_date) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/cursorai/projects/telegram-earn/backend/venv/lib/python3.12/site-packages/django/db/models/manager.py", line 87, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/cursorai/projects/telegram-earn/backend/venv/lib/python3.12/site-packages/django/db/models/query.py", line 635, in get raise self.model.DoesNotExist( apps.investments.models.Reward.DoesNotExist: Reward matching query does not exist. ====================================================================== ERROR: test_partial_referral_chain_only_credits_available_uplines (apps.investments.tests.test_calculate_rewards.CalculateRewardsCommandTests.test_partial_referral_chain_only_credits_available_uplines) Only existing uplines receive commissions when the chain is shorter than 3. ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/cursorai/projects/telegram-earn/backend/apps/investments/tests/test_calculate_rewards.py", line 234, in test_partial_referral_chain_only_credits_available_uplines reward = Reward.objects.get(investment=short_chain_investment, reward_date=target_date) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/cursorai/projects/telegram-earn/backend/venv/lib/python3.12/site-packages/django/db/models/manager.py", line 87, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/cursorai/projects/telegram-earn/backend/venv/lib/python3.12/site-packages/django/db/models/query.py", line 635, in get raise self.model.DoesNotExist( apps.investments.models.Reward.DoesNotExist: Reward matching query does not exist. ====================================================================== ERROR: test_quantizes_reward_and_commissions_round_half_up (apps.investments.tests.test_calculate_rewards.CalculateRewardsCommandTests.test_quantizes_reward_and_commissions_round_half_up) Reward and commission amounts are rounded to 8 decimal places. ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/cursorai/projects/telegram-earn/backend/apps/investments/tests/test_calculate_rewards.py", line 269, in test_quantizes_reward_and_commissions_round_half_up reward = Reward.objects.get(investment=precise_investment, reward_date=target_date) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/cursorai/projects/telegram-earn/backend/venv/lib/python3.12/site-packages/django/db/models/manager.py", line 87, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/cursorai/projects/telegram-earn/backend/venv/lib/python3.12/site-packages/django/db/models/query.py", line 635, in get raise self.model.DoesNotExist( apps.investments.models.Reward.DoesNotExist: Reward matching query does not exist. ====================================================================== ERROR: test_calculate_task_creates_pending_rewards (apps.investments.tests.test_cron_tasks.CronTasksTest.test_calculate_task_creates_pending_rewards) R001 should create rewards but NOT distribute them. ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/cursorai/projects/telegram-earn/backend/apps/investments/tests/test_cron_tasks.py", line 64, in test_calculate_task_creates_pending_rewards reward = Reward.objects.get(investment=self.investment, reward_date=self.target_date) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/cursorai/projects/telegram-earn/backend/venv/lib/python3.12/site-packages/django/db/models/manager.py", line 87, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/cursorai/projects/telegram-earn/backend/venv/lib/python3.12/site-packages/django/db/models/query.py", line 635, in get raise self.model.DoesNotExist( apps.investments.models.Reward.DoesNotExist: Reward matching query does not exist. ====================================================================== ERROR: test_distribute_task_distributes_rewards_after_calculation (apps.investments.tests.test_cron_tasks.CronTasksTest.test_distribute_task_distributes_rewards_after_calculation) D001 should distribute rewards if R001 success record exists. ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/cursorai/projects/telegram-earn/backend/apps/investments/tests/test_cron_tasks.py", line 104, in test_distribute_task_distributes_rewards_after_calculation reward = Reward.objects.get(investment=self.investment, reward_date=self.target_date) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/cursorai/projects/telegram-earn/backend/venv/lib/python3.12/site-packages/django/db/models/manager.py", line 87, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/cursorai/projects/telegram-earn/backend/venv/lib/python3.12/site-packages/django/db/models/query.py", line 635, in get raise self.model.DoesNotExist( apps.investments.models.Reward.DoesNotExist: Reward matching query does not exist. ====================================================================== ERROR: test_different_tiers_same_start_date_logic (apps.investments.tests.test_start_date_logic.InvestmentStartDateTests.test_different_tiers_same_start_date_logic) Standard: All tiers use same start_date logic regardless of amount. ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/cursorai/projects/telegram-earn/backend/apps/investments/tests/test_start_date_logic.py", line 94, in test_different_tiers_same_start_date_logic inv = Investment.objects.get(id=response.data["id"]) ~~~~~~~~~~~~~^^^^^^ KeyError: 'id' ====================================================================== FAIL: test_idempotent_for_existing_reward (apps.investments.tests.test_calculate_rewards.CalculateRewardsCommandTests.test_idempotent_for_existing_reward) Running the command twice should not duplicate rewards or commissions. ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/cursorai/projects/telegram-earn/backend/apps/investments/tests/test_calculate_rewards.py", line 121, in test_idempotent_for_existing_reward self.assertEqual( AssertionError: 0 != 1 ====================================================================== FAIL: test_distribute_task_idempotency (apps.investments.tests.test_cron_tasks.CronTasksTest.test_distribute_task_idempotency) D001 should not re-distribute already distributed rewards. ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/cursorai/projects/telegram-earn/backend/apps/investments/tests/test_cron_tasks.py", line 160, in test_distribute_task_idempotency self.assertIsNotNone(reward.distributed_at) AssertionError: unexpectedly None ====================================================================== FAIL: test_investment_completion_logic (apps.investments.tests.test_cron_tasks.CronTasksTest.test_investment_completion_logic) Investment should be marked pending -> active -> completed. ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/cursorai/projects/telegram-earn/backend/apps/investments/tests/test_cron_tasks.py", line 198, in test_investment_completion_logic self.assertTrue( AssertionError: False is not true ====================================================================== FAIL: test_multiple_investments_correct_timing (apps.investments.tests.test_start_date_logic.RewardCalculationTimingTests.test_multiple_investments_correct_timing) Standard: Multiple investments created on different days calculate correctly. ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/cursorai/projects/telegram-earn/backend/apps/investments/tests/test_start_date_logic.py", line 341, in test_multiple_investments_correct_timing self.assertEqual(Reward.objects.filter(investment=inv1).count(), 3) # Dec 21, 22, 23 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AssertionError: 2 != 3 ---------------------------------------------------------------------- Ran 77 tests in 1.233s FAILED (failures=4, errors=8) Preserving test database for alias 'default'... Found 77 test(s). System check identified no issues (0 silenced). Running CalculateRewardsTask for 2025-12-19... Success: Calculated 1 new rewards for 2025-12-18 (executed on 2025-12-19). Note: This command only calculates rewards (Phase 1). To distribute rewards (Phase 2), run the distribute-rewards task. Running CalculateRewardsTask for 2025-12-25... Success: Calculated 1 new rewards for 2025-12-24 (executed on 2025-12-25). Note: This command only calculates rewards (Phase 1). To distribute rewards (Phase 2), run the distribute-rewards task. Running CalculateRewardsTask for 2025-12-19... Success: Calculated 1 new rewards for 2025-12-18 (executed on 2025-12-19). Note: This command only calculates rewards (Phase 1). To distribute rewards (Phase 2), run the distribute-rewards task. Running CalculateRewardsTask for 2025-12-19... Success: Calculated 0 new rewards for 2025-12-18 (executed on 2025-12-19). Note: This command only calculates rewards (Phase 1). To distribute rewards (Phase 2), run the distribute-rewards task. Running CalculateRewardsTask for 2025-12-30... Success: Calculated 1 new rewards for 2025-12-29 (executed on 2025-12-30). Note: This command only calculates rewards (Phase 1). To distribute rewards (Phase 2), run the distribute-rewards task. Running CalculateRewardsTask for 2025-12-27... Success: Calculated 1 new rewards for 2025-12-26 (executed on 2025-12-27). Note: This command only calculates rewards (Phase 1). To distribute rewards (Phase 2), run the distribute-rewards task. Running CalculateRewardsTask for 2025-12-29... Success: Calculated 1 new rewards for 2025-12-28 (executed on 2025-12-29). Note: This command only calculates rewards (Phase 1). To distribute rewards (Phase 2), run the distribute-rewards task. Running CalculateRewardsTask for 2025-12-18... Success: Calculated 0 new rewards for 2025-12-17 (executed on 2025-12-18). Note: This command only calculates rewards (Phase 1). To distribute rewards (Phase 2), run the distribute-rewards task. Running CalculateRewardsTask for 2025-12-19... Success: Calculated 0 new rewards for 2025-12-18 (executed on 2025-12-19). Note: This command only calculates rewards (Phase 1). To distribute rewards (Phase 2), run the distribute-rewards task.