@Transactional @Override public void decline(Long requestClaimId) { RequestClaim requestClaim = requestClaimRepository.findOne(requestClaimId).orElseThrow(() -> new RuntimeException("Request claim not found")); Request request = requestRepository.findOne(requestClaim.getRequestId()).orElseThrow(ResourceNotFoundException::new); request.setStatus(RequestStatus.FUNDED); requestClaim.setStatus(ClaimRequestStatus.DECLINED); requestRepository.save(request); requestClaimRepository.save(requestClaim); }
@Transactional @Override public void approve(Long requestClaimId) { RequestClaim requestClaim = requestClaimRepository.findOne(requestClaimId).orElseThrow(() -> new RuntimeException("Request claim not found")); Request request = requestRepository.findOne(requestClaim.getRequestId()).orElseThrow(ResourceNotFoundException::new); ClaimSignature sig = azraelClient.getSignature(createSignClaimCommand(requestClaim, request)); try { final ClaimTransaction claimTransaction = azraelClient.submitClaim(sig); request.setStatus(RequestStatus.CLAIM_APPROVED); requestClaim.setStatus(ClaimRequestStatus.APPROVED); requestClaim.setTransactionHash(prettify(claimTransaction.getTransactionHash())); requestClaim.setTransactionSubmitTime(LocalDateTime.now()); requestRepository.save(request); requestClaimRepository.save(requestClaim); } catch (final Exception ex) { throw new IllegalArgumentException("Unable to submit claim transaction: " + ex.getMessage()); } }
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) public void onRequestClaimPending(final ClaimRequestedEvent claimRequestedEvent) { telegramService.sendMessageToChannel("Holy Moly, " + claimRequestedEvent.getRequestClaim().getSolver() + " just requested an approval for a claim! (" + claimRequestedEvent.getRequestClaim().getRequestId() + ")"); } }
@Test public void claim() { Principal solver = PrincipalMother.davyvanroy(); UserClaimRequest userClaimRequest = UserClaimRequestMother.kazuki43zooApiStub().build(); Request request = RequestMother.freeCodeCampNoUserStories().build(); when(requestRepository.findByPlatformAndPlatformId(userClaimRequest.getPlatform(), userClaimRequest.getPlatformId())) .thenReturn(Optional.of(request)); RequestDto requestDto = RequestDtoMother.freeCodeCampNoUserStories(); when(mappers.map(Request.class, RequestDto.class, request)).thenReturn(requestDto); when(githubClaimResolver.getUserPlatformUsername(solver, request.getIssueInformation().getPlatform())) .thenReturn(Optional.of(solver.getName())); when(githubClaimResolver.canClaim(solver, requestDto)).thenReturn(true); claimService.claim(solver, userClaimRequest); assertThat(request.getStatus()).isEqualTo(RequestStatus.CLAIM_REQUESTED); verify(requestRepository).save(request); ArgumentCaptor<RequestClaim> requestClaimArgumentCaptor = ArgumentCaptor.forClass(RequestClaim.class); verify(requestClaimRepository).save(requestClaimArgumentCaptor.capture()); RequestClaim requestClaim = requestClaimArgumentCaptor.getValue(); assertThat(requestClaim.getRequestId()).isEqualTo(request.getId()); assertThat(requestClaim.getAddress()).isEqualTo(userClaimRequest.getAddress()); assertThat(requestClaim.getSolver()).isEqualTo(solver.getName()); assertThat(requestClaim.getFlagged()).isFalse(); assertThat(requestClaim.getStatus()).isEqualTo(ClaimRequestStatus.PENDING); }
@Override public RequestClaimDto map(RequestClaim r) { RequestClaimDto dto = delegate.map(r); if (dto != null) { RequestDto request = requestService.findRequest(r.getRequestId()); dto.setUrl(createLink(request.getIssueInformation())); dto.setTitle(request.getIssueInformation().getTitle()); dto.setFundRequestUrl(createFundRequestLink(request.getId())); } return dto; }
@Test public void map() { final RequestClaim requestClaim = RequestClaim.builder() .id(657L) .address("0xE51551D3B11eF7559164D051D9714E59A1c4E486") .status(ClaimRequestStatus.PENDING) .flagged(false) .requestId(9L) .solver("ghjgfhg") .build(); final RequestClaimDto requestClaimDto = new RequestClaimDto(); final RequestDto requestDto = RequestDtoMother.fundRequestArea51(); final IssueInformationDto issueInformation = requestDto.getIssueInformation(); when(delegate.map(requestClaim)).thenReturn(requestClaimDto); when(requestService.findRequest(requestClaim.getRequestId())).thenReturn(requestDto); final RequestClaimDto result = decorator.map(requestClaim); assertThat(result.getTitle()).isEqualTo(requestDto.getIssueInformation().getTitle()); assertThat(result.getUrl()).isEqualTo("https://github.com/" + issueInformation.getOwner() + "/" + issueInformation.getRepo() + "/issues/" + issueInformation.getNumber()); assertThat(result.getFundRequestUrl()).isEqualTo("https://fundrequest.io/requests/" + requestDto.getId()); }