import 'dart:convert'; import 'package:{{ name }}/core/errors/exceptions.dart'; import 'package:{{ name }}/core/utils/constants.dart'; import 'package:{{ name }}/features/login/data/datasources/login_local_datasource.dart'; import 'package:{{ name }}/features/login/data/models/token_model.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; import '../../../../fixtures/fixture_reader.dart'; class MockSecureStorage extends Mock implements FlutterSecureStorage {} void main() { MockSecureStorage mockSecureStorage = MockSecureStorage(); LoginLocalDataSourceImpl dataSourceImpl = LoginLocalDataSourceImpl(storage: mockSecureStorage); group('getLastToken', () { final TokenModel tTokenModel = TokenModel.fromJson(jsonDecode(fixture('user_login.json'))); test('should return last stored token (cached)', () async { //arrage when(mockSecureStorage.read(key: storageDefaultAuthToken)) .thenAnswer((_) async => fixture('user_login.json')); // act final result = await dataSourceImpl.getToken(); //assert verify(mockSecureStorage.read(key: storageDefaultAuthToken)); expect(result, tTokenModel); }); test('should return a Cache Failure when there is no stored token', () async { //arrange when(mockSecureStorage.read(key: storageDefaultAuthToken)) .thenThrow(CacheException()); //act final call = dataSourceImpl.getToken; //assert expect(call, throwsA(isA())); }); }); group('cacheToken', () { const TokenModel tTokenModel = TokenModel(accessToken: '123456'); test('should store the token', () async { //act dataSourceImpl.saveToken(tTokenModel); //assert verify(mockSecureStorage.write( key: storageDefaultAuthToken, value: jsonEncode(tTokenModel))); }); }); }