Skip to content
Snippets Groups Projects
Select Git revision
  • 6cf8c9bc0279bffb82d47211c7cfe99a189f9795
  • main default protected
  • 3-rewrite-in-typescript
  • 1.13.6
  • 1.13.5
  • 1.13.4
  • 1.13.3
  • 1.13.2
  • 1.13.1
  • 1.13.0
  • 1.12.4
  • 1.12.3
  • 1.12.2
  • 1.12.1
  • 1.12.0
  • 1.11.0
  • 1.10.1
  • 1.10.0
  • 1.9.0
  • v1.7.0
  • 1.8.0
  • v1.7.1
  • v1.6.2
23 results

index.test.js

Blame
  • index.test.js 4.67 KiB
    const fs = require('fs').promises
    
    const Config = require('./index')
    
    let jsonDefaults = {
      setting:"defaultvalue",
      another: {
        setting:"avalue"
      }
    }
    
    let jsonLocals = {
      setting:"localvalue",
      another: {
        more:"stuff"
      },
      even: {
        deeper: {
          key: 'sodeep'
        }
      }
    }
    
    describe('config', function() {
    
      it('should only have values from config.defaults.json', async function() {
        await fs.writeFile('config.defaults.json', JSON.stringify(jsonDefaults))
        let config = new Config()
        await fs.unlink('config.defaults.json')
    
        expect(config.setting).toBe('defaultvalue')
        expect(config.another.setting).toBe('avalue')
      })
    
      it('should only have values from config.json', async function() {
        await fs.writeFile('config.json', JSON.stringify(jsonLocals))
        let config = new Config()
        await fs.unlink('config.json')
    
        expect(config.setting).toBe('localvalue')
        expect(config.another.more).toBe('stuff')
      })
    
      it('should have both values with preference to config.json', async function() {
        await fs.writeFile('config.defaults.json', JSON.stringify(jsonDefaults))
        await fs.writeFile('config.json', JSON.stringify(jsonLocals))
        let config = new Config()
        await fs.unlink('config.json')
        await fs.unlink('config.defaults.json')
    
        expect(config.setting).toBe('localvalue')
        expect(config.another.more).toBe('stuff')
        expect(config.another.setting).toBe('avalue')
      })
    
      it('should respect a given basepath', async function() {
        await fs.mkdir('tmp')
        await fs.writeFile('tmp/config.defaults.json', JSON.stringify(jsonDefaults))
        await fs.writeFile('tmp/config.json', JSON.stringify(jsonLocals))
        let config = new Config('tmp')
        await fs.unlink('tmp/config.json')
        await fs.unlink('tmp/config.defaults.json')
        await fs.rmdir('tmp')
    
        expect(config.setting).toBe('localvalue')
        expect(config.another.more).toBe('stuff')
        expect(config.another.setting).toBe('avalue')
      })
    
      it('should have all values with preference to env', async function() {
        await fs.writeFile('config.defaults.json', JSON.stringify(jsonDefaults))
        await fs.writeFile('config.json', JSON.stringify(jsonLocals))
        
        process.env['SETTING'] = 'overwritten-by-env'
        process.env['ANOTHER_MORE'] = 'false'
        process.env['EVEN_DEEPER_KEY'] = 'true'
        
        let config = new Config()
    
        await fs.unlink('config.json')
        await fs.unlink('config.defaults.json')
    
        delete process.env['SETTING']
        delete process.env['ANOTHER_MORE']
        delete process.env['EVEN_DEEPER_KEY']
    
        expect(config.setting).toBe('overwritten-by-env')
        expect(config.another.more).toBe(false)
        expect(config.even.deeper.key).toBe(true)
        expect(config.another.setting).toBe('avalue')
      })
    
      it('should read in a file when given', async function() {
        jsonLocals.setting = 'file:file.txt'
        await fs.writeFile('config.defaults.json', JSON.stringify(jsonDefaults))
        await fs.writeFile('config.json', JSON.stringify(jsonLocals))
        await fs.writeFile('file.txt', 'value-from-file')
    
        let config = new Config()
    
        await fs.unlink('config.json')
        await fs.unlink('config.defaults.json')
        await fs.unlink('file.txt')
        jsonLocals.setting = 'localvalue'
    
        expect(config.setting).toBe('value-from-file')
      })
      it('should show a message and keep the setting when file given but not found', async function() {
        jsonLocals.setting = 'file:file.txt'
        await fs.writeFile('config.defaults.json', JSON.stringify(jsonDefaults))
        await fs.writeFile('config.json', JSON.stringify(jsonLocals))
    
        let config = new Config()
    
        await fs.unlink('config.json')
        await fs.unlink('config.defaults.json')
        jsonLocals.setting = 'localvalue'
    
        expect(config.setting).toBe('file:file.txt')
      })
    
      it('should _reload if asked', async function() {
        await fs.writeFile('config.defaults.json', JSON.stringify(jsonDefaults))
        await fs.writeFile('config.json', JSON.stringify(jsonLocals))
    
        let config = new Config()
    
        expect(config.setting).toBe('localvalue')
    
        jsonLocals.setting = 'reloaded-value'
        await fs.writeFile('config.json', JSON.stringify(jsonLocals))
    
        config._reload()
    
        await fs.unlink('config.json')
        await fs.unlink('config.defaults.json')
        jsonLocals.setting = 'localvalue'
    
        expect(config.setting).toBe('reloaded-value')
      })
      it('should redact passwords if using _show', async function() {
        await fs.writeFile('config.defaults.json', JSON.stringify(jsonDefaults))
        await fs.writeFile('config.json', JSON.stringify(jsonLocals))
    
        let config = new Config()
    
        await fs.unlink('config.json')
        await fs.unlink('config.defaults.json')
        console.dir(config._show())
        expect(config._show().even.deeper.key).toBe('REDACTED')
      })
    })