예제 #1
0
        public void SchemaVersionSupportedInProject_returns_true_for_v3_and_EF6_otherwise_false()
        {
            var targetNetFrameworkVersions =
                new[] { ".NETFramework, Version=v4.0", ".NETFramework, Version=v4.5" };

            foreach (var targetNetFrameworkVersion in targetNetFrameworkVersions)
            {
                var mockDte =
                    new MockDTE(
                        targetNetFrameworkVersion,
                        references: new[] { MockDTE.CreateReference("EntityFramework", "6.0.0.0") });

                Assert.False(
                    VsUtils.SchemaVersionSupportedInProject(
                        mockDte.Project, EntityFrameworkVersion.Version1, mockDte.ServiceProvider));

                Assert.False(
                    VsUtils.SchemaVersionSupportedInProject(
                        mockDte.Project, EntityFrameworkVersion.Version2, mockDte.ServiceProvider));

                Assert.True(
                    VsUtils.SchemaVersionSupportedInProject(
                        mockDte.Project, EntityFrameworkVersion.Version3, mockDte.ServiceProvider));
            }
        }
        public void GetMetadataFileNamesFromArtifactFileName_creates_metadata_file_names_for_non_null_edmx_ProjectItem()
        {
            var mockDte = new MockDTE(".NETFramework, Version=v4.5", references: new Reference[0]);

            mockDte.SetProjectProperties(new Dictionary <string, object> {
                { "FullPath", @"D:\Projects\Project\Folder" }
            });
            var mockParentProjectItem = new Mock <ProjectItem>();

            mockParentProjectItem.Setup(p => p.Collection).Returns(Mock.Of <ProjectItems>());
            mockParentProjectItem.Setup(p => p.Name).Returns("Folder");

            var mockModelProjectItem = new Mock <ProjectItem>();
            var mockCollection       = new Mock <ProjectItems>();

            mockCollection.Setup(p => p.Parent).Returns(mockParentProjectItem.Object);
            mockModelProjectItem.Setup(p => p.Collection).Returns(mockCollection.Object);

            var metadataFileNames =
                ConnectionManager.GetMetadataFileNamesFromArtifactFileName(
                    mockDte.Project, @"c:\temp\myModel.edmx", mockDte.ServiceProvider, (_, __) => mockModelProjectItem.Object);

            Assert.Equal(@".\Folder\myModel.csdl", metadataFileNames[0]);
            Assert.Equal(@".\Folder\myModel.ssdl", metadataFileNames[1]);
            Assert.Equal(@".\Folder\myModel.msl", metadataFileNames[2]);
        }
예제 #3
0
        public void RunStarted_saves_context_generated_code_replacementsDictionary_as_contextfilecontents()
        {
            var mockCodeGenerator = new Mock <CodeFirstModelGenerator>(MockDTE.CreateProject());

            mockCodeGenerator
            .Setup(g => g.Generate(It.IsAny <DbModel>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>()))
            .Returns(new[] { new KeyValuePair <string, string>("MyContext", "context code") });

            var modelBuilderSettings =
                new ModelBuilderSettings {
                SaveConnectionStringInAppConfig = true, AppConfigConnectionPropertyName = "ConnString"
            };

            var replacementsDictionary =
                new Dictionary <string, string>
            {
                { "$safeitemname$", "MyContext" },
                { "$rootnamespace$", "Project.Data" }
            };

            new OneEFWizard(vsUtils: Mock.Of <IVsUtils>())
            .RunStarted(modelBuilderSettings, mockCodeGenerator.Object, replacementsDictionary);

            Assert.Equal("context code", replacementsDictionary["$contextfilecontents$"]);
        }
예제 #4
0
        public void RunStarted_uses_context_class_name_if_SaveConnectionStringInAppConfig_false()
        {
            var mockCodeGenerator = new Mock <CodeFirstModelGenerator>(MockDTE.CreateProject());

            mockCodeGenerator
            .Setup(g => g.Generate(It.IsAny <DbModel>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>()))
            .Returns(new[] { new KeyValuePair <string, string>() });

            var modelBuilderSettings =
                new ModelBuilderSettings {
                SaveConnectionStringInAppConfig = false, AppConfigConnectionPropertyName = "ConnString"
            };

            var replacementsDictionary =
                new Dictionary <string, string>
            {
                { "$safeitemname$", "MyContext" },
                { "$rootnamespace$", "Project.Data" }
            };

            new OneEFWizard(vsUtils: Mock.Of <IVsUtils>())
            .RunStarted(modelBuilderSettings, mockCodeGenerator.Object, replacementsDictionary);

            mockCodeGenerator.Verify(g => g.Generate(It.IsAny <DbModel>(), "Project.Data", "MyContext", "MyContext"), Times.Once());
        }
예제 #5
0
        public void RunStarted_creates_valid_context_name_if_safeitemname_is_not_valid_identifier()
        {
            var mockVsUtils = new Mock <IVsUtils>();
            var wizard      = new OneEFWizard(vsUtils: mockVsUtils.Object);

            var mockCodeGenerator = new Mock <CodeFirstModelGenerator>(MockDTE.CreateProject());

            mockCodeGenerator
            .Setup(g => g.Generate(It.IsAny <DbModel>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>()))
            .Returns(new[] { new KeyValuePair <string, string>(string.Empty, string.Empty) });

            var settings = new ModelBuilderSettings {
                VSApplicationType = VisualStudioProjectSystem.WebApplication
            };
            var replacenentsDictionary = new Dictionary <string, string>
            {
                { "$safeitemname$", "3My.Con text" },
                { "$rootnamespace$", "Project" }
            };

            wizard.RunStarted(settings, mockCodeGenerator.Object, replacenentsDictionary);

            mockCodeGenerator.Verify(
                g => g.Generate(
                    It.IsAny <DbModel>(),
                    "Project",
                    /*contextClassName*/ "_3MyContext",
                    /*connectionStringName*/ "_3MyContext"),
                Times.Once());
        }
예제 #6
0
        public void OnDeactivate_does_not_update_settings_if_model_file_already_exists()
        {
            var mockDte = new MockDTE(".NETFramework, Version=v4.5", references: new Reference[0]);

            var modelBuilderSettings = new ModelBuilderSettings
            {
                NewItemFolder = @"C:\temp",
                ModelName     = "myModel",
                Project       = mockDte.Project
            };

            var wizard = ModelBuilderWizardFormHelper.CreateWizard(modelBuilderSettings, mockDte.ServiceProvider);
            var mockWizardPageStart = new Mock <WizardPageStart>(wizard, null)
            {
                CallBase = true
            };

            mockWizardPageStart
            .Protected()
            .Setup <bool>("VerifyModelFilePath", ItExpr.IsAny <string>())
            .Returns(false);

            mockWizardPageStart.Object.OnDeactivate();

            Assert.Null(modelBuilderSettings.ModelPath);
            Assert.True(wizard.FileAlreadyExistsError);
        }
예제 #7
0
        // Test stopped working with 15.6 Preview 7 - plan to re-enable with https://github.com/aspnet/EntityFramework6/issues/541
        // [Fact]
        public void Generate_throws_when_error_in_entity_type_template()
        {
            var project = MockDTE.CreateProject();
            var token   = Guid.NewGuid().ToString();

            using (AddCustomizedTemplates(project))
            {
                var templatePath = Path.GetTempFileName();
                try
                {
                    File.WriteAllText(templatePath, "<# throw new Exception(\"" + token + "\"); #>");

                    var fullPathProperty = project.ProjectItems.Item("CodeTemplates").ProjectItems
                                           .Item("EFModelFromDatabase").ProjectItems.Item("EntityType.cs.t4").Properties.Cast <Property>()
                                           .First(i => i.Name == "FullPath");
                    Mock.Get(fullPathProperty).SetupGet(p => p.Value).Returns(templatePath);

                    var generator = new CodeFirstModelGenerator(project);

                    var ex = Assert.Throws <CodeFirstModelGenerationException>(
                        () => generator.Generate(Model, "WebApplication1.Models", "MyContext", "MyContextConnString")
                        .ToArray());

                    Assert.Equal(
                        string.Format(Resources.ErrorGeneratingCodeFirstModel, "Entity.cs"),
                        ex.Message);
                    Assert.Contains(token, ex.InnerException.Message);
                }
                finally
                {
                    File.Delete(templatePath);
                }
            }
        }
예제 #8
0
        DetermineIfArtifactIsVersionSafe_sets_IsVersionSafe_to_true_if_schema_is_the_latest_version_supported_by_referenced_runtime()
        {
            var mockDte = new MockDTE(
                ".NETFramework, Version=v4.5.1",
                references: new[] { MockDTE.CreateReference("EntityFramework", "6.0.0.0") });

            var modelManager   = new Mock <ModelManager>(null, null).Object;
            var modelProvider  = new Mock <XmlModelProvider>().Object;
            var mockVsArtifact =
                new Mock <VSArtifact>(modelManager, new Uri("urn:dummy"), modelProvider)
            {
                CallBase = true
            };

            mockVsArtifact.Protected().Setup <IServiceProvider>("ServiceProvider").Returns(mockDte.ServiceProvider);
            mockVsArtifact.Protected().Setup <Project>("GetProject").Returns(mockDte.Project);
            mockVsArtifact.Setup(a => a.XDocument).Returns(
                new XDocument(
                    new XElement(
                        XName.Get(
                            "Edmx",
                            SchemaManager.GetEDMXNamespaceName(EntityFrameworkVersion.Version3)))));

            var artifact = mockVsArtifact.Object;

            artifact.DetermineIfArtifactIsVersionSafe();
            Assert.True(artifact.IsVersionSafe);
        }
예제 #9
0
        public void listViewModelContents_DoubleClick_calls_OnFinish_if_EmptyModelCodeFirst_selected_and_EF_not_referenced_or_EF6_referenced()
        {
            var mockDtes = new[]
            {
                new MockDTE(".NETFramework, Version=v4.5", references: new Reference[0]),
                new MockDTE(".NETFramework, Version=v4.5",
                            references: new[] { MockDTE.CreateReference("EntityFramework", "6.0.0.0") })
            };

            foreach (var mockDte in mockDtes)
            {
                var mockWizard =
                    Mock.Get(
                        ModelBuilderWizardFormHelper.CreateWizard(
                            ModelGenerationOption.EmptyModelCodeFirst,
                            mockDte.Project,
                            serviceProvider: mockDte.ServiceProvider));

                var mockWizardPageStart =
                    CreateMockWizardPageStart(mockWizard.Object, WizardPageStart.GenerateEmptyModelCodeFirstIndex);

                mockWizard.Setup(w => w.OnFinish());

                mockWizardPageStart.Object.listViewModelContents_DoubleClick(sender: null, e: null);

                mockWizard.Verify(w => w.OnFinish(), Times.Once());
            }
        }
예제 #10
0
        public void DetermineIfArtifactIsVersionSafe_sets_IsVersionSafe_to_true_for_Misc_project()
        {
            var mockDte = new MockDTE(
                ".NETFramework, Version=v4.5.1",
                Constants.vsMiscFilesProjectUniqueName);

            var modelManager   = new Mock <ModelManager>(null, null).Object;
            var modelProvider  = new Mock <XmlModelProvider>().Object;
            var mockVsArtifact =
                new Mock <VSArtifact>(modelManager, new Uri("urn:dummy"), modelProvider)
            {
                CallBase = true
            };

            mockVsArtifact.Protected().Setup <IServiceProvider>("ServiceProvider").Returns(mockDte.ServiceProvider);
            mockVsArtifact.Protected().Setup <Project>("GetProject").Returns(mockDte.Project);
            mockVsArtifact.Setup(a => a.XDocument).Returns(
                new XDocument(
                    new XElement(
                        XName.Get(
                            "Edmx",
                            SchemaManager.GetEDMXNamespaceName(EntityFrameworkVersion.Version3)))));

            var artifact = mockVsArtifact.Object;

            artifact.DetermineIfArtifactIsVersionSafe();
            Assert.True(artifact.IsVersionSafe);
        }
예제 #11
0
        public void DetermineIfArtifactIsVersionSafe_sets_IsVersionSafe_to_false_if_project_does_not_support_EF()
        {
            var mockDte = new MockDTE(
                ".NETFramework, Version=v2.0",
                references: new Reference[0]);

            var modelManager   = new Mock <ModelManager>(null, null).Object;
            var modelProvider  = new Mock <XmlModelProvider>().Object;
            var mockVsArtifact =
                new Mock <VSArtifact>(modelManager, new Uri("urn:dummy"), modelProvider)
            {
                CallBase = true
            };

            mockVsArtifact.Protected().Setup <IServiceProvider>("ServiceProvider").Returns(mockDte.ServiceProvider);
            mockVsArtifact.Protected().Setup <Project>("GetProject").Returns(mockDte.Project);
            mockVsArtifact.Setup(a => a.XDocument).Returns(
                new XDocument(
                    new XElement(
                        XName.Get(
                            "Edmx",
                            SchemaManager.GetEDMXNamespaceName(EntityFrameworkVersion.Version2)))));

            var artifact = mockVsArtifact.Object;

            artifact.DetermineIfArtifactIsVersionSafe();
            Assert.False(artifact.IsVersionSafe);
        }
예제 #12
0
        public void GetTextBoxConnectionStringValue_returns_entity_connection_string_for_EDMX_ModelFirst()
        {
            var guid = new Guid("42424242-4242-4242-4242-424242424242");

            var mockDte = new MockDTE(".NETFramework, Version=v4.5", references: new Reference[0]);

            mockDte.SetProjectProperties(new Dictionary <string, object> {
                { "FullPath", @"C:\Project" }
            });
            var mockParentProjectItem = new Mock <ProjectItem>();

            mockParentProjectItem.Setup(p => p.Collection).Returns(Mock.Of <ProjectItems>());
            mockParentProjectItem.Setup(p => p.Name).Returns("Folder");

            var mockModelProjectItem = new Mock <ProjectItem>();
            var mockCollection       = new Mock <ProjectItems>();

            mockCollection.Setup(p => p.Parent).Returns(mockParentProjectItem.Object);
            mockModelProjectItem.Setup(p => p.Collection).Returns(mockCollection.Object);

            var wizardPageDbConfig =
                new WizardPageDbConfig(
                    ModelBuilderWizardFormHelper.CreateWizard(ModelGenerationOption.GenerateDatabaseScript, mockDte.Project, @"C:\Project\myModel.edmx"));

            Assert.Equal(
                "metadata=res://*/myModel.csdl|res://*/myModel.ssdl|res://*/myModel.msl;provider=System.Data.SqlClient;" +
                "provider connection string=\"integrated security=SSPI;MultipleActiveResultSets=True;App=EntityFramework\"",
                wizardPageDbConfig.GetTextBoxConnectionStringValue(
                    CreateDataProviderManager(guid),
                    guid,
                    "Integrated Security=SSPI"));
        }
예제 #13
0
        public void GetProjectReferenceAssemblyNames_for_websites_ignores_references_with_badly_formed_strong_names()
        {
            var project = MockDTE.CreateWebSite(
                new[]
            {
                // Deliberately emptying the PublicKeyToken causes a situation where
                // creating the AssemblyName throws. This test tests that the exception
                // is ignored and the other 2 references are still returned.
                // (See issue 1467).
                MockDTE.CreateAssemblyReference(
                    "AspNet.ScriptManager.jQuery.UI.Combined, Version=1.8.20.0, Culture=neutral, PublicKeyToken="),
                MockDTE.CreateAssemblyReference(
                    "System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"),
                MockDTE.CreateAssemblyReference(
                    "EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
            });

            var referenceAssemblyNames = VsUtils.GetProjectReferenceAssemblyNames(project).ToArray();

            Assert.Equal(2, referenceAssemblyNames.Count());
            Assert.Equal(
                0, referenceAssemblyNames.Where(
                    ran => ran.Key == "AspNet.ScriptManager.jQuery.UI.Combined").Count());
            Assert.Equal(
                1, referenceAssemblyNames.Where(
                    ran => ran.Key == "System.Data.Entity").Count());
            Assert.Equal(
                1, referenceAssemblyNames.Where(
                    ran => ran.Key == "EntityFramework").Count());
        }
        public void TargetNetFrameworkVersion_returns_null_for_non_NetFramework_project()
        {
            var mockMonikerHelper = new MockDTE("Xbox,Version=v4.0");

            Assert.Null(
                NetFrameworkVersioningHelper.TargetNetFrameworkVersion(
                    mockMonikerHelper.Project, mockMonikerHelper.ServiceProvider));
        }
        public void TargetNetFrameworkVersion_returns_null_for_invalid_target_framework_moniker()
        {
            var mockMonikerHelper = new MockDTE("abc");

            Assert.Null(
                NetFrameworkVersioningHelper.TargetNetFrameworkVersion(
                    mockMonikerHelper.Project, mockMonikerHelper.ServiceProvider));
        }
        public void TargetNetFrameworkVersion_returns_null_for_non_string_target_net_framework_moniker()
        {
            var mockMonikerHelper = new MockDTE(new object());

            Assert.Null(
                NetFrameworkVersioningHelper.TargetNetFrameworkVersion(
                    mockMonikerHelper.Project, mockMonikerHelper.ServiceProvider));
        }
예제 #17
0
        public void GetEntityFrameworkVersion_returns_null_when_misc_files()
        {
            var project         = MockDTE.CreateMiscFilesProject();
            var serviceProvider = new Mock <IServiceProvider>();

            var schemaVersion = EdmUtils.GetEntityFrameworkVersion(project, serviceProvider.Object);

            Assert.Null(schemaVersion);
        }
예제 #18
0
        public void EntityFrameworkSupportedInProject_returns_false_for_Misc_project_if_not_allowed()
        {
            const string vsMiscFilesProjectUniqueName = "<MiscFiles>";

            var monikerHelper = new MockDTE("anytarget", vsMiscFilesProjectUniqueName);

            Assert.False(
                VsUtils.EntityFrameworkSupportedInProject(monikerHelper.Project, monikerHelper.ServiceProvider, allowMiscProject: false));
        }
예제 #19
0
        public void GetEntityFrameworkVersion_returns_version_when_ef_installed()
        {
            var helper = new MockDTE(
                ".NETFramework,Version=v4.5", references: new[] { MockDTE.CreateReference("EntityFramework", "6.0.0.0") });

            var schemaVersion = EdmUtils.GetEntityFrameworkVersion(helper.Project, helper.ServiceProvider);

            Assert.Equal(EntityFrameworkVersion.Version3, schemaVersion);
        }
예제 #20
0
        public void GetProjectTargetFileName_returns_null_when_nonstring()
        {
            var project = MockDTE.CreateProject(
                properties: new Dictionary <string, object> {
                { "OutputFileName", 42 }
            });

            Assert.Null(VsUtils.GetProjectTargetFileName(project));
        }
예제 #21
0
        public void GetProjectTargetFileName_returns_name()
        {
            var project = MockDTE.CreateProject(
                properties: new Dictionary <string, object> {
                { "OutputFileName", "ConsoleApplication1.exe" }
            });

            Assert.Equal("ConsoleApplication1.exe", VsUtils.GetProjectTargetFileName(project));
        }
        public void TargetNetFrameworkVersion_returns_targeted_version_from_valid_net_framework_moniker()
        {
            var mockMonikerHelper = new MockDTE(".NETFramework,Version=v4.0,Profile=Client");

            Assert.Equal(
                NetFrameworkVersioningHelper.NetFrameworkVersion4,
                NetFrameworkVersioningHelper.TargetNetFrameworkVersion(
                    mockMonikerHelper.Project, mockMonikerHelper.ServiceProvider));
        }
예제 #23
0
        public void Generate_returns_code_when_vb()
        {
            var generator = new CodeFirstModelGenerator(MockDTE.CreateProject(kind: MockDTE.VBProjectKind));

            var files = generator.Generate(Model, "WebApplication1.Models", "MyContext", "MyContextConnString").ToArray();

            Assert.Equal(2, files.Length);
            Assert.Equal(new[] { "MyContext.vb", "Entity.vb" }, files.Select(p => p.Key));
        }
예제 #24
0
        public void TemplateSupported_returns_false_for_NetFramework3_5()
        {
            var mockMonikerHelper =
                new MockDTE(".NETFramework,Version=v3.5");

            Assert.False(
                DbContextCodeGenerator.TemplateSupported(
                    mockMonikerHelper.Project,
                    mockMonikerHelper.ServiceProvider));
        }
        public void TargetNetFrameworkVersion_returns_null_for_misc_project()
        {
            const string vsMiscFilesProjectUniqueName = "<MiscFiles>";

            var mockMonikerHelper = new MockDTE("abc", vsMiscFilesProjectUniqueName);

            Assert.Null(
                NetFrameworkVersioningHelper.TargetNetFrameworkVersion(
                    mockMonikerHelper.Project, mockMonikerHelper.ServiceProvider));
        }
예제 #26
0
        public void Generate_returns_code_when_vb_and_empty_model()
        {
            var generator = new CodeFirstModelGenerator(MockDTE.CreateProject(kind: MockDTE.VBProjectKind));

            var files = generator.Generate(null, "WebApplication1.Models", "MyContext", "MyContextConnString").ToArray();

            Assert.Equal(1, files.Length);
            Assert.Equal("MyContext.vb", files[0].Key);
            Assert.Contains(Resources.CodeFirstCodeFile_DbSetComment_VB, files[0].Value);
        }
예제 #27
0
        public void GetInstalledEntityFrameworkAssemblyVersion_returns_EF_version_when_EF_and_SDE()
        {
            var project = MockDTE.CreateProject(
                new[]
            {
                MockDTE.CreateReference("System.Data.Entity", "4.0.0.0"),
                MockDTE.CreateReference("EntityFramework", "5.0.0.0")
            });

            Assert.Equal(RuntimeVersion.Version5Net45, VsUtils.GetInstalledEntityFrameworkAssemblyVersion(project));
        }
예제 #28
0
        public void GetProjectTargetDir_returns_dir_when_website()
        {
            var project = MockDTE.CreateWebSite(
                properties: new Dictionary <string, object> {
                { "FullPath", @"C:\Path\To\WebSite" }
            });

            var targetDir = VsUtils.GetProjectTargetDir(project, Mock.Of <IServiceProvider>());

            Assert.Equal(@"C:\Path\To\WebSite\Bin\", targetDir);
        }
예제 #29
0
        public void GetProjectRoot_returns_fullpath_when_website()
        {
            const string fullPath = @"C:\Path\To\WebSite";
            var          project  = MockDTE.CreateWebSite(
                properties: new Dictionary <string, object> {
                { "FullPath", fullPath }
            });

            var root = VsUtils.GetProjectRoot(project, Mock.Of <IServiceProvider>());

            Assert.Equal(fullPath + Path.DirectorySeparatorChar, root.FullName);
        }
예제 #30
0
        public void TemplateSupported_returns_false_for_Misc_project()
        {
            const string vsMiscFilesProjectUniqueName = "<MiscFiles>";

            var mockMonikerHelper =
                new MockDTE(".NETFramework,Version=v4.0", vsMiscFilesProjectUniqueName);

            Assert.False(
                DbContextCodeGenerator.TemplateSupported(
                    mockMonikerHelper.Project,
                    mockMonikerHelper.ServiceProvider));
        }