diff --git a/src/utils/settings.ts b/src/utils/settings.ts index 94907392..22cd9564 100644 --- a/src/utils/settings.ts +++ b/src/utils/settings.ts @@ -6,20 +6,20 @@ import { mergeDeepRight } from 'ramda' import { ISettings } from '../@types/settings' import packageJson from '../../package.json' -const getSettingsFilePath = (filename = 'settings.json') => join( +export const getSettingsFilePath = (filename = 'settings.json'): string => join( process.env.NOSTR_CONFIG_DIR ?? join(homedir(), '.nostr'), filename, ) let _settings: ISettings -const getDefaultSettings = (): ISettings => ({ +export const getDefaultSettings = (): ISettings => ({ info: { - relay_url: undefined, - name: `Unnamed ${packageJson.name}`, + relay_url: `wss://${packageJson.name}.your-domain.com`, + name: `${packageJson.name}.your-domain.com`, description: packageJson.description, pubkey: '', - contact: '', + contact: 'operator@your-domain.com', }, limits: { event: { diff --git a/test/unit/utils/settings.spec.ts b/test/unit/utils/settings.spec.ts new file mode 100644 index 00000000..9facf57b --- /dev/null +++ b/test/unit/utils/settings.spec.ts @@ -0,0 +1,96 @@ +import { expect } from 'chai' +import { homedir } from 'os' +import { join } from 'path' + +import { getDefaultSettings, getSettingsFilePath } from '../../../src/utils/settings' + +describe('Settings', () => { + describe('getSettingsFilePath', () => { + let originalEnv: NodeJS.ProcessEnv + + beforeEach(() => { + originalEnv = process.env + process.env = {} + }) + + afterEach(() => { + process.env = originalEnv + }) + + it('returns string ending with settings.json by default', () => { + expect(getSettingsFilePath()).to.be.a('string').and.to.match(/settings\.json$/) + }) + + it('returns string ending with given string', () => { + expect(getSettingsFilePath('ending')).to.be.a('string').and.to.match(/ending$/) + }) + + it('returns path begins with user\'s home dir by default', () => { + expect(getSettingsFilePath()).to.be.a('string').and.equal(`${join(homedir(), '.nostr')}/settings.json`) + }) + + it('returns path with NOSTR_CONFIG_DIR if set', () => { + process.env.NOSTR_CONFIG_DIR = '/some/path' + + expect(getSettingsFilePath()).to.be.a('string').and.equal('/some/path/settings.json') + }) + }) + + describe('getDefaultSettings', () => { + it('returns object with info', () => { + expect(getDefaultSettings()) + .to.have.property('info') + .and.to.deep.equal({ + relay_url: 'wss://nostr-ts-relay.your-domain.com', + name: 'nostr-ts-relay.your-domain.com', + description: 'A nostr relay written in Typescript.', + pubkey: '', + contact: 'operator@your-domain.com', + }) + }) + + + it('returns object with default limits', () => { + expect(getDefaultSettings()) + .to.have.property('limits') + .and.to.deep.equal({ + event: { + eventId: { + minLeadingZeroBits: 0, + }, + kind: { + whitelist: [], + blacklist: [], + }, + pubkey: { + minLeadingZeroBits: 0, + whitelist: [], + blacklist: [], + }, + createdAt: { + maxPositiveDelta: 900, // +15 min + maxNegativeDelta: 0, // disabled + }, + }, + client: { + subscription: { + maxSubscriptions: 10, + maxFilters: 10, + }, + }, + }) + }) + }) + + // describe('loadSettings', () => { + + // }) + + // describe('createSettings', () => { + + // }) + + // describe('saveSettings', () => { + + // }) +}) \ No newline at end of file