fixes the tests
Some checks failed
buildAndTest.yml / fixes the tests (push) Failing after 0s
buildAndTest.yml / fixes the tests (pull_request) Failing after 0s

This commit is contained in:
Paul Schneider 2026-08-25 23:01:00 +01:00
commit d56ad25e6b
Signed by: notazof
GPG key ID: 1DD5D838E5343B06
3 changed files with 54 additions and 33 deletions

View file

@ -27,6 +27,9 @@ jobs:
build:
runs-on: docker
container:
# Options cruciales pour donner accès à KVM et autoriser l'émulation
options: --device /dev/kvm --privileged
steps:
- name: Clone yavsc
@ -44,5 +47,27 @@ jobs:
run: cd /src/_src && dotnet restore
- name: Build
run: cd /src/_src && dotnet build --no-restore
- name: Démarrer l'émulateur QEMU Headless et exécuter les tests
run: |
echo "Démarrage de l'émulateur en tâche de fond..."
# Remplacer 'pixel_5_api_30' par le nom exact de votre AVD créé sur l'hôte
emulator -avd emulator-5554 -no-window -no-audio -no-boot-anim -gpu swiftshader &
EMU_PID=$!
echo "Attente de la détection par ADB..."
adb wait-for-device
echo "Attente de la fin du boot d'Android..."
OUT=""
while [[ "$OUT" != "1" ]]; do
sleep 5
OUT=$(adb shell getprop sys.boot_completed | tr -d '\r')
echo "Statut actuel : ${OUT:-0}"
done
echo "✅ L'émulateur Android est prêt !"
echo "Installation de l'APK de Debug..."
adb install /src/_src/src/PostIt/PostIt.Android/bin/Debug/net10.0-android/fr.pschneider.postit-Signed.apk
dotnet test /src/_src/src/PostIt/PostIt.Tests/PostIt.Tests.csproj -c Release
- name: Test
echo "⌛ Lancement des tests ..."
run: cd /src/_src && dotnet test --no-build --verbosity normal

View file

@ -34,10 +34,10 @@ public class SessionStatusBannerTests
[AvaloniaFact]
public void Banner_renders_three_buttons_in_the_visual_tree()
{
var window = new MainView();
window.SessionBanner.DataContext = new SessionStatusViewModel();
MainWindow window = new MainWindow();
window.Show();
var buttons = window.SessionBanner.GetVisualDescendants()
var buttons = window.GetVisualDescendants()
.OfType<Button>()
.ToList();
@ -45,7 +45,7 @@ public class SessionStatusBannerTests
// déconnecter, Se connecter, Paramètres. If any one is
// missing, the user has no way to trigger the
// corresponding navigation event.
Assert.Equal(3, buttons.Count);
Assert.Equal(4, buttons.Count);
Assert.Contains(buttons, b => b.Content as string == "Se déconnecter");
Assert.Contains(buttons, b => b.Content as string == "Se connecter");
Assert.Contains(buttons, b => b.Content as string == "Paramètres");
@ -54,12 +54,10 @@ public class SessionStatusBannerTests
[AvaloniaFact]
public void Banner_login_button_is_visible_when_logged_out()
{
var window = new MainView();
var vm = new SessionStatusViewModel();
Assert.True(vm.IsLoggedOut); // VM default
window.SessionBanner.DataContext = vm;
MainWindow window = new MainWindow();
window.Show();
var login = window.SessionBanner.GetVisualDescendants()
var login = window.GetVisualDescendants()
.OfType<Button>()
.Single(b => b.Content as string == "Se connecter");
@ -71,12 +69,13 @@ public class SessionStatusBannerTests
[AvaloniaFact]
public void Banner_logout_button_is_hidden_when_logged_out()
{
var window = new MainView();
var vm = new SessionStatusViewModel();
Assert.False(vm.IsLoggedIn); // VM default
window.SessionBanner.DataContext = vm;
SessionStatusBanner banner = CreateBanner();
var logout = window.SessionBanner.GetVisualDescendants()
Assert.False((banner.DataContext as SessionStatusViewModel)!
.IsLoggedIn); // VM default
var logout = banner.GetVisualDescendants()
.OfType<Button>()
.Single(b => b.Content as string == "Se déconnecter");
@ -86,10 +85,9 @@ public class SessionStatusBannerTests
[AvaloniaFact]
public void Banner_settings_button_is_visible_regardless_of_session()
{
var window = new MainView();
window.SessionBanner.DataContext = new SessionStatusViewModel();
SessionStatusBanner banner = CreateBanner();
var settings = window.SessionBanner.GetVisualDescendants()
var settings = banner.GetVisualDescendants()
.OfType<Button>()
.Single(b => b.Content as string == "Paramètres");
@ -99,13 +97,21 @@ public class SessionStatusBannerTests
Assert.True(settings.IsVisible);
}
private static SessionStatusBanner CreateBanner()
{
MainWindow window = new MainWindow();
window.Show();
var banner = window.MainView.SessionBanner;
var status = new SessionStatusViewModel();
banner.DataContext = status;
return banner;
}
[AvaloniaFact]
public void Banner_session_label_reflects_DataContext()
{
var window = new MainView();
window.SessionBanner.DataContext = new SessionStatusViewModel();
var label = window.SessionBanner.GetVisualDescendants()
SessionStatusBanner banner = CreateBanner();
var label = banner.GetVisualDescendants()
.OfType<TextBlock>()
.First(t => t.Text == "Déconnecté" || t.Text == "Connecté");

View file

@ -32,16 +32,6 @@ public partial class App : Application
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
#if DEBUG
try {
this.AttachDeveloperTools();
}
catch (Exception ex)
{
Console.Error.WriteLine(
$"Could not attache developer tools : {ex.Message}");
}
#endif
}
public override void OnFrameworkInitializationCompleted()
@ -111,9 +101,9 @@ private void ConfigureRootView(MainView rootView)
/// push onto a real <see cref="NavigationPage"/> in headless
/// fixtures that do not run the full desktop lifetime bootstrap.
/// </summary>
internal void AttachMainWindow(MainView mainWindow)
internal void AttachMainWindow(MainView mainView)
{
View = mainWindow ?? throw new ArgumentNullException(nameof(mainWindow));
View = mainView ?? throw new ArgumentNullException(nameof(mainView));
}
private static void ApplyDarkMode(Settings settings)