package com.vaguehope.onosendai.config;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.endsWith;
import static org.hamcrest.Matchers.startsWith;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Test;
import com.vaguehope.onosendai.util.CollectionHelper;
public class ColumnTest {
@Test
public void itRoundTrips () throws Exception {
Column c = new Column(12, "title", new ColumnFeed("accountid", "resource"), 15, CollectionHelper.setOf(1, 2), NotificationStyle.DEFAULT, InlineMediaStyle.NONE, false);
String j = c.toJson().toString(2);
Column c1 = Column.parseJson(j);
assertEquals(c, c1);
}
@Test
public void itClonesWithNewId () throws Exception {
Column c = new Column(12, "title", new ColumnFeed("accountid", "resource"), 15, CollectionHelper.setOf(1, 2), NotificationStyle.DEFAULT, InlineMediaStyle.NONE, false);
Column c1 = new Column(89, c);
Column c2 = new Column(12, c1);
assertEquals(c, c2);
}
@Test
public void itAddsAccountToLaterColumn () throws Exception {
final Account a1 = mock(Account.class);
final Account a2 = mock(Account.class);
final Account a3 = mock(Account.class);
when(a1.getId()).thenReturn("accountid");
when(a2.getId()).thenReturn("newaccountid");
final Column c = new Column(12, "title",
CollectionHelper.setOf(
new ColumnFeed(a1.getId(), "resource"),
new ColumnFeed(null, InternalColumnType.LATER.name())),
15, CollectionHelper.setOf(1, 2), NotificationStyle.DEFAULT, InlineMediaStyle.NONE, false);
final Column c1 = c.replaceAccount(a2, InternalColumnType.LATER);
assertEquals(CollectionHelper.setOf(
new ColumnFeed(a1.getId(), "resource"),
new ColumnFeed("newaccountid", InternalColumnType.LATER.name())),
c1.getFeeds());
final Column c2 = c.replaceAccount(a3, InternalColumnType.LATER);
assertEquals(c, c2);
}
@Test
public void itClonesWithNewExcludeColumnIds () throws Exception {
Column c = new Column(12, "title", new ColumnFeed("accountid", "resource"), 15, CollectionHelper.setOf(1, 2), NotificationStyle.DEFAULT, InlineMediaStyle.NONE, false);
Column c1 = new Column(CollectionHelper.setOf(2), c);
Column c2 = new Column(CollectionHelper.setOf(1, 2), c1);
assertEquals(c, c2);
}
@Test
public void itEqualsChecksExcludes () throws Exception {
Column c = new Column(12, "title", new ColumnFeed("accountid", "resource"), 15, CollectionHelper.setOf(1, 2), NotificationStyle.DEFAULT, InlineMediaStyle.NONE, false);
assertFalse(c.equals(new Column(12, "title", new ColumnFeed("accountid", "resource"), 15, CollectionHelper.setOf(1, 1), NotificationStyle.DEFAULT, InlineMediaStyle.NONE, false)));
}
@Test
public void itEqualsChecksNotify () throws Exception {
Column c = new Column(12, "title", new ColumnFeed("accountid", "resource"), 15, CollectionHelper.setOf(1, 2), NotificationStyle.DEFAULT, InlineMediaStyle.NONE, false);
assertFalse(c.equals(new Column(12, "title", new ColumnFeed("accountid", "resource"), 15, CollectionHelper.setOf(1, 2), null, InlineMediaStyle.NONE, false)));
}
@Test
public void itParsesComplexNotificationStyle () throws Exception {
NotificationStyle ns = new NotificationStyle(true, false, true);
Column c = new Column(12, "title", new ColumnFeed("accountid", "resource"), 15, CollectionHelper.setOf(1, 2), ns, InlineMediaStyle.NONE, false);
String j = c.toJson().toString(2);
Column c1 = Column.parseJson(j);
assertEquals(c, c1);
}
@Test
public void itDoesNotAllowNegativeIdsWhenParsingJson () throws Exception {
try {
Column.parseJson(new Column(-1, "title", new ColumnFeed("accountid", "resource"), 15, null, NotificationStyle.DEFAULT, InlineMediaStyle.NONE, false).toJson().toString(2));
}
catch (JSONException e) {
assertThat(e.getMessage(), startsWith("Failed to parse column:"));
assertThat(e.getMessage(), endsWith("Column ID must be positive a integer."));
}
}
public void itDefaultsInlineMediaToFalse () throws Exception {
JSONObject j = new Column(12, "title", new ColumnFeed("accountid", "resource"), 15, CollectionHelper.setOf(1, 2), NotificationStyle.DEFAULT, InlineMediaStyle.NONE, false).toJson();
assertEquals(false, j.remove("inline_media"));
Column c = Column.parseJson(j.toString(2));
assertEquals(InlineMediaStyle.NONE, c.getInlineMediaStyle());
}
public void itRoundtripsInlineMediaEnabled () throws Exception {
JSONObject j = new Column(12, "title", new ColumnFeed("accountid", "resource"), 15, CollectionHelper.setOf(1, 2), NotificationStyle.DEFAULT, InlineMediaStyle.INLINE, false).toJson();
Column c = Column.parseJson(j.toString(2));
assertEquals(InlineMediaStyle.INLINE, c.getInlineMediaStyle());
}
public void itRoundtripsInlineMediaSeamless () throws Exception {
JSONObject j = new Column(12, "title", new ColumnFeed("accountid", "resource"), 15, CollectionHelper.setOf(1, 2), NotificationStyle.DEFAULT, InlineMediaStyle.SEAMLESS, false).toJson();
Column c = Column.parseJson(j.toString(2));
assertEquals(InlineMediaStyle.SEAMLESS, c.getInlineMediaStyle());
}
public void itMigratesInlineMediaFalseToNone () throws Exception {
JSONObject j = new Column(12, "title", new ColumnFeed("accountid", "resource"), 15, CollectionHelper.setOf(1, 2), NotificationStyle.DEFAULT, InlineMediaStyle.SEAMLESS, false).toJson();
j.put("inline_media", false);
Column c = Column.parseJson(j.toString(2));
assertEquals(InlineMediaStyle.NONE, c.getInlineMediaStyle());
}
public void itMigratesInlineMediaTrueToInline () throws Exception {
JSONObject j = new Column(12, "title", new ColumnFeed("accountid", "resource"), 15, CollectionHelper.setOf(1, 2), NotificationStyle.DEFAULT, InlineMediaStyle.SEAMLESS, false).toJson();
j.put("inline_media", true);
Column c = Column.parseJson(j.toString(2));
assertEquals(InlineMediaStyle.INLINE, c.getInlineMediaStyle());
}
@Test
public void itRoundTripsMultipleFeeds () throws Exception {
Column c = new Column(12, "title",
CollectionHelper.setOf(
new ColumnFeed("accountid1", "resource1"),
new ColumnFeed("accountid2", "resource2"),
new ColumnFeed("accountid3", "resource3")),
15, CollectionHelper.setOf(1, 2), NotificationStyle.DEFAULT, InlineMediaStyle.NONE, false);
String j = c.toJson().toString(2);
Column c1 = Column.parseJson(j);
assertEquals(c, c1);
}
}