PageRenderTime 66ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/GitLab.NET.Tests/Repositories/MergeRequestRepositoryTests.cs

https://gitlab.com/jmiguelcouto/GitLab.NET
C# | 658 lines | 482 code | 176 blank | 0 comment | 0 complexity | ff9f63ac87ff35531b94d787d4227498 MD5 | raw file
  1. using NSubstitute;
  2. using System;
  3. using System.Threading.Tasks;
  4. using GitLab.NET.Abstractions;
  5. using GitLab.NET.Repositories;
  6. using Xunit;
  7. namespace GitLab.NET.Tests.Repositories
  8. {
  9. public class MergeRequestRepositoryTests
  10. {
  11. public MergeRequestRepositoryTests()
  12. {
  13. _request = Substitute.For<IRequest>();
  14. _requestFactory = Substitute.For<IRequestFactory>();
  15. _requestFactory.Create(Arg.Any<string>(), Arg.Any<Method>(), Arg.Any<bool>()).Returns(_request);
  16. _sut = new MergeRequestRepository(_requestFactory);
  17. }
  18. private readonly IRequest _request;
  19. private readonly IRequestFactory _requestFactory;
  20. private readonly MergeRequestRepository _sut;
  21. [Fact]
  22. public async Task Accept_ValidParameters_AddsProjectIdUrlSegment()
  23. {
  24. const uint expected = 0;
  25. await _sut.Accept(expected, 0);
  26. _request.Received().AddUrlSegment("projectId", expected);
  27. }
  28. [Fact]
  29. public async Task Accept_ValidParameters_AddsMergeRequestIdUrlSegment()
  30. {
  31. const uint expected = 0;
  32. await _sut.Accept(0, expected);
  33. _request.Received().AddUrlSegment("mergeRequestId", expected);
  34. }
  35. [Fact]
  36. public async Task Accept_CommitMessageIsSet_AddsMergeCommitMessageParameter()
  37. {
  38. const string expected = "commitMessage";
  39. await _sut.Accept(0, 0, commitMessage: expected);
  40. _request.Received().AddParameterIfNotNull("merge_commit_message", expected);
  41. }
  42. [Fact]
  43. public async Task Accept_RemoveSourceBranchIsSet_AddsShouldRemoveSourceBranchParameter()
  44. {
  45. const bool expected = true;
  46. await _sut.Accept(0, 0, removeSourceBranch: expected);
  47. _request.Received().AddParameterIfNotNull("should_remove_source_branch", expected);
  48. }
  49. [Fact]
  50. public async Task Accept_MergedWhenBuildSucceedsIsSet_AddsMergedWhenBuildSucceedsParameter()
  51. {
  52. const bool expected = true;
  53. await _sut.Accept(0, 0, mergedWhenBuildSucceeds: expected);
  54. _request.Received().AddParameterIfNotNull("merged_when_build_succeeds", expected);
  55. }
  56. [Fact]
  57. public async Task Accept_ValidParameters_SetsCorrectResourceAndMethod()
  58. {
  59. await _sut.Accept(0, 0);
  60. _requestFactory.Received().Create("projects/{projectId}/merge_requests/{mergeRequestId}/merge", Method.Put);
  61. }
  62. [Fact]
  63. public async Task CancelMergeOnBuildSuccess_ValidParameters_AddsProjectIdUrlSegment()
  64. {
  65. const uint expected = 0;
  66. await _sut.CancelMergeOnBuildSuccess(expected, 0);
  67. _request.Received().AddUrlSegment("projectId", expected);
  68. }
  69. [Fact]
  70. public async Task CancelMergeOnBuildSuccess_ValidParameters_AddsMergeRequestIdParameter()
  71. {
  72. const uint expected = 0;
  73. await _sut.CancelMergeOnBuildSuccess(0, expected);
  74. _request.Received().AddUrlSegment("mergeRequestId", expected);
  75. }
  76. [Fact]
  77. public async Task CancelMergeOnBuildSuccess_ValidParameters_SetsCorrectResourceAndMethod()
  78. {
  79. await _sut.CancelMergeOnBuildSuccess(0, 0);
  80. _requestFactory.Received().Create("projects/{projectId}/merge_requests/{mergeRequestId}/cancel_merge_when_build_succeeds", Method.Put);
  81. }
  82. [Fact]
  83. public async Task Create_SourceBranchIsNull_ThrowsArgumentNullException()
  84. {
  85. await Assert.ThrowsAsync<ArgumentNullException>(() => _sut.Create(0, null, "targetBranch", "title"));
  86. }
  87. [Fact]
  88. public async Task Create_TargetBranchIsNull_ThrowsArgumentNullException()
  89. {
  90. await Assert.ThrowsAsync<ArgumentNullException>(() => _sut.Create(0, "sourceBranch", null, "title"));
  91. }
  92. [Fact]
  93. public async Task Create_TitleIsNull_ThrowsArgumentNullException()
  94. {
  95. await Assert.ThrowsAsync<ArgumentNullException>(() => _sut.Create(0, "sourceBranch", "targetBranch", null));
  96. }
  97. [Fact]
  98. public async Task Create_ValidParameters_AddsProjectIdUrlSegment()
  99. {
  100. const uint expected = 0;
  101. await _sut.Create(expected, "sourceBranch", "targetBranch", "title");
  102. _request.Received().AddUrlSegment("projectId", expected);
  103. }
  104. [Fact]
  105. public async Task Create_ValidParameters_AddsSourceBranchParameter()
  106. {
  107. const string expected = "sourceBranch";
  108. await _sut.Create(0, expected, "targetBranch", "title");
  109. _request.Received().AddParameter("source_branch", expected);
  110. }
  111. [Fact]
  112. public async Task Create_ValidParameters_AddsTargetBranchParameter()
  113. {
  114. const string expected = "targetBranch";
  115. await _sut.Create(0, "sourceBranch", expected, "title");
  116. _request.Received().AddParameter("target_branch", expected);
  117. }
  118. [Fact]
  119. public async Task Create_ValidParameters_AddsTitleParameter()
  120. {
  121. const string expected = "title";
  122. await _sut.Create(0, "sourceBranch", "targetBranch", expected);
  123. _request.Received().AddParameter("title", expected);
  124. }
  125. [Fact]
  126. public async Task Create_AssigneeIdIsSet_AddsAssigneeIdParameter()
  127. {
  128. const uint expected = 0;
  129. await _sut.Create(0, "sourceBranch", "targetBranch", "title", assigneeId: expected);
  130. _request.Received().AddParameterIfNotNull("assignee_id", expected);
  131. }
  132. [Fact]
  133. public async Task Create_DescriptionIsSet_AddsDescriptionParameter()
  134. {
  135. const string expected = "description";
  136. await _sut.Create(0, "sourceBranch", "targetBranch", "title", description: expected);
  137. _request.Received().AddParameterIfNotNull("description", expected);
  138. }
  139. [Fact]
  140. public async Task Create_TargetProjectIdIsSet_AddsTargetProjectIdParameter()
  141. {
  142. const uint expected = 0;
  143. await _sut.Create(0, "sourceBranch", "targetBranch", "title", targetProjectId: expected);
  144. _request.Received().AddParameterIfNotNull("target_project_id", expected);
  145. }
  146. [Fact]
  147. public async Task Create_LabelsIsSet_AddsLabelsParameter()
  148. {
  149. var labels = new[]
  150. {
  151. "label1",
  152. "label2"
  153. };
  154. const string expected = "label1,label2";
  155. await _sut.Create(0, "sourceBranch", "targetBranch", "title", labels: labels);
  156. _request.Received().AddParameterIfNotNull("labels", expected);
  157. }
  158. [Fact]
  159. public async Task Create_MilestoneIdIsSet_AddsMilestoneIdParameter()
  160. {
  161. const uint expected = 0;
  162. await _sut.Create(0, "sourceBranch", "targetBranch", "title", milestoneId: expected);
  163. _request.Received().AddParameterIfNotNull("milestone_id", expected);
  164. }
  165. [Fact]
  166. public async Task Create_ValidParameters_SetsCorrectResourceAndMethod()
  167. {
  168. await _sut.Create(0, "sourceBranch", "targetBranch", "title");
  169. _requestFactory.Received().Create("projects/{projectId}/merge_requests", Method.Post);
  170. }
  171. [Fact]
  172. public async Task Delete_ValidParameters_AddsProjectIdUrlSegment()
  173. {
  174. const uint expected = 0;
  175. await _sut.Delete(expected, 0);
  176. _request.Received().AddUrlSegment("projectId", expected);
  177. }
  178. [Fact]
  179. public async Task Delete_ValidParameters_AddsMergeRequestIdUrlSegment()
  180. {
  181. const uint expected = 0;
  182. await _sut.Delete(0, expected);
  183. _request.Received().AddUrlSegment("mergeRequestId", expected);
  184. }
  185. [Fact]
  186. public async Task Delete_ValidParameters_SetsCorrectResourceAndMethod()
  187. {
  188. await _sut.Delete(0, 0);
  189. _requestFactory.Received().Create("projects/{projectId}/merge_requests/{mergeRequestId}", Method.Delete);
  190. }
  191. [Fact]
  192. public async Task Find_ValidParameters_AddsProjectIdUrlSegment()
  193. {
  194. const uint expected = 0;
  195. await _sut.Find(expected, 0);
  196. _request.Received().AddUrlSegment("projectId", expected);
  197. }
  198. [Fact]
  199. public async Task Find_ValidParameters_AddsMergeRequestIdUrlSegment()
  200. {
  201. const uint expected = 0;
  202. await _sut.Find(0, expected);
  203. _request.Received().AddUrlSegment("mergeRequestId", expected);
  204. }
  205. [Fact]
  206. public async Task Find_ValidParameters_SetsCorrectResourceAndMethod()
  207. {
  208. await _sut.Find(0, 0);
  209. _requestFactory.Received().Create("projects/{projectId}/merge_requests/{mergeRequestId}", Method.Get);
  210. }
  211. [Fact]
  212. public async Task GetAll_PageIsLessThanMinimum_ThrowsArgumentOutOfRangeException()
  213. {
  214. await Assert.ThrowsAsync<ArgumentOutOfRangeException>(() => _sut.GetAll(0, page: uint.MinValue));
  215. }
  216. [Fact]
  217. public async Task GetAll_ResultsPerPageIsLessThanMinimum_ThrowsArgumentOutOfRangeException()
  218. {
  219. await Assert.ThrowsAsync<ArgumentOutOfRangeException>(() => _sut.GetAll(0, resultsPerPage: uint.MinValue));
  220. }
  221. [Fact]
  222. public async Task GetAll_ResultsPerPageIsGreaterThanMaximum_ThrowsArgumentOutOfRangeException()
  223. {
  224. await Assert.ThrowsAsync<ArgumentOutOfRangeException>(() => _sut.GetAll(0, resultsPerPage: uint.MaxValue));
  225. }
  226. [Fact]
  227. public async Task GetAll_PageIsSet_AddsPageParameter()
  228. {
  229. const uint expected = 5;
  230. await _sut.GetAll(0, page: expected);
  231. _request.Received().AddParameter("page", expected);
  232. }
  233. [Fact]
  234. public async Task GetAll_ResultsPerPageIsSet_AddsPerPageParameter()
  235. {
  236. const uint expected = 5;
  237. await _sut.GetAll(0, resultsPerPage: expected);
  238. _request.Received().AddParameter("per_page", expected);
  239. }
  240. [Fact]
  241. public async Task GetAll_ValidParameters_AddsProjectIdUrlSegment()
  242. {
  243. const uint expected = 0;
  244. await _sut.GetAll(expected);
  245. _request.Received().AddUrlSegment("projectId", expected);
  246. }
  247. [Fact]
  248. public async Task GetAll_StateIsSet_AddsStateParameter()
  249. {
  250. const MergeRequestState state = MergeRequestState.Merged;
  251. const string expected = "merged";
  252. await _sut.GetAll(0, state: state);
  253. _request.Received().AddParameterIfNotNull("state", expected);
  254. }
  255. [Fact]
  256. public async Task GetAll_OrderByIsSet_AddsOrderByParameter()
  257. {
  258. const OrderBy orderBy = OrderBy.UpdatedAt;
  259. const string expected = "updated_at";
  260. await _sut.GetAll(0, orderBy: orderBy);
  261. _request.Received().AddParameterIfNotNull("order_by", expected);
  262. }
  263. [Fact]
  264. public async Task GetAll_SortIsSet_AddsSortParameter()
  265. {
  266. const SortOrder sort = SortOrder.Asc;
  267. const string expected = "asc";
  268. await _sut.GetAll(0, sort: sort);
  269. _request.Received().AddParameterIfNotNull("sort", expected);
  270. }
  271. [Fact]
  272. public async Task GetAll_ValidParameters_SetsCorrectResourceAndMethod()
  273. {
  274. await _sut.GetAll(0);
  275. _requestFactory.Received().Create("projects/{projectId}/merge_requests", Method.Get);
  276. }
  277. [Fact]
  278. public async Task GetChanges_ValidParameters_AddsProjectIdUrlSegment()
  279. {
  280. const uint expected = 0;
  281. await _sut.GetChanges(expected, 0);
  282. _request.Received().AddUrlSegment("projectId", expected);
  283. }
  284. [Fact]
  285. public async Task GetChanges_ValidParameters_AddsMergeRequestIdUrlSegment()
  286. {
  287. const uint expected = 0;
  288. await _sut.GetChanges(0, expected);
  289. _request.Received().AddUrlSegment("mergeRequestId", expected);
  290. }
  291. [Fact]
  292. public async Task GetChanges_ValidParameters_SetsCorrectResourceAndMethod()
  293. {
  294. await _sut.GetChanges(0, 0);
  295. _requestFactory.Received().Create("projects/{projectId}/merge_requests/{mergeRequestId}/changes", Method.Get);
  296. }
  297. [Fact]
  298. public async Task GetCommits_ValidParameters_AddsProjectIdUrlSegment()
  299. {
  300. const uint expected = 0;
  301. await _sut.GetCommits(expected, 0);
  302. _request.Received().AddUrlSegment("projectId", expected);
  303. }
  304. [Fact]
  305. public async Task GetCommits_ValidParameters_AddsMergeRequestIdUrlSegment()
  306. {
  307. const uint expected = 0;
  308. await _sut.GetCommits(0, expected);
  309. _request.Received().AddUrlSegment("mergeRequestId", expected);
  310. }
  311. [Fact]
  312. public async Task GetCommits_ValidParameters_SetsCorrectResourceAndMethod()
  313. {
  314. await _sut.GetCommits(0, 0);
  315. _requestFactory.Received().Create("projects/{projectId}/merge_requests/{mergeRequestId}/commits", Method.Get);
  316. }
  317. [Fact]
  318. public async Task GetIssuesClosedOnMerge_PageIsLessThanMinimum_ThrowsArgumentOutOfRangeException()
  319. {
  320. await Assert.ThrowsAsync<ArgumentOutOfRangeException>(() => _sut.GetIssuesClosedOnMerge(0, 0, page: uint.MinValue));
  321. }
  322. [Fact]
  323. public async Task GetIssuesClosedOnMerge_ResultsPerPageIsLessThanMinimum_ThrowsArgumentOutOfRangeException()
  324. {
  325. await Assert.ThrowsAsync<ArgumentOutOfRangeException>(() => _sut.GetIssuesClosedOnMerge(0, 0, resultsPerPage: uint.MinValue));
  326. }
  327. [Fact]
  328. public async Task GetIssuesClosedOnMerge_ResultsPerPageIsGreaterThanMaximum_ThrowsArgumentOutOfRangeException()
  329. {
  330. await Assert.ThrowsAsync<ArgumentOutOfRangeException>(() => _sut.GetIssuesClosedOnMerge(0, 0, resultsPerPage: uint.MaxValue));
  331. }
  332. [Fact]
  333. public async Task GetIssuesClosedOnMerge_PageIsSet_AddsPageParameter()
  334. {
  335. const uint expected = 5;
  336. await _sut.GetIssuesClosedOnMerge(0, 0, page: expected);
  337. _request.Received().AddParameter("page", expected);
  338. }
  339. [Fact]
  340. public async Task GetIssuesClosedOnMerge_ResultsPerPageIsSet_AddsPerPageParameter()
  341. {
  342. const uint expected = 5;
  343. await _sut.GetIssuesClosedOnMerge(0, 0, resultsPerPage: expected);
  344. _request.Received().AddParameter("per_page", expected);
  345. }
  346. [Fact]
  347. public async Task GetIssuesClosedOnMerge_ValidParameters_AddsProjectIdUrlSegment()
  348. {
  349. const uint expected = 0;
  350. await _sut.GetIssuesClosedOnMerge(expected, 0);
  351. _request.Received().AddUrlSegment("projectId", expected);
  352. }
  353. [Fact]
  354. public async Task GetIssuesClosedOnMerge_ValidParameters_AddsMergeRequestIdUrlSegment()
  355. {
  356. const uint expected = 0;
  357. await _sut.GetIssuesClosedOnMerge(0, expected);
  358. _request.Received().AddUrlSegment("mergeRequestId", expected);
  359. }
  360. [Fact]
  361. public async Task GetIssuesClosedOnMerge_ValidParameters_SetsCorrectResourceAndMethod()
  362. {
  363. await _sut.GetIssuesClosedOnMerge(0, 0);
  364. _requestFactory.Received().Create("projects/{projectId}/merge_requests/{mergeRequestId}/closes_issues", Method.Get);
  365. }
  366. [Fact]
  367. public async Task Subscribe_ValidParameters_AddsProjectIdUrlSegment()
  368. {
  369. const uint expected = 0;
  370. await _sut.Subscribe(expected, 0);
  371. _request.Received().AddUrlSegment("projectId", expected);
  372. }
  373. [Fact]
  374. public async Task Subscribe_ValidParameters_AddsMergeRequestIdUrlSegment()
  375. {
  376. const uint expected = 0;
  377. await _sut.Subscribe(0, expected);
  378. _request.Received().AddUrlSegment("mergeRequestId", expected);
  379. }
  380. [Fact]
  381. public async Task Subscribe_ValidParameters_SetsCorrectResourceAndMethod()
  382. {
  383. await _sut.Subscribe(0, 0);
  384. _requestFactory.Received().Create("projects/{projectId}/merge_requests/{mergeRequestId}/subscription", Method.Post);
  385. }
  386. [Fact]
  387. public async Task Unsubscribe_ValidParameters_AddsProjectIdUrlSegment()
  388. {
  389. const uint expected = 0;
  390. await _sut.Unsubscribe(expected, 0);
  391. _request.Received().AddUrlSegment("projectId", expected);
  392. }
  393. [Fact]
  394. public async Task Unsubscribe_ValidParameters_AddsMergeRequestIdUrlSegment()
  395. {
  396. const uint expected = 0;
  397. await _sut.Unsubscribe(0, expected);
  398. _request.Received().AddUrlSegment("mergeRequestId", expected);
  399. }
  400. [Fact]
  401. public async Task Unsubscribe_ValidParameters_SetsCorrectResourceAndMethod()
  402. {
  403. await _sut.Unsubscribe(0, 0);
  404. _requestFactory.Received().Create("projects/{projectId}/merge_requests/{mergeRequestId}/subscription", Method.Delete);
  405. }
  406. [Fact]
  407. public async Task Update_ValidParameters_AddsProjectIdUrlSegment()
  408. {
  409. const uint expected = 0;
  410. await _sut.Update(expected, 0);
  411. _request.Received().AddUrlSegment("projectId", expected);
  412. }
  413. [Fact]
  414. public async Task Update_ValidParameters_AddsMergeRequestIdUrlSegment()
  415. {
  416. const uint expected = 0;
  417. await _sut.Update(0, expected);
  418. _request.Received().AddUrlSegment("mergeRequestId", expected);
  419. }
  420. [Fact]
  421. public async Task Update_TargetBranchIsSet_AddsTargetBranchParameter()
  422. {
  423. const string expected = "targetBranch";
  424. await _sut.Update(0, 0, targetBranch: expected);
  425. _request.Received().AddParameterIfNotNull("target_branch", expected);
  426. }
  427. [Fact]
  428. public async Task Update_AssigneeIdIsSet_AddsAssigneeIdParameter()
  429. {
  430. const uint expected = 0;
  431. await _sut.Update(0, 0, assigneeId: expected);
  432. _request.Received().AddParameterIfNotNull("assignee_id", expected);
  433. }
  434. [Fact]
  435. public async Task Update_TitleIsSet_AddsTitleParameter()
  436. {
  437. const string expected = "title";
  438. await _sut.Update(0, 0, title: expected);
  439. _request.Received().AddParameterIfNotNull("title", expected);
  440. }
  441. [Fact]
  442. public async Task Update_DescriptionIsSet_AddsDescriptionParameter()
  443. {
  444. const string expected = "description";
  445. await _sut.Update(0, 0, description: expected);
  446. _request.Received().AddParameterIfNotNull("description", expected);
  447. }
  448. [Fact]
  449. public async Task Update_StateIsSet_AddsStateEventParameter()
  450. {
  451. const MergeRequestStateEvent state = MergeRequestStateEvent.Merge;
  452. const string expected = "merge";
  453. await _sut.Update(0, 0, state: state);
  454. _request.Received().AddParameterIfNotNull("state", expected);
  455. }
  456. [Fact]
  457. public async Task Update_LabelsIsSet_AddsLabelsParameter()
  458. {
  459. var labels = new[]
  460. {
  461. "label1",
  462. "label2"
  463. };
  464. const string expected = "label1,label2";
  465. await _sut.Update(0, 0, labels: labels);
  466. _request.Received().AddParameterIfNotNull("labels", expected);
  467. }
  468. [Fact]
  469. public async Task Update_MilestoneIdIsSet_AddsMilestoneIdParameter()
  470. {
  471. const uint expected = 0;
  472. await _sut.Update(0, 0, milestoneId: expected);
  473. _request.Received().AddParameterIfNotNull("milestone_id", expected);
  474. }
  475. [Fact]
  476. public async Task Update_ValidParameters_SetsCorrectResourceAndMethod()
  477. {
  478. await _sut.Update(0, 0);
  479. _requestFactory.Received().Create("projects/{projectId}/merge_requests/{mergeRequestId}", Method.Put);
  480. }
  481. }
  482. }