| // 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); |
| }); |
| }); |