Enhance return details service with error handling and tests.

-  **Feature**: Improved error handling in fetchReturnDetails method
- 🧪 **Test**: Added unit tests for ReturnDetailsService
This commit is contained in:
Lorenz Hilpert
2025-04-02 11:19:58 +02:00
parent aeacd0077f
commit a4b092a021
2 changed files with 75 additions and 1 deletions

View File

@@ -0,0 +1,64 @@
import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest';
import { ReturnDetailsService } from './return-details.service';
import { ReceiptService } from '@generated/swagger/oms-api';
import { of } from 'rxjs';
import { FetchReturnDetails } from './schemas';
import { Receipt } from './models';
describe('ReturnDetailsService', () => {
let spectator: SpectatorService<ReturnDetailsService>;
const createService = createServiceFactory({
service: ReturnDetailsService,
mocks: [ReceiptService],
});
beforeEach(() => {
spectator = createService();
});
it('should fetch return details successfully', (done) => {
// Arrange
const mockParams: FetchReturnDetails = { receiptId: 123 };
const mockResponse: any = { result: { id: 123, data: 'mockData' } };
const receiptService = spectator.inject(ReceiptService);
receiptService.ReceiptGetReceipt.mockReturnValue(of(mockResponse));
// Act
spectator.service.fetchReturnDetails(mockParams).subscribe((result) => {
// Assert
expect(result).toEqual(mockResponse.result as Receipt);
done();
});
});
it('should throw an error if API response contains an error', (done) => {
// Arrange
const mockParams: FetchReturnDetails = { receiptId: 123 };
const mockResponse: any = { error: 'API error' };
const receiptService = spectator.inject(ReceiptService);
receiptService.ReceiptGetReceipt.mockReturnValue(of(mockResponse));
// Act
spectator.service.fetchReturnDetails(mockParams).subscribe({
error: (err) => {
// Assert
expect(err.message).toBe('Failed to fetch return details');
done();
},
});
});
it('should throw an error if parameters are invalid', (done) => {
// Arrange
const invalidParams: any = { receiptId: null };
// Act
spectator.service.fetchReturnDetails(invalidParams).subscribe({
error: (err) => {
// Assert
expect(err).toBeTruthy();
done();
},
});
});
});

View File

@@ -4,10 +4,20 @@ import { map, Observable, throwError } from 'rxjs';
import { ReceiptService } from '@generated/swagger/oms-api';
import { Receipt } from './models';
/**
* Service responsible for fetching return details for a given receipt.
*/
@Injectable({ providedIn: 'root' })
export class ReturnDetailsService {
#receiptService = inject(ReceiptService);
/**
* Fetches the return details for a specific receipt.
*
* @param params - The parameters required to fetch the return details, including the receipt ID.
* @returns An observable that emits the fetched receipt details.
* @throws Will throw an error if the parameters are invalid or if the API response contains an error.
*/
fetchReturnDetails(params: FetchReturnDetails): Observable<Receipt> {
try {
const parsed = FetchReturnDetailsSchema.parse(params);
@@ -17,7 +27,7 @@ export class ReturnDetailsService {
.pipe(
map((res) => {
if (res.error || !res.result) {
throw new Error('Failed to fetch return details');
throw new Error(res.message || 'Failed to fetch return details');
}
return res.result as Receipt;