public void CreatePageModel_RichTextEmbeddedMediaManagerItems_Success()
        {
            Page testPage = (Page)TestSession.GetObject(TestFixture.Tsi2306PageWebDavUrl);

            RenderedItem  testRenderedItem;
            PageModelData pageModel = CreatePageModel(testPage, out testRenderedItem);

            RegionModelData mainRegion = GetMainRegion(pageModel);
            EntityModelData article    = mainRegion.Entities.LastOrDefault(e => e.MvcData.ViewName == "Article");

            Assert.IsNotNull(article, "article");

            ContentModelData[] articleBody = (ContentModelData[])article.Content["articleBody"];
            RichTextData       content     = (RichTextData)articleBody[0]["content"];
            EntityModelData    embeddedMediaManagerItem = content.Fragments.OfType <EntityModelData>().FirstOrDefault();

            Assert.IsNotNull(embeddedMediaManagerItem, "embeddedMediaManagerItem");

            OutputJson(embeddedMediaManagerItem);

            BinaryContentData   binaryContent   = embeddedMediaManagerItem.BinaryContent;
            ExternalContentData externalContent = embeddedMediaManagerItem.ExternalContent;

            Assert.IsNotNull(binaryContent, "binaryContent");
            Assert.IsNotNull(externalContent, "externalContent");
            Assert.AreEqual("https://mmecl.dist.sdlmedia.com/distributions/?o=3e5f81f2-c7b3-47f7-8ede-b84b447195b9", binaryContent.Url, "binaryContent.Url");
            Assert.AreEqual("1065-mm-204-dist-file.ecl", binaryContent.FileName, "binaryContent.FileName");
            Assert.AreEqual("application/externalcontentlibrary", binaryContent.MimeType, "binaryContent.MimeType");
            Assert.AreEqual("ecl:1065-mm-204-dist-file", externalContent.Id, "ecl:1065-mm-204-dist-file");
            Assert.AreEqual("html5dist", externalContent.DisplayTypeId, "externalContent.DisplayTypeId");
            Assert.IsNotNull(externalContent.Metadata, "externalContent.Metadata");
        }
        protected virtual ViewModel CreateViewModel(MappingData mappingData)
        {
            ViewModelData   viewModelData   = mappingData.SourceViewModel;
            EntityModelData entityModelData = viewModelData as EntityModelData;

            ViewModel result;

            if (string.IsNullOrEmpty(mappingData.ModelId))
            {
                // Use parameterless constructor
                result = (ViewModel)mappingData.ModelType.CreateInstance();
            }
            else
            {
                // Pass model Identifier in constructor.
                result = (ViewModel)mappingData.ModelType.CreateInstance(mappingData.ModelId);
            }

            result.ExtensionData = viewModelData.ExtensionData;
            result.HtmlClasses   = viewModelData.HtmlClasses;
            result.XpmMetadata   = mappingData.Localization.IsXpmEnabled ? viewModelData.XpmMetadata : null;

            MediaItem mediaItem = result as MediaItem;

            if (mediaItem != null)
            {
                BinaryContentData binaryContent = entityModelData?.BinaryContent;
                if (binaryContent == null)
                {
                    throw new DxaException(
                              $"Unable to create Media Item ('{mappingData.ModelType.Name}') because the Data Model '{entityModelData?.Id}' does not contain Binary Content Data."
                              );
                }
                mediaItem.Url      = binaryContent.Url;
                mediaItem.FileName = binaryContent.FileName;
                mediaItem.MimeType = binaryContent.MimeType;
                mediaItem.FileSize = binaryContent.FileSize;
            }

            EclItem eclItem = result as EclItem;

            if (eclItem != null)
            {
                ExternalContentData externalContent = entityModelData.ExternalContent;
                if (externalContent == null)
                {
                    throw new DxaException(
                              $"Unable to create ECL Item ('{mappingData.ModelType.Name}') because the Data Model '{entityModelData.Id}' does not contain External Content Data."
                              );
                }
                eclItem.EclDisplayTypeId    = externalContent.DisplayTypeId;
                eclItem.EclTemplateFragment = externalContent.TemplateFragment;
                eclItem.EclExternalMetadata = externalContent.Metadata;
                eclItem.EclUri = externalContent.Id;
            }

            MapSemanticProperties(result, mappingData);

            return(result);
        }
        public void CreatePageModel_MediaManager_Success()
        {
            Page testPage = (Page)TestSession.GetObject(TestFixture.MediaManagerPageWebDavUrl);

            RenderedItem  testRenderedItem;
            PageModelData pageModel = CreatePageModel(testPage, out testRenderedItem);

            RegionModelData     mainRegion      = GetMainRegion(pageModel);
            EntityModelData     mmItem          = mainRegion.Entities[0];
            BinaryContentData   binaryContent   = mmItem.BinaryContent;
            ExternalContentData externalContent = mmItem.ExternalContent;

            Assert.IsNotNull(binaryContent, "binaryContent");
            Assert.AreEqual("https://mmecl.dist.sdlmedia.com/distributions/?o=51498399-31e9-4c89-98eb-0c4256c96f71", binaryContent.Url, "binaryContent.Url");
            Assert.AreEqual("application/externalcontentlibrary", binaryContent.MimeType, "binaryContent.MimeType");
            Assert.IsNotNull(externalContent, "externalContent");
            Assert.AreEqual("ecl:1065-mm-415-dist-file", externalContent.Id, "externalContent.Id");
            Assert.AreEqual("html5dist", externalContent.DisplayTypeId, "externalContent.DisplayTypeId");
            Assert.IsNotNull(externalContent.Metadata, "externalContent.Metadata");
            object globalId;

            Assert.IsTrue(externalContent.Metadata.TryGetValue("GlobalId", out globalId), "externalContent.Metadata['GlobalId']");
            Assert.AreEqual("51498399-31e9-4c89-98eb-0c4256c96f71", globalId, "globalId");
            StringAssert.Contains(externalContent.TemplateFragment, (string)globalId, "externalContent.TemplateFragment");
        }
 private void AssertEqualExternalContent(ExternalContentData expected, ExternalContentData actual, string subject)
 {
     if (expected == null)
     {
         Assert.IsNull(actual, subject);
     }
     else
     {
         Assert.IsNotNull(actual, subject);
         Assert.AreEqual(expected.Id, actual.Id, subject + ".Id");
         Assert.AreEqual(expected.DisplayTypeId, actual.DisplayTypeId, subject + ".DisplayTypeId");
         Assert.AreEqual(expected.TemplateFragment, actual.TemplateFragment, subject + ".TemplateFragment");
         // TODO: AssertEqualDictionaries(expected.Metadata, actual.Metadata, subject + ".Metadata");
     }
 }
        public void CreatePageModel_Flickr_Success()
        {
            Page testPage = (Page)TestSession.GetObject(TestFixture.FlickrTestPageWebDavUrl);

            RenderedItem  testRenderedItem;
            PageModelData pageModel = CreatePageModel(testPage, out testRenderedItem);

            RegionModelData     mainRegion      = GetMainRegion(pageModel);
            EntityModelData     flickrImage     = mainRegion.Entities[0];
            BinaryContentData   binaryContent   = flickrImage.BinaryContent;
            ExternalContentData externalContent = flickrImage.ExternalContent;

            Assert.IsNotNull(binaryContent, "binaryContent");
            StringAssert.Matches(binaryContent.Url, new Regex(@"/Preview/Images/.*\.jpg"), "binaryContent.Url");
            Assert.AreEqual("image/jpeg", binaryContent.MimeType, "binaryContent.MimeType");
            Assert.IsNotNull(externalContent, "externalContent");
            Assert.AreEqual("ecl:1065-flickr-5606989559_6b62b3c3fc_72157626470204584-img-file", externalContent.Id, "externalContent.Id");
            Assert.AreEqual("img", externalContent.DisplayTypeId, "externalContent.DisplayTypeId");
            Assert.IsNotNull(externalContent.Metadata, "externalContent.Metadata");
            object width;

            Assert.IsTrue(externalContent.Metadata.TryGetValue("Width", out width), "externalContent.Metadata['Width']");
            Assert.AreEqual("1024", width, "width");
        }