add some tests to the forms, utils and validators
This commit is contained in:
parent
c5d68aa1f8
commit
0faf45d9d5
|
@ -0,0 +1,69 @@
|
|||
from unittest.mock import MagicMock, patch
|
||||
|
||||
from django.contrib.auth import get_user_model
|
||||
|
||||
import pytest
|
||||
from model_mommy import mommy
|
||||
|
||||
from django_cryptolock.forms import SimpleLoginForm, SimpleSignUpForm
|
||||
|
||||
VALID_ADDRESS = "46fYuhPAdsxMbEeMg97LhSbFPamdiCw7C6b19VEcZSmV6xboWFZuZQ9MTbj1wLszhUExHi63CMtsWjDTrRDqegZiPVebgYq"
|
||||
User = get_user_model()
|
||||
|
||||
|
||||
def test_simpleloginform_generates_new_challenge():
|
||||
request = MagicMock()
|
||||
initial = {}
|
||||
request.session.__setitem__.side_effect = initial.__setitem__
|
||||
request.session.__getitem__.side_effect = initial.__getitem__
|
||||
form = SimpleLoginForm(request=request)
|
||||
assert form.initial.get("challenge")
|
||||
assert initial["current_challenge"] == form.initial.get("challenge")
|
||||
|
||||
|
||||
def test_simpleloginform_generates_no_new_challenge():
|
||||
request = MagicMock()
|
||||
initial = {}
|
||||
request.session.__setitem__.side_effect = initial.__setitem__
|
||||
request.session.__getitem__.side_effect = initial.__getitem__
|
||||
form = SimpleLoginForm(request=request, data={"address": ""})
|
||||
assert not form.initial.get("challenge")
|
||||
assert not initial.get("current_challenge")
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_simpleloginform_valid_data(settings):
|
||||
settings.DJCL_MONERO_NETWORK = "mainnet"
|
||||
request = MagicMock()
|
||||
form = SimpleLoginForm(
|
||||
request=request,
|
||||
data={
|
||||
"address": VALID_ADDRESS,
|
||||
"challenge": "12345678",
|
||||
"signature": "some valid signature",
|
||||
},
|
||||
)
|
||||
with patch("django_cryptolock.forms.authenticate") as auth_mock:
|
||||
auth_mock.return_value = mommy.make(User)
|
||||
request.session.get.return_value = "12345678"
|
||||
assert form.is_valid()
|
||||
|
||||
|
||||
def test_simplesignupform_generaes_new_challenge():
|
||||
request = MagicMock()
|
||||
initial = {}
|
||||
request.session.__setitem__.side_effect = initial.__setitem__
|
||||
request.session.__getitem__.side_effect = initial.__getitem__
|
||||
form = SimpleSignUpForm(request=request)
|
||||
assert form.initial.get("challenge")
|
||||
assert initial["current_challenge"] == form.initial.get("challenge")
|
||||
|
||||
|
||||
def test_simplesignupform_generaes_no_new_challenge():
|
||||
request = MagicMock()
|
||||
initial = {}
|
||||
request.session.__setitem__.side_effect = initial.__setitem__
|
||||
request.session.__getitem__.side_effect = initial.__getitem__
|
||||
form = SimpleSignUpForm(request=request, data={"address": ""})
|
||||
assert not form.initial.get("challenge")
|
||||
assert not initial.get("current_challenge")
|
|
@ -0,0 +1,9 @@
|
|||
import pytest
|
||||
from model_mommy import mommy
|
||||
|
||||
from django_cryptolock.utils import generate_challenge
|
||||
|
||||
|
||||
def test_challenge_has_8_bytes():
|
||||
challenge = generate_challenge()
|
||||
assert len(bytes.fromhex(challenge)) == 8
|
|
@ -0,0 +1,53 @@
|
|||
from django.core.exceptions import ValidationError
|
||||
|
||||
import pytest
|
||||
|
||||
from django_cryptolock.validators import validate_monero_address
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"network,address",
|
||||
[
|
||||
(
|
||||
"mainnet",
|
||||
"46fYuhPAdsxMbEeMg97LhSbFPamdiCw7C6b19VEcZSmV6xboWFZuZQ9MTbj1wLszhUExHi63CMtsWjDTrRDqegZiPVebgYq",
|
||||
),
|
||||
(
|
||||
"stagenet",
|
||||
"5A2uBqpNg7E4cYzA7bhXeuP9C2qSeUAtDhUScFgTBJWMUNJd9yZJxwDHg8sPVPBBx7JJFYqxDSbb7HFz2w8dttVJKW5Yipp",
|
||||
),
|
||||
(
|
||||
"testnet",
|
||||
"9waU7xxRYbC2HkKV2k4dzPjEYwkYDiHmfELLUkS8vegVLEYkk2dk3X5JJZtURNthsaDh8zL5SYAp8VXMzqvRYptgGTYNpEn",
|
||||
),
|
||||
],
|
||||
)
|
||||
def test_valid_address(network, address, settings):
|
||||
settings.DJCL_MONERO_NETWORK = network
|
||||
assert validate_monero_address(address) is None
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"network,address",
|
||||
[
|
||||
(
|
||||
"mainnet",
|
||||
"9waU7xxRYbC2HkKV2k4dzPjEYwkYDiHmfELLUkS8vegVLEYkk2dk3X5JJZtURNthsaDh8zL5SYAp8VXMzqvRYptgGTYNpEn",
|
||||
),
|
||||
(
|
||||
"stagenet",
|
||||
"46fYuhPAdsxMbEeMg97LhSbFPamdiCw7C6b19VEcZSmV6xboWFZuZQ9MTbj1wLszhUExHi63CMtsWjDTrRDqegZiPVebgYq",
|
||||
),
|
||||
(
|
||||
"testnet",
|
||||
"5A2uBqpNg7E4cYzA7bhXeuP9C2qSeUAtDhUScFgTBJWMUNJd9yZJxwDHg8sPVPBBx7JJFYqxDSbb7HFz2w8dttVJKW5Yipp",
|
||||
),
|
||||
],
|
||||
)
|
||||
def test_invalid_address(network, address, settings):
|
||||
settings.DJCL_MONERO_NETWORK = network
|
||||
|
||||
with pytest.raises(ValidationError) as error:
|
||||
validate_monero_address(address)
|
||||
|
||||
assert f"Invalid address for {network}" in str(error.value)
|
Loading…
Reference in New Issue