public List <Territory> SaveAs(string fileName)
        {
            var resultString = client.DownloadString(RelativeUrlBuilder.GetAllTerritories());

            AllTerritories = TerritoryResultParser.Parse(resultString);

            var assignmentsResultString = client.DownloadString(
                RelativeUrlBuilder.GetTerritoryAssignments());

            string assignmentsHtml = TerritoryAssignmentParser.Parse(assignmentsResultString);

            var assignments = new DownloadTerritoryAssignments(client).GetAssignments(assignmentsHtml);

            foreach (var t in AllTerritories)
            {
                var assignment = assignments.FirstOrDefault(a => string.Equals(a.Number, t.Number, StringComparison.OrdinalIgnoreCase));

                if (assignment != null)
                {
                    int monthsAgoCompleted = assignment.MonthsAgoCompleted ?? 0;
                    int yearsAgoCompleted  = monthsAgoCompleted / 12;

                    t.Status             = assignment.Status;
                    t.MobileLink         = assignment.MobileLink;
                    t.SignedOutTo        = assignment.SignedOutTo;
                    t.SignedOut          = assignment.SignedOut;
                    t.LastCompletedBy    = assignment.LastCompletedBy;
                    t.LastCompleted      = assignment.LastCompleted;
                    t.MonthsAgoCompleted = assignment.MonthsAgoCompleted;
                    t.YearsAgoCompleted  = assignment.LastCompleted == null
                        ? 99
                        : yearsAgoCompleted;
                    t.NeverCompleted = assignment.LastCompleted == null;
                }
            }

            var filteredTerritories = Filter(AllTerritories);

            foreach (var t in filteredTerritories)
            {
                t.FillColor = FillColorFor(t);
            }

            var kml = new TerritoryToKmlConverter().KmlFrom(filteredTerritories);

            new KmlGateway().Save(fileName, kml);

            return(filteredTerritories.ToList());
        }
        public void Parse_WithTestFile_ReturnsCorrectIdCountAndVertices()
        {
            string json = TestFileProvider.ContentOfTestFile("AllTerritories.json.txt");

            var territories = TerritoryResultParser.Parse(json);

            Assert.AreEqual("36950", territories[0].Id);
            Assert.AreEqual("17", territories[0].CountOfAddresses);

            VerticesAreEqual(new Vertex(47.566613, -122.276787), territories[0].Border.Vertices[0]);
            VerticesAreEqual(new Vertex(47.557899, -122.274213), territories[0].Border.Vertices[1]);

            Assert.AreEqual("67186", territories[1].Id);
            Assert.AreEqual("19", territories[1].CountOfAddresses);
        }