/* * Copyright (C) 2021-2022 Kristóf Marussy * * This file is part of Sophie. * * Sophie is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * * SPDX-License-Identifier: AGPL-3.0-only */ import { config, Config, ConfigFileIn } from '../Config'; import type { PartialProfileSnapshotIn } from '../Profile'; import type { PartialServiceSnapshotIn } from '../Service'; const profileProps: PartialProfileSnapshotIn = { name: 'Test profile', }; const serviceProps: PartialServiceSnapshotIn = { name: 'Test service', url: 'https://example.com', }; let sut: Config; beforeEach(() => { sut = config.create(); }); describe('preprocessConfigFile', () => { it('should load profiles with an ID', () => { sut.loadFromConfigFile({ profiles: [ { id: 'someId', ...profileProps, }, ], }); expect(sut.profiles[0].id).toBe('someId'); }); it('should generate an ID for profiles without and ID', () => { sut.loadFromConfigFile({ profiles: [profileProps], }); expect(sut.profiles[0].id).toBeDefined(); }); it('should load services with an ID and a profile', () => { sut.loadFromConfigFile({ profiles: [ { id: 'someProfileId', ...profileProps, }, ], services: [ { id: 'someServiceId', profile: 'someProfileId', ...serviceProps, }, ], }); expect(sut.services[0].id).toBe('someServiceId'); expect(sut.services[0].profile).toBe(sut.profiles[0]); }); it('should refuse to load a profile without a name', () => { expect(() => { sut.loadFromConfigFile({ profiles: [ { id: 'someProfileId', ...profileProps, name: undefined, }, ], } as unknown as ConfigFileIn); }).toThrow(); expect(sut.profiles).toHaveLength(0); }); it('should load services without an ID but with a profile', () => { sut.loadFromConfigFile({ profiles: [ { id: 'someProfileId', ...profileProps, }, ], services: [ { profile: 'someProfileId', ...serviceProps, }, ], }); expect(sut.services[0].id).toBeDefined(); expect(sut.services[0].profile).toBe(sut.profiles[0]); }); it('should create a profile for a service with an ID but no profile', () => { sut.loadFromConfigFile({ services: [ { id: 'someServiceId', ...serviceProps, }, ], }); expect(sut.services[0].id).toBe('someServiceId'); expect(sut.services[0].profile).toBeDefined(); expect(sut.services[0].profile.name).toBe(serviceProps.name); }); it('should create a profile for a service without an ID or profile', () => { sut.loadFromConfigFile({ services: [ { ...serviceProps, }, ], }); expect(sut.services[0].id).toBeDefined(); expect(sut.services[0].profile).toBeDefined(); expect(sut.services[0].profile.name).toBe(serviceProps.name); }); it('should refuse to load a service without a name', () => { expect(() => { sut.loadFromConfigFile({ services: [ { id: 'someServiceId', ...serviceProps, name: undefined, }, ], } as unknown as ConfigFileIn); }).toThrow(); expect(sut.profiles).toHaveLength(0); expect(sut.services).toHaveLength(0); }); });