Skip to content

Commit 8a943d2

Browse files
committed
feat: add AdminEventService Tests
1 parent 42c6d00 commit 8a943d2

File tree

4 files changed

+92
-24
lines changed

4 files changed

+92
-24
lines changed

src/AzureOpenAIProxy.ApiApp/Repositories/AdminEventRepository.cs

+17-1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,13 @@ public interface IAdminEventRepository
4141
/// <param name="eventDetails">Event details instance.</param>
4242
/// <returns>Returns the updated record of the event details.</returns>
4343
Task<AdminEventDetails> UpdateEvent(Guid eventId, AdminEventDetails eventDetails);
44+
45+
/// <summary>
46+
/// Deletes the event details.
47+
/// </summary>
48+
/// <param name="eventDetails">Event details instance.</param>
49+
/// <returns>Removed EventID of event details instance.</returns>
50+
Task<Guid> DeleteEvent(AdminEventDetails eventDetails);
4451
}
4552

4653
/// <summary>
@@ -65,7 +72,6 @@ public async Task<AdminEventDetails> CreateEvent(AdminEventDetails eventDetails)
6572
public async Task<List<AdminEventDetails>> GetEvents()
6673
{
6774
var tableClient = await GetTableClientAsync();
68-
6975
var eventDetailsList = new List<AdminEventDetails>();
7076

7177
await foreach (var entity in tableClient.QueryAsync<AdminEventDetails>())
@@ -101,6 +107,15 @@ public async Task<AdminEventDetails> UpdateEvent(Guid eventId, AdminEventDetails
101107
return eventDetails;
102108
}
103109

110+
public async Task<Guid> DeleteEvent(AdminEventDetails eventDetails)
111+
{
112+
var tableClient = await GetTableClientAsync();
113+
114+
await tableClient.DeleteEntityAsync(eventDetails.PartitionKey, eventDetails.RowKey);
115+
116+
return eventDetails.EventId;
117+
}
118+
104119
private async Task<TableClient> GetTableClientAsync()
105120
{
106121
TableClient tableClient = _tableServiceClient.GetTableClient(_storageAccountSettings.TableStorage.TableName);
@@ -111,6 +126,7 @@ private async Task<TableClient> GetTableClientAsync()
111126
}
112127
}
113128

129+
114130
/// <summary>
115131
/// This represents the extension class for <see cref="IServiceCollection"/>
116132
/// </summary>

src/AzureOpenAIProxy.ApiApp/Services/AdminEventService.cs

+15
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,13 @@ public interface IAdminEventService
3535
/// <param name="eventDetails">Event details to update.</param>
3636
/// <returns>Returns the updated event details.</returns>
3737
Task<AdminEventDetails> UpdateEvent(Guid eventId, AdminEventDetails eventDetails);
38+
39+
/// <summary>
40+
/// Deletes the event details.
41+
/// </summary>
42+
/// <param name="eventDetails">Event details to update.</param>
43+
/// <returns>Removed EventID of event details instance.</returns>
44+
Task<Guid> DeleteEvent(AdminEventDetails eventDetails);
3845
}
3946

4047
/// <summary>
@@ -75,6 +82,14 @@ public async Task<AdminEventDetails> UpdateEvent(Guid eventId, AdminEventDetails
7582

7683
return result;
7784
}
85+
86+
/// <inheritdoc />
87+
public async Task<Guid> DeleteEvent(AdminEventDetails eventDetails)
88+
{
89+
var result = await this._repository.DeleteEvent(eventDetails).ConfigureAwait(false);
90+
91+
return result;
92+
}
7893
}
7994

8095
/// <summary>

test/AzureOpenAIProxy.ApiApp.Tests/Repositories/AdminEventRepositoryTests.cs

+23-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using System.Configuration;
2-
3-
using Azure;
1+
using Azure;
42
using Azure.Data.Tables;
53

64
using AzureOpenAIProxy.ApiApp.Configurations;
@@ -14,15 +12,13 @@
1412
using NSubstitute;
1513
using NSubstitute.ExceptionExtensions;
1614

17-
using Xunit.Sdk;
18-
1915
namespace AzureOpenAIProxy.ApiApp.Tests.Repositories;
2016

2117
public class AdminEventRepositoryTests
2218
{
23-
private StorageAccountSettings mockSettings;
24-
private TableServiceClient mockTableServiceClient;
25-
private TableClient mockTableClient;
19+
private readonly StorageAccountSettings mockSettings;
20+
private readonly TableServiceClient mockTableServiceClient;
21+
private readonly TableClient mockTableClient;
2622

2723
public AdminEventRepositoryTests()
2824
{
@@ -163,4 +159,23 @@ await mockTableClient.Received(1)
163159
Arg.Any<Azure.ETag>(),
164160
TableUpdateMode.Replace);
165161
}
162+
163+
[Fact]
164+
public async Task Given_Instance_When_DeleteEvent_Invoked_Then_It_Should_Invoke_DeleteEntityAsync_Method()
165+
{
166+
// Arrange
167+
var eventDetails = new AdminEventDetails();
168+
var repository = new AdminEventRepository(mockTableServiceClient, mockSettings);
169+
var eventId = Guid.NewGuid();
170+
171+
eventDetails.EventId = eventId;
172+
173+
// Act
174+
Guid deletedEventId = await repository.DeleteEvent(eventDetails);
175+
176+
// Assert
177+
deletedEventId.Should().Be(eventId);
178+
await mockTableClient.Received(1)
179+
.DeleteEntityAsync(Arg.Any<string>(), Arg.Any<string>());
180+
}
166181
}

test/AzureOpenAIProxy.ApiApp.Tests/Services/AdminEventServiceTests.cs

+37-15
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ namespace AzureOpenAIProxy.ApiApp.Tests.Services;
1515

1616
public class AdminEventServiceTests
1717
{
18+
private readonly IAdminEventRepository mockRepository;
19+
20+
public AdminEventServiceTests()
21+
{
22+
mockRepository = Substitute.For<IAdminEventRepository>();
23+
}
24+
1825
[Fact]
1926
public void Given_ServiceCollection_When_AddAdminEventService_Invoked_Then_It_Should_Contain_AdminEventService()
2027
{
@@ -33,8 +40,7 @@ public void Given_Instance_When_CreateEvent_Invoked_Then_It_Should_Throw_Excepti
3340
{
3441
// Arrange
3542
var eventDetails = new AdminEventDetails();
36-
var repository = Substitute.For<IAdminEventRepository>();
37-
var service = new AdminEventService(repository);
43+
var service = new AdminEventService(mockRepository);
3844

3945
// Act
4046
Func<Task> func = async () => await service.CreateEvent(eventDetails);
@@ -47,8 +53,7 @@ public void Given_Instance_When_CreateEvent_Invoked_Then_It_Should_Throw_Excepti
4753
public void Given_Instance_When_GetEvents_Invoked_Then_It_Should_Throw_Exception()
4854
{
4955
// Arrange
50-
var repository = Substitute.For<IAdminEventRepository>();
51-
var service = new AdminEventService(repository);
56+
var service = new AdminEventService(mockRepository);
5257

5358
// Act
5459
Func<Task> func = async () => await service.GetEvents();
@@ -65,12 +70,11 @@ public async Task Given_Failure_In_Get_Entity_When_GetEvent_Invoked_Then_It_Shou
6570
{
6671
// Arrange
6772
var eventId = Guid.NewGuid();
68-
var repository = Substitute.For<IAdminEventRepository>();
69-
var service = new AdminEventService(repository);
73+
var service = new AdminEventService(mockRepository);
7074

7175
var exception = new RequestFailedException(statusCode, "Request Failed", default, default);
7276

73-
repository.GetEvent(Arg.Any<Guid>()).ThrowsAsync(exception);
77+
mockRepository.GetEvent(Arg.Any<Guid>()).ThrowsAsync(exception);
7478

7579
// Act
7680
Func<Task> func = () => service.GetEvent(eventId);
@@ -85,8 +89,7 @@ public async Task Given_Failure_In_Get_Entity_When_GetEvent_Invoked_Then_It_Shou
8589
public async Task Given_Exist_EventId_When_GetEvent_Invoked_Then_It_Should_Return_AdminEventDetails(string eventId)
8690
{
8791
// Arrange
88-
var repository = Substitute.For<IAdminEventRepository>();
89-
var service = new AdminEventService(repository);
92+
var service = new AdminEventService(mockRepository);
9093

9194
var eventDetails = new AdminEventDetails
9295
{
@@ -95,7 +98,7 @@ public async Task Given_Exist_EventId_When_GetEvent_Invoked_Then_It_Should_Retur
9598

9699
var guid = Guid.Parse(eventId);
97100

98-
repository.GetEvent(guid).Returns(Task.FromResult(eventDetails));
101+
mockRepository.GetEvent(guid).Returns(Task.FromResult(eventDetails));
99102

100103
// Act
101104
var result = await service.GetEvent(guid);
@@ -105,18 +108,37 @@ public async Task Given_Exist_EventId_When_GetEvent_Invoked_Then_It_Should_Retur
105108
}
106109

107110
[Fact]
108-
public void Given_Instance_When_UpdateEvent_Invoked_Then_It_Should_Throw_Exception()
111+
public async Task Given_Instance_When_UpdateEvent_Invoked_Then_It_Should_Return_Updated_Event_Details()
109112
{
110113
// Arrange
111114
var eventId = Guid.NewGuid();
112115
var eventDetails = new AdminEventDetails();
113-
var repository = Substitute.For<IAdminEventRepository>();
114-
var service = new AdminEventService(repository);
116+
var service = new AdminEventService(mockRepository);
117+
118+
mockRepository.UpdateEvent(eventId, eventDetails).Returns(eventDetails);
115119

116120
// Act
117-
Func<Task> func = async () => await service.UpdateEvent(eventId, eventDetails);
121+
var updatedEventDetails = await service.UpdateEvent(eventId, eventDetails);
118122

119123
// Assert
120-
func.Should().ThrowAsync<NotImplementedException>();
124+
updatedEventDetails.Should().BeEquivalentTo(eventDetails);
125+
}
126+
127+
[Fact]
128+
public async Task Given_Instance_When_DeleteEvent_Invoked_Then_It_Should_Return_Deleted_Event_Id()
129+
{
130+
// Arrange
131+
var eventId = Guid.NewGuid();
132+
var eventDetails = new AdminEventDetails();
133+
var service = new AdminEventService(mockRepository);
134+
135+
eventDetails.EventId = eventId;
136+
mockRepository.DeleteEvent(eventDetails).Returns(eventDetails.EventId);
137+
138+
// Act
139+
var deletedEventId = await service.DeleteEvent(eventDetails);
140+
141+
// Assert
142+
deletedEventId.Should().Be(eventId);
121143
}
122144
}

0 commit comments

Comments
 (0)