diff --git a/BuddySave.UnitTests/Core/ClientSessionTests.cs b/BuddySave.UnitTests/Core/ClientSessionTests.cs index a9564fb..f8c87ce 100644 --- a/BuddySave.UnitTests/Core/ClientSessionTests.cs +++ b/BuddySave.UnitTests/Core/ClientSessionTests.cs @@ -33,6 +33,27 @@ public void StartClient_ThrowsArgumentException_WhenClientPathIsNull( Assert.Equal("No client path provided. Cannot start a client session.", exception.Message); } + [Theory] + [InlineAutoMoqData("")] + [InlineAutoMoqData((string)null)] + public void StartClient_ThrowsArgumentException_WhenClientArgumentsIsNull( + string arguments, + Session session, + ClientParameters clientParameters, + ClientSession sut) + { + // Arrange + clientParameters.Arguments = arguments; + + // Act + var exception = Record.Exception(() => sut.StartClient(session, clientParameters)); + + // Assert + Assert.NotNull(exception); + Assert.IsType(exception); + Assert.Equal("No launch arguments provided for client. Cannot start a client session.", exception.Message); + } + [Theory] [AutoMoqData] public void StartClient_StartsClient( diff --git a/BuddySave.UnitTests/Core/GamingSessionTests.cs b/BuddySave.UnitTests/Core/GamingSessionTests.cs index f1314a5..0d3bd0f 100644 --- a/BuddySave.UnitTests/Core/GamingSessionTests.cs +++ b/BuddySave.UnitTests/Core/GamingSessionTests.cs @@ -15,6 +15,7 @@ public class GamingSessionTests public async Task Play_StartsClient_WhenLockExists( [Frozen] Mock lockManagerMock, [Frozen] Mock clientSessionMock, + [Frozen] Mock serverSessionMock, GameSave gameSave, Session ourSession, Session lockSession, @@ -31,6 +32,9 @@ public async Task Play_StartsClient_WhenLockExists( // Assert clientSessionMock.Verify(x => x.StartClient(lockSession, clientParameters), Times.Once()); + serverSessionMock.Verify( + x => x.RunServerWithAutoSave(It.IsAny(), It.IsAny(), It.IsAny()), + Times.Never); } [Theory] diff --git a/BuddySave/Core/ClientSession.cs b/BuddySave/Core/ClientSession.cs index 1d68c80..454f5dd 100644 --- a/BuddySave/Core/ClientSession.cs +++ b/BuddySave/Core/ClientSession.cs @@ -14,6 +14,11 @@ public void StartClient(Session session, ClientParameters clientParameters) throw new ArgumentException("No client path provided. Cannot start a client session."); } + if(string.IsNullOrEmpty(clientParameters.Arguments)) + { + throw new ArgumentException("No launch arguments provided for client. Cannot start a client session."); + } + var arguments = clientParameters.Arguments.Replace("{{Ip}}", session.Ip).Replace("{{Port}}", session.Port); var startInfo = new ProcessStartInfo { diff --git a/BuddySave/Core/GamingSession.cs b/BuddySave/Core/GamingSession.cs index 0ccaf98..356b6d5 100644 --- a/BuddySave/Core/GamingSession.cs +++ b/BuddySave/Core/GamingSession.cs @@ -4,24 +4,26 @@ namespace BuddySave.Core; public class GamingSession(ILockManager lockManager, IServerSession serverSession, IClientSession clientSession) : IGamingSession { + private const string LocalhostIp = "127.0.0.1"; + public async Task Play(GameSave gameSave, Session session, ServerParameters serverParameters, ClientParameters clientParameters) { var lockExists = lockManager.LockExists(gameSave); var sessionToConnectTo = lockExists ? await lockManager.GetLockedSession(gameSave) : GetLocalSession(session); - var serverTask = Task.CompletedTask; + var runServerWithAutoSave = Task.CompletedTask; if (!lockExists) { - serverTask = serverSession.RunServerWithAutoSave(gameSave, session, serverParameters); + runServerWithAutoSave = serverSession.RunServerWithAutoSave(gameSave, session, serverParameters); } clientSession.StartClient(sessionToConnectTo, clientParameters); - await serverTask; + await runServerWithAutoSave; } private static Session GetLocalSession(Session session) { - return new Session(session.UserName, "127.0.0.1", session.Port); + return new Session(session.UserName, LocalhostIp, session.Port); } } \ No newline at end of file