Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

RequestTests.cs 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. using AutoMapper;
  2. using Diligent.WebAPI.Business.Interfaces;
  3. using Diligent.WebAPI.Data.Entities;
  4. using Diligent.WebAPI.Data.HelperModels;
  5. using Diligent.WebAPI.Host.DTOs.Request;
  6. using Diligent.WebAPI.Host.Exceptions;
  7. using Diligent.WebAPI.Host.Mapper;
  8. using Diligent.WebAPI.Host.Mediator.Request.Commands;
  9. using Diligent.WebAPI.Host.Mediator.Request.Handlers;
  10. using Diligent.WebAPI.Host.Mediator.Request.Queries;
  11. using Moq;
  12. namespace Tests
  13. {
  14. [TestFixture]
  15. public class RequestTests
  16. {
  17. private Mock<IRequestRepository> _requestRepositoryMock;
  18. private Mock<IRoomRepository> _roomRepositoryMock;
  19. private IMapper _mapper;
  20. private readonly List<Request> _requests = new()
  21. {
  22. new Request
  23. {
  24. Id = "1",
  25. RoomId = "123",
  26. RoomName = "Room1",
  27. SenderId = "123",
  28. SenderUsername = "user1",
  29. CreatedAtUtc = DateTime.UtcNow,
  30. },
  31. new Request
  32. {
  33. Id = "2",
  34. RoomId = "1234",
  35. RoomName = "Room2",
  36. SenderId = "1234",
  37. SenderUsername = "user1",
  38. CreatedAtUtc = DateTime.UtcNow,
  39. },
  40. new Request
  41. {
  42. Id = "3",
  43. RoomId = "123",
  44. RoomName = "Room3",
  45. SenderId = "123",
  46. SenderUsername = "user2",
  47. CreatedAtUtc = DateTime.UtcNow,
  48. },
  49. };
  50. private readonly List<Room> _rooms = new()
  51. {
  52. new Room
  53. {
  54. Id = "123",
  55. CreatedBy = "123",
  56. Customers = new List<CustomerDTO>(),
  57. CreatedAtUtc = DateTime.UtcNow,
  58. IsOneToOne = true,
  59. Messages = new List<Message>(),
  60. Name = "room1"
  61. },
  62. new Room
  63. {
  64. Id = "1234",
  65. CreatedBy = "1234",
  66. Customers = new List<CustomerDTO>(),
  67. CreatedAtUtc = DateTime.UtcNow,
  68. IsOneToOne = true,
  69. Messages = new List<Message>(),
  70. Name = "room2"
  71. },
  72. };
  73. [SetUp]
  74. public void Setup()
  75. {
  76. _requestRepositoryMock = new Mock<IRequestRepository>();
  77. _roomRepositoryMock = new Mock<IRoomRepository>();
  78. _requestRepositoryMock.Setup(r => r.RemoveAsync(It.IsAny<string>())).Returns(Task.CompletedTask);
  79. _requestRepositoryMock.Setup(x => x.CreateAsync(It.IsAny<Request>())).Returns(Task.CompletedTask);
  80. var listOfProfiles = new List<Profile>
  81. {
  82. new RequestMappingProfile(),
  83. new CustomerMappingProfile()
  84. };
  85. var configuration = new MapperConfiguration(cfg => cfg.AddProfiles(listOfProfiles));
  86. _mapper = new Mapper(configuration);
  87. }
  88. [Test]
  89. public void AcceptCustomerRequest_RoomIsNull_ThrowNotFoundException()
  90. {
  91. _roomRepositoryMock.Setup(r => r.GetByIdAsync(It.IsAny<string>())).Returns(Task.FromResult<Room>(null));
  92. var command = new AcceptCustomerRequestCommand("1", "1");
  93. var handler = new AcceptCustomerRequestHandler(_requestRepositoryMock.Object, _roomRepositoryMock.Object);
  94. Assert.That(async () => await handler.Handle(command, new CancellationToken()), Throws.Exception.TypeOf<NotFoundException>());
  95. }
  96. [Test]
  97. public void AcceptCustomerRequest_RoomIsNotNullAndRequestIsNull_ThrowNotFoundException()
  98. {
  99. _roomRepositoryMock.Setup(r => r.GetByIdAsync(It.IsAny<string>())).Returns(Task.FromResult(_rooms[0]));
  100. _requestRepositoryMock.Setup(r => r.FindRequestAsync(It.IsAny<string>(), It.IsAny<string>())).Returns(Task.FromResult<Request>(null));
  101. var command = new AcceptCustomerRequestCommand("1", "1");
  102. var handler = new AcceptCustomerRequestHandler(_requestRepositoryMock.Object, _roomRepositoryMock.Object);
  103. Assert.That(async () => await handler.Handle(command, new CancellationToken()), Throws.Exception.TypeOf<NotFoundException>());
  104. }
  105. [Test]
  106. public async Task AcceptCustomerRequest_RoomIsNotNullAndRequestInNotNull_ReturnIdOfRequest()
  107. {
  108. _roomRepositoryMock.Setup(r => r.GetByIdAsync(It.IsAny<string>())).Returns(Task.FromResult(_rooms[0]));
  109. _requestRepositoryMock.Setup(r => r.FindRequestAsync(It.IsAny<string>(), It.IsAny<string>())).Returns(Task.FromResult(_requests[0]));
  110. var command = new AcceptCustomerRequestCommand("1", "1");
  111. var handler = new AcceptCustomerRequestHandler(_requestRepositoryMock.Object, _roomRepositoryMock.Object);
  112. var result = await handler.Handle(command, new CancellationToken());
  113. Assert.That(result, Is.EqualTo(_requests[0].Id));
  114. }
  115. [Test]
  116. public async Task CreateRequest_WhenCalled_ReturnsObject()
  117. {
  118. var requestDTO = new RequestCreateDTO
  119. {
  120. RoomId = "room1",
  121. RoomName = "room1",
  122. SenderId = "sender1",
  123. SenderUsername = "sender1"
  124. };
  125. var command = new CreateRequestCommand(requestDTO);
  126. var handler = new CreateRequestHandler(_mapper, _requestRepositoryMock.Object);
  127. var result = await handler.Handle(command, new CancellationToken());
  128. Assert.That(result, Is.Not.Null);
  129. }
  130. [Test]
  131. public async Task GetAllRequest_ThereAreNoRequests_ReturnEmptyList()
  132. {
  133. _requestRepositoryMock.Setup(x => x.GetAsync()).Returns(Task.FromResult(new List<Request>()));
  134. var query = new GetAllRequestsQuery();
  135. var handler = new GetAllRequestHandler(_requestRepositoryMock.Object);
  136. var result = await handler.Handle(query, new CancellationToken());
  137. Assert.That(result, Is.Empty);
  138. }
  139. [Test]
  140. public async Task GetAllRequest_ThereAreRequests_ReturnListOfRequests()
  141. {
  142. _requestRepositoryMock.Setup(x => x.GetAsync()).Returns(Task.FromResult(_requests));
  143. var query = new GetAllRequestsQuery();
  144. var handler = new GetAllRequestHandler(_requestRepositoryMock.Object);
  145. var result = await handler.Handle(query, new CancellationToken());
  146. Assert.That(result, Is.EqualTo(_requests));
  147. }
  148. [Test]
  149. public void GetRequest_RequestIsNull_ThrowNotFoundException()
  150. {
  151. _requestRepositoryMock.Setup(r => r.GetByIdAsync(It.IsAny<string>())).Returns(Task.FromResult<Request>(null));
  152. var query = new GetRequestQuery("123");
  153. var handler = new GetRequestHandler(_requestRepositoryMock.Object);
  154. var result = handler.Handle(query, new CancellationToken());
  155. Assert.That(async () => await handler.Handle(query, new CancellationToken()), Throws.Exception.TypeOf<NotFoundException>());
  156. }
  157. [Test]
  158. public async Task GetRequest_RequestIsNotNull_ReturnRequest()
  159. {
  160. var request = _requests[0];
  161. _requestRepositoryMock.Setup(r => r.GetByIdAsync(It.IsAny<string>())).Returns(Task.FromResult(request));
  162. var query = new GetRequestQuery("123");
  163. var handler = new GetRequestHandler(_requestRepositoryMock.Object);
  164. var result = await handler.Handle(query, new CancellationToken());
  165. Assert.That(result, Is.EqualTo(request));
  166. }
  167. [Test]
  168. public async Task GetRoomsForWhichRequestExist_ThereAreNoRequests_ReturnEmptyList()
  169. {
  170. _requestRepositoryMock.Setup(r => r.GetAsync()).Returns(Task.FromResult(new List<Request>()));
  171. var query = new GetRoomsForWhichRequestExistQuery();
  172. var handler = new GetRoomsForWhichRequestExistHandler(_requestRepositoryMock.Object,_mapper,_roomRepositoryMock.Object);
  173. var result = await handler.Handle(query, new CancellationToken());
  174. Assert.That(result, Is.Empty);
  175. }
  176. [Test]
  177. public async Task GetRoomsForWhichRequestExist_ThereAreOneRequestForOneRoom_ReturnListWithOneElement()
  178. {
  179. _requestRepositoryMock.Setup(r => r.GetAsync()).Returns(Task.FromResult(new List<Request> { _requests[0] })); //parameter must be _requests[0]
  180. _roomRepositoryMock.Setup(r => r.GetAsync()).Returns(Task.FromResult(new List<Room> { _rooms[0] })); //parameter must be _rooms[0]
  181. var query = new GetRoomsForWhichRequestExistQuery();
  182. var handler = new GetRoomsForWhichRequestExistHandler(_requestRepositoryMock.Object, _mapper, _roomRepositoryMock.Object);
  183. var result = await handler.Handle(query, new CancellationToken());
  184. Assert.That(result, Has.Count.EqualTo(1));
  185. }
  186. [Test]
  187. public async Task GetRoomsForWhichRequestExist_ThereAreTwoRequestsForOneRoom_ReturnListWithOneElement()
  188. {
  189. _requestRepositoryMock.Setup(r => r.GetAsync()).Returns(Task.FromResult(new List<Request> { _requests[0], _requests[2] })); //parameter must be _requests[0] and _requests[2]
  190. _roomRepositoryMock.Setup(r => r.GetAsync()).Returns(Task.FromResult(new List<Room> { _rooms[0] })); //parameter must be _rooms[0]
  191. var query = new GetRoomsForWhichRequestExistQuery();
  192. var handler = new GetRoomsForWhichRequestExistHandler(_requestRepositoryMock.Object, _mapper, _roomRepositoryMock.Object);
  193. var result = await handler.Handle(query, new CancellationToken());
  194. Assert.That(result, Has.Count.EqualTo(1));
  195. }
  196. [Test]
  197. public async Task GetRoomsForWhichRequestExist_ThereAreTwoRequestsForTwoRooms_ReturnListWithTwoElements()
  198. {
  199. _requestRepositoryMock.Setup(r => r.GetAsync()).Returns(Task.FromResult(new List<Request> { _requests[0], _requests[1] })); //parameter must be _requests[0] and _requests[1]
  200. _roomRepositoryMock.Setup(r => r.GetAsync()).Returns(Task.FromResult(new List<Room> { _rooms[0], _rooms[1] })); //parameter must be _rooms[0] and _rooms[1]
  201. var query = new GetRoomsForWhichRequestExistQuery();
  202. var handler = new GetRoomsForWhichRequestExistHandler(_requestRepositoryMock.Object, _mapper, _roomRepositoryMock.Object);
  203. var result = await handler.Handle(query, new CancellationToken());
  204. Assert.That(result, Has.Count.EqualTo(2));
  205. }
  206. [Test]
  207. public async Task GetSendersForSpecificRoom_ThereAreNoRequests_ReturnEmptyList()
  208. {
  209. _requestRepositoryMock.Setup(x => x.GetAsync()).Returns(Task.FromResult(new List<Request>()));
  210. var query = new GetSendersForSpecificRequestRoomQuery("1");
  211. var handler = new GetSendersForSpecificRoomHandler(_requestRepositoryMock.Object, _mapper);
  212. var result = await handler.Handle(query, new CancellationToken());
  213. Assert.That(result, Is.Empty);
  214. }
  215. [Test]
  216. public async Task GetSendersForSpecificRoom_ThereAreRequestsAndOneSender_ReturnListWithOneItem()
  217. {
  218. _requestRepositoryMock.Setup(x => x.GetAsync()).Returns(Task.FromResult(_requests));
  219. var query = new GetSendersForSpecificRequestRoomQuery("1234"); // parameter must be equal 1234
  220. var handler = new GetSendersForSpecificRoomHandler(_requestRepositoryMock.Object, _mapper);
  221. var result = await handler.Handle(query, new CancellationToken());
  222. Assert.That(result, Has.Count.EqualTo(1));
  223. }
  224. [Test]
  225. public async Task GetSendersForSpecificRoom_ThereAreRequestsAndTwoSenders_ReturnListWithTwoSenders()
  226. {
  227. _requestRepositoryMock.Setup(x => x.GetAsync()).Returns(Task.FromResult(_requests));
  228. var query = new GetSendersForSpecificRequestRoomQuery("123"); // parameter must be equal 123
  229. var handler = new GetSendersForSpecificRoomHandler(_requestRepositoryMock.Object, _mapper);
  230. var result = await handler.Handle(query, new CancellationToken());
  231. Assert.That(result, Has.Count.EqualTo(2));
  232. }
  233. [Test]
  234. public void RejectCustomer_ThereAreNoRequest_ThrowNotFoundException()
  235. {
  236. _requestRepositoryMock.Setup(r => r.FindRequestAsync(It.IsAny<string>(), It.IsAny<string>())).Returns(Task.FromResult<Request>(null));
  237. var command = new RejectCustomerRequestCommand("1", "1");
  238. var handler = new RejectCustomerRequestHandler(_requestRepositoryMock.Object);
  239. Assert.That(async () => await handler.Handle(command, new CancellationToken()), Throws.Exception.TypeOf<NotFoundException>());
  240. }
  241. [Test]
  242. public async Task RejectCustomer_ThereAreRequest_ReturnIdOfRequest()
  243. {
  244. var request = _requests[0];
  245. _requestRepositoryMock.Setup(r => r.FindRequestAsync(It.IsAny<string>(), It.IsAny<string>())).Returns(Task.FromResult(request));
  246. var command = new RejectCustomerRequestCommand("1", "1");
  247. var handler = new RejectCustomerRequestHandler(_requestRepositoryMock.Object);
  248. var result = await handler.Handle(command, new CancellationToken());
  249. Assert.That(result, Is.EqualTo(request.Id));
  250. }
  251. }
  252. }