Skip to content

Commit

Permalink
update: implemented a validation for latest game save (#36)
Browse files Browse the repository at this point in the history
* update: implemented a validation for latest game save GameSaveSyncManager.cs before uploading/downloading;
* fix: GameSaveSyncManager.cs now throws exception from catch block to ensure SharedSaveOrchestrator.cs works as expected on its catch block;
  • Loading branch information
lightTAKE authored Aug 17, 2024
1 parent 543e995 commit f80daa3
Show file tree
Hide file tree
Showing 11 changed files with 341 additions and 33 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
using System;
using System.IO;
using System.Threading.Tasks;
using AutoFixture.Xunit2;
using BuddySave.Core.Models;
using BuddySave.FileManagement;
using BuddySave.System;
using BuddySave.TestTools;
using Moq;
using Xunit;

namespace BuddySave.IntegrationTests.FileManagement;

public class LatestSaveTypeProviderTests
{
[Theory, AutoMoqData]
public async Task ReturnsLocalSaveType_When_LocalSaveIsNewer(
[Frozen] Mock<IFileInfoProvider> fileInfoProviderMock,
GameSave gameSave,
LatestSaveTypeProvider sut)
{
// Arrange
var localFileInfo = await PrepareFile(SaveType.Local.ToString(), gameSave.SaveName, DateTime.Now);
var cloudFileInfo = await PrepareFile(SaveType.Cloud.ToString(), gameSave.SaveName, DateTime.Now.AddDays(-1));

fileInfoProviderMock.Setup(x => x.Get(gameSave.LocalPath, gameSave.SaveName)).Returns(localFileInfo);
fileInfoProviderMock.Setup(x => x.Get(gameSave.CloudPath, gameSave.SaveName)).Returns(cloudFileInfo);

// Act
var result = sut.Get(gameSave);

// Assert
Assert.Equal(SaveType.Local, result);
}

[Theory, AutoMoqData]
public async Task ReturnsCloudSaveType_When_CloudSaveIsNewer(
[Frozen] Mock<IFileInfoProvider> fileInfoProviderMock,
GameSave gameSave,
LatestSaveTypeProvider sut)
{
// Arrange
var localFileInfo = await PrepareFile(SaveType.Local.ToString(), gameSave.SaveName, DateTime.Now.AddDays(-1));
var cloudFileInfo = await PrepareFile(SaveType.Cloud.ToString(), gameSave.SaveName, DateTime.Now);

fileInfoProviderMock.Setup(x => x.Get(gameSave.LocalPath, gameSave.SaveName)).Returns(localFileInfo);
fileInfoProviderMock.Setup(x => x.Get(gameSave.CloudPath, gameSave.SaveName)).Returns(cloudFileInfo);

// Act
var result = sut.Get(gameSave);

// Assert
Assert.Equal(SaveType.Cloud, result);
}

[Theory, AutoMoqData]
public async Task ReturnsCloudSaveType_When_LocalSaveTimeIsEqual(
[Frozen] Mock<IFileInfoProvider> fileInfoProviderMock,
GameSave gameSave,
LatestSaveTypeProvider sut)
{
// Arrange
var localFileInfo = await PrepareFile(SaveType.Local.ToString(), gameSave.SaveName, DateTime.Now);
var cloudFileInfo = await PrepareFile(SaveType.Cloud.ToString(), gameSave.SaveName, DateTime.Now);

fileInfoProviderMock.Setup(x => x.Get(gameSave.LocalPath, gameSave.SaveName)).Returns(localFileInfo);
fileInfoProviderMock.Setup(x => x.Get(gameSave.CloudPath, gameSave.SaveName)).Returns(cloudFileInfo);

// Act
var result = sut.Get(gameSave);

// Assert
Assert.Equal(SaveType.Cloud, result);
}

private static async Task<FileInfo> PrepareFile(string directoryName, string file, DateTime lastWriteTimeUtc)
{
var saveDirectory = new TempDir(directoryName, true);
var filePath = Path.Combine(saveDirectory.Path, file);
await File.WriteAllTextAsync(filePath, "Test");
return new FileInfo(filePath)
{
LastWriteTimeUtc = lastWriteTimeUtc
};
}
}
2 changes: 1 addition & 1 deletion BuddySave.TestTools/TempDir.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public void Dispose()
}
}

public void Create()
private void Create()
{
Directory.CreateDirectory(Path);
}
Expand Down
Loading

0 comments on commit f80daa3

Please sign in to comment.