private void ValidateUniqueCompositeKey(SPItemEventProperties properties, string[] compositeKeyFields)
        {
            // If the receiver isn't created with the data we need exit quickly (for performance reasons)
            if (string.IsNullOrEmpty(properties.ReceiverData))
            {
                return;
            }


            SPItemEventDataCollection aftProps  = properties.AfterProperties;
            ListItemValidator         validator = new ListItemValidator();

            bool result = validator.MatchingFieldsExistInList(properties.List, aftProps, compositeKeyFields);

            if (result)
            {
                StringBuilder errorMessage = new StringBuilder();
                errorMessage.Append("Duplicate entry.  The same composite key exists with the Field=Value: ");
                for (int looper = 0; looper < compositeKeyFields.Length; looper++)
                {
                    string key = compositeKeyFields[looper];
                    errorMessage.Append(key).Append('=').Append(aftProps[key]);
                    if (looper + 1 != compositeKeyFields.Length)
                    {
                        errorMessage.Append(", ");
                    }
                }
                properties.ErrorMessage = errorMessage.ToString();
                properties.Cancel       = true;
            }
        }
        public void MatchingFieldsExistInList_ReturnsTrue_MatchingFieldsInList()
        {
            //Arrange
            var     validator   = new ListItemValidator();
            MSPList spList      = new MSPList();
            var     spFields    = new MSPFieldCollection();
            var     lookupField = new MSPField();

            lookupField.TypeGet = () => SPFieldType.Lookup;
            spList.FieldsGet    = () => spFields;
            spFields.GetFieldByInternalNameString = n => lookupField;
            var dataCollection = new MSPItemEventDataCollection();

            dataCollection.ItemGetString = (s) => "1";
            var returnedItems = new MSPListItemCollection();

            returnedItems.CountGet = () => 1;
            spList.GetItemsSPQuery = q => returnedItems;

            var fields = new List <string>();

            fields.Add("Field1");
            fields.Add("Field2");
            //Act
            bool result = validator.MatchingFieldsExistInList(spList, dataCollection, fields);

            //Assert
            Assert.IsTrue(result);
        }