Skip to content

feat: валидация значений полей с вариантами (4099)#4100

Open
claude[bot] wants to merge 2 commits intomasterfrom
claude/issue-4099-20260329-1842
Open

feat: валидация значений полей с вариантами (4099)#4100
claude[bot] wants to merge 2 commits intomasterfrom
claude/issue-4099-20260329-1842

Conversation

@claude
Copy link
Copy Markdown
Contributor

@claude claude bot commented Mar 29, 2026

Что сделано

  • Добавлен FieldValueInvalidException — выбрасывается при попытке установить ID варианта, которого нет у поля
  • Валидация добавлена в FieldSaveStrategyBase.NormalizeValueBeforeAssign — срабатывает для всех полей с вариантами (Dropdown, MultiSelect, ScheduleRoomField, ScheduleTimeSlotField)
  • CharacterApiController.SetCharacterFields теперь возвращает 400 Bad Request при FieldValueInvalidException

Тесты

Юнит-тесты в JoinRpg.Domain.Test/FieldSaveHelperTest.cs:

  • TryToSetInvalidDropdownValue — попытка установить несуществующий ID варианта в Dropdown-поле
  • SetValidDropdownValue — успешная установка корректного ID варианта
  • TryToSetInvalidMultiSelectValue — попытка установить частично некорректный список ID в MultiSelect-поле

Тест на уровне API-контроллера в JoinRpg.Portal.Test/XGameApi/CharacterFieldsApiTest.cs:

  • SetCharacterFields_InvalidVariantId_ReturnsBadRequest — API возвращает 400 при невалидном варианте
  • SetCharacterFields_Success_ReturnsOk — API возвращает "ok" при корректном запросе

Closes #4099

Generated with Claude Code

- Добавлен FieldValueInvalidException для некорректных ID вариантов
- Валидация в FieldSaveStrategyBase.NormalizeValueBeforeAssign для Dropdown/MultiSelect полей
- CharacterApiController возвращает 400 Bad Request при FieldValueInvalidException
- Юнит-тесты: TryToSetInvalidDropdownValue, SetValidDropdownValue, TryToSetInvalidMultiSelectValue
- Тест API-контроллера: SetCharacterFields_InvalidVariantId_ReturnsBadRequest

Closes #4099

Co-authored-by: Leonid Tsarev <leotsarev@users.noreply.github.com>
public string FieldName { get; } = fieldName;
}

public class FieldValueInvalidException(string fieldName, int variantId)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Здесь должно быть типизированный id поля


namespace JoinRpg.Portal.Test.XGameApi;

public class CharacterFieldsApiTest
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ненужный тест, удалить

Copy link
Copy Markdown
Member

@leotsarev leotsarev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Добавить интеграционный тест в XApiCharacterTests

@leotsarev
Copy link
Copy Markdown
Member

@claude fix review comments

@claude
Copy link
Copy Markdown
Contributor Author

claude bot commented Mar 29, 2026

Claude finished @leotsarev's task in 15m 24s —— View job


Исправление замечаний ревью

  • Изучить замечания ревью и текущий код
  • Использовать типизированный ID поля в FieldValueInvalidException
  • Удалить ненужный тест из CharacterFieldsApiTest.cs
  • Добавить интеграционный тест в XApiCharacterTests

Что сделано

FieldValueInvalidException теперь принимает ProjectFieldIdentification вместо string fieldName:

public class FieldValueInvalidException(ProjectFieldIdentification fieldId, int variantId)
    : JoinRpgBaseException($"Поле {fieldId}: значение {variantId} не является допустимым вариантом")
{
    public ProjectFieldIdentification FieldId { get; } = fieldId;
    public int VariantId { get; } = variantId;
}

В FieldSaveStrategyBase.csfield.Field.Id вместо field.Field.Name.

Удалён CharacterFieldsApiTest.cs (ненужный unit-тест контроллера).

Добавлен интеграционный тест в XApiCharacterTests:

[Fact]
public async Task SetDropdownField_InvalidVariantId_Returns400()

| Branch

…ный тест

- FieldValueInvalidException принимает ProjectFieldIdentification вместо string
- Удален дублирующий unit-тест CharacterFieldsApiTest
- Добавлен интеграционный тест SetDropdownField_InvalidVariantId_Returns400

Co-authored-by: Leonid Tsarev <leotsarev@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Установка некорректных значений

1 participant