Skip to content

Commit 226828f

Browse files
PM-34391 fixes to eventsController (#7405)
1 parent cc596d8 commit 226828f

2 files changed

Lines changed: 176 additions & 3 deletions

File tree

src/Api/Dirt/Controllers/EventsController.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -249,12 +249,13 @@ private async Task<ServiceAccount> GetServiceAccount(Guid serviceAccountId, Guid
249249
return fallbackServiceAccount;
250250
}
251251

252-
[HttpGet("~/organizations/{orgId}/users/{id}/events")]
253-
public async Task<ListResponseModel<EventResponseModel>> GetOrganizationUser(string orgId, string id,
252+
[HttpGet("~/organizations/{orgId:guid}/users/{id:guid}/events")]
253+
public async Task<ListResponseModel<EventResponseModel>> GetOrganizationUser(Guid orgId, Guid id,
254254
[FromQuery] DateTime? start = null, [FromQuery] DateTime? end = null, [FromQuery] string continuationToken = null)
255255
{
256-
var organizationUser = await _organizationUserRepository.GetByIdAsync(new Guid(id));
256+
var organizationUser = await _organizationUserRepository.GetByIdAsync(id);
257257
if (organizationUser == null || !organizationUser.UserId.HasValue ||
258+
organizationUser.OrganizationId != orgId ||
258259
!await _currentContext.AccessEventLogs(organizationUser.OrganizationId))
259260
{
260261
throw new NotFoundException();
@@ -290,6 +291,7 @@ public async Task<ListResponseModel<EventResponseModel>> GetProviderUser(Guid pr
290291
{
291292
var providerUser = await _providerUserRepository.GetByIdAsync(id);
292293
if (providerUser == null || !providerUser.UserId.HasValue ||
294+
providerUser.ProviderId != providerId ||
293295
!_currentContext.ProviderAccessEventLogs(providerUser.ProviderId))
294296
{
295297
throw new NotFoundException();
Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
using Bit.Api.Dirt.Controllers;
2+
using Bit.Core.AdminConsole.Entities.Provider;
3+
using Bit.Core.AdminConsole.Repositories;
4+
using Bit.Core.Context;
5+
using Bit.Core.Entities;
6+
using Bit.Core.Exceptions;
7+
using Bit.Core.Models.Data;
8+
using Bit.Core.Repositories;
9+
using Bit.Test.Common.AutoFixture;
10+
using Bit.Test.Common.AutoFixture.Attributes;
11+
using NSubstitute;
12+
using Xunit;
13+
14+
namespace Bit.Api.Test.Dirt.Controllers;
15+
16+
[ControllerCustomize(typeof(EventsController))]
17+
[SutProviderCustomize]
18+
public class EventsControllerTests
19+
{
20+
[Theory, BitAutoData]
21+
public async Task GetOrganizationUser_UserNotFound_ThrowsNotFound(
22+
SutProvider<EventsController> sutProvider,
23+
Guid orgId, Guid id)
24+
{
25+
sutProvider.GetDependency<IOrganizationUserRepository>()
26+
.GetByIdAsync(id).Returns((OrganizationUser)null);
27+
28+
await Assert.ThrowsAsync<NotFoundException>(() =>
29+
sutProvider.Sut.GetOrganizationUser(orgId, id));
30+
}
31+
32+
[Theory, BitAutoData]
33+
public async Task GetOrganizationUser_UserHasNoUserId_ThrowsNotFound(
34+
SutProvider<EventsController> sutProvider,
35+
Guid orgId, Guid id)
36+
{
37+
var organizationUser = new OrganizationUser { Id = id, OrganizationId = orgId, UserId = null };
38+
sutProvider.GetDependency<IOrganizationUserRepository>()
39+
.GetByIdAsync(id).Returns(organizationUser);
40+
41+
await Assert.ThrowsAsync<NotFoundException>(() =>
42+
sutProvider.Sut.GetOrganizationUser(orgId, id));
43+
}
44+
45+
[Theory, BitAutoData]
46+
public async Task GetOrganizationUser_UserBelongsToDifferentOrganization_ThrowsNotFound(
47+
SutProvider<EventsController> sutProvider,
48+
Guid orgId, Guid differentOrgId, Guid id)
49+
{
50+
var organizationUser = new OrganizationUser { Id = id, OrganizationId = differentOrgId, UserId = Guid.NewGuid() };
51+
sutProvider.GetDependency<IOrganizationUserRepository>()
52+
.GetByIdAsync(id).Returns(organizationUser);
53+
54+
await Assert.ThrowsAsync<NotFoundException>(() =>
55+
sutProvider.Sut.GetOrganizationUser(orgId, id));
56+
}
57+
58+
[Theory, BitAutoData]
59+
public async Task GetOrganizationUser_NoAccessToEventLogs_ThrowsNotFound(
60+
SutProvider<EventsController> sutProvider,
61+
Guid orgId, Guid id)
62+
{
63+
var organizationUser = new OrganizationUser { Id = id, OrganizationId = orgId, UserId = Guid.NewGuid() };
64+
sutProvider.GetDependency<IOrganizationUserRepository>()
65+
.GetByIdAsync(id).Returns(organizationUser);
66+
sutProvider.GetDependency<ICurrentContext>()
67+
.AccessEventLogs(orgId).Returns(false);
68+
69+
await Assert.ThrowsAsync<NotFoundException>(() =>
70+
sutProvider.Sut.GetOrganizationUser(orgId, id));
71+
}
72+
73+
[Theory, BitAutoData]
74+
public async Task GetOrganizationUser_ValidRequest_ReturnsEvents(
75+
SutProvider<EventsController> sutProvider,
76+
Guid orgId, Guid id)
77+
{
78+
var userId = Guid.NewGuid();
79+
var organizationUser = new OrganizationUser { Id = id, OrganizationId = orgId, UserId = userId };
80+
sutProvider.GetDependency<IOrganizationUserRepository>()
81+
.GetByIdAsync(id).Returns(organizationUser);
82+
sutProvider.GetDependency<ICurrentContext>()
83+
.AccessEventLogs(orgId).Returns(true);
84+
sutProvider.GetDependency<IEventRepository>()
85+
.GetManyByOrganizationActingUserAsync(orgId, userId, Arg.Any<DateTime>(), Arg.Any<DateTime>(),
86+
Arg.Any<PageOptions>())
87+
.Returns(new PagedResult<IEvent>());
88+
89+
await sutProvider.Sut.GetOrganizationUser(orgId, id);
90+
91+
await sutProvider.GetDependency<IEventRepository>().Received(1)
92+
.GetManyByOrganizationActingUserAsync(orgId, userId, Arg.Any<DateTime>(), Arg.Any<DateTime>(),
93+
Arg.Any<PageOptions>());
94+
}
95+
96+
[Theory, BitAutoData]
97+
public async Task GetProviderUser_UserNotFound_ThrowsNotFound(
98+
SutProvider<EventsController> sutProvider,
99+
Guid providerId, Guid id)
100+
{
101+
sutProvider.GetDependency<IProviderUserRepository>()
102+
.GetByIdAsync(id).Returns((ProviderUser)null);
103+
104+
await Assert.ThrowsAsync<NotFoundException>(() =>
105+
sutProvider.Sut.GetProviderUser(providerId, id));
106+
}
107+
108+
[Theory, BitAutoData]
109+
public async Task GetProviderUser_UserHasNoUserId_ThrowsNotFound(
110+
SutProvider<EventsController> sutProvider,
111+
Guid providerId, Guid id)
112+
{
113+
var providerUser = new ProviderUser { Id = id, ProviderId = providerId, UserId = null };
114+
sutProvider.GetDependency<IProviderUserRepository>()
115+
.GetByIdAsync(id).Returns(providerUser);
116+
117+
await Assert.ThrowsAsync<NotFoundException>(() =>
118+
sutProvider.Sut.GetProviderUser(providerId, id));
119+
}
120+
121+
[Theory, BitAutoData]
122+
public async Task GetProviderUser_UserBelongsToDifferentProvider_ThrowsNotFound(
123+
SutProvider<EventsController> sutProvider,
124+
Guid providerId, Guid differentProviderId, Guid id)
125+
{
126+
var providerUser = new ProviderUser { Id = id, ProviderId = differentProviderId, UserId = Guid.NewGuid() };
127+
sutProvider.GetDependency<IProviderUserRepository>()
128+
.GetByIdAsync(id).Returns(providerUser);
129+
130+
await Assert.ThrowsAsync<NotFoundException>(() =>
131+
sutProvider.Sut.GetProviderUser(providerId, id));
132+
}
133+
134+
[Theory, BitAutoData]
135+
public async Task GetProviderUser_NoAccessToEventLogs_ThrowsNotFound(
136+
SutProvider<EventsController> sutProvider,
137+
Guid providerId, Guid id)
138+
{
139+
var providerUser = new ProviderUser { Id = id, ProviderId = providerId, UserId = Guid.NewGuid() };
140+
sutProvider.GetDependency<IProviderUserRepository>()
141+
.GetByIdAsync(id).Returns(providerUser);
142+
sutProvider.GetDependency<ICurrentContext>()
143+
.ProviderAccessEventLogs(providerId).Returns(false);
144+
145+
await Assert.ThrowsAsync<NotFoundException>(() =>
146+
sutProvider.Sut.GetProviderUser(providerId, id));
147+
}
148+
149+
[Theory, BitAutoData]
150+
public async Task GetProviderUser_ValidRequest_ReturnsEvents(
151+
SutProvider<EventsController> sutProvider,
152+
Guid providerId, Guid id)
153+
{
154+
var userId = Guid.NewGuid();
155+
var providerUser = new ProviderUser { Id = id, ProviderId = providerId, UserId = userId };
156+
sutProvider.GetDependency<IProviderUserRepository>()
157+
.GetByIdAsync(id).Returns(providerUser);
158+
sutProvider.GetDependency<ICurrentContext>()
159+
.ProviderAccessEventLogs(providerId).Returns(true);
160+
sutProvider.GetDependency<IEventRepository>()
161+
.GetManyByProviderActingUserAsync(providerId, userId, Arg.Any<DateTime>(), Arg.Any<DateTime>(),
162+
Arg.Any<PageOptions>())
163+
.Returns(new PagedResult<IEvent>());
164+
165+
await sutProvider.Sut.GetProviderUser(providerId, id);
166+
167+
await sutProvider.GetDependency<IEventRepository>().Received(1)
168+
.GetManyByProviderActingUserAsync(providerId, userId, Arg.Any<DateTime>(), Arg.Any<DateTime>(),
169+
Arg.Any<PageOptions>());
170+
}
171+
}

0 commit comments

Comments
 (0)