chromium/chrome/test/data/webui/chromeos/settings/fake_users_private.ts

// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Fake implementation of chrome.usersPrivate
 * for testing.
 */

type User = chrome.usersPrivate.User;
type LoginStatusDict = chrome.usersPrivate.LoginStatusDict;
type UsersPrivateInterface = typeof chrome.usersPrivate;

/**
 * Fake of the chrome.usersPrivate API. Only methods that are called
 * during testing have been implemented.
 */
export class FakeUsersPrivate implements UsersPrivateInterface {
  users: User[] = [];

  setUsersForTesting(users: User[]): void {
    this.users = users;
  }

  addUser(email: string): Promise<boolean> {
    this.users.push({
      email,
      displayEmail: email,
      name: 'Test User',
      isOwner: false,
      isChild: false,
    });
    return Promise.resolve(true);
  }

  getUsers(): Promise<User[]> {
    return Promise.resolve(this.users);
  }

  removeUser(email: string): Promise<boolean> {
    this.users = this.users.filter(user => user.email !== email);
    return Promise.resolve(true);
  }

  isUserInList(email: string): Promise<boolean> {
    const exists = !!this.users.find(user => user.email === email);
    return Promise.resolve(exists);
  }

  isUserListManaged(): Promise<boolean> {
    return Promise.resolve(false);
  }

  getLoginStatus(): Promise<LoginStatusDict[]> {
    const loginStatuses = this.users.map((_user) => {
      return {
        isLoggedIn: true,
        isScreenLocked: false,
      };
    });
    return Promise.resolve(loginStatuses);
  }

  getCurrentUser(): Promise<User> {
    return Promise.resolve(this.users[0]!);
  }
}