public async void Navigate_Should_Call_IMazeSpawner_Spawn() { var start = new Coordinates(1, 2); var destination = new Coordinates(3, 4); var floorPlan = new char[0][]; var map = new Map(floorPlan); _queen.ScanMap(start, destination, map); var crawler = Substitute.For <IMazeCrawler>(); crawler.Navigate().Returns(new NavigationDetails()); MazeCrawlerContext context = null; _spawner.Spawn(Arg.Do <MazeCrawlerContext>(c => context = c)).Returns(crawler); await _queen.Navigate(); _spawner.Received(1).Spawn(Arg.Any <MazeCrawlerContext>()); context.Start.Should().Be(start); context.Destination.Should().Be(destination); context.NavigationMode.Should().Be(CrawlerNavigationMode.Scout); context.Coordinator.Should().Be(_queen); }
public async Task <NavigationDetails> Navigate() { var map = MaskMap(); var context = new MazeCrawlerContext { Start = _start, Destination = _destination, NavigationMap = map, NavigationMode = CrawlerNavigationMode.Scout, Coordinator = this }; var crawler = _spawner.Spawn(context); var response = await crawler.Navigate(); if (response.Arrived) { response.PathTaken = MapHelper.SimplifyPath(response.PathTaken); } return(response); }