@abyss-project/main 3.3.0 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/organization-external-identity.api.d.ts +3 -2
- package/dist/api/organization-external-identity.api.js +5 -1
- package/dist/api/organization-external-identity.api.js.map +1 -1
- package/dist/constants/catalog-plan-quotas.constants.js +16 -16
- package/dist/constants/catalog-plan-quotas.constants.js.map +1 -1
- package/dist/constants/enforcement-registry.constants.js +5 -7
- package/dist/constants/enforcement-registry.constants.js.map +1 -1
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.js +1 -0
- package/dist/constants/index.js.map +1 -1
- package/dist/constants/metric-price-scale.constants.js +18 -0
- package/dist/constants/metric-price-scale.constants.js.map +1 -1
- package/dist/constants/module-catalog.constants.d.ts +5 -0
- package/dist/constants/module-catalog.constants.js +59 -0
- package/dist/constants/module-catalog.constants.js.map +1 -1
- package/dist/constants/pack-catalog.constants.d.ts +17 -0
- package/dist/constants/pack-catalog.constants.js +61 -0
- package/dist/constants/pack-catalog.constants.js.map +1 -0
- package/dist/constants/public-plans.constants.js +48 -48
- package/dist/constants/public-plans.constants.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/types/enum/user-notification-content-type.enum.d.ts +19 -0
- package/dist/types/enum/user-notification-content-type.enum.js.map +1 -1
- package/dist/types/interface/api/index.d.ts +1 -0
- package/dist/types/interface/api/index.js +1 -0
- package/dist/types/interface/api/index.js.map +1 -1
- package/dist/types/interface/api/requests/organization-external-identity.request.d.ts +7 -0
- package/dist/types/interface/api/requests/organization-integration-webhook.request.d.ts +97 -0
- package/dist/types/interface/api/requests/organization-integration-webhook.request.js +21 -0
- package/dist/types/interface/api/requests/organization-integration-webhook.request.js.map +1 -1
- package/dist/types/interface/api/responses/index.d.ts +1 -0
- package/dist/types/interface/api/responses/index.js +1 -0
- package/dist/types/interface/api/responses/index.js.map +1 -1
- package/dist/types/interface/api/responses/organization-external-identity.response.d.ts +7 -0
- package/dist/types/interface/api/responses/organization-integration.admin.response.d.ts +5 -0
- package/dist/types/interface/api/responses/organization-integration.admin.response.js +3 -0
- package/dist/types/interface/api/responses/organization-integration.admin.response.js.map +1 -0
- package/dist/utils/pricing.utils.d.ts +2 -0
- package/dist/utils/pricing.utils.js +11 -1
- package/dist/utils/pricing.utils.js.map +1 -1
- package/package.json +15 -11
- package/dist/constants/tests/billing-catalog.constants.spec.d.ts +0 -1
- package/dist/constants/tests/billing-catalog.constants.spec.js +0 -330
- package/dist/constants/tests/billing-catalog.constants.spec.js.map +0 -1
- package/dist/constants/tests/catalog-plan-quotas.coherence.spec.d.ts +0 -1
- package/dist/constants/tests/catalog-plan-quotas.coherence.spec.js +0 -101
- package/dist/constants/tests/catalog-plan-quotas.coherence.spec.js.map +0 -1
- package/dist/constants/tests/metric-price-scale.constants.spec.d.ts +0 -1
- package/dist/constants/tests/metric-price-scale.constants.spec.js +0 -83
- package/dist/constants/tests/metric-price-scale.constants.spec.js.map +0 -1
- package/dist/constants/tests/module-calibration.constants.spec.d.ts +0 -1
- package/dist/constants/tests/module-calibration.constants.spec.js +0 -75
- package/dist/constants/tests/module-calibration.constants.spec.js.map +0 -1
- package/dist/constants/tests/module-catalog.constants.spec.d.ts +0 -1
- package/dist/constants/tests/module-catalog.constants.spec.js +0 -196
- package/dist/constants/tests/module-catalog.constants.spec.js.map +0 -1
- package/dist/constants/tests/overage-pricing-single-source.spec.d.ts +0 -1
- package/dist/constants/tests/overage-pricing-single-source.spec.js +0 -23
- package/dist/constants/tests/overage-pricing-single-source.spec.js.map +0 -1
- package/dist/constants/tests/password-policy.constants.spec.d.ts +0 -1
- package/dist/constants/tests/password-policy.constants.spec.js +0 -67
- package/dist/constants/tests/password-policy.constants.spec.js.map +0 -1
- package/dist/server/tests/after-commit-emit.util.spec.d.ts +0 -1
- package/dist/server/tests/after-commit-emit.util.spec.js +0 -99
- package/dist/server/tests/after-commit-emit.util.spec.js.map +0 -1
- package/dist/server/tests/encrypt-secret.util.spec.d.ts +0 -6
- package/dist/server/tests/encrypt-secret.util.spec.js +0 -148
- package/dist/server/tests/encrypt-secret.util.spec.js.map +0 -1
- package/dist/types/enum/tests/billing-addon-status.enum.spec.d.ts +0 -1
- package/dist/types/enum/tests/billing-addon-status.enum.spec.js +0 -66
- package/dist/types/enum/tests/billing-addon-status.enum.spec.js.map +0 -1
- package/dist/types/enum/tests/report-notification-type.enum.spec.d.ts +0 -1
- package/dist/types/enum/tests/report-notification-type.enum.spec.js +0 -18
- package/dist/types/enum/tests/report-notification-type.enum.spec.js.map +0 -1
- package/dist/types/enum/tests/user-notification-content-type.enum.spec.d.ts +0 -1
- package/dist/types/enum/tests/user-notification-content-type.enum.spec.js +0 -13
- package/dist/types/enum/tests/user-notification-content-type.enum.spec.js.map +0 -1
- package/dist/utils/tests/billing-deep-link.utils.spec.d.ts +0 -1
- package/dist/utils/tests/billing-deep-link.utils.spec.js +0 -91
- package/dist/utils/tests/billing-deep-link.utils.spec.js.map +0 -1
- package/dist/utils/tests/billing.utils.spec.d.ts +0 -1
- package/dist/utils/tests/billing.utils.spec.js +0 -81
- package/dist/utils/tests/billing.utils.spec.js.map +0 -1
- package/dist/utils/tests/invoice-amounts.utils.spec.d.ts +0 -1
- package/dist/utils/tests/invoice-amounts.utils.spec.js +0 -97
- package/dist/utils/tests/invoice-amounts.utils.spec.js.map +0 -1
- package/dist/utils/tests/module-lot-price.utils.spec.d.ts +0 -1
- package/dist/utils/tests/module-lot-price.utils.spec.js +0 -56
- package/dist/utils/tests/module-lot-price.utils.spec.js.map +0 -1
- package/dist/utils/tests/module-price.utils.spec.d.ts +0 -1
- package/dist/utils/tests/module-price.utils.spec.js +0 -79
- package/dist/utils/tests/module-price.utils.spec.js.map +0 -1
- package/dist/utils/tests/overage-negotiated-rate.utils.spec.d.ts +0 -1
- package/dist/utils/tests/overage-negotiated-rate.utils.spec.js +0 -59
- package/dist/utils/tests/overage-negotiated-rate.utils.spec.js.map +0 -1
- package/dist/utils/tests/plan-capacity.utils.spec.d.ts +0 -1
- package/dist/utils/tests/plan-capacity.utils.spec.js +0 -81
- package/dist/utils/tests/plan-capacity.utils.spec.js.map +0 -1
- package/dist/utils/tests/pricing.utils.spec.d.ts +0 -1
- package/dist/utils/tests/pricing.utils.spec.js +0 -219
- package/dist/utils/tests/pricing.utils.spec.js.map +0 -1
- package/dist/utils/tests/quota-ceiling.utils.spec.d.ts +0 -1
- package/dist/utils/tests/quota-ceiling.utils.spec.js +0 -119
- package/dist/utils/tests/quota-ceiling.utils.spec.js.map +0 -1
- package/dist/utils/tests/quote-overage-rate.spec.d.ts +0 -1
- package/dist/utils/tests/quote-overage-rate.spec.js +0 -39
- package/dist/utils/tests/quote-overage-rate.spec.js.map +0 -1
- package/dist/utils/tests/resolve-user.utils.spec.d.ts +0 -1
- package/dist/utils/tests/resolve-user.utils.spec.js +0 -98
- package/dist/utils/tests/resolve-user.utils.spec.js.map +0 -1
- package/dist/utils/tests/shifted-tiers.utils.spec.d.ts +0 -1
- package/dist/utils/tests/shifted-tiers.utils.spec.js +0 -176
- package/dist/utils/tests/shifted-tiers.utils.spec.js.map +0 -1
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const organization_billing_enum_1 = require("../../types/enum/organization-billing.enum");
|
|
4
|
-
const metric_price_scale_constants_1 = require("../metric-price-scale.constants");
|
|
5
|
-
const overage_base_rates_constants_1 = require("../overage-base-rates.constants");
|
|
6
|
-
const module_catalog_constants_1 = require("../module-catalog.constants");
|
|
7
|
-
const depuisEchelle = (metric) => {
|
|
8
|
-
const scale = metric_price_scale_constants_1.METRIC_PRICE_SCALE[metric];
|
|
9
|
-
return scale ? scale[0].nanocentsPerUnit * metric_price_scale_constants_1.OVERAGE_MULTIPLIER : null;
|
|
10
|
-
};
|
|
11
|
-
const depuisTarifPlat = (metric) => {
|
|
12
|
-
const plat = overage_base_rates_constants_1.DEFAULT_OVERAGE_BASE_RATES[metric];
|
|
13
|
-
return plat ? plat.rate * metric_price_scale_constants_1.NANOCENTS_PER_CENT : null;
|
|
14
|
-
};
|
|
15
|
-
const HAUSSES_CONNUES = [
|
|
16
|
-
{ metric: organization_billing_enum_1.BillingMetric.MEMBERS_COUNT, rapport: 1.5 },
|
|
17
|
-
{ metric: organization_billing_enum_1.BillingMetric.TOOLS_BOARD_COUNT, rapport: 2.32 },
|
|
18
|
-
{ metric: organization_billing_enum_1.BillingMetric.TOOLS_ATLAS_COUNT, rapport: 2.32 },
|
|
19
|
-
{ metric: organization_billing_enum_1.BillingMetric.TOOLS_DRAW_COUNT, rapport: 2.32 },
|
|
20
|
-
{ metric: organization_billing_enum_1.BillingMetric.TOOLS_RETROSPECTIVE_COUNT, rapport: 2.32 },
|
|
21
|
-
{ metric: organization_billing_enum_1.BillingMetric.BANKING_SELF_BANK_CONNECTIONS_COUNT, rapport: 1.73 },
|
|
22
|
-
];
|
|
23
|
-
describe('le calibrage des modules', () => {
|
|
24
|
-
it('AUCUNE métrique ne fait monter le dépassement sans figurer dans la table', () => {
|
|
25
|
-
const connues = new Set(HAUSSES_CONNUES.map((h) => h.metric));
|
|
26
|
-
const surprises = [];
|
|
27
|
-
for (const metric of Object.keys(metric_price_scale_constants_1.METRIC_PRICE_SCALE)) {
|
|
28
|
-
const echelle = depuisEchelle(metric);
|
|
29
|
-
const plat = depuisTarifPlat(metric);
|
|
30
|
-
if (echelle === null || plat === null || connues.has(metric)) {
|
|
31
|
-
continue;
|
|
32
|
-
}
|
|
33
|
-
if (echelle > plat) {
|
|
34
|
-
surprises.push(`${metric} : ${plat} → ${echelle} (×${(echelle / plat).toFixed(2)})`);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
expect(surprises).toStrictEqual([]);
|
|
38
|
-
});
|
|
39
|
-
it('les hausses connues n’ont pas bougé', () => {
|
|
40
|
-
for (const { metric, rapport } of HAUSSES_CONNUES) {
|
|
41
|
-
const echelle = depuisEchelle(metric);
|
|
42
|
-
const plat = depuisTarifPlat(metric);
|
|
43
|
-
expect(echelle).not.toBeNull();
|
|
44
|
-
expect(plat).not.toBeNull();
|
|
45
|
-
expect(echelle / plat).toBeCloseTo(rapport, 2);
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
it('toute métrique tarifée par un module a une ÉCHELLE ou un tarif plat', () => {
|
|
49
|
-
const orphelines = [];
|
|
50
|
-
for (const module of module_catalog_constants_1.BILLING_MODULES) {
|
|
51
|
-
if (module.kind !== module_catalog_constants_1.BillingModuleKind.QUANTITY) {
|
|
52
|
-
continue;
|
|
53
|
-
}
|
|
54
|
-
for (const grant of module.lotGrants) {
|
|
55
|
-
if (!metric_price_scale_constants_1.METRIC_PRICE_SCALE[grant.metric] && !overage_base_rates_constants_1.DEFAULT_OVERAGE_BASE_RATES[grant.metric]) {
|
|
56
|
-
orphelines.push(`${module.id} → ${grant.metric}`);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
expect(orphelines).toStrictEqual([]);
|
|
61
|
-
});
|
|
62
|
-
it('un lot de QUANTITÉ octroie toujours quelque chose sur sa propre échelle', () => {
|
|
63
|
-
for (const module of module_catalog_constants_1.BILLING_MODULES) {
|
|
64
|
-
if (module.kind !== module_catalog_constants_1.BillingModuleKind.QUANTITY) {
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
const surSonEchelle = module.lotGrants.some((g) => g.metric === module.scaleKey);
|
|
68
|
-
expect({ module: module.id, surSonEchelle }).toStrictEqual({
|
|
69
|
-
module: module.id,
|
|
70
|
-
surSonEchelle: true,
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
//# sourceMappingURL=module-calibration.constants.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"module-calibration.constants.spec.js","sourceRoot":"","sources":["../../../src/constants/tests/module-calibration.constants.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const organization_billing_enum_1 = require("../../types/enum/organization-billing.enum");
|
|
4
|
-
const metric_price_scale_constants_1 = require("../metric-price-scale.constants");
|
|
5
|
-
const module_catalog_constants_1 = require("../module-catalog.constants");
|
|
6
|
-
describe('le catalogue des modules', () => {
|
|
7
|
-
it('porte dix-huit modules, tous d’identifiant distinct', () => {
|
|
8
|
-
expect(module_catalog_constants_1.BILLING_MODULES).toHaveLength(18);
|
|
9
|
-
const ids = module_catalog_constants_1.BILLING_MODULES.map((m) => m.id);
|
|
10
|
-
expect(new Set(ids).size).toStrictEqual(ids.length);
|
|
11
|
-
});
|
|
12
|
-
it('n’expose aucun identifiant d’énumération orphelin', () => {
|
|
13
|
-
const declares = Object.values(module_catalog_constants_1.BillingModuleId).sort();
|
|
14
|
-
const presents = module_catalog_constants_1.BILLING_MODULES.map((m) => m.id).sort();
|
|
15
|
-
expect(presents).toStrictEqual(declares);
|
|
16
|
-
});
|
|
17
|
-
it('vend un siège aux organisations et à personne d’autre', () => {
|
|
18
|
-
const seats = (0, module_catalog_constants_1.moduleById)(module_catalog_constants_1.BillingModuleId.SEATS);
|
|
19
|
-
expect(seats?.scopes).toStrictEqual([organization_billing_enum_1.PlanAccountType.ORGANIZATION]);
|
|
20
|
-
});
|
|
21
|
-
it('déclare une échelle pour chaque module de quantité, et aucune pour un déblocage', () => {
|
|
22
|
-
for (const module of module_catalog_constants_1.BILLING_MODULES) {
|
|
23
|
-
if (module.kind === module_catalog_constants_1.BillingModuleKind.QUANTITY) {
|
|
24
|
-
expect(metric_price_scale_constants_1.METRIC_PRICE_SCALE[module.scaleKey]).toBeDefined();
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
expect(module.flatPriceCents).toBeGreaterThan(0);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
it('n’octroie que des métriques qui existent encore au catalogue', () => {
|
|
32
|
-
const connues = new Set(Object.values(organization_billing_enum_1.BillingMetric));
|
|
33
|
-
for (const module of module_catalog_constants_1.BILLING_MODULES) {
|
|
34
|
-
for (const grant of module.lotGrants) {
|
|
35
|
-
expect(connues.has(grant.metric)).toBe(true);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
describe('les deux invariants de couverture', () => {
|
|
41
|
-
it('toute métrique TARIFÉE est vendue par au moins un module', () => {
|
|
42
|
-
expect((0, module_catalog_constants_1.pricedMetricsSoldByNoModule)()).toStrictEqual([]);
|
|
43
|
-
});
|
|
44
|
-
it('toute métrique octroyée EN QUANTITÉ a un tarif de dépassement', () => {
|
|
45
|
-
expect((0, module_catalog_constants_1.quantityGrantsWithoutOverageRate)()).toStrictEqual([]);
|
|
46
|
-
});
|
|
47
|
-
it('couvre les métriques annoncées', () => {
|
|
48
|
-
expect((0, module_catalog_constants_1.grantedMetrics)().size).toBeGreaterThanOrEqual(20);
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
describe('moduleGrants — un lot se multiplie, un déblocage NON', () => {
|
|
52
|
-
it('multiplie chaque octroi d’un module de quantité par le nombre de lots', () => {
|
|
53
|
-
const extract = (0, module_catalog_constants_1.moduleById)(module_catalog_constants_1.BillingModuleId.EXTRACT);
|
|
54
|
-
expect(extract).toBeDefined();
|
|
55
|
-
expect((0, module_catalog_constants_1.moduleGrants)(extract, 3)).toStrictEqual([
|
|
56
|
-
{ metric: organization_billing_enum_1.BillingMetric.TOOLS_EXTRACTION, quantity: 1500 },
|
|
57
|
-
{ metric: organization_billing_enum_1.BillingMetric.TOOLS_EXTRACTION_OCR_PAGES, quantity: 6000 },
|
|
58
|
-
]);
|
|
59
|
-
});
|
|
60
|
-
it('NE multiplie PAS un déblocage — le point du test', () => {
|
|
61
|
-
const retention = (0, module_catalog_constants_1.moduleById)(module_catalog_constants_1.BillingModuleId.UNLOCK_MONITOR_RETENTION);
|
|
62
|
-
expect(retention).toBeDefined();
|
|
63
|
-
expect((0, module_catalog_constants_1.moduleGrants)(retention, 2)).toStrictEqual([
|
|
64
|
-
{ metric: organization_billing_enum_1.BillingMetric.RETENTION_DAYS, quantity: 90 },
|
|
65
|
-
]);
|
|
66
|
-
});
|
|
67
|
-
it('préserve l’illimité au lieu de le multiplier', () => {
|
|
68
|
-
const beam = (0, module_catalog_constants_1.moduleById)(module_catalog_constants_1.BillingModuleId.UNLOCK_BEAM_EXPIRY);
|
|
69
|
-
expect(beam).toBeDefined();
|
|
70
|
-
expect((0, module_catalog_constants_1.moduleGrants)(beam, 1)).toStrictEqual([
|
|
71
|
-
{ metric: organization_billing_enum_1.BillingMetric.TOOLS_BEAM_EXPIRY_MAX_DAYS, quantity: -1 },
|
|
72
|
-
]);
|
|
73
|
-
});
|
|
74
|
-
it('rend une liste vide pour une quantité nulle ou négative', () => {
|
|
75
|
-
const storage = (0, module_catalog_constants_1.moduleById)(module_catalog_constants_1.BillingModuleId.STORAGE);
|
|
76
|
-
expect(storage).toBeDefined();
|
|
77
|
-
expect((0, module_catalog_constants_1.moduleGrants)(storage, 0)).toStrictEqual([]);
|
|
78
|
-
expect((0, module_catalog_constants_1.moduleGrants)(storage, -5)).toStrictEqual([]);
|
|
79
|
-
});
|
|
80
|
-
it('tronque une quantité fractionnaire plutôt que d’octroyer un demi-lot', () => {
|
|
81
|
-
const storage = (0, module_catalog_constants_1.moduleById)(module_catalog_constants_1.BillingModuleId.STORAGE);
|
|
82
|
-
expect((0, module_catalog_constants_1.moduleGrants)(storage, 2.9)).toStrictEqual([
|
|
83
|
-
{ metric: organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, quantity: 2 },
|
|
84
|
-
{ metric: organization_billing_enum_1.BillingMetric.FILES_COUNT, quantity: 200 },
|
|
85
|
-
]);
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
describe('moduleById', () => {
|
|
89
|
-
it('trouve un module au catalogue', () => {
|
|
90
|
-
expect((0, module_catalog_constants_1.moduleById)(module_catalog_constants_1.BillingModuleId.TOOLS)?.label).toStrictEqual('AbyssTools — atelier');
|
|
91
|
-
});
|
|
92
|
-
it('rend undefined pour un identifiant hors catalogue', () => {
|
|
93
|
-
expect((0, module_catalog_constants_1.moduleById)('module-qui-n-existe-pas')).toBeUndefined();
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
describe('isAddonGranting — quel état octroie de la capacité', () => {
|
|
97
|
-
it('octroie sur ACTIVE et sur PENDING_REMOVAL, jamais sur SUSPENDED_BY_PLAN', () => {
|
|
98
|
-
expect((0, module_catalog_constants_1.isAddonGranting)(organization_billing_enum_1.BillingAddonStatus.ACTIVE)).toBe(true);
|
|
99
|
-
expect((0, module_catalog_constants_1.isAddonGranting)(organization_billing_enum_1.BillingAddonStatus.PENDING_REMOVAL)).toBe(true);
|
|
100
|
-
expect((0, module_catalog_constants_1.isAddonGranting)(organization_billing_enum_1.BillingAddonStatus.SUSPENDED_BY_PLAN)).toBe(false);
|
|
101
|
-
});
|
|
102
|
-
it('couvre TOUS les états déclarés — un état ajouté sans décision fait tomber ce test', () => {
|
|
103
|
-
const decides = [
|
|
104
|
-
organization_billing_enum_1.BillingAddonStatus.ACTIVE,
|
|
105
|
-
organization_billing_enum_1.BillingAddonStatus.PENDING_REMOVAL,
|
|
106
|
-
organization_billing_enum_1.BillingAddonStatus.SUSPENDED_BY_PLAN,
|
|
107
|
-
];
|
|
108
|
-
expect(Object.values(organization_billing_enum_1.BillingAddonStatus).sort()).toStrictEqual([...decides].sort());
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
describe('applyModuleGrantsToLimit — le repli des modules dans une limite', () => {
|
|
112
|
-
const ligne = (moduleId, quantity, status = organization_billing_enum_1.BillingAddonStatus.ACTIVE) => ({ moduleId, quantity, status });
|
|
113
|
-
it('additionne un module de QUANTITÉ à la limite du plan', () => {
|
|
114
|
-
expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 200, [
|
|
115
|
-
ligne(module_catalog_constants_1.BillingModuleId.STORAGE, 800),
|
|
116
|
-
])).toStrictEqual(1000);
|
|
117
|
-
});
|
|
118
|
-
it('ne retient, dans un lot de lignes, que celles qui touchent la métrique', () => {
|
|
119
|
-
const possede = [
|
|
120
|
-
ligne(module_catalog_constants_1.BillingModuleId.STORAGE, 800),
|
|
121
|
-
ligne(module_catalog_constants_1.BillingModuleId.CRYPT, 2),
|
|
122
|
-
ligne(module_catalog_constants_1.BillingModuleId.BEAM, 3),
|
|
123
|
-
];
|
|
124
|
-
expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 200, possede)).toStrictEqual(1000);
|
|
125
|
-
expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.CRYPT_ENCRYPTIONS_MONTH, 0, possede)).toStrictEqual(10000);
|
|
126
|
-
expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.TOOLS_BEAM_BANDWIDTH_MONTH, 0, possede)).toStrictEqual(600);
|
|
127
|
-
});
|
|
128
|
-
it('additionne bien deux lignes distinctes qui octroieraient la même métrique', () => {
|
|
129
|
-
expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 0, [
|
|
130
|
-
ligne(module_catalog_constants_1.BillingModuleId.STORAGE, 300),
|
|
131
|
-
ligne(module_catalog_constants_1.BillingModuleId.STORAGE, 200),
|
|
132
|
-
])).toStrictEqual(500);
|
|
133
|
-
});
|
|
134
|
-
it('prend le MAXIMUM pour un déblocage, au lieu de l’ajouter', () => {
|
|
135
|
-
expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.RETENTION_DAYS, 30, [
|
|
136
|
-
ligne(module_catalog_constants_1.BillingModuleId.UNLOCK_MONITOR_RETENTION, 1),
|
|
137
|
-
])).toStrictEqual(90);
|
|
138
|
-
});
|
|
139
|
-
it('ne BAISSE jamais une limite déjà supérieure au déblocage', () => {
|
|
140
|
-
expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.RETENTION_DAYS, 180, [
|
|
141
|
-
ligne(module_catalog_constants_1.BillingModuleId.UNLOCK_MONITOR_RETENTION, 1),
|
|
142
|
-
])).toStrictEqual(180);
|
|
143
|
-
});
|
|
144
|
-
it('laisse l’illimité illimité quand la BASE l’est déjà', () => {
|
|
145
|
-
expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, -1, [
|
|
146
|
-
ligne(module_catalog_constants_1.BillingModuleId.STORAGE, 500),
|
|
147
|
-
])).toStrictEqual(-1);
|
|
148
|
-
});
|
|
149
|
-
it('rend illimité quand le DÉBLOCAGE l’est, quelle que soit la base', () => {
|
|
150
|
-
expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.TOOLS_BEAM_EXPIRY_MAX_DAYS, 7, [
|
|
151
|
-
ligne(module_catalog_constants_1.BillingModuleId.UNLOCK_BEAM_EXPIRY, 1),
|
|
152
|
-
])).toStrictEqual(-1);
|
|
153
|
-
});
|
|
154
|
-
it('IGNORE une ligne suspendue — sinon la capacité devient gratuite', () => {
|
|
155
|
-
expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.RETENTION_DAYS, 30, [
|
|
156
|
-
ligne(module_catalog_constants_1.BillingModuleId.UNLOCK_MONITOR_RETENTION, 1, organization_billing_enum_1.BillingAddonStatus.SUSPENDED_BY_PLAN),
|
|
157
|
-
])).toStrictEqual(30);
|
|
158
|
-
});
|
|
159
|
-
it('COMPTE une ligne en retrait programmé — elle est facturée jusqu’à l’échéance', () => {
|
|
160
|
-
expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 200, [
|
|
161
|
-
ligne(module_catalog_constants_1.BillingModuleId.STORAGE, 800, organization_billing_enum_1.BillingAddonStatus.PENDING_REMOVAL),
|
|
162
|
-
])).toStrictEqual(1000);
|
|
163
|
-
});
|
|
164
|
-
it('ignore une ligne dont le module a quitté le catalogue, sans échouer', () => {
|
|
165
|
-
expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 200, [
|
|
166
|
-
ligne('module-disparu', 5),
|
|
167
|
-
])).toStrictEqual(200);
|
|
168
|
-
});
|
|
169
|
-
it('n’octroie rien pour une métrique qu’aucun module possédé ne touche', () => {
|
|
170
|
-
expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.CRYPT_ENCRYPTIONS_MONTH, 500, [
|
|
171
|
-
ligne(module_catalog_constants_1.BillingModuleId.STORAGE, 800),
|
|
172
|
-
])).toStrictEqual(500);
|
|
173
|
-
});
|
|
174
|
-
it('octroie TOUTES les métriques d’un lot, pas seulement celle qui le tarife', () => {
|
|
175
|
-
const lignes = [ligne(module_catalog_constants_1.BillingModuleId.TOOLS, 2)];
|
|
176
|
-
expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.TOOLS_BOARD_COUNT, 0, lignes)).toStrictEqual(10);
|
|
177
|
-
expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.TOOLS_ATLAS_COUNT, 0, lignes)).toStrictEqual(10);
|
|
178
|
-
expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.TOOLS_SHORT_LINK_COUNT, 0, lignes)).toStrictEqual(40);
|
|
179
|
-
expect((0, module_catalog_constants_1.applyModuleGrantsToLimit)(organization_billing_enum_1.BillingMetric.TOOLS_SHORTLINK_RESOLUTIONS_MONTH, 0, lignes)).toStrictEqual(100000);
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
|
-
describe('l’invariant qui rend « somme ou maximum » décidable', () => {
|
|
183
|
-
it('aucune métrique n’est octroyée à la fois par un QUANTITY et par un UNLOCK', () => {
|
|
184
|
-
const parQuantite = new Set();
|
|
185
|
-
const parDeblocage = new Set();
|
|
186
|
-
for (const module of module_catalog_constants_1.BILLING_MODULES) {
|
|
187
|
-
const cible = module.kind === module_catalog_constants_1.BillingModuleKind.QUANTITY ? parQuantite : parDeblocage;
|
|
188
|
-
for (const grant of module.lotGrants) {
|
|
189
|
-
cible.add(grant.metric);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
const communes = [...parQuantite].filter((m) => parDeblocage.has(m));
|
|
193
|
-
expect(communes).toStrictEqual([]);
|
|
194
|
-
});
|
|
195
|
-
});
|
|
196
|
-
//# sourceMappingURL=module-catalog.constants.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"module-catalog.constants.spec.js","sourceRoot":"","sources":["../../../src/constants/tests/module-catalog.constants.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const organization_billing_enum_1 = require("../../types/enum/organization-billing.enum");
|
|
4
|
-
const billing_catalog_constants_1 = require("../billing-catalog.constants");
|
|
5
|
-
const pricing_utils_1 = require("../../utils/pricing.utils");
|
|
6
|
-
const annonceEnNanocents = (metric) => {
|
|
7
|
-
const [entry] = (0, billing_catalog_constants_1.buildCatalogOveragePricing)([{ service: organization_billing_enum_1.BillingService.ABYSS_PLATFORM, metric }]);
|
|
8
|
-
return entry ? entry.nanocentsPerUnit : null;
|
|
9
|
-
};
|
|
10
|
-
describe('le tarif de dépassement annoncé est celui qui est facturé', () => {
|
|
11
|
-
const metriques = [...billing_catalog_constants_1.METRIC_IS_OVERAGE_ELIGIBLE].filter((m) => (0, pricing_utils_1.resolveOverageNanocentsPerUnit)(m) !== null);
|
|
12
|
-
it('couvre bien les métriques tarifées et éligibles', () => {
|
|
13
|
-
expect(metriques.length).toBeGreaterThan(0);
|
|
14
|
-
});
|
|
15
|
-
it.each(metriques)('%s : annoncé === facturé', (metric) => {
|
|
16
|
-
const annonce = annonceEnNanocents(metric);
|
|
17
|
-
const facture = (0, pricing_utils_1.resolveOverageNanocentsPerUnit)(metric);
|
|
18
|
-
expect(annonce).not.toBeNull();
|
|
19
|
-
expect(facture).not.toBeNull();
|
|
20
|
-
expect(annonce).toBe(facture);
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
//# sourceMappingURL=overage-pricing-single-source.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"overage-pricing-single-source.spec.js","sourceRoot":"","sources":["../../../src/constants/tests/overage-pricing-single-source.spec.ts"],"names":[],"mappings":";;AA4BA,0FAA2F;AAC3F,4EAGsC;AACtC,6DAA2E;AAQ3E,MAAM,kBAAkB,GAAG,CAAC,MAAqB,EAAiB,EAAE;IAClE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAA,sDAA0B,EAAC,CAAC,EAAE,OAAO,EAAE,0CAAc,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACjG,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC,CAAC;AAEF,QAAQ,CAAC,2DAA2D,EAAE,GAAG,EAAE;IACzE,MAAM,SAAS,GAAG,CAAC,GAAG,sDAA0B,CAAC,CAAC,MAAM,CACtD,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,8CAA8B,EAAC,CAAC,CAAC,KAAK,IAAI,CAClD,CAAC;IAEF,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,0BAA0B,EAAE,CAAC,MAAM,EAAE,EAAE;QACxD,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAA,8CAA8B,EAAC,MAAM,CAAC,CAAC;QAEvD,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const types_1 = require("../../types");
|
|
4
|
-
const password_policy_constants_1 = require("../password-policy.constants");
|
|
5
|
-
describe('PASSWORD_POLICY', () => {
|
|
6
|
-
it('exposes the account floor and the legacy login floor separately', () => {
|
|
7
|
-
expect(password_policy_constants_1.PASSWORD_POLICY.minLength).toBe(10);
|
|
8
|
-
expect(password_policy_constants_1.PASSWORD_POLICY.maxLength).toBe(64);
|
|
9
|
-
expect(password_policy_constants_1.PASSWORD_POLICY.legacyLoginMinLength).toBe(6);
|
|
10
|
-
expect(password_policy_constants_1.PASSWORD_POLICY.legacyLoginMinLength).toBeLessThan(password_policy_constants_1.PASSWORD_POLICY.minLength);
|
|
11
|
-
});
|
|
12
|
-
});
|
|
13
|
-
describe('validateAccountPassword', () => {
|
|
14
|
-
it('accepts a passphrase at the floor', () => {
|
|
15
|
-
expect((0, password_policy_constants_1.validateAccountPassword)('a'.repeat(password_policy_constants_1.PASSWORD_POLICY.minLength))).toBeNull();
|
|
16
|
-
});
|
|
17
|
-
it('rejects one character below the floor', () => {
|
|
18
|
-
expect((0, password_policy_constants_1.validateAccountPassword)('a'.repeat(password_policy_constants_1.PASSWORD_POLICY.minLength - 1))).toBe(types_1.PasswordPolicyViolation.tooShort);
|
|
19
|
-
});
|
|
20
|
-
it('rejects one character above the ceiling', () => {
|
|
21
|
-
expect((0, password_policy_constants_1.validateAccountPassword)('a'.repeat(password_policy_constants_1.PASSWORD_POLICY.maxLength + 1))).toBe(types_1.PasswordPolicyViolation.tooLong);
|
|
22
|
-
});
|
|
23
|
-
it('accepts exactly the ceiling', () => {
|
|
24
|
-
expect((0, password_policy_constants_1.validateAccountPassword)('a'.repeat(password_policy_constants_1.PASSWORD_POLICY.maxLength))).toBeNull();
|
|
25
|
-
});
|
|
26
|
-
it('rejects a long-but-common password', () => {
|
|
27
|
-
expect((0, password_policy_constants_1.validateAccountPassword)('motdepasse123')).toBe(types_1.PasswordPolicyViolation.tooCommon);
|
|
28
|
-
});
|
|
29
|
-
it('imposes no composition rule — a plain long passphrase passes', () => {
|
|
30
|
-
expect((0, password_policy_constants_1.validateAccountPassword)('correcte agrafe batterie cheval')).toBeNull();
|
|
31
|
-
});
|
|
32
|
-
it('treats an empty password as too short, never as valid', () => {
|
|
33
|
-
expect((0, password_policy_constants_1.validateAccountPassword)('')).toBe(types_1.PasswordPolicyViolation.tooShort);
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
describe('isCommonPassword', () => {
|
|
37
|
-
it('matches regardless of case and surrounding whitespace', () => {
|
|
38
|
-
expect((0, password_policy_constants_1.isCommonPassword)(' MotDePasse123 ')).toBe(true);
|
|
39
|
-
});
|
|
40
|
-
it('does not match a passphrase that merely contains a common word', () => {
|
|
41
|
-
expect((0, password_policy_constants_1.isCommonPassword)('mon azerty préféré est bleu')).toBe(false);
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
describe('getPasswordStrength', () => {
|
|
45
|
-
it('scores a short password as very weak', () => {
|
|
46
|
-
expect((0, password_policy_constants_1.getPasswordStrength)('abc')).toBe(types_1.PasswordStrength.veryWeak);
|
|
47
|
-
});
|
|
48
|
-
it('scores a common password as very weak whatever its length', () => {
|
|
49
|
-
expect((0, password_policy_constants_1.getPasswordStrength)('motdepasse123')).toBe(types_1.PasswordStrength.veryWeak);
|
|
50
|
-
});
|
|
51
|
-
it('scores a long varied passphrase as excellent', () => {
|
|
52
|
-
expect((0, password_policy_constants_1.getPasswordStrength)('Yacht-Brumeux-42-Septembre')).toBe(types_1.PasswordStrength.excellent);
|
|
53
|
-
});
|
|
54
|
-
it('rewards length over composition', () => {
|
|
55
|
-
const longPlain = (0, password_policy_constants_1.getPasswordStrength)('agrafeuse bleue du lundi matin');
|
|
56
|
-
const shortComplex = (0, password_policy_constants_1.getPasswordStrength)('A1!bC2@d');
|
|
57
|
-
expect(longPlain).toBeGreaterThan(shortComplex);
|
|
58
|
-
});
|
|
59
|
-
it('never returns a value outside the enum range', () => {
|
|
60
|
-
for (const candidate of ['', 'a', 'a'.repeat(200), 'Xy9!'.repeat(30)]) {
|
|
61
|
-
const score = (0, password_policy_constants_1.getPasswordStrength)(candidate);
|
|
62
|
-
expect(score).toBeGreaterThanOrEqual(types_1.PasswordStrength.veryWeak);
|
|
63
|
-
expect(score).toBeLessThanOrEqual(types_1.PasswordStrength.excellent);
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
//# sourceMappingURL=password-policy.constants.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"password-policy.constants.spec.js","sourceRoot":"","sources":["../../../src/constants/tests/password-policy.constants.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const after_commit_emit_util_1 = require("../after-commit-emit.util");
|
|
4
|
-
class FakeTransaction {
|
|
5
|
-
constructor(commitFails = false) {
|
|
6
|
-
this.commitFails = commitFails;
|
|
7
|
-
this.hooks = [];
|
|
8
|
-
}
|
|
9
|
-
afterCommit(callback) {
|
|
10
|
-
this.hooks.push(callback);
|
|
11
|
-
}
|
|
12
|
-
async commit() {
|
|
13
|
-
try {
|
|
14
|
-
if (this.commitFails) {
|
|
15
|
-
throw new Error('COMMIT refusé par la base');
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
finally {
|
|
19
|
-
for (const hook of this.hooks) {
|
|
20
|
-
hook();
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
describe('afterCommitEmit', () => {
|
|
26
|
-
it('exécute l’effet quand le commit réussit', async () => {
|
|
27
|
-
const transaction = new FakeTransaction();
|
|
28
|
-
const effect = jest.fn();
|
|
29
|
-
(0, after_commit_emit_util_1.afterCommitEmit)(transaction, effect);
|
|
30
|
-
expect(effect).not.toHaveBeenCalled();
|
|
31
|
-
await transaction.commit();
|
|
32
|
-
expect(effect).toHaveBeenCalledTimes(1);
|
|
33
|
-
});
|
|
34
|
-
it('n’exécute RIEN quand le COMMIT échoue', async () => {
|
|
35
|
-
const transaction = new FakeTransaction(true);
|
|
36
|
-
const effect = jest.fn();
|
|
37
|
-
(0, after_commit_emit_util_1.afterCommitEmit)(transaction, effect);
|
|
38
|
-
await expect(transaction.commit()).rejects.toThrow('COMMIT refusé par la base');
|
|
39
|
-
expect(effect).not.toHaveBeenCalled();
|
|
40
|
-
});
|
|
41
|
-
it('n’exécute rien tant que le commit n’a pas eu lieu', async () => {
|
|
42
|
-
const transaction = new FakeTransaction();
|
|
43
|
-
const effect = jest.fn();
|
|
44
|
-
(0, after_commit_emit_util_1.afterCommitEmit)(transaction, effect);
|
|
45
|
-
expect(effect).not.toHaveBeenCalled();
|
|
46
|
-
});
|
|
47
|
-
it('exécute tous les effets d’une même transaction, dans l’ordre', async () => {
|
|
48
|
-
const transaction = new FakeTransaction();
|
|
49
|
-
const order = [];
|
|
50
|
-
(0, after_commit_emit_util_1.afterCommitEmit)(transaction, () => order.push(1));
|
|
51
|
-
(0, after_commit_emit_util_1.afterCommitEmit)(transaction, () => order.push(2));
|
|
52
|
-
(0, after_commit_emit_util_1.afterCommitEmit)(transaction, () => order.push(3));
|
|
53
|
-
await transaction.commit();
|
|
54
|
-
expect(order).toEqual([1, 2, 3]);
|
|
55
|
-
});
|
|
56
|
-
it('jette TOUS les effets quand le commit échoue, pas seulement le premier', async () => {
|
|
57
|
-
const transaction = new FakeTransaction(true);
|
|
58
|
-
const first = jest.fn();
|
|
59
|
-
const second = jest.fn();
|
|
60
|
-
(0, after_commit_emit_util_1.afterCommitEmit)(transaction, first);
|
|
61
|
-
(0, after_commit_emit_util_1.afterCommitEmit)(transaction, second);
|
|
62
|
-
await expect(transaction.commit()).rejects.toThrow();
|
|
63
|
-
expect(first).not.toHaveBeenCalled();
|
|
64
|
-
expect(second).not.toHaveBeenCalled();
|
|
65
|
-
});
|
|
66
|
-
it('exécute immédiatement quand il n’y a pas de transaction', () => {
|
|
67
|
-
const effect = jest.fn();
|
|
68
|
-
(0, after_commit_emit_util_1.afterCommitEmit)(null, effect);
|
|
69
|
-
expect(effect).toHaveBeenCalledTimes(1);
|
|
70
|
-
});
|
|
71
|
-
it('signale une erreur de l’effet sans la propager', async () => {
|
|
72
|
-
const transaction = new FakeTransaction();
|
|
73
|
-
const onError = jest.fn();
|
|
74
|
-
(0, after_commit_emit_util_1.afterCommitEmit)(transaction, () => {
|
|
75
|
-
throw new Error('émission ratée');
|
|
76
|
-
}, onError);
|
|
77
|
-
await expect(transaction.commit()).resolves.toBeUndefined();
|
|
78
|
-
expect(onError).toHaveBeenCalledTimes(1);
|
|
79
|
-
});
|
|
80
|
-
it('signale un rejet asynchrone de l’effet sans le propager', async () => {
|
|
81
|
-
const transaction = new FakeTransaction();
|
|
82
|
-
const onError = jest.fn();
|
|
83
|
-
(0, after_commit_emit_util_1.afterCommitEmit)(transaction, async () => Promise.reject(new Error('réseau')), onError);
|
|
84
|
-
await transaction.commit();
|
|
85
|
-
await new Promise((resolve) => setImmediate(resolve));
|
|
86
|
-
expect(onError).toHaveBeenCalledTimes(1);
|
|
87
|
-
});
|
|
88
|
-
it('reste compatible avec un objet sans `commit` observable', async () => {
|
|
89
|
-
const hooks = [];
|
|
90
|
-
const partial = {
|
|
91
|
-
afterCommit: (callback) => hooks.push(callback),
|
|
92
|
-
};
|
|
93
|
-
const effect = jest.fn();
|
|
94
|
-
(0, after_commit_emit_util_1.afterCommitEmit)(partial, effect);
|
|
95
|
-
hooks.forEach((hook) => hook());
|
|
96
|
-
expect(effect).toHaveBeenCalledTimes(1);
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
//# sourceMappingURL=after-commit-emit.util.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"after-commit-emit.util.spec.js","sourceRoot":"","sources":["../../../src/server/tests/after-commit-emit.util.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
declare const VALID_KEY = "XUY5cvb7nmC/1mJPYaxLXR3K14anIKaN3AitJx3Ux/s=";
|
|
2
|
-
type EncryptModule = typeof import('../encrypt-secret.util');
|
|
3
|
-
declare const loadModule: (key: string | undefined) => EncryptModule;
|
|
4
|
-
declare const tamperCiphertext: (payload: string) => string;
|
|
5
|
-
declare const tamperTag: (payload: string) => string;
|
|
6
|
-
declare const callWithKey: (key: string | undefined, fn: (mod: EncryptModule) => void) => void;
|