Коммит b98f2be3 создал по автору Evgeniy Zyatyna's avatar Evgeniy Zyatyna
Просмотр файлов

Merge branch 'develop' into 'master'

️ Реализована принимаемая модель для обновления поля строкового типа с...

See merge request smon.monq.ru/libraries/Monq.Models.Abstractions!11
владельцы 68c60bea 9548536b
using System;
using Monq.Models.Abstractions.Helpers;
using Xunit;
namespace Monq.Models.Abstractions.Tests.Helpers
{
public class ModelHelperTests
{
[Theory(DisplayName = "Проверка перезаписи значения строкового типа.")]
[InlineData(sbyte.MaxValue)]
[InlineData(byte.MaxValue)]
[InlineData(short.MaxValue)]
[InlineData(ushort.MaxValue)]
public void ShouldProperlyOverrideStringValue(int seed)
{
var sporadic = new Random(seed);
var initialStr = sporadic.GetRandomName();
var putModel = new ModelPropertyPutViewModel
{
Value = sporadic.GetRandomName(),
Behavior = ModelPropertyPutBehavior.Override
};
var updatedStr = ModelHelper.Update(initialStr, putModel);
Assert.Equal(putModel.Value, updatedStr);
}
[Theory(DisplayName = "Проверка конкатенации старого и нового значения строкового типа.")]
[InlineData(sbyte.MaxValue)]
[InlineData(byte.MaxValue)]
[InlineData(short.MaxValue)]
[InlineData(ushort.MaxValue)]
public void ShouldProperlyAppendStringValue(int seed)
{
var sporadic = new Random(seed);
var initialStr = sporadic.GetRandomName();
var putModel = new ModelPropertyPutViewModel
{
Value = sporadic.GetRandomName(),
Behavior = ModelPropertyPutBehavior.Append
};
var updatedStr = ModelHelper.Update(initialStr, putModel);
Assert.Equal(initialStr + putModel.Value, updatedStr);
}
}
}
\ Нет новой строки в конце файла
using System;
namespace Monq.Models.Abstractions.Helpers
{
/// <summary>
/// Хелпер для работы с моделями.
/// </summary>
public static class ModelHelper
{
/// <summary>
/// Возвращает новое значение, если переданное значение отличается и не пустая строка.
/// <para>
/// В зависимости от переданного поведения в принимаемой модели будет возвращено соответствующее значение.
/// </para>
/// </summary>
/// <param name="targetProp">Исходное значение, которое будет обновлено.</param>
/// <param name="value">Принимаемая модель представления для обновления свойства сущности.</param>
/// <returns></returns>
public static string Update(string targetProp, ModelPropertyPutViewModel value)
{
if (value?.Value == null)
return targetProp;
if (targetProp == null)
return value.Value;
if (targetProp.Equals(value.Value) && value.Behavior == ModelPropertyPutBehavior.Override)
return targetProp;
return value.Behavior switch
{
ModelPropertyPutBehavior.Override => value.Value,
ModelPropertyPutBehavior.Append => targetProp + value.Value,
_ => throw new ArgumentOutOfRangeException()
};
}
}
}
\ Нет новой строки в конце файла
namespace Monq.Models.Abstractions
{
/// <summary>
/// Поведение при обновлении свойства сущности.
/// </summary>
public enum ModelPropertyPutBehavior : byte
{
/// <summary>
/// Перезаписать значение.
/// </summary>
Override,
/// <summary>
/// Дописать к существующему.
/// </summary>
Append
}
}
\ Нет новой строки в конце файла
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace Monq.Models.Abstractions
{
/// <summary>
/// Принимаемая модель представления для обновления свойства сущности.
/// </summary>
public class ModelPropertyPutViewModel
{
/// <summary>
/// Новое значение
/// </summary>
public string Value { get; set; } = null;
/// <summary>
/// Поведение при обновлении свойства сущности.
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public ModelPropertyPutBehavior Behavior { get; set; } = ModelPropertyPutBehavior.Override;
}
}
\ Нет новой строки в конце файла
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Version>3.3</Version>
<Version>3.4</Version>
<VersionSuffix>$(VersionSuffix)</VersionSuffix>
<Version Condition=" '$(VersionSuffix)' != '' ">$(Version)-$(VersionSuffix)</Version>
<TargetFramework>netstandard2.0</TargetFramework>
......@@ -16,6 +16,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
<PackageReference Include="System.ComponentModel.Annotations" Version="4.7.0" />
</ItemGroup>
......
Поддерживает Markdown
0% или .
You are about to add 0 people to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Пожалуйста, зарегистрируйтесь или чтобы прокомментировать