Skip to content

Commit

Permalink
Add example unit test and config for testing
Browse files Browse the repository at this point in the history
Add testing configuration:
 - pytest as test framework
 - tox for creating testing environments and running tests (run with `tox`)
 - pytest-asycio for asyncio testing
 - coverage/pytest-cov for measuring test coverage
 - flake8 for pep8 checking

I've also added one quick example test demonstrating basic unit testing
and use of the basic fixtures and marks provided by pytest-asyncio.

Just this already covers a suprising 32% of the codebase, mostly through
imports, but I wouldn't expect it to be helpful yet. This should provide
a good base to build on in the future though.
  • Loading branch information
NotAFile committed Dec 7, 2019
1 parent b8aa639 commit a4876c1
Show file tree
Hide file tree
Showing 7 changed files with 93 additions and 1 deletion.
8 changes: 8 additions & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
@@ -0,0 1,8 @@
[run]
branch = true
parallel = true
source =
telethon

[report]
precision = 2
3 changes: 3 additions & 0 deletions dev-requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 1,3 @@
pytest
pytest-cov
pytest-asyncio
2 changes: 1 addition & 1 deletion optional-requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 1,4 @@
cryptg
pysocks
hachoir3
hachoir
pillow
Empty file added tests/__init__.py
Empty file.
Empty file added tests/telethon/__init__.py
Empty file.
59 changes: 59 additions & 0 deletions tests/telethon/test_helpers.py
Original file line number Diff line number Diff line change
@@ -0,0 1,59 @@
"""
tests for telethon.helpers
"""

from base64 import b64decode

import pytest

from telethon import helpers


def test_strip_text():
assert helpers.strip_text(" text ", []) == "text"
# I can't interpret the rest of the code well enough yet


class TestSyncifyAsyncContext:
class NoopContextManager:
def __init__(self, loop):
self.count = 0
self.loop = loop

async def __aenter__(self):
self.count = 1
return self

async def __aexit__(self, exc_type, *args):
assert exc_type is None
self.count -= 1

__enter__ = helpers._sync_enter
__exit__ = helpers._sync_exit

def test_sync_acontext(self, event_loop):
contm = self.NoopContextManager(event_loop)
assert contm.count == 0

with contm:
assert contm.count == 1

assert contm.count == 0

@pytest.mark.asyncio
async def test_async_acontext(self, event_loop):
contm = self.NoopContextManager(event_loop)
assert contm.count == 0

async with contm:
assert contm.count == 1

assert contm.count == 0


def test_generate_key_data_from_nonce():
gkdfn = helpers.generate_key_data_from_nonce

key_expect = b64decode(b'NFwRFB8Knw/kAmvPWjtrQauWysHClVfQh0UOAaABqZA=')
nonce_expect = b64decode(b'1AgjhU9eDvJRjFik73bjR2zZEATzL/jLu9yodYfWEgA=')
assert gkdfn(123456789, 1234567) == (key_expect, nonce_expect)
22 changes: 22 additions & 0 deletions tox.ini
Original file line number Diff line number Diff line change
@@ -0,0 1,22 @@
[tox]
envlist = py35,py36,py37,py38

[testenv]
deps =
-rrequirements.txt
-roptional-requirements.txt
-rdev-requirements.txt
commands =
# NOTE: you can run any command line tool here - not just tests
pytest {posargs}

# run with tox -e flake
[testenv:flake]
deps =
-rrequirements.txt
-roptional-requirements.txt
-rdev-requirements.txt
flake8
commands =
# TODO: move options to dedicated flake8 config
flake8 --exclude telethon/tl/,telethon/errors/rpcerrorlist.py --ignore E501,F401 telethon/ tests/

0 comments on commit a4876c1

Please sign in to comment.