137 lines
3.4 KiB
Python
137 lines
3.4 KiB
Python
"""Test fixtures."""
|
|
|
|
import datetime
|
|
|
|
import pytest
|
|
from pydiscourse import client
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def sso_secret():
|
|
return "d836444a9e4084d5b224a60c208dce14"
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def sso_nonce():
|
|
return "cb68251eefb5211e58c00ff1395f0c0b"
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def sso_payload():
|
|
return "bm9uY2U9Y2I2ODI1MWVlZmI1MjExZTU4YzAwZmYxMzk1ZjBjMGI%3D%0A"
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def sso_signature():
|
|
return "2828aa29899722b35a2f191d34ef9b3ce695e0e6eeec47deb46d588d70c7cb56"
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def name():
|
|
return "sam"
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def username():
|
|
return "samsam"
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def external_id():
|
|
return "hello123"
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def email():
|
|
return "test@test.com"
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def redirect_url(sso_payload):
|
|
return f"/session/sso_login?sso={sso_payload}YW0mdXNlcm5hbWU9c2Ftc2FtJmVtYWlsPXRlc3QlNDB0ZXN0LmNvbSZleHRl%0Acm5hbF9pZD1oZWxsbzEyMw%3D%3D%0A&sig=1c884222282f3feacd76802a9dd94e8bc8deba5d619b292bed75d63eb3152c0b"
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def discourse_host():
|
|
return "http://testhost"
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def discourse_api_username():
|
|
return "testuser"
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def discourse_api_key():
|
|
return "testkey"
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def discourse_client(discourse_host, discourse_api_username, discourse_api_key):
|
|
return client.DiscourseClient(
|
|
discourse_host,
|
|
discourse_api_username,
|
|
discourse_api_key,
|
|
)
|
|
|
|
|
|
@pytest.fixture
|
|
def _frozen_time(mocker):
|
|
now = mocker.patch("pydiscourse.client.now")
|
|
now.return_value = datetime.datetime(
|
|
2023,
|
|
8,
|
|
13,
|
|
12,
|
|
30,
|
|
15,
|
|
tzinfo=datetime.timezone.utc,
|
|
)
|
|
|
|
|
|
@pytest.fixture
|
|
def discourse_request(discourse_host, discourse_client, requests_mock):
|
|
"""Fixture for mocking Discourse API requests.
|
|
|
|
The only request arguments are the method and the path.
|
|
|
|
Example:
|
|
|
|
>>> def test_something(discourse_request):
|
|
>>> request = discourse_request(
|
|
>>> "put", # the method, case-insensitive
|
|
>>> "/the-path.json?q=4", # the absolute path with query, NO host
|
|
>>> headers={'content-type': 'text/plain'}, # override default headers
|
|
>>> content=b"ERROR", # override bytestring response
|
|
>>> )
|
|
|
|
If `content` is provided, that will be used as the response body.
|
|
If `json` is provided, then the body will return the given JSON-
|
|
compatable Python structure (e.g. dictionary).
|
|
If neither is given then the return `json` will be an empty
|
|
dictionary (`{}`).
|
|
|
|
Returns a function for inserting sensible default values.
|
|
"""
|
|
|
|
def inner(method, path, headers=None, json=None, content=None):
|
|
full_path = f"{discourse_host}{path}"
|
|
if not headers:
|
|
headers = {
|
|
"Content-Type": "application/json; charset=utf-8",
|
|
"Api-Key": discourse_client.api_key,
|
|
"Api-Username": discourse_client.api_username,
|
|
}
|
|
|
|
kwargs = {}
|
|
if content:
|
|
kwargs["content"] = content
|
|
elif json:
|
|
kwargs["json"] = json
|
|
else:
|
|
kwargs["json"] = {}
|
|
|
|
return requests_mock.request(method, full_path, headers=headers, **kwargs)
|
|
|
|
return inner
|