-
Notifications
You must be signed in to change notification settings - Fork 36
Links
sergeyshushlyapin edited this page Nov 4, 2014
·
4 revisions
[Fact]
public void HowToWorkWithLinkDatabase()
{
// arrange your database and items
Sitecore.Data.ID sourceId = Sitecore.Data.ID.NewID;
Sitecore.Data.ID aliasId = Sitecore.Data.ID.NewID;
Sitecore.Data.ID linkedItemId = Sitecore.Data.ID.NewID;
using (Sitecore.FakeDb.Db db = new Sitecore.FakeDb.Db
{
new Sitecore.FakeDb.DbItem("source", sourceId),
new Sitecore.FakeDb.DbItem("clone"),
new Sitecore.FakeDb.DbItem("alias", aliasId, Sitecore.TemplateIDs.Alias)
{
new Sitecore.FakeDb.DbField("Linked item", linkedItemId)
}
})
{
// arrange desired LinkDatabase behavior
var behavior = Substitute.For<Sitecore.Links.LinkDatabase>();
Sitecore.Data.Items.Item source = db.GetItem("/sitecore/content/source");
Sitecore.Data.Items.Item alias = db.GetItem("/sitecore/content/alias");
Sitecore.Data.Items.Item clone = db.GetItem("/sitecore/content/clone");
string sourcePath = source.Paths.FullPath;
behavior.GetReferrers(source).Returns(new[]
{
new Sitecore.Links.ItemLink(alias, linkedItemId, source, sourcePath),
new Sitecore.Links.ItemLink(clone, Sitecore.FieldIDs.Source, source, sourcePath)
});
// link database is clean
Xunit.Assert.Equal(Sitecore.Globals.LinkDatabase.GetReferrers(source).Count(), 0);
using (new Sitecore.FakeDb.Links.LinkDatabaseSwitcher(behavior))
{
Sitecore.Links.ItemLink[] referrers =
Sitecore.Globals.LinkDatabase.GetReferrers(source);
Xunit.Assert.Equal(referrers.Count(), 2);
Xunit.Assert.Equal(referrers.Count(r => r.SourceItemID == clone.ID
&& r.TargetItemID == source.ID), 1);
Xunit.Assert.Equal(referrers.Count(r => r.SourceItemID == alias.ID
&& r.TargetItemID == source.ID), 1);
}
// link database is clean again
Xunit.Assert.Equal(Sitecore.Globals.LinkDatabase.GetReferrers(source).Count(), 0);
}
}