EnvironmentModuleConfigRepositoryTest.java

/**
 * Copyright (c) 2018, RTE (http://www.rte-france.com)
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 * SPDX-License-Identifier: MPL-2.0
 */
package com.powsybl.commons.config;

import org.junit.jupiter.api.Test;

import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

import static com.powsybl.commons.config.EnvironmentModuleConfigRepository.UPPER_UNDERSCORE_FORMATTER;
import static org.junit.jupiter.api.Assertions.*;

/**
 * @author Yichen TANG {@literal <yichen.tang at rte-france.com>}
 */
class EnvironmentModuleConfigRepositoryTest extends AbstractMapModuleConfigTest {

    @Test
    void test() {
        Map<String, String> fakeEnvMap = new HashMap<>();
        fakeEnvMap.put("MOD__S", "hello");
        fakeEnvMap.put("MOD__I", "3");
        fakeEnvMap.put("MOD__L", "33333333333");
        fakeEnvMap.put("MOD__B", "false");
        fakeEnvMap.put("MOD__D", "2.3");
        fakeEnvMap.put("MOD__C", ArrayList.class.getName());
        fakeEnvMap.put("MOD__SL1", "a,b,c");
        fakeEnvMap.put("MOD__SL2", "a:b:c");
        fakeEnvMap.put("MOD__E", StandardOpenOption.APPEND.name());
        fakeEnvMap.put("MOD__EL", StandardOpenOption.APPEND + "," + StandardOpenOption.CREATE);
        Path p = fileSystem.getPath("/tmp");
        Path p2 = fileSystem.getPath("/home");
        fakeEnvMap.put("MOD__P", p.toString());
        fakeEnvMap.put("MOD__PL", p.toString() + ":" + p2.toString());
        fakeEnvMap.put("MOD__PL2", p.toString() + "," + p2.toString());
        fakeEnvMap.put("MOD__DT", "2009-01-03T18:15:05Z");
        fakeEnvMap.put("MOD__IT", "2009-01-03T18:15:05Z/2009-01-09T02:54:25Z");
        fakeEnvMap.put("AB__CD__EF", "fio");

        fakeEnvMap.put("LOAD_FLOW_ACTION_SIMULATOR__MAX_ITERATIONS", "7");

        String lowerCamel = "lowerCamel";
        fakeEnvMap.put("LOWER_CAMEL__LOWER_CAMEL", "asfd");

        String snakeCaseMod = "a_snake_mod";
        fakeEnvMap.put("A_SNAKE_MOD__SNAKE_LENGTH", "3");

        String upperCamel = "UpperCamel";
        fakeEnvMap.put("UPPER_CAMEL__UPPER_CAMEL", "UpperCamel");

        EnvironmentModuleConfigRepository sut = new EnvironmentModuleConfigRepository(fakeEnvMap, fileSystem);
        Optional<ModuleConfig> modConfigOpt = sut.getModuleConfig("mod");
        assertTrue(modConfigOpt.isPresent());
        ModuleConfig modConfig = modConfigOpt.get();

        assertModConfig(modConfig);

        String modName = "load-flow-action-simulator";
        Optional<ModuleConfig> moduleConfigOpt = sut.getModuleConfig(modName);
        assertTrue(moduleConfigOpt.isPresent());
        ModuleConfig moduleConfig = moduleConfigOpt.get();
        assertEquals(7, moduleConfig.getIntProperty("max-iterations"));

        Optional<ModuleConfig> moduleConfig1 = sut.getModuleConfig(lowerCamel);
        assertTrue(moduleConfig1.isPresent());
        assertEquals("asfd", moduleConfig1.get().getStringProperty(lowerCamel));

        Optional<ModuleConfig> moduleConfig2 = sut.getModuleConfig(snakeCaseMod);
        assertTrue(moduleConfig2.isPresent());
        assertEquals(3, moduleConfig2.get().getIntProperty("snake_length"));

        Optional<ModuleConfig> moduleConfig3 = sut.getModuleConfig(upperCamel);
        assertTrue(moduleConfig3.isPresent());
        assertEquals("UpperCamel", moduleConfig3.get().getStringProperty("UpperCamel"));

        Optional<ModuleConfig> moduleConfig4 = sut.getModuleConfig("ab__cd");
        assertTrue(moduleConfig4.isPresent());
        assertEquals("fio", moduleConfig4.get().getStringProperty("ef"));
        assertTrue(sut.getModuleConfig("ab").isPresent());

        assertFalse(sut.getModuleConfig("").isPresent());
        try {
            modConfig.getPropertyNames();
            fail();
        } catch (UnsupportedOperationException e) {
            // ignore
        }
    }

    @Test
    void testUpperUndersocreFormatter() {
        assertEquals("NAME", UPPER_UNDERSCORE_FORMATTER.apply("name"));
        assertEquals("LOWER_HYPHEN", UPPER_UNDERSCORE_FORMATTER.apply("lower-hyphen"));
        assertEquals("LOWER_CAMEL", UPPER_UNDERSCORE_FORMATTER.apply("lowerCamel"));
        assertEquals("UPPER_CAMEL", UPPER_UNDERSCORE_FORMATTER.apply("UpperCamel"));
        assertEquals("SNAKE_CASE", UPPER_UNDERSCORE_FORMATTER.apply("snake_case"));
    }
}