Skip to content

Commit

Permalink
added code review changes
Browse files Browse the repository at this point in the history
  • Loading branch information
ZohebShaikh committed Sep 5, 2024
1 parent d084048 commit d7a379b
Showing 1 changed file with 62 additions and 47 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@
from fastapi import status
from pydantic import TypeAdapter

from blueapi.client.rest import BlueapiRestClient, BlueskyRemoteControlError
from blueapi.client.client import (
BlueapiClient,
BlueskyRemoteControlError,
)
from blueapi.config import ApplicationConfig
from blueapi.service.interface import get_devices, get_plans
from blueapi.service.model import (
DeviceResponse,
Expand All @@ -22,7 +26,7 @@
_SIMPLE_TASK = Task(name="sleep", params={"time": 0.0})
_LONG_TASK = Task(name="sleep", params={"time": 1.0})

rest = BlueapiRestClient()
client = BlueapiClient.from_config(config=ApplicationConfig())


def get_response(
Expand All @@ -35,53 +39,53 @@ def get_response(


def test_get_plans():
assert rest.get_plans() == PlanResponse(plans=get_plans())
assert client.get_plans() == PlanResponse(plans=get_plans())


def test_get_plans_by_name():
for plan in get_plans():
assert rest.get_plan(plan.name) == plan
assert client.get_plan(plan.name) == plan


def test_get_non_existant_plan():
def test_get_non_existent_plan():
with pytest.raises(KeyError) as exception:
rest.get_plan("Not exists")
client.get_plan("Not exists")
assert exception.value.args[0] == ("{'detail': 'Item not found'}")


def test_get_devices():
assert rest.get_devices() == DeviceResponse(devices=get_devices())
assert client.get_devices() == DeviceResponse(devices=get_devices())


def test_get_device_by_name():
for device in get_devices():
assert rest.get_device(device.name) == device
assert client.get_device(device.name) == device


def test_get_non_existant_device():
def test_get_non_existent_device():
with pytest.raises(KeyError) as exception:
assert rest.get_device("Not exists")
assert client.get_device("Not exists")
assert exception.value.args[0] == ("{'detail': 'Item not found'}")


def test_create_task_and_delete_task_by_id():
create_task = rest.create_task(_SIMPLE_TASK)
rest.clear_task(create_task.task_id)
create_task = client.create_task(_SIMPLE_TASK)
client.clear_task(create_task.task_id)


def test_create_task_validation_error():
with pytest.raises(KeyError) as exception:
rest.create_task(Task(name="Not-exists", params={"Not-exists": 0.0}))
client.create_task(Task(name="Not-exists", params={"Not-exists": 0.0}))
assert exception.value.args[0] == ("{'detail': 'Item not found'}")


def test_get_all_tasks():
created_tasks = []
for task in [_SIMPLE_TASK, _LONG_TASK]:
created_task = rest.create_task(task)
created_task = client.create_task(task)
created_tasks.append(created_task)

task_list = get_response(rest._url("/tasks"), TasksListResponse)
task_list = get_response(client._rest._url("/tasks"), TasksListResponse)

assert isinstance(task_list, TasksListResponse)
task_ids = [task.task_id for task in created_tasks]
Expand All @@ -90,66 +94,78 @@ def test_get_all_tasks():
assert task.is_complete is False and task.is_pending is True

for task in created_tasks:
rest.clear_task(task.task_id)
client.clear_task(task.task_id)


def test_get_task_by_id():
created_task = rest.create_task(_SIMPLE_TASK)
created_task = client.create_task(_SIMPLE_TASK)

get_task = rest.get_task(created_task.task_id)
get_task = client.get_task(created_task.task_id)
assert (
get_task.task_id == created_task.task_id
and get_task.is_pending
and not get_task.is_complete
and len(get_task.errors) == 0
)

rest.clear_task(created_task.task_id)
client.clear_task(created_task.task_id)


def test_get_non_existent_task():
with pytest.raises(KeyError) as exception:
client.get_task("Not-exists")
assert exception.value.args[0] == "{'detail': 'Item not found'}"


def test_delete_non_existent_task():
with pytest.raises(KeyError) as exception:
client.clear_task("Not-exists")
assert exception.value.args[0] == "{'detail': 'Item not found'}"


def test_put_worker_task():
created_task = rest.create_task(_SIMPLE_TASK)
rest.update_worker_task(WorkerTask(task_id=created_task.task_id))
active_task = rest.get_active_task()
created_task = client.create_task(_SIMPLE_TASK)
client.start_task(WorkerTask(task_id=created_task.task_id))
active_task = client.get_active_task()
assert active_task.task_id == created_task.task_id
rest.clear_task(created_task.task_id)
client.clear_task(created_task.task_id)


def test_put_worker_task_fails_if_not_idle():
small_task = rest.create_task(_SIMPLE_TASK)
long_task = rest.create_task(_LONG_TASK)
small_task = client.create_task(_SIMPLE_TASK)
long_task = client.create_task(_LONG_TASK)

rest.update_worker_task(WorkerTask(task_id=long_task.task_id))
active_task = rest.get_active_task()
client.start_task(WorkerTask(task_id=long_task.task_id))
active_task = client.get_active_task()
assert active_task.task_id == long_task.task_id

with pytest.raises(BlueskyRemoteControlError) as exception:
rest.update_worker_task(WorkerTask(task_id=small_task.task_id))
client.start_task(WorkerTask(task_id=small_task.task_id))
assert exception.value.args[0] == "<Response [409]>"
time.sleep(1)
rest.clear_task(small_task.task_id)
rest.clear_task(long_task.task_id)
client.clear_task(small_task.task_id)
client.clear_task(long_task.task_id)


def test_get_worker_state():
assert rest.get_state() == WorkerState.IDLE
assert client.get_state() == WorkerState.IDLE


def test_set_state_transition_error():
with pytest.raises(BlueskyRemoteControlError) as exception:
rest.set_state(WorkerState.RUNNING)
client.resume()
assert exception.value.args[0] == "<Response [400]>"

with pytest.raises(BlueskyRemoteControlError) as exception:
rest.set_state(WorkerState.PAUSED)
client.pause()
assert exception.value.args[0] == "<Response [400]>"


def test_get_task_by_status():
task_1 = rest.create_task(_SIMPLE_TASK)
task_2 = rest.create_task(_SIMPLE_TASK)
task_1 = client.create_task(_SIMPLE_TASK)
task_2 = client.create_task(_SIMPLE_TASK)
task_by_pending_request = requests.get(
rest._url("/tasks"), params={"task_status": TaskStatusEnum.PENDING}
client._rest._url("/tasks"), params={"task_status": TaskStatusEnum.PENDING}
)
assert task_by_pending_request.status_code == status.HTTP_200_OK
task_by_pending = TypeAdapter(TasksListResponse).validate_python(
Expand All @@ -161,12 +177,12 @@ def test_get_task_by_status():
trackable_task = TypeAdapter(TrackableTask).validate_python(task)
assert trackable_task.is_complete is False and trackable_task.is_pending is True

rest.update_worker_task(WorkerTask(task_id=task_1.task_id))
time.sleep(0.1)
rest.update_worker_task(WorkerTask(task_id=task_2.task_id))
time.sleep(0.1)
client.start_task(WorkerTask(task_id=task_1.task_id))
time.sleep(0.01)
client.start_task(WorkerTask(task_id=task_2.task_id))
time.sleep(0.01)
task_by_completed_request = requests.get(
rest._url("/tasks"), params={"task_status": TaskStatusEnum.COMPLETE}
client._rest._url("/tasks"), params={"task_status": TaskStatusEnum.COMPLETE}
)
task_by_completed = TypeAdapter(TasksListResponse).validate_python(
task_by_completed_request.json()
Expand All @@ -176,15 +192,14 @@ def test_get_task_by_status():
trackable_task = TypeAdapter(TrackableTask).validate_python(task)
assert trackable_task.is_complete is True and trackable_task.is_pending is False

rest.clear_task(task_id=task_1.task_id)
rest.clear_task(task_id=task_2.task_id)
client.clear_task(task_id=task_1.task_id)
client.clear_task(task_id=task_2.task_id)


def test_get_current_state_of_environment():
assert rest.get_environment() == EnvironmentResponse(initialized=True)
assert client.get_environment() == EnvironmentResponse(initialized=True)


def test_delete_current_environment():
rest.delete_environment()
time.sleep(5)
assert rest.get_environment() == EnvironmentResponse(initialized=True)
client.reload_environment()
assert client.get_environment() == EnvironmentResponse(initialized=True)

0 comments on commit d7a379b

Please sign in to comment.