64 lines
1.9 KiB
TypeScript
64 lines
1.9 KiB
TypeScript
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
|
import { productService } from './productService'
|
|
import { apiClient } from './apiClient'
|
|
import { ProductSearchFilters } from '../types/product'
|
|
|
|
vi.mock('./apiClient', () => ({
|
|
apiClient: {
|
|
get: vi.fn(),
|
|
}
|
|
}))
|
|
|
|
describe('productService', () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks()
|
|
})
|
|
|
|
it('search calls api with correct params', async () => {
|
|
// apiClient now returns data directly, not response.data
|
|
const mockData = { products: [], total: 0, page: 1, page_size: 20 }
|
|
vi.mocked(apiClient.get).mockResolvedValue(mockData)
|
|
|
|
const filters: ProductSearchFilters = {
|
|
lat: -16.32,
|
|
lng: -48.95,
|
|
search: 'dipirona',
|
|
page: 1,
|
|
page_size: 20
|
|
}
|
|
|
|
const result = await productService.search(filters)
|
|
|
|
expect(apiClient.get).toHaveBeenCalledWith(
|
|
expect.stringContaining('/v1/products/search')
|
|
)
|
|
// Check if params are present
|
|
const callArgs = vi.mocked(apiClient.get).mock.calls[0][0]
|
|
expect(callArgs).toContain('lat=-16.32')
|
|
expect(callArgs).toContain('lng=-48.95')
|
|
expect(callArgs).toContain('search=dipirona')
|
|
|
|
expect(result).toEqual(mockData)
|
|
})
|
|
|
|
it('search handles optional filters', async () => {
|
|
const mockData = { products: [], total: 0 }
|
|
vi.mocked(apiClient.get).mockResolvedValue(mockData)
|
|
|
|
const filters: ProductSearchFilters = {
|
|
lat: -16.32,
|
|
lng: -48.95,
|
|
min_price: 1000,
|
|
max_price: 5000,
|
|
max_distance: 10
|
|
}
|
|
|
|
await productService.search(filters)
|
|
|
|
const callArgs = vi.mocked(apiClient.get).mock.calls[0][0]
|
|
expect(callArgs).toContain('min_price=1000')
|
|
expect(callArgs).toContain('max_price=5000')
|
|
expect(callArgs).toContain('max_distance=10')
|
|
})
|
|
})
|
|
|