diff --git a/components/groups/modals/__tests__/voteDetailsModal.test.tsx b/components/groups/modals/__tests__/voteDetailsModal.test.tsx
new file mode 100644
index 00000000..3035299c
--- /dev/null
+++ b/components/groups/modals/__tests__/voteDetailsModal.test.tsx
@@ -0,0 +1,115 @@
+import { describe, test, expect, jest, mock, afterEach } from 'bun:test';
+import React from 'react';
+import { screen, fireEvent, cleanup, waitFor } from '@testing-library/react';
+import VoteDetailsModal from '../voteDetailsModal';
+import {
+ ProposalSDKType,
+ MemberSDKType,
+ VoteSDKType,
+ ProposalStatus,
+ ProposalExecutorResult,
+} from '@liftedinit/manifestjs/dist/codegen/cosmos/group/v1/types';
+import { QueryTallyResultResponseSDKType } from '@liftedinit/manifestjs/dist/codegen/cosmos/group/v1/query';
+import matchers from '@testing-library/jest-dom/matchers';
+import { renderWithChainProvider } from '@/tests/render';
+import {
+ manifestAddr1,
+ mockGroupFormData,
+ mockMembers,
+ mockProposals,
+ mockTally,
+ mockVotes,
+} from '@/tests/mock';
+
+expect.extend(matchers);
+
+mock.module('react-apexcharts', () => ({
+ default: jest.fn(),
+}));
+
+mock.module('@cosmos-kit/react', () => ({
+ useChain: jest.fn().mockReturnValue({
+ address: mockProposals['test_policy_address'][0].proposers[0],
+ chain: { fees: null },
+ }),
+}));
+
+const mockProposal = mockProposals['test_policy_address'][0];
+
+describe('VoteDetailsModal', () => {
+ const defaultProps = {
+ tallies: mockTally,
+ votes: mockVotes,
+ members: mockMembers,
+ proposal: mockProposal,
+ onClose: jest.fn(),
+ modalId: 'voteDetailsModal',
+ refetchVotes: jest.fn(),
+ refetchTally: jest.fn(),
+ refetchProposals: jest.fn(),
+ };
+
+ afterEach(() => {
+ mock.restore();
+ cleanup();
+ });
+
+ test('renders the component with provided props', () => {
+ renderWithChainProvider(
VOTING COUNTDOWN
@@ -508,7 +508,7 @@ function VoteDetailsModal({TALLY
-VOTING COUNTDOWN
@@ -565,6 +565,7 @@ function VoteDetailsModal({