From 4e2b4d3806842e5e5899882f06b108e3de8063ab Mon Sep 17 00:00:00 2001 From: Neil Brommer Date: Tue, 19 Apr 2022 15:58:18 -0700 Subject: [PATCH] Add a unit test project and set up a test in memory DB --- Start.sln | 6 +++ Start_Tests/Start_Tests.csproj | 20 +++++++++ Start_Tests/UnitTest1.cs | 20 +++++++++ Start_Tests/UnitTestWithDb.cs | 79 ++++++++++++++++++++++++++++++++++ 4 files changed, 125 insertions(+) create mode 100644 Start_Tests/Start_Tests.csproj create mode 100644 Start_Tests/UnitTest1.cs create mode 100644 Start_Tests/UnitTestWithDb.cs diff --git a/Start.sln b/Start.sln index 01bb304..cc25f89 100644 --- a/Start.sln +++ b/Start.sln @@ -16,6 +16,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution .gitignore = .gitignore EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Start_Tests", "Start_Tests\Start_Tests.csproj", "{74F33155-6FE2-409B-A5AC-52BC7433CE65}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -34,6 +36,10 @@ Global {5F06E094-DDD9-4093-9979-9D9FFED2310F}.Debug|Any CPU.Build.0 = Debug|Any CPU {5F06E094-DDD9-4093-9979-9D9FFED2310F}.Release|Any CPU.ActiveCfg = Release|Any CPU {5F06E094-DDD9-4093-9979-9D9FFED2310F}.Release|Any CPU.Build.0 = Release|Any CPU + {74F33155-6FE2-409B-A5AC-52BC7433CE65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {74F33155-6FE2-409B-A5AC-52BC7433CE65}.Debug|Any CPU.Build.0 = Debug|Any CPU + {74F33155-6FE2-409B-A5AC-52BC7433CE65}.Release|Any CPU.ActiveCfg = Release|Any CPU + {74F33155-6FE2-409B-A5AC-52BC7433CE65}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Start_Tests/Start_Tests.csproj b/Start_Tests/Start_Tests.csproj new file mode 100644 index 0000000..1223883 --- /dev/null +++ b/Start_Tests/Start_Tests.csproj @@ -0,0 +1,20 @@ + + + + net5.0 + + false + + + + + + + + + + + + + + diff --git a/Start_Tests/UnitTest1.cs b/Start_Tests/UnitTest1.cs new file mode 100644 index 0000000..73d56f9 --- /dev/null +++ b/Start_Tests/UnitTest1.cs @@ -0,0 +1,20 @@ +using System; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Start.Server.Models; + +namespace Start_Tests { + [TestClass] + public class UnitTest1 : UnitTestWithDb { + public TestContext TestContext { get; set; } + + [TestMethod] + public override void TestDatabaseOK() { + base.TestDatabaseOK(); + } + + [TestMethod] + public void TestMethod1() { + TestContext.WriteLine("Running TestMethod1 from TestContext"); + } + } +} diff --git a/Start_Tests/UnitTestWithDb.cs b/Start_Tests/UnitTestWithDb.cs new file mode 100644 index 0000000..1c8e318 --- /dev/null +++ b/Start_Tests/UnitTestWithDb.cs @@ -0,0 +1,79 @@ +using System; +using IdentityServer4.EntityFramework.Options; +using Microsoft.Data.Sqlite; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Options; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Start.Server.Data; +using Start.Server.Models; + +namespace Start_Tests { + public class UnitTestWithDb : IDisposable { + private const string InMemoryConnectionString = "DataSource=:memory:"; + private SqliteConnection _connection; + + protected readonly ApplicationDbContext _db; + + public UnitTestWithDb() { + _connection = new SqliteConnection(InMemoryConnectionString); + _connection.Open(); + + var options = new DbContextOptionsBuilder() + .UseSqlite(_connection) + .Options; + + this._db = new ApplicationDbContext(options, + Options.Create(new OperationalStoreOptions())); + this._db.Database.EnsureCreated(); + } + + protected void ResetDb() { + _db.Database.EnsureDeleted(); + _db.Database.EnsureCreated(); + } + + protected void FillDbTestData() { + ApplicationUser testUser = new ApplicationUser { + Id = "test_user", + UserName = "test_user" + }; + _db.Users.Add(testUser); + _db.SaveChanges(); + + BookmarkContainer testContainer = new BookmarkContainer(testUser.Id, "Test Container", + 0); + _db.BookmarkContainers.Add(testContainer); + _db.SaveChanges(); + + BookmarkGroup testGroup = new BookmarkGroup("Test Group", "#000000", 0, + testContainer.BookmarkContainerId); + _db.BookmarkGroups.Add(testGroup); + _db.SaveChanges(); + + Bookmark testBookmark = new Bookmark("Test Bookmark", "http://example.com", + "Test Notes", 0, testGroup.BookmarkGroupId); + _db.Bookmarks.Add(testBookmark); + _db.SaveChanges(); + } + + /// + /// Checks the DB connection works. Note that MSTest won't run this - you need to do so in + /// inheriting classes like this: + /// + /// + /// [TestMethod] + /// public override void TestDatabaseOK() { + /// base.TestDatabaseOK(); + /// } + /// + /// + [TestMethod] + public virtual void TestDatabaseOK() { + Assert.IsTrue(this._db.Database.CanConnect()); + } + + public void Dispose() { + _connection.Close(); + } + } +}