public void MultiChoiceFieldInfo_ShouldContainChoicesXmlInSchema()
        {
            // Arrange
            var id = Guid.NewGuid();
            var internalName = "InternalName";
            var displayName = "DisplayNameResourceKey";
            var description = "DescriptionNameResourceKey";
            var group = "GroupResourceKey";
            var expectedChoices = new[]
            {
                "My choice 1",
                "My choice 2",
                "My choice 3",
                "My choice 4"
            };

            // Act
            var fieldInfo = new MultiChoiceFieldInfo(internalName, id, displayName, description, group)
            {
                DefaultValue = "My choice 1"
            };

            fieldInfo.Choices.AddRange(expectedChoices);

            var baseFieldXml = GetBaseFieldXml(internalName, id, displayName, description, group);
            var fieldSchema = fieldInfo.Schema(baseFieldXml);
            var choicesNode = fieldSchema.Descendants("CHOICES").Single();
            var choiceValues = choicesNode.Descendants("CHOICE").Select(node => node.Value);

            // Assert
            Assert.IsNotNull(choicesNode);
            Assert.AreEqual(4, choiceValues.Count());
        }
        public void MultiChoiceFieldInfo_ShouldBeOfTypeMultiChoice()
        {
            // Arrange
            var expectedFieldType = "MultiChoice";

            // Act
            var fieldInfo = new MultiChoiceFieldInfo(
                "InternalName",
                Guid.NewGuid(),
                "DisplayNameResourceKey",
                "DescriptionNameResourceKey",
                "GroupResourceKey");
            var actualFieldType = fieldInfo.FieldType;

            // Assert
            Assert.AreEqual(expectedFieldType, actualFieldType);
        }
        public void EnsureField_WithMultiChoiceField_ShouldContainDefinedChoicesAndFieldSpecificAttributes()
        {
            using (var testScope = SiteTestScope.BlankSite())
            {
                // Arrange
                var fieldInfo = new MultiChoiceFieldInfo(
                    "TestInternalName",
                    new Guid("{0C58B4A1-B360-47FE-84F7-4D8F58AE80F6}"),
                    "NameKey",
                    "DescriptionKey",
                    "GroupKey")
                {
                    FillInChoice = true,
                    DefaultValue = "My choice 1",
                };

                fieldInfo.Choices.AddRange(new[] { "My choice 1", "My choice 2", "My choice 3" });

                using (var injectionScope = IntegrationTestServiceLocator.BeginLifetimeScope())
                {
                    var fieldHelper = injectionScope.Resolve<IFieldHelper>();
                    var fieldsCollection = testScope.SiteCollection.RootWeb.Fields;
                    var noOfFieldsBefore = fieldsCollection.Count;

                    // Act
                    var field = fieldHelper.EnsureField(fieldsCollection, fieldInfo) as SPFieldMultiChoice;

                    // Assert
                    Assert.AreEqual(noOfFieldsBefore + 1, fieldsCollection.Count);
                    Assert.IsNotNull(field);
                    Assert.AreEqual(fieldInfo.Id, field.Id);
                    Assert.AreEqual(fieldInfo.InternalName, field.InternalName);
                    Assert.AreEqual(fieldInfo.DisplayNameResourceKey, field.TitleResource.Value);
                    Assert.AreEqual(fieldInfo.DescriptionResourceKey, field.DescriptionResource.Value);
                    Assert.AreEqual(fieldInfo.GroupResourceKey, field.Group);

                    // Assert field specific attributes
                    Assert.IsTrue(field.FillInChoice);
                    Assert.AreEqual(fieldInfo.Choices.Count, field.Choices.Count);
                    Assert.AreEqual(fieldInfo.Choices[0], field.Choices[0]);
                    Assert.AreEqual(fieldInfo.Choices[1], field.Choices[1]);
                    Assert.AreEqual(fieldInfo.Choices[2], field.Choices[2]);
                    Assert.AreEqual(fieldInfo.DefaultValue, field.DefaultValue);

                    var fieldRefetched = testScope.SiteCollection.RootWeb.Fields[fieldInfo.Id] as SPFieldMultiChoice;
                    Assert.IsNotNull(fieldRefetched);
                    Assert.AreEqual(fieldInfo.Id, fieldRefetched.Id);
                    Assert.AreEqual(fieldInfo.InternalName, fieldRefetched.InternalName);
                    Assert.AreEqual(fieldInfo.DisplayNameResourceKey, fieldRefetched.TitleResource.Value);
                    Assert.AreEqual(fieldInfo.DescriptionResourceKey, fieldRefetched.DescriptionResource.Value);
                    Assert.AreEqual(fieldInfo.GroupResourceKey, fieldRefetched.Group);

                    // Assert field specific attributes
                    Assert.IsTrue(fieldRefetched.FillInChoice);
                    Assert.AreEqual(fieldInfo.Choices[0], fieldRefetched.Choices[0]);
                    Assert.AreEqual(fieldInfo.Choices[1], fieldRefetched.Choices[1]);
                    Assert.AreEqual(fieldInfo.Choices[2], fieldRefetched.Choices[2]);
                    Assert.AreEqual(fieldInfo.DefaultValue, fieldRefetched.DefaultValue);
                }
            }
        }