blob: 36acee9b2e8474fcd8de669f06f3c87f0f67fe28 [file] [log] [blame]
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:io' as io;
import 'package:file/file.dart';
import 'package:file/memory.dart';
import 'package:test/test.dart';
import 'package:unified_analytics/src/enums.dart';
import 'package:unified_analytics/unified_analytics.dart';
void main() {
late MemoryFileSystem fs;
late Directory home;
late Analytics analytics;
const homeDirName = 'home';
const initialTool = DashTool.flutterTool;
const toolsMessageVersion = 1;
const toolsMessage = 'toolsMessage';
const flutterChannel = 'flutterChannel';
const flutterVersion = 'flutterVersion';
const dartVersion = 'dartVersion';
const platform = DevicePlatform.macos;
setUp(() {
// Setup the filesystem with the home directory
final fsStyle =
io.Platform.isWindows ? FileSystemStyle.windows : FileSystemStyle.posix;
fs = MemoryFileSystem.test(style: fsStyle);
home = fs.directory(homeDirName);
});
test('Honor legacy dart analytics opt out', () {
// Create the file for the dart legacy opt out
final dartLegacyConfigFile =
home.childDirectory('.dart').childFile('dartdev.json');
dartLegacyConfigFile.createSync(recursive: true);
dartLegacyConfigFile.writeAsStringSync('''
{
"firstRun": false,
"enabled": false,
"disclosureShown": true,
"clientId": "52710e60-7c70-4335-b3a4-9d922630f12a"
}
''');
// The main analytics instance, other instances can be spawned within tests
// to test how to instances running together work
analytics = Analytics.fake(
tool: initialTool,
homeDirectory: home,
flutterChannel: flutterChannel,
toolsMessageVersion: toolsMessageVersion,
toolsMessage: toolsMessage,
flutterVersion: flutterVersion,
dartVersion: dartVersion,
fs: fs,
platform: platform,
);
expect(analytics.telemetryEnabled, false);
});
test('Telemetry enabled if legacy dart analytics is enabled', () {
// Create the file for the dart legacy opt out
final dartLegacyConfigFile =
home.childDirectory('.dart').childFile('dartdev.json');
dartLegacyConfigFile.createSync(recursive: true);
dartLegacyConfigFile.writeAsStringSync('''
{
"firstRun": false,
"enabled": true,
"disclosureShown": true,
"clientId": "52710e60-7c70-4335-b3a4-9d922630f12a"
}
''');
// The main analytics instance, other instances can be spawned within tests
// to test how to instances running together work
analytics = Analytics.fake(
tool: initialTool,
homeDirectory: home,
flutterChannel: flutterChannel,
toolsMessageVersion: toolsMessageVersion,
toolsMessage: toolsMessage,
flutterVersion: flutterVersion,
dartVersion: dartVersion,
fs: fs,
platform: platform,
);
expect(analytics.telemetryEnabled, true);
});
test('Honor legacy flutter analytics opt out', () {
// Create the file for the flutter legacy opt out
final flutterLegacyConfigFile =
home.childDirectory('.dart').childFile('dartdev.json');
flutterLegacyConfigFile.createSync(recursive: true);
flutterLegacyConfigFile.writeAsStringSync('''
{
"firstRun": false,
"clientId": "4c3a3d1e-e545-47e7-b4f8-10129f6ab169",
"enabled": false
}
''');
// The main analytics instance, other instances can be spawned within tests
// to test how to instances running together work
analytics = Analytics.fake(
tool: initialTool,
homeDirectory: home,
flutterChannel: flutterChannel,
toolsMessageVersion: toolsMessageVersion,
toolsMessage: toolsMessage,
flutterVersion: flutterVersion,
dartVersion: dartVersion,
fs: fs,
platform: platform,
);
expect(analytics.telemetryEnabled, false);
});
test('Telemetry enabled if legacy flutter analytics is enabled', () {
// Create the file for the flutter legacy opt out
final flutterLegacyConfigFile =
home.childDirectory('.dart').childFile('dartdev.json');
flutterLegacyConfigFile.createSync(recursive: true);
flutterLegacyConfigFile.writeAsStringSync('''
{
"firstRun": false,
"clientId": "4c3a3d1e-e545-47e7-b4f8-10129f6ab169",
"enabled": true
}
''');
// The main analytics instance, other instances can be spawned within tests
// to test how to instances running together work
analytics = Analytics.fake(
tool: initialTool,
homeDirectory: home,
flutterChannel: flutterChannel,
toolsMessageVersion: toolsMessageVersion,
toolsMessage: toolsMessage,
flutterVersion: flutterVersion,
dartVersion: dartVersion,
fs: fs,
platform: platform,
);
expect(analytics.telemetryEnabled, true);
});
test('Honor legacy devtools analytics opt out', () {
// Create the file for the devtools legacy opt out
final devtoolsLegacyConfigFile =
home.childDirectory('.flutter-devtools').childFile('.devtools');
devtoolsLegacyConfigFile.createSync(recursive: true);
devtoolsLegacyConfigFile.writeAsStringSync('''
{
"analyticsEnabled": false,
"isFirstRun": false,
"lastReleaseNotesVersion": "2.31.0",
"2023-Q4": {
"surveyActionTaken": false,
"surveyShownCount": 0
}
}
''');
// The main analytics instance, other instances can be spawned within tests
// to test how to instances running together work
analytics = Analytics.fake(
tool: initialTool,
homeDirectory: home,
flutterChannel: flutterChannel,
toolsMessageVersion: toolsMessageVersion,
toolsMessage: toolsMessage,
flutterVersion: flutterVersion,
dartVersion: dartVersion,
fs: fs,
platform: platform,
);
expect(analytics.telemetryEnabled, false);
});
test('Telemetry enabled if legacy devtools analytics is enabled', () {
// Create the file for the devtools legacy opt out
final devtoolsLegacyConfigFile =
home.childDirectory('.flutter-devtools').childFile('.devtools');
devtoolsLegacyConfigFile.createSync(recursive: true);
devtoolsLegacyConfigFile.writeAsStringSync('''
{
"analyticsEnabled": true,
"isFirstRun": false,
"lastReleaseNotesVersion": "2.31.0",
"2023-Q4": {
"surveyActionTaken": false,
"surveyShownCount": 0
}
}
''');
// The main analytics instance, other instances can be spawned within tests
// to test how to instances running together work
analytics = Analytics.fake(
tool: initialTool,
homeDirectory: home,
flutterChannel: flutterChannel,
toolsMessageVersion: toolsMessageVersion,
toolsMessage: toolsMessage,
flutterVersion: flutterVersion,
dartVersion: dartVersion,
fs: fs,
platform: platform,
);
expect(analytics.telemetryEnabled, true);
});
test('Telemetry disabled if dart config file corrupted', () {
// Create the file for the dart legacy opt out with text that
// is not valid JSON
final dartLegacyConfigFile =
home.childDirectory('.dart').childFile('dartdev.json');
dartLegacyConfigFile.createSync(recursive: true);
dartLegacyConfigFile.writeAsStringSync('''
NOT VALID JSON
{
"firstRun": false,
"clientId": "4c3a3d1e-e545-47e7-b4f8-10129f6ab169",
"enabled": true
}
''');
// The main analytics instance, other instances can be spawned within tests
// to test how to instances running together work
analytics = Analytics.fake(
tool: initialTool,
homeDirectory: home,
flutterChannel: flutterChannel,
toolsMessageVersion: toolsMessageVersion,
toolsMessage: toolsMessage,
flutterVersion: flutterVersion,
dartVersion: dartVersion,
fs: fs,
platform: platform,
);
expect(analytics.telemetryEnabled, false);
});
test('Telemetry disabled if devtools config file corrupted', () {
// Create the file for the devtools legacy opt out with text that
// is not valid JSON
final devtoolsLegacyConfigFile =
home.childDirectory('.flutter-devtools').childFile('.devtools');
devtoolsLegacyConfigFile.createSync(recursive: true);
devtoolsLegacyConfigFile.writeAsStringSync('''
NOT VALID JSON
{
"analyticsEnabled": true,
"isFirstRun": false,
"lastReleaseNotesVersion": "2.31.0",
"2023-Q4": {
"surveyActionTaken": false,
"surveyShownCount": 0
}
}
''');
// The main analytics instance, other instances can be spawned within tests
// to test how to instances running together work
analytics = Analytics.fake(
tool: initialTool,
homeDirectory: home,
flutterChannel: flutterChannel,
toolsMessageVersion: toolsMessageVersion,
toolsMessage: toolsMessage,
flutterVersion: flutterVersion,
dartVersion: dartVersion,
fs: fs,
platform: platform,
);
expect(analytics.telemetryEnabled, false);
});
test('Telemetry disabled if flutter config file corrupted', () {
// Create the file for the flutter legacy opt out with text that
// is not valid JSON
final fluttterLegacyConfigFile =
home.childDirectory('.dart').childFile('dartdev.json');
fluttterLegacyConfigFile.createSync(recursive: true);
fluttterLegacyConfigFile.writeAsStringSync('''
NOT VALID JSON
{
"firstRun": false,
"clientId": "4c3a3d1e-e545-47e7-b4f8-10129f6ab169",
"enabled": true
}
''');
// The main analytics instance, other instances can be spawned within tests
// to test how to instances running together work
analytics = Analytics.fake(
tool: initialTool,
homeDirectory: home,
flutterChannel: flutterChannel,
toolsMessageVersion: toolsMessageVersion,
toolsMessage: toolsMessage,
flutterVersion: flutterVersion,
dartVersion: dartVersion,
fs: fs,
platform: platform,
);
expect(analytics.telemetryEnabled, false);
});
}