<?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="pytest" errors="0" failures="2" skipped="0" tests="9" time="5.058" timestamp="2026-10-17T06:07:43.132409+00:00" hostname="agent-env-004f7ee8-0195-4c14-ba13-3e94b62ed74b"><testcase classname="tests.test_admin_new_features" name="test_old_credentials_rejected" time="0.333" /><testcase classname="tests.test_admin_new_features" name="test_public_testimonials_lists_six" time="0.163" /><testcase classname="tests.test_admin_new_features" name="test_testimonial_crud" time="1.490" /><testcase classname="tests.test_admin_new_features" name="test_case_studies_list_and_edit" time="0.170"><failure message="AssertionError: 404 &lt;!DOCTYPE html&gt;&#10;  &lt;html lang=&quot;en&quot;&gt;&#10;  &lt;head&gt;&#10;  &lt;meta charset=&quot;utf-8&quot;&gt;&#10;  &lt;title&gt;Error&lt;/title&gt;&#10;  &lt;/head&gt;&#10;  &lt;body&gt;&#10;  &lt;pre&gt;Cannot GET /api/admin/case-studies&lt;/pre&gt;&#10;  &lt;script&gt;(function(){function c(){var b=a.contentDocument||(a.contentWindow&amp;&amp;a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML=&quot;window.__CF$cv$params={r:'a4bd1ff5a93a5e0c',t:'MTc5MjIxNzI2NQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);&quot;;b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&amp;&amp;(document.onreadystatechange=e,c())}}}})();&lt;/script&gt;&lt;/body&gt;&#10;  &lt;/html&gt;&#10;  &#10;assert 404 == 200&#10; +  where 404 = &lt;Response [404]&gt;.status_code">backend/tests/test_admin_new_features.py:91: in test_case_studies_list_and_edit
    assert r.status_code == 200, f"{r.status_code} {r.text}"
E   AssertionError: 404 &lt;!DOCTYPE html&gt;
E     &lt;html lang="en"&gt;
E     &lt;head&gt;
E     &lt;meta charset="utf-8"&gt;
E     &lt;title&gt;Error&lt;/title&gt;
E     &lt;/head&gt;
E     &lt;body&gt;
E     &lt;pre&gt;Cannot GET /api/admin/case-studies&lt;/pre&gt;
E     &lt;script&gt;(function(){function c(){var b=a.contentDocument||(a.contentWindow&amp;&amp;a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a4bd1ff5a93a5e0c',t:'MTc5MjIxNzI2NQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&amp;&amp;(document.onreadystatechange=e,c())}}}})();&lt;/script&gt;&lt;/body&gt;
E     &lt;/html&gt;
E     
E   assert 404 == 200
E    +  where 404 = &lt;Response [404]&gt;.status_code</failure></testcase><testcase classname="tests.test_admin_new_features" name="test_inbox_returns_enquiries_and_applications" time="0.299"><failure message="AssertionError: binary blob leaked under key attachmentData&#10;assert False">backend/tests/test_admin_new_features.py:136: in test_inbox_returns_enquiries_and_applications
    assert ok, f"binary blob leaked under key {bad}"
E   AssertionError: binary blob leaked under key attachmentData
E   assert False</failure></testcase><testcase classname="tests.test_admin_new_features" name="test_change_password_rejects_same" time="0.156" /><testcase classname="tests.test_admin_new_features" name="test_change_password_rejects_short" time="0.165" /><testcase classname="tests.test_admin_new_features" name="test_change_password_rejects_wrong_current" time="0.238" /><testcase classname="tests.test_admin_new_features" name="test_change_password_swap_and_restore" time="1.602" /></testsuite></testsuites>