Skip to content

Commit

Permalink
fix: Fix configured localnet (#610)
Browse files Browse the repository at this point in the history
* fix: wip - capture localnet config path when using a custom config directory

* fix: added config file to localnet mock. Updated tests

* fix: updated breaking test

* fix: updated breaking test

* fix: updated breaking test

* chore: fix tests on windows

* fix: updated localnet proc mock in test

---------

Co-authored-by: Neil Campbell <[email protected]>
  • Loading branch information
lempira and neilcampbell authored Jan 31, 2025
1 parent 4f5fa1a commit ba91e82
Show file tree
Hide file tree
Showing 39 changed files with 185 additions and 125 deletions.
6 changes: 4 additions & 2 deletions src/algokit/core/sandbox.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,13 +119,15 @@ def _extract_json_lines(output: str) -> list[str]:
def _create_instance_from_data(cls, data: list[dict[str, Any]]) -> ComposeSandbox | None:
for item in data:
config_file = item.get("ConfigFiles", "").split(",")[0]
full_name = Path(config_file).parent.name
config_file_path = Path(config_file)
full_name = config_file_path.parent.name
name = (
full_name.replace(f"{SANDBOX_BASE_NAME}_", "")
if full_name.startswith(f"{SANDBOX_BASE_NAME}_")
else full_name
)
return cls(name)
config_path = config_file_path.parent.parent
return cls(name, config_path)
return None

def set_algod_dev_mode(self, *, dev_mode: bool) -> None:
Expand Down
66 changes: 46 additions & 20 deletions tests/goal/test_goal.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,9 @@ def test_goal_no_args(app_dir_mock: AppDirs) -> None:
result = invoke("goal")

assert result.exit_code == 0
verify(_normalize_output(result.output.replace(str(app_dir_mock.app_config_dir), "{app_config}")))
verify(
_normalize_output(result.output.replace("\\\\", "\\").replace(str(app_dir_mock.app_config_dir), "{app_config}"))
)


@pytest.mark.usefixtures(
Expand All @@ -131,7 +133,9 @@ def test_goal_console(mocker: MockerFixture, app_dir_mock: AppDirs) -> None:
result = invoke("goal --console")

assert result.exit_code == 0
verify(_normalize_output(result.output.replace(str(app_dir_mock.app_config_dir), "{app_config}")))
verify(
_normalize_output(result.output.replace("\\\\", "\\").replace(str(app_dir_mock.app_config_dir), "{app_config}"))
)


@pytest.mark.usefixtures("_setup_latest_dummy_compose", "_mock_proc_with_running_localnet", "_health_success")
Expand All @@ -145,7 +149,9 @@ def test_goal_console_algod_not_created(app_dir_mock: AppDirs, proc_mock: ProcMo
result = invoke("goal --console")

assert result.exit_code == 0
verify(_normalize_output(result.output.replace(str(app_dir_mock.app_config_dir), "{app_config}")))
verify(
_normalize_output(result.output.replace("\\\\", "\\").replace(str(app_dir_mock.app_config_dir), "{app_config}"))
)


@pytest.mark.usefixtures(
Expand All @@ -162,7 +168,9 @@ def test_goal_console_failed(app_dir_mock: AppDirs, mocker: MockerFixture) -> No
result = invoke("goal --console")

assert result.exit_code == 1
verify(_normalize_output(result.output.replace(str(app_dir_mock.app_config_dir), "{app_config}")))
verify(
_normalize_output(result.output.replace("\\\\", "\\").replace(str(app_dir_mock.app_config_dir), "{app_config}"))
)


@pytest.mark.usefixtures(
Expand All @@ -176,7 +184,9 @@ def test_goal_simple_args(app_dir_mock: AppDirs) -> None:
result = invoke("goal account list")

assert result.exit_code == 0
verify(_normalize_output(result.output.replace(str(app_dir_mock.app_config_dir), "{app_config}")))
verify(
_normalize_output(result.output.replace("\\\\", "\\").replace(str(app_dir_mock.app_config_dir), "{app_config}"))
)


@pytest.mark.usefixtures(
Expand All @@ -190,7 +200,9 @@ def test_goal_complex_args(app_dir_mock: AppDirs) -> None:
result = invoke("goal account export -a RKTAZY2ZLKUJBHDVVA3KKHEDK7PRVGIGOZAUUIZBNK2OEP6KQGEXKKUYUY")

assert result.exit_code == 0
verify(_normalize_output(result.output.replace(str(app_dir_mock.app_config_dir), "{app_config}")))
verify(
_normalize_output(result.output.replace("\\\\", "\\").replace(str(app_dir_mock.app_config_dir), "{app_config}"))
)


def test_goal_start_without_docker(proc_mock: ProcMock) -> None:
Expand Down Expand Up @@ -245,7 +257,9 @@ def test_goal_simple_args_with_input_file(
# Check for the result status
assert result.exit_code == 0

verify(_normalize_output(result.output.replace(str(app_dir_mock.app_config_dir), "{app_config}")))
verify(
_normalize_output(result.output.replace("\\\\", "\\").replace(str(app_dir_mock.app_config_dir), "{app_config}"))
)


@pytest.mark.usefixtures(
Expand Down Expand Up @@ -284,7 +298,9 @@ def test_goal_simple_args_with_output_file(proc_mock: ProcMock, cwd: Path, app_d
# Check if the output file is actually created and copied in cwd in postprocess step
assert (cwd / "balance_record.json").exists()

verify(_normalize_output(result.output.replace(str(app_dir_mock.app_config_dir), "{app_config}")))
verify(
_normalize_output(result.output.replace("\\\\", "\\").replace(str(app_dir_mock.app_config_dir), "{app_config}"))
)


@pytest.mark.usefixtures(
Expand Down Expand Up @@ -329,7 +345,9 @@ def test_goal_simple_args_with_input_output_files(

# Check if the output file is created and copied in cwd in postprocess step
assert (cwd / "approval.compiled").exists()
verify(_normalize_output(result.output.replace(str(app_dir_mock.app_config_dir), "{app_config}")))
verify(
_normalize_output(result.output.replace("\\\\", "\\").replace(str(app_dir_mock.app_config_dir), "{app_config}"))
)


@pytest.mark.usefixtures(
Expand Down Expand Up @@ -381,7 +399,9 @@ def test_goal_simple_args_with_multiple_input_output_files(

# Check if the output file is actually created and copied in cwd in postprocess step
assert (cwd / "approval.compiled").exists()
verify(_normalize_output(result.output.replace(str(app_dir_mock.app_config_dir), "{app_config}")))
verify(
_normalize_output(result.output.replace("\\\\", "\\").replace(str(app_dir_mock.app_config_dir), "{app_config}"))
)


@pytest.mark.usefixtures(
Expand All @@ -399,7 +419,9 @@ def test_goal_simple_args_without_file_error(
result = invoke("goal clerk compile approval.teal -o approval.compiled", cwd=cwd)

assert result.exit_code == 1
verify(_normalize_output(result.output.replace(str(app_dir_mock.app_config_dir), "{app_config}")))
verify(
_normalize_output(result.output.replace("\\\\", "\\").replace(str(app_dir_mock.app_config_dir), "{app_config}"))
)


@pytest.mark.usefixtures(
Expand Down Expand Up @@ -519,17 +541,19 @@ def test_goal_compose_outdated(
verify(_normalize_output(result.output))


@pytest.mark.usefixtures("_setup_latest_dummy_compose", "mocked_goal_mount_path", "_mock_proc_with_algod_running_state")
def test_goal_simple_args_on_named_localnet(proc_mock: ProcMock, app_dir_mock: AppDirs) -> None:
proc_mock.set_output(
"docker compose ls --format json --filter name=algokit_sandbox*",
[json.dumps([{"Name": "algokit_test", "Status": "running", "ConfigFiles": "to/test/docker-compose.yml"}])],
)

@pytest.mark.usefixtures(
"_setup_latest_dummy_compose",
"mocked_goal_mount_path",
"_mock_proc_with_algod_running_state",
"_mock_proc_with_running_localnet",
)
def test_goal_simple_args_on_named_localnet(app_dir_mock: AppDirs) -> None:
result = invoke("goal account list")

assert result.exit_code == 0
verify(_normalize_output(result.output.replace(str(app_dir_mock.app_config_dir), "{app_config}")))
verify(
_normalize_output(result.output.replace("\\\\", "\\").replace(str(app_dir_mock.app_config_dir), "{app_config}"))
)


@pytest.mark.usefixtures(
Expand Down Expand Up @@ -574,4 +598,6 @@ def test_goal_simple_args_with_input_output_files_with_dot_convention_name(

# Check if the output file is created and copied in cwd in postprocess step
assert (cwd / "approval.compiled").exists()
verify(_normalize_output(result.output.replace(str(app_dir_mock.app_config_dir), "{app_config}")))
verify(
_normalize_output(result.output.replace("\\\\", "\\").replace(str(app_dir_mock.app_config_dir), "{app_config}"))
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,9 @@ DEBUG: Running '{container_engine} version' in '{current_working_directory}'
DEBUG: {container_engine}: STDOUT
DEBUG: {container_engine}: STDERR
DEBUG: Running '{container_engine} compose ls --format json --filter name=algokit_sandbox*' in '{current_working_directory}'
DEBUG: {container_engine}: [{"Name": "algokit_test", "Status": "running", "ConfigFiles": "to/test/{container_engine}-compose.yml"}]
DEBUG: The sandbox_test directory does not exist yet; creating it
A named LocalNet is running, goal command will be executed against the named LocalNet
DEBUG: Running '{container_engine} compose ps algod --format json' in '{app_config}/sandbox_test'
DEBUG: {container_engine}: []
DEBUG: Running '{container_engine} compose ps algod --format json' in '{app_config}/sandbox'
DEBUG: {container_engine}: [{"Name": "algokit_sandbox_algod", "State": "running"}]
DEBUG: Running '{container_engine} exec --interactive --workdir /root algokit_sandbox_test_algod goal account list' in '{current_working_directory}'
DEBUG: Running '{container_engine} exec --interactive --workdir /root algokit_sandbox_algod goal account list' in '{current_working_directory}'
STDOUT
STDERR
10 changes: 4 additions & 6 deletions tests/localnet/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from pytest_httpx import HTTPXMock
from pytest_mock import MockerFixture

from tests.utils.app_dir_mock import AppDirs
from tests.utils.proc_mock import ProcMock


Expand Down Expand Up @@ -49,12 +50,9 @@ def _localnet_up_to_date(proc_mock: ProcMock, httpx_mock: HTTPXMock) -> None:


@pytest.fixture()
def _mock_proc_with_running_localnet(proc_mock: ProcMock) -> None:
def _mock_proc_with_running_localnet(proc_mock: ProcMock, app_dir_mock: AppDirs) -> None:
compose_file_path = str(app_dir_mock.app_config_dir / "sandbox" / "docker-compose.yml")
proc_mock.set_output(
"docker compose ls --format json --filter name=algokit_sandbox*",
[
json.dumps(
[{"Name": "algokit_sandbox", "Status": "running", "ConfigFiles": "test/sandbox/docker-compose.yml"}]
)
],
[json.dumps([{"Name": "algokit_sandbox", "Status": "running", "ConfigFiles": compose_file_path}])],
)
19 changes: 4 additions & 15 deletions tests/localnet/test_localnet_console.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from tests.utils.proc_mock import ProcMock


@pytest.mark.usefixtures("_mock_proc_with_running_localnet")
def test_goal_console(
mocker: MockerFixture, tmp_path_factory: pytest.TempPathFactory, app_dir_mock: AppDirs, proc_mock: ProcMock
) -> None:
Expand All @@ -30,20 +31,6 @@ def test_goal_console(
mocker.patch("algokit.core.proc.subprocess_run").return_value = CompletedProcess(
["docker", "exec"], 0, "STDOUT+STDERR"
)
proc_mock.set_output(
"docker compose ls --format json --filter name=algokit_sandbox*",
[
json.dumps(
[
{
"Name": "algokit_sandbox",
"Status": "running",
"ConfigFiles": "test/sandbox_test/docker-compose.yml",
}
]
)
],
)
proc_mock.set_output(
cmd=["docker", "compose", "ps", "algod", "--format", "json"],
output=[json.dumps([{"Name": "algokit_sandbox_algod", "State": "running"}])],
Expand All @@ -52,4 +39,6 @@ def test_goal_console(
result = invoke("localnet console")

assert result.exit_code == 0
verify(_normalize_output(result.output.replace(str(app_dir_mock.app_config_dir), "{app_config}")))
verify(
_normalize_output(result.output.replace("\\\\", "\\").replace(str(app_dir_mock.app_config_dir), "{app_config}"))
)
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,8 @@ DEBUG: Running '{container_engine} version' in '{current_working_directory}'
DEBUG: {container_engine}: STDOUT
DEBUG: {container_engine}: STDERR
DEBUG: Running '{container_engine} compose ls --format json --filter name=algokit_sandbox*' in '{current_working_directory}'
DEBUG: {container_engine}: [{"Name": "algokit_sandbox", "Status": "running", "ConfigFiles": "test/sandbox_test/{container_engine}-compose.yml"}]
DEBUG: The sandbox_test directory does not exist yet; creating it
A named LocalNet is running, goal command will be executed against the named LocalNet
DEBUG: Running '{container_engine} compose ps algod --format json' in '{app_config}/sandbox_test'
DEBUG: {container_engine}: [{"Name": "algokit_sandbox", "Status": "running", "ConfigFiles": "{app_config}/sandbox/{container_engine}-compose.yml"}]
DEBUG: Running '{container_engine} compose ps algod --format json' in '{app_config}/sandbox'
DEBUG: {container_engine}: [{"Name": "algokit_sandbox_algod", "State": "running"}]
Opening Bash console on the algod node; execute `exit` to return to original console
DEBUG: Running '{container_engine} exec -it -w /root algokit_sandbox_test_algod bash' in '{current_working_directory}'
DEBUG: Running '{container_engine} exec -it -w /root algokit_sandbox_algod bash' in '{current_working_directory}'
35 changes: 18 additions & 17 deletions tests/localnet/test_localnet_reset.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@ def test_localnet_reset_without_existing_sandbox(app_dir_mock: AppDirs) -> None:
assert result.exit_code == 0
verify(
get_combined_verify_output(
result.output.replace(str(app_dir_mock.app_config_dir), "{app_config}").replace("\\", "/"),
result.output.replace("\\\\", "\\")
.replace(str(app_dir_mock.app_config_dir), "{app_config}")
.replace("\\", "/"),
"{app_config}/sandbox/docker-compose.yml",
(app_dir_mock.app_config_dir / "sandbox" / "docker-compose.yml").read_text(),
)
Expand All @@ -36,7 +38,9 @@ def test_localnet_reset_with_existing_sandbox_with_out_of_date_config(app_dir_mo
verify(
"\n".join(
[
result.output.replace(str(app_dir_mock.app_config_dir), "{app_config}").replace("\\", "/"),
result.output.replace("\\\\", "\\")
.replace(str(app_dir_mock.app_config_dir), "{app_config}")
.replace("\\", "/"),
"{app_config}/sandbox/docker-compose.yml",
(app_dir_mock.app_config_dir / "sandbox" / "docker-compose.yml").read_text(),
"{app_config}/sandbox/algod_config.json",
Expand All @@ -57,24 +61,17 @@ def test_localnet_reset_with_existing_sandbox_with_up_to_date_config(app_dir_moc
result = invoke("localnet reset")

assert result.exit_code == 0
verify(result.output.replace(str(app_dir_mock.app_config_dir), "{app_config}").replace("\\", "/"))
verify(
result.output.replace("\\\\", "\\").replace(str(app_dir_mock.app_config_dir), "{app_config}").replace("\\", "/")
)


@pytest.mark.usefixtures("proc_mock", "_health_success")
def test_localnet_reset_with_named_sandbox_config(app_dir_mock: AppDirs, proc_mock: ProcMock) -> None:
def test_localnet_reset_with_named_sandbox_config(proc_mock: ProcMock, app_dir_mock: AppDirs) -> None:
compose_file_path = str(app_dir_mock.app_config_dir / "sandbox_test" / "docker-compose.yml")
proc_mock.set_output(
"docker compose ls --format json --filter name=algokit_sandbox*",
[
json.dumps(
[
{
"Name": "algokit_sandbox_test",
"Status": "running",
"ConfigFiles": "sandbox_test/docker-compose.yml",
}
]
)
],
[json.dumps([{"Name": "algokit_sandbox", "Status": "running", "ConfigFiles": compose_file_path}])],
)
(app_dir_mock.app_config_dir / "sandbox_test").mkdir()
(app_dir_mock.app_config_dir / "sandbox_test" / "docker-compose.yml").write_text(
Expand All @@ -89,7 +86,9 @@ def test_localnet_reset_with_named_sandbox_config(app_dir_mock: AppDirs, proc_mo
result = invoke("localnet reset")

assert result.exit_code == 0
verify(result.output.replace(str(app_dir_mock.app_config_dir), "{app_config}").replace("\\", "/"))
verify(
result.output.replace("\\\\", "\\").replace(str(app_dir_mock.app_config_dir), "{app_config}").replace("\\", "/")
)


@pytest.mark.usefixtures(
Expand All @@ -105,7 +104,9 @@ def test_localnet_reset_with_existing_sandbox_with_up_to_date_config_with_pull(a
result = invoke("localnet reset --update")

assert result.exit_code == 0
verify(result.output.replace(str(app_dir_mock.app_config_dir), "{app_config}").replace("\\", "/"))
verify(
result.output.replace("\\\\", "\\").replace(str(app_dir_mock.app_config_dir), "{app_config}").replace("\\", "/")
)


@pytest.mark.usefixtures("app_dir_mock", "_mock_proc_with_running_localnet")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ DEBUG: Running 'docker version' in '{current_working_directory}'
DEBUG: docker: STDOUT
DEBUG: docker: STDERR
DEBUG: Running 'docker compose ls --format json --filter name=algokit_sandbox*' in '{current_working_directory}'
DEBUG: docker: [{"Name": "algokit_sandbox", "Status": "running", "ConfigFiles": "test/sandbox/docker-compose.yml"}]
DEBUG: docker: [{"Name": "algokit_sandbox", "Status": "running", "ConfigFiles": "{app_config}/sandbox/docker-compose.yml"}]
Cleaning up the running AlgoKit LocalNet...
DEBUG: Running 'docker compose down' in '{app_config}/sandbox'
DEBUG: docker: STDOUT
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ DEBUG: Running 'docker version' in '{current_working_directory}'
DEBUG: docker: STDOUT
DEBUG: docker: STDERR
DEBUG: Running 'docker compose ls --format json --filter name=algokit_sandbox*' in '{current_working_directory}'
DEBUG: docker: [{"Name": "algokit_sandbox", "Status": "running", "ConfigFiles": "test/sandbox/docker-compose.yml"}]
DEBUG: docker: [{"Name": "algokit_sandbox", "Status": "running", "ConfigFiles": "{app_config}/sandbox/docker-compose.yml"}]
Cleaning up the running AlgoKit LocalNet...
DEBUG: Running 'docker compose down' in '{app_config}/sandbox'
DEBUG: docker: STDOUT
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ DEBUG: Running 'docker version' in '{current_working_directory}'
DEBUG: docker: STDOUT
DEBUG: docker: STDERR
DEBUG: Running 'docker compose ls --format json --filter name=algokit_sandbox*' in '{current_working_directory}'
DEBUG: docker: [{"Name": "algokit_sandbox", "Status": "running", "ConfigFiles": "test/sandbox/docker-compose.yml"}]
DEBUG: docker: [{"Name": "algokit_sandbox", "Status": "running", "ConfigFiles": "{app_config}/sandbox/docker-compose.yml"}]
Cleaning up the running AlgoKit LocalNet...
DEBUG: Running 'docker compose down' in '{app_config}/sandbox'
DEBUG: docker: STDOUT
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ DEBUG: Running 'docker version' in '{current_working_directory}'
DEBUG: docker: STDOUT
DEBUG: docker: STDERR
DEBUG: Running 'docker compose ls --format json --filter name=algokit_sandbox*' in '{current_working_directory}'
DEBUG: docker: [{"Name": "algokit_sandbox_test", "Status": "running", "ConfigFiles": "sandbox_test/docker-compose.yml"}]
DEBUG: docker: [{"Name": "algokit_sandbox", "Status": "running", "ConfigFiles": "{app_config}/sandbox_test/docker-compose.yml"}]
Cleaning up the running AlgoKit LocalNet...
DEBUG: Running 'docker compose down' in '{app_config}/sandbox_test'
DEBUG: docker: STDOUT
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ DEBUG: Running 'docker version' in '{current_working_directory}'
DEBUG: docker: STDOUT
DEBUG: docker: STDERR
DEBUG: Running 'docker compose ls --format json --filter name=algokit_sandbox*' in '{current_working_directory}'
DEBUG: docker: [{"Name": "algokit_sandbox", "Status": "running", "ConfigFiles": "test/sandbox/docker-compose.yml"}]
DEBUG: docker: [{"Name": "algokit_sandbox", "Status": "running", "ConfigFiles": "{app_config}/sandbox/docker-compose.yml"}]
DEBUG: The sandbox directory does not exist yet; creating it
DEBUG: Existing LocalNet not found; creating from scratch...
Starting AlgoKit LocalNet now...
Expand Down
Loading

1 comment on commit ba91e82

@github-actions
Copy link

Choose a reason for hiding this comment

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

Coverage

Coverage Report
FileStmtsMissCoverMissing
src/algokit
   __init__.py15753%6–13, 17–24, 32–34
   __main__.py440%1–7
src/algokit/cli
   __init__.py47394%31–34
   codespace.py50982%28, 114, 137, 150–155
   completions.py108992%63–64, 83, 93–99
   dispenser.py121199%77
   doctor.py53394%146–148
   explore.py631576%35–40, 42–47, 85–92, 113
   generate.py60395%76–77, 155
   goal.py54689%67, 85, 96, 107–109
   init.py3082492%485–486, 491–492, 495, 516, 519–521, 532, 536, 594, 620, 649, 682, 691–693, 696–701, 714, 733, 745–746
   localnet.py1643280%67, 88–115, 164–168, 212, 233, 248–258, 271, 322, 343–344
   task.py34391%25–28
src/algokit/cli/common
   utils.py37295%137, 139
src/algokit/cli/project
   bootstrap.py33197%33
   deploy.py1172083%47, 49, 102, 125, 147–149, 270, 277, 291–299, 302–311
   link.py811285%60, 65–66, 109–114, 142–143, 212–213, 217
   list.py33585%21–23, 51–56
   run.py46296%38, 174
src/algokit/cli/tasks
   analyze.py81199%81
   assets.py821384%65–66, 72, 74–75, 105, 119, 125–126, 132, 134, 136–137
   ipfs.py51884%52, 80, 92, 94–95, 105–107
   mint.py1061586%51, 73, 100–103, 108, 113, 131–132, 158, 335–339
   send_transaction.py651085%52–53, 57, 89, 158, 170–174
   sign_transaction.py59886%21, 28–30, 71–72, 109, 123
   transfer.py39392%26, 90, 117
   utils.py1144660%29–37, 43–46, 78–79, 103–104, 128–136, 155–165, 212, 261–262, 282–293, 300–302, 324
   vanity_address.py561082%41, 45–48, 112, 114, 121–123
   wallet.py79495%21, 66, 136, 162
src/algokit/core
   codespace.py1756861%34–37, 41–44, 48–71, 111–112, 125–133, 191, 200–202, 210, 216–217, 229–236, 251–298, 311–313, 338–344, 348, 395
   conf.py57984%12, 24, 28, 36, 38, 73–75, 80
   dispenser.py2022687%92, 124–125, 142–150, 192–193, 199–201, 219–220, 260–261, 319, 333–335, 346–347, 357, 370, 385
   doctor.py65789%67–69, 92–94, 134
   generate.py50394%44, 85, 103
   goal.py65494%21, 36–37, 47
   init.py721086%53, 57–62, 70, 81, 88, 114–115
   log_handlers.py68790%50–51, 63, 112–116, 125
   proc.py45198%99
   sandbox.py2782392%32, 89–92, 97, 101–103, 176, 224–231, 242, 613, 629, 654, 662
   typed_client_generation.py2062190%79–81, 127, 157–162, 186, 189–192, 210, 213–216, 283, 286–289
   utils.py1504073%50–51, 57–69, 125–131, 155, 158, 164–177, 206–208, 237–240, 262
src/algokit/core/_vendor/auth0/authentication
   token_verifier.py15711129%16, 45, 58, 73–85, 98–107, 119–124, 136–137, 140, 170, 178–180, 190–199, 206–213, 227–236, 258, 280–287, 314–323, 333–444
src/algokit/core/compilers
   python.py28582%19–20, 25, 49–50
src/algokit/core/config_commands
   container_engine.py412149%24, 29–31, 47–76
   version_prompt.py921485%37–38, 68, 87–90, 108, 118–125, 148
src/algokit/core/project
   __init__.py53394%50, 86, 145
   bootstrap.py125894%47, 126–127, 149, 176, 216–218
   deploy.py69987%108–111, 120–122, 126, 131
   run.py1321390%83, 88, 97–98, 133–134, 138–139, 143, 147, 277–278, 293
src/algokit/core/tasks
   analyze.py93397%105–112, 187
   ipfs.py63789%58–64, 140, 144, 146, 152
   nfd.py491373%25, 31, 34–41, 70–72, 99–101
   vanity_address.py903462%49–50, 54, 59–75, 92–108, 128–131
   wallet.py71593%37, 129, 155–157
src/algokit/core/tasks/mint
   mint.py74988%123–133
   models.py921782%50, 52, 57, 71–74, 81–90
TOTAL497477085% 

Tests Skipped Failures Errors Time
516 0 💤 0 ❌ 0 🔥 25.952s ⏱️

Please sign in to comment.