From 524a1cc7313f3eca0d63d096ffc478df344b88ea Mon Sep 17 00:00:00 2001 From: Peyton Murray Date: Mon, 22 Apr 2024 16:08:35 -0700 Subject: [PATCH] Add user journey test to retrieve a lockfile for a build (#807) --- .../tests/user_journeys/test_user_journeys.py | 19 +++++++++++++++++++ .../tests/user_journeys/utils/api_utils.py | 14 +++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/conda-store-server/tests/user_journeys/test_user_journeys.py b/conda-store-server/tests/user_journeys/test_user_journeys.py index c0f0206b2..9f8cc51ef 100644 --- a/conda-store-server/tests/user_journeys/test_user_journeys.py +++ b/conda-store-server/tests/user_journeys/test_user_journeys.py @@ -207,3 +207,22 @@ def check_status(): return status == utils.BuildStatus.CANCELED utils.wait_for_condition(check_status, timeout=60, interval=1) + + +@pytest.mark.user_journey +def test_get_lockfile(base_url: str): + """Test that an admin can access a valid lockfile for a build.""" + api = utils.API(base_url=base_url) + namespace = "default" + build_request = api.create_environment( + namespace, + "tests/user_journeys/test_data/simple_environment.yaml", + ).json() + + lockfile = api.get_lockfile(build_request["data"]["id"]) + + packages = set(package["name"] for package in lockfile["package"]) + assert "python" in packages + assert "fastapi" in packages + + api.delete_environment(namespace, build_request["data"]["specification"]["name"]) diff --git a/conda-store-server/tests/user_journeys/utils/api_utils.py b/conda-store-server/tests/user_journeys/utils/api_utils.py index beb5b3d5e..773a99f88 100644 --- a/conda-store-server/tests/user_journeys/utils/api_utils.py +++ b/conda-store-server/tests/user_journeys/utils/api_utils.py @@ -1,10 +1,11 @@ """Helper functions for user journeys.""" +import json import time import uuid from enum import Enum -from typing import Any, Callable, Optional, Union +from typing import Any, Callable, Dict, Optional, Union import requests import utils.time_utils as time_utils @@ -325,6 +326,17 @@ def get_build_status(self, build_id: int) -> BuildStatus: response = self._make_request(f"api/v1/build/{build_id}/") return BuildStatus(response.json()["data"]["status"]) + def get_lockfile(self, build_id: int) -> Dict[str, Any]: + """Get a lockfile for the given build ID. + Build for which the lockfile is to be retrieved + + Returns + ------- + Dict[str, Any] + Dictionary containing the lockfile version, metadata, and packages + """ + return json.loads(self._make_request(f"api/v1/build/{build_id}/lockfile").text) + def wait_for_condition( condition: Callable[[], bool], timeout: int = 60, interval: int = 1