mirror of
https://github.com/rjNemo/rentease.git
synced 2026-06-06 02:36:49 +00:00
148 lines
3.4 KiB
Go
148 lines
3.4 KiB
Go
package booking
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestService_All(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
mockData []*Line
|
|
}{
|
|
{
|
|
name: "returns empty list when no bookings",
|
|
mockData: []*Line{},
|
|
},
|
|
{
|
|
name: "returns list of bookings",
|
|
mockData: []*Line{
|
|
{
|
|
Id: 1,
|
|
CustomerName: "John Doe",
|
|
From: time.Date(2024, 1, 1, 0, 0, 0, 0, time.UTC),
|
|
To: time.Date(2024, 1, 5, 0, 0, 0, 0, time.UTC),
|
|
Platform: "Airbnb",
|
|
Total: 500.0,
|
|
Canceled: false,
|
|
},
|
|
{
|
|
Id: 2,
|
|
CustomerName: "Jane Smith",
|
|
From: time.Date(2024, 2, 1, 0, 0, 0, 0, time.UTC),
|
|
To: time.Date(2024, 2, 3, 0, 0, 0, 0, time.UTC),
|
|
Platform: "Booking.com",
|
|
Total: 300.0,
|
|
Canceled: true,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
// Create mocks
|
|
mockStore := new(MockStore)
|
|
mockCalendar := new(MockCalendarClient)
|
|
mockPDF := new(MockPDFClient)
|
|
|
|
// Set up expectations
|
|
mockStore.On("All").Return(tt.mockData)
|
|
|
|
// Create service with mocks
|
|
service, err := NewService(mockStore, nil, mockCalendar, mockPDF)
|
|
assert.NoError(t, err)
|
|
|
|
// Call the method
|
|
result := service.All()
|
|
|
|
// Assert expectations
|
|
assert.Equal(t, tt.mockData, result)
|
|
mockStore.AssertExpectations(t)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestService_Search(t *testing.T) {
|
|
sampleBookings := []*Line{
|
|
{
|
|
Id: 1,
|
|
CustomerName: "John Doe",
|
|
From: time.Date(2024, 1, 1, 0, 0, 0, 0, time.UTC),
|
|
To: time.Date(2024, 1, 5, 0, 0, 0, 0, time.UTC),
|
|
Platform: "Airbnb",
|
|
Total: 500.0,
|
|
Canceled: false,
|
|
},
|
|
{
|
|
Id: 2,
|
|
CustomerName: "Jane Smith",
|
|
From: time.Date(2024, 2, 1, 0, 0, 0, 0, time.UTC),
|
|
To: time.Date(2024, 2, 3, 0, 0, 0, 0, time.UTC),
|
|
Platform: "Booking.com",
|
|
Total: 300.0,
|
|
Canceled: true,
|
|
},
|
|
}
|
|
|
|
tests := []struct {
|
|
name string
|
|
searchQuery string
|
|
expectedLines []*Line
|
|
expectedCalled bool
|
|
}{
|
|
{
|
|
name: "empty search query returns no results",
|
|
searchQuery: "",
|
|
expectedLines: []*Line{},
|
|
expectedCalled: false,
|
|
},
|
|
{
|
|
name: "search for 'John' returns matching booking",
|
|
searchQuery: "John",
|
|
expectedLines: []*Line{
|
|
sampleBookings[0],
|
|
},
|
|
expectedCalled: true,
|
|
},
|
|
{
|
|
name: "search for 'Smith' returns matching booking",
|
|
searchQuery: "Smith",
|
|
expectedLines: []*Line{
|
|
sampleBookings[1],
|
|
},
|
|
expectedCalled: true,
|
|
},
|
|
{
|
|
name: "search for non-existent name returns empty list",
|
|
searchQuery: "NonExistent",
|
|
expectedLines: []*Line{},
|
|
expectedCalled: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
// Create mocks
|
|
mockStore := new(MockStore)
|
|
mockCalendar := new(MockCalendarClient)
|
|
mockPDF := new(MockPDFClient)
|
|
|
|
// Set up expectations
|
|
mockStore.On("Search", tt.searchQuery).Return(tt.expectedLines)
|
|
|
|
// Create service with mocks
|
|
service, err := NewService(mockStore, nil, mockCalendar, mockPDF)
|
|
assert.NoError(t, err)
|
|
|
|
// Call the method
|
|
result := service.Search(tt.searchQuery)
|
|
|
|
// Assert expectations
|
|
assert.Equal(t, tt.expectedLines, result)
|
|
mockStore.AssertExpectations(t)
|
|
})
|
|
}
|
|
}
|