Skip to content

Commit 667dc75

Browse files
committed
refactor: update InstallPackageAsync and UpdatePackageListAsync methods to use async/await pattern and simplify observable subscriptions
1 parent 19f8d6a commit 667dc75

5 files changed

Lines changed: 17 additions & 16 deletions

File tree

src/PackageManager/AptPackageManager.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,24 @@ internal sealed class AptPackageManager : PackageManager
1515
public sealed override Task<bool> VerifyAsync(CancellationToken cancellationToken)
1616
=> Process.CheckIfExecutableExistsAsync(ExecutablePath, ["--version"], cancellationToken);
1717

18-
public sealed override Task InstallPackageAsync(string packageName, CancellationToken cancellationToken)
18+
public sealed async override Task InstallPackageAsync(string packageName, CancellationToken cancellationToken)
1919
{
2020
Process process = new(ExecutablePath, "install", "-y", packageName);
2121

2222
using IDisposable stdOutSubscription = process.StdOut.Subscribe(OnStdOut);
2323
using IDisposable stdErrSubscription = process.StdErr.Subscribe(OnStdErr);
2424

25-
return process.ExecuteAsync(cancellationToken);
25+
await process.ExecuteAsync(cancellationToken).ConfigureAwait(false);
2626
}
2727

28-
public sealed override Task UpdatePackageListAsync(CancellationToken cancellationToken)
28+
public sealed async override Task UpdatePackageListAsync(CancellationToken cancellationToken)
2929
{
3030
Process process = new(ExecutablePath, "update");
3131

3232
using IDisposable stdOutSubscription = process.StdOut.Subscribe(OnStdOut);
3333
using IDisposable stdErrSubscription = process.StdErr.Subscribe(OnStdErr);
3434

35-
return process.ExecuteAsync(cancellationToken);
35+
await process.ExecuteAsync(cancellationToken).ConfigureAwait(false);
3636
}
3737
public sealed override async Task<bool> CheckIfPackageIsInstalledAsync(string packageName, CancellationToken cancellationToken)
3838
{

src/PackageManager/HomebrewPackageManager.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,24 @@ internal sealed class HomebrewPackageManager : PackageManager
1515
public sealed override Task<bool> VerifyAsync(CancellationToken cancellationToken)
1616
=> Process.CheckIfExecutableExistsAsync(ExecutablePath, ["--version"], cancellationToken);
1717

18-
public sealed override Task InstallPackageAsync(string packageName, CancellationToken cancellationToken)
18+
public sealed async override Task InstallPackageAsync(string packageName, CancellationToken cancellationToken)
1919
{
2020
Process process = new(ExecutablePath, "install", packageName);
2121

2222
using IDisposable stdOutSubscription = process.StdOut.Subscribe(OnStdOut);
2323
using IDisposable stdErrSubscription = process.StdErr.Subscribe(OnStdErr);
2424

25-
return process.ExecuteAsync(cancellationToken);
25+
await process.ExecuteAsync(cancellationToken).ConfigureAwait(false);
2626
}
2727

28-
public sealed override Task UpdatePackageListAsync(CancellationToken cancellationToken)
28+
public sealed async override Task UpdatePackageListAsync(CancellationToken cancellationToken)
2929
{
3030
Process process = new(ExecutablePath, "update");
3131

3232
using IDisposable stdOutSubscription = process.StdOut.Subscribe(OnStdOut);
3333
using IDisposable stdErrSubscription = process.StdErr.Subscribe(OnStdErr);
3434

35-
return process.ExecuteAsync(cancellationToken);
35+
await process.ExecuteAsync(cancellationToken).ConfigureAwait(false);
3636
}
3737
public sealed override async Task<bool> CheckIfPackageIsInstalledAsync(string packageName, CancellationToken cancellationToken)
3838
{

src/PackageManager/PackageManager.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ namespace DevEnv;
77

88
internal abstract class PackageManager : IPackageManager, IDisposable
99
{
10-
private readonly ReplaySubject<string> stdOut = new();
10+
private readonly Subject<string> stdOut = new();
1111

12-
private readonly ReplaySubject<string> stdErr = new();
12+
private readonly Subject<string> stdErr = new();
1313

1414
public abstract string Name { get; internal set; }
1515

16-
public Observable<string> StdOut => stdOut.AsObservable();
16+
public Observable<string> StdOut => stdOut;
1717

18-
public Observable<string> StdErr => stdErr.AsObservable();
18+
public Observable<string> StdErr => stdErr;
1919

2020
public abstract Task<bool> VerifyAsync(CancellationToken cancellationToken);
2121

tests/PackageManagerTests/AptPackageManagerTests/src/MethodTests/UpdatePackageListAsyncMethodTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public async Task ShouldUpdatePackageListSuccessfully(CancellationToken cancella
1616
// Arrange
1717
List<string> stdOut = [];
1818
AptPackageManager packageManager = new();
19-
packageManager.StdOut.Subscribe(line => stdOut.Add(line));
19+
packageManager.StdOut.Subscribe(stdOut.Add);
2020

2121
// Act
2222
await packageManager.UpdatePackageListAsync(cancellationToken).ConfigureAwait(false);

tests/PackageManagerTests/HomebrewTests/src/HomebrewPackageManagerTests/MethodTests/UpdatePackageListAsyncMethodTests.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Collections.Generic;
23
using System.Linq;
34
using System.Threading;
@@ -14,14 +15,14 @@ public sealed class TheUpdatePackageListAsyncMethod
1415
public async Task ShouldUpdatePackageListSuccessfully(CancellationToken cancellationToken)
1516
{
1617
// Arrange
17-
List<string> stdOut = [];
18+
List<string> stdError = [];
1819
HomebrewPackageManager packageManager = new();
19-
packageManager.StdOut.Subscribe(stdOut.Add);
20+
using IDisposable subscription = packageManager.StdErr.Subscribe(stdError.Add);
2021

2122
// Act
2223
await packageManager.UpdatePackageListAsync(cancellationToken).ConfigureAwait(false);
2324

2425
// Assert
25-
stdOut.Last().Should().Contain("Reading package lists... Done", because: "The package list update should complete successfully.");
26+
stdError.First().Should().Contain("Updating Homebrew", because: "The package list update should complete successfully.");
2627
}
2728
}

0 commit comments

Comments
 (0)