2024-04-01 17:15:44 +08:00

69 lines
2.2 KiB
TypeScript

import { expect } from 'chai';
import { describe, it, beforeEach, afterEach } from 'mocha';
import fs from 'fs';
import yaml from 'yaml';
import { DevChatConfig } from '../../src/util/config'; // 调整路径以指向config.ts的实际位置
import sinon from 'sinon';
import { logger } from '../../src/util/logger'; // 调整路径以指向logger的实际位置
describe('DevChatConfig', () => {
let readFileStub: sinon.SinonStub;
let writeFileStub: sinon.SinonStub;
let loggerStub: sinon.SinonStub;
const mockData = {
username: 'DevUser',
theme: 'dark',
};
beforeEach(() => {
// Mock fs.readFileSync to return a YAML string based on mockData
readFileStub = sinon.stub(fs, 'readFileSync').returns(yaml.stringify(mockData));
// Mock fs.writeFileSync to fake the writing process
writeFileStub = sinon.stub(fs, 'writeFileSync');
// Mock the logger to prevent logging during tests
loggerStub = sinon.stub(logger, 'channel').callsFake(() => ({
info: sinon.fake(),
warn: sinon.fake(),
error: sinon.fake(),
debug: sinon.fake(),
show: sinon.fake(),
}));
});
afterEach(() => {
// Restore the original functionalities
readFileStub.restore();
writeFileStub.restore();
loggerStub.restore();
});
it('should read config file and get the correct value for a given key', () => {
const config = new DevChatConfig();
expect(config.get('username')).to.equal('DevUser');
});
it('should set a new key-value pair and write to the config file', () => {
const config = new DevChatConfig();
const newKey = 'notifications.enabled';
const newValue = true;
config.set(newKey, newValue);
expect(config.get('notifications.enabled')).to.equal(true);
// Check if fs.writeFileSync was called
sinon.assert.calledOnce(writeFileStub);
});
it('should handle errors when reading an invalid config file', () => {
readFileStub.throws(new Error('Failed to read file'));
// Constructing the config will attempt to read the file and log an error
const config = new DevChatConfig();
// Check if the error was logged
sinon.assert.called(loggerStub);
});
});