public void CheckAllLocationIdsAreUnique_DupolicateDetected()
        {
            // Arrange
            var national = new Location();

            national.LocationId = "N1";
            national.ParentId   = null;
            national.Type       = LocationType.National;

            var region1 = new Location();

            region1.LocationId = "R1";
            region1.ParentId   = "N1";
            region1.Type       = LocationType.Region;

            var trust1 = new Location();

            trust1.LocationId = "T1";
            trust1.ParentId   = "R1";
            trust1.Type       = LocationType.Trust;

            var site1 = new Location();

            site1.LocationId = "S1";
            site1.Code       = "Site1";
            site1.ParentId   = "T1";
            site1.Type       = LocationType.Site;

            var site2 = new Location();

            site2.LocationId = "S1"; // Duplicate!
            site2.Code       = "Site2";
            site2.ParentId   = "T1";
            site2.Type       = LocationType.Site;

            var locations = new List <Location>();

            locations.Add(national);
            locations.Add(region1);
            locations.Add(trust1);
            locations.Add(site1);
            locations.Add(site2);

            var locationsChecker = new LocationsChecker(locations);

            // Act
            var ex = Assert.Throws <Exception>(() => locationsChecker.CheckAllLocationIdsAreUnique());

            // Assert
            Assert.Equal("Duplicate locationIds detected", ex.Message);
        }
        public void CheckParentIdsValid_ParentIdDoesNotExist()
        {
            // Arrange
            var national = new Location();

            national.LocationId = "N1";
            national.ParentId   = null;
            national.Type       = LocationType.National;

            var region1 = new Location();

            region1.LocationId = "R1";
            region1.ParentId   = "N1";
            region1.Type       = LocationType.Region;

            var trust1 = new Location();

            trust1.LocationId = "T1";
            trust1.ParentId   = "R1";
            trust1.Type       = LocationType.Trust;

            var site1 = new Location();

            site1.LocationId = "S1";
            site1.Code       = "Site1";
            site1.ParentId   = "T2"; // does not exist!
            site1.Type       = LocationType.Site;

            var locations = new List <Location>();

            locations.Add(national);
            locations.Add(region1);
            locations.Add(trust1);
            locations.Add(site1);

            var locationsChecker = new LocationsChecker(locations);

            // Act
            var ex = Assert.Throws <Exception>(() => locationsChecker.CheckParentIdsValid());

            // Assert
            Assert.Equal("Location Site1 does not have valid parent id", ex.Message);
        }
        public void CheckLocationIdsNotNull_Nulls()
        {
            // Arrange
            var national = new Location();

            national.LocationId = "N1";
            national.ParentId   = null;
            national.Type       = LocationType.National;

            var region1 = new Location();

            region1.LocationId = "R1";
            region1.ParentId   = "N1";
            region1.Type       = LocationType.Region;

            var trust1 = new Location();

            trust1.LocationId = "T1";
            trust1.ParentId   = "R1";
            trust1.Type       = LocationType.Trust;

            var site1 = new Location();

            site1.LocationId = null;
            site1.Code       = "Site1";
            site1.ParentId   = "T1";
            site1.Type       = LocationType.Site;

            var locations = new List <Location>();

            locations.Add(national);
            locations.Add(region1);
            locations.Add(trust1);
            locations.Add(site1);

            var locationsChecker = new LocationsChecker(locations);

            // Act
            var ex = Assert.Throws <Exception>(() => locationsChecker.CheckLocationIdsNotNull());

            // Assert
            Assert.Equal("Locations exist with null for LocationId", ex.Message);
        }
        public void CheckAllLocationIdsAreUnique_AllAreUnique()
        {
            // Arrange
            var national = new Location();

            national.LocationId = "N1";
            national.ParentId   = null;
            national.Type       = LocationType.National;

            var region1 = new Location();

            region1.LocationId = "R1";
            region1.ParentId   = "N1";
            region1.Type       = LocationType.Region;

            var trust1 = new Location();

            trust1.LocationId = "T1";
            trust1.ParentId   = "R1";
            trust1.Type       = LocationType.Trust;

            var site1 = new Location();

            site1.LocationId = "S1";
            site1.Code       = "Site1";
            site1.ParentId   = "T1";
            site1.Type       = LocationType.Site;

            var locations = new List <Location>();

            locations.Add(national);
            locations.Add(region1);
            locations.Add(trust1);
            locations.Add(site1);

            var locationsChecker = new LocationsChecker(locations);

            // Act
            var result = locationsChecker.CheckAllLocationIdsAreUnique();

            // Assert
            Assert.True(result);
        }
        public void CheckParentIdsValid_NationalHasParentId()
        {
            ///Arrange
            var national = new Location();

            national.LocationId = "N1";
            national.ParentId   = "X1"; // should be null!
            national.Type       = LocationType.National;

            var region1 = new Location();

            region1.LocationId = "R1";
            region1.ParentId   = "N1";
            region1.Type       = LocationType.Region;

            var trust1 = new Location();

            trust1.LocationId = "T1";
            trust1.ParentId   = "R1";
            trust1.Type       = LocationType.Trust;

            var site1 = new Location();

            site1.LocationId = "S1";
            site1.ParentId   = "T1";
            site1.Type       = LocationType.Site;

            var locations = new List <Location>();

            locations.Add(national);
            locations.Add(region1);
            locations.Add(trust1);
            locations.Add(site1);

            var locationsChecker = new LocationsChecker(locations);

            // Act
            var ex = Assert.Throws <Exception>(() => locationsChecker.CheckParentIdsValid());

            // Assert
            Assert.Equal("National location should not have parent id", ex.Message);
        }