Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
17 changes: 17 additions & 0 deletions Tests/smoke/ConnectionSmoke_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from .SmokeTestBase import SmokeTestBase


class TestConnectionSmoke(SmokeTestBase):

def test_tm1_connection(self):
tm1_version = self.tm1.configuration.get_product_version()
self.assertEqual(tm1_version, self.mocked_server_version)

def test_tm1_server_name(self):
self.mock_server_name("Tm1pyMockedDatabase")
server_name = self.tm1.configuration.get_server_name()
self.assertEqual(server_name, "Tm1pyMockedDatabase")

def test_is_connected(self):
self.mock_server_name("Tm1pyMockedDatabase")
self.assertTrue(self.tm1.connection.is_connected())
38 changes: 38 additions & 0 deletions Tests/smoke/DimensionSmoke_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import responses

from .SmokeTestBase import SmokeTestBase


class TestDimensionSmoke(SmokeTestBase):

def test_dimension_metadata(self):

self.rsps.add(
responses.GET,
f"{self.base_url}/Dimensions",
json={
"@odata.context": "$metadata#Dimensions",
"value": [
{
"@odata.etag": 'W/"0a8190dd72c21841bda16b3fd8492f171df98aa7"',
"Name": "}Clients",
"UniqueName": "[}Clients]",
"AllLeavesHierarchyName": "",
"Attributes": {"Caption": "}Clients"},
},
{
"@odata.etag": 'W/"e4bd6cb79066cc3936a5af517dece606b3f5f3d5"',
"Name": "}Groups",
"UniqueName": "[}Groups]",
"AllLeavesHierarchyName": "",
"Attributes": {"Caption": "}Groups"},
},
],
},
status=200,
)

names = self.tm1.dimensions.get_all_names()

self.assertIn("}Clients", names)
self.assertIn("}Groups", names)
60 changes: 60 additions & 0 deletions Tests/smoke/SmokeTestBase.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import unittest

import responses

from TM1py.Services import TM1Service

DEFAULT_VERSION = "11.0.0"


class SmokeTestBase(unittest.TestCase):
address = "tm1server"
port = 8000
protocol = "https"
mocked_server_version = DEFAULT_VERSION

def setUp(self):
self.base_url = f"{self.protocol}://{self.address}:{self.port}/api/v1"
self.rsps = responses.RequestsMock(assert_all_requests_are_fired=True)
self.rsps.start()

# Always stub ProductVersion before constructing TM1Service
self.mock_bootstrap_version(self.mocked_server_version)

# Construct service while mock is active
self.tm1 = TM1Service(**self.get_tm1_kwargs())

def tearDown(self):
self.rsps.stop()
self.rsps.reset()

def get_tm1_kwargs(self):
# Subclasses can override to tweak auth/args
return {
"address": self.address,
"port": self.port,
"user": "admin",
"password": "apple",
"ssl": True,
}

# Helpers for common stubs
def mock_bootstrap_version(self, version: str = DEFAULT_VERSION):
self.rsps.add(
responses.GET,
f"{self.base_url}/Configuration/ProductVersion/$value",
body=version,
status=200,
)

def mock_server_name(self, name: str):
self.rsps.add(
responses.GET,
f"{self.base_url}/Configuration/ServerName/$value",
body=name,
status=200,
)

def mock_get(self, path: str, body: str, status: int = 200):
# Generic helper if you need other endpoints
self.rsps.add(responses.GET, f"{self.base_url}{path}", body=body, status=200)
Empty file added Tests/smoke/__init__.py
Empty file.
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
"dev": [
"pytest",
"pytest-xdist",
"responses",
"python-dateutil",
"black",
"ruff",
Expand Down