feat(web): show created and removed counts after zone import
This commit is contained in:
@@ -2,7 +2,7 @@ import { API_ROOT } from "@/lib/config"
|
|||||||
import type {
|
import type {
|
||||||
AuthState,
|
AuthState,
|
||||||
Account, CreateAccountInput, Template, CreateTemplateInput,
|
Account, CreateAccountInput, Template, CreateTemplateInput,
|
||||||
Domain, CreateDomainInput, ChangesetResponse, ApplyRequest,
|
Domain, CreateDomainInput, ImportResult, ChangesetResponse, ApplyRequest,
|
||||||
Schedule, Channel, CreateChannelInput, CheckRun, RecordDTO,
|
Schedule, Channel, CreateChannelInput, CheckRun, RecordDTO,
|
||||||
} from "./types"
|
} from "./types"
|
||||||
|
|
||||||
@@ -70,7 +70,7 @@ export const api = {
|
|||||||
deleteDomain: (projectId: string, id: string) =>
|
deleteDomain: (projectId: string, id: string) =>
|
||||||
req<void>(projectPath(projectId, `/domains/${id}`), { method: "DELETE" }),
|
req<void>(projectPath(projectId, `/domains/${id}`), { method: "DELETE" }),
|
||||||
importZones: (projectId: string, accountId: string) =>
|
importZones: (projectId: string, accountId: string) =>
|
||||||
req<Domain[]>(projectPath(projectId, `/accounts/${accountId}/import`), { method: "POST" }),
|
req<ImportResult>(projectPath(projectId, `/accounts/${accountId}/import`), { method: "POST" }),
|
||||||
setDomainTemplate: (projectId: string, id: string, templateId: string | null) =>
|
setDomainTemplate: (projectId: string, id: string, templateId: string | null) =>
|
||||||
req<Domain>(projectPath(projectId, `/domains/${id}`), { method: "PATCH", body: JSON.stringify({ templateId }) }),
|
req<Domain>(projectPath(projectId, `/domains/${id}`), { method: "PATCH", body: JSON.stringify({ templateId }) }),
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ export interface CreateDomainInput {
|
|||||||
zoneId: string
|
zoneId: string
|
||||||
templateId?: string | null
|
templateId?: string | null
|
||||||
}
|
}
|
||||||
|
export interface ImportResult { created: Domain[]; removed: Domain[] }
|
||||||
|
|
||||||
export interface Schedule { intervalSeconds: number; enabled: boolean }
|
export interface Schedule { intervalSeconds: number; enabled: boolean }
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ test("отрисовывает домены и ссылку на diff-стран
|
|||||||
})
|
})
|
||||||
|
|
||||||
test("кнопка импорта вызывает api.importZones с выбранной учёткой", async () => {
|
test("кнопка импорта вызывает api.importZones с выбранной учёткой", async () => {
|
||||||
const importSpy = vi.spyOn(api, "importZones").mockResolvedValue([])
|
const importSpy = vi.spyOn(api, "importZones").mockResolvedValue({ created: [], removed: [] })
|
||||||
const user = userEvent.setup()
|
const user = userEvent.setup()
|
||||||
renderPage()
|
renderPage()
|
||||||
|
|
||||||
@@ -76,6 +76,23 @@ test("кнопка импорта вызывает api.importZones с выбра
|
|||||||
await waitFor(() => expect(importSpy).toHaveBeenCalledWith(PROJECT_ID, "acc2"))
|
await waitFor(() => expect(importSpy).toHaveBeenCalledWith(PROJECT_ID, "acc2"))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test("после импорта показывает, сколько зон создано и сколько удалено", async () => {
|
||||||
|
vi.spyOn(api, "importZones").mockResolvedValue({
|
||||||
|
created: [
|
||||||
|
{ id: "d1", providerAccountId: "a1", zoneName: "new.example.com.", zoneId: "z1" },
|
||||||
|
],
|
||||||
|
removed: [
|
||||||
|
{ id: "d2", providerAccountId: "a1", zoneName: "gone.example.com.", zoneId: "z9" },
|
||||||
|
],
|
||||||
|
})
|
||||||
|
const user = userEvent.setup()
|
||||||
|
renderPage()
|
||||||
|
|
||||||
|
await user.click(await screen.findByRole("button", { name: /импортировать зоны/i }))
|
||||||
|
|
||||||
|
expect(await screen.findByText(/создано 1, удалено 1/i)).toBeInTheDocument()
|
||||||
|
})
|
||||||
|
|
||||||
test("привязка шаблона в строке домена вызывает api.setDomainTemplate", async () => {
|
test("привязка шаблона в строке домена вызывает api.setDomainTemplate", async () => {
|
||||||
const setTemplateSpy = vi.spyOn(api, "setDomainTemplate").mockResolvedValue(domains[0])
|
const setTemplateSpy = vi.spyOn(api, "setDomainTemplate").mockResolvedValue(domains[0])
|
||||||
const user = userEvent.setup()
|
const user = userEvent.setup()
|
||||||
|
|||||||
@@ -102,6 +102,11 @@ export function DomainsPage() {
|
|||||||
{importZones.isError && (
|
{importZones.isError && (
|
||||||
<span className="font-dns text-xs text-destructive">{importZones.error.message}</span>
|
<span className="font-dns text-xs text-destructive">{importZones.error.message}</span>
|
||||||
)}
|
)}
|
||||||
|
{importZones.isSuccess && (
|
||||||
|
<span className="font-dns text-xs text-muted-foreground">
|
||||||
|
Создано {importZones.data.created.length}, удалено {importZones.data.removed.length}
|
||||||
|
</span>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{setTemplate.isError && (
|
{setTemplate.isError && (
|
||||||
|
|||||||
Reference in New Issue
Block a user