Closes #125.
This commit is contained in:
@@ -6,7 +6,7 @@ on:
|
||||
- main
|
||||
|
||||
env:
|
||||
VERSION: 3.9.3
|
||||
VERSION: 3.9.4
|
||||
|
||||
jobs:
|
||||
# ЧАСТЬ 1: Собираем образы и кладем в Gitea (чтобы делиться с ребятами)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<Version>3.9.3</Version>
|
||||
<Version>3.9.4</Version>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<LangVersion>preview</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
|
||||
+3
-3
@@ -49,7 +49,7 @@ services:
|
||||
crond -f
|
||||
|
||||
bot:
|
||||
image: git.codeanddice.ru/toutsu/gmrelay-bot:3.9.3
|
||||
image: git.codeanddice.ru/toutsu/gmrelay-bot:3.9.4
|
||||
restart: always
|
||||
depends_on:
|
||||
db:
|
||||
@@ -67,7 +67,7 @@ services:
|
||||
retries: 3
|
||||
|
||||
discord:
|
||||
image: git.codeanddice.ru/toutsu/gmrelay-discord-bot:3.9.3
|
||||
image: git.codeanddice.ru/toutsu/gmrelay-discord-bot:3.9.4
|
||||
restart: always
|
||||
depends_on:
|
||||
db:
|
||||
@@ -86,7 +86,7 @@ services:
|
||||
retries: 3
|
||||
|
||||
web:
|
||||
image: git.codeanddice.ru/toutsu/gmrelay-web:3.9.3
|
||||
image: git.codeanddice.ru/toutsu/gmrelay-web:3.9.4
|
||||
restart: always
|
||||
depends_on:
|
||||
db:
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<div class="nav-version">v3.9.3</div>
|
||||
<div class="nav-version">v3.9.4</div>
|
||||
</div>
|
||||
</Authorized>
|
||||
<NotAuthorized>
|
||||
|
||||
@@ -33,16 +33,18 @@ public sealed class DiscordWizardStepCapacityRenderTests
|
||||
Assert.Contains(labels, l => l.Contains("Без лимита", System.StringComparison.Ordinal));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RenderCapacity_NoLimitButton_HasChoiceCustomIdForNoLimit()
|
||||
[Theory]
|
||||
[InlineData(WizardStepNames.Capacity, "wizard:btn:choice:Capacity:no_limit")]
|
||||
[InlineData(WizardStepNames.PoolSlotCapacity, "wizard:btn:choice:PoolSlotCapacity:no_limit")]
|
||||
public void Render_NoLimitButton_HasChoiceCustomIdForNoLimit(string step, string expectedCustomIdPrefix)
|
||||
{
|
||||
var draft = new WizardDraft { Step = WizardStepNames.Capacity };
|
||||
var draft = new WizardDraft { Step = step };
|
||||
var render = DiscordWizardStep.Render(draft, new WizardPayload());
|
||||
|
||||
var buttons = ExtractButtons(render);
|
||||
var noLimit = buttons.SingleOrDefault(b => b.Label?.Contains("Без лимита", System.StringComparison.Ordinal) == true);
|
||||
Assert.NotNull(noLimit);
|
||||
Assert.StartsWith("wizard:btn:choice:Capacity:no_limit", noLimit!.CustomId);
|
||||
Assert.StartsWith(expectedCustomIdPrefix, noLimit!.CustomId);
|
||||
}
|
||||
|
||||
private static System.Collections.Generic.List<string> ExtractButtonLabels(
|
||||
|
||||
@@ -14,8 +14,16 @@ public sealed class CampaignTemplatesNavigationTests
|
||||
[Fact]
|
||||
public async Task NavMenu_ShouldExposeCurrentProjectVersion()
|
||||
{
|
||||
// Read the version from Directory.Build.props (the canonical source of
|
||||
// truth) so the test doesn't need to be hand-edited on every version
|
||||
// bump. Asserting the rendered NavMenu matches the canonical version
|
||||
// catches real bugs (e.g. someone bumps Directory.Build.props but
|
||||
// forgets to update NavMenu.razor) without false alarms from a stale
|
||||
// hard-coded literal.
|
||||
var propsPath = FindRepositoryFile("Directory.Build.props");
|
||||
var version = ReadVersionFromProps(propsPath);
|
||||
var navMenu = await File.ReadAllTextAsync(FindRepositoryFile("src/GmRelay.Web/Components/Layout/NavMenu.razor"));
|
||||
Assert.Contains("v3.9.3", navMenu, StringComparison.Ordinal);
|
||||
Assert.Contains($"v{version}", navMenu, StringComparison.Ordinal);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -68,4 +76,23 @@ public sealed class CampaignTemplatesNavigationTests
|
||||
|
||||
throw new FileNotFoundException($"Could not locate repository file '{relativePath}'.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parse the <c><Version>...</Version></c> element from
|
||||
/// <c>Directory.Build.props</c>. Tolerant of whitespace, comments and
|
||||
/// attribute shuffling — the MSBuild schema for <c>Version</c> is just
|
||||
/// a plain element with a string body.
|
||||
/// </summary>
|
||||
private static string ReadVersionFromProps(string propsPath)
|
||||
{
|
||||
var doc = System.Xml.Linq.XDocument.Load(propsPath);
|
||||
var versionElement = doc.Descendants()
|
||||
.FirstOrDefault(e => e.Name.LocalName == "Version");
|
||||
Assert.NotNull(versionElement);
|
||||
var version = versionElement!.Value.Trim();
|
||||
Assert.False(
|
||||
string.IsNullOrEmpty(version),
|
||||
$"<Version> in {propsPath} is empty");
|
||||
return version;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user