Table of Content
- Create an ASP.NET Core Web API Project in Visual Studio
- Define API Endpoints
- Set Up Refit for API Client
- Write NUnit Test Cases
- Run and Validate Tests
1. Create an ASP.NET Core Web API Project in Visual Studio
- Open Visual Studio and select "Create a new project".
- Choose "ASP.NET Core Web API" and click "Next".
- Name your project (e.g., MemberSearchApi) and click "Create".
- Select the .NET version you want to use and click "Create".
2. Define API Endpoints
- In the Solution Explorer, right-click on the Controllers folder, and select "Add" > "Controller...".
- Choose "API Controller - Empty" and click "Add". Name the controller MemberController.
Controllers/MemberController.cs
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;
namespace MemberSearchApi.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class MemberController : ControllerBase
{
private static readonly List<Member> Members = new List<Member>
{
new Member { Id = "1234ABC", Name = "John Smith", ClientName = "Anthem CR" },
// Add more members as needed
};
[HttpGet("search")]
public ActionResult<MemberDetails> SearchMember(string memberId, string clientName)
{
var member = Members.FirstOrDefault(m => m.Id == memberId && (m.ClientName == clientName || clientName == "All Clients"));
if (member == null)
return NotFound();
var memberDetails = new MemberDetails
{
Name = member.Name,
// Populate other details as necessary
};
return Ok(memberDetails);
}
}
public class Member
{
public string Id { get; set; }
public string Name { get; set; }
public string ClientName { get; set; }
}
public class MemberDetails
{
public string Name { get; set; }
// Add other relevant member properties
}
}
3. Set Up Refit for API Client
- Right-click on the solution and select "Manage NuGet Packages for Solution".
- Search for Refit and install it in both the main project and the test project.
Create an interface for the API using Refit.
Services/IMemberApi.cs
using Refit;
using System.Threading.Tasks;
namespace MemberSearchApi.Services
{
public interface IMemberApi
{
[Get("/api/members/search")]
Task<ApiResponse<MemberDetails>> SearchMember([Query] string memberId, [Query] string clientName);
}
public class MemberDetails
{
public string Name { get; set; }
// Add other relevant member properties
}
}
4. Write NUnit Test Cases
- Right-click on the solution, and select "Add" > "New Project".
- Choose "NUnit Test Project" and name it (e.g., MemberSearchApi.Tests).
- Add a reference to the main project by right-clicking on the Dependencies node of the test project and selecting "Add Project Reference...".
Install the necessary NuGet packages in the test project.
- Refit.HttpClient
- Microsoft.AspNetCore.Mvc.Testing
Tests/MemberSearchTests.cs
using NUnit.Framework;
using Refit;
using System;
using System.Threading.Tasks;
using MemberSearchApi.Services;
using Microsoft.AspNetCore.Mvc.Testing;
namespace MemberSearchApi.Tests
{
public class MemberSearchTests
{
private IMemberApi _memberApi;
[SetUp]
public void Setup()
{
var factory = new WebApplicationFactory<Program>();
var client = factory.CreateClient();
_memberApi = RestService.For<IMemberApi>(client);
}
[Test]
public async Task SearchMember_ValidMemberIDAndClientName_ReturnsMemberDetails()
{
// Arrange
var memberId = "1234ABC";
var clientName = "Anthem CR";
// Act
var response = await _memberApi.SearchMember(memberId, clientName);
// Assert
Assert.IsTrue(response.IsSuccessStatusCode);
var memberDetails = response.Content;
Assert.IsNotNull(memberDetails);
Assert.AreEqual("John Smith", memberDetails.Name);
}
[Test]
public async Task SearchMember_ValidMemberIDAndAllClients_ReturnsMemberDetails()
{
// Arrange
var memberId = "1234ABC";
var clientName = "All Clients";
// Act
var response = await _memberApi.SearchMember(memberId, clientName);
// Assert
Assert.IsTrue(response.IsSuccessStatusCode);
var memberDetails = response.Content;
Assert.IsNotNull(memberDetails);
Assert.AreEqual("John Smith", memberDetails.Name);
}
[Test]
public async Task SearchMember_InvalidMemberID_ReturnsNotFound()
{
// Arrange
var memberId = "InvalidID";
var clientName = "Anthem CR";
// Act
var response = await _memberApi.SearchMember(memberId, clientName);
// Assert
Assert.IsFalse(response.IsSuccessStatusCode);
Assert.AreEqual(System.Net.HttpStatusCode.NotFound, response.StatusCode);
}
[Test]
public async Task SearchMember_InvalidClientName_ReturnsNotFound()
{
// Arrange
var memberId = "1234ABC";
var clientName = "Invalid Client";
// Act
var response = await _memberApi.SearchMember(memberId, clientName);
// Assert
Assert.IsFalse(response.IsSuccessStatusCode);
Assert.AreEqual(System.Net.HttpStatusCode.NotFound, response.StatusCode);
}
[Test]
public async Task SearchMember_EmptyMemberID_ReturnsBadRequest()
{
// Arrange
var memberId = "";
var clientName = "Anthem CR";
// Act
var response = await _memberApi.SearchMember(memberId, clientName);
// Assert
Assert.IsFalse(response.IsSuccessStatusCode);
Assert.AreEqual(System.Net.HttpStatusCode.BadRequest, response.StatusCode);
}
[Test]
public async Task SearchMember_EmptyClientName_ReturnsBadRequest()
{
// Arrange
var memberId = "1234ABC";
var clientName = "";
// Act
var response = await _memberApi.SearchMember(memberId, clientName);
// Assert
Assert.IsFalse(response.IsSuccessStatusCode);
Assert.AreEqual(System.Net.HttpStatusCode.BadRequest, response.StatusCode);
}
}
}