(core) add tests for site deletion

Summary: This tests site deletion with and without a plan.

Test Plan: adding tests

Reviewers: dsagal

Reviewed By: dsagal

Differential Revision: https://phab.getgrist.com/D3017
This commit is contained in:
Paul Fitzpatrick 2021-09-13 17:29:35 -04:00
parent 70160fe01c
commit 3e5a292cde
6 changed files with 20 additions and 6 deletions

View File

@ -157,7 +157,7 @@ export class BillingModelImpl extends Disposable implements BillingModel {
if (task === 'updatePlan') {
// Change plan from a paid plan to another paid plan or to the free plan.
if (!planId) { throw new Error('BillingPage _submit error: no plan selected'); }
await this._billingAPI.setSubscription(planId, formData.token);
await this._billingAPI.setSubscription(planId, {tokenId: formData.token});
} else if (task === 'addCard' || task === 'updateCard') {
// Add or update payment card.
if (!formData.token) { throw new Error('BillingPage _submit error: missing card info token'); }

View File

@ -121,7 +121,11 @@ export interface BillingAPI {
settings: IBillingOrgSettings): Promise<OrganizationWithoutAccessInfo>;
setCard(tokenId: string): Promise<void>;
removeCard(): Promise<void>;
setSubscription(planId: string, tokenId?: string): Promise<void>;
setSubscription(planId: string, options: {
tokenId?: string,
address?: IBillingAddress,
settings?: IBillingOrgSettings,
}): Promise<void>;
updateAddress(address?: IBillingAddress, settings?: IBillingOrgSettings): Promise<void>;
updateBillingManagers(delta: ManagerDelta): Promise<void>;
}
@ -178,10 +182,13 @@ export class BillingAPIImpl extends BaseAPI implements BillingAPI {
return parsed.data;
}
public async setSubscription(planId: string, tokenId?: string): Promise<void> {
public async setSubscription(planId: string, options: {
tokenId?: string,
address?: IBillingAddress,
}): Promise<void> {
await this.request(`${this._url}/api/billing/subscription`, {
method: 'POST',
body: JSON.stringify({ tokenId, planId })
body: JSON.stringify({ ...options, planId })
});
}

View File

@ -16,7 +16,7 @@ export class Doom {
/**
* Deletes a team site.
* - Remove billing (fails if no outstanding balance).
* - Remove billing (fails if there is an outstanding balance).
* - Delete workspaces.
* - Delete org.
*/

View File

@ -1331,7 +1331,7 @@ export class HomeDBManager extends EventEmitter {
...wsAcls, ...wsGroups, ...docs, ...docAcls, ...docGroups]);
// Delete billing account if this was the last org using it.
const billingAccount = await manager.findOne(BillingAccount, org.billingAccount,
const billingAccount = await manager.findOne(BillingAccount, org.billingAccountId,
{relations: ['orgs']});
if (billingAccount && billingAccount.orgs.length === 0) {
await manager.remove([billingAccount]);

View File

@ -264,6 +264,11 @@ export class FlexServer implements GristServer {
return this._dbManager;
}
public getStorageManager(): IDocStorageManager {
if (!this._storageManager) { throw new Error('no storage manager available'); }
return this._storageManager;
}
public addLogging() {
if (this._check('logging')) { return; }
if (process.env.GRIST_LOG_SKIP_HTTP) { return; }

View File

@ -6,6 +6,7 @@ import { HomeDBManager } from 'app/gen-server/lib/HomeDBManager';
import * as Comm from 'app/server/lib/Comm';
import { Hosts } from 'app/server/lib/extractOrg';
import { ICreate } from 'app/server/lib/ICreate';
import { IDocStorageManager } from 'app/server/lib/IDocStorageManager';
import { IPermitStore } from 'app/server/lib/Permit';
import { Sessions } from 'app/server/lib/Sessions';
import * as express from 'express';
@ -29,6 +30,7 @@ export interface GristServer {
getComm(): Comm;
getHosts(): Hosts;
getHomeDBManager(): HomeDBManager;
getStorageManager(): IDocStorageManager;
}
export interface GristLoginMiddleware {