/* * Copyright 2015 Hannes Dorfmann. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.hannesdorfmann.mosby3.sample.mail.model.mail; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import junit.framework.Assert; import org.junit.Before; import org.junit.Test; import rx.Subscriber; import rx.functions.Action1; /** * @author Hannes Dorfmann */ public class MailProviderTest { private MailProvider mailProvider; @Before public void init() { mailProvider = new MailProvider(new TestAccountManager(), new TestMailGenerator()); mailProvider.DELAY = 0; mailProvider.authExceptionEach = 0; mailProvider.errorEach = 0; } @Test public void getMailsByLabel() { String[] labels = { Label.INBOX, Label.SENT, Label.TRASH, Label.SPAM }; for (String label : labels) { final AtomicBoolean sucessful = new AtomicBoolean(false); mailProvider.getMailsOfLabel(label).subscribe(new Subscriber<List<Mail>>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { e.printStackTrace(); Assert.fail("excption thrown" + e.getMessage()); } @Override public void onNext(List<Mail> mails) { Assert.assertEquals(TestMailGenerator.MAILS_PER_LABEL, mails.size()); sucessful.set(true); } }); Assert.assertTrue(sucessful.get()); } } @Test public void getMailById() { final AtomicBoolean mailFound = new AtomicBoolean(false); final int id = 1; mailProvider.getMail(id).subscribe(new Subscriber<Mail>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { Assert.fail("Could not find mail with the id = " + id); } @Override public void onNext(Mail mail) { Assert.assertEquals(id, mail.getId()); mailFound.set(true); } }); Assert.assertTrue(mailFound.get()); // id not exists final AtomicBoolean errorThrown = new AtomicBoolean(false); mailProvider.getMail(-1).subscribe(new Subscriber<Mail>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { Assert.assertTrue(e instanceof NotFoundException); errorThrown.set(true); } @Override public void onNext(Mail mail) { Assert.fail("A mail with id = " + id + " found, but a mail with this id should not exist"); } }); Assert.assertTrue(errorThrown.get()); } @Test public void starMail() { final AtomicBoolean starredMail = new AtomicBoolean(false); final int id = 1; mailProvider.starMail(id, true).subscribe(new Subscriber<Mail>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { e.printStackTrace(); Assert.fail("Error while starring mail with id = " + id); } @Override public void onNext(Mail mail) { Assert.assertEquals(id, mail.getId()); Assert.assertTrue(mail.isStarred()); starredMail.set(true); } }); Assert.assertTrue(starredMail.get()); final AtomicBoolean errorThrown = new AtomicBoolean(false); mailProvider.starMail(-1, true).subscribe(new Subscriber<Mail>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { Assert.assertTrue(e instanceof NotFoundException); errorThrown.set(true); } @Override public void onNext(Mail mail) { Assert.fail("A mail with id = " + id + " has been starred, but a mail with this id should not exist"); } }); Assert.assertTrue(errorThrown.get()); // // Unstar // final AtomicBoolean unStaredMail = new AtomicBoolean(false); mailProvider.starMail(id, false).subscribe(new Subscriber<Mail>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { e.printStackTrace(); Assert.fail("Error while unstaring mail with id = " + id); } @Override public void onNext(Mail mail) { Assert.assertEquals(id, mail.getId()); Assert.assertFalse(mail.isStarred()); unStaredMail.set(true); } }); Assert.assertTrue(unStaredMail.get()); final AtomicBoolean unstarErrorThrown = new AtomicBoolean(false); mailProvider.getMail(-1).subscribe(new Subscriber<Mail>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { Assert.assertTrue(e instanceof NotFoundException); unstarErrorThrown.set(true); } @Override public void onNext(Mail mail) { Assert.fail("A mail with id = " + id + " has been unstarred, but a mail with this id should not exist"); } }); Assert.assertTrue(unstarErrorThrown.get()); } @Test public void changeLabel() { mailProvider.getMail(1).subscribe(new Action1<Mail>() { @Override public void call(Mail mail) { final AtomicBoolean changed = new AtomicBoolean(false); final String newLabel = "foo"; mailProvider.setLabel(mail.getId(), newLabel).subscribe(new Subscriber<Mail>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { e.printStackTrace(); Assert.fail("Error while changing label"); } @Override public void onNext(Mail mail) { Assert.assertEquals(mail.getLabel(), newLabel); changed.set(true); } }); Assert.assertTrue(changed.get()); } }); } @Test public void createMail() { final Mail mail = new Mail(); mail.id(-1); final int id = mailProvider.getLastMailId(); final AtomicBoolean successCalled = new AtomicBoolean(false); mailProvider.addMailWithDelay(mail).subscribe(new Subscriber<Mail>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { e.printStackTrace(); Assert.fail("error occcurred"); } @Override public void onNext(Mail created) { Assert.assertEquals(mail, created); Assert.assertEquals(created.getId(), id + 1); successCalled.set(true); mailProvider.getMail(id).subscribe(new Action1<Mail>() { @Override public void call(Mail queried) { Assert.assertEquals(queried.getId(), id); } }); } }); Assert.assertTrue(successCalled.get()); } }