Files
progcode/web/public/assets/editorial/2023/contract-tests-2023-consumer-provider.svg
T
huncode 5cbd53d8ec
Build and deploy / deploy (push) Successful in 16s
revise July 2023 contract testing articles
2026-07-31 15:00:15 +03:00

59 lines
5.9 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 720" role="img" aria-labelledby="title desc">
<title id="title">Consumer, contract и provider verification</title>
<desc id="desc">Учебная схема показывает, что consumer scenario, contract и результат provider verification являются разными артефактами.</desc>
<defs>
<marker id="arrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse">
<path d="M 0 0 L 10 5 L 0 10 z" fill="#5eead4"/>
</marker>
</defs>
<rect width="1200" height="720" rx="32" fill="#0f172a"/>
<text x="60" y="68" fill="#f8fafc" font-family="Inter, Arial, sans-serif" font-size="34" font-weight="700">Контрактный сценарий: три разных доказательства</text>
<text x="60" y="106" fill="#cbd5e1" font-family="Inter, Arial, sans-serif" font-size="21">Учебный пример: экран продления должен получить применимую дату.</text>
<rect x="55" y="154" width="290" height="350" rx="22" fill="#172554" stroke="#60a5fa" stroke-width="3"/>
<circle cx="91" cy="196" r="20" fill="#60a5fa"/>
<text x="91" y="204" text-anchor="middle" fill="#0f172a" font-family="Inter, Arial, sans-serif" font-size="21" font-weight="700">1</text>
<text x="125" y="205" fill="#dbeafe" font-family="Inter, Arial, sans-serif" font-size="29" font-weight="700">Consumer</text>
<text x="85" y="254" fill="#e0f2fe" font-family="Inter, Arial, sans-serif" font-size="22">Сценарий экрана</text>
<text x="85" y="290" fill="#cbd5e1" font-family="Inter, Arial, sans-serif" font-size="20">GET /subscriptions/sub-42</text>
<rect x="85" y="323" width="230" height="58" rx="12" fill="#0c4a6e"/>
<text x="101" y="359" fill="#e0f2fe" font-family="Inter, Arial, sans-serif" font-size="19">Нужна дата для действия</text>
<text x="85" y="426" fill="#94a3b8" font-family="Inter, Arial, sans-serif" font-size="18">Не описывает весь домен.</text>
<text x="85" y="456" fill="#94a3b8" font-family="Inter, Arial, sans-serif" font-size="18">Фиксирует одну потребность.</text>
<path d="M 352 328 H 445" fill="none" stroke="#5eead4" stroke-width="5" marker-end="url(#arrow)"/>
<text x="397" y="307" text-anchor="middle" fill="#99f6e4" font-family="Inter, Arial, sans-serif" font-size="18">ожидание</text>
<rect x="455" y="132" width="310" height="414" rx="22" fill="#134e4a" stroke="#5eead4" stroke-width="3"/>
<circle cx="491" cy="176" r="20" fill="#5eead4"/>
<text x="491" y="184" text-anchor="middle" fill="#0f172a" font-family="Inter, Arial, sans-serif" font-size="21" font-weight="700">2</text>
<text x="525" y="185" fill="#ccfbf1" font-family="Inter, Arial, sans-serif" font-size="29" font-weight="700">Contract</text>
<text x="485" y="238" fill="#ccfbf1" font-family="Inter, Arial, sans-serif" font-size="20">Форма: id, state, renewalAt</text>
<text x="485" y="273" fill="#ccfbf1" font-family="Inter, Arial, sans-serif" font-size="20">Schema: дата или null</text>
<rect x="485" y="304" width="250" height="112" rx="12" fill="#115e59"/>
<text x="503" y="339" fill="#ecfeff" font-family="Inter, Arial, sans-serif" font-size="18">Semantic expectation:</text>
<text x="503" y="370" fill="#ecfeff" font-family="Inter, Arial, sans-serif" font-size="18">в этом сценарии active</text>
<text x="503" y="399" fill="#ecfeff" font-family="Inter, Arial, sans-serif" font-size="18">требует будущую дату</text>
<text x="485" y="470" fill="#99f6e4" font-family="Inter, Arial, sans-serif" font-size="18">version + provider state</text>
<text x="485" y="501" fill="#99f6e4" font-family="Inter, Arial, sans-serif" font-size="18">должны быть адресуемы</text>
<path d="M 772 328 H 855" fill="none" stroke="#5eead4" stroke-width="5" marker-end="url(#arrow)"/>
<text x="812" y="307" text-anchor="middle" fill="#99f6e4" font-family="Inter, Arial, sans-serif" font-size="18">проверить</text>
<rect x="865" y="154" width="280" height="350" rx="22" fill="#3f2a12" stroke="#fbbf24" stroke-width="3"/>
<circle cx="901" cy="196" r="20" fill="#fbbf24"/>
<text x="901" y="204" text-anchor="middle" fill="#0f172a" font-family="Inter, Arial, sans-serif" font-size="21" font-weight="700">3</text>
<text x="935" y="205" fill="#fef3c7" font-family="Inter, Arial, sans-serif" font-size="29" font-weight="700">Provider</text>
<text x="895" y="254" fill="#fef3c7" font-family="Inter, Arial, sans-serif" font-size="21">Подготовить state</text>
<text x="895" y="291" fill="#fde68a" font-family="Inter, Arial, sans-serif" font-size="19">Исполнить interaction</text>
<rect x="895" y="323" width="220" height="84" rx="12" fill="#713f12"/>
<text x="912" y="358" fill="#fef3c7" font-family="Inter, Arial, sans-serif" font-size="18">PASS только после</text>
<text x="912" y="386" fill="#fef3c7" font-family="Inter, Arial, sans-serif" font-size="18">реального запуска</text>
<text x="895" y="451" fill="#fcd34d" font-family="Inter, Arial, sans-serif" font-size="18">результат + версия</text>
<text x="895" y="481" fill="#fcd34d" font-family="Inter, Arial, sans-serif" font-size="18">для release decision</text>
<rect x="55" y="588" width="1090" height="82" rx="18" fill="#1e293b" stroke="#64748b" stroke-width="2"/>
<text x="600" y="624" text-anchor="middle" fill="#f8fafc" font-family="Inter, Arial, sans-serif" font-size="25" font-weight="700">Schema match ≠ semantic expectation ≠ provider verification</text>
<text x="600" y="652" text-anchor="middle" fill="#cbd5e1" font-family="Inter, Arial, sans-serif" font-size="18">Схема не является сетевой трассой и не сообщает о выполненном Pact/CI запуске.</text>
</svg>