@abyss-project/main 2.3.0 → 3.1.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.
Files changed (81) hide show
  1. package/dist/types/enum/email-type.enum.d.ts +2 -0
  2. package/dist/types/enum/email-type.enum.js +2 -0
  3. package/dist/types/enum/email-type.enum.js.map +1 -1
  4. package/dist/types/enum/user-notification-category.enum.js +2 -0
  5. package/dist/types/enum/user-notification-category.enum.js.map +1 -1
  6. package/dist/types/enum/user-notification-content-type.enum.d.ts +23 -1
  7. package/dist/types/enum/user-notification-content-type.enum.js +3 -1
  8. package/dist/types/enum/user-notification-content-type.enum.js.map +1 -1
  9. package/package.json +15 -11
  10. package/dist/constants/tests/billing-catalog.constants.spec.d.ts +0 -1
  11. package/dist/constants/tests/billing-catalog.constants.spec.js +0 -334
  12. package/dist/constants/tests/billing-catalog.constants.spec.js.map +0 -1
  13. package/dist/constants/tests/catalog-plan-quotas.coherence.spec.d.ts +0 -1
  14. package/dist/constants/tests/catalog-plan-quotas.coherence.spec.js +0 -101
  15. package/dist/constants/tests/catalog-plan-quotas.coherence.spec.js.map +0 -1
  16. package/dist/constants/tests/metric-price-scale.constants.spec.d.ts +0 -1
  17. package/dist/constants/tests/metric-price-scale.constants.spec.js +0 -83
  18. package/dist/constants/tests/metric-price-scale.constants.spec.js.map +0 -1
  19. package/dist/constants/tests/module-calibration.constants.spec.d.ts +0 -1
  20. package/dist/constants/tests/module-calibration.constants.spec.js +0 -75
  21. package/dist/constants/tests/module-calibration.constants.spec.js.map +0 -1
  22. package/dist/constants/tests/module-catalog.constants.spec.d.ts +0 -1
  23. package/dist/constants/tests/module-catalog.constants.spec.js +0 -196
  24. package/dist/constants/tests/module-catalog.constants.spec.js.map +0 -1
  25. package/dist/constants/tests/overage-pricing-single-source.spec.d.ts +0 -1
  26. package/dist/constants/tests/overage-pricing-single-source.spec.js +0 -23
  27. package/dist/constants/tests/overage-pricing-single-source.spec.js.map +0 -1
  28. package/dist/constants/tests/password-policy.constants.spec.d.ts +0 -1
  29. package/dist/constants/tests/password-policy.constants.spec.js +0 -67
  30. package/dist/constants/tests/password-policy.constants.spec.js.map +0 -1
  31. package/dist/server/tests/after-commit-emit.util.spec.d.ts +0 -1
  32. package/dist/server/tests/after-commit-emit.util.spec.js +0 -99
  33. package/dist/server/tests/after-commit-emit.util.spec.js.map +0 -1
  34. package/dist/server/tests/encrypt-secret.util.spec.d.ts +0 -6
  35. package/dist/server/tests/encrypt-secret.util.spec.js +0 -148
  36. package/dist/server/tests/encrypt-secret.util.spec.js.map +0 -1
  37. package/dist/types/enum/tests/billing-addon-status.enum.spec.d.ts +0 -1
  38. package/dist/types/enum/tests/billing-addon-status.enum.spec.js +0 -66
  39. package/dist/types/enum/tests/billing-addon-status.enum.spec.js.map +0 -1
  40. package/dist/types/enum/tests/report-notification-type.enum.spec.d.ts +0 -1
  41. package/dist/types/enum/tests/report-notification-type.enum.spec.js +0 -18
  42. package/dist/types/enum/tests/report-notification-type.enum.spec.js.map +0 -1
  43. package/dist/types/enum/tests/user-notification-content-type.enum.spec.d.ts +0 -1
  44. package/dist/types/enum/tests/user-notification-content-type.enum.spec.js +0 -13
  45. package/dist/types/enum/tests/user-notification-content-type.enum.spec.js.map +0 -1
  46. package/dist/utils/tests/billing-deep-link.utils.spec.d.ts +0 -1
  47. package/dist/utils/tests/billing-deep-link.utils.spec.js +0 -91
  48. package/dist/utils/tests/billing-deep-link.utils.spec.js.map +0 -1
  49. package/dist/utils/tests/billing.utils.spec.d.ts +0 -1
  50. package/dist/utils/tests/billing.utils.spec.js +0 -81
  51. package/dist/utils/tests/billing.utils.spec.js.map +0 -1
  52. package/dist/utils/tests/invoice-amounts.utils.spec.d.ts +0 -1
  53. package/dist/utils/tests/invoice-amounts.utils.spec.js +0 -97
  54. package/dist/utils/tests/invoice-amounts.utils.spec.js.map +0 -1
  55. package/dist/utils/tests/module-lot-price.utils.spec.d.ts +0 -1
  56. package/dist/utils/tests/module-lot-price.utils.spec.js +0 -56
  57. package/dist/utils/tests/module-lot-price.utils.spec.js.map +0 -1
  58. package/dist/utils/tests/module-price.utils.spec.d.ts +0 -1
  59. package/dist/utils/tests/module-price.utils.spec.js +0 -79
  60. package/dist/utils/tests/module-price.utils.spec.js.map +0 -1
  61. package/dist/utils/tests/overage-negotiated-rate.utils.spec.d.ts +0 -1
  62. package/dist/utils/tests/overage-negotiated-rate.utils.spec.js +0 -59
  63. package/dist/utils/tests/overage-negotiated-rate.utils.spec.js.map +0 -1
  64. package/dist/utils/tests/plan-capacity.utils.spec.d.ts +0 -1
  65. package/dist/utils/tests/plan-capacity.utils.spec.js +0 -81
  66. package/dist/utils/tests/plan-capacity.utils.spec.js.map +0 -1
  67. package/dist/utils/tests/pricing.utils.spec.d.ts +0 -1
  68. package/dist/utils/tests/pricing.utils.spec.js +0 -219
  69. package/dist/utils/tests/pricing.utils.spec.js.map +0 -1
  70. package/dist/utils/tests/quota-ceiling.utils.spec.d.ts +0 -1
  71. package/dist/utils/tests/quota-ceiling.utils.spec.js +0 -119
  72. package/dist/utils/tests/quota-ceiling.utils.spec.js.map +0 -1
  73. package/dist/utils/tests/quote-overage-rate.spec.d.ts +0 -1
  74. package/dist/utils/tests/quote-overage-rate.spec.js +0 -39
  75. package/dist/utils/tests/quote-overage-rate.spec.js.map +0 -1
  76. package/dist/utils/tests/resolve-user.utils.spec.d.ts +0 -1
  77. package/dist/utils/tests/resolve-user.utils.spec.js +0 -98
  78. package/dist/utils/tests/resolve-user.utils.spec.js.map +0 -1
  79. package/dist/utils/tests/shifted-tiers.utils.spec.d.ts +0 -1
  80. package/dist/utils/tests/shifted-tiers.utils.spec.js +0 -176
  81. package/dist/utils/tests/shifted-tiers.utils.spec.js.map +0 -1
@@ -1,101 +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 catalog_plan_quotas_constants_1 = require("../catalog-plan-quotas.constants");
5
- describe('la grille de catalogue — les six règles', () => {
6
- it('N’A AUCUNE INCOHÉRENCE, toutes portées confondues', () => {
7
- const fautes = [];
8
- for (const [accountType, parCle] of Object.entries(catalog_plan_quotas_constants_1.CATALOG_PLAN_QUOTAS)) {
9
- const problemes = (0, catalog_plan_quotas_constants_1.planQuotaCoherenceIssues)(accountType, parCle);
10
- fautes.push(...problemes);
11
- }
12
- expect(fautes).toStrictEqual([]);
13
- });
14
- });
15
- const q = (metric, limit, service = organization_billing_enum_1.BillingService.ABYSS_PLATFORM) => ({
16
- service,
17
- metric,
18
- limit,
19
- sizePerUnit: null,
20
- unit: '',
21
- });
22
- describe('règle 1 — aucun palier régressif', () => {
23
- it('REFUSE un palier payant supérieur qui donne MOINS', () => {
24
- const problemes = (0, catalog_plan_quotas_constants_1.planQuotaCoherenceIssues)(organization_billing_enum_1.PlanAccountType.USER, {
25
- starter: [q(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 500)],
26
- pro: [q(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 200)],
27
- });
28
- expect(problemes.join(' ')).toContain('régressif');
29
- });
30
- it('ACCEPTE l’illimité au palier supérieur', () => {
31
- const problemes = (0, catalog_plan_quotas_constants_1.planQuotaCoherenceIssues)(organization_billing_enum_1.PlanAccountType.USER, {
32
- starter: [q(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 500)],
33
- pro: [q(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, -1)],
34
- });
35
- expect(problemes).toStrictEqual([]);
36
- });
37
- it('N’EXAMINE PAS le palier gratuit', () => {
38
- const problemes = (0, catalog_plan_quotas_constants_1.planQuotaCoherenceIssues)(organization_billing_enum_1.PlanAccountType.USER, {
39
- freemium: [q(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 9999)],
40
- starter: [q(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 200)],
41
- pro: [q(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 1000)],
42
- });
43
- expect(problemes).toStrictEqual([]);
44
- });
45
- });
46
- describe('règle 2 — aucune métrique présente sur certains paliers seulement', () => {
47
- it('REFUSE une métrique servie en Starter et oubliée en Pro', () => {
48
- const problemes = (0, catalog_plan_quotas_constants_1.planQuotaCoherenceIssues)(organization_billing_enum_1.PlanAccountType.USER, {
49
- starter: [q(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 200), q(organization_billing_enum_1.BillingMetric.MEMBERS_COUNT, 5)],
50
- pro: [q(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 1000)],
51
- });
52
- expect(problemes.join(' ')).toContain('MEMBERS_COUNT');
53
- });
54
- });
55
- describe('règle 3 — chaque couple service / type de compte est déclaré', () => {
56
- it('REFUSE une métrique dont le service n’est pas offert à cette portée', () => {
57
- const problemes = (0, catalog_plan_quotas_constants_1.planQuotaCoherenceIssues)(organization_billing_enum_1.PlanAccountType.USER, {
58
- starter: [q(organization_billing_enum_1.BillingMetric.LOG_EVENTS, 1000, organization_billing_enum_1.BillingService.ABYSS_MONITOR)],
59
- pro: [q(organization_billing_enum_1.BillingMetric.LOG_EVENTS, 2000, organization_billing_enum_1.BillingService.ABYSS_MONITOR)],
60
- });
61
- expect(problemes.join(' ')).toContain('ABYSS_MONITOR');
62
- });
63
- });
64
- describe('règle 5 — les ratios couplés restent dans un facteur deux entre paliers PAYANTS', () => {
65
- it('REFUSE un rapport qui double d’un palier payant à l’autre', () => {
66
- const problemes = (0, catalog_plan_quotas_constants_1.planQuotaCoherenceIssues)(organization_billing_enum_1.PlanAccountType.ORGANIZATION, {
67
- starter: [
68
- q(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 500),
69
- q(organization_billing_enum_1.BillingMetric.BANDWIDTH_GB, 100, organization_billing_enum_1.BillingService.ABYSS_STORAGE),
70
- ],
71
- pro: [
72
- q(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 5000),
73
- q(organization_billing_enum_1.BillingMetric.BANDWIDTH_GB, 100, organization_billing_enum_1.BillingService.ABYSS_STORAGE),
74
- ],
75
- });
76
- expect(problemes.join(' ')).toContain('rapport');
77
- });
78
- it('TOLÈRE l’écart du palier gratuit', () => {
79
- const problemes = (0, catalog_plan_quotas_constants_1.planQuotaCoherenceIssues)(organization_billing_enum_1.PlanAccountType.ORGANIZATION, {
80
- freemium: [
81
- q(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 15),
82
- q(organization_billing_enum_1.BillingMetric.BANDWIDTH_GB, 10, organization_billing_enum_1.BillingService.ABYSS_STORAGE),
83
- ],
84
- starter: [
85
- q(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 500),
86
- q(organization_billing_enum_1.BillingMetric.BANDWIDTH_GB, 100, organization_billing_enum_1.BillingService.ABYSS_STORAGE),
87
- ],
88
- pro: [
89
- q(organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB, 5000),
90
- q(organization_billing_enum_1.BillingMetric.BANDWIDTH_GB, 1000, organization_billing_enum_1.BillingService.ABYSS_STORAGE),
91
- ],
92
- });
93
- expect(problemes).toStrictEqual([]);
94
- });
95
- });
96
- describe('l’ordre des paliers', () => {
97
- it('ne connaît que les paliers PAYANTS, dans l’ordre croissant', () => {
98
- expect(catalog_plan_quotas_constants_1.PAID_TIER_ORDER).toStrictEqual(['starter', 'pro', 'enterprise']);
99
- });
100
- });
101
- //# sourceMappingURL=catalog-plan-quotas.coherence.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"catalog-plan-quotas.coherence.spec.js","sourceRoot":"","sources":["../../../src/constants/tests/catalog-plan-quotas.coherence.spec.ts"],"names":[],"mappings":"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"}
@@ -1,83 +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 billing_catalog_constants_1 = require("../billing-catalog.constants");
6
- const pricing_utils_1 = require("../../utils/pricing.utils");
7
- describe('METRIC_PRICE_SCALE', () => {
8
- it('prices storage on four decreasing tranches', () => {
9
- const scale = metric_price_scale_constants_1.METRIC_PRICE_SCALE[organization_billing_enum_1.BillingMetric.ACCOUNT_STORAGE_GB];
10
- expect(scale).toBeDefined();
11
- expect(scale).toHaveLength(4);
12
- expect(scale?.map((t) => t.nanocentsPerUnit)).toEqual([
13
- 1_500_000_000, 1_000_000_000, 600_000_000, 400_000_000,
14
- ]);
15
- expect(scale?.map((t) => t.upToQuantity)).toEqual([100, 1_000, 5_000, null]);
16
- });
17
- it('closes every scale with an open-ended tranche', () => {
18
- for (const scale of Object.values(metric_price_scale_constants_1.METRIC_PRICE_SCALE)) {
19
- expect(scale.length).toBeGreaterThan(0);
20
- expect(scale[scale.length - 1].upToQuantity).toBeNull();
21
- expect(scale.slice(0, -1).every((t) => t.upToQuantity !== null)).toBe(true);
22
- }
23
- });
24
- it('keeps every scale strictly increasing in bound and non-increasing in price', () => {
25
- for (const scale of Object.values(metric_price_scale_constants_1.METRIC_PRICE_SCALE)) {
26
- let previousBound = 0;
27
- let previousPrice = Number.POSITIVE_INFINITY;
28
- for (const tranche of scale) {
29
- const bound = tranche.upToQuantity ?? Number.POSITIVE_INFINITY;
30
- expect(bound).toBeGreaterThan(previousBound);
31
- expect(tranche.nanocentsPerUnit).toBeLessThanOrEqual(previousPrice);
32
- expect(tranche.nanocentsPerUnit).toBeGreaterThan(0);
33
- previousBound = bound;
34
- previousPrice = tranche.nanocentsPerUnit;
35
- }
36
- }
37
- });
38
- it('exposes the money constants', () => {
39
- expect(metric_price_scale_constants_1.NANOCENTS_PER_CENT).toBe(1_000_000_000);
40
- expect(metric_price_scale_constants_1.OVERAGE_MULTIPLIER).toBe(2);
41
- });
42
- });
43
- describe('METRIC_PRICE_SCALE — invariants de catalogue', () => {
44
- it('keeps every rate an integer number of nanocents', () => {
45
- for (const [metric, scale] of Object.entries(metric_price_scale_constants_1.METRIC_PRICE_SCALE)) {
46
- for (const tranche of scale) {
47
- expect({ metric, rate: tranche.nanocentsPerUnit }).toEqual({
48
- metric,
49
- rate: Math.round(tranche.nanocentsPerUnit),
50
- });
51
- }
52
- }
53
- });
54
- it('never prices a metric that cannot be overage-billed', () => {
55
- for (const metric of Object.keys(metric_price_scale_constants_1.METRIC_PRICE_SCALE)) {
56
- expect(billing_catalog_constants_1.METRIC_IS_OVERAGE_ELIGIBLE.has(metric)).toBe(true);
57
- }
58
- });
59
- it('never prices a configuration metric', () => {
60
- for (const metric of Object.keys(metric_price_scale_constants_1.METRIC_PRICE_SCALE)) {
61
- expect(billing_catalog_constants_1.METRIC_IS_CONFIG.has(metric)).toBe(false);
62
- }
63
- });
64
- it('leaves the not-yet-modular metrics unpriced on purpose', () => {
65
- const eligibleWithoutScale = [...billing_catalog_constants_1.METRIC_IS_OVERAGE_ELIGIBLE].filter((metric) => metric_price_scale_constants_1.METRIC_PRICE_SCALE[metric] === undefined);
66
- expect(eligibleWithoutScale.length).toBeGreaterThan(0);
67
- });
68
- it('still resolves a rate for every overage-eligible metric', () => {
69
- const unresolvable = [...billing_catalog_constants_1.METRIC_IS_OVERAGE_ELIGIBLE].filter((metric) => (0, pricing_utils_1.resolveOverageNanocentsPerUnit)(metric) === null);
70
- expect(unresolvable).toEqual([]);
71
- });
72
- it('keeps every fallback rate denominated per ONE unit', () => {
73
- const perThousand = [...billing_catalog_constants_1.METRIC_IS_OVERAGE_ELIGIBLE]
74
- .filter((metric) => metric_price_scale_constants_1.METRIC_PRICE_SCALE[metric] === undefined)
75
- .filter((metric) => billing_catalog_constants_1.DEFAULT_OVERAGE_BASE_RATES[metric]?.unit.startsWith('1k'));
76
- expect(perThousand).toEqual([]);
77
- });
78
- it('bills a fallback metric at its flat catalog rate', () => {
79
- expect((0, pricing_utils_1.resolveOverageNanocentsPerUnit)(organization_billing_enum_1.BillingMetric.TEAM_COUNT)).toBe(100 * 1_000_000_000);
80
- expect((0, pricing_utils_1.overagePriceCents)(organization_billing_enum_1.BillingMetric.TEAM_COUNT, 2, 2)).toBe(200);
81
- });
82
- });
83
- //# sourceMappingURL=metric-price-scale.constants.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"metric-price-scale.constants.spec.js","sourceRoot":"","sources":["../../../src/constants/tests/metric-price-scale.constants.spec.ts"],"names":[],"mappings":"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"}
@@ -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":";;AAAA,0FAA2E;AAC3E,kFAIyC;AACzC,kFAA6E;AAC7E,0EAAiF;AA2BjF,MAAM,aAAa,GAAG,CAAC,MAAqB,EAAiB,EAAE;IAC7D,MAAM,KAAK,GAAG,iDAAkB,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,GAAG,iDAAkB,CAAC,CAAC,CAAC,IAAI,CAAC;AACvE,CAAC,CAAC;AAGF,MAAM,eAAe,GAAG,CAAC,MAAqB,EAAiB,EAAE;IAC/D,MAAM,IAAI,GAAG,yDAA0B,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,iDAAkB,CAAC,CAAC,CAAC,IAAI,CAAC;AACtD,CAAC,CAAC;AAQF,MAAM,eAAe,GAA8D;IAEjF,EAAE,MAAM,EAAE,yCAAa,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,EAAE;IAGrD,EAAE,MAAM,EAAE,yCAAa,CAAC,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE;IAC1D,EAAE,MAAM,EAAE,yCAAa,CAAC,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE;IAC1D,EAAE,MAAM,EAAE,yCAAa,CAAC,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE;IACzD,EAAE,MAAM,EAAE,yCAAa,CAAC,yBAAyB,EAAE,OAAO,EAAE,IAAI,EAAE;IAElE,EAAE,MAAM,EAAE,yCAAa,CAAC,mCAAmC,EAAE,OAAO,EAAE,IAAI,EAAE;CAC7E,CAAC;AAEF,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAIlF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,iDAAkB,CAAoB,EAAE,CAAC;YACxE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7D,SAAS;YACX,CAAC;YACD,IAAI,OAAO,GAAG,IAAI,EAAE,CAAC;gBACnB,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,MAAM,IAAI,MAAM,OAAO,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;QAED,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAG7C,KAAK,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,eAAe,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YACrC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAE5B,MAAM,CAAE,OAAkB,GAAI,IAAe,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACzE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAG7E,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,KAAK,MAAM,MAAM,IAAI,0CAAe,EAAE,CAAC;YACrC,IAAI,MAAM,CAAC,IAAI,KAAK,4CAAiB,CAAC,QAAQ,EAAE,CAAC;gBAC/C,SAAS;YACX,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrC,IAAI,CAAC,iDAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,yDAA0B,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;oBACnF,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QAGjF,KAAK,MAAM,MAAM,IAAI,0CAAe,EAAE,CAAC;YACrC,IAAI,MAAM,CAAC,IAAI,KAAK,4CAAiB,CAAC,QAAQ,EAAE,CAAC;gBAC/C,SAAS;YACX,CAAC;YACD,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC;YACjF,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,CAAC;gBACzD,MAAM,EAAE,MAAM,CAAC,EAAE;gBACjB,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -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,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,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