datasourceRemoteTestTemplate function

String datasourceRemoteTestTemplate(
  1. String name,
  2. String className
)

Implementation

String datasourceRemoteTestTemplate(String name, String className) =>
    '''
import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:dio/dio.dart';
import '../../../../../lib/features/$name/data/datasources/${name}_remote_datasource_impl.dart';
import '../../../../../lib/features/$name/data/models/${name}_model.dart';

class MockDio extends Mock implements Dio {}

void main() {
  late ${className}RemoteDataSourceImpl dataSource;
  late MockDio mockDio;

  setUpAll(() {
    registerFallbackValue(RequestOptions(path: ''));
  });

  setUp(() {
    mockDio = MockDio();
    dataSource = ${className}RemoteDataSourceImpl(mockDio);
  });

  group('${className}RemoteDataSource', () {
    test('should return ${className}Model when the call is successful', () async {
      final tResponseData = {'id': '123'};
      when(() => mockDio.get(any())).thenAnswer(
        (_) async => Response(
          data: tResponseData,
          statusCode: 200,
          requestOptions: RequestOptions(path: ''),
        ),
      );

      final result = await dataSource.fetchData();

      expect(result, isA<${className}Model>());
      expect(result.id, '123');
      verify(() => mockDio.get('https://api.example.com/$name')).called(1);
    });

    test('should throw exception when the call fails', () async {
      when(() => mockDio.get(any())).thenThrow(DioException(
        requestOptions: RequestOptions(path: ''),
        message: 'Network error',
      ));

      expect(() => dataSource.fetchData(), throwsA(isA<DioException>()));
    });
  });
}
''';