STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
test_results_csv.py
Go to the documentation of this file.
1"""Layer 2/3 pressure curves as CSV, written by the backend (GET /api/optimizer/layer{2,3}/results.csv).
2
3This file used to be built in the browser. The format has to stay what the browser
4wrote, including JavaScript's way of printing numbers, so the expected strings
5below are what Node's ``String(n)`` gives for each value (recorded from Node, not
6from the code under test).
7"""
8import os
9import sys
10
11sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
12
13import pytest # noqa: E402
14from fastapi import FastAPI # noqa: E402
15from fastapi.testclient import TestClient # noqa: E402
16
17from backend.results_csv import pressure_curves_csv # noqa: E402
18from stardesign.jsformat import js_number # noqa: E402
19from backend.session import UserSession, get_session # noqa: E402
20
21#: value -> String(value) in Node 20.
22NODE = [
23 (5, "5"), (5.0, "5"), (5.5, "5.5"), (0.1, "0.1"), (1e-7, "1e-7"), (1.5e-7, "1.5e-7"),
24 (1e21, "1e+21"), (1.234e22, "1.234e+22"), (123456789012345680000, "123456789012345680000"),
25 (2.5e-6, "0.0000025"), (101325.25, "101325.25"), (1e16, "10000000000000000"),
26 (3.0000000000000004, "3.0000000000000004"), (-0.000001, "-0.000001"), (-42, "-42"),
27 (1e-300, "1e-300"), (6894757.293168361, "6894757.293168361"), (0, "0"),
28]
29
30
31@pytest.mark.parametrize("value,expected", NODE)
33 assert js_number(value) == expected
34
35
37 out = pressure_curves_csv({"time_array": [0, 0.5], "lox_pressure": [3e6, 2.5e6], "fuel_pressure": [3.2e6, 2.75e6]})
38 assert out == (
39 "Time (s),LOX Pressure (Pa),Fuel Pressure (Pa)\n"
40 "0,3000000,3200000\n"
41 "0.5,2500000,2750000\n"
42 )
43
44
45def _client(session):
46 from backend.routers import optimizer
47
48 app = FastAPI()
49 app.include_router(optimizer.router)
50 app.dependency_overrides[get_session] = lambda: session
51 return TestClient(app)
52
53
55 session = UserSession("results-csv")
56 client = _client(session)
57 assert client.get("/api/optimizer/layer2/results.csv").status_code == 404
58 assert client.get("/api/optimizer/layer1/results.csv").status_code == 404
59
60 session.optimizer.layer2_status["results"] = {"time_array": [0, 1], "lox_pressure": [1, 2], "fuel_pressure": [3, 4]}
61 r = client.get("/api/optimizer/layer2/results.csv")
62 assert r.status_code == 200
63 assert r.headers["content-type"].startswith("text/csv")
64 assert 'filename="pressure_curves.csv"' in r.headers["content-disposition"]
65 assert r.text.splitlines()[1:] == ["0,1,3", "1,2,4"]
66
67 session.optimizer.layer3_status["results"] = {"time_array": [2], "lox_pressure": [5.5], "fuel_pressure": [6]}
68 r = client.get("/api/optimizer/layer3/results.csv")
69 assert r.status_code == 200 and 'filename="layer3_results.csv"' in r.headers["content-disposition"]
70 assert r.text.splitlines()[1] == "2,5.5,6"
test_numbers_print_as_javascript_prints_them(value, expected)
test_endpoint_serves_each_layer_and_refuses_without_results()