123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- /*
- * SonarQube
- * Copyright (C) 2009-2023 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
- import { cloneDeep } from 'lodash';
- import { mockTask } from '../../helpers/mocks/tasks';
- import { GitHubConfigurationStatus, GitHubProvisioningStatus } from '../../types/provisioning';
- import { Task, TaskStatuses, TaskTypes } from '../../types/tasks';
- import {
- activateGithubProvisioning,
- activateScim,
- checkConfigurationValidity,
- deactivateGithubProvisioning,
- deactivateScim,
- fetchGithubProvisioningStatus,
- fetchIsScimEnabled,
- } from '../provisioning';
-
- jest.mock('../provisioning');
-
- const defaultConfigurationStatus: GitHubConfigurationStatus = {
- application: {
- jit: {
- status: GitHubProvisioningStatus.Success,
- },
- autoProvisioning: {
- status: GitHubProvisioningStatus.Success,
- },
- },
- installations: [
- {
- organization: 'testOrg',
- autoProvisioning: {
- status: GitHubProvisioningStatus.Success,
- },
- jit: {
- status: GitHubProvisioningStatus.Success,
- },
- },
- ],
- };
-
- export default class AuthenticationServiceMock {
- scimStatus: boolean;
- githubProvisioningStatus: boolean;
- githubConfigurationStatus: GitHubConfigurationStatus;
- tasks: Task[];
-
- constructor() {
- this.scimStatus = false;
- this.githubProvisioningStatus = false;
- this.githubConfigurationStatus = cloneDeep(defaultConfigurationStatus);
- this.tasks = [];
- jest.mocked(activateScim).mockImplementation(this.handleActivateScim);
- jest.mocked(deactivateScim).mockImplementation(this.handleDeactivateScim);
- jest.mocked(fetchIsScimEnabled).mockImplementation(this.handleFetchIsScimEnabled);
- jest
- .mocked(activateGithubProvisioning)
- .mockImplementation(this.handleActivateGithubProvisioning);
- jest
- .mocked(deactivateGithubProvisioning)
- .mockImplementation(this.handleDeactivateGithubProvisioning);
- jest
- .mocked(fetchGithubProvisioningStatus)
- .mockImplementation(this.handleFetchGithubProvisioningStatus);
- jest
- .mocked(checkConfigurationValidity)
- .mockImplementation(this.handleCheckConfigurationValidity);
- }
-
- addProvisioningTask = (overrides: Partial<Omit<Task, 'type'>> = {}) => {
- this.tasks.push(
- mockTask({
- id: Math.random().toString(),
- type: TaskTypes.GithubProvisioning,
- ...overrides,
- })
- );
- };
-
- setConfigurationValidity = (overrides: Partial<GitHubConfigurationStatus> = {}) => {
- this.githubConfigurationStatus = {
- ...this.githubConfigurationStatus,
- ...overrides,
- };
- };
-
- enableGithubProvisioning = () => {
- this.scimStatus = false;
- this.githubProvisioningStatus = true;
- };
-
- handleActivateScim = () => {
- this.scimStatus = true;
- return Promise.resolve();
- };
-
- handleDeactivateScim = () => {
- this.scimStatus = false;
- return Promise.resolve();
- };
-
- handleFetchIsScimEnabled = () => {
- return Promise.resolve(this.scimStatus);
- };
-
- handleActivateGithubProvisioning = () => {
- this.githubProvisioningStatus = true;
- return Promise.resolve();
- };
-
- handleDeactivateGithubProvisioning = () => {
- this.githubProvisioningStatus = false;
- return Promise.resolve();
- };
-
- handleFetchGithubProvisioningStatus = () => {
- if (!this.githubProvisioningStatus) {
- return Promise.resolve({ enabled: false });
- }
-
- const nextSync = this.tasks.find((t: Task) =>
- [TaskStatuses.InProgress, TaskStatuses.Pending].includes(t.status)
- );
- const lastSync = this.tasks.find(
- (t: Task) => ![TaskStatuses.InProgress, TaskStatuses.Pending].includes(t.status)
- );
-
- return Promise.resolve({
- enabled: true,
- nextSync: nextSync ? { status: nextSync.status } : undefined,
- lastSync: lastSync
- ? {
- status: lastSync.status,
- finishedAt: lastSync.executedAt,
- startedAt: lastSync.startedAt,
- executionTimeMs: lastSync.executionTimeMs,
- summary: lastSync.status === TaskStatuses.Success ? 'Test summary' : undefined,
- errorMessage: lastSync.errorMessage,
- warningMessage: lastSync.warnings?.join() ?? undefined,
- }
- : undefined,
- });
- };
-
- handleCheckConfigurationValidity = () => {
- return Promise.resolve(this.githubConfigurationStatus);
- };
-
- reset = () => {
- this.scimStatus = false;
- this.githubProvisioningStatus = false;
- this.githubConfigurationStatus = cloneDeep(defaultConfigurationStatus);
- this.tasks = [];
- };
- }
|