Skip to content
Merged

test #14

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/lib/ui.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { type ClassValue, clsx } from 'clsx';
import { twMerge } from 'tailwind-merge';

export const cn = (...inputs: ClassValue[]) => twMerge(clsx(inputs));
2 changes: 1 addition & 1 deletion src/routes/Home.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { UnderConstruction } from '~/components';
import { isMobile } from '~/lib/utils';
import { VantaNet } from '~/ui';
import { isMobile } from '~/utils/utils';

export const Home = async () => {
const mobile = await isMobile();
Expand Down
2 changes: 1 addition & 1 deletion src/ui/Button.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Slot } from '@radix-ui/react-slot';
import { cva, type VariantProps } from 'class-variance-authority';
import type * as React from 'react';
import { cn } from '~/lib/utils';
import { cn } from '~/lib/ui';

export const buttonVariants = cva(
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
Expand Down
2 changes: 1 addition & 1 deletion src/ui/Card.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type * as React from 'react';

import { cn } from '~/lib/utils';
import { cn } from '~/lib/ui';

export const Card = ({ className, ...props }: React.ComponentProps<'div'>) => {
return (
Expand Down
42 changes: 42 additions & 0 deletions src/utils/utils.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
const { mockHeaders, mockUserAgentFromString } = vi.hoisted(() => ({
mockHeaders: vi.fn(),
mockUserAgentFromString: vi.fn(),
}));

import { beforeEach, describe, expect, it, vi } from 'vitest';
import { isMobile } from './utils';

vi.mock('next/headers', () => ({
headers: mockHeaders,
}));

vi.mock('next/server', () => ({
userAgentFromString: mockUserAgentFromString,
}));

describe('isMobile', () => {
beforeEach(() => {
const headers = new Map();
headers.set('user-agent', '');

mockHeaders.mockReturnValue(headers);
});

it('returns true', async () => {
const headers = new Map();
headers.set('user-agent', '');

mockHeaders.mockReturnValue(headers);
mockUserAgentFromString.mockReturnValueOnce({ device: { type: 'mobile' } });

const result = await isMobile();
expect(result).toEqual(true);
});

it('returns false with undefined user agent', async () => {
mockUserAgentFromString.mockReturnValueOnce(undefined);

const result = await isMobile();
expect(result).toEqual(false);
});
});
4 changes: 0 additions & 4 deletions src/lib/utils.ts → src/utils/utils.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
import { type ClassValue, clsx } from 'clsx';
import { headers } from 'next/headers';
import { userAgentFromString } from 'next/server';
import { twMerge } from 'tailwind-merge';

export const cn = (...inputs: ClassValue[]) => twMerge(clsx(inputs));

export const isMobile = async (): Promise<boolean> => {
const headersList = await headers();
Expand Down
Loading