blob: e1e747661fdea11670cfc1b482a17bed10252114 [file]
// 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);
});
}