silinternational/google-api-php-client-mock

尝试创建一个用于单元和功能测试的 Google API PHP 客户端智能模拟。

2.11.2 2024-08-06 22:29 UTC

README

这是一个用于单元和功能测试的小规模 Google API PHP 客户端智能模拟。

概述

此软件旨在模拟与 Google Workspace 账户相关的 Google API 的部分,特别是与用户和用户别名相关的调用。

目录

Google 服务目录(GSD)的属性包括...

  1. $asps,被设置为 GSD Asps_Resource
  2. $members,被设置为 GSD Members_Resource
  3. $users,被设置为 GSD Users_Resource
  4. $users_aliases,被设置为 GSD UsersAliases_Resource
  5. $tokens,被设置为 GSD Tokens_Resource
  6. $twoStepVerification,被设置为 GSD TwoStepVerification_Resource
  7. $verificationCodes,被设置为 GSD VerificationCodes_Resource

Asps_Resource

Asps_Resource 用于管理用户的 App Specific Passwords(ASPs)。此模拟实现...

  1. listAsps()

Members_Resource

Members_Resource 用于管理组成员。此模拟实现...

  1. insert()
  2. listMembers()

Users_Resource

Users_Resource 有各种管理 Google Apps 用户的函数。此模拟实现其中的三个...

  1. delete()
  2. get()
  3. insert()
  4. update()
  5. listUsers()

UsersAliases_Resource

UsersAliases_Resource 有各种管理 Google Apps 用户别名的函数。此模拟实现...

  1. delete()
  2. insert()
  3. listUsersAliases()

Tokens_Resource

Tokens_Resource 用于管理用户的 OAuth 访问令牌。此模拟实现...

  1. listTokens()

TwoStepVerification_Resource

TwoStepVerification_Resource 用于关闭 2SV。此模拟实现...

  1. turnOff()

VerificationCodes_Resource

VerificationCodes_Resource 用于管理用户的 OAuth 访问令牌。此模拟实现...

  1. generate()
  2. invalidate()
  3. listVerificationCodes()

Gmail

Gmail API 对象的属性包括...

  1. $users_settings
  2. $users_settings_delegates
  3. $users_settings_forwardingAddresses

UsersSettings

此模拟实现的 UsersSettings 资源上的方法包括...

  1. updateImap()
  2. updatePop()

UsersSettingsDelegates

此模拟实现的 UsersSettingsDelegates 资源上的方法包括...

  1. create()
  2. delete()
  3. get()
  4. listUsersSettingsDelegates()

UsersSettingsForwardingAddresses

此模拟实现的 UsersSettingsForwardingAddresses 资源上的方法包括...

  1. listUsersSettingsForwardingAddresses()

单元测试

您应该已安装 docker 和 docker compose 插件。要运行测试

  • make it-now

数据持久性

为了使此模拟能够使用数据,它使用一个 Sqlite 数据库文件。默认路径和文件名是 ... SilMock/DataStore/Sqlite/Google_Service_Data.db。要覆盖此默认值,UsersResource 和 UsersAliasesResource 类的构造函数接受一个可选的字符串参数。

数据库由 SilMock/DataStore/Sqlite/SqliteUtils.php 访问/管理。它有一个表,包含四个列 ...

  1. id = INTEGER PRIMARY KEY,
  2. type = TEXT,例如 "directory",
  3. class = TEXT,例如 "user" 或 "users_alias",
  4. data = TEXT

数据字段包含与GSD对象属性相关的键值对的json。数据是通过使用php json_encode函数准备的。

测试用例

有一个类帮助处理单元测试中的数据 ... SilMock\Google\Service\GoogleFixtures.php。其构造函数接受一个可选参数,用于指定SQLite数据库文件的路径和名称。它有两个方法 ...

  1. addFixtures($fixtures),期望一个包含3个元素的数组(类型、类、数据)。
  2. removeAllFixtures()

对Mock本身的单元测试

SilMock/tests文件夹包含了针对这个Mock的三个主要部分的phpunit测试(目录、GoogleFixtures、SqliteUtils)。这些应该有助于提供如何使用Mock的示例。

示例

在Mock和真实GSD之间切换

public static function useRealGoogle() {
    return  ( ! isset (\Yii::app()->params['use_real_google']) ||
              \Yii::app()->params['use_real_google']);
}

public static function getGoogleServiceDirectory($client) {
    if (self::useRealGoogle()) {
        return new Google\Service\Directory($client);
    }
    $db_path = null;
    if (isset(\Yii::app()->params['googleMockDbPath'])) {
        $db_path = \Yii::app()->params['googleMockDbPath'];
    }
    return new SilMock\Google\Service\Directory($client, $db_path);
}

管理用户

$dir = self::getGoogleServiceDirectory($client);
$google_user = new Google\Service\Directory\User();
$google_user = $dir->users->insert($google_user);
$google_user = $dir->users->get($usersEmail);

$google_user->suspended = true;
$google_user->suspensionReason = 'ADMIN';
$account = $dir->users->update($users_email, $google_user);

管理用户的别名

$dir = self::getGoogleServiceDirectory($client);
$google_alias = new Google\Service\Directory\Alias();
$google_alias->setAlias($alias);
$alias = $dir->users_aliases->insert($users_email, $google_alias);

$aliases = $dir->users_aliases->listUsersAliases($users_email);
$alias = $dir->users_aliases->delete($users_email, $alias);