public void Helper_copy_attributes_with_column_set()
        {
            var id        = Guid.NewGuid();
            var reference = new EntityReference("entity", Guid.NewGuid())
            {
                Name = "name"
            };
            var optionSet = new OptionSetValue(1);
            var money     = new Money(100m);
            var number    = 123;

            var attributes = new AttributeCollection();

            attributes["attr_1"] = id;
            attributes["attr_2"] = reference;
            attributes["attr_3"] = optionSet;
            attributes["attr_4"] = money;
            attributes["attr_5"] = number;

            var columnSet = new ColumnSet("attr_2", "attr_4");
            var result    = InternalHelper.Copy(attributes, columnSet);

            Assert.False(result.Contains("attr_1"));

            Assert.NotSame(reference, result["attr_2"]);
            Assert.Equal(reference, result["attr_2"]);
            Assert.Equal(reference.Name, ((EntityReference)result["attr_2"]).Name);

            Assert.False(result.Contains("attr_3"));

            Assert.NotSame(money, result["attr_4"]);
            Assert.Equal(money, result["attr_4"]);

            Assert.False(result.Contains("attr_5"));
        }
        public void Helper_copy_entity()
        {
            var id        = Guid.NewGuid();
            var reference = new EntityReference("reference", Guid.NewGuid());
            var money     = new Money(100m);

            var relationship    = new Relationship();
            var relatedEntities = new EntityCollection();

            var source = new Entity("entity")
            {
                Id              = id,
                EntityState     = EntityState.Changed,
                RowVersion      = "row-version",
                FormattedValues =
                {
                    ["xts_attribute"] = "Hello World"
                },
                KeyAttributes =
                {
                    ["xts_keyattribute"] = "my-key-1234"
                },
                RelatedEntities =
                {
                    [relationship] = relatedEntities
                }
            };

            source["xts_attr1"] = reference;
            source["xts_attr2"] = money;

            var result = InternalHelper.Copy(source);

            Assert.NotSame(source, result);
            Assert.Equal(id, result.Id);
            Assert.Equal(source.LogicalName, result.LogicalName);
            Assert.Equal(source.EntityState, result.EntityState);
            Assert.Equal(source.RowVersion, result.RowVersion);
            Assert.Equal(reference, result["xts_attr1"]);
            Assert.Equal(money, result["xts_attr2"]);
            Assert.Equal("Hello World", result.FormattedValues["xts_attribute"]);
            Assert.Equal("my-key-1234", result.KeyAttributes["xts_keyattribute"]);
            Assert.Same(source.ExtensionData, result.ExtensionData);
            Assert.Same(relatedEntities, result.RelatedEntities[relationship]);

            var columnSet = new ColumnSet(true);

            result = InternalHelper.Copy(source, columnSet);
            Assert.Equal(reference, result["xts_attr1"]);
            Assert.Equal(money, result["xts_attr2"]);

            columnSet = new ColumnSet("xts_attr2");
            result    = InternalHelper.Copy(source, columnSet);
            Assert.False(result.Contains("xts_attr1"));
            Assert.Equal(money, result["xts_attr2"]);
        }
        public void Helper_copy_attributes()
        {
            var id        = Guid.NewGuid();
            var reference = new EntityReference("entity", Guid.NewGuid())
            {
                Name = "name"
            };
            var optionSet = new OptionSetValue(1);
            var money     = new Money(100m);
            var number    = 123;

            var attributes = new AttributeCollection();

            attributes["attr_1"] = id;
            attributes["attr_2"] = reference;
            attributes["attr_3"] = optionSet;
            attributes["attr_4"] = money;
            attributes["attr_5"] = number;

            var result = InternalHelper.Copy(attributes);

            Assert.NotSame(attributes, result);
            Assert.Equal(id, result["attr_1"]);

            Assert.NotSame(reference, result["attr_2"]);
            Assert.Equal(reference, result["attr_2"]);
            Assert.Equal(reference.Name, ((EntityReference)result["attr_2"]).Name);

            Assert.NotSame(optionSet, result["attr_3"]);
            Assert.Equal(optionSet, result["attr_3"]);

            Assert.NotSame(money, result["attr_4"]);
            Assert.Equal(money, result["attr_4"]);

            Assert.Equal(number, result["attr_5"]);
        }