{
  "created": 1786000469.481,
  "duration": 7.45,
  "exitcode": 1,
  "root": "/builds/novus/checkout",
  "environment": {
    "Python": "3.12.4",
    "Platform": "Linux-6.8.0-x86_64",
    "Packages": {
      "pytest": "8.2.2",
      "pluggy": "1.5.0"
    }
  },
  "summary": {
    "passed": 9,
    "failed": 1,
    "error": 1,
    "skipped": 1,
    "total": 12,
    "collected": 12
  },
  "tests": [
    {
      "nodeid": "tests/cart/test_pricingtest.py::test_applies_unit_price",
      "lineno": 18,
      "keywords": [
        "cart"
      ],
      "outcome": "passed",
      "setup": {
        "duration": 0.0009,
        "outcome": "passed"
      },
      "call": {
        "duration": 0.643,
        "outcome": "passed"
      },
      "teardown": {
        "duration": 0.0004,
        "outcome": "passed"
      }
    },
    {
      "nodeid": "tests/cart/test_pricingtest.py::test_applies_quantity_multiplier",
      "lineno": 25,
      "keywords": [
        "cart"
      ],
      "outcome": "passed",
      "setup": {
        "duration": 0.0009,
        "outcome": "passed"
      },
      "call": {
        "duration": 0.659,
        "outcome": "passed"
      },
      "teardown": {
        "duration": 0.0004,
        "outcome": "passed"
      }
    },
    {
      "nodeid": "tests/cart/test_pricingtest.py::test_rounds_half_up_at_two_decimals",
      "lineno": 32,
      "keywords": [
        "cart"
      ],
      "outcome": "passed",
      "setup": {
        "duration": 0.0009,
        "outcome": "passed"
      },
      "call": {
        "duration": 1.042,
        "outcome": "passed"
      },
      "teardown": {
        "duration": 0.0004,
        "outcome": "passed"
      }
    },
    {
      "nodeid": "tests/cart/test_pricingtest.py::test_rejects_negative_quantity",
      "lineno": 39,
      "keywords": [
        "cart"
      ],
      "outcome": "passed",
      "setup": {
        "duration": 0.0009,
        "outcome": "passed"
      },
      "call": {
        "duration": 1.048,
        "outcome": "passed"
      },
      "teardown": {
        "duration": 0.0004,
        "outcome": "passed"
      }
    },
    {
      "nodeid": "tests/cart/test_pricingtest.py::test_applies_tax_to_subtotal",
      "lineno": 46,
      "keywords": [
        "cart"
      ],
      "outcome": "failed",
      "setup": {
        "duration": 0.0009,
        "outcome": "passed"
      },
      "call": {
        "duration": 0.352,
        "outcome": "failed",
        "crash": {
          "path": "tests/cart/test_pricingtest.py",
          "lineno": 88,
          "message": "expected:<12.60> but was:<12.59>"
        },
        "longrepr": "java.lang.AssertionError: expected:<12.60> but was:<12.59>\n\tat cart.PricingTest.appliesTaxToSubtotal(PricingTest.java:88)\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:568)\n"
      },
      "teardown": {
        "duration": 0.0004,
        "outcome": "passed"
      }
    },
    {
      "nodeid": "tests/cart/test_discounttest.py::test_applies_percentage_discount",
      "lineno": 53,
      "keywords": [
        "cart"
      ],
      "outcome": "passed",
      "setup": {
        "duration": 0.0009,
        "outcome": "passed"
      },
      "call": {
        "duration": 0.147,
        "outcome": "passed"
      },
      "teardown": {
        "duration": 0.0004,
        "outcome": "passed"
      }
    },
    {
      "nodeid": "tests/cart/test_discounttest.py::test_stacks_discounts_in_declared_order",
      "lineno": 60,
      "keywords": [
        "cart"
      ],
      "outcome": "passed",
      "setup": {
        "duration": 0.0009,
        "outcome": "passed"
      },
      "call": {
        "duration": 0.327,
        "outcome": "passed"
      },
      "teardown": {
        "duration": 0.0004,
        "outcome": "passed"
      }
    },
    {
      "nodeid": "tests/cart/test_discounttest.py::test_ignores_expired_coupon",
      "lineno": 67,
      "keywords": [
        "cart"
      ],
      "outcome": "passed",
      "setup": {
        "duration": 0.0009,
        "outcome": "passed"
      },
      "call": {
        "duration": 0.893,
        "outcome": "passed"
      },
      "teardown": {
        "duration": 0.0004,
        "outcome": "passed"
      }
    },
    {
      "nodeid": "tests/cart/test_discounttest.py::test_applies_loyalty_tier",
      "lineno": 74,
      "keywords": [
        "cart"
      ],
      "outcome": "skipped",
      "setup": {
        "duration": 0.0009,
        "outcome": "passed"
      },
      "call": {
        "duration": 0.7,
        "outcome": "skipped",
        "longrepr": "loyalty tiers are disabled in the CI profile"
      },
      "teardown": {
        "duration": 0.0004,
        "outcome": "passed"
      }
    },
    {
      "nodeid": "tests/checkout/test_sessiontest.py::test_creates_session_for_new_cart",
      "lineno": 81,
      "keywords": [
        "checkout"
      ],
      "outcome": "passed",
      "setup": {
        "duration": 0.0009,
        "outcome": "passed"
      },
      "call": {
        "duration": 0.783,
        "outcome": "passed"
      },
      "teardown": {
        "duration": 0.0004,
        "outcome": "passed"
      }
    },
    {
      "nodeid": "tests/checkout/test_sessiontest.py::test_expires_session_after_timeout",
      "lineno": 88,
      "keywords": [
        "checkout"
      ],
      "outcome": "error",
      "setup": {
        "duration": 0.0009,
        "outcome": "passed"
      },
      "call": {
        "duration": 0.695,
        "outcome": "error",
        "crash": {
          "path": "tests/checkout/test_sessiontest.py",
          "lineno": 88,
          "message": "Connection refused: sessions.example.com:5432"
        },
        "longrepr": "java.net.ConnectException: Connection refused: sessions.example.com:5432\n\tat checkout.SessionStore.open(SessionStore.java:41)\n\tat checkout.SessionTest.expiresSessionAfterTimeout(SessionTest.java:57)\n"
      },
      "teardown": {
        "duration": 0.0004,
        "outcome": "passed"
      }
    },
    {
      "nodeid": "tests/checkout/test_sessiontest.py::test_restores_cart_on_resume",
      "lineno": 95,
      "keywords": [
        "checkout"
      ],
      "outcome": "passed",
      "setup": {
        "duration": 0.0009,
        "outcome": "passed"
      },
      "call": {
        "duration": 0.161,
        "outcome": "passed"
      },
      "teardown": {
        "duration": 0.0004,
        "outcome": "passed"
      }
    }
  ]
}
