Skip to content

Commit a5d1f77

Browse files
authored
Merge pull request #3872 from bcgov/355-decrease-handler
355 decrease handler
2 parents 3e0db72 + 4990106 commit a5d1f77

2 files changed

Lines changed: 83 additions & 143 deletions

File tree

bc_obps/compliance/service/supplementary_version_service.py

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -500,8 +500,7 @@ def can_handle(new_summary: ReportComplianceSummary, previous_summary: ReportCom
500500
return (
501501
previous_summary.credited_emissions > ZERO_DECIMAL
502502
and new_summary.credited_emissions < previous_summary.credited_emissions
503-
and original_earned_credit_record.issuance_status
504-
== ComplianceEarnedCredit.IssuanceStatus.CREDITS_NOT_ISSUED
503+
and original_earned_credit_record.issuance_status == ComplianceEarnedCredit.IssuanceStatus.DECLINED
505504
)
506505

507506
@staticmethod
@@ -521,24 +520,13 @@ def handle(
521520
compliance_report_version = ComplianceReportVersion.objects.create(
522521
compliance_report=compliance_report,
523522
report_compliance_summary=new_summary,
524-
# using NO_OBLIGATION_OR_EARNED_CREDITS status because this report version is supplementary
525-
# and does not have an obligation
526-
status=ComplianceReportVersion.ComplianceStatus.NO_OBLIGATION_OR_EARNED_CREDITS,
523+
status=ComplianceReportVersion.ComplianceStatus.EARNED_CREDITS,
527524
credited_emissions_delta_from_previous=credited_emission_delta,
528525
is_supplementary=True,
529526
previous_version=previous_compliance_version,
530527
)
531-
# Get the original compliance report version
532-
original_compliance_report_version = ComplianceReportVersion.objects.get(
533-
compliance_report=compliance_report, is_supplementary=False
534-
)
535-
# Get the original earned credit record
536-
original_earned_credit_record = original_compliance_report_version.compliance_earned_credit
537-
# Adjust original credits record by the delta
538-
original_earned_credit_record.earned_credits_amount = (
539-
original_earned_credit_record.earned_credits_amount + credited_emission_delta
540-
)
541-
original_earned_credit_record.save(update_fields=['earned_credits_amount'])
528+
# Create new credits record
529+
ComplianceEarnedCreditsService.create_earned_credits_record(compliance_report_version)
542530

543531
return compliance_report_version
544532

bc_obps/compliance/tests/service/test_supplementary_version_service.py

Lines changed: 79 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -343,127 +343,6 @@ def test_handle_supplementary_version_no_previous_version(
343343

344344
# THE FOLLOWING TWO TESTS WILL NEED REWRITING AFTER HANDLING SCENARIOS WHERE CREDITS HAVE BEEN ISSUED/REQUESTED
345345

346-
# def test_handle_decreased_credit_success(
347-
# self,
348-
# mock_increased_handler,
349-
# mock_decreased_handler,
350-
# mock_no_change_handler,
351-
# mock_increased_credit_handler,
352-
# mock_decreased_credit_handler,
353-
# ):
354-
# # Arrange
355-
# with pgtrigger.ignore('reporting.ReportComplianceSummary:immutable_report_version'):
356-
# self.previous_summary = baker.make_recipe(
357-
# 'reporting.tests.utils.report_compliance_summary',
358-
# excess_emissions=0,
359-
# credited_emissions=Decimal('800'),
360-
# report_version=self.report_version_1,
361-
# )
362-
# self.new_summary = baker.make_recipe(
363-
# 'reporting.tests.utils.report_compliance_summary',
364-
# excess_emissions=0,
365-
# credited_emissions=Decimal('500'),
366-
# report_version=self.report_version_2,
367-
# )
368-
# self.compliance_report = baker.make_recipe(
369-
# 'compliance.tests.utils.compliance_report', report=self.report, compliance_period_id=1
370-
# )
371-
# self.previous_compliance_report_version = baker.make_recipe(
372-
# 'compliance.tests.utils.compliance_report_version',
373-
# compliance_report=self.compliance_report,
374-
# report_compliance_summary=self.previous_summary,
375-
# is_supplementary=False,
376-
# )
377-
# baker.make_recipe(
378-
# 'compliance.tests.utils.compliance_earned_credit',
379-
# compliance_report_version=self.previous_compliance_report_version,
380-
# earned_credits_amount=800,
381-
# issuance_status=ComplianceEarnedCredit.IssuanceStatus.CREDITS_NOT_ISSUED,
382-
# )
383-
# mock_result = MagicMock(spec=ComplianceReportVersion)
384-
# mock_decreased_credit_handler.return_value = mock_result
385-
386-
# # Act
387-
# result = SupplementaryVersionService().handle_supplementary_version(
388-
# self.compliance_report, self.report_version_2, 2
389-
# )
390-
391-
# # Assert
392-
# mock_decreased_credit_handler.assert_called_once_with(
393-
# compliance_report=self.compliance_report,
394-
# new_summary=self.new_summary,
395-
# previous_summary=self.previous_summary,
396-
# version_count=2,
397-
# )
398-
# assert result == mock_result
399-
# mock_increased_handler.assert_not_called()
400-
# mock_decreased_handler.assert_not_called()
401-
# mock_no_change_handler.assert_not_called()
402-
# mock_increased_credit_handler.assert_not_called()
403-
404-
# @patch('compliance.service.supplementary_version_service.DecreasedCreditHandler.handle')
405-
# @patch('compliance.service.supplementary_version_service.IncreasedCreditHandler.handle')
406-
# @patch('compliance.service.supplementary_version_service.NoChangeHandler.handle')
407-
# @patch('compliance.service.supplementary_version_service.DecreasedObligationHandler.handle')
408-
# @patch('compliance.service.supplementary_version_service.IncreasedObligationHandler.handle')
409-
# def test_handle_decreased_credit_success(
410-
# self,
411-
# mock_increased_handler,
412-
# mock_decreased_handler,
413-
# mock_no_change_handler,
414-
# mock_increased_credit_handler,
415-
# mock_decreased_credit_handler,
416-
# ):
417-
# # Arrange
418-
# with pgtrigger.ignore('reporting.ReportComplianceSummary:immutable_report_version'):
419-
# self.previous_summary = baker.make_recipe(
420-
# 'reporting.tests.utils.report_compliance_summary',
421-
# excess_emissions=0,
422-
# credited_emissions=Decimal('800'),
423-
# report_version=self.report_version_1,
424-
# )
425-
# self.new_summary = baker.make_recipe(
426-
# 'reporting.tests.utils.report_compliance_summary',
427-
# excess_emissions=0,
428-
# credited_emissions=Decimal('500'),
429-
# report_version=self.report_version_2,
430-
# )
431-
# self.compliance_report = baker.make_recipe(
432-
# 'compliance.tests.utils.compliance_report', report=self.report, compliance_period_id=1
433-
# )
434-
# self.previous_compliance_report_version = baker.make_recipe(
435-
# 'compliance.tests.utils.compliance_report_version',
436-
# compliance_report=self.compliance_report,
437-
# report_compliance_summary=self.previous_summary,
438-
# is_supplementary=False,
439-
# )
440-
# baker.make_recipe(
441-
# 'compliance.tests.utils.compliance_earned_credit',
442-
# compliance_report_version=self.previous_compliance_report_version,
443-
# earned_credits_amount=800,
444-
# issuance_status=ComplianceEarnedCredit.IssuanceStatus.CREDITS_NOT_ISSUED,
445-
# )
446-
# mock_result = MagicMock(spec=ComplianceReportVersion)
447-
# mock_decreased_credit_handler.return_value = mock_result
448-
449-
# # Act
450-
# result = SupplementaryVersionService().handle_supplementary_version(
451-
# self.compliance_report, self.report_version_2, 2
452-
# )
453-
454-
# # Assert
455-
# mock_decreased_credit_handler.assert_called_once_with(
456-
# compliance_report=self.compliance_report,
457-
# new_summary=self.new_summary,
458-
# previous_summary=self.previous_summary,
459-
# version_count=2,
460-
# )
461-
# assert result == mock_result
462-
# mock_increased_handler.assert_not_called()
463-
# mock_decreased_handler.assert_not_called()
464-
# mock_no_change_handler.assert_not_called()
465-
# mock_increased_credit_handler.assert_not_called()
466-
467346

468347
class TestIncreasedObligationHandler(BaseSupplementaryVersionServiceTest):
469348
def test_can_handle_increased_obligation(self):
@@ -1788,7 +1667,9 @@ def test_can_handle_decreased_credits(self):
17881667
'compliance.tests.utils.compliance_earned_credit',
17891668
compliance_report_version=self.original_report_version,
17901669
earned_credits_amount=500,
1791-
issuance_status=ComplianceEarnedCredit.IssuanceStatus.CREDITS_NOT_ISSUED,
1670+
issuance_status=ComplianceEarnedCredit.IssuanceStatus.DECLINED,
1671+
bccr_trading_name='Test Trading Name',
1672+
bccr_holding_account_id='123',
17921673
)
17931674

17941675
# Act
@@ -1797,6 +1678,71 @@ def test_can_handle_decreased_credits(self):
17971678
# Assert
17981679
assert result is True
17991680

1681+
@patch('compliance.service.supplementary_version_service.DecreasedCreditHandler.handle')
1682+
@patch('compliance.service.supplementary_version_service.IncreasedCreditHandler.handle')
1683+
@patch('compliance.service.supplementary_version_service.NoChangeHandler.handle')
1684+
@patch('compliance.service.supplementary_version_service.DecreasedObligationHandler.handle')
1685+
@patch('compliance.service.supplementary_version_service.IncreasedObligationHandler.handle')
1686+
def test_correctly_calls_decreased_credit_handler(
1687+
self,
1688+
mock_increased_handler,
1689+
mock_decreased_handler,
1690+
mock_no_change_handler,
1691+
mock_increased_credit_handler,
1692+
mock_decreased_credit_handler,
1693+
):
1694+
# Arrange
1695+
with pgtrigger.ignore('reporting.ReportComplianceSummary:immutable_report_version'):
1696+
self.previous_summary = baker.make_recipe(
1697+
'reporting.tests.utils.report_compliance_summary',
1698+
excess_emissions=0,
1699+
credited_emissions=Decimal('800'),
1700+
report_version=self.report_version_1,
1701+
)
1702+
self.new_summary = baker.make_recipe(
1703+
'reporting.tests.utils.report_compliance_summary',
1704+
excess_emissions=0,
1705+
credited_emissions=Decimal('500'),
1706+
report_version=self.report_version_2,
1707+
)
1708+
self.compliance_report = baker.make_recipe(
1709+
'compliance.tests.utils.compliance_report', report=self.report, compliance_period_id=1
1710+
)
1711+
self.previous_compliance_report_version = baker.make_recipe(
1712+
'compliance.tests.utils.compliance_report_version',
1713+
compliance_report=self.compliance_report,
1714+
report_compliance_summary=self.previous_summary,
1715+
is_supplementary=False,
1716+
)
1717+
baker.make_recipe(
1718+
'compliance.tests.utils.compliance_earned_credit',
1719+
compliance_report_version=self.previous_compliance_report_version,
1720+
earned_credits_amount=800,
1721+
issuance_status=ComplianceEarnedCredit.IssuanceStatus.DECLINED,
1722+
bccr_trading_name='Test Trading Name',
1723+
bccr_holding_account_id='123',
1724+
)
1725+
mock_result = MagicMock(spec=ComplianceReportVersion)
1726+
mock_decreased_credit_handler.return_value = mock_result
1727+
1728+
# Act
1729+
result = SupplementaryVersionService().handle_supplementary_version(
1730+
self.compliance_report, self.report_version_2, 2
1731+
)
1732+
1733+
# Assert
1734+
mock_decreased_credit_handler.assert_called_once_with(
1735+
compliance_report=self.compliance_report,
1736+
new_summary=self.new_summary,
1737+
previous_summary=self.previous_summary,
1738+
version_count=2,
1739+
)
1740+
assert result == mock_result
1741+
mock_increased_handler.assert_not_called()
1742+
mock_decreased_handler.assert_not_called()
1743+
mock_no_change_handler.assert_not_called()
1744+
mock_increased_credit_handler.assert_not_called()
1745+
18001746
def test_handle_decreased_credits_success(self):
18011747
# Arrange
18021748
with pgtrigger.ignore('reporting.ReportComplianceSummary:immutable_report_version'):
@@ -1821,22 +1767,28 @@ def test_handle_decreased_credits_success(self):
18211767
'compliance.tests.utils.compliance_earned_credit',
18221768
compliance_report_version=self.original_report_version,
18231769
earned_credits_amount=800,
1824-
issuance_status=ComplianceEarnedCredit.IssuanceStatus.CREDITS_NOT_ISSUED,
1770+
issuance_status=ComplianceEarnedCredit.IssuanceStatus.DECLINED,
1771+
bccr_trading_name='Test Trading Name',
1772+
bccr_holding_account_id='123',
18251773
)
18261774
# Act
18271775
new_compliance_version = DecreasedCreditHandler.handle(
18281776
self.original_report_version.compliance_report, self.new_summary, self.previous_summary, 2
18291777
)
1830-
credit_record = ComplianceEarnedCredit.objects.get(compliance_report_version=self.original_report_version)
1778+
original_credit_record = ComplianceEarnedCredit.objects.get(
1779+
compliance_report_version=self.original_report_version
1780+
)
1781+
new_credit_record = ComplianceEarnedCredit.objects.get(compliance_report_version=new_compliance_version)
18311782

18321783
# Assert
1833-
assert new_compliance_version.status == ComplianceReportVersion.ComplianceStatus.NO_OBLIGATION_OR_EARNED_CREDITS
1784+
assert new_compliance_version.status == ComplianceReportVersion.ComplianceStatus.EARNED_CREDITS
18341785
assert new_compliance_version.credited_emissions_delta_from_previous == Decimal("-300")
18351786
assert new_compliance_version.report_compliance_summary_id == self.new_summary.id
18361787
assert new_compliance_version.is_supplementary is True
18371788
assert new_compliance_version.previous_version == self.original_report_version
1838-
assert credit_record.earned_credits_amount == Decimal('500')
1839-
assert credit_record.issuance_status == ComplianceEarnedCredit.IssuanceStatus.CREDITS_NOT_ISSUED
1789+
assert original_credit_record.earned_credits_amount == Decimal('800')
1790+
assert new_credit_record.earned_credits_amount == Decimal('500')
1791+
assert new_credit_record.issuance_status == ComplianceEarnedCredit.IssuanceStatus.CREDITS_NOT_ISSUED
18401792

18411793

18421794
class TestSupercededHandler(BaseSupplementaryVersionServiceTest):

0 commit comments

Comments
 (0)