public static async Task Test_Controller_Produces_AlreadyHasActiveSession_When_Session_Has() { //arrange IServiceProvider serviceProvider = ControllerTestsHelpers.BuildServiceProvider <CharacterSessionController>("Test", 1); CharacterSessionController controller = serviceProvider.GetService <CharacterSessionController>(); ICharacterRepository characterRepo = serviceProvider.GetService <ICharacterRepository>(); ICharacterSessionRepository sessionRepo = serviceProvider.GetService <ICharacterSessionRepository>(); ICharacterLocationRepository characterLocationRepo = serviceProvider.GetService <ICharacterLocationRepository>(); IZoneServerRepository zoneRepository = serviceProvider.GetService <IZoneServerRepository>(); await characterRepo.TryCreateAsync(new CharacterEntryModel(1, "Testing")); await sessionRepo.TryCreateAsync(new CharacterSessionModel(1, 0)); //We can't create the claimed session through this interface because it's a stored procedure. //Raw SQL can't execute. So we must interact directly with the DbSet //await sessionRepo.TryClaimUnclaimedSession(1, 1); CharacterDatabaseContext context = serviceProvider.GetService <CharacterDatabaseContext>(); await context.ClaimedSession.AddAsync(new ClaimedSessionsModel(1)); await context.SaveChangesAsync(); //act CharacterSessionEnterResponse response = await controller.EnterSession(1, characterLocationRepo, zoneRepository); //assert Assert.False(response.isSuccessful, $"Characters that already have "); Assert.AreEqual(CharacterSessionEnterResponseCode.AccountAlreadyHasCharacterSession, response.ResultCode); }
public async Task Test_Validate_Character_Name_Works_On_Empty_Characters(string name) { //arrange IServiceProvider serviceProvider = BuildServiceProvider <CharacterController>("Test", 1); CharacterController controller = serviceProvider.GetService <CharacterController>(); //act CharacterNameValidationResponse result = ControllerTestsHelpers.GetActionResultObject <CharacterNameValidationResponse>(await controller.ValidateCharacterName(name)); //assert Assert.True(result.isSuccessful); Assert.True(result.ResultCode == CharacterNameValidationResponseCode.Success); }
public async Task Test_Validate_Character_Name_Passes_On_AlreadyExisting_Character_If_The_Names_Are_Different(string name) { //arrange IServiceProvider serviceProvider = BuildServiceProvider <CharacterController>("Test", 1); CharacterController controller = serviceProvider.GetService <CharacterController>(); //act await serviceProvider.GetService <ICharacterRepository>().TryCreateAsync(new CharacterEntryModel(1, $"{name}Z")); CharacterNameValidationResponse result = ControllerTestsHelpers.GetActionResultObject <CharacterNameValidationResponse>(await controller.ValidateCharacterName(name)); //assert Assert.True(result.isSuccessful); Assert.True(result.ResultCode == CharacterNameValidationResponseCode.Success); }
public async Task Test_Validate_Character_Name_Fails_On_AlreadyExisting_Character(string name) { //arrange IServiceProvider serviceProvider = BuildServiceProvider <CharacterController>("Test", 1); CharacterController controller = serviceProvider.GetService <CharacterController>(); //act await serviceProvider.GetService <ICharacterRepository>().TryCreateAsync(new CharacterEntryModel(1, name)); CharacterNameValidationResponse result = ControllerTestsHelpers.GetActionResultObject <CharacterNameValidationResponse>(await controller.ValidateCharacterName(name)); //assert Assert.False(result.isSuccessful, $"Response for name validation should be false when the name is taken."); Assert.True(result.ResultCode == CharacterNameValidationResponseCode.NameIsUnavailable); }
public static async Task Test_Controller_Produces_InvalidId_When_Empty() { //arrange IServiceProvider serviceProvider = ControllerTestsHelpers.BuildServiceProvider <CharacterSessionController>("Test", 1); CharacterSessionController controller = serviceProvider.GetService <CharacterSessionController>(); ICharacterLocationRepository characterLocationRepo = serviceProvider.GetService <ICharacterLocationRepository>(); IZoneServerRepository zoneRepository = serviceProvider.GetService <IZoneServerRepository>(); //act CharacterSessionEnterResponse response = await controller.EnterSession(5, characterLocationRepo, zoneRepository); //assert Assert.False(response.isSuccessful); Assert.AreEqual(CharacterSessionEnterResponseCode.InvalidCharacterIdError, response.ResultCode); }
public async Task Test_Can_Create_Character(string name) { //arrange IServiceProvider serviceProvider = BuildServiceProvider <CharacterController>("Test", 1); Mock <IPlayfabCharacterClient> playfabCharacterClientMock = CreatePlayFabCharacterClientMock(); Mock <ICharacterAppearanceRepository> appearanceRepository = new Mock <ICharacterAppearanceRepository>(); Mock <ICharacterDataRepository> dataRepository = new Mock <ICharacterDataRepository>(); CharacterController controller = serviceProvider.GetService <CharacterController>(); //act CharacterCreationResponse result = ControllerTestsHelpers.GetActionResultObject <CharacterCreationResponse>(await controller.CreateCharacter(name, playfabCharacterClientMock.Object, appearanceRepository.Object, dataRepository.Object)); //assert Assert.True(result.isSuccessful); Assert.True(result.ResultCode == CharacterCreationResponseCode.Success); }
public async Task Test_Cannot_Create_Character_With_Duplicate_Name(string name) { //arrange IServiceProvider serviceProvider = BuildServiceProvider <CharacterController>("Test", 1); CharacterController controller = serviceProvider.GetService <CharacterController>(); Mock <IPlayfabCharacterClient> playfabCharacterClientMock = CreatePlayFabCharacterClientMock(); Mock <ICharacterAppearanceRepository> appearanceRepository = new Mock <ICharacterAppearanceRepository>(); Mock <ICharacterDataRepository> dataRepository = new Mock <ICharacterDataRepository>(); //act await controller.CreateCharacter(name, playfabCharacterClientMock.Object, appearanceRepository.Object, dataRepository.Object); CharacterCreationResponse result = ControllerTestsHelpers.GetActionResultObject <CharacterCreationResponse>(await controller.CreateCharacter(name, playfabCharacterClientMock.Object, appearanceRepository.Object, dataRepository.Object)); //assert Assert.False(result.isSuccessful); Assert.AreEqual(CharacterCreationResponseCode.NameUnavailableError, result.ResultCode); }
public static async Task Test_Controller_Creates_UnclaimedSession_On_OnEnterSession(int accountId) { //arrange IServiceProvider serviceProvider = ControllerTestsHelpers.BuildServiceProvider <CharacterSessionController>("Test", accountId); CharacterSessionController controller = serviceProvider.GetService <CharacterSessionController>(); ICharacterRepository characterRepo = serviceProvider.GetService <ICharacterRepository>(); ICharacterLocationRepository characterLocationRepo = serviceProvider.GetService <ICharacterLocationRepository>(); IZoneServerRepository zoneRepository = serviceProvider.GetService <IZoneServerRepository>(); await characterRepo.TryCreateAsync(new CharacterEntryModel(accountId, "Testing")); //act: We also test that we can do it multiple times CharacterSessionEnterResponse response = await controller.EnterSession(1, characterLocationRepo, zoneRepository); //assert Assert.True(response.isSuccessful); Assert.AreEqual(CharacterSessionEnterResponseCode.Success, response.ResultCode); }
public static async Task Test_Controller_Produces_InvalidId_When_Wrong_AccountId() { //arrange IServiceProvider serviceProvider = ControllerTestsHelpers.BuildServiceProvider <CharacterSessionController>("Test", 2); CharacterSessionController controller = serviceProvider.GetService <CharacterSessionController>(); ICharacterRepository characterRepo = serviceProvider.GetService <ICharacterRepository>(); ICharacterSessionRepository sessionRepo = serviceProvider.GetService <ICharacterSessionRepository>(); ICharacterLocationRepository characterLocationRepo = serviceProvider.GetService <ICharacterLocationRepository>(); IZoneServerRepository zoneRepository = serviceProvider.GetService <IZoneServerRepository>(); await characterRepo.TryCreateAsync(new CharacterEntryModel(1, "Testing")); await sessionRepo.TryCreateAsync(new CharacterSessionModel(1, 0)); //act CharacterSessionEnterResponse response = await controller.EnterSession(1, characterLocationRepo, zoneRepository); //assert Assert.False(response.isSuccessful, $"Characters should not be able to create sessions when the accountid doesn't match."); Assert.AreEqual(response.ResultCode, CharacterSessionEnterResponseCode.InvalidCharacterIdError); }
public static async Task Test_Controller_Produces_SessionGranted_With_Zone_Id_If_UnclaimedSession_Exists(int accountId, int zoneid) { //arrange IServiceProvider serviceProvider = ControllerTestsHelpers.BuildServiceProvider <CharacterSessionController>("Test", accountId); CharacterSessionController controller = serviceProvider.GetService <CharacterSessionController>(); ICharacterRepository characterRepo = serviceProvider.GetService <ICharacterRepository>(); ICharacterSessionRepository sessionRepo = serviceProvider.GetService <ICharacterSessionRepository>(); ICharacterLocationRepository characterLocationRepo = serviceProvider.GetService <ICharacterLocationRepository>(); IZoneServerRepository zoneRepository = serviceProvider.GetService <IZoneServerRepository>(); await characterRepo.TryCreateAsync(new CharacterEntryModel(accountId, "Testing")); await sessionRepo.TryCreateAsync(new CharacterSessionModel(1, zoneid)); //act CharacterSessionEnterResponse response = await controller.EnterSession(1, characterLocationRepo, zoneRepository); //assert Assert.True(response.isSuccessful, $"Created sessions should be granted if no active account session or character session is claimed."); Assert.AreEqual(CharacterSessionEnterResponseCode.Success, response.ResultCode); Assert.AreEqual(zoneid, response.ZoneId, $"Provided zone id was not the same as the session."); }