controllerTestTemplate function

String controllerTestTemplate(
  1. String feature,
  2. String pascal,
  3. String camel
)

Implementation

String controllerTestTemplate(String feature, String pascal, String camel) =>
    '''
import 'package:flutter_test/flutter_test.dart';
import 'package:karna_mvc/core/errors/app_exception.dart';
import 'package:karna_mvc/core/result/result.dart';
import 'package:karna_mvc/features/$feature/controller/${feature}_controller.dart';
import 'package:karna_mvc/features/$feature/model/${feature}_model.dart';
import 'package:karna_mvc/features/$feature/repository/${feature}_repository.dart';

class Mock${pascal}Repository implements ${pascal}Repository {
  Result<${pascal}Model>? modelResult;
  Result<List<${pascal}Model>>? listResult;
  Result<${pascal}Model>? cacheResult;
  Result<${pascal}Model>? remoteResult;

  @override
  Future<Result<${pascal}Model>> getById(String id) async => modelResult!;
  @override
  Future<Result<List<${pascal}Model>>> getAll() async => listResult!;
  @override
  Future<Result<${pascal}Model>> getFromCache(String id) async => cacheResult!;
  @override
  Future<Result<${pascal}Model>> getFromRemote(String id) async => remoteResult!;
}

void main() {
  late Mock${pascal}Repository mockRepo;
  late ${pascal}Controller controller;

  setUp(() {
    mockRepo = Mock${pascal}Repository();
    controller = ${pascal}Controller(repository: mockRepo);
  });

  test('loadAll sets list on success', () async {
    mockRepo.listResult = Success([${pascal}Model(id: '1'), ${pascal}Model(id: '2')]);
    await controller.loadAll();
    expect(controller.${camel}List.length, equals(2));
    expect(controller.isLoading, isFalse);
  });

  test('loadById sets data on cache hit', () async {
    mockRepo.cacheResult = Success(${pascal}Model(id: '1'));
    await controller.loadById('1');
    expect(controller.$camel?.id, equals('1'));
  });

  test('loadById sets error on failure', () async {
    mockRepo.cacheResult = const Failure(CacheException(message: 'miss', code: 'CACHE_MISS'));
    mockRepo.remoteResult = const Failure(NetworkException(message: 'No connection', code: 'NO_CONNECTION'));
    await controller.loadById('1');
    expect(controller.hasError, isTrue);
  });
}
''';