package com.fsck.k9.mail.store.imap;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
import org.mockito.internal.util.collections.Sets;
import static com.fsck.k9.mail.store.imap.ImapResponseHelper.createImapResponse;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
public class CapabilityResponseTest {
@Test
public void parse_withProperResponseContainingCapabilityCode() throws Exception {
CapabilityResponse result = parse("* OK [CAPABILITY IMAP4rev1 IDLE] Welcome");
assertNotNull(result);
assertEquals(Sets.newSet("IMAP4REV1", "IDLE"), result.getCapabilities());
}
@Test
public void parse_withTaggedResponse_shouldReturnNull() throws Exception {
CapabilityResponse result = parse("1 OK");
assertNull(result);
}
@Test
public void parse_withoutOkResponse_shouldReturnNull() throws Exception {
CapabilityResponse result = parse("* BAD Go Away");
assertNull(result);
}
@Test
public void parse_withOkResponseWithoutList_shouldReturnNull() throws Exception {
CapabilityResponse result = parse("* OK Welcome");
assertNull(result);
}
@Test
public void parse_withProperCapabilityResponse() throws Exception {
ImapList list = createImapResponse("* CAPABILITY IMAP4rev1 STARTTLS AUTH=GSSAPI XPIG-LATIN");
CapabilityResponse result = CapabilityResponse.parse(list);
assertNotNull(result);
assertEquals(Sets.newSet("IMAP4REV1", "STARTTLS", "AUTH=GSSAPI", "XPIG-LATIN"), result.getCapabilities());
}
@Test
public void parse_withListInCapabilityResponse_shouldReturnNull() throws Exception {
ImapList list = createImapResponse("* CAPABILITY IMAP4rev1 []");
CapabilityResponse result = CapabilityResponse.parse(list);
assertNull(result);
}
@Test
public void parse_withoutCapabilityResponse_shouldReturnNull() throws Exception {
ImapList list = createImapResponse("* EXISTS 1");
CapabilityResponse result = CapabilityResponse.parse(list);
assertNull(result);
}
@Test
public void parse_withEmptyResponseList_shouldReturnNull() throws Exception {
List<ImapResponse> responses = Collections.emptyList();
CapabilityResponse result = CapabilityResponse.parse(responses);
assertNull(result);
}
@Test
public void parse_withoutCapabilityResponseInResponseList_shouldReturnNull() throws Exception {
List<ImapResponse> responses = Collections.singletonList(createImapResponse("* EXISTS 42"));
CapabilityResponse result = CapabilityResponse.parse(responses);
assertNull(result);
}
@Test
public void parse_withSingleCapabilityResponseInResponseList() throws Exception {
ImapResponse response = createImapResponse("* CAPABILITY IMAP4rev1 LOGINDISABLED STARTTLS");
List<ImapResponse> responses = Collections.singletonList(response);
CapabilityResponse result = CapabilityResponse.parse(responses);
assertNotNull(result);
assertEquals(Sets.newSet("IMAP4REV1", "STARTTLS", "LOGINDISABLED"), result.getCapabilities());
}
@Test
public void parse_withCapabilityResponseInResponseList() throws Exception {
ImapResponse responseOne = createImapResponse("* EXPUNGE 4");
ImapResponse responseTwo = createImapResponse("* CAPABILITY IMAP4rev1 IDLE");
List<ImapResponse> responses = Arrays.asList(responseOne, responseTwo);
CapabilityResponse result = CapabilityResponse.parse(responses);
assertNotNull(result);
assertEquals(Sets.newSet("IMAP4REV1", "IDLE"), result.getCapabilities());
}
private CapabilityResponse parse(String responseText) throws IOException {
ImapResponse response = createImapResponse(responseText);
List<ImapResponse> responses = Collections.singletonList(response);
return CapabilityResponse.parse(responses);
}
}