diff --git a/test/models/tile_provider_test.dart b/test/models/tile_provider_test.dart index f26810a..3d825b0 100644 --- a/test/models/tile_provider_test.dart +++ b/test/models/tile_provider_test.dart @@ -1,5 +1,5 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:flock_map_app/models/tile_provider.dart'; +import 'package:deflockapp/models/tile_provider.dart'; void main() { group('TileType', () { @@ -127,10 +127,17 @@ void main() { expect(satelliteType.attribution, '© Microsoft Corporation'); }); - test('all default providers are usable', () { + test('providers without API key requirements are usable', () { final providers = DefaultTileProviders.createDefaults(); for (final provider in providers) { - expect(provider.isUsable, isTrue, reason: '${provider.name} should be usable'); + final needsKey = provider.tileTypes.any((t) => t.requiresApiKey); + if (needsKey) { + expect(provider.isUsable, isFalse, + reason: '${provider.name} requires API key and has none set'); + } else { + expect(provider.isUsable, isTrue, + reason: '${provider.name} should be usable without API key'); + } } }); }); diff --git a/test/services/deflock_tile_provider_test.dart b/test/services/deflock_tile_provider_test.dart index 44b900a..8ea7bed 100644 --- a/test/services/deflock_tile_provider_test.dart +++ b/test/services/deflock_tile_provider_test.dart @@ -1,40 +1,50 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_map/flutter_map.dart'; +import 'package:mocktail/mocktail.dart'; -import '../../lib/services/deflock_tile_provider.dart'; -import '../../lib/services/map_data_provider.dart'; +import 'package:deflockapp/app_state.dart'; +import 'package:deflockapp/services/deflock_tile_provider.dart'; +import 'package:deflockapp/services/map_data_provider.dart'; + +class MockAppState extends Mock implements AppState {} void main() { group('DeflockTileProvider', () { late DeflockTileProvider provider; - + late MockAppState mockAppState; + setUp(() { provider = DeflockTileProvider(); + mockAppState = MockAppState(); + when(() => mockAppState.selectedTileProvider).thenReturn(null); + when(() => mockAppState.selectedTileType).thenReturn(null); + AppState.instance = mockAppState; }); - + test('creates image provider for tile coordinates', () { const coordinates = TileCoordinates(0, 0, 0); - const options = TileLayer( + final options = TileLayer( urlTemplate: 'test/{z}/{x}/{y}', ); - + final imageProvider = provider.getImage(coordinates, options); - + expect(imageProvider, isA()); - expect((imageProvider as DeflockTileImageProvider).coordinates, equals(coordinates)); + expect((imageProvider as DeflockTileImageProvider).coordinates, + equals(coordinates)); }); }); - + group('DeflockTileImageProvider', () { test('generates consistent keys for same coordinates', () { const coordinates1 = TileCoordinates(1, 2, 3); const coordinates2 = TileCoordinates(1, 2, 3); const coordinates3 = TileCoordinates(1, 2, 4); - - const options = TileLayer(urlTemplate: 'test/{z}/{x}/{y}'); - + + final options = TileLayer(urlTemplate: 'test/{z}/{x}/{y}'); + final mapDataProvider = MapDataProvider(); - + final provider1 = DeflockTileImageProvider( coordinates: coordinates1, options: options, @@ -56,20 +66,20 @@ void main() { providerId: 'test_provider', tileTypeId: 'test_type', ); - + // Same coordinates should be equal expect(provider1, equals(provider2)); expect(provider1.hashCode, equals(provider2.hashCode)); - + // Different coordinates should not be equal expect(provider1, isNot(equals(provider3))); }); - + test('generates different keys for different providers/types', () { const coordinates = TileCoordinates(1, 2, 3); - const options = TileLayer(urlTemplate: 'test/{z}/{x}/{y}'); + final options = TileLayer(urlTemplate: 'test/{z}/{x}/{y}'); final mapDataProvider = MapDataProvider(); - + final provider1 = DeflockTileImageProvider( coordinates: coordinates, options: options, @@ -91,14 +101,14 @@ void main() { providerId: 'provider_a', tileTypeId: 'type_2', ); - + // Different providers should not be equal (even with same coordinates) expect(provider1, isNot(equals(provider2))); expect(provider1.hashCode, isNot(equals(provider2.hashCode))); - + // Different tile types should not be equal (even with same coordinates and provider) expect(provider1, isNot(equals(provider3))); expect(provider1.hashCode, isNot(equals(provider3.hashCode))); }); }); -} \ No newline at end of file +} diff --git a/test/widget_test.dart b/test/widget_test.dart deleted file mode 100644 index d370707..0000000 --- a/test/widget_test.dart +++ /dev/null @@ -1,30 +0,0 @@ -// This is a basic Flutter widget test. -// -// To perform an interaction with a widget in your test, use the WidgetTester -// utility in the flutter_test package. For example, you can send tap and scroll -// gestures. You can also use WidgetTester to find child widgets in the widget -// tree, read text, and verify that the values of widget properties are correct. - -import 'package:flutter/material.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import 'package:deflockapp/main.dart'; - -void main() { - testWidgets('Counter increments smoke test', (WidgetTester tester) async { - // Build our app and trigger a frame. - await tester.pumpWidget(const MyApp()); - - // Verify that our counter starts at 0. - expect(find.text('0'), findsOneWidget); - expect(find.text('1'), findsNothing); - - // Tap the '+' icon and trigger a frame. - await tester.tap(find.byIcon(Icons.add)); - await tester.pump(); - - // Verify that our counter has incremented. - expect(find.text('0'), findsNothing); - expect(find.text('1'), findsOneWidget); - }); -}