package be.drissamri.service.verifier; import be.drissamri.config.safebrowsing.phishtank.PhishTankConfig; import be.drissamri.config.safebrowsing.phishtank.PhishTankSettings; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.util.LinkedMultiValueMap; import org.springframework.web.client.RestTemplate; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.BDDMockito.given; import static org.mockito.Matchers.*; public class PhishTankUrlVerifierTest { private PhishTankUrlVerifier phishTankUrlVerifier; @Mock private RestTemplate restTemplate; private static final String LONG_URL = "http://www.drissamri.be"; private static final String JSON_PHISH_RESULT = "{ 'results': { 'in_database': true } }"; private static final String JSON_SAFE_RESULT = "{ 'results': { 'in_database': false } }"; private static final String JSON_UNKOWN_RESULT = "{ }"; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); phishTankUrlVerifier = new PhishTankUrlVerifier( restTemplate, new PhishTankConfig( new PhishTankSettings("", "") )); } @Test public void shouldReturnFalseForPhishingLink() { ResponseEntity<String> verifierResult = new ResponseEntity<>(JSON_PHISH_RESULT, HttpStatus.OK); given(restTemplate.postForEntity(anyString(), any(LinkedMultiValueMap.class), eq(String.class))).willReturn(verifierResult); boolean result = phishTankUrlVerifier.isSafe(LONG_URL); assertThat(result).isFalse(); } @Test public void shouldReturnTrueForSafeLink() { ResponseEntity<String> verifierResult = new ResponseEntity<>(JSON_SAFE_RESULT, HttpStatus.OK); given(restTemplate.postForEntity(anyString(), any(LinkedMultiValueMap.class), eq(String.class))).willReturn(verifierResult); boolean result = phishTankUrlVerifier.isSafe(LONG_URL); assertThat(result).isTrue(); } @Test public void shouldReturnTrueWhenExceedingApiLimit() { ResponseEntity<String> verifierResult = new ResponseEntity<>(JSON_SAFE_RESULT, HttpStatus.BANDWIDTH_LIMIT_EXCEEDED); given(restTemplate.postForEntity(anyString(), any(LinkedMultiValueMap.class), eq(String.class))).willReturn(verifierResult); boolean result = phishTankUrlVerifier.isSafe(LONG_URL); assertThat(result).isTrue(); } @Test public void shouldReturnTrueForUnknownBody() { ResponseEntity<String> verifierResult = new ResponseEntity<>(JSON_UNKOWN_RESULT, HttpStatus.OK); given(restTemplate.postForEntity(anyString(), any(LinkedMultiValueMap.class), eq(String.class))).willReturn(verifierResult); boolean result = phishTankUrlVerifier.isSafe(LONG_URL); assertThat(result).isTrue(); } }