postit-tests: cover rdv suggested address panel
This commit is contained in:
parent
247c100344
commit
7a4cd9e1cc
2 changed files with 83 additions and 0 deletions
79
src/PostIt/PostIt.Tests/RdvPageHeadlessTests.cs
Normal file
79
src/PostIt/PostIt.Tests/RdvPageHeadlessTests.cs
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
using Avalonia.Controls;
|
||||
using Avalonia.Headless.XUnit;
|
||||
using PostIt.ViewModels;
|
||||
using PostIt.ViewModels.Commands;
|
||||
using PostIt.Views.Commands;
|
||||
using Yavsc.Abstract.Workflow;
|
||||
using Yavsc.Api.Client;
|
||||
|
||||
namespace PostIt.Tests;
|
||||
|
||||
public class RdvPageHeadlessTests
|
||||
{
|
||||
[AvaloniaFact]
|
||||
public void Suggested_address_panel_is_hidden_by_default()
|
||||
{
|
||||
var page = CreatePage(out _);
|
||||
|
||||
var panel = page.FindControl<Grid>("SuggestedAddressPanel");
|
||||
var progress = page.FindControl<ProgressBar>("SuggestedAddressProgress");
|
||||
|
||||
Assert.NotNull(panel);
|
||||
Assert.NotNull(progress);
|
||||
Assert.False(panel!.IsVisible);
|
||||
Assert.False(progress!.IsVisible);
|
||||
}
|
||||
|
||||
[AvaloniaFact]
|
||||
public async Task Suggested_address_panel_and_spinner_follow_viewmodel_state()
|
||||
{
|
||||
var page = CreatePage(out var vm);
|
||||
var panel = page.FindControl<Grid>("SuggestedAddressPanel")!;
|
||||
var progress = page.FindControl<ProgressBar>("SuggestedAddressProgress")!;
|
||||
var applyButton = page.FindControl<Button>("ApplySuggestedAddressButton")!;
|
||||
|
||||
vm.Address = "Saisie manuelle";
|
||||
vm.NotifyReverseGeocodingStarted();
|
||||
await Task.Delay(50);
|
||||
|
||||
Assert.True(panel.IsVisible);
|
||||
Assert.True(progress.IsVisible);
|
||||
Assert.False(applyButton.IsVisible);
|
||||
|
||||
vm.ApplyResolvedAddress("10 rue de Rivoli, 75001 Paris");
|
||||
await Task.Delay(50);
|
||||
|
||||
Assert.True(panel.IsVisible);
|
||||
Assert.False(progress.IsVisible);
|
||||
Assert.True(applyButton.IsVisible);
|
||||
}
|
||||
|
||||
private static RdvPage CreatePage(out RdvViewModel vm)
|
||||
{
|
||||
vm = new RdvViewModel(
|
||||
new ActivityInfo { Code = "dev", Name = "Développement" },
|
||||
new ActivityUserDisplayItem { PerformerId = "perf-1", UserName = "Alice" },
|
||||
new CommandFormSummary { Id = 12, ActionName = "Rdv", Title = "Rendez-vous" },
|
||||
new BillingApiClient(new RecordingApi(), "https://business.example/api/v1/"));
|
||||
|
||||
var page = new RdvPage { DataContext = vm };
|
||||
var nav = new NavigationPage();
|
||||
_ = nav.PushAsync(page);
|
||||
var window = new Window { Content = nav };
|
||||
window.Show();
|
||||
return page;
|
||||
}
|
||||
|
||||
private sealed class RecordingApi : IYavscApiClient
|
||||
{
|
||||
public HttpClient Http { get; } = new();
|
||||
|
||||
public Task<T> CallAsync<T>(HttpMethod method, string path, object? body = null, CancellationToken ct = default)
|
||||
=> Task.FromResult(default(T)!);
|
||||
|
||||
public Task CallAsync(HttpMethod method, string path, object? body = null, CancellationToken ct = default)
|
||||
=> Task.CompletedTask;
|
||||
|
||||
public ValueTask DisposeAsync() => ValueTask.CompletedTask;
|
||||
}
|
||||
}
|
||||
|
|
@ -41,6 +41,7 @@
|
|||
<TextBox Grid.Row="6" Grid.Column="1" Text="{Binding Address, Mode=TwoWay}" Margin="0,0,0,8" />
|
||||
|
||||
<Grid Grid.Row="7"
|
||||
x:Name="SuggestedAddressPanel"
|
||||
Grid.ColumnSpan="2"
|
||||
ColumnDefinitions="*,12,Auto,12,Auto"
|
||||
Margin="0,0,0,8"
|
||||
|
|
@ -51,9 +52,12 @@
|
|||
TextWrapping="Wrap"
|
||||
Opacity="0.8" />
|
||||
<Button Grid.Column="2"
|
||||
x:Name="ApplySuggestedAddressButton"
|
||||
Content="Utiliser"
|
||||
IsVisible="{Binding HasSuggestedAddress}"
|
||||
Command="{Binding ApplySuggestedAddressCommand}" />
|
||||
<ProgressBar Grid.Column="4"
|
||||
x:Name="SuggestedAddressProgress"
|
||||
Width="80"
|
||||
IsIndeterminate="True"
|
||||
IsVisible="{Binding IsResolvingAddress}" />
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue