public void ShouldBeThreadLocalStandardValuesProvider()
    {
      var templateId = ID.NewID;
      var itemId = ID.NewID;
      var fieldId = ID.NewID;

      var t1 = Task.Factory.StartNew(() =>
      {
        using (var db = new Db
                          {
                            new DbTemplate(templateId) { { fieldId, "$name" } },
                            new DbItem("Home", itemId, templateId)
                          })
        {
          Thread.Sleep(1000);
          db.GetItem(itemId)[fieldId].Should().Be("Home");
        }
      });

      var t2 = Task.Factory.StartNew(() =>
      {
        using (var db = new Db
                          {
                            new DbTemplate(templateId) { fieldId },
                            new DbItem("Home", itemId, templateId)
                          })
        {
          db.GetItem(itemId)[fieldId].Should().BeEmpty();
        }
      });

      t1.Wait();
      t2.Wait();
    }
    public void ShouldPropagateFieldsFromTheBaseTemplate()
    {
      // arrange
      ID templateId = ID.NewID;

      using (var db = new Db
      {
        this.baseTemplateOne,
        new DbTemplate("My Template", templateId) {BaseIDs = new[] {this.baseTemplateOne.ID}},
        new DbItem("home", ID.NewID, templateId)
      })
      {
        // act
        Item home = db.GetItem("/sitecore/content/home");
        Template template = TemplateManager.GetTemplate(templateId, db.Database);
        Template baseTemplate = TemplateManager.GetTemplate(this.baseTemplateOne.ID, db.Database);

        TemplateField titleField = baseTemplate.GetField("Title");

        // assert 

        // note: it should "just" work as Sitecore wil do all the looking up the templates chain
        template.GetFields(false).Should().NotContain(f => f.Name == "Title" || f.ID == titleField.ID);
        template.GetFields(true).Should().Contain(f => f.Name == "Title" && f.ID == titleField.ID);

        template.GetField("Title").Should().NotBeNull("template.GetField(\"Title\")");
        template.GetField(titleField.ID).Should().NotBeNull("template.GetField(titleField.ID)");

        home.Fields["Title"].Should().NotBeNull("home.Fields[\"Title\"]");
        home.Fields[titleField.ID].Should().NotBeNull("home.Fields[titleField.ID]");
      }
    }
    public void ShouldPropagateFieldsFromAllBaseTemplates()
    {
      // arrange
      ID myTemplateId = ID.NewID;

      using (var db = new Db
      {
        this.baseTemplateOne,
        this.baseTemplateTwo,
        this.baseTemplateThree,
        new DbTemplate("Main Template", myTemplateId) {BaseIDs = new[] {this.baseTemplateOne.ID, this.baseTemplateThree.ID}},
        new DbItem("home", ID.NewID, myTemplateId)
      })
      {
        // act
        Item home = db.GetItem("/sitecore/content/home");
        Template template = TemplateManager.GetTemplate(myTemplateId, db.Database);

        // assert

        // note: as noted above, fields propagation should "just" work
        home.Fields["Title"].Should().NotBeNull("home.Fields[\"Title\"]");
        home.Fields["Description"].Should().NotBeNull("home.Fields[\"Description\"]");

        template.GetField("Title").Should().NotBeNull("template.GetField(\"Title\")");
        template.GetField("Description").Should().NotBeNull("template.GetField(\"Description\")");
      }
    }
예제 #4
0
 public void ShouldCreateItemHierarchyAndReadChildByPath()
 {
   // arrange & act
   using (var db = new Db { new DbItem("parent") { new DbItem("child") } })
   {
     // assert
     db.GetItem("/sitecore/content/parent/child").Should().NotBeNull();
   }
 }
    public void ShouldGetLayoutField()
    {
      using (var db = new Db { new DbItem("home") })
      {
        var home = db.GetItem("/sitecore/content/home");

        FieldTypeManager.GetField(home.Fields[FieldIDs.LayoutField]).Should().BeOfType<LayoutField>();
        FieldTypeManager.GetFieldType("Layout").Type.Should().Be<LayoutField>();
      }
    }
예제 #6
0
    public void ShouldDeserializeNullBaseTemplateItem()
    {
      var item = new DsDbItem("/sitecore/content/New Item Without BaseTemplates");

      using (var db = new Db { item })
      {
        var linkedTemplate = db.GetItem(item.TemplateID);
        linkedTemplate.Should().NotBeNull();
        linkedTemplate.Template.Name.ShouldBeEquivalentTo("Template");
      }
    }
    public void ShouldGetField(string name, Type type)
    {
      using (var db = new Db
                        {
                          new DbItem("home") { new DbField("field") { Type = name } }
                        })
      {
        var home = db.GetItem("/sitecore/content/home");

        FieldTypeManager.GetField(home.Fields["field"]).Should().BeOfType(type);
        FieldTypeManager.GetFieldType(name).Type.Should().Be(type);
      }
    }
    public void ShouldNotTimeOutOnFailingFluentAssertion()
    {
      // arrange
      using (var db = new Db
      {
        new DbItem("home")
      })
      {
        var home = db.GetItem("/sitecore/content/home");

        Action assertion = () =>
        {
          try { home.Should().BeNull(); } catch { }
        };

        // act && assert
        assertion.ExecutionTime().ShouldNotExceed(1.Seconds());
      }
    }
    public void ShouldBeThreadLocalDb()
    {
      var t1 = Task.Factory.StartNew(() =>
        {
          using (var db = new Db { new DbItem("Home") })
          {
            Thread.Sleep(1000);
            db.GetItem("/sitecore/content/home").Should().NotBeNull("the Home item is expected");
          }
        });

      var t2 = Task.Factory.StartNew(() =>
        {
          using (var db = new Db())
          {
            db.GetItem("/sitecore/content/home").Should().BeNull("the Home item is not expected");
          }
        });

      t1.Wait();
      t2.Wait();
    }
    public void ShouldNotThrowOnGetTemplateFieldItem()
    {
      // arrange
      using (var db = new Db
                        {
                          new DbItem("home") { new DbField("field") }
                        })
      {
        var home = db.GetItem("/sitecore/content/home");

        // act
        FieldTypeManager.GetTemplateFieldItem(home.Fields["field"]);
      }
    }
예제 #11
0
 public void ShouldCreateItemOfFolderTemplate()
 {
   // arrange & act
   using (var db = new Db
                     {
                       new DbItem("Sample") { TemplateID = TemplateIDs.Folder }
                     })
   {
     // assert
     db.GetItem("/sitecore/content/sample").TemplateID.Should().Be(TemplateIDs.Folder);
   }
 }
예제 #12
0
    public void ShouldCreateAndFulfilCompositeFieldsStructure()
    {
      // arrange
      using (var db = new Db())
      {
        // act
        db.Add(new DbItem("item1") { { "field1", "item1-field1-value" }, { "field2", "item1-field2-value" } });
        db.Add(new DbItem("item2") { { "field1", "item2-field1-value" }, { "field2", "item2-field2-value" } });

        // assert
        db.GetItem("/sitecore/content/item1")["field1"].Should().Be("item1-field1-value");
        db.GetItem("/sitecore/content/item1")["field2"].Should().Be("item1-field2-value");
        db.GetItem("/sitecore/content/item2")["field1"].Should().Be("item2-field1-value");
        db.GetItem("/sitecore/content/item2")["field2"].Should().Be("item2-field2-value");
      }
    }
예제 #13
0
    public void ShouldCreateItemOfAnyVersion()
    {
      // arrange
      using (var db = new Db
                        {
                          new DbItem("home") { { "Title", "title v1" } }
                        })
      {
        var version2 = db.GetItem("/sitecore/content/home", "en", 2);

        // act
        using (new EditContext(version2))
        {
          version2["Title"] = "title v2";
        }

        // assert
        db.GetItem("/sitecore/content/home", "en", 1)["Title"].Should().Be("title v1");
        db.GetItem("/sitecore/content/home", "en", 2)["Title"].Should().Be("title v2");
      }
    }
예제 #14
0
    public void ShouldGetItemParent()
    {
      // arrange
      using (var db = new Db { new DbItem("item") })
      {
        // act
        var parent = db.GetItem("/sitecore/content/item").Parent;

        // assert
        parent.Paths.FullPath.Should().Be("/sitecore/content");
      }
    }
예제 #15
0
    public void ShouldDeserializeItemBasedOnTwoTemplates()
    {
      // arrange
      using (var db = new Db
                        {
                          new DsDbItem("/sitecore/content/New Composite Sample Item")
                        })
      {
        // act
        var item = db.GetItem("/sitecore/content/New Composite Sample Item");

        // assert
        item["Sample Field One"].Should().Be("Value One");
        item["Sample Field Two"].Should().Be("Value Two");
      }
    }
예제 #16
0
    public void ShouldNotAutoDeserializeLinkedTemplate()
    {
      var item = new DsDbItem("/sitecore/content/home", false, false);
      using (var db = new Db { item })
      {
        item.Should().NotBeNull();

        var templateItem = db.GetItem(item.TemplateID);
        templateItem.Name.Should().NotBe("Sample Item");
      }
    }
예제 #17
0
    public void ShouldBeEqualsButNotSame()
    {
      // arrange
      using (var db = new Db { new DbItem("home") })
      {
        // act
        var item1 = db.GetItem("/sitecore/content/Home");
        var item2 = db.GetItem("/sitecore/content/Home");

        // assert
        item1.Should().Be(item2);
        item1.Should().NotBeSameAs(item2);
      }
    }
예제 #18
0
    public void ShouldRemoveAllVersions()
    {
      // arrange
      using (var db = new Db
                       {
                         new DbItem("home")
                           {
                             Fields = { new DbField("Title") { { "en", 1, "Hi" }, { "da", 2, "Hey" } } }
                           }
                       })
      {
        var item = db.GetItem("/sitecore/content/home");

        // act
        item.Versions.RemoveAll(true);

        // assert
        db.GetItem("/sitecore/content/home", "en", 1)["Title"].Should().BeEmpty();
        db.GetItem("/sitecore/content/home", "da", 1)["Title"].Should().BeEmpty();
        db.GetItem("/sitecore/content/home", "da", 2)["Title"].Should().BeEmpty();
      }
    }
예제 #19
0
    public void ShouldShareTemplateForItemsWithFields()
    {
      // arrange & act
      using (var db = new Db
                        {
                          new DbItem("article 1") { { "Title", "A1" } },
                          new DbItem("article 2") { { "Title", "A2" } }
                        })
      {
        var template1 = db.GetItem("/sitecore/content/article 1").TemplateID;
        var template2 = db.GetItem("/sitecore/content/article 2").TemplateID;

        // assert
        template1.Should().Be(template2);
      }
    }
예제 #20
0
    public void ShouldReadFieldValueByIdAndName()
    {
      // arrange
      var fieldId = ID.NewID;
      using (var db = new Db
                        {
                          new DbItem("home") { new DbField("Title", fieldId) { Value = "Hello!" } }
                        })
      {
        // act
        var item = db.GetItem("/sitecore/content/home");

        // assert
        item[fieldId].Should().Be("Hello!");
        item["Title"].Should().Be("Hello!");
      }
    }
예제 #21
0
    public void ShouldNotShareTemplateForItemsWithDifferentFields()
    {
      // arrange & act
      using (var db = new Db
                        {
                          new DbItem("some item") { { "some field", "some value" } },
                          new DbItem("another item") { { "another field", "another value" } }
                        })
      {
        var template1 = db.GetItem("/sitecore/content/some item").TemplateID;
        var template2 = db.GetItem("/sitecore/content/another item").TemplateID;

        // assert
        template1.Should().NotBe(template2);
      }
    }
예제 #22
0
    public void ShouldNotShareTemplateForItemsIfTemplatesSetExplicitly()
    {
      // arrange & act
      using (var db = new Db
                        {
                          new DbItem("article 1") { { "Title", "A1" } },
                          new DbItem("article 2", ID.NewID, ID.NewID) { { "Title", "A2" } }
                        })
      {
        var item1 = db.GetItem("/sitecore/content/article 1");
        var item2 = db.GetItem("/sitecore/content/article 2");

        // assert
        item1.TemplateID.Should().NotBe(item2.TemplateID);

        item1["Title"].Should().Be("A1");
        item2["Title"].Should().Be("A2");
      }
    }
    public void ShouldGetTrackingField()
    {
      // arrange
      using (var db = new Db { new DbItem("home") })
      {
        var home = db.GetItem("/sitecore/content/home");

        // act & assert
        FieldTypeManager.GetField(home.Fields["__Tracking"]).Should().BeOfType<TrackingField>();
        FieldTypeManager.GetFieldType("Tracking").Type.Should().Be<TrackingField>();
      }
    }
예제 #24
0
    public void ShouldGetItemVersionsCount()
    {
      // arrange
      using (var db = new Db
                        {
                          new DbItem("home")
                            {
                              Fields =
                                {
                                  new DbField("Title") { { "en", 1, "v1" }, { "en", 2, "v2" } }
                                }
                            }
                        })
      {
        var item = db.GetItem("/sitecore/content/home");

        // act & assert
        item.Versions.Count.Should().Be(2);
      }
    }
예제 #25
0
    public void ShouldAutoDeserializeLinkedTemplate()
    {
      var item = new DsDbItem("/sitecore/content/home");
      using (var db = new Db { item })
      {
        var templateId = SerializationId.SampleItemTemplate;

        item.Should().NotBeNull();
        item.TemplateID.ShouldBeEquivalentTo(templateId);

        var templateItem = db.GetItem(item.TemplateID);

        templateItem.Should().NotBeNull();
        templateItem.Name.ShouldBeEquivalentTo("Sample Item");
      }
    }
예제 #26
0
    public void ShouldGetLanguages()
    {
      // arrange
      using (var db = new Db
                        {
                          new DbItem("home")
                            {
                              Fields =
                                {
                                  new DbField("Title") { { "en", 1, string.Empty }, { "da", 2, string.Empty } }
                                }
                            }
                        })
      {
        var item = db.GetItem("/sitecore/content/home");

        // act & assert
        item.Languages.Length.Should().Be(2);
        item.Languages.Should().Contain(Language.Parse("en"));
        item.Languages.Should().Contain(Language.Parse("da"));
      }
    }
예제 #27
0
    public void ShouldAutoDeserializeIncludingBaseTemplates()
    {
      var item = new DsDbItem("/sitecore/content/Home/Some item");
      using (var db = new Db { item })
      {
        var templateId = ID.Parse("{F6A72DBF-558F-40E5-8033-EE4ACF027FE2}");
        var baseTemplateId = ID.Parse("{C4F448EB-7CA3-4A27-BA5E-99E8B9022803}");

        item.Should().NotBeNull();
        item.TemplateID.ShouldBeEquivalentTo(templateId);

        var templateItem = db.GetItem(item.TemplateID);

        templateItem.Should().NotBeNull();
        templateItem.Name.ShouldBeEquivalentTo("Some template");
        templateItem[FieldIDs.BaseTemplate].ShouldBeEquivalentTo(baseTemplateId.ToString());

        var baseTemplateItem = db.GetItem(baseTemplateId);

        baseTemplateItem.Should().NotBeNull();
        baseTemplateItem.Name.ShouldBeEquivalentTo("Some base template");
        baseTemplateItem.ID.ShouldBeEquivalentTo(baseTemplateId);
      }
    }
예제 #28
0
    public void ShouldCreateItemVersion()
    {
      // arrange
      using (var db = new Db
                        {
                          new DbItem("home") { { "Title", "hello" } }
                        })
      {
        var item1 = db.GetItem("/sitecore/content/home");

        // act
        var item2 = item1.Versions.AddVersion();
        using (new EditContext(item2))
        {
          item2["Title"] = "Hi there!";
        }

        // assert
        item1["Title"].Should().Be("hello");
        item2["Title"].Should().Be("Hi there!");

        db.GetItem("/sitecore/content/home", "en", 1)["Title"].Should().Be("hello");
        db.GetItem("/sitecore/content/home", "en", 2)["Title"].Should().Be("Hi there!");
      }
    }
예제 #29
0
    public void ShouldReuseGeneratedTemplateFromNotOnlySiblings(string pathOne, string pathTwo, bool match)
    {
      // arrange
      using (var db = new Db
                        {
                          new DbItem("home")
                            {
                              new DbItem("one") { { "Title", "One" } }
                            }, 
                          new DbItem("site")
                            {
                              new DbItem("two") { { "Title", "Two" } }, 
                              new DbItem("three") { { "Title", "Three" }, { "Name", "Three" } }, 
                              new DbItem("four")
                            }
                        })
      {
        // act
        var one = db.GetItem(pathOne);
        var two = db.GetItem(pathTwo);

        // assert
        (one.TemplateID == two.TemplateID).Should().Be(match);
      }
    }
예제 #30
0
 public void ShouldGetItemFromSitecoreDatabase()
 {
   // arrange
   using (var db = new Db())
   {
     // act & assert
     db.GetItem("/sitecore/content").Should().NotBeNull();
   }
 }