[Refactor] Create an Es4Document test fixture and use it wherever we can
This commit is contained in:
parent
e8bc0cfd38
commit
e4b7b7d11b
@ -5,9 +5,10 @@ from nacl.signing import SigningKey
|
||||
import pytest
|
||||
from _pytest.fixtures import SubRequest
|
||||
|
||||
from earthsnake.document.es4 import Es4Document
|
||||
from earthsnake.identity import Identity
|
||||
|
||||
from .helpers import DEFAULT_IDENTITY_SEED, random_name
|
||||
from .helpers import DEFAULT_IDENTITY_SEED, VALID_DOCUMENT, random_name
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@ -30,3 +31,10 @@ def identity(request: SubRequest) -> Identity:
|
||||
sign = SigningKey(seed)
|
||||
|
||||
return Identity(name, sign_key=sign)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def es4_document() -> Es4Document:
|
||||
"""A valid es.4 document"""
|
||||
|
||||
return Es4Document.from_json(VALID_DOCUMENT)
|
||||
|
@ -2,6 +2,7 @@
|
||||
"""
|
||||
|
||||
from random import choice
|
||||
from typing import Any, Dict
|
||||
|
||||
from earthsnake.types import ALPHA_LOWER, ALPHA_LOWER_OR_DIGIT
|
||||
|
||||
@ -10,6 +11,21 @@ DEFAULT_IDENTITY_SEED = (
|
||||
b'z\x84\xb7\xd2\x02q\xfa\xe8W\xd8z\x05E\xfb2\xd5'
|
||||
)
|
||||
|
||||
VALID_DOCUMENT: Dict[str, Any] = {
|
||||
'format': 'es.4',
|
||||
'timestamp': 1651738871668993,
|
||||
'deleteAfter': None,
|
||||
'author': '@test.bcz76z52y5dlpohtkmpuj3jsdcvfmebzpcgfmtmhu4u7hlexzreya',
|
||||
'path': '/test.txt',
|
||||
'workspace': '+test.suffix',
|
||||
'signature': (
|
||||
'bughac3ooy5qfect4bxdke2zkun2wqufhpivt57vj2mzq52mhqzesjvhyywttxm7qqjyhoskmiqd2lw72qy2u766r'
|
||||
'fqvnbwab4qp3gbi'
|
||||
),
|
||||
'content': 'test',
|
||||
'contentHash': 'bt6dnbamijr6wlgrp5kqmkwwqcwr36ty3fmfyelgrlvwblmhqbiea',
|
||||
}
|
||||
|
||||
|
||||
def random_name() -> str:
|
||||
"""Generate a valid random author name"""
|
||||
|
@ -1,7 +1,6 @@
|
||||
"""Tests for the es.4 document validator"""
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Any, Dict
|
||||
|
||||
from nacl.signing import SigningKey
|
||||
import pytest
|
||||
@ -13,21 +12,7 @@ from earthsnake.identity import Identity
|
||||
from earthsnake.path import Path
|
||||
from earthsnake.share import Share
|
||||
|
||||
|
||||
VALID_DOCUMENT: Dict[str, Any] = {
|
||||
'format': 'es.4',
|
||||
'timestamp': 1651738871668993,
|
||||
'deleteAfter': None,
|
||||
'author': '@test.bcz76z52y5dlpohtkmpuj3jsdcvfmebzpcgfmtmhu4u7hlexzreya',
|
||||
'path': '/test.txt',
|
||||
'workspace': '+test.suffix',
|
||||
'signature': (
|
||||
'bughac3ooy5qfect4bxdke2zkun2wqufhpivt57vj2mzq52mhqzesjvhyywttxm7qqjyhoskmiqd2lw72qy2u766r'
|
||||
'fqvnbwab4qp3gbi'
|
||||
),
|
||||
'content': 'test',
|
||||
'contentHash': 'bt6dnbamijr6wlgrp5kqmkwwqcwr36ty3fmfyelgrlvwblmhqbiea',
|
||||
}
|
||||
from .helpers import VALID_DOCUMENT
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
@ -199,18 +184,16 @@ def test_check_content_hash() -> None:
|
||||
assert str(ctx.value) == 'content does not match contentHash'
|
||||
|
||||
|
||||
def test_sign_different_author(identity: Identity) -> None:
|
||||
def test_sign_different_author(identity: Identity, es4_document: Es4Document) -> None:
|
||||
"""Test if sign() fails if the signing identity is not the same as the document author"""
|
||||
|
||||
document = Es4Document.from_json(VALID_DOCUMENT)
|
||||
|
||||
with pytest.raises(ValidationError) as ctx:
|
||||
document.sign(identity=identity)
|
||||
es4_document.sign(identity=identity)
|
||||
|
||||
assert str(ctx.value) == 'when signing a document, keypair address must match document author'
|
||||
|
||||
|
||||
def test_sign_new_identity() -> None:
|
||||
def test_sign_new_identity(es4_document: Es4Document) -> None:
|
||||
"""Test if signing a document with a different entity also sets the author"""
|
||||
|
||||
other_key_seed = (
|
||||
@ -219,48 +202,44 @@ def test_sign_new_identity() -> None:
|
||||
identity = Identity('name', sign_key=SigningKey(other_key_seed))
|
||||
assert str(identity) == '@name.bu5seaewd4p7cx7ot4ue3m6wpigfa5hmowxgeophe2so72roao5wq'
|
||||
|
||||
document = Es4Document.from_json(VALID_DOCUMENT)
|
||||
document.author = identity
|
||||
document.sign()
|
||||
es4_document.author = identity
|
||||
es4_document.sign()
|
||||
|
||||
assert (
|
||||
document.signature
|
||||
es4_document.signature
|
||||
== 'bk76oxkhbydy3itajeeqtryyj7ej5y7hqjffae6ilf4kpyklh2w32hx3ndg6cb3zvlphj46zmuxbetk4cj2fh6'
|
||||
'5bhxdtzflvf7oamcbi'
|
||||
)
|
||||
assert document.author == identity
|
||||
assert es4_document.author == identity
|
||||
|
||||
|
||||
@pytest.mark.id_name('test')
|
||||
def test_sign(identity: Identity) -> None:
|
||||
def test_sign(identity: Identity, es4_document: Es4Document) -> None:
|
||||
"""Test if the sign() method updates the document with a correct signature"""
|
||||
|
||||
document = Es4Document.from_json(VALID_DOCUMENT)
|
||||
document.sign(identity=identity)
|
||||
es4_document.sign(identity=identity)
|
||||
|
||||
assert document.signature == (
|
||||
assert es4_document.signature == (
|
||||
'bughac3ooy5qfect4bxdke2zkun2wqufhpivt57vj2mzq52mhqzesjvhyywttxm7qqjyhoskmiqd2lw72qy2u766r'
|
||||
'fqvnbwab4qp3gbi'
|
||||
)
|
||||
|
||||
|
||||
def test_content_setter() -> None:
|
||||
def test_content_setter(es4_document: Es4Document) -> None:
|
||||
"""Check if the content setter recalculates content_hash, too"""
|
||||
|
||||
document = Es4Document.from_json(VALID_DOCUMENT)
|
||||
document.content = 'new content'
|
||||
assert document.content_hash != VALID_DOCUMENT['contentHash']
|
||||
assert document.content_hash == 'b7yzgbde66w3m67r7srsiajj765xsj5hmaz4phuhqp6mejs77syaq'
|
||||
es4_document.content = 'new content'
|
||||
assert es4_document.content_hash != VALID_DOCUMENT['contentHash']
|
||||
assert es4_document.content_hash == 'b7yzgbde66w3m67r7srsiajj765xsj5hmaz4phuhqp6mejs77syaq'
|
||||
|
||||
|
||||
def test_content_hash_getter() -> None:
|
||||
def test_content_hash_getter(es4_document: Es4Document) -> None:
|
||||
"""Test if the content_hash getter recalculates the content hash if it’s not already set"""
|
||||
|
||||
document = Es4Document.from_json(VALID_DOCUMENT)
|
||||
document._content = 'new content' # pylint: disable=protected-access
|
||||
document._content_hash = None # pylint: disable=protected-access
|
||||
es4_document._content = 'new content' # pylint: disable=protected-access
|
||||
es4_document._content_hash = None # pylint: disable=protected-access
|
||||
|
||||
assert document.content_hash == 'b7yzgbde66w3m67r7srsiajj765xsj5hmaz4phuhqp6mejs77syaq'
|
||||
assert es4_document.content_hash == 'b7yzgbde66w3m67r7srsiajj765xsj5hmaz4phuhqp6mejs77syaq'
|
||||
|
||||
|
||||
def test_validate_unsigned_document(identity: Identity) -> None:
|
||||
@ -274,9 +253,7 @@ def test_validate_unsigned_document(identity: Identity) -> None:
|
||||
assert str(ctx.value) == 'document has no signature assigned'
|
||||
|
||||
|
||||
def test_content_length() -> None:
|
||||
def test_content_length(es4_document: Es4Document) -> None:
|
||||
"""Test the content_length property"""
|
||||
|
||||
document = Es4Document.from_json(VALID_DOCUMENT)
|
||||
|
||||
assert document.content_length == 4
|
||||
assert es4_document.content_length == 4
|
||||
|
Loading…
Reference in New Issue
Block a user