
/*
 * Copyright (C) 2018 CESNET, https://photonics.cesnet.cz/
 * Copyright (C) 2018 FIT CVUT, https://fit.cvut.cz/
 *
 * Written by Václav Kubernát <kubervac@fit.cvut.cz>
 *
*/

#include "trompeloeil_doctest.hpp"
#include "parser.hpp"
#include "pretty_printers.hpp"
#include "static_schema.hpp"

TEST_CASE("prepare command")
{
    auto schema = std::make_shared<StaticSchema>();
    schema->addModule("example");
    schema->addRpc("/", "example:fire");
    schema->addList("/", "example:port", {"name"});
    schema->addLeaf("/example:port", "example:name", yang::String{});
    schema->addAction("/example:port", "example:shutdown");
    Parser parser(schema);
    std::string input;
    std::ostringstream errorStream;
    prepare_ expected;
    expected.m_path.m_scope = Scope::Relative;
    SECTION("rpc")
    {
        input = "prepare example:fire";
        expected.m_path.m_nodes.emplace_back(module_{"example"}, rpcNode_{"fire"});
    }

    SECTION("action")
    {
        input = "prepare example:port[name='eth0']/shutdown";
        expected.m_path.m_nodes.emplace_back(module_{"example"}, listElement_{"port", {{"name", std::string{"eth0"}}}});
        expected.m_path.m_nodes.emplace_back(actionNode_{"shutdown"});
    }

    command_ command = parser.parseCommand(input, errorStream);
    REQUIRE(command.type() == typeid(prepare_));
    auto lol = boost::get<prepare_>(command);
    REQUIRE(boost::get<prepare_>(command) == expected);
}
