@ -209,7 +209,7 @@ describe(SystemConfigService.name, () => {
await expect ( sut . getConfig ( ) ) . resolves . toEqual ( updatedConfig ) ;
} ) ;
it ( 'should load the config from a file', async ( ) = > {
it ( 'should load the config from a json file', async ( ) = > {
process . env . IMMICH_CONFIG_FILE = 'immich-config.json' ;
const partialConfig = {
ffmpeg : { crf : 30 } ,
@ -224,6 +224,25 @@ describe(SystemConfigService.name, () => {
expect ( configMock . readFile ) . toHaveBeenCalledWith ( 'immich-config.json' ) ;
} ) ;
it ( 'should load the config from a yaml file' , async ( ) = > {
process . env . IMMICH_CONFIG_FILE = 'immich-config.yaml' ;
const partialConfig = `
ffmpeg :
crf : 30
oauth :
autoLaunch : true
trash :
days : 10
user :
deleteDelay : 15
` ;
configMock . readFile . mockResolvedValue ( partialConfig ) ;
await expect ( sut . getConfig ( ) ) . resolves . toEqual ( updatedConfig ) ;
expect ( configMock . readFile ) . toHaveBeenCalledWith ( 'immich-config.yaml' ) ;
} ) ;
it ( 'should accept an empty configuration file' , async ( ) = > {
process . env . IMMICH_CONFIG_FILE = 'immich-config.json' ;
configMock . readFile . mockResolvedValue ( JSON . stringify ( { } ) ) ;
@ -242,6 +261,17 @@ describe(SystemConfigService.name, () => {
expect ( config . machineLearning . url ) . toEqual ( 'immich_machine_learning' ) ;
} ) ;
it ( 'should warn for unknown options in yaml' , async ( ) = > {
process . env . IMMICH_CONFIG_FILE = 'immich-config.yaml' ;
const partialConfig = `
unknownOption : true
` ;
configMock . readFile . mockResolvedValue ( partialConfig ) ;
await sut . getConfig ( ) ;
expect ( warnLog ) . toHaveBeenCalled ( ) ;
} ) ;
const tests = [
{ should : 'validate numbers' , config : { ffmpeg : { crf : 'not-a-number' } } } ,
{ should : 'validate booleans' , config : { oauth : { enabled : 'invalid' } } } ,