Update README.md with additional SonarCloud badges and improve CI workflow for coverage reporting
ci / build-backend (push) Successful in 2m34s
ci / build-frontend (push) Successful in 41s
ci / tests (push) Successful in 2m55s
ci / sonar (push) Successful in 5m21s

Enhanced the README.md file by adding new SonarCloud badges for coverage, bugs, code smells, security rating, and maintainability rating. Updated the CI workflow to remove coverage collection from the test step, as it is now handled by SonarCloud, streamlining the process and ensuring accurate badge representation.
This commit is contained in:
Leonid Pershin
2026-07-27 03:19:18 +03:00
parent 464355434b
commit 790d01b587
22 changed files with 2891 additions and 99 deletions
@@ -0,0 +1,84 @@
using Microsoft.EntityFrameworkCore;
using TeleWave.Application.Settings.GetSiteSettings;
using TeleWave.Application.Settings.UpdateSiteSettings;
using TeleWave.Application.Tests.Support;
using TeleWave.Infrastructure.Settings;
using Xunit;
namespace TeleWave.Application.Tests.Settings;
/// <summary>
/// Глобальные настройки сайта поверх key-value таблицы: значения по умолчанию, upsert (второй раз
/// пишем в ту же строку, а не заводим новую) и нормализация списка языков.
/// </summary>
public class SiteSettingsTests
{
[Fact]
public async Task Get_WithoutStoredValues_ReturnsDefaults()
{
var fixture = new TestDb();
await using var db = fixture.New();
var dto = await new GetSiteSettingsQueryHandler(new SiteSettings(db)).Handle(
new GetSiteSettingsQuery(),
CancellationToken.None
);
// Открытая регистрация и переключение по номерам по умолчанию выключены.
Assert.False(dto.RegistrationEnabled);
Assert.False(dto.ChannelNumbersEnabled);
Assert.Equal(string.Empty, dto.PreferredAudioLanguages);
}
[Fact]
public async Task Update_StoresValues_AndNormalizesLanguages()
{
var fixture = new TestDb();
await using (var db = fixture.New())
{
var result = await new UpdateSiteSettingsCommandHandler(new SiteSettings(db)).Handle(
new UpdateSiteSettingsCommand(true, " RUS , ,eng ", true),
CancellationToken.None
);
Assert.True(result.IsSuccess);
// Сохранение — за UnitOfWorkBehavior команды, в тесте делаем его руками.
await db.SaveChangesAsync(CancellationToken.None);
}
await using (var db = fixture.New())
{
var dto = await new GetSiteSettingsQueryHandler(new SiteSettings(db)).Handle(
new GetSiteSettingsQuery(),
CancellationToken.None
);
Assert.True(dto.RegistrationEnabled);
Assert.True(dto.ChannelNumbersEnabled);
Assert.Equal("rus,eng", dto.PreferredAudioLanguages);
}
}
[Fact]
public async Task Update_Twice_RewritesSameRows()
{
var fixture = new TestDb();
foreach (var enabled in new[] { true, false })
{
await using var db = fixture.New();
await new UpdateSiteSettingsCommandHandler(new SiteSettings(db)).Handle(
new UpdateSiteSettingsCommand(enabled, "rus", enabled),
CancellationToken.None
);
await db.SaveChangesAsync(CancellationToken.None);
}
await using var verify = fixture.New();
var settings = new SiteSettings(verify);
// Ключей ровно три — повторная запись обновляет строку, а не добавляет вторую.
Assert.Equal(3, await verify.AppSettings.CountAsync());
Assert.False(await settings.IsRegistrationEnabledAsync(CancellationToken.None));
Assert.Equal("rus", await settings.GetPreferredAudioLanguagesAsync(CancellationToken.None));
Assert.False(await settings.AreChannelNumbersEnabledAsync(CancellationToken.None));
}
}