public IEnumerable<PropertyState> GetBoundedStates(Property property, PropertyState state)
        {
            var packages = state.ContentPackages;
            var propertyStates = packages.Aggregate(new List<PropertyState>().AsEnumerable(),
                                                    (acc, elem) => acc.Concat(elem.PropertyStates));

            return propertyStates.Where(st => st.Property.ID == property.ID)
                .Distinct(new DefaultModelEqualityComparer<PropertyState>());
        }
        public PropertyState CreateState(Property property, string value)
        {
            var existingPropertyStates = property.States.Where(state => state.Value == value).FirstOrDefault();
            if (existingPropertyStates != null)
                throw new InvalidOperationException("Property state already exists.");

            int index = property.States.Count == 0 ? 1 : property.States.Max(x => x.Index) + 1;
            var propertyState = new PropertyState
                                {
                                    Property = property,
                                    Value = value,
                                    Index = index
                                };
            UnitOfWork.GetRepository<PropertyState>().Insert(propertyState);
            UnitOfWork.Save();
            return propertyState;
        }
        private ContentPackage CreateContent()
        {
            var file1 = new ContentFile {Name = "file1.txt", Stream = CreateInputStream()};
            var file2 = new ContentFile {Name = "file2.txt", Stream = CreateInputStream()};
            var content = new ContentPackage {Files = new List<ContentFile> {file1, file2}};

            file1.ContentPackage = content;
            file2.ContentPackage = content;

            var property1 = new Property {ID = 1, Order = 1};
            var property2 = new Property {ID = 2, Order = 2};
            var state1 = new PropertyState {ID = 1, Value = "prop1", Property = property1,Index = 1};
            var state2 = new PropertyState {ID = 2, Value = "prop2", Property = property2,Index = 2};

            content.PropertyStates = new Collection<PropertyState> {state1, state2};

            return content;
        }
        private void InitUnitOfWork(UnitOfWorkMock unitOfWork)
        {
            var property1 = new Property {Name = "property1", Order = 1, ID = 1};
            var property2 = new Property {Name = "property2", Order = 2, ID = 2};

            var state1 = new PropertyState {Property = property1, Value = "state1"};
            var state2 = new PropertyState {Property = property1, Value = "state2"};
            var state3 = new PropertyState {Property = property2, Value = "state3"};
            var state4 = new PropertyState {Property = property2, Value = "state4"};

            property1.States = new List<PropertyState> {state1, state2};
            property2.States = new List<PropertyState> {state3, state4};

            var package1 = new ContentPackage
                           {
                               ID = 1,
                               PropertyStates = new Collection<PropertyState> {state1, state3}
                           };

            var package2 = new ContentPackage
                           {
                               ID = 2,
                               PropertyStates = new Collection<PropertyState> {state2, state4}
                           };

            state1.ContentPackages = new Collection<ContentPackage> {package1};
            state2.ContentPackages = new Collection<ContentPackage> {package2};
            state3.ContentPackages = new Collection<ContentPackage> {package1};
            state4.ContentPackages = new Collection<ContentPackage> {package2};

            unitOfWork.GetRepository<Property>().Insert(property1);
            unitOfWork.GetRepository<Property>().Insert(property2);

            unitOfWork.GetRepository<PropertyState>().Insert(state1);
            unitOfWork.GetRepository<PropertyState>().Insert(state2);
            unitOfWork.GetRepository<PropertyState>().Insert(state3);
            unitOfWork.GetRepository<PropertyState>().Insert(state4);

            unitOfWork.GetRepository<ContentPackage>().Insert(package1);
            unitOfWork.GetRepository<ContentPackage>().Insert(package2);

            unitOfWork.Save();
        }
 private static PropertyState CreatePropertyState(Property property)
 {
     var propertyState = new PropertyState {Property = property, Value = "value"};
     property.States.Add(propertyState);
     return propertyState;
 }