public void It_Should_ExitTheApplication_When_UserInputIsQ() { //Arrange var trackGenerator = new TrackGenerator( 2, new List <SessionAllocator> { new SessionAllocator( ConfigurationLoader.LoadSessionConfiguration("morningSession.json")), new SessionAllocator( ConfigurationLoader.LoadSessionConfiguration("afternoonSession.json")) }, new TalkDurationValidator()); var pathValidator = new PathValidator(); var talkValidator = new TalkValidator(); var consoleDisplay = new ConsoleDisplayStub(); var consoleCollector = new Mock <IInputCollector>(); consoleCollector.SetupSequence(x => x.Collect()) .Returns("q"); var conferenceTrackManager = new ConferenceTrackManager(consoleDisplay, consoleCollector.Object, new TextFileInputProvider(pathValidator), new TextFileInputProcessor(talkValidator), trackGenerator); //Act conferenceTrackManager.ManageTracks(); //Assert var expectedMessages = new List <string> { Constants.Welcome, Constants.FilePathPrompt }; for (var i = 0; i < consoleDisplay.Messages.Count; i++) { Assert.Equal(expectedMessages[i], consoleDisplay.Messages[i]); } //Assert.True(consoleDisplay.Messages.SequenceEqual(expectedMessages)); }
public void It_Should_DisplayErrorsAndTracks_WhenGivenInValidFilesThenAValidOne() { //Arrange var trackGenerator = new TrackGenerator( 2, new List <SessionAllocator> { new SessionAllocator( ConfigurationLoader.LoadSessionConfiguration("morningSession.json")), new SessionAllocator( ConfigurationLoader.LoadSessionConfiguration("afternoonSession.json")) }, new TalkDurationValidator()); var pathValidator = new PathValidator(); var talkValidator = new TalkValidator(); var consoleDisplay = new ConsoleDisplayStub(); var consoleCollector = new Mock <IInputCollector>(); consoleCollector.SetupSequence(x => x.Collect()) .Returns(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "In", "OriginalTestInput.txt")) .Returns(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Input", "InvalidTestInput.txt")) .Returns(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Input", "InvalidTalkDuration.txt")) .Returns(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Input", "OriginalTestInput.txt")) .Returns("1"); var conferenceTrackManager = new ConferenceTrackManager(consoleDisplay, consoleCollector.Object, new TextFileInputProvider(pathValidator), new TextFileInputProcessor(talkValidator), trackGenerator); //Act conferenceTrackManager.ManageTracks(); //Assert var expectedMessages = new List <string> { Constants.Welcome, Constants.FilePathPrompt, $"Not a valid path or file: {Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "In", "OriginalTestInput.txt")}. \nOnly .txt files are valid", Constants.FilePathPrompt, "Not a valid talk: A World Without HackerNews. \nMust contain duration in minutes or be a lightning talk.", Constants.FilePathPrompt, "Invalid talk duration: 445min.\nThe duration of talks must be shorter then the session duration", Constants.FilePathPrompt, Constants.DisplayTypePrompt, "Track 1", "09:00 AM Writing Fast Tests Against Enterprise Rails 60min", "10:00 AM Communicating Over Distance 60min", "11:00 AM Rails Magic 60min", "12:00 PM Lunch", "01:00 PM Ruby Errors from Mismatched Gem Versions 45min", "01:45 PM Common Ruby Errors 45min", "02:30 PM Accounting-Driven Development 45min", "03:15 PM Pair Programming vs Noise 45min", "04:00 PM Clojure Ate Scala (on my project) 45min", "05:00 PM Networking Event", "Track 2", "09:00 AM Ruby on Rails: Why We Should Move On 60min", "10:00 AM Ruby on Rails Legacy App Maintenance 60min", "11:00 AM Overdoing it in Python 45min", "11:45 AM Rails for Python Developers lightning", "12:00 PM Lunch", "01:00 PM Lua for the Masses 30min", "01:30 PM Woah 30min", "02:00 PM Sit Down and Write 30min", "02:30 PM Programming in the Boondocks of Seattle 30min", "03:00 PM Ruby vs. Clojure for Back-End Development 30min", "03:30 PM A World Without HackerNews 30min", "04:00 PM User Interface CSS in Rails Apps 30min", "05:00 PM Networking Event" }; for (var i = 0; i < consoleDisplay.Messages.Count; i++) { Assert.Equal(expectedMessages[i], consoleDisplay.Messages[i]); } //Assert.True(consoleDisplay.Messages.SequenceEqual(expectedMessages)); }
public void It_Should_SimulateDemoGame_When_Given_ValidInput() { var config = ConfigurationLoader.LoadMastermindConfiguration(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ConfigFiles", "StandardConfig.json")); var staticCodeGenerate = new CodeGenerator(new List <Peg> { Peg.Blue, Peg.Green, Peg.Orange, Peg.Red }); var feedbackRandomizer = new NonRandomizer(); var codeChecker = new CodeChecker(staticCodeGenerate, feedbackRandomizer); var game = new Game(config, codeChecker); var inputHappy = new List <string> { "blue, blue, green, green", "Red, blue, red, RED", "Blue, yellow, Green, red", "Blue, Green, PURPLE, Red", "blue, green, orange, red" }; var consoleDisplayStub = new ConsoleDisplayStub(); var gameEngine = new GameEngine(consoleDisplayStub, new ConsoleDemoInputCollector(inputHappy, consoleDisplayStub), new ConsoleInputProcessor(config), game); //Act gameEngine.PlayGame(); //Assert var expectedMessages = new List <string> { ClientConstants.Welcome, ClientConstants.Border, ClientConstants.SecretCode, "Blue, Green, Orange, Red", ClientConstants.Border, ClientConstants.GuessesLeft + 8 + ClientConstants.PromptGuess, inputHappy[0], ClientConstants.Feedback, "Black, White", ClientConstants.Border, ClientConstants.GuessesLeft + 7 + ClientConstants.PromptGuess, inputHappy[1], ClientConstants.Feedback, "Black, White", ClientConstants.Border, ClientConstants.GuessesLeft + 6 + ClientConstants.PromptGuess, inputHappy[2], ClientConstants.Feedback, "Black, Black, White", ClientConstants.Border, ClientConstants.GuessesLeft + 5 + ClientConstants.PromptGuess, inputHappy[3], ClientConstants.Feedback, "Black, Black, Black", ClientConstants.Border, ClientConstants.GuessesLeft + 4 + ClientConstants.PromptGuess, inputHappy[4], ClientConstants.Feedback, "Black, Black, Black, Black", ClientConstants.Border, ClientConstants.Winner }; Assert.Equal(expectedMessages, consoleDisplayStub.Messages); }
public void It_Should_SimulateGamePlay_When_Given_InvalidInput() { var config = ConfigurationLoader.LoadMastermindConfiguration(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ConfigFiles", "StandardConfig.json")); var staticCodeGenerator = new CodeGenerator(new List <Peg> { Peg.Blue, Peg.Green, Peg.Yellow, Peg.Green }); var feedbackRandomizer = new NonRandomizer(); var codeChecker = new CodeChecker(staticCodeGenerator, feedbackRandomizer); var game = new Game(config, codeChecker); var consoleDisplayStub = new ConsoleDisplayStub(); var mockCollector = new Mock <ICollector>(); mockCollector.SetupSequence(x => x.Collect()) .Returns("Blue, green, reD, rainbow") .Returns("Blue, red, red, red, red") .Returns("Blue, blue") .Returns("") .Returns("hello") .Returns("blue, green, pink, red") .Returns("grey") .Returns("BLUE, green, YeLLoW, Green"); var gameEngine = new GameEngine( consoleDisplayStub, mockCollector.Object, new ConsoleInputProcessor(config), game); //Act gameEngine.PlayGame(); //Assert var expectedMessages = new List <string> { ClientConstants.Welcome, ClientConstants.Border, ClientConstants.SecretCode, "Blue, Green, Yellow, Green", ClientConstants.Border, ClientConstants.GuessesLeft + 8 + ClientConstants.PromptGuess, "Error: rainbow is an invalid colour!", ClientConstants.GuessesLeft + 8 + ClientConstants.PromptGuess, $"Error: you must pass in {config[DataConstants.CodeLength]} colours!", ClientConstants.GuessesLeft + 8 + ClientConstants.PromptGuess, $"Error: you must pass in {config[DataConstants.CodeLength]} colours!", ClientConstants.GuessesLeft + 8 + ClientConstants.PromptGuess, $"Error: you must pass in {config[DataConstants.CodeLength]} colours!", ClientConstants.GuessesLeft + 8 + ClientConstants.PromptGuess, "Error: hello is an invalid colour!", ClientConstants.GuessesLeft + 8 + ClientConstants.PromptGuess, "Error: pink is an invalid colour!", ClientConstants.GuessesLeft + 8 + ClientConstants.PromptGuess, "Error: grey is an invalid colour!", ClientConstants.GuessesLeft + 8 + ClientConstants.PromptGuess, ClientConstants.Feedback, "Black, Black, Black, Black", ClientConstants.Border, ClientConstants.Winner }; Assert.Equal(expectedMessages, consoleDisplayStub.Messages); }
public void It_Should_SimulateGamePlay_When_Given_ValidInput() { var config = ConfigurationLoader.LoadMastermindConfiguration(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ConfigFiles", "StandardConfig.json")); var staticCodeGenerator = new CodeGenerator(new List <Peg> { Peg.Blue, Peg.Green, Peg.Yellow, Peg.Green }); var feedbackRandomizer = new NonRandomizer(); var codeChecker = new CodeChecker(staticCodeGenerator, feedbackRandomizer); var game = new Game(config, codeChecker); var consoleDisplayStub = new ConsoleDisplayStub(); var mockCollector = new Mock <ICollector>(); mockCollector.SetupSequence(x => x.Collect()) .Returns("blue, red, green, red") .Returns("green, yellow, green, blue") .Returns("Red, RED, red. Red") .Returns("Blue, Green, Yellow, Green"); var gameEngine = new GameEngine( consoleDisplayStub, mockCollector.Object, new ConsoleInputProcessor(config), game); //Act gameEngine.PlayGame(); //Assert var expectedMessages = new List <string> { ClientConstants.Welcome, ClientConstants.Border, ClientConstants.SecretCode, "Blue, Green, Yellow, Green", ClientConstants.Border, ClientConstants.GuessesLeft + 8 + ClientConstants.PromptGuess, ClientConstants.Feedback, "Black, White", ClientConstants.Border, ClientConstants.GuessesLeft + 7 + ClientConstants.PromptGuess, ClientConstants.Feedback, "White, White, White, White", ClientConstants.Border, ClientConstants.GuessesLeft + 6 + ClientConstants.PromptGuess, ClientConstants.Feedback, "", ClientConstants.Border, ClientConstants.GuessesLeft + 5 + ClientConstants.PromptGuess, ClientConstants.Feedback, "Black, Black, Black, Black", ClientConstants.Border, ClientConstants.Winner }; Assert.Equal(expectedMessages, consoleDisplayStub.Messages); }