Commit graph

130 commits

Author SHA1 Message Date
24046ac632
Persistance de SearchText ajoutée 2026-08-29 14:34:43 +01:00
5d1649df80
dont boot twice the app 2026-08-29 02:41:59 +01:00
e56bdd4329
dead code cleanup
Some checks failed
Dotnet build and test / build (pull_request) Failing after 7m37s
2026-08-28 20:58:10 +01:00
0034a311f2
chore(release): bump version via gitversion for 1.0.8-rc4 2026-08-26 23:08:23 +01:00
bfcb7cd2ef
disable the Xamarin.UITest
Some checks failed
Dotnet build and test / build (pull_request) Failing after 25s
2026-08-26 19:23:27 +01:00
d56ad25e6b
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
2026-08-25 23:01:00 +01:00
50a07102cb
Do not fail at attaching developer tools
Some checks failed
Dotnet build and test / build (pull_request) Failing after 10m48s
2026-08-25 21:15:04 +01:00
6d6c4f2a8a
Package renamed impact
Some checks failed
Dotnet build and test / build (pull_request) Has been cancelled
2026-08-25 20:30:39 +01:00
75b298b0f8
Fixes the Android Login process 2026-08-25 19:20:03 +01:00
dd5904f0a7
refacto Makefiles and MainView setup 2026-08-25 14:53:25 +01:00
beeac58628
test are still ok! 2026-08-25 14:16:49 +01:00
7fabee1bd1
restore the TextEditor 2026-08-24 01:43:47 +01:00
f62a020c82
don't wait from App Nav push ok on loggin succeded 2026-08-24 01:23:15 +01:00
88e1499e4b
show the window 2026-08-24 00:30:29 +01:00
246111dee1
Simpler is better 2026-08-24 00:18:07 +01:00
404bba56ab
restores the legacy behavior 2026-08-24 00:03:14 +01:00
bcd72e17d8
Merge branch 'feat/ui-testing' into release/1.0.8-rc3 2026-08-23 23:26:59 +01:00
50de5f412f
chore(release): bump version via gitversion for 1.0.8-rc3 2026-08-23 23:19:48 +01:00
394d81a49f
ignore the failling test
Some checks failed
Forgejo Release / release (push) Failing after 29s
2026-08-23 23:09:37 +01:00
e007c7d6eb
refacto static extension for Service provider 2026-08-23 23:07:40 +01:00
d0186d41b0
test are green !?! 2026-08-23 21:28:26 +01:00
426bc68d61
more reliable 2026-08-23 18:34:34 +01:00
22e1705e44
Fixes the test suite 2026-08-22 18:31:30 +01:00
151df1c531
build(android): align with .NET 11 SDK + drop unused AndroidX refs
Follow-up to the 0c693237 'sdk version bump' (net10.0 -> net11.0
across the whole solution) and the work to get PostIt.Android building
under the .NET 11 preview SDK installed locally (~/.dotnet):

- Drop Xamarin.AndroidX.Browser and Xamarin.AndroidX.Core.SplashScreen
  from PostIt/Directory.Packages.props. They are not pulled by
  Avalonia.Android 12.1.1 (its nuspec declares AppCompat + Window only),
  are not referenced by any PostIt code, and we already removed the
  SplashScreen XML attributes from styles.xml in commit 6b2867c8.

- PostIt.Android.csproj: bump SupportedOSPlatformVersion 23.0.0 ->
  24.0.0. Required by the Microsoft.Android.Sdk.Linux 37.0.0-preview.7
  target (Android API 24 is the new minimum under .NET 11); below that
  the build emits NETSDK warnings about an EoL target SDK level.

Build status (PostIt.Android, Debug, android-x64, EmbedAssemblies):
  0 errors, 15 warnings, ~4m24s cold. The locally-installed .NET 11
  SDK 11.0.100-preview.7.26381.103 needs /opt/android-sdk/platforms
  /android-37.0 to exist; Paul has set up a symlink to the
  android-37.1 (Android 17 preview) install until Microsoft catches
  up the SDK manifest.

PostIt.Tests: 49/62 passing after the migration; 13 new failures,
most of them HttpListener teardown noise around the OIDC stub
authority suite. Out of scope of this commit.
2026-08-22 18:04:27 +01:00
0c693237a3
sdk version bump 2026-08-22 16:58:08 +01:00
77a7693276
Revert "build(android): downgrade Avalonia 12 -> 11.3.20 + Avalonia.Maui 11.3.0"
This reverts commit a4bc7b5e6a.
2026-08-22 16:09:35 +01:00
a4bc7b5e6a
build(android): downgrade Avalonia 12 -> 11.3.20 + Avalonia.Maui 11.3.0
WIP: addressing the layer-3 WindowingPlatformStub.NotSupportedException
crash on PostIt.Android by downgrading to the Avalonia 11 / Avalonia.Maui
11 stack, where the Android runtime platform layer (IWindowingPlatform)
gets properly bound via the MAUI embedding extension instead of being
left as a stub.

Touched files:

- src/PostIt/Directory.Packages.props:
  - Avalonia 12.1.1 -> 11.3.20 (Avalonia, Avalonia.Android,
    Avalonia.AvaloniaEdit, Avalonia.Browser, Avalonia.Desktop,
    Avalonia.Fonts.Inter, Avalonia.Themes.Fluent).
  - New: Avalonia.Maui 11.3.0.
  - Microsoft.Maui.Essentials 10.0.100 -> 8.0.100 (aligns with the
    Microsoft.Maui.Controls 8.0.x family that Avalonia.Maui 11.3.0
    pulls transitively).
  - New: Microsoft.Maui.Controls 8.0.100.

- src/PostIt/PostIt.Android/PostIt.Android.csproj:
  - TargetFramework net10.0-android -> net9.0-android36.0 (Avalonia
    Android 11.3.20 targets net8.0-android34.0, but the
    compat-ascending fallback lets us consume from net9.0-android36.0
    against the API-36 platform that's already installed locally).
  - Add Avalonia.Maui PackageReference.
  - Restore Microsoft.Maui.Essentials PackageReference (left in
    earlier removal during the MAUI-cause-of-crash hypothesis check).

- src/PostIt/PostIt/PostIt.csproj: TargetFramework net10.0 -> net9.0
  (must match what PostIt.Android consumes transitively, otherwise
  the build chain breaks).

- src/Yavsc.Abstract/Yavsc.Abstract.csproj: net10.0 -> net9.0 (same
  reason; six other consumers stay on net10.0 and pick up the new
  assembly via standard TFM compat).

- src/Yavsc.Api.Client/Yavsc.Api.Client.csproj: net10.0 -> net9.0
  (same reason).

- src/PostIt/PostIt.Android/Application.cs: rewritten as a bare
  Android.App.Application. Avalonia 11 no longer ships
  AvaloniaAndroidApplication<TApp> (that was an Avalonia 12
  introduction); the Avalonia init now lives in MainActivity via
  AvaloniaMainActivity<TApp>. The class is kept only so the
  [Application] manifest entry remains.

- src/PostIt/PostIt.Android/MainActivity.cs: now inherits
  AvaloniaMainActivity<App> and overrides CustomizeAppBuilder to
  chain .UseMaui<PostIt.Maui.MauiEmbeddingApp>(this) before
  .WithInterFont(). AvaloniaMainActivity<TApp> handles the
  AvaloniaView initialisation in OnCreate.

- src/PostIt/PostIt/Maui/MauiEmbeddingApp.cs (new): empty
  Microsoft.Maui.Controls.Application used as the embedding host for
  Avalonia.Maui. The MAUI window it produces is consumed by the
  Avalonia.Maui embedding pipeline and never surfaces to the user;
  Avalonia owns the actual visual tree.

Build status: 11 errors remaining, all CS0234 / CS0246 against
'Avalonia.Controls.ContentPage'. Avalonia 11 did not ship
ContentPage (it's an Avalonia 12 type, presumably for MAUI parity).
All seven PostIt pages inherit ContentPage today and need to be
reworked to UserControl before the build can complete. Follow-up
commit will do that.

Reference: AGENTS.md, 'PostIt.Android boot crash sur AVD x86_64 :
investigation par couches', couche 3.
2026-08-22 15:56:52 +01:00
6b2867c84a
build(android): drop unused Xamarin.AndroidX.SplashScreen resources
- PostIt.Android.csproj: drop Xamarin.AndroidX.Core.SplashScreen and
  Xamarin.AndroidX.Browser. Neither is pulled transitively by
  Avalonia.Android 12.1.1 (its nuspec declares only AppCompat +
  Window), and they are not referenced anywhere in PostIt code.
- Resources/values-v31/styles.xml: drop the windowSplashScreen*
  items and the 'postSplashScreenTheme' reference, which require
  the dropped SplashScreen package. We fall back to the system
  splash screen on Android 12+ devices; a custom one can come
  back when we add it on purpose.
2026-08-22 15:32:43 +01:00
634607ba18
code REORG, pour partage pkg version entre app et tests 2026-08-22 15:17:08 +01:00
af0d4dfedb
app domain name 2026-08-22 14:18:03 +01:00
58aaea307a
chore(android): bump Avalonia to 12.1.1, raise logcat boot wait
Two adjustments after the Android boot investigation
(cf. AGENTS.md section 'PostIt.Android boot crash sur AVD
x86_64 : investigation par couches'):

- Avalonia 12.0.4 -> 12.1.1 in PostIt/Directory.Packages.props.
  12.1.x is the current Avalonia 12 stable line; 12.0.4 had a
  known WindowingPlatformStub regression on Pixel x86_64 AVDs
  (issue AvaloniaUI/Avalonia#18459 family). 12.1.1 does not
  actually fix the layer-3 NotSupportedException on this
  specific Pixel + Android 16 + x86_64 combination (verified
  by rebuild + logcat capture on 2026-08-22), but staying on
  12.0.4 forever is wrong, and 12.1.1 is the baseline most
  users are on. The Makefile qemu-build already passes
  -p:EmbedAssembliesIntoApk=true and -p:RuntimeIdentifier=
  android-x64 to work around the Fast Deployment / AOT issues.

- qemu-logcat-boot LOGCAT_BOOT_WAIT 15s -> 30s. The crash
  reproduces well under 5s, so the wait value is moot for
  diagnosis, but 30s gives a wider margin when the runtime
  happens to be slow to JIT (boot tries to draw a frame in
  texture-pass scenarios). Override on the command line is
  unchanged: 'make qemu-logcat-boot LOGCAT_BOOT_WAIT=N'.

No MAUI change: Microsoft.Maui.Essentials was deliberately
unhooked during a hypothesis check and put back to keep the
contact-flow code path stable. The MAUI removal made no
difference to the crash (verified).
2026-08-22 14:06:48 +01:00
a29cba8dba
monodroid ne crashe plus, l'app se lance 2026-08-22 06:42:12 +01:00
7f03dd7272
using clauses cleanup 2026-08-22 03:34:48 +01:00
404d406931
Testing circle was authorized
Some checks failed
Dotnet build and test / build (pull_request) Has been cancelled
2026-08-21 17:21:54 +01:00
b82b6722c7
fixes a 500 in prod and the associated test 2026-08-21 16:58:27 +01:00
88461786ee
Roll back refacto on Posit.Tests 2026-08-21 16:18:20 +01:00
a44c04ad77
feat(postit): circles+ACL UI, blog fixture→SQLite, seed default user
Bundled end-of-branch commit on feat/postit-acl-members.

PostIt UI for circles + per-post ACL
- Reorganise PostIt.Tests into Auth/ and Blogs/ subfolders
  (Bearer/OIDC scope tests vs. blog API fakes live where they
  belong) and introduces PostItHeadlessCollection so the
  Avalonia.Headless tests share a single xUnit collection
  instead of contending with the EF-Core test host.
- Adds BlogAclApiTests (a brand-new behavioural layer over
  POST /api/v1/blogacl) and the fakes it relies on
  (BlogApiTestFakes, BlogPostAuthorDtoTests, AddCircleMember
  DialogTests); pulls UserId-through-OIDC-sub path into
  BearerScopeTests / FakeAuthorizingBrowser /
  OidcStubAuthority.
- App.axaml.cs gets a small PushPageAsync touch-up the new
  tests rely on.
- Drops UnitTest1.cs (xUnit scaffold, never used).

Yavsc.Blogs.Tests — SQLite instead of InMemory
- Bumps Yavsc.Blogs.Tests.csproj on
  Microsoft.EntityFrameworkCore.Sqlite and rewrites
  BlogsWebServerFixture to hold a single shared
  SqliteConnection (Cache=Shared) for the fixture lifetime,
  with a sync Dispose close to dodge async teardown hangs.
  Reason: the EF Core InMemory provider silently ignores FKs,
  which masked the kind of bug we are about to pin in the
  ACL tests. SQLite enforces them, so any future INSERT that
  forgets to seed its parent rows fails loudly here instead
  of passing the test and breaking prod.
- PublishEndpointTests and BlogApiSmokeTests get a one-line
  tweak to follow the new connection lifecycle.

Foreign-key fallout: seed the default user in the fixture
- Adds BlogsWebServerFixture.SeedUser(userName). Now that
  SQLite enforces BlogPost.AuthorId → AspNetUsers.Id, every
  test that POST/PUT/DELETE a BlogPost and sends AuthorId=
  'tester' in the payload needs an AspNetUsers row to satisfy
  the FK or it returns 500 with SQLite Error 19.
- BlogApiTests wraps the existing ResetDatabase with a
  ResetAndSeedDefaultUser helper for the six mutating tests;
  the four GET-only and ModelState-only tests keep the bare
  ResetDatabase.
- Side benefit: every test in Yavsc.Blogs.Tests now finishes
  cleanly instead of hanging at teardown — previously a stuck
  test held the shared SqliteConnection open and the next
  tests waited indefinitely.

Verified: dotnet test src/Yavsc.Blogs.Tests passes 25/25
green from a clean run, no fixture teardown hang.
2026-08-20 23:59:21 +01:00
6825f74308
refacto API prefix + nav.back 2026-08-20 20:50:52 +01:00
bd6ca9d11f
fix(postit): repair Circles bindings + align UserSearchApi route
All checks were successful
Dotnet build and test / build (pull_request) Successful in 12m51s
- CirclesPage: drop VisualRoot/MainWindow hack, switch to App.PushPageAsync(vm)
- CirclesPageViewModel: make OpenAddMemberAsync public so Avalonia XAML trampoline can call it
- AddCircleMemberDialog: bind SearchAsync/Add (drop Command suffix)
- UserSearchApiController: route under Constants.APIPrefix (= api/v1/user-search), matching the rest of Yavsc.Blogs controllers and the PostIt client's BlogsApiUrl default
2026-08-20 07:22:07 +01:00
803e778208
access the post selector 2026-08-19 20:30:34 +01:00
6d9bb82b61
PostIt: register dialog pages in DI for ViewLocator resolution 2026-08-19 19:53:38 +01:00
600bb81be1
PostIt: show ViewLocator fallback errors in navigation 2026-08-19 17:32:51 +01:00
12a71ada6a
doc: align navigation docs with VM-first pattern
The two recent commits (3fbbafc4, 0065de70) replaced the
OpenSettingsRequested event + CurrentViewModel assignment with
App.PushPageAsync(vm): the VM resolves the target ViewModel
through DI, App resolves the Control through the ViewLocator,
guards against double-push, and pushes via NavRoot. The docs
were still describing the pre-refactor world.

Update three places:

- CONTRIBUTING.md — the "Navigation (PostIt)" rule now
  describes App.PushPageAsync as the single channel and shows
  the canonical OpenSettings command as the example.
- doc/architecture/postit.md — the Navigation section
  distinguishes VM-first navigation (App.PushPageAsync) from
  lifecycle signals (LoginSucceeded, LogoutCompleted) and
  drops the obsolete OpenSettingsRequested row.
- src/PostIt/PostIt/App.axaml.cs — refresh the SettingsPage
  singleton justification: point (c) now describes the
  anti-empilement guard inside PushPageAsync, not the
  OpenSettingsRequested handler that no longer exists.

No production behaviour change — doc only (and the inline
comment that referenced a removed event).
2026-08-19 17:17:22 +01:00
0065de7000
PostIt: homogenize VM-first navigation flows 2026-08-19 17:06:46 +01:00
3fbbafc454
PostIt: route VM navigation through ViewLocator 2026-08-19 17:01:58 +01:00
e35bc273a3
refacto BlogPost 2026-08-19 14:19:45 +01:00
84f3ffa9c2
test(postit): pin inoperative toolbar buttons (ACL, Mes cercles, [DEV] Signature) with headless UI tests
Three buttons on MainPage's toolbar are reported as inoperative
in the running app: ACL, Mes cercles, and [DEV] Signature. They
click but no dialog / page opens.

This commit adds headless UI tests that drive each button via
the Avalonia headless harness (KeyPressQwerty(Enter) on a
focused, x:Name'd button, per the CalculatorTests pattern in
Avalonia.Samples) and asserts the post-click top of
NavRoot.NavigationStack is a non-null Page.

The tests fail today on every button (stack size before == after
== 1): the click does not push anything. The bug is the user's
real complaint — the test is now wired to catch it.

To make the buttons reachable by the harness without walking
the visual tree (which does not see buttons hosted inside a
NavigationPage), name the two unnamed buttons:

- ACL  -> ManageAclButton
- Mes cercles -> OpenCirclesButton

([DEV] Signature was already named OpenSignatureDevButton.)

The XAML change is cosmetic; bindings and commands are
untouched. The test pattern follows SessionStatusBannerTests:
new MainWindow().Show(), PushAsync(MainPage), drive controls via
their generated x:Name fields.
2026-08-18 23:24:08 +01:00
1ab6e59fe2
chore(release): bump version via gitversion for 1.0.8-rc1 2026-08-18 19:18:36 +01:00
5fe0d9eb45 Merge pull request 'release/1.0.7-rc1' (#36) from release/1.0.7-rc1 into release/1.0.7
Some checks failed
Dotnet build and test / log-the-inputs (pull_request) Successful in 10s
Dotnet build and test / build (pull_request) Successful in 6m45s
Forgejo Release / release (push) Failing after 29s
Reviewed-on: #36
2026-08-18 17:27:48 +01:00
15f018117f
chore(release): bump version via gitversion for 1.0.7-rc1 2026-08-18 17:20:59 +01:00