fix(ui): сохранять контекст и источник сертификатов
This commit is contained in:
1 parent
b184922f61
commit
adb6589816
11 files changed
+138
-13
No files matched your search
@@ -0,0 +1,13 @@
|
||||
import {test,expect} from "@playwright/test"
|
||||
import {certificate as container,server,certificateState as state} from "./fixtures/certificates"
|
||||
const headers={"access-control-allow-origin":"*","access-control-allow-methods":"GET,POST,OPTIONS","access-control-allow-headers":"Content-Type,Authorization"}
|
||||
for(const change of ["backend","mode"])for(const fails of [false,true])test("Сертификаты: позднее чтение/"+change+"/"+fails,async({page})=>{
|
||||
let started=false,completed=false,release!:()=>void;const gate=new Promise<void>(r=>release=r)
|
||||
await page.route("**/health",r=>r.fulfill({headers,json:{ok:true}}));await page.route("**/api/**",r=>{const p=new URL(r.request().url()).pathname;return r.fulfill({headers,json:p==="/api/auth/config"?{required:false}:p==="/api/servers"?[server]:p==="/api/certificates/state"?state():{directoryUrl:"https://acme.example.test/directory",tokenConfigured:false,enabled:false,intervalSec:300,daysBeforeExpiry:30}})})
|
||||
await page.route("**/api/certificates/state",async r=>{if(new URL(r.request().url()).port!=="8000")return r.fallback();started=true;await gate;try{await r.fulfill(fails?{headers,status:503,json:{error:"СТАРАЯ ОШИБКА сертификатов"}}:{headers,json:state([{...container,name:"СТАРЫЙ СЕРТИФИКАТ"}])})}catch{}finally{completed=true}})
|
||||
await page.goto("/certificates");await expect.poll(()=>started).toBe(true);await page.goto("/settings")
|
||||
if(change==="backend"){const input=page.getByPlaceholder("http://localhost:8000");await input.fill("http://localhost:8101");await input.press("Enter")}else await page.getByRole("button",{name:"Моковые",exact:true}).click()
|
||||
await page.goto("/certificates");release();await expect.poll(()=>completed).toBe(true)
|
||||
if(change==="backend")await expect(page.getByText(container.name,{exact:true})).toBeVisible();else await expect(page.getByText("Моковые данные",{exact:true})).toBeVisible()
|
||||
await expect(page.getByText("СТАРЫЙ СЕРТИФИКАТ",{exact:true})).toHaveCount(0);await expect(page.getByText(/СТАРАЯ ОШИБКА сертификатов/)).toHaveCount(0)
|
||||
})
|
||||
@@ -0,0 +1,36 @@
|
||||
import { test, expect } from "@playwright/test"
|
||||
import { certificate, certificateState, server } from "./fixtures/certificates"
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await page.route("**/health", r => r.fulfill({ json: { ok: true } }))
|
||||
await page.route("**/api/**", r => {
|
||||
const path = new URL(r.request().url()).pathname
|
||||
return r.fulfill({ json: path === "/api/auth/config" ? { required: false } : path === "/api/servers" ? [server] : path === "/api/certificates/state" ? certificateState() : { directoryUrl: "https://acme.example.test/directory", tokenConfigured: false, enabled: false, intervalSec: 300, daysBeforeExpiry: 30 } })
|
||||
})
|
||||
})
|
||||
for (const query of ["server=bad", "server=1&server=2", "status=bad", "q=a&q=b"]) test("Сертификаты URL: неверный контекст " + query, async ({ page }) => {
|
||||
await page.goto("/certificates?" + query + "&keep=map#detail")
|
||||
await expect(page.getByRole("alert", { name: "Контекст сертификатов", exact: true })).toBeVisible()
|
||||
await expect(page.getByText(certificate.name, { exact: true })).toHaveCount(0)
|
||||
await page.getByRole("button", { name: "Сбросить контекст", exact: true }).click()
|
||||
expect(new URL(page.url()).search).toBe("?keep=map")
|
||||
expect(new URL(page.url()).hash).toBe("#detail")
|
||||
await expect(page.getByText(certificate.name, { exact: true })).toBeVisible()
|
||||
})
|
||||
test("Сертификаты URL: фильтр, reload и Back", async ({ page }) => {
|
||||
await page.goto("/certificates?server=1&status=unknown&q=certificate&keep=map#detail")
|
||||
await expect(page.getByText(certificate.name, { exact: true })).toBeVisible()
|
||||
await page.getByRole("button", { name: "Действующие", exact: true }).click()
|
||||
await expect(page.getByText("Нет совпадений", { exact: true })).toBeVisible()
|
||||
expect(new URL(page.url()).searchParams.get("status")).toBe("valid")
|
||||
await page.goBack(); await expect(page.getByText(certificate.name, { exact: true })).toBeVisible()
|
||||
await page.reload(); await expect(page.getByRole("textbox", { name: "Поиск по имени, CN, эмитенту…" })).toHaveValue("certificate")
|
||||
await expect(page.getByRole("button", { name: "Неизвестные", exact: true })).toHaveAttribute("aria-pressed", "true")
|
||||
expect(new URL(page.url()).hash).toBe("#detail")
|
||||
})
|
||||
test("Сертификаты URL: недоступный сервер не заменяется всеми", async ({ page }) => {
|
||||
await page.goto("/certificates?server=2&keep=map")
|
||||
await expect(page.getByRole("alert").filter({ hasText: "Выбранный сервер недоступен" })).toBeVisible()
|
||||
await expect(page.getByText(certificate.name, { exact: true })).toHaveCount(0)
|
||||
await expect(page.getByText("Нет сертификатов", { exact: true })).toHaveCount(0)
|
||||
expect(new URL(page.url()).searchParams.get("server")).toBe("2")
|
||||
})
|
||||
Reference in new issue
Block a user