public static void Main() { // Resolved deps. var output = new ConsoleOutput(); var characterService = new CharacterService(); var textGenerator = new TextGenerator(); var dialogModalScreenHandler = new DialogModalScreenHandler(textGenerator, output); var screenNavigation = new ScreenNavigation(dialogModalScreenHandler); var connectionManager = new ConnectionManager(); var mainMenuHandler = new MainMenuHandler(screenNavigation, connectionManager); var mainMenuPrinter = new MainMenuPrinter(output, characterService); var mainMenuScreenHandler = new MainMenuScreenHandler(textGenerator, mainMenuHandler, mainMenuPrinter); var characterCreationHandler = new CharacterCreationHandler(screenNavigation); var characterCreationPrinter = new CharacterCreationPrinter(output, characterService); var characterCreationScreenHandler = new CharacterCreationScreenHandler(textGenerator, characterCreationHandler, characterCreationPrinter); var screenProvider = new ScreenHandlerProvider(screenNavigation, mainMenuScreenHandler, characterCreationScreenHandler, dialogModalScreenHandler); // Authenticated and got list of characters from API. var characters = new[] { "1", "2", "ivan-id" }; mainMenuScreenHandler.UpdateState(new MainMenuState(characters)); while (true) { Console.Clear(); var screen = screenProvider.GetCurrentScreenHandler(); screen.PrintState(); var key = Console.ReadKey(); switch (key.Key) { case ConsoleKey.Escape: screen.Escape(); break; case ConsoleKey.Backspace: screen.Backspace(); break; case ConsoleKey.Tab: screen.Tab(); break; default: screen.Type(key.KeyChar); break; } } }
public void FullLifecycle() { var creationHandler = new CharacterCreationHandler(new CharactersContext(new DbContextOptionsBuilder().UseSqlServer(_connectionString).Options)); string oldName = $"Random character with guid name {Guid.NewGuid()}"; var creationResult = creationHandler.Handle(new CharacterCreationCommand() { Name = oldName, }, new CancellationToken()) .GetAwaiter() .GetResult(); Assert.True(creationResult.IsSuccessful); var queryHandler = new CharacterQueryHandler(new CharactersContext(new DbContextOptionsBuilder().UseSqlServer(_connectionString).Options)); var queryResult = queryHandler.Handle(new CharacterQuery(creationResult.Id), new CancellationToken()) .GetAwaiter() .GetResult(); Assert.True(queryResult.IsSuccessful); string newName = $"New name with guid {Guid.NewGuid()}"; var updateHandler = new CharacterUpdateHandler(new CharactersContext(new DbContextOptionsBuilder().UseSqlServer(_connectionString).Options)); var updateResult = updateHandler.Handle(new CharacterUpdateCommand(creationResult.Id, new CharacterUpdateForm() { Name = newName }), new CancellationToken()) .GetAwaiter() .GetResult(); Assert.True(updateResult.IsSuccessful); var updatedQueryResult = queryHandler.Handle(new CharacterQuery(creationResult.Id), new CancellationToken()) .GetAwaiter() .GetResult(); Assert.True(updatedQueryResult.IsSuccessful); Assert.Equal(queryResult.Data.Id, updatedQueryResult.Data.Id); Assert.Equal(newName, updatedQueryResult.Data.Name); Assert.NotEqual(queryResult.Data.Name, updatedQueryResult.Data.Name); var deleteHandler = new CharacterDeletionHandler(new CharactersContext(new DbContextOptionsBuilder().UseSqlServer(_connectionString).Options)); var deletionResult = deleteHandler.Handle(new CharacterDeletionCommand(creationResult.Id), new CancellationToken()) .GetAwaiter() .GetResult(); Assert.True(deletionResult.IsSuccessful); var requeryResult = queryHandler.Handle(new CharacterQuery(creationResult.Id), new CancellationToken()) .GetAwaiter() .GetResult(); Assert.False(requeryResult.IsSuccessful); var deletionRetryResult = deleteHandler.Handle(new CharacterDeletionCommand(creationResult.Id), new CancellationToken()) .GetAwaiter() .GetResult(); Assert.False(deletionRetryResult.IsSuccessful); }