From 2547ae4a882745001ae602c9ef32f3738a3687a9 Mon Sep 17 00:00:00 2001 From: Samson Amaugo Date: Mon, 6 Feb 2023 06:10:58 +0100 Subject: [PATCH 1/7] created projected --- .../IResultImplementation.csproj | 9 +++++ .../samples/IResultImplementation/Program.cs | 34 +++++++++++++++++++ .../appsettings.Development.json | 8 +++++ .../IResultImplementation/appsettings.json | 9 +++++ 4 files changed, 60 insertions(+) create mode 100644 fundamentals/minimal-apis/samples/IResultImplementation/IResultImplementation.csproj create mode 100644 fundamentals/minimal-apis/samples/IResultImplementation/Program.cs create mode 100644 fundamentals/minimal-apis/samples/IResultImplementation/appsettings.Development.json create mode 100644 fundamentals/minimal-apis/samples/IResultImplementation/appsettings.json diff --git a/fundamentals/minimal-apis/samples/IResultImplementation/IResultImplementation.csproj b/fundamentals/minimal-apis/samples/IResultImplementation/IResultImplementation.csproj new file mode 100644 index 00000000..4c2bb77d --- /dev/null +++ b/fundamentals/minimal-apis/samples/IResultImplementation/IResultImplementation.csproj @@ -0,0 +1,9 @@ + + + + net7.0 + enable + enable + + + diff --git a/fundamentals/minimal-apis/samples/IResultImplementation/Program.cs b/fundamentals/minimal-apis/samples/IResultImplementation/Program.cs new file mode 100644 index 00000000..9a6d4cbf --- /dev/null +++ b/fundamentals/minimal-apis/samples/IResultImplementation/Program.cs @@ -0,0 +1,34 @@ +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. + +var app = builder.Build(); + +// Configure the HTTP request pipeline. + +app.UseHttpsRedirection(); + +var summaries = new[] +{ + "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" +}; + +app.MapGet("/weatherforecast", () => +{ + var forecast = Enumerable.Range(1, 5).Select(index => + new WeatherForecast + ( + DateOnly.FromDateTime(DateTime.Now.AddDays(index)), + Random.Shared.Next(-20, 55), + summaries[Random.Shared.Next(summaries.Length)] + )) + .ToArray(); + return forecast; +}); + +app.Run(); + +internal record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary) +{ + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); +} diff --git a/fundamentals/minimal-apis/samples/IResultImplementation/appsettings.Development.json b/fundamentals/minimal-apis/samples/IResultImplementation/appsettings.Development.json new file mode 100644 index 00000000..0c208ae9 --- /dev/null +++ b/fundamentals/minimal-apis/samples/IResultImplementation/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/fundamentals/minimal-apis/samples/IResultImplementation/appsettings.json b/fundamentals/minimal-apis/samples/IResultImplementation/appsettings.json new file mode 100644 index 00000000..10f68b8c --- /dev/null +++ b/fundamentals/minimal-apis/samples/IResultImplementation/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} From fd1b80e365582f0b1a7816e5990e3d546438452e Mon Sep 17 00:00:00 2001 From: Samson Amaugo Date: Wed, 8 Feb 2023 14:32:00 +0100 Subject: [PATCH 2/7] added in memory DB --- .../minimal-apis/samples/IResultImplementation/Program.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fundamentals/minimal-apis/samples/IResultImplementation/Program.cs b/fundamentals/minimal-apis/samples/IResultImplementation/Program.cs index 9a6d4cbf..a99cc5fc 100644 --- a/fundamentals/minimal-apis/samples/IResultImplementation/Program.cs +++ b/fundamentals/minimal-apis/samples/IResultImplementation/Program.cs @@ -1,5 +1,8 @@ var builder = WebApplication.CreateBuilder(args); +var builder = WebApplication.CreateBuilder(args); +builder.Services.AddDbContext(options => + options.UseInMemoryDatabase("Contacts")); // Add services to the container. var app = builder.Build(); From 02be4e777fb857f0207d928cf65ff358bf05073b Mon Sep 17 00:00:00 2001 From: Samson Amaugo Date: Wed, 8 Feb 2023 14:33:08 +0100 Subject: [PATCH 3/7] IResultImplementation --- .../IResultImplementation/ContactsHandler.cs | 100 ++++++++++++++++++ .../Data/IResultImplementationContext.cs | 23 ++++ .../IResultImplementation.csproj | 14 +++ .../IResultImplementation/Models/Contact.cs | 11 ++ .../samples/IResultImplementation/Program.cs | 38 +++---- .../Tests/IResultImplementationTest.cs | 77 ++++++++++++++ .../IResultImplementation/appsettings.json | 7 +- 7 files changed, 244 insertions(+), 26 deletions(-) create mode 100644 fundamentals/minimal-apis/samples/IResultImplementation/ContactsHandler.cs create mode 100644 fundamentals/minimal-apis/samples/IResultImplementation/Data/IResultImplementationContext.cs create mode 100644 fundamentals/minimal-apis/samples/IResultImplementation/Models/Contact.cs create mode 100644 fundamentals/minimal-apis/samples/IResultImplementation/Tests/IResultImplementationTest.cs diff --git a/fundamentals/minimal-apis/samples/IResultImplementation/ContactsHandler.cs b/fundamentals/minimal-apis/samples/IResultImplementation/ContactsHandler.cs new file mode 100644 index 00000000..db6eecd1 --- /dev/null +++ b/fundamentals/minimal-apis/samples/IResultImplementation/ContactsHandler.cs @@ -0,0 +1,100 @@ +using IResultImplementation.Data; +using IResultImplementation.Models; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; + +namespace IResultImplementation +{ + public static class ContactsHandler + { + + // GET: api/Contacts + public static async Task GetContacts(IResultImplementationContext context) + { + return TypedResults.Ok(context.Contact.ToList()); + } + + // GET: api/Contacts/5 + [HttpGet("{id}")] + public static async Task GetContact(IResultImplementationContext context, int id) + { + var contact = await context.Contact.FindAsync(id); + + if (contact == null) + { + return TypedResults.NotFound(); + } + + return TypedResults.Ok(contact); + } + + + // POST: api/Contacts + // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 + [HttpPost] + public static IResult PostContact(IResultImplementationContext context, Contact contact) + { + context.Contact.Add(contact); + context.SaveChanges(); + + return TypedResults.CreatedAtRoute(contact, nameof(ContactsHandler.GetContact)); + } + + // PUT: api/Contacts/5 + // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 + [HttpPut("{id}")] + public static IResult PutContact(IResultImplementationContext context, int id, Contact contact) + { + if (id != contact.Id) + { + return TypedResults.BadRequest(); + } + + context.Entry(contact).State = Microsoft.EntityFrameworkCore.EntityState.Modified; + + try + { + context.SaveChanges(); + } + catch (DbUpdateConcurrencyException) + { + if (!ContactExists(context, id)) + { + return TypedResults.NotFound(); + } + else + { + throw; + } + } + + return TypedResults.NoContent(); + } + + + // DELETE: api/Contacts/5 + [HttpDelete("{id}")] + public static IResult DeleteContact(IResultImplementationContext context, int id) + { + if (context.Contact == null) + { + return TypedResults.NotFound(); + } + var contact = context.Contact.Find(id); + if (contact == null) + { + return TypedResults.NotFound(); + } + + context.Contact.Remove(contact); + context.SaveChanges(); + + return TypedResults.NoContent(); + } + + private static bool ContactExists(IResultImplementationContext context, int id) + { + return (context.Contact?.Any(e => e.Id == id)).GetValueOrDefault(); + } + } +} diff --git a/fundamentals/minimal-apis/samples/IResultImplementation/Data/IResultImplementationContext.cs b/fundamentals/minimal-apis/samples/IResultImplementation/Data/IResultImplementationContext.cs new file mode 100644 index 00000000..209d2c37 --- /dev/null +++ b/fundamentals/minimal-apis/samples/IResultImplementation/Data/IResultImplementationContext.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using IResultImplementation.Models; +using Microsoft.EntityFrameworkCore; + +namespace IResultImplementation.Data +{ + public class IResultImplementationContext : DbContext + { + public IResultImplementationContext(DbContextOptions options) + : base(options) + { + } + public IResultImplementationContext() + { + } + + + public virtual DbSet Contact { get; set; } = default!; + } +} diff --git a/fundamentals/minimal-apis/samples/IResultImplementation/IResultImplementation.csproj b/fundamentals/minimal-apis/samples/IResultImplementation/IResultImplementation.csproj index 4c2bb77d..100f7efb 100644 --- a/fundamentals/minimal-apis/samples/IResultImplementation/IResultImplementation.csproj +++ b/fundamentals/minimal-apis/samples/IResultImplementation/IResultImplementation.csproj @@ -6,4 +6,18 @@ enable + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + diff --git a/fundamentals/minimal-apis/samples/IResultImplementation/Models/Contact.cs b/fundamentals/minimal-apis/samples/IResultImplementation/Models/Contact.cs new file mode 100644 index 00000000..1b6acc21 --- /dev/null +++ b/fundamentals/minimal-apis/samples/IResultImplementation/Models/Contact.cs @@ -0,0 +1,11 @@ +namespace IResultImplementation.Models +{ + public class Contact + { + public int Id { get; set; } + + public string Name { get; set; } = String.Empty; + public string Email { get; set; } = String.Empty; + public string PhoneNumber { get; set; } = String.Empty; + } +} diff --git a/fundamentals/minimal-apis/samples/IResultImplementation/Program.cs b/fundamentals/minimal-apis/samples/IResultImplementation/Program.cs index a99cc5fc..664e1f33 100644 --- a/fundamentals/minimal-apis/samples/IResultImplementation/Program.cs +++ b/fundamentals/minimal-apis/samples/IResultImplementation/Program.cs @@ -1,37 +1,27 @@ -var builder = WebApplication.CreateBuilder(args); +using IResultImplementation; +using IResultImplementation.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; var builder = WebApplication.CreateBuilder(args); builder.Services.AddDbContext(options => options.UseInMemoryDatabase("Contacts")); // Add services to the container. - +builder.Services.AddControllers(); var app = builder.Build(); // Configure the HTTP request pipeline. app.UseHttpsRedirection(); +app.MapControllers(); -var summaries = new[] -{ - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" -}; - -app.MapGet("/weatherforecast", () => -{ - var forecast = Enumerable.Range(1, 5).Select(index => - new WeatherForecast - ( - DateOnly.FromDateTime(DateTime.Now.AddDays(index)), - Random.Shared.Next(-20, 55), - summaries[Random.Shared.Next(summaries.Length)] - )) - .ToArray(); - return forecast; -}); +app.MapGet("/api/contacts", ContactsHandler.GetContacts); +app.MapGet("/api/contacts/{id}", ContactsHandler.GetContact); +app.MapPost("/api/contacts", ContactsHandler.PostContact); +app.MapPut("/api/contacts/{id}", ContactsHandler.PutContact); +app.MapDelete("/api/contacts/{id}", ContactsHandler.DeleteContact); -app.Run(); -internal record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary) -{ - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); -} + + +app.Run(); diff --git a/fundamentals/minimal-apis/samples/IResultImplementation/Tests/IResultImplementationTest.cs b/fundamentals/minimal-apis/samples/IResultImplementation/Tests/IResultImplementationTest.cs new file mode 100644 index 00000000..f803aced --- /dev/null +++ b/fundamentals/minimal-apis/samples/IResultImplementation/Tests/IResultImplementationTest.cs @@ -0,0 +1,77 @@ +using IResultImplementation.Data; +using IResultImplementation.Models; +using Microsoft.AspNetCore.Http.HttpResults; +using Microsoft.EntityFrameworkCore; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Moq; + +namespace IResultImplementation.Tests +{ + [TestClass] + public class IResultImplementationTest + { + public IQueryable? Data { get; set; } + public Mock>? MockSet { get; set; } + [TestInitialize] + public void Setup() + { + Data = new List() + { + + new Contact() { Id = 1, Name = "John", Email = "john@tmail.com", PhoneNumber = "1234567890" }, + new Contact(){ Id = 2, Name = "Jane", Email = "Jane@kam.com", PhoneNumber = "29384736273" }, + new Contact(){Id = 3, Name = "Kahn", Email = "ema@email.com", PhoneNumber = "23239029202"} + }.AsQueryable(); + + MockSet = new Mock>(); + MockSet.As>().Setup(m => m.Provider).Returns(Data.Provider); + MockSet.As>().Setup(m => m.Expression).Returns(Data.Expression); + MockSet.As>().Setup(m => m.ElementType).Returns(Data.ElementType); + MockSet.As>().Setup(m => m.GetEnumerator()).Returns(() => Data.GetEnumerator()); + } + [TestMethod] + public async Task GetContactReturnsContactsFromDatabase() + { + //Arrange + var mockContext = new Mock(); + mockContext.Setup(c => c.Contact).Returns(MockSet!.Object); + int expectedStatusCode = 200; + int expectedItemCount = 3; + + //Act + var result = (Ok>)await ContactsHandler.GetContacts(mockContext.Object); + + //Assert + Assert.AreEqual(expectedStatusCode, result.StatusCode); + Assert.AreEqual(expectedItemCount, result.Value?.Count); + + } + + [TestMethod] + public async Task CreateTodoSavesContactToDatabase() + { + //Arrange + var mockDbContextOptions = new Mock>(); + var mockContext = new Mock(); + mockContext.Setup(c => c.Contact).Returns(MockSet!.Object); + mockContext.Setup(c => c.Contact.Add(It.IsAny())).Callback(contact => Data = Data.Append(contact)); + var newContact = new Contact() + { + Id = 4, + Name = "John Doe", + Email = "akd@omail.com", + PhoneNumber = "1234567890" + }; + int expectedStatusCode = 201; + int expectedItemCount = 4; + + //Act + var result = (CreatedAtRoute)ContactsHandler.PostContact(mockContext.Object, newContact); + + //Assert + Assert.AreEqual(newContact, result.Value); + Assert.AreEqual(expectedStatusCode, result.StatusCode); + Assert.AreEqual(expectedItemCount, Data.Count()); + } + } +} diff --git a/fundamentals/minimal-apis/samples/IResultImplementation/appsettings.json b/fundamentals/minimal-apis/samples/IResultImplementation/appsettings.json index 10f68b8c..9acc3390 100644 --- a/fundamentals/minimal-apis/samples/IResultImplementation/appsettings.json +++ b/fundamentals/minimal-apis/samples/IResultImplementation/appsettings.json @@ -5,5 +5,8 @@ "Microsoft.AspNetCore": "Warning" } }, - "AllowedHosts": "*" -} + "AllowedHosts": "*", + "ConnectionStrings": { + "IResultImplementationContext": "Server=(localdb)\\mssqllocaldb;Database=IResultImplementationContext-b71964d8-db07-43dd-9b17-5d3725d46313;Trusted_Connection=True;MultipleActiveResultSets=true" + } +} \ No newline at end of file From 3ea3b86c5aabe3c05c5220c64c8530ad1e1db82d Mon Sep 17 00:00:00 2001 From: Samson Amaugo Date: Wed, 8 Feb 2023 14:37:19 +0100 Subject: [PATCH 4/7] removed unused code --- .../samples/IResultImplementation/ContactsHandler.cs | 8 ++++---- .../minimal-apis/samples/IResultImplementation/Program.cs | 1 - .../Tests/IResultImplementationTest.cs | 4 ++-- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/fundamentals/minimal-apis/samples/IResultImplementation/ContactsHandler.cs b/fundamentals/minimal-apis/samples/IResultImplementation/ContactsHandler.cs index db6eecd1..f1869149 100644 --- a/fundamentals/minimal-apis/samples/IResultImplementation/ContactsHandler.cs +++ b/fundamentals/minimal-apis/samples/IResultImplementation/ContactsHandler.cs @@ -35,7 +35,7 @@ public static async Task GetContact(IResultImplementationContext contex public static IResult PostContact(IResultImplementationContext context, Contact contact) { context.Contact.Add(contact); - context.SaveChanges(); + context.SaveChanges(); return TypedResults.CreatedAtRoute(contact, nameof(ContactsHandler.GetContact)); } @@ -54,7 +54,7 @@ public static IResult PutContact(IResultImplementationContext context, int id, C try { - context.SaveChanges(); + context.SaveChanges(); } catch (DbUpdateConcurrencyException) { @@ -80,14 +80,14 @@ public static IResult DeleteContact(IResultImplementationContext context, int id { return TypedResults.NotFound(); } - var contact = context.Contact.Find(id); + var contact = context.Contact.Find(id); if (contact == null) { return TypedResults.NotFound(); } context.Contact.Remove(contact); - context.SaveChanges(); + context.SaveChanges(); return TypedResults.NoContent(); } diff --git a/fundamentals/minimal-apis/samples/IResultImplementation/Program.cs b/fundamentals/minimal-apis/samples/IResultImplementation/Program.cs index 664e1f33..ed999065 100644 --- a/fundamentals/minimal-apis/samples/IResultImplementation/Program.cs +++ b/fundamentals/minimal-apis/samples/IResultImplementation/Program.cs @@ -1,7 +1,6 @@ using IResultImplementation; using IResultImplementation.Data; using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.DependencyInjection; var builder = WebApplication.CreateBuilder(args); builder.Services.AddDbContext(options => diff --git a/fundamentals/minimal-apis/samples/IResultImplementation/Tests/IResultImplementationTest.cs b/fundamentals/minimal-apis/samples/IResultImplementation/Tests/IResultImplementationTest.cs index f803aced..0423639e 100644 --- a/fundamentals/minimal-apis/samples/IResultImplementation/Tests/IResultImplementationTest.cs +++ b/fundamentals/minimal-apis/samples/IResultImplementation/Tests/IResultImplementationTest.cs @@ -37,7 +37,7 @@ public async Task GetContactReturnsContactsFromDatabase() mockContext.Setup(c => c.Contact).Returns(MockSet!.Object); int expectedStatusCode = 200; int expectedItemCount = 3; - + //Act var result = (Ok>)await ContactsHandler.GetContacts(mockContext.Object); @@ -64,7 +64,7 @@ public async Task CreateTodoSavesContactToDatabase() }; int expectedStatusCode = 201; int expectedItemCount = 4; - + //Act var result = (CreatedAtRoute)ContactsHandler.PostContact(mockContext.Object, newContact); From 29f4ddfb08f9d6b86fa0e1b9256b4ac1de5d15aa Mon Sep 17 00:00:00 2001 From: Samson Amaugo Date: Wed, 15 Feb 2023 18:57:24 +0100 Subject: [PATCH 5/7] Update fundamentals/minimal-apis/samples/IResultImplementation/Tests/IResultImplementationTest.cs Co-authored-by: Bruno Oliveira --- .../IResultImplementation/Tests/IResultImplementationTest.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/fundamentals/minimal-apis/samples/IResultImplementation/Tests/IResultImplementationTest.cs b/fundamentals/minimal-apis/samples/IResultImplementation/Tests/IResultImplementationTest.cs index 0423639e..df9a4cb5 100644 --- a/fundamentals/minimal-apis/samples/IResultImplementation/Tests/IResultImplementationTest.cs +++ b/fundamentals/minimal-apis/samples/IResultImplementation/Tests/IResultImplementationTest.cs @@ -17,7 +17,6 @@ public void Setup() { Data = new List() { - new Contact() { Id = 1, Name = "John", Email = "john@tmail.com", PhoneNumber = "1234567890" }, new Contact(){ Id = 2, Name = "Jane", Email = "Jane@kam.com", PhoneNumber = "29384736273" }, new Contact(){Id = 3, Name = "Kahn", Email = "ema@email.com", PhoneNumber = "23239029202"} From e60352cba35a5f97bffd476e477feaedb8d304a5 Mon Sep 17 00:00:00 2001 From: Samson Amaugo Date: Fri, 17 Feb 2023 04:44:10 +0100 Subject: [PATCH 6/7] Update fundamentals/minimal-apis/samples/IResultImplementation/Tests/IResultImplementationTest.cs Co-authored-by: Bruno Oliveira --- .../IResultImplementation/Tests/IResultImplementationTest.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fundamentals/minimal-apis/samples/IResultImplementation/Tests/IResultImplementationTest.cs b/fundamentals/minimal-apis/samples/IResultImplementation/Tests/IResultImplementationTest.cs index df9a4cb5..fdfe414a 100644 --- a/fundamentals/minimal-apis/samples/IResultImplementation/Tests/IResultImplementationTest.cs +++ b/fundamentals/minimal-apis/samples/IResultImplementation/Tests/IResultImplementationTest.cs @@ -18,8 +18,8 @@ public void Setup() Data = new List() { new Contact() { Id = 1, Name = "John", Email = "john@tmail.com", PhoneNumber = "1234567890" }, - new Contact(){ Id = 2, Name = "Jane", Email = "Jane@kam.com", PhoneNumber = "29384736273" }, - new Contact(){Id = 3, Name = "Kahn", Email = "ema@email.com", PhoneNumber = "23239029202"} + new Contact() { Id = 2, Name = "Jane", Email = "Jane@kam.com", PhoneNumber = "29384736273" }, + new Contact() {Id = 3, Name = "Kahn", Email = "ema@email.com", PhoneNumber = "23239029202"} }.AsQueryable(); MockSet = new Mock>(); From 2d6481919a8e9ca3a30b606c67250e2d6ce87403 Mon Sep 17 00:00:00 2001 From: Samson Amaugo Date: Fri, 17 Feb 2023 06:09:17 +0100 Subject: [PATCH 7/7] added extra test --- .../IResultImplementation/ContactsHandler.cs | 6 +-- .../samples/IResultImplementation/Program.cs | 3 -- .../Tests/IResultImplementationTest.cs | 41 +++++++++++++++++-- .../IResultImplementation/appsettings.json | 7 +--- 4 files changed, 43 insertions(+), 14 deletions(-) diff --git a/fundamentals/minimal-apis/samples/IResultImplementation/ContactsHandler.cs b/fundamentals/minimal-apis/samples/IResultImplementation/ContactsHandler.cs index f1869149..7f77c023 100644 --- a/fundamentals/minimal-apis/samples/IResultImplementation/ContactsHandler.cs +++ b/fundamentals/minimal-apis/samples/IResultImplementation/ContactsHandler.cs @@ -9,16 +9,16 @@ public static class ContactsHandler { // GET: api/Contacts - public static async Task GetContacts(IResultImplementationContext context) + public static IResult GetContacts(IResultImplementationContext context) { return TypedResults.Ok(context.Contact.ToList()); } // GET: api/Contacts/5 [HttpGet("{id}")] - public static async Task GetContact(IResultImplementationContext context, int id) + public static IResult GetContact(IResultImplementationContext context, int id) { - var contact = await context.Contact.FindAsync(id); + var contact = context.Contact.Where(c => c.Id == id).FirstOrDefault(); if (contact == null) { diff --git a/fundamentals/minimal-apis/samples/IResultImplementation/Program.cs b/fundamentals/minimal-apis/samples/IResultImplementation/Program.cs index ed999065..7469655b 100644 --- a/fundamentals/minimal-apis/samples/IResultImplementation/Program.cs +++ b/fundamentals/minimal-apis/samples/IResultImplementation/Program.cs @@ -20,7 +20,4 @@ app.MapPut("/api/contacts/{id}", ContactsHandler.PutContact); app.MapDelete("/api/contacts/{id}", ContactsHandler.DeleteContact); - - - app.Run(); diff --git a/fundamentals/minimal-apis/samples/IResultImplementation/Tests/IResultImplementationTest.cs b/fundamentals/minimal-apis/samples/IResultImplementation/Tests/IResultImplementationTest.cs index fdfe414a..1e293e1f 100644 --- a/fundamentals/minimal-apis/samples/IResultImplementation/Tests/IResultImplementationTest.cs +++ b/fundamentals/minimal-apis/samples/IResultImplementation/Tests/IResultImplementationTest.cs @@ -29,7 +29,7 @@ public void Setup() MockSet.As>().Setup(m => m.GetEnumerator()).Returns(() => Data.GetEnumerator()); } [TestMethod] - public async Task GetContactReturnsContactsFromDatabase() + public void GetContactsReturnsContactsFromDatabase() { //Arrange var mockContext = new Mock(); @@ -38,7 +38,7 @@ public async Task GetContactReturnsContactsFromDatabase() int expectedItemCount = 3; //Act - var result = (Ok>)await ContactsHandler.GetContacts(mockContext.Object); + var result = (Ok>)ContactsHandler.GetContacts(mockContext.Object); //Assert Assert.AreEqual(expectedStatusCode, result.StatusCode); @@ -47,7 +47,42 @@ public async Task GetContactReturnsContactsFromDatabase() } [TestMethod] - public async Task CreateTodoSavesContactToDatabase() + public void GetContactReturnsAContactFromDatabase() + { + //Arrange + var mockContext = new Mock(); + mockContext.Setup(c => c.Contact).Returns(MockSet!.Object); + int expectedStatusCode = 200; + int expectedUserId = 2; + + //Act + var result = (Ok)ContactsHandler.GetContact(mockContext.Object, expectedUserId); + + //Assert + Assert.AreEqual(expectedStatusCode, result.StatusCode); + Assert.AreEqual(expectedUserId, result.Value?.Id); + + } + + [TestMethod] + public void GetContactReturnsNotFound() + { + //Arrange + var mockContext = new Mock(); + mockContext.Setup(c => c.Contact).Returns(MockSet!.Object); + int expectedStatusCode = 404; + int expectedUserId = 20; + + //Act + var result = (NotFound)ContactsHandler.GetContact(mockContext.Object, expectedUserId); + + //Assert + Assert.AreEqual(expectedStatusCode, result.StatusCode); + + } + + [TestMethod] + public void CreateTodoSavesContactToDatabase() { //Arrange var mockDbContextOptions = new Mock>(); diff --git a/fundamentals/minimal-apis/samples/IResultImplementation/appsettings.json b/fundamentals/minimal-apis/samples/IResultImplementation/appsettings.json index 9acc3390..10f68b8c 100644 --- a/fundamentals/minimal-apis/samples/IResultImplementation/appsettings.json +++ b/fundamentals/minimal-apis/samples/IResultImplementation/appsettings.json @@ -5,8 +5,5 @@ "Microsoft.AspNetCore": "Warning" } }, - "AllowedHosts": "*", - "ConnectionStrings": { - "IResultImplementationContext": "Server=(localdb)\\mssqllocaldb;Database=IResultImplementationContext-b71964d8-db07-43dd-9b17-5d3725d46313;Trusted_Connection=True;MultipleActiveResultSets=true" - } -} \ No newline at end of file + "AllowedHosts": "*" +}