141 lines
4.9 KiB
C#
141 lines
4.9 KiB
C#
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);
|
||
}
|
||
} |