Skip to content

Commit 44c467c

Browse files
authored
Merge pull request #181 from thenewboston-developers/BC-72-swagger
BC-72 Add and configure drf-spectacular module.
2 parents bca2dc4 + c1ae404 commit 44c467c

File tree

19 files changed

+282
-155
lines changed

19 files changed

+282
-155
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,4 @@ repos:
4242
rev: 'v0.910'
4343
hooks:
4444
- id: mypy
45-
additional_dependencies: [types-requests, types-PyYAML]
45+
additional_dependencies: [types-requests, types-PyYAML, types-toml]

node/blockchain/admin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@ class BlockAdmin(admin.ModelAdmin):
1212

1313
@admin.register(AccountState)
1414
class AccountStateAdmin(admin.ModelAdmin):
15-
pass
15+
list_display = ('_id',)

node/blockchain/serializers/account_state.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77

88
class AccountStateSerializer(serializers.ModelSerializer):
9+
910
_id = serializers.CharField()
1011
balance = serializers.IntegerField()
1112
account_lock = serializers.CharField()

node/blockchain/serializers/node.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55

66
class NodeSerializer(serializers.ModelSerializer):
7+
78
# TODO(dmu) HIGH: Instead of redefining serializer fields generate serializer from
89
# Node model metadata
910
identifier = serializers.CharField()

node/blockchain/serializers/signed_change_request.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616

1717
class SignedChangeRequestSerializer(serializers.Serializer, ValidateUnknownFieldsMixin):
18+
1819
signer = serializers.CharField()
1920
signature = serializers.CharField()
2021
message = PydanticModelBackedJSONField()

node/blockchain/tests/fixtures/blockchain.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
from node.blockchain.facade import BlockchainFacade
44
from node.blockchain.tests.factories.node import make_node
5+
from node.blockchain.tests.factories.signed_change_request.coin_transfer import (
6+
make_coin_transfer_signed_change_request
7+
)
58
from node.blockchain.tests.factories.signed_change_request.node_declaration import (
69
make_node_declaration_signed_change_request
710
)
@@ -22,14 +25,10 @@ def base_blockchain(genesis_block_message, primary_validator_key_pair, db):
2225

2326
@pytest.fixture
2427
def rich_blockchain(
25-
base_blockchain,
26-
primary_validator_key_pair,
27-
confirmation_validator_key_pair,
28-
confirmation_validator_key_pair_2,
29-
regular_node_declaration_signed_change_request,
30-
self_node_declaration_signed_change_request,
28+
base_blockchain, primary_validator_key_pair, confirmation_validator_key_pair, confirmation_validator_key_pair_2,
29+
regular_node_declaration_signed_change_request, self_node_declaration_signed_change_request,
3130
confirmation_validator_declaration_signed_change_request,
32-
confirmation_validator_2_declaration_signed_change_request,
31+
confirmation_validator_2_declaration_signed_change_request, treasury_account_key_pair, regular_node, self_node
3332
):
3433
blockchain_facade = BlockchainFacade.get_instance()
3534

@@ -67,6 +66,14 @@ def rich_blockchain(
6766
validate=False,
6867
)
6968

69+
blockchain_facade.add_block_from_signed_change_request(
70+
signed_change_request=make_coin_transfer_signed_change_request(
71+
treasury_account_key_pair, regular_node.identifier, self_node.identifier
72+
),
73+
signing_key=primary_validator_key_pair.private,
74+
validate=False,
75+
)
76+
7077
# TODO(dmu) MEDIUM: Add more blocks as new block types are developed
7178

7279

node/blockchain/tests/test_management/test_send_signed_change_request.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def test_coin_transfer(
6363
_, output = out.getvalue().split('Response (raw):')
6464
assert json.loads(output) == {
6565
'message': {
66-
'account_lock': '4d3cf1d9e4547d324de2084b568f807ef12045075a7a01b8bec1e7f013fc3732',
66+
'account_lock': '572795e9eb525f7c5ff601b001e8c13bac148b488fbe0142dfdaa6841148648d',
6767
'txs': [{
6868
'amount': 100,
6969
'is_fee': False,
@@ -78,8 +78,8 @@ def test_coin_transfer(
7878
'type': 2
7979
},
8080
'signature':
81-
'628b293aeceec992d094c62f60f5031879b4893047f4c4ab158e506c04b916b0'
82-
'489b5a750d3b1af7cfe9b99c03253424b483450bcafe1b1f608529cad012a502',
81+
'07f11055cba3d968123d2312e7d46cf95ad18be057b5ba0c1cb3c72670e5bee5'
82+
'70a7fbbb2f33ae4888a314d05142353d3472cf51ba5726aa12be01655bfbc906',
8383
'signer': '4d3cf1d9e4547d324de2084b568f807ef12045075a7a01b8bec1e7f013fc3732'
8484
}
8585

@@ -92,10 +92,10 @@ def test_pv_schedule_update(
9292
out = StringIO()
9393
blockchain_facade = BlockchainFacade.get_instance()
9494

95-
assert blockchain_facade.get_next_block_number() == 6
95+
assert blockchain_facade.get_next_block_number() == 7
9696

9797
schedule = {
98-
'6': primary_validator_key_pair.public,
98+
'7': primary_validator_key_pair.public,
9999
}
100100
call_command(
101101
'add_signed_change_request', '3', 'local', self_node_key_pair.private, json.dumps(schedule), stdout=out

node/blockchain/tests/test_models/test_block/test_pv_schedule_update.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ def test_validate_nodes_are_declared(primary_validator_key_pair):
166166
@pytest.mark.usefixtures('rich_blockchain')
167167
def test_validate_block_numbers(schedule_keys, exception_match, primary_validator_node, self_node_key_pair):
168168
blockchain_facade = BlockchainFacade.get_instance()
169-
assert blockchain_facade.get_next_block_number() == 6
169+
assert blockchain_facade.get_next_block_number() == 7
170170

171171
schedule = {k: primary_validator_node.identifier for k in schedule_keys}
172172

node/blockchain/tests/test_rest_api/test_block.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from node.blockchain.models import Block, PendingBlock
88
from node.blockchain.tests.factories.block import make_block
99
from node.blockchain.tests.factories.block_message.node_declaration import make_node_declaration_block_message
10+
from node.blockchain.types import Type
1011

1112

1213
@pytest.mark.usefixtures('rich_blockchain')
@@ -65,14 +66,19 @@ def test_blocks_pagination(api_client):
6566
assert len(results) == 1
6667
assert results[0] == json.loads(Block.objects.get(_id=1).body)
6768

68-
response = api_client.get('/api/blocks/?limit=1&offset=6')
69+
response = api_client.get('/api/blocks/?limit=1&offset=7')
6970
assert response.status_code == 200
7071
response_json = response.json()
7172
results = response_json.get('results')
7273
assert isinstance(results, list)
7374
assert len(results) == 0
7475

7576

77+
@pytest.mark.usefixtures('rich_blockchain')
78+
def test_list_blocks_blockchain_has_all_types():
79+
assert {block.get_block().message.type for block in Block.objects.order_by('_id')} == set(Type)
80+
81+
7682
@pytest.mark.usefixtures('rich_blockchain')
7783
def test_retrieve_block(api_client):
7884
response = api_client.get('/api/blocks/0/')

node/blockchain/tests/test_rest_api/test_node.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
11
import pytest
22

33

4-
@pytest.mark.usefixtures('base_blockchain')
5-
def test_list_nodes_smoke(api_client):
6-
response = api_client.get('/api/nodes/')
7-
assert response.status_code == 200
8-
9-
104
@pytest.mark.usefixtures('base_blockchain')
115
def test_list_nodes(primary_validator_node, api_client):
126
response = api_client.get('/api/nodes/')

0 commit comments

Comments
 (0)