Skip to content

Commit

Permalink
[GREEN] Modified package page to match project artifacts
Browse files Browse the repository at this point in the history
  • Loading branch information
nataniadeandra committed May 6, 2024
1 parent 40df16f commit d8d1d07
Show file tree
Hide file tree
Showing 14 changed files with 160 additions and 156 deletions.
67 changes: 33 additions & 34 deletions __tests__/elements/calendar.tsx
Original file line number Diff line number Diff line change
@@ -1,32 +1,31 @@
import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import '@testing-library/jest-dom';
import { useGetTimelinesByEventQuery } from '@/redux/api/timelineApi';
import Calendar from '@/components/elements/Timeline/Calendar';
import React from 'react'
import { render, screen, fireEvent } from '@testing-library/react'
import '@testing-library/jest-dom'
import { useGetTimelinesByEventQuery } from '@/redux/api/timelineApi'
import Calendar from '@/components/elements/Timeline/Calendar'

// Mock the useGetTimelinesByEventQuery hook
jest.mock('@/redux/api/timelineApi', () => ({
useGetTimelinesByEventQuery: jest.fn(),
}));
}))

jest.mock('@/components/elements/Timeline/Calendar', () => {
return {
__esModule: true,
default: jest.fn(() => (
<div>
<div data-testid="calendar">Calendar Component</div>
<div>Task 1</div>
<div>Task 2</div>
</div>
)),
}
});

return {
__esModule: true,
default: jest.fn(() => (
<div>
<div data-testid="calendar">Calendar Component</div>
<div>Task 1</div>
<div>Task 2</div>
</div>
)),
}
})

describe('Calendar', () => {
beforeEach(() => {
// Mock the return value of useGetTimelinesByEventQuery
(useGetTimelinesByEventQuery as jest.Mock).mockReturnValue({
;(useGetTimelinesByEventQuery as jest.Mock).mockReturnValue({
data: [
{
id: '1',
Expand All @@ -42,26 +41,26 @@ describe('Calendar', () => {
},
],
isLoading: false,
});
});
})
})

afterEach(() => {
jest.clearAllMocks();
});
jest.clearAllMocks()
})

test('renders the calendar component', () => {
render(<Calendar eventId="123" />);
expect(screen.getByTestId('calendar')).toBeInTheDocument();
});
render(<Calendar eventId="123" />)
expect(screen.getByTestId('calendar')).toBeInTheDocument()
})

test('displays calendar events correctly', () => {
render(<Calendar eventId="123" />);
expect(screen.getByText('Task 1')).toBeInTheDocument();
expect(screen.getByText('Task 2')).toBeInTheDocument();
});
render(<Calendar eventId="123" />)
expect(screen.getByText('Task 1')).toBeInTheDocument()
expect(screen.getByText('Task 2')).toBeInTheDocument()
})

test('handles event clicks to show details in a modal', async () => {
render(<Calendar eventId="123" />);
fireEvent.click(screen.getByText('Task 1'));
});
});
render(<Calendar eventId="123" />)
fireEvent.click(screen.getByText('Task 1'))
})
})
48 changes: 24 additions & 24 deletions __tests__/package/package-list-free.test.tsx
Original file line number Diff line number Diff line change
@@ -1,39 +1,39 @@
import React from 'react'
import { render } from '@testing-library/react'
import '@testing-library/jest-dom'
import PackageList from '@/app/package/page';
import PackageList from '@/app/package/page'

jest.mock('@/redux/api/packageApi', () => ({
useGetPackageDetailQuery: jest.fn((id) => ({
data: {
"name": "Default Package",
"price": 5000,
"event_planner": true,
"event_tracker": true,
"event_timeline": true,
"event_rundown": true,
"ai_assistant": false
}
name: 'Default Package',
price: 5000,
event_planner: true,
event_tracker: true,
event_timeline: true,
event_rundown: true,
ai_assistant: false,
},
})),
}));
}))

jest.mock('@/redux/api/subscriptionApi', () => ({
useGetLatestSubscriptionQuery: jest.fn((id) => ({
useGetLatestSubscriptionQuery: jest.fn((id) => ({
data: {
"id": 1,
"plan": "PREMIUM",
"start_date": "2024-05-05T13:30:00.000Z",
"end_date": "2025-05-05T13:30:00.000Z",
"user": 1,
"is_active": false
}
id: 1,
plan: 'PREMIUM',
start_date: '2024-05-05T13:30:00.000Z',
end_date: '2025-05-05T13:30:00.000Z',
user: 1,
is_active: false,
},
})),
}));
}))

describe('PackageList component', () => {
it('renders correctly', () => {
const { getByTestId } = render(<PackageList />);
const packageDetail = getByTestId('package-detail');
expect(packageDetail).toBeInTheDocument();
});
});
const { getByTestId } = render(<PackageList />)
const packageDetail = getByTestId('package-detail')
expect(packageDetail).toBeInTheDocument()
})
})
46 changes: 23 additions & 23 deletions __tests__/package/package-list-premium.test.tsx
Original file line number Diff line number Diff line change
@@ -1,39 +1,39 @@
import React from 'react'
import { render } from '@testing-library/react'
import '@testing-library/jest-dom'
import PackageList from '@/app/package/page';
import PackageList from '@/app/package/page'

jest.mock('@/redux/api/packageApi', () => ({
useGetPackageDetailQuery: jest.fn((id) => ({
data: {
"name": "Default Package",
"price": 5000,
"event_planner": true,
"event_tracker": true,
"event_timeline": true,
"event_rundown": true,
"ai_assistant": false
}
name: 'Default Package',
price: 5000,
event_planner: true,
event_tracker: true,
event_timeline: true,
event_rundown: true,
ai_assistant: false,
},
})),
}));
}))

jest.mock('@/redux/api/subscriptionApi', () => ({
useGetLatestSubscriptionQuery: jest.fn((id) => ({
data: {
"id": 1,
"plan": "PREMIUM",
"start_date": "2024-05-05T13:30:00.000Z",
"end_date": "2025-05-05T13:30:00.000Z",
"user": 1,
"is_active": true
}
id: 1,
plan: 'PREMIUM',
start_date: '2024-05-05T13:30:00.000Z',
end_date: '2025-05-05T13:30:00.000Z',
user: 1,
is_active: true,
},
})),
}));
}))

describe('PackageList component', () => {
it('renders correctly', () => {
const { getByTestId } = render(<PackageList />);
const packageDetail = getByTestId('package-detail');
expect(packageDetail).toBeInTheDocument();
});
});
const { getByTestId } = render(<PackageList />)
const packageDetail = getByTestId('package-detail')
expect(packageDetail).toBeInTheDocument()
})
})
34 changes: 22 additions & 12 deletions src/app/package/PackageCard.tsx
Original file line number Diff line number Diff line change
@@ -1,28 +1,38 @@
import { PackageDetailResponse } from '@/types/package'
import { Box } from '@mui/material'
import CheckIcon from '@mui/icons-material/Check';
import CloseIcon from '@mui/icons-material/Close';
import { capitalizeWords } from '@/utils/capitalizeWords';
import CheckIcon from '@mui/icons-material/Check'
import CloseIcon from '@mui/icons-material/Close'
import { capitalizeWords } from '@/utils/capitalizeWords'

interface PackageDetailProps {
package_detail: PackageDetailResponse
}

export const PackageCard = ({ package_detail }: PackageDetailProps) => {
const features: (keyof PackageDetailResponse)[] = ['event_planner', 'event_tracker', 'event_timeline', 'event_rundown', 'ai_assistant'];
const features: (keyof PackageDetailResponse)[] = [
'event_planner',
'event_tracker',
'event_timeline',
'event_rundown',
'ai_assistant',
]

return (
<Box data-testid="package-card-box">
<ul className="list-disc list-inside space-y-2">
<ul className="list-disc list-inside space-y-2">
{features.map((feature) => (
<li key={feature} className="flex items-center">
{package_detail[feature] ?
<CheckIcon className="text-teal-400" /> :
<CloseIcon className="text-red-400" />}
<p className='text-sm' style={{ marginLeft: '0.5rem' }}>{capitalizeWords(feature)}</p>
</li>
<li key={feature} className="flex items-center">
{package_detail[feature] ? (
<CheckIcon className="text-teal-400" />
) : (
<CloseIcon className="text-red-400" />
)}
<p className="text-sm" style={{ marginLeft: '0.5rem' }}>
{capitalizeWords(feature)}
</p>
</li>
))}
</ul>
</ul>
</Box>
)
}
Expand Down
5 changes: 1 addition & 4 deletions src/app/package/page.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
'use client'

import { Box, Table, TableBody, TableCell, TableContainer, TableRow } from '@mui/material'
import { useGetPackageDetailQuery } from '@/redux/api/packageApi'
import PackageCard from './PackageCard'
Expand All @@ -11,7 +10,7 @@ import { formatRupiah } from '@/utils/formatRupiah'
import { formatDate } from '@/utils/formatDate'


export const PackageList = () => {
export default function PackageList() {
const { data: free_package = {} as PackageDetailResponse } = useGetPackageDetailQuery(1);
const { data: premium_package = {} as PackageDetailResponse } = useGetPackageDetailQuery(2);
const { data: latest_subscription = {} as LatestSubscriptionResponse } = useGetLatestSubscriptionQuery();
Expand Down Expand Up @@ -77,5 +76,3 @@ export const PackageList = () => {
</Box>
);
};

export default PackageList;
4 changes: 1 addition & 3 deletions src/components/elements/Timeline/Calendar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,12 @@ const DemoApp: React.FC<DemoAppProps> = ({ eventId }) => {
p: 4,
}



if (isLoading) {
return (
<div className="flex flex-col justify-center items-center min-h-[90vh]">
<div data-testid="loader" className="loader"></div>
</div>
);
)
}

return (
Expand Down
2 changes: 1 addition & 1 deletion src/redux/api/baseApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,4 @@ export const baseApi = createApi({
},
}),
endpoints: (builder) => ({}),
})
})
34 changes: 14 additions & 20 deletions src/redux/api/packageApi.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,16 @@
import {
PackageDetailRequest,
PackageDetailResponse
} from '@/types/package'
import { baseApi } from './baseApi'

export const packageApi = baseApi.injectEndpoints({
endpoints: (builder) => ({
getPackageDetail: builder.query<PackageDetailResponse, number>({
query: (id) => ({
url: `/packages/${id}/`,
method: 'GET',
}),
providesTags: (result) => [{ type: 'Package', id: result?.id }],
import { PackageDetailRequest, PackageDetailResponse } from '@/types/package'
import { baseApi } from './baseApi'

export const packageApi = baseApi.injectEndpoints({
endpoints: (builder) => ({
getPackageDetail: builder.query<PackageDetailResponse, number>({
query: (id) => ({
url: `/packages/${id}/`,
method: 'GET',
}),
providesTags: (result) => [{ type: 'Package', id: result?.id }],
}),
})

export const {
useGetPackageDetailQuery,
} = packageApi

}),
})

export const { useGetPackageDetailQuery } = packageApi
17 changes: 10 additions & 7 deletions src/redux/api/subscriptionApi.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import { baseApi } from './baseApi'
import { LatestSubscriptionResponse, SubscriptionHistoryResponse } from '@/types/subscription'
import {
LatestSubscriptionResponse,
SubscriptionHistoryResponse,
} from '@/types/subscription'

export const subscriptionApi = baseApi.injectEndpoints({
endpoints: (builder) => ({
Expand All @@ -24,13 +27,13 @@ export const subscriptionApi = baseApi.injectEndpoints({
url: '/subscriptions/latest/',
method: 'GET',
}),
providesTags: (result) => [{ type: 'LatestSubscription', id: result?.id }, 'LatestSubscription'],
providesTags: (result) => [
{ type: 'LatestSubscription', id: result?.id },
'LatestSubscription',
],
}),

}),
})

export const {
useGetSubscriptionsQuery,
useGetLatestSubscriptionQuery
} = subscriptionApi
export const { useGetSubscriptionsQuery, useGetLatestSubscriptionQuery } =
subscriptionApi
Loading

0 comments on commit d8d1d07

Please sign in to comment.