1"""Layer 2/3 pressure curves as CSV, written by the backend (GET /api/optimizer/layer{2,3}/results.csv).
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).
11sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
14from fastapi
import FastAPI
15from fastapi.testclient
import TestClient
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"),
31@pytest.mark.parametrize("value,expected", NODE)
33 assert js_number(value) == expected
37 out = pressure_curves_csv({
"time_array": [0, 0.5],
"lox_pressure": [3e6, 2.5e6],
"fuel_pressure": [3.2e6, 2.75e6]})
39 "Time (s),LOX Pressure (Pa),Fuel Pressure (Pa)\n"
41 "0.5,2500000,2750000\n"
49 app.include_router(optimizer.router)
50 app.dependency_overrides[get_session] =
lambda: session
51 return TestClient(app)
57 assert client.get(
"/api/optimizer/layer2/results.csv").status_code == 404
58 assert client.get(
"/api/optimizer/layer1/results.csv").status_code == 404
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"]
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()