1 /** 2 * Copyright (c) 2013-2023, jcabi.com 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 1) Redistributions of source code must retain the above 8 * copyright notice, this list of conditions and the following 9 * disclaimer. 2) Redistributions in binary form must reproduce the above 10 * copyright notice, this list of conditions and the following 11 * disclaimer in the documentation and/or other materials provided 12 * with the distribution. 3) Neither the name of the jcabi.com nor 13 * the names of its contributors may be used to endorse or promote 14 * products derived from this software without specific prior written 15 * permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT 19 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 21 * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 22 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 26 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 28 * OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 package com.jcabi.github; 31 32 import com.jcabi.http.mock.MkAnswer; 33 import com.jcabi.http.mock.MkContainer; 34 import com.jcabi.http.mock.MkGrizzlyContainer; 35 import com.jcabi.http.request.ApacheRequest; 36 import com.jcabi.http.request.FakeRequest; 37 import java.net.HttpURLConnection; 38 import java.util.Collections; 39 import javax.json.Json; 40 import org.hamcrest.MatcherAssert; 41 import org.hamcrest.Matchers; 42 import org.junit.Rule; 43 import org.junit.Test; 44 45 /** 46 * Test case for {@link RtUserEmails}. 47 * @author Alexander Sinyagin (sinyagin.alexander@gmail.com) 48 * @version $Id: 4585bc1dece79c7c124d704c1772cf8b3ad17000 $ 49 */ 50 public final class RtUserEmailsTest { 51 52 /** 53 * The rule for skipping test if there's BindException. 54 * @checkstyle VisibilityModifierCheck (3 lines) 55 */ 56 @Rule 57 public final transient RandomPort resource = new RandomPort(); 58 /** 59 * RtUserEmails can fetch emails. 60 * @throws Exception If some problem inside 61 */ 62 @Test 63 public void fetchesEmails() throws Exception { 64 final String email = "test@email.com"; 65 final UserEmails emails = new RtUserEmails( 66 new FakeRequest().withBody( 67 Json.createArrayBuilder() 68 .add(Json.createObjectBuilder().add("email", email)) 69 .build().toString() 70 ) 71 ); 72 MatcherAssert.assertThat( 73 emails.iterate().iterator().next(), Matchers.equalTo(email) 74 ); 75 } 76 77 /** 78 * RtUserEmails can add emails. 79 * @throws Exception If some problem inside 80 */ 81 @Test 82 public void addsEmails() throws Exception { 83 final String email = "test1@email.com"; 84 final MkContainer container = new MkGrizzlyContainer().next( 85 new MkAnswer.Simple( 86 HttpURLConnection.HTTP_CREATED, 87 String.format("[{\"email\":\"%s\"}]", email) 88 ) 89 ); 90 container.start(this.resource.port()); 91 try { 92 final UserEmails emails = new RtUserEmails( 93 new ApacheRequest(container.home()) 94 ); 95 MatcherAssert.assertThat( 96 emails.add(Collections.singletonList(email)).iterator().next(), 97 Matchers.equalTo(email) 98 ); 99 } finally { 100 container.stop(); 101 } 102 } 103 104 /** 105 * RtUserEmails can remove emails. 106 * @throws Exception If some problem inside 107 */ 108 @Test 109 public void removesEmails() throws Exception { 110 final UserEmails emails = new RtUserEmails( 111 new FakeRequest().withStatus(HttpURLConnection.HTTP_NO_CONTENT) 112 ); 113 emails.remove(Collections.singletonList("test2@email.com")); 114 } 115 116 }