-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
RISDEV-6625 Connect PUT endpoint (#202)
- Loading branch information
1 parent
248561a
commit b2468ff
Showing
11 changed files
with
629 additions
and
113 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,72 +1,59 @@ | ||
import { describe, it, expect } from 'vitest' | ||
// import { createTestingPinia } from "@pinia/testing" | ||
import { beforeEach, describe, expect, it, vi } from 'vitest' | ||
import { render, screen } from '@testing-library/vue' | ||
// import { createRouter, createWebHistory } from "vue-router" | ||
import DocumentUnitInfoPanel from '@/components/DocumentUnitInfoPanel.vue' | ||
// import DocumentUnit, { type CoreData } from "@/domain/documentUnit" | ||
// import routes from "@/test-helper/routes" | ||
import { useDocumentUnitStore } from '@/stores/documentUnitStore.ts' | ||
import { setActivePinia } from 'pinia' | ||
import { createTestingPinia } from '@pinia/testing' | ||
|
||
function mockDocumentUnitStore(callback = vi.fn()) { | ||
const documentUnitStore = useDocumentUnitStore() | ||
documentUnitStore.updateDocumentUnit = callback | ||
|
||
return documentUnitStore | ||
} | ||
|
||
function renderComponent(options?: { heading?: string /*coreData?: CoreData*/ }) { | ||
// const router = createRouter({ | ||
// history: createWebHistory(), | ||
// routes: routes, | ||
// }) | ||
return { | ||
...render(DocumentUnitInfoPanel, { | ||
props: { heading: options?.heading ?? '' }, | ||
// global: { | ||
// plugins: [ | ||
// router, | ||
// createTestingPinia({ | ||
// initialState: { | ||
// docunitStore: { | ||
// documentUnit: new DocumentUnit("foo", { | ||
// documentNumber: "1234567891234", | ||
// coreData: options?.coreData ?? { | ||
// court: { | ||
// type: "AG", | ||
// location: "Test", | ||
// label: "AG Test", | ||
// }, | ||
// }, | ||
// }), | ||
// }, | ||
// }, | ||
// }), | ||
// ], | ||
// }, | ||
}), | ||
} | ||
} | ||
|
||
describe('documentUnit InfoPanel', () => { | ||
beforeEach(() => { | ||
setActivePinia(createTestingPinia()) | ||
}) | ||
|
||
it('renders heading if given', async () => { | ||
renderComponent({ heading: 'test heading' }) | ||
renderComponent({ heading: 'Header' }) | ||
|
||
// TODO: is this a proper test? Fix it when the below gets un-commented | ||
expect(await screen.findByText('test heading')).toBeVisible() | ||
expect(await screen.findByText('Header')).toBeVisible() | ||
}) | ||
|
||
it('click on save renders last saved information', async () => { | ||
// given | ||
mockDocumentUnitStore(vi.fn().mockResolvedValueOnce({ status: 200 })) | ||
renderComponent() | ||
|
||
// it("renders all given property infos in correct order", async () => { | ||
// const coreData = { | ||
// decisionDate: "2024-01-01", | ||
// fileNumbers: ["AZ123"], | ||
// court: { | ||
// type: "AG", | ||
// location: "Test", | ||
// label: "AG Test", | ||
// }, | ||
// } | ||
// renderComponent({ coreData: coreData }) | ||
// when | ||
screen.getByRole('button', { name: 'Speichern' }).click() | ||
|
||
// then | ||
expect(await screen.findByText('Zuletzt', { exact: false })).toBeInTheDocument() | ||
}) | ||
|
||
// expect( | ||
// await screen.findByText("AG Test, AZ123, 01.01.2024"), | ||
// ).toBeInTheDocument() | ||
// }) | ||
it('click on save renders error information', async () => { | ||
// given | ||
mockDocumentUnitStore() | ||
renderComponent() | ||
|
||
// it("omits incomplete coredata fields from rendering", async () => { | ||
// renderComponent() | ||
// when | ||
screen.getByRole('button', { name: 'Speichern' }).click() | ||
|
||
// expect(await screen.findByText("AG Test")).toBeInTheDocument() | ||
// }) | ||
// then | ||
expect( | ||
await screen.findByText('Fehler beim Speichern: Verbindung fehlgeschlagen'), | ||
).toBeInTheDocument() | ||
}) | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,175 @@ | ||
import { createTestingPinia } from '@pinia/testing' | ||
import { flushPromises } from '@vue/test-utils' | ||
import { setActivePinia } from 'pinia' | ||
import { useSaveToRemote } from '@/composables/useSaveToRemote' | ||
import { useDocumentUnitStore } from '@/stores/documentUnitStore' | ||
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest' | ||
|
||
vi.mock('vue', async (importActual) => { | ||
const vue: Record<string, unknown> = await importActual() | ||
return { ...vue, onUnmounted: vi.fn() } | ||
}) | ||
|
||
function mockDocumentUnitStore(callback = vi.fn()) { | ||
const documentUnitStore = useDocumentUnitStore() | ||
documentUnitStore.updateDocumentUnit = callback | ||
|
||
return documentUnitStore | ||
} | ||
|
||
describe('useSaveToRemote', () => { | ||
beforeEach(() => { | ||
vi.useFakeTimers() | ||
setActivePinia(createTestingPinia()) | ||
}) | ||
|
||
afterEach(() => { | ||
vi.useRealTimers() | ||
}) | ||
|
||
it('calls the callback every time the trigger is called', async () => { | ||
const documentUnitStore = mockDocumentUnitStore() | ||
const { triggerSave } = useSaveToRemote() | ||
|
||
await triggerSave() | ||
expect(documentUnitStore.updateDocumentUnit).toHaveBeenCalledTimes(1) | ||
|
||
await triggerSave() | ||
expect(documentUnitStore.updateDocumentUnit).toHaveBeenCalledTimes(2) | ||
}) | ||
|
||
it('does not call the callback if a call is still in progress', async () => { | ||
let resolveCallback: (data: unknown) => void = vi.fn() | ||
const callback = vi | ||
.fn() | ||
.mockImplementation(() => new Promise((resolve) => (resolveCallback = resolve))) | ||
|
||
const documentUnitStore = mockDocumentUnitStore(callback) | ||
const { triggerSave } = useSaveToRemote() | ||
|
||
triggerSave().then(() => {}) | ||
triggerSave().then(() => {}) | ||
resolveCallback(undefined) | ||
await flushPromises() | ||
triggerSave().then(() => {}) | ||
|
||
expect(documentUnitStore.updateDocumentUnit).toHaveBeenCalledTimes(2) | ||
}) | ||
|
||
it('toggles the in progress state while callback runs', async () => { | ||
let resolveCallback: (data: unknown) => void = vi.fn() | ||
const callback = vi | ||
.fn() | ||
.mockImplementation(() => new Promise((resolve) => (resolveCallback = resolve))) | ||
|
||
mockDocumentUnitStore(callback) | ||
const { triggerSave, saveIsInProgress } = useSaveToRemote() | ||
|
||
expect(saveIsInProgress.value).toBe(false) | ||
|
||
triggerSave().then(() => {}) | ||
|
||
expect(saveIsInProgress.value).toBe(true) | ||
|
||
resolveCallback(undefined) | ||
await flushPromises() | ||
|
||
expect(saveIsInProgress.value).toBe(false) | ||
}) | ||
|
||
it('also sets back the in progress state when callback throws exception', async () => { | ||
const callback = vi.fn().mockRejectedValue(new Error()) | ||
mockDocumentUnitStore(callback) | ||
const { triggerSave, saveIsInProgress } = useSaveToRemote() | ||
|
||
await triggerSave() | ||
|
||
expect(saveIsInProgress.value).toBe(false) | ||
}) | ||
|
||
it('sets the response error if callback returns one', async () => { | ||
const callback = vi.fn().mockResolvedValue({ status: 400, error: { title: 'error' } }) | ||
mockDocumentUnitStore(callback) | ||
const { triggerSave, lastSaveError } = useSaveToRemote() | ||
|
||
await triggerSave() | ||
|
||
expect(lastSaveError.value).toEqual({ title: 'error' }) | ||
}) | ||
|
||
it('sets connection error if callback throws exception one', async () => { | ||
const callback = vi.fn().mockRejectedValue(new Error()) | ||
mockDocumentUnitStore(callback) | ||
const { triggerSave, lastSaveError } = useSaveToRemote() | ||
|
||
await triggerSave() | ||
|
||
expect(lastSaveError.value).toEqual({ title: 'Verbindung fehlgeschlagen' }) | ||
}) | ||
|
||
it('resets the response error after the next successful save', async () => { | ||
mockDocumentUnitStore() | ||
const { triggerSave, lastSaveError } = useSaveToRemote() | ||
|
||
expect(lastSaveError.value).toBeUndefined() | ||
|
||
mockDocumentUnitStore(vi.fn().mockResolvedValueOnce({ status: 400, error: { title: 'error' } })) | ||
|
||
await triggerSave() | ||
|
||
expect(lastSaveError.value).toBeDefined() | ||
|
||
mockDocumentUnitStore(vi.fn().mockResolvedValueOnce({ status: 200, data: undefined })) | ||
await triggerSave() | ||
|
||
expect(lastSaveError.value).toBeUndefined() | ||
}) | ||
|
||
it('sets the last save on date only after each successfully callback call', async () => { | ||
mockDocumentUnitStore() | ||
const { triggerSave, formattedLastSavedOn } = useSaveToRemote() | ||
|
||
expect(formattedLastSavedOn.value).toBeUndefined() | ||
|
||
vi.setSystemTime(60_000) | ||
mockDocumentUnitStore(vi.fn().mockResolvedValueOnce({ status: 200, data: undefined })) | ||
await triggerSave() | ||
|
||
const firstLastSavedOn = formattedLastSavedOn.value | ||
expect(firstLastSavedOn).toBeDefined() | ||
|
||
vi.setSystemTime(120_000) | ||
mockDocumentUnitStore(vi.fn().mockResolvedValueOnce({ status: 400, error: { title: 'error' } })) | ||
await triggerSave() | ||
|
||
expect(formattedLastSavedOn.value).toBe(firstLastSavedOn) | ||
|
||
vi.setSystemTime(180_000) | ||
mockDocumentUnitStore(vi.fn().mockResolvedValueOnce({ status: 200, data: undefined })) | ||
await triggerSave() | ||
|
||
expect(formattedLastSavedOn.value).not.toBe(firstLastSavedOn) | ||
}) | ||
|
||
it('does not reset error if callback did not change anything', async () => { | ||
mockDocumentUnitStore() | ||
const { triggerSave, formattedLastSavedOn, lastSaveError } = useSaveToRemote() | ||
|
||
mockDocumentUnitStore( | ||
vi | ||
.fn() | ||
.mockResolvedValueOnce({ status: 400, error: { title: 'error' } }) | ||
.mockResolvedValueOnce({ status: 304, data: undefined }), | ||
) | ||
|
||
// first save attempt with error response | ||
await triggerSave() | ||
expect(formattedLastSavedOn.value).toBeUndefined() | ||
expect(lastSaveError.value).toEqual({ title: 'error' }) | ||
|
||
// second save attepmpt, nothing changed | ||
await triggerSave() | ||
expect(formattedLastSavedOn.value).toBeUndefined() | ||
expect(lastSaveError.value).toEqual({ title: 'error' }) | ||
}) | ||
}) |
Oops, something went wrong.