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);
        }