NodePipeline/NodePipeline.Configuration.Yaml.Tests/YamlEditorConfigLoaderTests.cs
2026-01-02 20:55:25 +03:00

141 lines
4.9 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Text;
using NodePipeline.Configuration.Abstractions.Models.Edit;
using NodePipeline.Configuration.Yaml.Exceptions;
using NodePipeline.Configuration.Yaml.Loader;
namespace NodePipeline.Configuration.Yaml.Tests;
public class YamlEditorConfigLoaderTests
{
private const string ValidYaml = """
name: test-pipeline
description: test-description
nodes:
- id: node1
type: FileImageSource
title: Загрузчик
description: Загрузка изображения
parameters:
FileName:
value: "input.jpg"
label: "Имя файла"
description: "Файл для загрузки"
inputs:
Trigger:
source: upstream.Done
label: "Триггер"
description: "Когда запускать"
outputs:
Output:
label: "Выход"
description: "Изображение"
""";
[Fact]
public void LoadsPipelineMetadata()
{
const string name = "test-pipeline";
const string description = "test-description";
var config = LoadFromYaml(ValidYaml);
Assert.Equal(name, config.Name);
Assert.Equal(description, config.Description);
}
[Fact]
public void LoadsSingleNode()
{
const string nodeId = "node1";
const string nodeType = "FileImageSource";
const string nodeTitle = "Загрузчик";
const string nodeDescription = "Загрузка изображения";
var config = LoadFromYaml(ValidYaml);
Assert.Single(config.Nodes);
var node = config.Nodes[0];
Assert.Equal(nodeId, node.Id);
Assert.Equal(nodeType, node.Type);
Assert.Equal(nodeTitle, node.Title);
Assert.Equal(nodeDescription, node.Description);
}
[Fact]
public void LoadsNodeParameters()
{
const string paramName = "FileName";
const string paramLabel = "Имя файла";
const string paramDescription = "Файл для загрузки";
const string paramValue = "input.jpg";
var config = LoadFromYaml(ValidYaml);
var param = config.Nodes[0].Parameters["FileName"];
Assert.Equal(paramName, param.Name);
Assert.Equal(paramLabel, param.Label);
Assert.Equal(paramDescription, param.Description);
Assert.Equal(paramValue, param.Value);
}
[Fact]
public void LoadsNodeInputs()
{
const string inputName = "Trigger";
const string inputLabel = "Триггер";
const string inputSource = "upstream.Done";
const string inputDescription = "Когда запускать";
var config = LoadFromYaml(ValidYaml);
var input = config.Nodes[0].Inputs["Trigger"];
Assert.Equal(inputName, input.Name);
Assert.Equal(inputLabel, input.Label);
Assert.Equal(inputSource, input.Source);
Assert.Equal(inputDescription, input.Description);
}
[Fact]
public void LoadsNodeOutputs()
{
var outputName = "Output";
var outputLabel = "Выход";
var outputDescription = "Изображение";
var config = LoadFromYaml(ValidYaml);
var output = config.Nodes[0].Outputs["Output"];
Assert.Equal(outputName, output.Name);
Assert.Equal(outputLabel, output.Label);
Assert.Equal(outputDescription, output.Description);
}
[Fact]
public void HandlesEmptyYamlGracefully()
{
const string emptyYaml = "";
var loader = new YamlEditorConfigLoader();
var exceptionType = typeof(YamlFileIsEmptyException);
Exception? exception = null;
try
{
using var stream = new MemoryStream(Encoding.UTF8.GetBytes(emptyYaml));
loader.Load(stream);
}
catch (Exception ex)
{
exception = ex;
}
Assert.NotNull(exception);
Assert.Equal(exceptionType, exception.GetType());
}
private static EditorPipelineConfig LoadFromYaml(string yaml)
{
using var stream = new MemoryStream(Encoding.UTF8.GetBytes(yaml));
var loader = new YamlEditorConfigLoader();
return loader.Load(stream);
}
}