const { app, safeStorage } = require('electron'); const { expect } = require('chai'); (async () => { if (!app.isReady()) { // isEncryptionAvailable() returns false before the app is ready on // Linux: https://github.com/electron/electron/issues/32206 // and // Windows: https://github.com/electron/electron/issues/33640. expect(safeStorage.isEncryptionAvailable()).to.equal(process.platform === 'darwin'); if (safeStorage.isEncryptionAvailable()) { const plaintext = 'plaintext'; const ciphertext = safeStorage.encryptString(plaintext); expect(Buffer.isBuffer(ciphertext)).to.equal(true); expect(safeStorage.decryptString(ciphertext)).to.equal(plaintext); } else { expect(() => safeStorage.encryptString('plaintext')).to.throw(/safeStorage cannot be used before app is ready/); expect(() => safeStorage.decryptString(Buffer.from(''))).to.throw(/safeStorage cannot be used before app is ready/); } } await app.whenReady(); // isEncryptionAvailable() will always return false on CI due to a mocked // dbus as mentioned above. expect(safeStorage.isEncryptionAvailable()).to.equal(process.platform !== 'linux'); if (safeStorage.isEncryptionAvailable()) { const plaintext = 'plaintext'; const ciphertext = safeStorage.encryptString(plaintext); expect(Buffer.isBuffer(ciphertext)).to.equal(true); expect(safeStorage.decryptString(ciphertext)).to.equal(plaintext); } else { expect(() => safeStorage.encryptString('plaintext')).to.throw(/Encryption is not available/); expect(() => safeStorage.decryptString(Buffer.from(''))).to.throw(/Decryption is not available/); } })() .then(app.quit) .catch((err) => { console.error(err); app.exit(1); });