diff --git a/app/(auth)/api/auth/guest/route.ts b/app/(auth)/api/auth/guest/route.ts index 25af1fa..6c2a3b3 100644 --- a/app/(auth)/api/auth/guest/route.ts +++ b/app/(auth)/api/auth/guest/route.ts @@ -5,7 +5,7 @@ import { NextResponse } from 'next/server'; export async function GET(request: Request) { const { searchParams } = new URL(request.url); - const redirectUrl = searchParams.get('redirectUrl') || '/'; + const redirectUrl = searchParams.get('redirectUrl') || '/chat'; const token = await getToken({ req: request, @@ -14,7 +14,7 @@ export async function GET(request: Request) { }); if (token) { - return NextResponse.redirect(new URL('/', request.url)); + return NextResponse.redirect(new URL('/chat', request.url)); } return signIn('guest', { redirect: true, redirectTo: redirectUrl }); diff --git a/app/(auth)/auth.config.ts b/app/(auth)/auth.config.ts index b7d7d50..5cab7f5 100644 --- a/app/(auth)/auth.config.ts +++ b/app/(auth)/auth.config.ts @@ -3,7 +3,7 @@ import type { NextAuthConfig } from 'next-auth'; export const authConfig = { pages: { signIn: '/login', - newUser: '/', + newUser: '/chat', }, providers: [ // added later in auth.ts since it requires bcrypt which is only compatible with Node.js diff --git a/app/(chat)/page.tsx b/app/(chat)/chat/page.tsx similarity index 95% rename from app/(chat)/page.tsx rename to app/(chat)/chat/page.tsx index 85d31a0..75044b5 100644 --- a/app/(chat)/page.tsx +++ b/app/(chat)/chat/page.tsx @@ -4,7 +4,7 @@ import { Chat } from '@/components/chat'; import { DEFAULT_CHAT_MODEL } from '@/lib/ai/models'; import { generateUUID } from '@/lib/utils'; import { DataStreamHandler } from '@/components/data-stream-handler'; -import { auth } from '../(auth)/auth'; +import { auth } from '../../(auth)/auth'; import { redirect } from 'next/navigation'; export default async function Page() { @@ -31,7 +31,7 @@ export default async function Page() { initialVisibilityType="private" isReadonly={false} session={session} - autoResume={false} + autoResume={false} initialApiKey={apiKeyFromCookie?.value ?? ''} /> diff --git a/app/globals.css b/app/globals.css index ed93ab9..1f47d4b 100644 --- a/app/globals.css +++ b/app/globals.css @@ -18,39 +18,40 @@ @layer base { :root { - --background: 0 0% 100%; - --foreground: 222 47% 11%; - --card: 0 0% 100%; - --card-foreground: 222 47% 11%; - --popover: 0 0% 100%; - --popover-foreground: 222 47% 11%; - --primary: 221 83% 53%; - --primary-foreground: 0 0% 100%; - --secondary: 210 40% 96%; - --secondary-foreground: 222 47% 11%; - --muted: 210 40% 96%; - --muted-foreground: 215 16% 46%; - --accent: 210 40% 96%; - --accent-foreground: 222 47% 11%; + /* Dark green palette */ + --background: 0 0% 2%; + --foreground: 170 12% 72%; + --card: 199 67% 8%; + --card-foreground: 170 12% 72%; + --popover: 199 67% 8%; + --popover-foreground: 170 12% 72%; + --primary: 180 84% 10%; + --primary-foreground: 170 12% 72%; + --secondary: 178 75% 34%; + --secondary-foreground: 0 0% 100%; + --muted: 0 0% 17%; + --muted-foreground: 170 12% 72%; + --accent: 185 89% 28%; + --accent-foreground: 0 0% 100%; --destructive: 0 84.2% 60.2%; --destructive-foreground: 0 0% 98%; - --border: 214 32% 91%; - --input: 214 32% 91%; - --ring: 221 83% 53%; - --chart-1: 12 76% 61%; - --chart-2: 173 58% 39%; - --chart-3: 197 37% 24%; - --chart-4: 43 74% 66%; - --chart-5: 27 87% 67%; + --border: 180 5% 37%; + --input: 180 5% 37%; + --ring: 178 75% 34%; + --chart-1: 178 75% 34%; + --chart-2: 174 86% 20%; + --chart-3: 185 89% 28%; + --chart-4: 188 89% 14%; + --chart-5: 170 12% 72%; --radius: 0.5rem; - --sidebar-background: 0 0% 100%; - --sidebar-foreground: 222 47% 11%; - --sidebar-primary: 221 83% 53%; + --sidebar-background: 0 0% 2%; + --sidebar-foreground: 170 12% 72%; + --sidebar-primary: 178 75% 34%; --sidebar-primary-foreground: 0 0% 100%; - --sidebar-accent: 210 40% 96%; - --sidebar-accent-foreground: 222 47% 11%; - --sidebar-border: 214 32% 91%; - --sidebar-ring: 221 83% 53%; + --sidebar-accent: 174 86% 20%; + --sidebar-accent-foreground: 0 0% 100%; + --sidebar-border: 180 5% 37%; + --sidebar-ring: 178 75% 34%; } } diff --git a/app/page.tsx b/app/page.tsx new file mode 100644 index 0000000..6f194fb --- /dev/null +++ b/app/page.tsx @@ -0,0 +1,27 @@ +import Link from 'next/link'; + +import { Button } from '@/components/ui/button'; +import SplineScene from '@/components/SplineScene'; + +export default function Home() { + return ( +
+ +
+

+ Search that{' '} + feels like a conversation +

+

+ Autonomous agents entity fit, dedupe, enrich contacts, and score leads—so you get data you can actually + use. +

+ + + +
+
+ ); +} diff --git a/components/SplineScene.tsx b/components/SplineScene.tsx new file mode 100644 index 0000000..3bf0e64 --- /dev/null +++ b/components/SplineScene.tsx @@ -0,0 +1,17 @@ +'use client'; + +// eslint-disable-next-line import/no-unresolved +import Spline from '@splinetool/react-spline/next'; + +interface SplineSceneProps { + className?: string; +} + +export default function SplineScene({ className }: SplineSceneProps) { + return ( + + ); +} diff --git a/components/app-sidebar.tsx b/components/app-sidebar.tsx index 5ff972b..d8c9981 100644 --- a/components/app-sidebar.tsx +++ b/components/app-sidebar.tsx @@ -28,7 +28,7 @@ export function AppSidebar({ user }: { user: User | undefined }) {
{ setOpenMobile(false); }} @@ -46,7 +46,7 @@ export function AppSidebar({ user }: { user: User | undefined }) { className="p-2 h-fit" onClick={() => { setOpenMobile(false); - router.push('/'); + router.push('/chat'); router.refresh(); }} > diff --git a/components/chat-header.tsx b/components/chat-header.tsx index 14ebe14..61b2d87 100644 --- a/components/chat-header.tsx +++ b/components/chat-header.tsx @@ -36,7 +36,7 @@ function PureChatHeader({ variant="outline" className="order-2 md:order-1 md:px-2 px-2 md:h-fit ml-auto md:ml-0" onClick={() => { - router.push('/'); + router.push('/chat'); router.refresh(); }} > @@ -60,4 +60,3 @@ function PureChatHeader({ } export const ChatHeader = memo(PureChatHeader); - diff --git a/components/sidebar-history.tsx b/components/sidebar-history.tsx index 04b441f..ff95254 100644 --- a/components/sidebar-history.tsx +++ b/components/sidebar-history.tsx @@ -144,7 +144,7 @@ export function SidebarHistory({ user }: { user: User | undefined }) { setShowDeleteDialog(false); if (deleteId === id) { - router.push('/'); + router.push('/chat'); } }; diff --git a/lib/googleTokens.ts b/lib/googleTokens.ts index a3752d5..438d3f4 100644 --- a/lib/googleTokens.ts +++ b/lib/googleTokens.ts @@ -18,7 +18,8 @@ export async function getFreshAccessToken(): Promise { const tokenSet = getTokenSet(sessionId); let accessToken = jar.get('gc_access_token')?.value || tokenSet?.access_token; - let refreshToken = jar.get('gc_refresh_token')?.value || tokenSet?.refresh_token; + let refreshToken = + jar.get('gc_refresh_token')?.value || tokenSet?.refresh_token; const expiresAtStr = jar.get('gc_expires_at')?.value || (tokenSet?.expires_at != null ? String(tokenSet.expires_at) : undefined); @@ -26,16 +27,20 @@ export async function getFreshAccessToken(): Promise { const now = Date.now(); const isExpiringSoon = expiresAt != null && now > expiresAt - EXPIRY_SKEW_MS; - const shouldRefresh = Boolean(refreshToken && (!accessToken || isExpiringSoon)); + const shouldRefresh = Boolean( + refreshToken && (!accessToken || isExpiringSoon), + ); if (shouldRefresh) { try { const config = await getGoogleClient(); - const refreshed = await refreshTokenGrant(config, refreshToken!); + const refreshed = await refreshTokenGrant(config, refreshToken as string); accessToken = refreshed.access_token || accessToken; refreshToken = refreshed.refresh_token || refreshToken; expiresAt = - refreshed.expires_in != null ? now + refreshed.expires_in * 1000 : expiresAt; + refreshed.expires_in != null + ? now + refreshed.expires_in * 1000 + : expiresAt; // Persist refreshed tokens const cookieOptions = { @@ -46,7 +51,8 @@ export async function getFreshAccessToken(): Promise { maxAge: 60 * 60 * 24 * 7, }; if (accessToken) jar.set('gc_access_token', accessToken, cookieOptions); - if (refreshToken) jar.set('gc_refresh_token', refreshToken, cookieOptions); + if (refreshToken) + jar.set('gc_refresh_token', refreshToken, cookieOptions); if (expiresAt) jar.set('gc_expires_at', String(expiresAt), cookieOptions); if (sessionId) { const existing = tokenSet || {}; @@ -64,4 +70,3 @@ export async function getFreshAccessToken(): Promise { return { accessToken, refreshToken, expiresAt }; } - diff --git a/middleware.ts b/middleware.ts index 200f802..6054423 100644 --- a/middleware.ts +++ b/middleware.ts @@ -5,6 +5,10 @@ import { guestRegex, isDevelopmentEnvironment } from './lib/constants'; export async function middleware(request: NextRequest) { const { pathname } = request.nextUrl; + if (pathname === '/') { + return NextResponse.next(); + } + /* * Playwright starts the dev server and requires a 200 status to * begin the tests, so this ensures that the tests can start @@ -34,7 +38,7 @@ export async function middleware(request: NextRequest) { const isGuest = guestRegex.test(token?.email ?? ''); if (token && !isGuest && ['/login', '/register'].includes(pathname)) { - return NextResponse.redirect(new URL('/', request.url)); + return NextResponse.redirect(new URL('/chat', request.url)); } return NextResponse.next(); @@ -42,7 +46,7 @@ export async function middleware(request: NextRequest) { export const config = { matcher: [ - '/', + '/chat', '/chat/:id', '/api/:path*', '/login', diff --git a/package.json b/package.json index f12672a..242f391 100644 --- a/package.json +++ b/package.json @@ -19,8 +19,8 @@ "test": "export PLAYWRIGHT=True && pnpm exec playwright test" }, "dependencies": { - "@ai-sdk/react": "^1.2.11", "@ai-sdk/openai": "^1.2.15", + "@ai-sdk/react": "^1.2.11", "@codemirror/lang-javascript": "^6.2.2", "@codemirror/lang-python": "^6.1.6", "@codemirror/state": "^6.5.0", @@ -33,11 +33,13 @@ "@radix-ui/react-dropdown-menu": "^2.1.2", "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-label": "^2.1.0", + "@radix-ui/react-popover": "^1.1.2", "@radix-ui/react-select": "^2.1.2", "@radix-ui/react-separator": "^1.1.0", "@radix-ui/react-slot": "^1.1.0", "@radix-ui/react-tooltip": "^1.1.3", "@radix-ui/react-visually-hidden": "^1.1.0", + "@splinetool/react-spline": "^4.1.0", "@vercel/analytics": "^1.3.1", "@vercel/blob": "^0.24.1", "@vercel/functions": "^2.0.0", @@ -61,6 +63,7 @@ "next": "15.3.0-canary.31", "next-auth": "5.0.0-beta.25", "next-themes": "^0.3.0", + "openid-client": "^6.6.4", "orderedmap": "^2.1.1", "papaparse": "^5.5.2", "postgres": "^3.4.4", @@ -86,9 +89,7 @@ "tailwind-merge": "^2.5.2", "tailwindcss-animate": "^1.0.7", "usehooks-ts": "^3.1.0", - "zod": "^3.23.8", - "@radix-ui/react-popover": "^1.1.2", - "openid-client": "^6.6.4" + "zod": "^3.23.8" }, "devDependencies": { "@biomejs/biome": "1.9.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 021bece..3c543fd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -68,6 +68,9 @@ importers: '@radix-ui/react-visually-hidden': specifier: ^1.1.0 version: 1.1.2(@types/react-dom@18.3.5(@types/react@18.3.18))(@types/react@18.3.18)(react-dom@19.0.0-rc-45804af1-20241021(react@19.0.0-rc-45804af1-20241021))(react@19.0.0-rc-45804af1-20241021) + '@splinetool/react-spline': + specifier: ^4.1.0 + version: 4.1.0(@splinetool/runtime@1.10.53)(next@15.3.0-canary.31(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.0-rc-45804af1-20241021(react@19.0.0-rc-45804af1-20241021))(react@19.0.0-rc-45804af1-20241021))(react-dom@19.0.0-rc-45804af1-20241021(react@19.0.0-rc-45804af1-20241021))(react@19.0.0-rc-45804af1-20241021) '@vercel/analytics': specifier: ^1.3.1 version: 1.5.0(next@15.3.0-canary.31(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.0-rc-45804af1-20241021(react@19.0.0-rc-45804af1-20241021))(react@19.0.0-rc-45804af1-20241021))(react@19.0.0-rc-45804af1-20241021) @@ -1785,6 +1788,20 @@ packages: '@rushstack/eslint-patch@1.11.0': resolution: {integrity: sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==} + '@splinetool/react-spline@4.1.0': + resolution: {integrity: sha512-Y379gm17gw+1nxT/YXTCJnVIWuu7tsUH1tp/YxsYb0pZnc9Gljk7Om4Kpq7WPq0bZ4zidVCxf6xn6jgDcbHifQ==} + peerDependencies: + '@splinetool/runtime': '*' + next: '>=14.2.0' + react: '*' + react-dom: '*' + peerDependenciesMeta: + next: + optional: true + + '@splinetool/runtime@1.10.53': + resolution: {integrity: sha512-C0hl9yTbfr9sTbdTtVJ1g2K5DKNs1ijlgR9LWWp+rYfSnF0NJzYsozJ/Wra5RDJq/mUG6BPG52v+zpIMCV41mg==} + '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} @@ -2088,6 +2105,9 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + blurhash@2.0.5: + resolution: {integrity: sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==} + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -3374,6 +3394,10 @@ packages: obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + on-change@4.0.2: + resolution: {integrity: sha512-cMtCyuJmTx/bg2HCpHo3ZLeF7FZnBOapLqZHr2AlLeJ5Ul0Zu2mUJJz051Fdwu/Et2YW04ZD+TtU+gVy0ACNCA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -3652,6 +3676,9 @@ packages: '@types/react': '>=18' react: '>=18' + react-merge-refs@2.1.1: + resolution: {integrity: sha512-jLQXJ/URln51zskhgppGJ2ub7b2WFKGq3cl3NYKtlHoTG+dN2q7EzWrn3hN3EgPsTMvpR9tpq5ijdp7YwFZkag==} + react-remove-scroll-bar@2.3.8: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} @@ -3779,6 +3806,9 @@ packages: secure-json-parse@2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + semver-compare@1.0.0: + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -3990,6 +4020,9 @@ packages: resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==} engines: {node: '>=18'} + thumbhash@0.1.1: + resolution: {integrity: sha512-kH5pKeIIBPQXAOni2AiY/Cu/NKdkFREdpH+TLdM0g6WA7RriCv0kPLgP731ady67MhTAqrVG/4mnEeibVuCJcg==} + tinyglobby@0.2.12: resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} engines: {node: '>=12.0.0'} @@ -5421,6 +5454,23 @@ snapshots: '@rushstack/eslint-patch@1.11.0': {} + '@splinetool/react-spline@4.1.0(@splinetool/runtime@1.10.53)(next@15.3.0-canary.31(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.0-rc-45804af1-20241021(react@19.0.0-rc-45804af1-20241021))(react@19.0.0-rc-45804af1-20241021))(react-dom@19.0.0-rc-45804af1-20241021(react@19.0.0-rc-45804af1-20241021))(react@19.0.0-rc-45804af1-20241021)': + dependencies: + '@splinetool/runtime': 1.10.53 + blurhash: 2.0.5 + lodash.debounce: 4.0.8 + react: 19.0.0-rc-45804af1-20241021 + react-dom: 19.0.0-rc-45804af1-20241021(react@19.0.0-rc-45804af1-20241021) + react-merge-refs: 2.1.1 + thumbhash: 0.1.1 + optionalDependencies: + next: 15.3.0-canary.31(@opentelemetry/api@1.9.0)(@playwright/test@1.51.0)(react-dom@19.0.0-rc-45804af1-20241021(react@19.0.0-rc-45804af1-20241021))(react@19.0.0-rc-45804af1-20241021) + + '@splinetool/runtime@1.10.53': + dependencies: + on-change: 4.0.2 + semver-compare: 1.0.0 + '@swc/counter@0.1.3': {} '@swc/helpers@0.5.15': @@ -5722,6 +5772,8 @@ snapshots: binary-extensions@2.3.0: {} + blurhash@2.0.5: {} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -7358,6 +7410,8 @@ snapshots: obuf@1.1.2: {} + on-change@4.0.2: {} + once@1.4.0: dependencies: wrappy: 1.0.2 @@ -7670,6 +7724,8 @@ snapshots: transitivePeerDependencies: - supports-color + react-merge-refs@2.1.1: {} + react-remove-scroll-bar@2.3.8(@types/react@18.3.18)(react@19.0.0-rc-45804af1-20241021): dependencies: react: 19.0.0-rc-45804af1-20241021 @@ -7829,6 +7885,8 @@ snapshots: secure-json-parse@2.7.0: {} + semver-compare@1.0.0: {} + semver@6.3.1: {} semver@7.7.1: {} @@ -8110,6 +8168,8 @@ snapshots: throttleit@2.1.0: {} + thumbhash@0.1.1: {} + tinyglobby@0.2.12: dependencies: fdir: 6.4.3(picomatch@4.0.2) diff --git a/tests/e2e/chat.test.ts b/tests/e2e/chat.test.ts index 6fd9520..903abfc 100644 --- a/tests/e2e/chat.test.ts +++ b/tests/e2e/chat.test.ts @@ -140,7 +140,7 @@ test.describe('Chat activity', () => { }); test('Create message from url query', async ({ page }) => { - await page.goto('/?query=Why is the sky blue?'); + await page.goto('/chat?query=Why is the sky blue?'); await chatPage.isGenerationComplete(); diff --git a/tests/e2e/session.test.ts b/tests/e2e/session.test.ts index e3aae08..f0b082f 100644 --- a/tests/e2e/session.test.ts +++ b/tests/e2e/session.test.ts @@ -9,7 +9,7 @@ test.describe test('Authenticate as guest user when a new session is loaded', async ({ page, }) => { - const response = await page.goto('/'); + const response = await page.goto('/chat'); if (!response) { throw new Error('Failed to load page'); @@ -25,14 +25,14 @@ test.describe } expect(chain).toEqual([ - 'http://localhost:3000/', - 'http://localhost:3000/api/auth/guest?redirectUrl=http%3A%2F%2Flocalhost%3A3000%2F', - 'http://localhost:3000/', + 'http://localhost:3000/chat', + 'http://localhost:3000/api/auth/guest?redirectUrl=http%3A%2F%2Flocalhost%3A3000%2Fchat', + 'http://localhost:3000/chat', ]); }); test('Log out is not available for guest users', async ({ page }) => { - await page.goto('/'); + await page.goto('/chat'); const sidebarToggleButton = page.getByTestId('sidebar-toggle-button'); await sidebarToggleButton.click(); @@ -51,7 +51,7 @@ test.describe test('Do not authenticate as guest user when an existing non-guest session is active', async ({ adaContext, }) => { - const response = await adaContext.page.goto('/'); + const response = await adaContext.page.goto('/chat'); if (!response) { throw new Error('Failed to load page'); @@ -66,7 +66,7 @@ test.describe request = request.redirectedFrom(); } - expect(chain).toEqual(['http://localhost:3000/']); + expect(chain).toEqual(['http://localhost:3000/chat']); }); test('Allow navigating to /login as guest user', async ({ page }) => { @@ -82,7 +82,7 @@ test.describe }); test('Do not show email in user menu for guest user', async ({ page }) => { - await page.goto('/'); + await page.goto('/chat'); const sidebarToggleButton = page.getByTestId('sidebar-toggle-button'); await sidebarToggleButton.click(); @@ -115,14 +115,14 @@ test.describe test('Log into account that exists', async ({ page }) => { await authPage.login(testUser.email, testUser.password); - await page.waitForURL('/'); + await page.waitForURL('/chat'); await expect(page.getByPlaceholder('Send a message...')).toBeVisible(); }); test('Display user email in user menu', async ({ page }) => { await authPage.login(testUser.email, testUser.password); - await page.waitForURL('/'); + await page.waitForURL('/chat'); await expect(page.getByPlaceholder('Send a message...')).toBeVisible(); const userEmail = await page.getByTestId('user-email'); @@ -143,7 +143,7 @@ test.describe await expect(userEmail).toHaveText(testUser.email); await page.goto('/api/auth/guest'); - await page.waitForURL('/'); + await page.waitForURL('/chat'); const updatedUserEmail = await page.getByTestId('user-email'); await expect(updatedUserEmail).toHaveText(testUser.email); @@ -151,7 +151,7 @@ test.describe test('Log out is available for non-guest users', async ({ page }) => { await authPage.login(testUser.email, testUser.password); - await page.waitForURL('/'); + await page.waitForURL('/chat'); authPage.openSidebar(); @@ -170,18 +170,18 @@ test.describe page, }) => { await authPage.login(testUser.email, testUser.password); - await page.waitForURL('/'); + await page.waitForURL('/chat'); await page.goto('/register'); - await expect(page).toHaveURL('/'); + await expect(page).toHaveURL('/chat'); }); test('Do not navigate to /login for non-guest users', async ({ page }) => { await authPage.login(testUser.email, testUser.password); - await page.waitForURL('/'); + await page.waitForURL('/chat'); await page.goto('/login'); - await expect(page).toHaveURL('/'); + await expect(page).toHaveURL('/chat'); }); }); diff --git a/tests/pages/auth.ts b/tests/pages/auth.ts index 47970ec..29c397c 100644 --- a/tests/pages/auth.ts +++ b/tests/pages/auth.ts @@ -34,7 +34,7 @@ export class AuthPage { async logout(email: string, password: string) { await this.login(email, password); - await this.page.waitForURL('/'); + await this.page.waitForURL('/chat'); await this.openSidebar(); diff --git a/tests/pages/chat.ts b/tests/pages/chat.ts index a93a459..3033345 100644 --- a/tests/pages/chat.ts +++ b/tests/pages/chat.ts @@ -27,7 +27,7 @@ export class ChatPage { } async createNewChat() { - await this.page.goto('/'); + await this.page.goto('/chat'); } public getCurrentURL(): string {