-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
update: implemented a validation for latest game save GameSaveSyncMan…
…ager.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
Showing
11 changed files
with
419 additions
and
33 deletions.
There are no files selected for viewing
86 changes: 86 additions & 0 deletions
86
BuddySave.IntegrationTests/FileManagement/LatestSaveTypeProviderTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
}; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.