feat(i18n): add language switcher
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest"
|
||||
|
||||
import { LOCALE_COOKIE_MAX_AGE_SECONDS } from "@/i18n/locales"
|
||||
|
||||
const headersMocks = vi.hoisted(() => ({
|
||||
cookieSet: vi.fn(),
|
||||
cookies: vi.fn(),
|
||||
}))
|
||||
|
||||
vi.mock("next/headers", () => ({
|
||||
cookies: headersMocks.cookies,
|
||||
}))
|
||||
|
||||
import { setLocaleAction } from "@/actions/i18n.actions"
|
||||
|
||||
describe("setLocaleAction", () => {
|
||||
beforeEach(() => {
|
||||
headersMocks.cookieSet.mockReset()
|
||||
headersMocks.cookies.mockReset()
|
||||
headersMocks.cookies.mockResolvedValue({
|
||||
set: headersMocks.cookieSet,
|
||||
})
|
||||
})
|
||||
|
||||
it("writes a validated supported locale to the locale cookie", async () => {
|
||||
const result = await setLocaleAction("es")
|
||||
|
||||
expect(result).toEqual({ success: true, locale: "es" })
|
||||
expect(headersMocks.cookies).toHaveBeenCalledOnce()
|
||||
expect(headersMocks.cookieSet).toHaveBeenCalledWith(
|
||||
"stock-manager-locale",
|
||||
"es",
|
||||
{
|
||||
path: "/",
|
||||
sameSite: "lax",
|
||||
maxAge: LOCALE_COOKIE_MAX_AGE_SECONDS,
|
||||
httpOnly: true,
|
||||
secure: false,
|
||||
},
|
||||
)
|
||||
})
|
||||
|
||||
it("rejects unsupported locales without writing a cookie", async () => {
|
||||
const result = await setLocaleAction("fr")
|
||||
|
||||
expect(result).toEqual({ success: false, error: "UNSUPPORTED_LOCALE" })
|
||||
expect(headersMocks.cookies).not.toHaveBeenCalled()
|
||||
expect(headersMocks.cookieSet).not.toHaveBeenCalled()
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user