public void Build_WithComponentTypeAndFieldsDefined_ReturnsExpectedSpecElement()
        {
            // Arrange
            var unbuilt = new ComponentTypeAndFieldUnbuiltSearchSpecElement <Employee>();

            unbuilt.SetComponentTypeGetter(e => "Employee");
            unbuilt.SetFieldGetter(e => new Dictionary <string, object> {
                ["profession"] = "chess", ["nationality"] = "NOR"
            });

            var employee = new Employee {
                Name = "Dole Duck", Age = 12
            };

            // Act
            var spec = unbuilt.Build(employee);

            // Assert
            Assert.True(spec is ComponentTypeAndFieldSearchSpecElement);
            var cfe = (ComponentTypeAndFieldSearchSpecElement)spec;

            Assert.Equal("Employee", cfe.ComponentType);
            Assert.Equal(2, cfe.FieldFilters.Count);
            Assert.Equal("chess", cfe.FieldFilters["profession"].ToString());
            Assert.Equal("NOR", cfe.FieldFilters["nationality"].ToString());
        }
        public void Build_WithNameLambdaAndParentLambda_ReturnsExpectedSpecElement()
        {
            // Arrange
            var unbuilt = new ComponentTypeAndFieldUnbuiltSearchSpecElement <Employee>();

            unbuilt.SetNameGetter(emp => new List <string> {
                emp.Name
            });
            unbuilt.SetParentNameGetter(emp => new List <string> {
                emp.EmployedIn.Name
            });

            var department = new Department {
                Name = "Hakkespettene"
            };
            var employee = new Employee {
                Name = "Dole Duck", Age = 12, EmployedIn = department
            };

            // Act
            var spec = unbuilt.Build(employee);

            // Assert
            Assert.True(spec is ComponentTypeAndFieldSearchSpecElement);
            var cfe = (ComponentTypeAndFieldSearchSpecElement)spec;

            Assert.Equal("Dole Duck", cfe.NameList.Single());
            Assert.Equal("Hakkespettene", cfe.ParentNameList.Single());
        }
        public void Build_WithHardcodedComponentType_ReturnsExpectedSpecElement()
        {
            // Arrange
            var hardCodedCompType = "Hardcoded";
            var unbuilt           = new ComponentTypeAndFieldUnbuiltSearchSpecElement <Employee>();

            unbuilt.SetHardcodedComponentType(hardCodedCompType);

            // Act
            var spec = unbuilt.Build(new Employee());

            // Assert
            Assert.True(spec is ComponentTypeAndFieldSearchSpecElement);
            var cfe = (ComponentTypeAndFieldSearchSpecElement)spec;

            Assert.Equal(hardCodedCompType, cfe.ComponentType);
        }
        public void Build_WithJustComponentDefined_ReturnsExpectedSpecElement()
        {
            // Arrange
            var unbuilt = new ComponentTypeAndFieldUnbuiltSearchSpecElement <Employee>();

            unbuilt.SetComponentTypeGetter(e => "Employee");
            var employee = new Employee {
                Name = "Dole Duck", Age = 12
            };

            // Act
            var spec = unbuilt.Build(employee);

            // Assert
            Assert.True(spec is ComponentTypeAndFieldSearchSpecElement);
            var cfe = (ComponentTypeAndFieldSearchSpecElement)spec;

            Assert.Equal("Employee", cfe.ComponentType);
            Assert.Empty(cfe.FieldFilters);
        }
        public void Build_WithHardcodedComponentTypeAndLambda_LambdaTakesPrecedence()
        {
            // Arrange
            var hardCodedCompType = "Hardcoded";
            var unbuilt           = new ComponentTypeAndFieldUnbuiltSearchSpecElement <Employee>();

            unbuilt.SetComponentTypeGetter(e => "Employee");
            unbuilt.SetHardcodedComponentType(hardCodedCompType);

            var employee = new Employee {
                Name = "Dole Duck", Age = 12
            };

            // Act
            var spec = unbuilt.Build(employee);

            // Assert
            Assert.True(spec is ComponentTypeAndFieldSearchSpecElement);
            var cfe = (ComponentTypeAndFieldSearchSpecElement)spec;

            Assert.Equal("Employee", cfe.ComponentType);
        }