Skip to content

Commit 2ddfecf

Browse files
committed
tests/fix: improve test coverage, fix bugs
1 parent e4b7362 commit 2ddfecf

File tree

9 files changed

+179
-0
lines changed

9 files changed

+179
-0
lines changed

tests/config.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import os
2+
3+
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
4+
TEMPLATES_DIR = "templates"
5+
SECRET_KEY = "secret-key"
6+
LOCALE = "RU_RU"
7+
LOCALE_DIR = "locales"
8+
VERSION = "0.1.0"
9+
DESCRIPTION = "Example echonext webapp"
10+
STATIC_DIR = "static"

tests/example_env

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
PEN_BASE_DIR=.
2+
PEN_TEMPLATES_DIR=templates
3+
PEN_SECRET_KEY=secret-key
4+
PEN_LOCALE=RU_RU
5+
PEN_LOCALE_DIR=locales
6+
PEN_VERSION=0.1.0
7+
PEN_DESCRIPTION=Example
8+
PEN_STATIC_DIR=static

tests/example_ini.ini

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[Settings]
2+
BASE_DIR=.
3+
TEMPLATES_DIR=templates
4+
SECRET_KEY=secret-key
5+
LOCALE=RU_RU
6+
LOCALE_DIR=locales
7+
VERSION=0.1.0
8+
DESCRIPTION=Example
9+
STATIC_DIR=static

tests/static/styles.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
* {
2+
background: #fff;
3+
color: #111;
4+
}

tests/test_locales.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from datetime import datetime
2+
from pyechonext.i18n_l10n import JSONi18nLoader, JSONLocalizationLoader, LanguageManager
3+
4+
date = datetime.strptime('1980 01 01 00 00 00', '%Y %m %d %H %M %S').date()
5+
6+
7+
def test_i18n():
8+
i18n_loader = JSONi18nLoader('DEFAULT')
9+
lm = LanguageManager(i18n_loader)
10+
11+
assert lm.translate('Test: title') == 'Test: pyEchoNext Example Website'
12+
13+
14+
def test_l10n():
15+
l10n_loader = JSONLocalizationLoader('DEFAULT')
16+
assert l10n_loader.format_number(1000.0) == '1,000.00'
17+
assert l10n_loader.format_currency(3000.0) == '$3,000.00'
18+
assert l10n_loader.format_date(date) == '1980-01-01 00:00'

tests/test_permissions.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
from pyechonext.permissions import (
2+
AccessControlRule,
3+
AgeRestrictionsABP,
4+
DefaultPermissionChecker,
5+
Permission,
6+
Policy,
7+
Resource,
8+
Role,
9+
User,
10+
UserController,
11+
)
12+
13+
view_users_perm = Permission("view_users")
14+
edit_users_perm = Permission("edit_users")
15+
16+
admin_role = Role("admin")
17+
admin_role.add_permission(view_users_perm)
18+
admin_role.add_permission(edit_users_perm)
19+
20+
user_role = Role("user")
21+
user_role.add_permission(view_users_perm)
22+
23+
user_resource = Resource("UserResource")
24+
25+
policy = Policy()
26+
policy.add_rule(AccessControlRule(admin_role, view_users_perm, user_resource, True))
27+
policy.add_rule(AccessControlRule(admin_role, edit_users_perm, user_resource, True))
28+
policy.add_rule(AccessControlRule(user_role, view_users_perm, user_resource, True))
29+
policy.add_rule(AccessControlRule(user_role, edit_users_perm, user_resource, False))
30+
31+
age_policy = AgeRestrictionsABP(conditions={"age": 18}, rules=policy.rules)
32+
age_policy.add_rule(AccessControlRule(user_role, view_users_perm, user_resource, True))
33+
34+
admin_user = User("admin", attributes={"age": 30})
35+
admin_user.add_role(admin_role)
36+
37+
young_user = User("john_doe", attributes={"age": 17})
38+
young_user.add_role(user_role)
39+
40+
permission_checker = DefaultPermissionChecker(policy)
41+
user_controller = UserController(permission_checker)
42+
43+
44+
def test_controller():
45+
"""Test Controller"""
46+
assert user_controller.view_users(admin_user, user_resource) == (
47+
"200 OK",
48+
"User edit form",
49+
)
50+
assert user_controller.edit_users(admin_user, user_resource) == (
51+
"200 OK",
52+
"User edit form",
53+
)
54+
assert user_controller.edit_users(young_user, user_resource) == (
55+
"403 Forbidden",
56+
"You do not have permission to edit users.",
57+
)
58+
59+
60+
def test_age_policy():
61+
"""Test Age Policy"""
62+
assert age_policy.evaluate(young_user, user_resource, view_users_perm) == False
63+
assert age_policy.evaluate(admin_user, user_resource, view_users_perm) == True

tests/test_responses.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from pyechonext.response import Response
2+
3+
4+
def test_response():
5+
response = Response(body='{"test": true, "testlib": "pytest"}', content_type='application/json')
6+
7+
assert response.status_code == '200 OK'
8+
assert response.content_type == "application/json"
9+
assert response.charset == "UTF-8"
10+
11+
response_json = response.json
12+
13+
assert response_json == {"test": True, "testlib": "pytest"}

tests/test_static.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from pyechonext.config import SettingsConfigType, SettingsLoader
2+
3+
4+
def test_config():
5+
config_loader = SettingsLoader(SettingsConfigType.PYMODULE, "config.py")
6+
settings = config_loader.get_settings()
7+
8+
assert settings.TEMPLATES_DIR == "templates"
9+
assert settings.SECRET_KEY == "secret-key"
10+
assert settings.LOCALE == "RU_RU"
11+
assert settings.LOCALE_DIR == "locales"
12+
assert settings.VERSION == "0.1.0"
13+
assert settings.DESCRIPTION == "Example echonext webapp"
14+
assert settings.STATIC_DIR == "static"
15+
16+
17+
def test_env():
18+
config_loader = SettingsLoader(SettingsConfigType.DOTENV, "example_env")
19+
settings = config_loader.get_settings()
20+
21+
assert settings.TEMPLATES_DIR == "templates"
22+
assert settings.SECRET_KEY == "secret-key"
23+
assert settings.LOCALE == "RU_RU"
24+
assert settings.LOCALE_DIR == "locales"
25+
assert settings.VERSION == "0.1.0"
26+
assert settings.DESCRIPTION == "Example"
27+
assert settings.STATIC_DIR == "static"
28+
29+
30+
def test_ini():
31+
config_loader = SettingsLoader(SettingsConfigType.INI, "example_ini.ini")
32+
settings = config_loader.get_settings()
33+
34+
assert settings.TEMPLATES_DIR == "templates"
35+
assert settings.SECRET_KEY == "secret-key"
36+
assert settings.LOCALE == "RU_RU"
37+
assert settings.LOCALE_DIR == "locales"
38+
assert settings.VERSION == "0.1.0"
39+
assert settings.DESCRIPTION == "Example"
40+
assert settings.STATIC_DIR == "static"

tests/test_static_files.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import os
2+
from pyechonext.config import Settings
3+
from pyechonext.static import StaticFile, StaticFilesManager
4+
5+
settings = Settings(BASE_DIR=os.path.dirname(os.path.abspath(__file__)), TEMPLATES_DIR="templates", SECRET_KEY='secret-key')
6+
7+
8+
def test_static():
9+
file = StaticFile(settings, 'styles.css')
10+
manager = StaticFilesManager([file])
11+
12+
assert file.get_content_type() == 'text/css'
13+
assert manager.get_file_type('/static/styles.css') == 'text/css'
14+

0 commit comments

Comments
 (0)