blob: a9850a54d45dd9389460b092568276c6912eae3a [file] [log] [blame]
// Copyright 2024 The Flutter Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd.
import 'package:devtools_app/devtools_app.dart';
import 'package:devtools_app/src/screens/deep_link_validation/deep_links_model.dart';
import 'package:devtools_app/src/screens/deep_link_validation/deep_links_services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:http/http.dart';
import 'package:http/testing.dart';
import '../test_data/deep_link/fake_responses.dart';
final defaultAndroidDeeplink = androidDeepLinkJson(defaultDomain);
class TestDeepLinksService extends DeepLinksService {
TestDeepLinksService({
this.hasAndroidDomainErrors = false,
this.iosValidationResponse = '',
}) {
// Create a mock client to return fake responses.
_client = MockClient((request) async {
if (request.url == Uri.parse(androidDomainValidationURL)) {
if (hasAndroidDomainErrors) {
return Response(androidValidationResponseWithError, 200);
} else {
return Response(androidValidationResponseWithNoError, 200);
}
}
if (request.url == Uri.parse(iosDomainValidationURL)) {
return Response(iosValidationResponse, 200);
}
return Response('this is a body', 404);
});
}
late Client _client;
@override
Client get client => _client;
final bool hasAndroidDomainErrors;
final String iosValidationResponse;
}
class TestDeepLinksController extends DeepLinksController {
TestDeepLinksController({
this.hasAndroidDomainErrors = false,
this.iosValidationResponse = iosValidationResponseWithNoError,
}) {
_deepLinksService = TestDeepLinksService(
hasAndroidDomainErrors: hasAndroidDomainErrors,
iosValidationResponse: iosValidationResponse,
);
}
List<String> fakeAndroidDeepLinks = [];
bool hasAndroidDomainErrors = false;
bool hasAndroidPathErrors = false;
String iosValidationResponse = '';
List<String> fakeIosDomains = [];
late DeepLinksService _deepLinksService;
@override
DeepLinksService get deepLinksService => _deepLinksService;
@override
Future<String?> packageDirectoryForMainIsolate() async {
return null;
}
@override
Future<void> validateLinks() async {
androidAppLinks[selectedAndroidVariantIndex.value] = fakeAppLinkSettings(
fakeAndroidDeepLinks,
);
iosLinks[selectedIosConfigurationIndex.value] = fakeUniversalLinkSettings(
fakeIosDomains,
);
await super.validateLinks();
}
@override
void selectLink(LinkData linkdata) async {
selectedLink.value = linkdata;
if (linkdata.domainErrors.isNotEmpty) {
generatedAssetLinksForSelectedLink.value = GenerateAssetLinksResult(
'',
'fake generated content',
);
}
}
}