Skip to content
Merged
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
20 changes: 11 additions & 9 deletions soroban-client/__tests__/components/Footer.test.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import React from 'react';
import { render, screen } from '@testing-library/react';
import Footer from '../../components/Footer';
import React from "react";
import { render, screen } from "@testing-library/react";
import Footer from "../../components/Footer";

describe('Footer Component', () => {
it('renders the copyright text properly', () => {
render(<Footer />);
describe("Footer Component", () => {
it("renders the copyright text properly", () => {
render(<Footer />);

// The text is rendered across two spans, but we can search for the main substring
expect(screen.getByText(/All Rights Reserved, CrowdPass/i)).toBeInTheDocument();
});
// The text is rendered across two spans, but we can search for the main substring
expect(
screen.getByText(/All Rights Reserved, CrowdPass/i),
).toBeInTheDocument();
});
});
147 changes: 74 additions & 73 deletions soroban-client/__tests__/components/Header.test.tsx
Original file line number Diff line number Diff line change
@@ -1,88 +1,89 @@
import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import Header from '../../components/Header';
import { useWallet } from '@/contexts/WalletContext';
import React from "react";
import { render, screen, fireEvent } from "@testing-library/react";
import Header from "../../components/Header";
import { useWallet } from "@/contexts/WalletContext";

// Mock Wallet Context Hook
jest.mock('@/contexts/WalletContext', () => ({
useWallet: jest.fn(),
jest.mock("@/contexts/WalletContext", () => ({
useWallet: jest.fn(),
}));

jest.mock('next/navigation', () => ({
usePathname: () => '/',
jest.mock("next/navigation", () => ({
usePathname: () => "/",
}));

describe('Header Component', () => {
it('renders navigation links properly', () => {
(useWallet as jest.Mock).mockReturnValue({
address: null,
providerId: 'freighter',
providerName: 'Freighter',
availableProviders: [],
isConnected: false,
isInstalled: true,
connect: jest.fn(),
disconnect: jest.fn(),
setProviderId: jest.fn(),
signTransaction: jest.fn(),
});

render(<Header />);

expect(screen.getByText('CrowdPass')).toBeInTheDocument();
// Home, Events, Analytics, and Create Events may appear multiple times (desktop + mobile)
expect(screen.getAllByText('Home').length).toBeGreaterThan(0);
expect(screen.getAllByText('Events').length).toBeGreaterThan(0);
expect(screen.getAllByText('Analytics').length).toBeGreaterThan(0);
expect(screen.getAllByText('Create Events').length).toBeGreaterThan(0);
expect(screen.getAllByText('Connect Freighter').length).toBeGreaterThan(0);
describe("Header Component", () => {
it("renders navigation links properly", () => {
(useWallet as jest.Mock).mockReturnValue({
address: null,
providerId: "freighter",
providerName: "Freighter",
availableProviders: [],
isConnected: false,
isInstalled: true,
connect: jest.fn(),
disconnect: jest.fn(),
setProviderId: jest.fn(),
signTransaction: jest.fn(),
});

it('displays Install Freighter if wallet is not installed', () => {
(useWallet as jest.Mock).mockReturnValue({
address: null,
providerId: 'freighter',
providerName: 'Freighter',
availableProviders: [],
isConnected: false,
isInstalled: false,
connect: jest.fn(),
disconnect: jest.fn(),
setProviderId: jest.fn(),
signTransaction: jest.fn(),
});
render(<Header />);

expect(screen.getByText("CrowdPass")).toBeInTheDocument();
// Home, Events, Analytics, and Create Events may appear multiple times (desktop + mobile)
expect(screen.getAllByText("Home").length).toBeGreaterThan(0);
expect(screen.getAllByText("Events").length).toBeGreaterThan(0);
expect(screen.getAllByText("Analytics").length).toBeGreaterThan(0);
expect(screen.getAllByText("Create Events").length).toBeGreaterThan(0);
expect(screen.getAllByText("Connect Freighter").length).toBeGreaterThan(0);
});

render(<Header />);
// Select Wallet may appear multiple times (desktop + mobile)
expect(screen.getAllByText('Select Wallet').length).toBeGreaterThan(0);
it("displays Install Freighter if wallet is not installed", () => {
(useWallet as jest.Mock).mockReturnValue({
address: null,
providerId: "freighter",
providerName: "Freighter",
availableProviders: [],
isConnected: false,
isInstalled: false,
connect: jest.fn(),
disconnect: jest.fn(),
setProviderId: jest.fn(),
signTransaction: jest.fn(),
});

it('renders connected wallet address prefix and disconnect button when connected', () => {
const mockAddress = 'GBJ2V4YJ4V4BDK3NPGKQ2XZR2F2BQYQ2X2Y2Z2X2V2Y2Z2X2V2Y2Z2X2V2Y2';
const disconnectMock = jest.fn();
render(<Header />);
// Select Wallet may appear multiple times (desktop + mobile)
expect(screen.getAllByText("Select Wallet").length).toBeGreaterThan(0);
});

(useWallet as jest.Mock).mockReturnValue({
address: mockAddress,
providerId: 'freighter',
providerName: 'Freighter',
availableProviders: [],
isConnected: true,
isInstalled: true,
connect: jest.fn(),
disconnect: disconnectMock,
setProviderId: jest.fn(),
signTransaction: jest.fn(),
});
it("renders connected wallet address prefix and disconnect button when connected", () => {
const mockAddress =
"GBJ2V4YJ4V4BDK3NPGKQ2XZR2F2BQYQ2X2Y2Z2X2V2Y2Z2X2V2Y2Z2X2V2Y2";
const disconnectMock = jest.fn();

render(<Header />);
const formattedAddress = 'GBJ2...V2Y2';
// There are multiple address displays (desktop and mobile), so verify they exist
expect(screen.getAllByText(formattedAddress).length).toBeGreaterThan(0);

// Disconnect buttons may appear multiple times (desktop + mobile)
const disconnectBtns = screen.getAllByText('Disconnect');
expect(disconnectBtns.length).toBeGreaterThan(0);
fireEvent.click(disconnectBtns[0]);
expect(disconnectMock).toHaveBeenCalledTimes(1);
(useWallet as jest.Mock).mockReturnValue({
address: mockAddress,
providerId: "freighter",
providerName: "Freighter",
availableProviders: [],
isConnected: true,
isInstalled: true,
connect: jest.fn(),
disconnect: disconnectMock,
setProviderId: jest.fn(),
signTransaction: jest.fn(),
});

render(<Header />);
const formattedAddress = "GBJ2...V2Y2";
// There are multiple address displays (desktop and mobile), so verify they exist
expect(screen.getAllByText(formattedAddress).length).toBeGreaterThan(0);

// Disconnect buttons may appear multiple times (desktop + mobile)
const disconnectBtns = screen.getAllByText("Disconnect");
expect(disconnectBtns.length).toBeGreaterThan(0);
fireEvent.click(disconnectBtns[0]);
expect(disconnectMock).toHaveBeenCalledTimes(1);
});
});
4 changes: 4 additions & 0 deletions soroban-client/__tests__/components/Hero.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ describe("Hero Component", () => {

// Using a loose string match because text might be broken into spans/lines
expect(screen.getByText(/Secure Tickets/i)).toBeInTheDocument();
<<<<<<< HEAD
expect(screen.getByText(/Seamless Access/i)).toBeInTheDocument();
=======
>>>>>>> upstream/main
});

it("renders the call to action buttons", () => {
Expand Down
Loading
Loading