blob: eca047d90ce7e314fa71107989fc13d6c67f46af [file] [log] [blame] [edit]
// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import * as assert from 'assert';
import * as fs from 'fs/promises';
import { after, before, describe, it } from 'mocha';
import * as os from 'os';
import * as path from 'path';
import * as process from 'process';
import * as metric_properties from '../../../analytics/metric_properties';
import * as persistent_status from '../../../analytics/persistent_status';
const uuidv4Validator = /^[0-9A-F]{8}-[0-9A-F]{4}-[4][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;
describe('Analytics persistent status', function () {
let tmpPath: string;
let realXdgDataHome: string | undefined;
// Running tests in a folder independent of user's actual XDG_DATA_HOME
before(async function () {
tmpPath = await fs.mkdtemp(path.join(os.tmpdir(), 'vscode-fuchsia-'));
realXdgDataHome = process.env['XDG_DATA_HOME'];
process.env['XDG_DATA_HOME'] = tmpPath;
});
after(async function () {
if (realXdgDataHome === undefined) {
delete process.env['XDG_DATA_HOME'];
} else {
process.env['XDG_DATA_HOME'] = realXdgDataHome;
}
await fs.rm(tmpPath, { force: true, recursive: true });
});
it('works as intended', async function () {
assert.strictEqual(await persistent_status.external.isFirstLaunchOfFirstTool(), true);
await persistent_status.external.enable();
assert.strictEqual(await persistent_status.external.isEnabled(), true);
assert.strictEqual(await persistent_status.external.isFirstLaunchOfFirstTool(), false);
assert.strictEqual(await metric_properties.exists('uuid'), true);
assert.strictEqual(uuidv4Validator.test(await persistent_status.getUuid() ?? ''), true);
await persistent_status.external.disable();
assert.strictEqual(await persistent_status.external.isEnabled(), false);
assert.strictEqual(await persistent_status.external.isFirstLaunchOfFirstTool(), false);
assert.strictEqual(await metric_properties.exists('uuid'), false);
assert.strictEqual(await persistent_status.external.isFirstDirectLaunch(), true);
await persistent_status.external.markAsDirectlyLaunched();
assert.strictEqual(await persistent_status.external.isFirstDirectLaunch(), false);
});
});