Skip to content

Commit 8d9de2d

Browse files
committed
test(views): use stricter data fixture for retirements
1 parent 74e77a4 commit 8d9de2d

File tree

5 files changed

+48
-31
lines changed

5 files changed

+48
-31
lines changed

tests/data_fixtures/retirements.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from sc_audit.db_schema.retirement import Retirement
44

5-
def get_retirements():
5+
def get_retirements_whole_and_round_up():
66
retirements = [
77
Retirement(certificate_id=143471, vcu_amount=1, serial_number='8040-449402275-449402275-VCU-042-MER-PE-14-1360-01072013-30062014-1', retirement_date=datetime.date(2021, 11, 21), retirement_beneficiary='GAVF6ZB7Z7FKCWM5HEY2OV4ENPK3OSSHMFTVR4HHSBFHKW36U3FUH2CB', retirement_details='stellarcarbon.io 61d4ff5516b7098bbc2219d244e7f29a039c32735e1c16d1c05d66a0739727d9', vcs_project_id=1360, issuance_date=datetime.date(2020, 3, 20), instrument_type='VCU', vintage_start=datetime.date(2013, 7, 1), vintage_end=datetime.date(2014, 6, 30), total_vintage_quantity=97259),
88
Retirement(certificate_id=152309, vcu_amount=1, serial_number='8040-449402276-449402276-VCU-042-MER-PE-14-1360-01072013-30062014-1', retirement_date=datetime.date(2022, 9, 18), retirement_beneficiary='GC53JCXZHW3SVNRE4CT6XFP46WX4ACFQU32P4PR3CU43OB7AKKMFXZ6Y via stellarcarbon.io', retirement_details='stellarcarbon.io 63f55c3ff92b239ecdb774c336cb91e896a3e4906a81cbeb23a60f20563c198f', vcs_project_id=1360, issuance_date=datetime.date(2020, 3, 20), instrument_type='VCU', vintage_start=datetime.date(2013, 7, 1), vintage_end=datetime.date(2014, 6, 30), total_vintage_quantity=97259),
@@ -18,6 +18,15 @@ def get_retirements():
1818
]
1919
return retirements
2020

21+
22+
def get_retirements_with_round_down_and_community():
23+
retirements = get_retirements_whole_and_round_up()[:-1]
24+
assert len(retirements) == 10, "need to update slice on the preceding line"
25+
round_down = Retirement(certificate_id=203704, vcu_amount=3, serial_number='8040-449402293-449402295-VCU-042-MER-PE-14-1360-01072013-30062014-1', retirement_date=datetime.date(2023, 6, 14), retirement_beneficiary='GAXLLGNPEMRUMSLHO3QLYDWZCNPQMBDCWYNLVDPR32ABYWDWQO6YXHSL via stellarcarbon.io', retirement_details='stellarcarbon.io 20dbafdc604fc1a48eafc4ce0df2b6151dfa5a5241c307f811a99ce4ddf2fb7f', vcs_project_id=1360, issuance_date=datetime.date(2020, 3, 20), instrument_type='VCU', vintage_start=datetime.date(2013, 7, 1), vintage_end=datetime.date(2014, 6, 30), total_vintage_quantity=97259)
26+
community = Retirement(certificate_id=203705, vcu_amount=2, serial_number='8040-449402296-449402297-VCU-042-MER-PE-14-1360-01072013-30062014-1', retirement_date=datetime.date(2023, 6, 14), retirement_beneficiary='The Stellarcarbon Community', retirement_details='stellarcarbon.io 20dbafdc604fc1a48eafc4ce0df2b6151dfa5a5241c307f811a99ce4ddf2fb7f f4bdee046a289d32933a8bae36fa272bfde3acce6d0c68c412be1534249c9134', vcs_project_id=1360, issuance_date=datetime.date(2020, 3, 20), instrument_type='VCU', vintage_start=datetime.date(2013, 7, 1), vintage_end=datetime.date(2014, 6, 30), total_vintage_quantity=97259)
27+
return retirements + [round_down, community]
28+
29+
2130
search_response = """
2231
{
2332
"totalCount": 11,

tests/test_association.py

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@
88
from sc_audit.loader import impact_projects, minted_blocks, retirement_from_block, sink_status
99
from sc_audit.loader import sinking_txs as sink_loader
1010
from sc_audit.loader.utils import VcsSerialNumber
11-
from tests.data_fixtures.retirements import get_retirements
11+
from tests.data_fixtures.retirements import get_retirements_whole_and_round_up
1212
from tests.db_fixtures import new_session
1313
from tests.test_mint import mock_http as mock_mint_http
1414
from tests.test_sink import mock_http as mock_sink_http
1515

1616

1717
class TestRetirementFromBlock:
1818
def test_cover_retirement_block_start(self, mock_session_with_blocks):
19-
retirement = get_retirements()[0]
19+
retirement = get_retirements_whole_and_round_up()[0]
2020
serial_number = VcsSerialNumber.from_str(retirement.serial_number)
2121
retirement.vcu_amount = 1
2222
serial_number.block_start = 449402277
@@ -35,7 +35,7 @@ def test_cover_retirement_block_start(self, mock_session_with_blocks):
3535
assert rfb.block.block_end != serial_number.block_end
3636

3737
def test_cover_retirement_block_end(self, mock_session_with_blocks):
38-
retirement = get_retirements()[0]
38+
retirement = get_retirements_whole_and_round_up()[0]
3939
serial_number = VcsSerialNumber.from_str(retirement.serial_number)
4040
retirement.vcu_amount = 2
4141
serial_number.block_start = 449402299
@@ -54,7 +54,7 @@ def test_cover_retirement_block_end(self, mock_session_with_blocks):
5454
assert rfb.block.block_end == serial_number.block_end
5555

5656
def test_cover_retirement_block_middle(self, mock_session_with_blocks):
57-
retirement = get_retirements()[0]
57+
retirement = get_retirements_whole_and_round_up()[0]
5858
serial_number = VcsSerialNumber.from_str(retirement.serial_number)
5959
retirement.vcu_amount = 3
6060
serial_number.block_start = 449402280
@@ -73,7 +73,7 @@ def test_cover_retirement_block_middle(self, mock_session_with_blocks):
7373
assert rfb.block.block_end != serial_number.block_end
7474

7575
def test_cover_retirement_spans_two(self, mock_session_with_blocks):
76-
retirement = get_retirements()[0]
76+
retirement = get_retirements_whole_and_round_up()[0]
7777
serial_number = VcsSerialNumber.from_str(retirement.serial_number)
7878
retirement.vcu_amount = 24
7979
serial_number.block_start = 449402280
@@ -95,7 +95,7 @@ def test_cover_retirement_spans_two(self, mock_session_with_blocks):
9595
assert rfb_two.block.block_start < serial_number.block_end < rfb_two.block.block_end
9696

9797
def test_cover_retirement_spans_three(self, mock_session_with_blocks):
98-
retirement = get_retirements()[0]
98+
retirement = get_retirements_whole_and_round_up()[0]
9999
serial_number = VcsSerialNumber.from_str(retirement.serial_number)
100100
retirement.vcu_amount = 32
101101
serial_number.block_start = 449402289
@@ -119,7 +119,7 @@ def test_cover_retirement_spans_three(self, mock_session_with_blocks):
119119
assert rfb_three.block.block_start < serial_number.block_end < rfb_three.block.block_end
120120

121121
def test_cover_retirement_overspent(self, mock_session_with_blocks):
122-
retirements = get_retirements()
122+
retirements = get_retirements_whole_and_round_up()
123123
with mock_session_with_blocks.begin() as session:
124124
session.add_all(retirement_from_block.cover_retirement(session, retirements[0]))
125125
session.add_all(retirement_from_block.cover_retirement(session, retirements[1]))
@@ -129,7 +129,7 @@ def test_cover_retirement_overspent(self, mock_session_with_blocks):
129129

130130
def test_cover_retirement_uncovered(self, mock_session_with_blocks):
131131
# craft a retirement that extends beyond a known block range
132-
retirement = get_retirements()[0]
132+
retirement = get_retirements_whole_and_round_up()[0]
133133
serial_number = VcsSerialNumber.from_str(retirement.serial_number)
134134
retirement.vcu_amount = 7
135135
serial_number.block_start = 449402320
@@ -147,11 +147,11 @@ def test_load_retirement_from_block(self, mock_session_with_blocks):
147147
rfbs = session.scalars(select(RetirementFromBlock)).all()
148148
assert len(rfbs) == 11
149149
rfb_total_amount = sum(rfb.vcu_amount for rfb in rfbs)
150-
retirement_total_amount = sum(ret.vcu_amount for ret in get_retirements())
150+
retirement_total_amount = sum(ret.vcu_amount for ret in get_retirements_whole_and_round_up())
151151
assert rfb_total_amount == retirement_total_amount
152152

153153
def test_load_rfb_overspent(self, mock_session_with_blocks):
154-
duplicate_retirement = get_retirements()[0]
154+
duplicate_retirement = get_retirements_whole_and_round_up()[0]
155155
duplicate_retirement.certificate_id = 0
156156
with mock_session_with_blocks.begin() as session:
157157
session.add(duplicate_retirement)
@@ -162,7 +162,7 @@ def test_load_rfb_overspent(self, mock_session_with_blocks):
162162

163163
class TestSinkStatus:
164164
def test_create_sink_status_one(self, mock_session_with_sink_txs):
165-
retirement = get_retirements()[0]
165+
retirement = get_retirements_whole_and_round_up()[0]
166166
with mock_session_with_sink_txs.begin() as session:
167167
sink_statuses = sink_status.create_sink_statuses(session, retirement)
168168
assert len(sink_statuses) == 1
@@ -173,7 +173,7 @@ def test_create_sink_status_one(self, mock_session_with_sink_txs):
173173
assert status.finalized is True
174174

175175
def test_create_sink_status_two(self, mock_session_with_sink_txs):
176-
retirement = get_retirements()[10]
176+
retirement = get_retirements_whole_and_round_up()[10]
177177
with mock_session_with_sink_txs.begin() as session:
178178
sink_statuses = sink_status.create_sink_statuses(session, retirement)
179179
assert len(sink_statuses) == 2
@@ -185,7 +185,7 @@ def test_create_sink_status_two(self, mock_session_with_sink_txs):
185185
assert status.finalized is True
186186

187187
def test_create_sink_status_more(self, mock_session_with_sink_txs):
188-
retirement = get_retirements()[8]
188+
retirement = get_retirements_whole_and_round_up()[8]
189189
with mock_session_with_sink_txs.begin() as session:
190190
sink_statuses = sink_status.create_sink_statuses(session, retirement)
191191
assert len(sink_statuses) == 7
@@ -196,7 +196,7 @@ def test_create_sink_status_more(self, mock_session_with_sink_txs):
196196
assert status.finalized is True
197197

198198
def test_create_sink_status_split_tx(self, mock_session_with_sink_txs):
199-
retirements = get_retirements()
199+
retirements = get_retirements_whole_and_round_up()
200200
# construct a retirement that partially fills a sink tx (filling in minimal fields)
201201
retirement_one = retirements[0]
202202
retirement_one.retirement_details = "stellarcarbon.io 20dbafdc604fc1a48eafc4ce0df2b6151dfa5a5241c307f811a99ce4ddf2fb7f"
@@ -241,8 +241,8 @@ def test_create_sink_status_split_tx(self, mock_session_with_sink_txs):
241241
assert sink_tx_two.carbon_amount - sink_tx_two.total_filled == Decimal("0.015")
242242

243243
def test_create_sink_status_empty(self, mock_session_with_sink_txs):
244-
retirement_one = get_retirements()[0]
245-
retirement_two = get_retirements()[1]
244+
retirement_one = get_retirements_whole_and_round_up()[0]
245+
retirement_two = get_retirements_whole_and_round_up()[1]
246246
retirement_two.retirement_details = retirement_one.retirement_details
247247
with mock_session_with_sink_txs.begin() as session:
248248
sink_statuses = sink_status.create_sink_statuses(session, retirement_one)
@@ -261,7 +261,7 @@ def test_load_sink_statuses(self, mock_session_with_sink_txs):
261261
sss = session.scalars(select(SinkStatus)).all()
262262
assert len(sss) == 18
263263
ss_total_amount = sum(ss.amount_filled for ss in sss)
264-
retirement_total_amount = sum(ret.vcu_amount for ret in get_retirements())
264+
retirement_total_amount = sum(ret.vcu_amount for ret in get_retirements_whole_and_round_up())
265265
assert ss_total_amount == retirement_total_amount
266266

267267
q_finalized_txs = (
@@ -295,7 +295,7 @@ def mock_session(monkeypatch, new_session):
295295
@pytest.fixture
296296
def mock_session_with_blocks(mock_mint_http, mock_session):
297297
with mock_session.begin() as session:
298-
session.add_all(get_retirements())
298+
session.add_all(get_retirements_whole_and_round_up())
299299

300300
minted_blocks.load_minted_blocks()
301301
return mock_session

tests/test_mint.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
from tests.data_fixtures.minting_transactions import distribution_records as outflows_fix
2525
from tests.data_fixtures.minting_transactions import minting_transactions as mint_tx_fix
2626
from tests.data_fixtures.minting_transactions import payment_records as payments_fix
27-
from tests.data_fixtures.retirements import get_retirements
27+
from tests.data_fixtures.retirements import get_retirements_whole_and_round_up
2828

2929

3030
class TestMintDb:
@@ -129,7 +129,7 @@ def mock_dist_txs(cursor):
129129
class TestMintLoader:
130130
def test_reconstructed_from_retirement(self):
131131
blocks = reconstruct_blocks(
132-
mint_txs=mint_tx_fix[:3], latest_block=None, retirements=get_retirements()[:1]
132+
mint_txs=mint_tx_fix[:3], latest_block=None, retirements=get_retirements_whole_and_round_up()[:1]
133133
)
134134
assert len(blocks) == 3
135135
assert blocks[0].serial_hash == decode_hash_memo(mint_tx_fix[0]['transaction']['memo'])
@@ -156,7 +156,7 @@ def test_load_minted_blocks_retirements_missing(self, mock_session, mock_http):
156156

157157
def test_load_minted_blocks_verify(self, mock_session, mock_http):
158158
with mock_session.begin() as session:
159-
session.add_all(get_retirements())
159+
session.add_all(get_retirements_whole_and_round_up())
160160

161161
load_minted_blocks()
162162

tests/test_retirement.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from sc_audit.loader.utils import VcsSerialNumber
1313
from sc_audit.sources.retirements import format_verra_retirements, get_retirements_list
1414
from tests.db_fixtures import new_session
15-
from tests.data_fixtures.retirements import search_response, get_retirements
15+
from tests.data_fixtures.retirements import search_response, get_retirements_whole_and_round_up
1616

1717

1818
class MockClient(Client):
@@ -44,7 +44,7 @@ class TestRetirementSources:
4444
def test_format_retirements(self):
4545
retirements_data = format_verra_retirements(search_response)
4646
assert retirements_data['total_count'] == 11
47-
retirements_fix = get_retirements()
47+
retirements_fix = get_retirements_whole_and_round_up()
4848
for i, retirement in enumerate(retirements_data['retirements']):
4949
assert int(retirement['certificate_id']) == retirements_fix[i].certificate_id
5050

tests/test_views.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from sc_audit.loader import sinking_txs as sink_loader
1010
from sc_audit.loader import sink_status as sink_status_loader
1111
from sc_audit.views import inventory, retirement, sink_status as sink_status_view, stats
12-
from tests.data_fixtures.retirements import get_retirements
12+
from tests.data_fixtures.retirements import get_retirements_with_round_down_and_community
1313
from tests.db_fixtures import new_session
1414
from tests.test_mint import mock_http as mock_mint_http
1515
from tests.test_sink import mock_http as mock_sink_http
@@ -274,7 +274,7 @@ def test_construct_query_project(self):
274274
class TestRetirementView:
275275
def test_retirements_full(self, mock_session_with_associations):
276276
rtdf = retirement.view_retirements()
277-
assert len(rtdf) == 11
277+
assert len(rtdf) == 12
278278
assert rtdf.vcu_amount.sum() == 23
279279
assert rtdf.vcs_project_id.min() == 1360
280280
assert rtdf.vcs_project_id.max() == 1360
@@ -319,7 +319,7 @@ def test_retirements_pagination_asc(self, mock_session_with_associations):
319319

320320
combined_pages = pd.concat(pages)
321321
assert combined_pages.certificate_id.is_unique
322-
assert len(combined_pages) == 11
322+
assert len(combined_pages) == 12
323323

324324
def test_retirements_pagination_desc(self, mock_session_with_associations):
325325
rtdf = retirement.view_retirements(limit=3, order='desc')
@@ -332,7 +332,7 @@ def test_retirements_pagination_desc(self, mock_session_with_associations):
332332

333333
combined_pages = pd.concat(pages)
334334
assert combined_pages.certificate_id.is_unique
335-
assert len(combined_pages) == 11
335+
assert len(combined_pages) == 12
336336

337337

338338
class TestStatsView:
@@ -348,8 +348,8 @@ def test_stats_recipient(self, mock_session_with_associations):
348348
recipient="GAXLLGNPEMRUMSLHO3QLYDWZCNPQMBDCWYNLVDPR32ABYWDWQO6YXHSL"
349349
)
350350
assert r1_stats["carbon_sunk"] == Decimal('3.015')
351-
assert r1_stats["carbon_retired"] == Decimal('0')
352-
assert r1_stats["carbon_pending"] == Decimal('3.015')
351+
assert r1_stats["carbon_retired"] == Decimal('3.015')
352+
assert r1_stats["carbon_pending"] == Decimal('0')
353353
assert "carbon_stored" not in r1_stats
354354

355355
r2_stats = stats.get_carbon_stats(
@@ -360,6 +360,14 @@ def test_stats_recipient(self, mock_session_with_associations):
360360
assert r2_stats["carbon_pending"] == Decimal('0')
361361
assert "carbon_stored" not in r2_stats
362362

363+
r3_stats = stats.get_carbon_stats(
364+
recipient="GDZTF5ELO5GIJVYYJS4QDN5UMTROJFLYQIG4ACPXWYGLC7VMHCEGIXKX"
365+
)
366+
assert r3_stats["carbon_sunk"] == Decimal('5')
367+
assert r3_stats["carbon_retired"] == Decimal('1.985')
368+
assert r3_stats["carbon_pending"] == Decimal('3.015')
369+
assert "carbon_stored" not in r3_stats
370+
363371

364372
@pytest.fixture
365373
def mock_session(monkeypatch, new_session):
@@ -378,7 +386,7 @@ def mock_session(monkeypatch, new_session):
378386
@pytest.fixture
379387
def mock_session_with_associations(mock_mint_http, mock_sink_http, mock_session):
380388
with mock_session.begin() as session:
381-
session.add_all(get_retirements())
389+
session.add_all(get_retirements_with_round_down_and_community())
382390

383391
minted_blocks.load_minted_blocks()
384392
sink_loader.load_sinking_txs(cursor=999)

0 commit comments

Comments
 (0)