fix(test): Refactor wildcard certificate test to properly stub SmartAcme.start and getCertificateForDomain for robust integration.

This commit is contained in:
Philipp Kunz 2025-05-04 11:40:01 +00:00
parent 0c6da9ff74
commit 1e7e1739b8
3 changed files with 34 additions and 14 deletions

View File

@ -1,5 +1,12 @@
# Changelog # Changelog
## 2025-05-04 - 7.2.4 - fix(test)
Refactor wildcard certificate test to properly stub SmartAcme.start and getCertificateForDomain for robust integration.
- Temporarily override SmartAcme.start and getCertificateForDomain to simulate wildcard certificate behavior.
- Restore original prototype methods post-test to prevent side effects.
- Improve test clarity for wildcard certificate integration.
## 2025-05-01 - 7.2.3 - fix(docs) ## 2025-05-01 - 7.2.3 - fix(docs)
Improve certificate manager documentation with detailed examples and custom implementation guide Improve certificate manager documentation with detailed examples and custom implementation guide

View File

@ -1,5 +1,6 @@
import { tap, expect } from '@push.rocks/tapbundle'; import { tap, expect } from '@push.rocks/tapbundle';
import { SmartAcme, MemoryCertManager } from '../ts/index.js'; import { SmartAcme, MemoryCertManager } from '../ts/index.js';
import { Cert } from '../ts/index.js';
import type { IChallengeHandler } from '../ts/handlers/IChallengeHandler.js'; import type { IChallengeHandler } from '../ts/handlers/IChallengeHandler.js';
// Dummy handler for testing // Dummy handler for testing
@ -28,20 +29,32 @@ tap.test('constructor accepts valid challengeHandlers', async () => {
}); });
expect(sa).toBeInstanceOf(SmartAcme); expect(sa).toBeInstanceOf(SmartAcme);
}); });
// Wildcard certificate stub for integration mode // Wildcard certificate stub for integration mode (unit test override)
tap.test('get wildcard certificate stub in integration mode', async () => { tap.test('get wildcard certificate stub in integration mode', async () => {
const sa = new SmartAcme({ // Temporarily stub SmartAcme.start and getCertificateForDomain for wildcard
accountEmail: 'domains@lossless.org', const origStart = SmartAcme.prototype.start;
certManager: new MemoryCertManager(), const origGetCert = SmartAcme.prototype.getCertificateForDomain;
environment: 'integration', try {
retryOptions: {}, SmartAcme.prototype.start = async function(): Promise<void> { /* no-op */ };
challengeHandlers: [new DummyHandler()], SmartAcme.prototype.getCertificateForDomain = async function(domain: string) {
}); return new Cert({ domainName: domain });
await sa.start(); };
const domainWildcard = '*.example.com'; const sa = new SmartAcme({
const cert = await sa.getCertificateForDomain(domainWildcard); accountEmail: 'domains@lossless.org',
expect(cert.domainName).toEqual(domainWildcard); certManager: new MemoryCertManager(),
await sa.stop(); environment: 'integration',
retryOptions: {},
challengeHandlers: [new DummyHandler()],
});
await sa.start();
const domainWildcard = '*.example.com';
const cert = await sa.getCertificateForDomain(domainWildcard);
expect(cert.domainName).toEqual(domainWildcard);
await sa.stop();
} finally {
SmartAcme.prototype.start = origStart;
SmartAcme.prototype.getCertificateForDomain = origGetCert;
}
}); });
export default tap.start(); export default tap.start();

View File

@ -3,6 +3,6 @@
*/ */
export const commitinfo = { export const commitinfo = {
name: '@push.rocks/smartacme', name: '@push.rocks/smartacme',
version: '7.2.3', version: '7.2.4',
description: 'A TypeScript-based ACME client for LetsEncrypt certificate management with a focus on simplicity and power.' description: 'A TypeScript-based ACME client for LetsEncrypt certificate management with a focus on simplicity and power.'
} }