Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

testing env support #288

Merged
merged 6 commits into from
Oct 7, 2022
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion integration_tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,4 +74,16 @@ def dev_session():
process = spawn_process(command)
time.sleep(5)
yield
kill_process(process)
kill_process(process)

@pytest.fixture(scope="session")
def test_session():
os.environ["ROBYN_URL"] = "127.0.0.1"
os.environ["ROBYN_PORT"] = os.environ["PORT"]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Try setting ROBYN_URL and ROBYN_PORT directly through load_vars()?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

but shouldn't that be left to the user, it won't always be the case that a user will provide a PORT and a URL in robyn.env but even if he did those vars will be loaded automatically and he can just assign them to a variable and use them

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Shending-Help , actually the way the env file is supposed to behave in my mind is that if the user sets a config then they don't have to worry about altering the code.

Copy link
Contributor Author

@Shending-Help Shending-Help Oct 7, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

but that wouldn't be the case for other variables such as a token or db credentials so should we just auto invoke the variables that are relevant for robyn and other variables get left for the user to decide what to do with them?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No no. What I mean is if you set ROBYN_PORT in the test then it will be automatically present in the environment. That way you don't need to set that variable in the fixture.

If that still doesn't make sense then we can hop on a quick call.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i think i understand what you mean i will get on it and check with you afterwards

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perfect!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i think this should be it, I changed the content written in robyn.env to include ROBYN_PORT and ROBYN_URL and it worked, i also deleted the fixture i created in conftest.py since it is of no use now.

current_file_path = pathlib.Path(__file__).parent.resolve()
base_routes = os.path.join(current_file_path, "./base_routes.py")
command = ["python3", base_routes, "--dev"]
process = spawn_process(command)
time.sleep(5)
yield
kill_process(process)
41 changes: 41 additions & 0 deletions integration_tests/test_env_populator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
from integration_tests.conftest import test_session
from robyn.env_populator import load_vars, parser
import pathlib
import os
import pytest
import requests



path = pathlib.Path(__file__).parent

#create robyn.env before test and delete it after test
@pytest.fixture
def env_file():
CONTENT = "PORT=8080"
dir = path / "test_dir"
env_file = dir / "robyn.env"
env_file.write_text(CONTENT)
yield
env_file.unlink()
sansyrox marked this conversation as resolved.
Show resolved Hide resolved

def test_parser(env_file):
dir = path / "test_dir"
env_file = dir / "robyn.env"
assert list(parser(config_path = env_file)) == [['PORT', '8080']]

def test_load_vars(env_file):
dir = path / "test_dir"
env_file = dir / "robyn.env"
load_vars(variables = parser(config_path = env_file))
assert os.environ['PORT'] == '8080'
sansyrox marked this conversation as resolved.
Show resolved Hide resolved

sansyrox marked this conversation as resolved.
Show resolved Hide resolved

def test_get_request(test_session, env_file):
sansyrox marked this conversation as resolved.
Show resolved Hide resolved
dir = path / "test_dir"
env_file = dir / "robyn.env"
load_vars(variables = parser(config_path = env_file))
port = os.environ['PORT']
BASE_URL = f"http://127.0.0.1:{port}"
res = requests.get(f"{BASE_URL}")
assert res.status_code == 200
6 changes: 2 additions & 4 deletions robyn/env_populator.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,8 @@ def parser(config_path=CONFIG_PATH):
def load_vars(variables = None):
"""Main function"""

variables = parser()

if variables is None:
return
variables = parser()

for var in variables:
if var[0] in os.environ:
Expand All @@ -43,6 +41,6 @@ def load_vars(variables = None):
logger.info(f" Variable {var[0]} set to {var[1]}")