コード例 #1
0
    public void ResetFieldById(DbFieldCollection sut, [Frozen] ID id, DbField originalField, DbField newField)
    {
      sut[id] = originalField;
      sut[id] = newField;

      sut[id].Should().BeSameAs(newField);
    }
コード例 #2
0
 public void ShouldCreateTemplateFieldItemBasedOnDbField(ID templateId, DbField field)
 {
   using (var db = new Db { new DbTemplate(templateId) { field } })
   {
     db.GetItem(field.ID).Should().NotBeNull();
   }
 }
コード例 #3
0
    public void ShouldCreateTemplateFieldItemWithTypeField(ID templateId, DbField field)
    {
      using (var db = new Db { new DbTemplate(templateId) { field } })
      {
        var templateFieldItem = (TemplateFieldItem)db.GetItem(field.ID);

        templateFieldItem.Type.Should().Be(field.Type);
      }
    }
コード例 #4
0
    private static void SetFieldValue(DbField field, string lang, string value)
    {
      var valueSet = !string.IsNullOrEmpty(
        field.GetValue(lang, Version.Latest.Number));

      if (!valueSet)
      {
        field.SetValue(lang, value);
      }
    }
コード例 #5
0
    public void ShouldAddTemplateFieldItemsToDefaultSection(TemplateTreeBuilder sut, DbTemplate template, DbField field1, DbField field2)
    {
      template.Add(field1);
      template.Add(field2);

      sut.Build(template);

      var section = template.Children.Single();
      section.Children.Should().HaveCount(2);
    }
コード例 #6
0
    public void ShouldGetFieldById()
    {
      // arrange
      var id = ID.NewID;
      var field = new DbField("Title") { ID = id };
      var collection = new DbFieldCollection { field };

      // act & assert
      collection[id].ShouldBeEquivalentTo(field);
    }
コード例 #7
0
    public void ShouldCreateTemplateFieldItemWithSharedField(bool shared, ID templateId, DbField field)
    {
      field.Shared = shared;

      using (var db = new Db { new DbTemplate(templateId) { field } })
      {
        var templateFieldItem = (TemplateFieldItem)db.GetItem(field.ID);

        templateFieldItem.Shared.Should().Be(shared);
      }
    }
コード例 #8
0
    public void ShouldSaveFieldSource(TemplateTreeBuilder sut, DbTemplate template, DbField field)
    {
      field.Source = "/sitecore/content";
      template.Add(field);

      sut.Build(template);

      var section = template.Children.Single();
      var fieldItem = section.Children.Single();
      fieldItem.Fields[TemplateFieldIDs.Source].Value.Should().Be("/sitecore/content");
    }
コード例 #9
0
    public void ShouldSaveFieldType(TemplateTreeBuilder sut, DbTemplate template, DbField field)
    {
      field.Type = "General Link";
      template.Add(field);

      sut.Build(template);

      var section = template.Children.Single();
      var fieldItem = section.Children.Single();
      fieldItem.Fields[TemplateFieldIDs.Type].Value.Should().Be("General Link");
    }
コード例 #10
0
    public void ShouldAddFieldCopyToStandardValues(DbTemplate template, DbField field, string standardValue)
    {
      template.Add(field, standardValue);

      template.StandardValues.Should().Contain(
        f => f.Name == field.Name &&
             f.ID == field.ID &&
             f.Shared == field.Shared &&
             f.Source == field.Source &&
             f.Type == field.Type &&
             f.Value == standardValue);
    }
コード例 #11
0
    public void ShouldSetTemplateFieldItemData(TemplateTreeBuilder sut, DbTemplate template, DbField field)
    {
      template.Add(field);

      sut.Build(template);

      var section = template.Children.Single();
      var fieldItem = section.Children.Single();
      fieldItem.ID.Should().Be(field.ID);
      fieldItem.Name.Should().Be(field.Name);
      fieldItem.TemplateID.Should().Be(TemplateIDs.TemplateField);
    }
コード例 #12
0
    public void ShouldSetFieldById()
    {
      // arrange
      var id = ID.NewID;
      var originalField = new DbField("Title") { ID = id };
      var newField = new DbField("Title") { ID = id };

      var collection = new DbFieldCollection { originalField };

      // act
      collection[id] = newField;

      // assert
      collection[id].ShouldBeEquivalentTo(newField);
    }
コード例 #13
0
    public void ProcessSetsValidRevision(
      SetStatistics sut,
      [Frozen] DbItem item,
      AddDbItemArgs args,
      ID id,
      string value)
    {
      var field = new DbField(id) { { "en", value } };
      item.Fields.Add(field);

      sut.Process(args);
      var actual = item.Fields[FieldIDs.Revision].GetValue("en", 0);

      Assert.True(ID.IsID(actual));
    }
コード例 #14
0
    public virtual void Process(AddDbItemArgs args)
    {
      var item = args.DbItem;
      var dataStorage = args.DataStorage;

      var isResolved = this.ResolveTemplate(item, dataStorage);
      if (isResolved)
      {
        new TemplateTreeBuilder().Build(item);

        return;
      }

      if (!ID.IsNullOrEmpty(item.TemplateID) && dataStorage.GetFakeTemplate(item.TemplateID) != null)
      {
        return;
      }

      if (item.TemplateID == ID.Null)
      {
        item.TemplateID = ID.NewID;
      }

      var template = new DbTemplate(item.Name, item.TemplateID)
      {
        Generated = true
      };

      foreach (var itemField in item.Fields)
      {
        var templatefield = new DbField(itemField.Name, itemField.ID)
                              {
                                Shared = itemField.Shared,
                                Type = itemField.Type,
                                Source = itemField.Source
                              };
        template.Add(templatefield);
      }

      new TemplateTreeBuilder().Build(item);

      dataStorage.AddFakeItem(template);
    }
コード例 #15
0
    public void ProcessSetsSameCreateAndUpdateInfoForAllLanguages(
      string statisticField,
      SetStatistics sut,
      [Frozen] DbItem item,
      AddDbItemArgs args,
      ID id1,
      ID id2,
      string value1,
      string value2)
    {
      var statisticFieldId = ID.Parse(statisticField);
      var fieldEn = new DbField(id1) { { "en", value1 } };
      var fieldDa = new DbField(id2) { { "da", value2 } };
      item.Fields.Add(fieldEn);
      item.Fields.Add(fieldDa);

      sut.Process(args);
      var valueEn = item.Fields[statisticFieldId].GetValue("en", 0);
      var valueDa = item.Fields[statisticFieldId].GetValue("da", 0);

      valueEn.Should().Be(valueDa);
    }
コード例 #16
0
    public void ProcessSetsUniqueRevisionsForAllLanguages(
      SetStatistics sut,
      [Frozen] DbItem item,
      AddDbItemArgs args,
      ID id1,
      ID id2,
      string value1,
      string value2)
    {
      var fieldEn = new DbField(id1) { { "en", value1 } };
      var fieldDa = new DbField(id2) { { "da", value2 } };
      item.Fields.Add(fieldEn);
      item.Fields.Add(fieldDa);

      sut.Process(args);
      var revisionEn = item.Fields[FieldIDs.Revision].GetValue("en", 0);
      var revisionDa = item.Fields[FieldIDs.Revision].GetValue("da", 0);

      revisionEn.Should().NotBeNullOrEmpty();
      revisionDa.Should().NotBeNullOrEmpty();
      revisionEn.Should().NotBe(revisionDa);
    }
コード例 #17
0
    protected virtual void CopyField(DbField field, DbItem copy)
    {
      copy.Fields.Add(new DbField(field.Name, field.ID)
      {
        Shared = field.Shared,
        Type = field.Type
      });

      if (field.Shared)
      {
        copy.Fields[field.ID].Value = field.Value;
      }
      else
      {
        foreach (var fieldValue in field.Values)
        {
          var language = fieldValue.Key;
          var versions = fieldValue.Value.ToDictionary(v => v.Key, v => v.Value);

          copy.Fields[field.ID].Values.Add(language, versions);
        }
      }
    }
コード例 #18
0
 public void ShouldGetSomeValueForInvariantLanguageIfShared(DbField sut)
 {
   sut.Shared = true;
   sut.GetValue(Language.Invariant.Name, 0).Should().NotBeEmpty();
 }
コード例 #19
0
    public void ShouldGetSomeValueForInvariantLanguageIfShared(DbField field)
    {
      // arrange
      field.Shared = true;

      // act & assert
      field.GetValue(Language.Invariant.Name, 0).Should().NotBeEmpty();
    }
コード例 #20
0
 public void Write(DbField value)
 {
     this.outputStream.Write(value);
 }
コード例 #21
0
    public void ShouldMapDefaultFieldIdByName(string fieldName, string expectedId)
    {
      // act
      var dbfield = new DbField(fieldName);

      // assert
      dbfield.ID.ToString().Should().Be(expectedId);
    }
コード例 #22
0
    public void ShouldGetEmptyValueForInvariantLanguageIfNotShared(DbField field)
    {
      // arrange
      field.Shared = false;

      // act & assert
      field.GetValue(Language.Invariant.Name, 0).Should().BeEmpty();
    }
コード例 #23
0
    public void ShouldMarkStandardFieldsSharedByDefault(string fieldName, bool shared)
    {
      // arrange & act
      var dbfield = new DbField(fieldName);

      // assert
      dbfield.Shared.Should().Be(shared);
    }
コード例 #24
0
    public void ShouldMapDefaultFieldNameById(string fieldId, string expectedName)
    {
      // arrange
      var id = new ID(fieldId);

      // act
      var dbfield = new DbField(id);

      // assert
      dbfield.Name.Should().Be(expectedName);
    }
コード例 #25
0
 public DbFieldTest()
 {
   this.field = new DbField("Title");
 }
コード例 #26
0
    public void ShouldGetFieldListByTemplateId()
    {
      // arrange
      var templateId = ID.NewID;
      var field1 = new DbField("Title");
      var field2 = new DbField("Title");

      var template = new DbTemplate { ID = templateId, Fields = { field1, field2 } };

      this.dataStorage.FakeTemplates.Add(templateId, template);

      // act
      var fieldList = this.dataStorage.GetFieldList(template.ID);

      // assert
      fieldList.Count.Should().Be(2);
      fieldList[field1.ID].Should().BeEmpty();
      fieldList[field2.ID].Should().BeEmpty();
    }
コード例 #27
0
    public void ShouldReturnFalseIfNoValueFoundForLanguage(DbItem sut, DbField field, string language)
    {
      field.Values[language] = new Dictionary<int, string>();
      sut.Add(field);

      sut.RemoveVersion(language).Should().BeFalse();
    }
コード例 #28
0
    protected void FillDefaultFakeItems()
    {
      var field = new DbField("__Security") { Value = "ar|Everyone|p*|+*|" };

      this.FakeItems.Add(ItemIDs.RootID, new DbItem(ItemNames.Sitecore, ItemIDs.RootID, TemplateIdSitecore) { ParentID = ID.Null, FullPath = "/sitecore", Fields = { field } });
      this.FakeItems.Add(ItemIDs.ContentRoot, new DbItem(ItemNames.Content, ItemIDs.ContentRoot, TemplateIDs.MainSection) { ParentID = ItemIDs.RootID, FullPath = "/sitecore/content" });
      this.FakeItems.Add(ItemIDs.TemplateRoot, new DbItem(ItemNames.Templates, ItemIDs.TemplateRoot, TemplateIDs.MainSection) { ParentID = ItemIDs.RootID, FullPath = "/sitecore/templates" });
      this.FakeItems.Add(ItemIDs.BranchesRoot, new DbItem(ItemNames.Branches, ItemIDs.BranchesRoot, TemplateIDs.BranchTemplateFolder) { ParentID = ItemIDs.TemplateRoot, FullPath = "/sitecore/templates/Branches" });
      this.FakeItems.Add(ItemIDs.SystemRoot, new DbItem(ItemNames.System, ItemIDs.SystemRoot, TemplateIDs.MainSection) { ParentID = ItemIDs.RootID, FullPath = "/sitecore/system" });
      this.FakeItems.Add(ItemIDs.MediaLibraryRoot, new DbItem(ItemNames.MediaLibrary, ItemIDs.MediaLibraryRoot, TemplateIDs.MainSection) { ParentID = ItemIDs.RootID, FullPath = "/sitecore/media library" });

      this.FakeItems[ItemIDs.RootID].Add(this.FakeItems[ItemIDs.ContentRoot]);
      this.FakeItems[ItemIDs.RootID].Add(this.FakeItems[ItemIDs.TemplateRoot]);
      this.FakeItems[ItemIDs.RootID].Add(this.FakeItems[ItemIDs.SystemRoot]);
      this.FakeItems[ItemIDs.RootID].Add(this.FakeItems[ItemIDs.MediaLibraryRoot]);

      // TODO: Move 'Template' item to proper directory to correspond Sitecore structure.
      this.FakeItems.Add(TemplateIDs.TemplateSection, new DbTemplate(ItemNames.TemplateSection, TemplateIDs.TemplateSection, TemplateIDs.TemplateSection) { ParentID = ItemIDs.TemplateRoot, FullPath = "/sitecore/templates/template section" });
      this.FakeItems.Add(TemplateIDs.BranchTemplate, new DbItem(ItemNames.Branch, TemplateIDs.BranchTemplate, TemplateIDs.Template) { ParentID = ItemIDs.TemplateRoot, FullPath = "/sitecore/templates/branch" });

      this.AddFakeItem(new DbItem(ItemNames.DefinitionsRoot, ItemIDs.Analytics.MarketingCenterItem, TemplateIDs.Folder) { ParentID = ItemIDs.SystemRoot, FullPath = "/sitecore/system/Marketing Control Panel" });
      this.AddFakeItem(new DbItem(ItemNames.Profiles, ItemIDs.Analytics.Profiles, TemplateIDs.Folder) { ParentID = ItemIDs.Analytics.MarketingCenterItem, FullPath = "/sitecore/system/Marketing Control Panel/Profiles" });

      if (this.Database.Name == "core")
      {
        this.AddFakeItem(
          new DbItem(ItemNames.FieldTypes, new ID("{76E6D8C7-1F93-4712-872B-DA3C96B808F2}"), TemplateIDs.Node)
          {
            ParentID = ItemIDs.SystemRoot,
            Children = { new DbItem("text") { { "Control", "Text" } } }
          });
      }
    }
コード例 #29
0
        /// <summary>
        /// Creates a SQL Statement for merge-all operation.
        /// </summary>
        /// <param name="queryBuilder">The query builder to be used.</param>
        /// <param name="tableName">The name of the target table.</param>
        /// <param name="fields">The list of fields to be merged.</param>
        /// <param name="qualifiers">The list of the qualifier <see cref="Field"/> objects.</param>
        /// <param name="batchSize">The batch size of the operation.</param>
        /// <param name="primaryField">The primary field from the database.</param>
        /// <param name="identityField">The identity field from the database.</param>
        /// <param name="hints">The table hints to be used.</param>
        /// <returns>A sql statement for merge operation.</returns>
        public override string CreateMergeAll(QueryBuilder queryBuilder,
                                              string tableName,
                                              IEnumerable <Field> fields,
                                              IEnumerable <Field> qualifiers = null,
                                              int batchSize         = Constant.DefaultBatchOperationSize,
                                              DbField primaryField  = null,
                                              DbField identityField = null,
                                              string hints          = null)
        {
            // Ensure with guards
            GuardTableName(tableName);
            GuardHints(hints);
            GuardPrimary(primaryField);
            GuardIdentity(identityField);

            // Verify the fields
            if (fields?.Any() != true)
            {
                throw new MissingFieldsException($"The list of fields cannot be null or empty.");
            }

            // Check the qualifiers
            if (qualifiers?.Any() == true)
            {
                // Check if the qualifiers are present in the given fields
                var unmatchesQualifiers = qualifiers.Where(field =>
                                                           fields.FirstOrDefault(f =>
                                                                                 string.Equals(field.Name, f.Name, StringComparison.OrdinalIgnoreCase)) == null);

                // Throw an error we found any unmatches
                if (unmatchesQualifiers.Any() == true)
                {
                    throw new InvalidQualifiersException($"The qualifiers '{unmatchesQualifiers.Select(field => field.Name).Join(", ")}' are not " +
                                                         $"present at the given fields '{fields.Select(field => field.Name).Join(", ")}'.");
                }
            }
            else
            {
                if (primaryField != null)
                {
                    // Make sure that primary is present in the list of fields before qualifying to become a qualifier
                    var isPresent = fields.FirstOrDefault(f => string.Equals(f.Name, primaryField.Name, StringComparison.OrdinalIgnoreCase)) != null;

                    // Throw if not present
                    if (isPresent == false)
                    {
                        throw new InvalidQualifiersException($"There are no qualifier field objects found for '{tableName}'. Ensure that the " +
                                                             $"primary field is present at the given fields '{fields.Select(field => field.Name).Join(", ")}'.");
                    }

                    // The primary is present, use it as a default if there are no qualifiers given
                    qualifiers = primaryField.AsField().AsEnumerable();
                }
                else
                {
                    // Throw exception, qualifiers are not defined
                    throw new MissingQualifierFieldsException($"There are no qualifier fields found for '{tableName}'.");
                }
            }

            // Get the insertable and updateable fields
            var insertableFields = fields
                                   .Where(field => !string.Equals(field.Name, identityField?.Name, StringComparison.OrdinalIgnoreCase));
            var updateableFields = fields
                                   .Where(field => !string.Equals(field.Name, primaryField?.Name, StringComparison.OrdinalIgnoreCase) &&
                                          !string.Equals(field.Name, identityField?.Name, StringComparison.OrdinalIgnoreCase));

            // Variables needed
            var databaseType = (string)null;

            // Check for the identity
            if (identityField != null)
            {
                var dbType = new ClientTypeToDbTypeResolver().Resolve(identityField.Type);
                if (dbType != null)
                {
                    databaseType = new DbTypeToSqlServerStringNameResolver().Resolve(dbType.Value);
                }
            }
            else if (primaryField != null)
            {
                var dbType = new ClientTypeToDbTypeResolver().Resolve(primaryField.Type);
                if (dbType != null)
                {
                    databaseType = new DbTypeToSqlServerStringNameResolver().Resolve(dbType.Value);
                }
            }
            // Initialize the builder
            var builder = queryBuilder ?? new QueryBuilder();

            // Build the query
            builder.Clear();

            // Iterate the indexes
            for (var index = 0; index < batchSize; index++)
            {
                // MERGE T USING S
                builder.Merge()
                .TableNameFrom(tableName, DbSetting)
                .HintsFrom(hints)
                .As("T")
                .Using()
                .OpenParen()
                .Select()
                .ParametersAsFieldsFrom(fields, index, DbSetting)
                .CloseParen()
                .As("S")
                // QUALIFIERS
                .On()
                .OpenParen()
                .WriteText(qualifiers?
                           .Select(
                               field => field.AsJoinQualifier("S", "T", true, DbSetting))
                           .Join(" AND "))
                .CloseParen()
                // WHEN NOT MATCHED THEN INSERT VALUES
                .When()
                .Not()
                .Matched()
                .Then()
                .Insert()
                .OpenParen()
                .FieldsFrom(insertableFields, DbSetting)
                .CloseParen()
                .Values()
                .OpenParen()
                .AsAliasFieldsFrom(insertableFields, "S", DbSetting)
                .CloseParen()
                // WHEN MATCHED THEN UPDATE SET
                .When()
                .Matched()
                .Then()
                .Update()
                .Set()
                .FieldsAndAliasFieldsFrom(updateableFields, "T", "S", DbSetting);

                // Set the output
                var outputField = identityField ?? primaryField;
                if (outputField != null)
                {
                    builder
                    .WriteText(string.Concat("OUTPUT INSERTED.", outputField.Name.AsField(DbSetting)))
                    .As("[Id],")
                    .WriteText($"{DbSetting.ParameterPrefix}__RepoDb_OrderColumn_{index}")
                    .As("[OrderColumn]");
                }

                // End the builder
                builder.End();
            }

            // Return the query
            return(builder.GetString());
        }
コード例 #30
0
    protected DbField FindItemDbField(DbItem fakeItem, DbField templateField)
    {
      Assert.IsNotNull(fakeItem, "fakeItem");
      Assert.IsNotNull(templateField, "templateField");

      // The item has fields with the IDs matching the fields in the template it directly inherits from
      if (fakeItem.Fields.ContainsKey(templateField.ID))
      {
        return fakeItem.Fields[templateField.ID];
      }

      return fakeItem.Fields.SingleOrDefault(f => string.Equals(f.Name, templateField.Name));
    }
コード例 #31
0
    public void SetValueTwiceResetsExistingValue(bool shared, DbField sut, string oldValue, string newValue)
    {
      sut.Shared = shared;
      sut.SetValue("en", oldValue);

      sut.SetValue("en", newValue);

      sut.Value.Should().Be(newValue);
    }
コード例 #32
0
    public void ShouldGetItemFields([Greedy] FakeDataProvider sut, DbTemplate template, DbItem item, DbField field, Language language, Version version,
      CallContext context)
    {
      template.Fields.Add(field);
      item.Fields.Add(field); // ?
      item.TemplateID = template.ID;

      sut.DataStorage.GetFakeTemplate(template.ID).Returns(template);
      sut.DataStorage.GetFakeItem(item.ID).Returns(item);

      var def = new ItemDefinition(item.ID, item.Name, item.TemplateID, item.BranchId);
      var versionUri = new VersionUri(language, version);

      sut.GetItemFields(def, versionUri, context).Should().HaveCount(1);
    }
        private DbBaseFieldControl ItemRow(DbField fld, List <DbBaseFieldControl> subcontrols = null)
        {
            var fldRow = new TableRow();

            if (fld.Hidden)
            {
                fldRow.Style.Add("display", "none");
            }
            var titleCell = new TableCell {
                CssClass      = "ms-formlabel",
                VerticalAlign = VerticalAlign.Top,
                Width         = Unit.Pixel(113)
            };

            var displayName = fld.DisplayName;
            var lookup      = fld as DbFieldLookup;

            if (lookup != null)
            {
                if (lookup.ListSource == (int)LookupSourceType.SpList)
                {
                    var list = SPContext.Current.SPList(lookup.ListId.ToGuid());
                    if (list != null)
                    {
                        if (lookup.LookupFields.Count() > 1)
                        {
                            displayName = string.Format("{0} : {1}", fld.DisplayName,
                                                        list.FieldTitle(lookup.LookupFields[0].ToGuid()));
                        }
                    }
                }
            }

            var fldLabel = new Label {
                ID   = fld.InternalName + "_label",
                Text = displayName
            };

            titleCell.Controls.Add(fldLabel);

            var bodyCell = new TableCell {
                CssClass      = "ms-formbody",
                VerticalAlign = VerticalAlign.Top,
                Width         = Unit.Pixel(350)
            };

            bodyCell.Attributes.Add("fieldname", fld.InternalName);
            var baseCtrl = fld.BaseControl;

            baseCtrl.ID          = fld.InternalNameOriginal.ToNormalize();
            baseCtrl.ControlMode = ControlMode;
            if (subcontrols != null)
            {
                baseCtrl.Subcontrols.AddRange(subcontrols);
            }
            bodyCell.Controls.Add(baseCtrl);

            fldRow.Cells.Add(titleCell);
            fldRow.Cells.Add(bodyCell);

            FormTable.Rows.AddAt(0, fldRow);

            FieldControls.Add(new Tuple <Label, DbBaseFieldControl, DbField>(fldLabel, baseCtrl, fld));
            return(baseCtrl);
        }