package com.fsck.k9.mail.store.imap; import com.fsck.k9.mail.K9LibRobolectricTestRunner; import java.util.HashMap; import java.util.Map; import org.junit.Test; import org.junit.runner.RunWith; 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; @RunWith(K9LibRobolectricTestRunner.class) public class CopyUidResponseTest { @Test public void parse_withCopyUidResponse_shouldCreateUidMapping() throws Exception { ImapResponse imapResponse = createImapResponse("x OK [COPYUID 1 1,3:5 7:10] Success"); CopyUidResponse result = CopyUidResponse.parse(imapResponse); assertNotNull(result); assertEquals(createUidMapping("1=7", "3=8", "4=9", "5=10"), result.getUidMapping()); } @Test public void parse_withUntaggedResponse_shouldReturnNull() throws Exception { ImapResponse imapResponse = createImapResponse("* OK [COPYUID 1 1,3:5 7:10] Success"); CopyUidResponse result = CopyUidResponse.parse(imapResponse); assertNull(result); } @Test public void parse_withTooShortResponse_shouldReturnNull() throws Exception { ImapResponse imapResponse = createImapResponse("x OK"); CopyUidResponse result = CopyUidResponse.parse(imapResponse); assertNull(result); } @Test public void parse_withoutOkResponse_shouldReturnNull() throws Exception { ImapResponse imapResponse = createImapResponse("x BYE Logout"); CopyUidResponse result = CopyUidResponse.parse(imapResponse); assertNull(result); } @Test public void parse_withoutResponseTextList_shouldReturnNull() throws Exception { ImapResponse imapResponse = createImapResponse("x OK Success"); CopyUidResponse result = CopyUidResponse.parse(imapResponse); assertNull(result); } @Test public void parse_withResponseTextListTooShort_shouldReturnNull() throws Exception { ImapResponse imapResponse = createImapResponse("x OK [A B C] Success"); CopyUidResponse result = CopyUidResponse.parse(imapResponse); assertNull(result); } @Test public void parse_withoutCopyUidResponse_shouldReturnNull() throws Exception { ImapResponse imapResponse = createImapResponse("x OK [A B C D] Success"); CopyUidResponse result = CopyUidResponse.parse(imapResponse); assertNull(result); } @Test public void parse_withNonStringCopyUidArgumentOne_shouldReturnNull() throws Exception { ImapResponse imapResponse = createImapResponse("x OK [COPYUID () C D] Success"); CopyUidResponse result = CopyUidResponse.parse(imapResponse); assertNull(result); } @Test public void parse_withNonStringCopyUidArgumentTwo_shouldReturnNull() throws Exception { ImapResponse imapResponse = createImapResponse("x OK [COPYUID B () D] Success"); CopyUidResponse result = CopyUidResponse.parse(imapResponse); assertNull(result); } @Test public void parse_withNonStringCopyUidArgumentThree_shouldReturnNull() throws Exception { ImapResponse imapResponse = createImapResponse("x OK [COPYUID B C ()] Success"); CopyUidResponse result = CopyUidResponse.parse(imapResponse); assertNull(result); } @Test public void parse_withNonNumberCopyUidArguments_shouldReturnNull() throws Exception { ImapResponse imapResponse = createImapResponse("x OK [COPYUID B C D] Success"); CopyUidResponse result = CopyUidResponse.parse(imapResponse); assertNull(result); } @Test public void parse_withUnbalancedCopyUidArguments_shouldReturnNull() throws Exception { ImapResponse imapResponse = createImapResponse("x OK [COPYUID B 1 1,2] Success"); CopyUidResponse result = CopyUidResponse.parse(imapResponse); assertNull(result); } private Map<String, String> createUidMapping(String... values) { Map<String, String> mapping = new HashMap<>(values.length); for (String value : values) { String[] parts = value.split("="); String oldUid = parts[0]; String newUid = parts[1]; mapping.put(oldUid, newUid); } return mapping; } }