Given_no_products_currently_being_used_when_checking_for_product_clashes_then_none_are_found()
        {
            // Arrange
            var fixture = new SafeFixture();

            var spotToCheckForClashes = fixture.Create <Spot>();

            var infoForAllSpots = new Dictionary <Guid, SpotInfo>
            {
                [spotToCheckForClashes.Uid] = new SpotInfo {
                    Uid = spotToCheckForClashes.Uid
                }
            };

            var labrat = new ProductClashChecker(enabled: true);

            // Act
            IEnumerable <Spot> result = labrat.GetProductClashesForMultipleSpots(
                new List <Spot>(1)
            {
                spotToCheckForClashes
            },
                new List <Spot>(0),
                infoForAllSpots,
                ClashCodeLevel.Child
                );

            // Assert
            _ = result.Should().BeEmpty(becauseArgs: null);
        }
        Given_a_similar_child_product_is_already_used_when_searching_for_a_child_clash_then_a_clash_is_found()
        {
            // Arrange
            var fixture = new SafeFixture();

            var spotToCheckForClashes = fixture.Create <Spot>();
            var nonClashingSpot       = fixture.Create <Spot>();

            var productCodeThatWillClash = fixture.Create <string>();

            var infoForAllSpots = new Dictionary <Guid, SpotInfo>
            {
                [spotToCheckForClashes.Uid] = new SpotInfo
                {
                    Uid = spotToCheckForClashes.Uid,
                    ProductClashCode = productCodeThatWillClash
                },
                [nonClashingSpot.Uid] = new SpotInfo
                {
                    Uid = nonClashingSpot.Uid
                }
            };

            var labrat = new ProductClashChecker(enabled: true);

            // Act
            IEnumerable <Spot> result = labrat.GetProductClashesForMultipleSpots(
                new List <Spot>(1)
            {
                spotToCheckForClashes
            },
                new List <Spot> {
                spotToCheckForClashes, nonClashingSpot
            },
                infoForAllSpots,
                ClashCodeLevel.Child
                );

            // Assert
            _ = result.Should().NotBeEmpty(becauseArgs: null);
        }
        Given_product_clash_checking_is_not_enabled_when_checking_for_product_clashes_then_none_are_found()
        {
            // Arrange
            var labrat = new ProductClashChecker(enabled: false);

            var fixture = new SafeFixture();

            // Act
            IEnumerable <Spot> result = labrat.GetProductClashesForMultipleSpots(
                new List <Spot>(1)
            {
                fixture.Create <Spot>()
            },
                new List <Spot>(0),
                new Dictionary <Guid, SpotInfo>(0),
                ClashCodeLevel.Child
                );

            // Assert
            _ = result.Should().BeEmpty(becauseArgs: null);
        }